X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/681be2ef80274e6c39b243922a594c59e4983dab..74a8f67d96591cec101def2a7d47c64072aff7fd:/src/msw/notebook.cpp diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index f5487c26b9..1879bb2ba3 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -117,12 +117,7 @@ static bool HasTroubleWithNonTopTabs() // event table // ---------------------------------------------------------------------------- -#include "wx/listimpl.cpp" - -WX_DEFINE_LIST( wxNotebookPageInfoList ) - BEGIN_EVENT_TABLE(wxNotebook, wxBookCtrlBase) - EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, wxNotebook::OnSelChange) EVT_SIZE(wxNotebook::OnSize) EVT_NAVIGATION_KEY(wxNotebook::OnNavigationKey) @@ -132,89 +127,6 @@ BEGIN_EVENT_TABLE(wxNotebook, wxBookCtrlBase) #endif // USE_NOTEBOOK_ANTIFLICKER END_EVENT_TABLE() -#if wxUSE_EXTENDED_RTTI -WX_DEFINE_FLAGS( wxNotebookStyle ) - -wxBEGIN_FLAGS( wxNotebookStyle ) - // new style border flags, we put them first to - // use them for streaming out - wxFLAGS_MEMBER(wxBORDER_SIMPLE) - wxFLAGS_MEMBER(wxBORDER_SUNKEN) - wxFLAGS_MEMBER(wxBORDER_DOUBLE) - wxFLAGS_MEMBER(wxBORDER_RAISED) - wxFLAGS_MEMBER(wxBORDER_STATIC) - wxFLAGS_MEMBER(wxBORDER_NONE) - - // old style border flags - wxFLAGS_MEMBER(wxSIMPLE_BORDER) - wxFLAGS_MEMBER(wxSUNKEN_BORDER) - wxFLAGS_MEMBER(wxDOUBLE_BORDER) - wxFLAGS_MEMBER(wxRAISED_BORDER) - wxFLAGS_MEMBER(wxSTATIC_BORDER) - wxFLAGS_MEMBER(wxBORDER) - - // standard window styles - wxFLAGS_MEMBER(wxTAB_TRAVERSAL) - wxFLAGS_MEMBER(wxCLIP_CHILDREN) - wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW) - wxFLAGS_MEMBER(wxWANTS_CHARS) - wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE) - wxFLAGS_MEMBER(wxALWAYS_SHOW_SB ) - wxFLAGS_MEMBER(wxVSCROLL) - wxFLAGS_MEMBER(wxHSCROLL) - - wxFLAGS_MEMBER(wxNB_FIXEDWIDTH) - wxFLAGS_MEMBER(wxBK_DEFAULT) - wxFLAGS_MEMBER(wxBK_TOP) - wxFLAGS_MEMBER(wxBK_LEFT) - wxFLAGS_MEMBER(wxBK_RIGHT) - wxFLAGS_MEMBER(wxBK_BOTTOM) - wxFLAGS_MEMBER(wxNB_NOPAGETHEME) - wxFLAGS_MEMBER(wxNB_FLAT) - -wxEND_FLAGS( wxNotebookStyle ) - -IMPLEMENT_DYNAMIC_CLASS_XTI(wxNotebook, wxBookCtrlBase,"wx/notebook.h") -IMPLEMENT_DYNAMIC_CLASS_XTI(wxNotebookPageInfo, wxObject , "wx/notebook.h" ) - -wxCOLLECTION_TYPE_INFO( wxNotebookPageInfo * , wxNotebookPageInfoList ) ; - -template<> void wxCollectionToVariantArray( wxNotebookPageInfoList const &theList, wxxVariantArray &value) -{ - wxListCollectionToVariantArray( theList , value ) ; -} - -wxBEGIN_PROPERTIES_TABLE(wxNotebook) - wxEVENT_PROPERTY( PageChanging , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING , wxBookCtrlEvent ) - wxEVENT_PROPERTY( PageChanged , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED , wxBookCtrlEvent ) - - wxPROPERTY_COLLECTION( PageInfos , wxNotebookPageInfoList , wxNotebookPageInfo* , AddPageInfo , GetPageInfos , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) - wxPROPERTY_FLAGS( WindowStyle , wxNotebookStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style -wxEND_PROPERTIES_TABLE() - -wxBEGIN_HANDLERS_TABLE(wxNotebook) -wxEND_HANDLERS_TABLE() - -wxCONSTRUCTOR_5( wxNotebook , wxWindow* , Parent , wxWindowID , Id , wxPoint , Position , wxSize , Size , long , WindowStyle) - - -wxBEGIN_PROPERTIES_TABLE(wxNotebookPageInfo) - wxREADONLY_PROPERTY( Page , wxNotebookPage* , GetPage , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) - wxREADONLY_PROPERTY( Text , wxString , GetText , wxString() , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) - wxREADONLY_PROPERTY( Selected , bool , GetSelected , false, 0 /*flags*/ , wxT("Helpstring") , wxT("group") ) - wxREADONLY_PROPERTY( ImageId , int , GetImageId , -1 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) -wxEND_PROPERTIES_TABLE() - -wxBEGIN_HANDLERS_TABLE(wxNotebookPageInfo) -wxEND_HANDLERS_TABLE() - -wxCONSTRUCTOR_4( wxNotebookPageInfo , wxNotebookPage* , Page , wxString , Text , bool , Selected , int , ImageId ) - -#else -IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxBookCtrlBase) -IMPLEMENT_DYNAMIC_CLASS(wxNotebookPageInfo, wxObject ) -#endif - // ============================================================================ // implementation // ============================================================================ @@ -223,19 +135,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxNotebookPageInfo, wxObject ) // wxNotebook construction // ---------------------------------------------------------------------------- -const wxNotebookPageInfoList& wxNotebook::GetPageInfos() const -{ - wxNotebookPageInfoList* list = const_cast< wxNotebookPageInfoList* >( &m_pageInfos ) ; - WX_CLEAR_LIST( wxNotebookPageInfoList , *list ) ; - for( size_t i = 0 ; i < GetPageCount() ; ++i ) - { - wxNotebookPageInfo *info = new wxNotebookPageInfo() ; - info->Create( const_cast(this)->GetPage(i) , GetPageText(i) , GetSelection() == int(i) , GetPageImage(i) ) ; - list->Append( info ) ; - } - return m_pageInfos ; -} - // common part of all ctors void wxNotebook::Init() { @@ -455,9 +354,13 @@ int wxNotebook::SetSelection(size_t nPage) if ( SendPageChangingEvent(nPage) ) { // program allows the page change - SendPageChangedEvent(m_selection, nPage); + const int selectionOld = m_selection; + + UpdateSelection(nPage); TabCtrl_SetCurSel(GetHwnd(), nPage); + + SendPageChangedEvent(selectionOld, nPage); } } @@ -842,16 +745,7 @@ bool wxNotebook::InsertPage(size_t nPage, m_selection++; } - // some page should be selected: either this one or the first one if there - // is still no selection - int selNew = wxNOT_FOUND; - if ( bSelect ) - selNew = nPage; - else if ( m_selection == wxNOT_FOUND ) - selNew = 0; - - if ( selNew != wxNOT_FOUND ) - SetSelection(selNew); + DoSetSelectionAfterInsertion(nPage, bSelect); InvalidateBestSize(); @@ -1091,18 +985,6 @@ void wxNotebook::OnSize(wxSizeEvent& event) event.Skip(); } -void wxNotebook::OnSelChange(wxBookCtrlEvent& event) -{ - // is it our tab control? - if ( event.GetEventObject() == this ) - { - UpdateSelection(event.GetSelection()); - } - - // we want to give others a chance to process this message as well - event.Skip(); -} - void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event) { if ( event.IsWindowChange() ) { @@ -1264,28 +1146,6 @@ void wxNotebook::UpdateBgBrush() } } -WXHBRUSH wxNotebook::MSWGetBgBrushForChild(WXHDC hDC, wxWindow *child) -{ - if ( m_hbrBackground ) - { - // before drawing with the background brush, we need to position it - // correctly - RECT rc; - ::GetWindowRect(GetHwndOf(child), &rc); - - ::MapWindowPoints(NULL, GetHwnd(), (POINT *)&rc, 1); - - if ( !::SetBrushOrgEx((HDC)hDC, -rc.left, -rc.top, NULL) ) - { - wxLogLastError(wxT("SetBrushOrgEx(notebook bg brush)")); - } - - return m_hbrBackground; - } - - return wxNotebookBase::MSWGetBgBrushForChild(hDC, child); -} - bool wxNotebook::MSWPrintChild(WXHDC hDC, wxWindow *child) { // solid background colour overrides themed background drawing @@ -1454,6 +1314,11 @@ bool wxNotebook::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM* result) event.SetEventObject(this); event.SetInt(idCtrl); + // Change the selection before generating the event as its handler should + // already see the new page selected. + if ( hdr->code == TCN_SELCHANGE ) + UpdateSelection(event.GetSelection()); + bool processed = HandleWindowEvent(event); *result = !event.IsAllowed(); return processed;