X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8138f406a26d9bbbb3d841af84af85d1d8cb5ea1..c22bbd087aa273141e0e1e3c69e2a42a0e633f75:/src/msw/notebook.cpp diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index 90edb491b3..4b3c6e0aee 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -122,7 +122,6 @@ static bool HasTroubleWithNonTopTabs() 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) @@ -240,7 +239,6 @@ const wxNotebookPageInfoList& wxNotebook::GetPageInfos() const void wxNotebook::Init() { m_imageList = NULL; - m_nSelection = wxNOT_FOUND; #if wxUSE_UXTHEME m_hbrBackground = NULL; @@ -451,24 +449,28 @@ int wxNotebook::SetSelection(size_t nPage) { wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") ); - if ( m_nSelection == wxNOT_FOUND || nPage != (size_t)m_nSelection ) + if ( m_selection == wxNOT_FOUND || nPage != (size_t)m_selection ) { if ( SendPageChangingEvent(nPage) ) { // program allows the page change - SendPageChangedEvent(m_nSelection, nPage); + const int selectionOld = m_selection; + + UpdateSelection(nPage); TabCtrl_SetCurSel(GetHwnd(), nPage); + + SendPageChangedEvent(selectionOld, nPage); } } - return m_nSelection; + return m_selection; } void wxNotebook::UpdateSelection(int selNew) { - if ( m_nSelection != wxNOT_FOUND ) - m_pages[m_nSelection]->Show(false); + if ( m_selection != wxNOT_FOUND ) + m_pages[m_selection]->Show(false); if ( selNew != wxNOT_FOUND ) { @@ -486,16 +488,16 @@ void wxNotebook::UpdateSelection(int selNew) if ( ::IsWindowVisible(GetHwnd()) ) SetFocus(); - m_nSelection = selNew; + m_selection = selNew; } int wxNotebook::ChangeSelection(size_t nPage) { wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") ); - const int selOld = m_nSelection; + const int selOld = m_selection; - if ( m_nSelection == wxNOT_FOUND || nPage != (size_t)m_nSelection ) + if ( m_selection == wxNOT_FOUND || nPage != (size_t)m_selection ) { TabCtrl_SetCurSel(GetHwnd(), nPage); @@ -697,7 +699,7 @@ wxNotebookPage *wxNotebook::DoRemovePage(size_t nPage) if ( m_pages.IsEmpty() ) { // no selection any more, the notebook becamse empty - m_nSelection = wxNOT_FOUND; + m_selection = wxNOT_FOUND; } else // notebook still not empty { @@ -708,22 +710,22 @@ wxNotebookPage *wxNotebook::DoRemovePage(size_t nPage) // Because it could be that the slection index changed // we need to update it. // Note: this does not mean the selection it self changed. - m_nSelection = selNew; - m_pages[m_nSelection]->Refresh(); + m_selection = selNew; + m_pages[m_selection]->Refresh(); } - else if (int(nPage) == m_nSelection) + else if (int(nPage) == m_selection) { // The selection was deleted. // Determine new selection. - if (m_nSelection == int(GetPageCount())) - selNew = m_nSelection - 1; + if (m_selection == int(GetPageCount())) + selNew = m_selection - 1; else - selNew = m_nSelection; + selNew = m_selection; - // m_nSelection must be always valid so reset it before calling + // m_selection must be always valid so reset it before calling // SetSelection() - m_nSelection = wxNOT_FOUND; + m_selection = wxNOT_FOUND; SetSelection(selNew); } else @@ -747,7 +749,7 @@ bool wxNotebook::DeleteAllPages() TabCtrl_DeleteAllItems(GetHwnd()); - m_nSelection = wxNOT_FOUND; + m_selection = wxNOT_FOUND; InvalidateBestSize(); return true; @@ -785,7 +787,7 @@ bool wxNotebook::InsertPage(size_t nPage, if ( !strText.empty() ) { tcItem.mask |= TCIF_TEXT; - tcItem.pszText = (wxChar *)strText.wx_str(); // const_cast + tcItem.pszText = const_cast(strText.wx_str()); } // hide the page: unless it is selected, it shouldn't be shown (and if it @@ -837,22 +839,13 @@ bool wxNotebook::InsertPage(size_t nPage, // if the inserted page is before the selected one, we must update the // index of the selected page - if ( int(nPage) <= m_nSelection ) + if ( int(nPage) <= m_selection ) { // one extra page added - m_nSelection++; + 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_nSelection == wxNOT_FOUND ) - selNew = 0; - - if ( selNew != wxNOT_FOUND ) - SetSelection(selNew); + DoSetSelectionAfterInsertion(nPage, bSelect); InvalidateBestSize(); @@ -1092,18 +1085,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() ) { @@ -1149,14 +1130,14 @@ void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event) // page but only if entering notebook page (i.e. direction is // backwards (Shift-TAB) comething from out-of-notebook, or // direction is forward (TAB) from ourselves), - if ( m_nSelection != wxNOT_FOUND && + if ( m_selection != wxNOT_FOUND && (!event.GetDirection() || isFromSelf) ) { // so that the page knows that the event comes from it's parent // and is being propagated downwards event.SetEventObject(this); - wxWindow *page = m_pages[m_nSelection]; + wxWindow *page = m_pages[m_selection]; if ( !page->HandleWindowEvent(event) ) { page->SetFocus(); @@ -1451,11 +1432,14 @@ bool wxNotebook::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM* result) } event.SetSelection(TabCtrl_GetCurSel(GetHwnd())); - event.SetOldSelection(m_nSelection); + event.SetOldSelection(m_selection); event.SetEventObject(this); event.SetInt(idCtrl); bool processed = HandleWindowEvent(event); + if ( hdr->code == TCN_SELCHANGE ) + UpdateSelection(event.GetSelection()); + *result = !event.IsAllowed(); return processed; }