X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2ce7af354a12de8cf0d80d27f6958c6ccd95f766..a06bb527dd58cb3b0aec62d0bce0b03aade10140:/src/univ/notebook.cpp diff --git a/src/univ/notebook.cpp b/src/univ/notebook.cpp index c1d4f7fdc0..26916b958d 100644 --- a/src/univ/notebook.cpp +++ b/src/univ/notebook.cpp @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "univnotebook.h" #endif @@ -212,6 +212,17 @@ int wxNotebook::SetSelection(int nPage) return m_sel; } + // event handling + wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId); + event.SetSelection(nPage); + event.SetOldSelection(m_sel); + event.SetEventObject(this); + if ( GetEventHandler()->ProcessEvent(event) && !event.IsAllowed() ) + { + // program doesn't allow the page change + return m_sel; + } + // we need to change m_sel first, before calling RefreshTab() below as // otherwise the previously selected tab wouldn't be redrawn properly under // wxGTK which calls Refresh() immediately and not during the next event @@ -255,33 +266,11 @@ int wxNotebook::SetSelection(int nPage) m_pages[m_sel]->Show(); } - return selOld; -} - -void wxNotebook::ChangePage(int nPage) -{ - wxCHECK_RET( IS_VALID_PAGE(nPage), _T("invalid notebook page") ); - - if ( (size_t)nPage == m_sel ) - { - // nothing to do - return; - } - - wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId); - event.SetSelection(nPage); - event.SetOldSelection(m_sel); - event.SetEventObject(this); - if ( GetEventHandler()->ProcessEvent(event) && !event.IsAllowed() ) - { - // program doesn't allow the page change - return; - } - - SetSelection(nPage); - + // event handling event.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED); GetEventHandler()->ProcessEvent(event); + + return selOld; } // ---------------------------------------------------------------------------- @@ -585,8 +574,11 @@ void wxNotebook::DoDraw(wxControlRenderer *renderer) // wxNotebook geometry // ---------------------------------------------------------------------------- -int wxNotebook::HitTest(const wxPoint& pt) const +int wxNotebook::HitTest(const wxPoint& pt, long *flags) const { + if ( flags ) + *flags = wxNB_HITTEST_NOWHERE; + // first check that it is in this window at all if ( !GetClientRect().Inside(pt) ) { @@ -627,7 +619,15 @@ int wxNotebook::HitTest(const wxPoint& pt) const GetTabSize(n, &rectTabs.width, &rectTabs.height); if ( rectTabs.Inside(pt) ) + { + if ( flags ) + { + // TODO: be more precise + *flags = wxNB_HITTEST_ONITEM; + } + return n; + } // move the rectTabs to the next tab if ( IsVertical() ) @@ -1292,11 +1292,11 @@ bool wxNotebook::PerformAction(const wxControlAction& action, const wxString& strArg) { if ( action == wxACTION_NOTEBOOK_NEXT ) - ChangePage(GetNextPage(TRUE)); + SetSelection(GetNextPage(TRUE)); else if ( action == wxACTION_NOTEBOOK_PREV ) - ChangePage(GetNextPage(FALSE)); + SetSelection(GetNextPage(FALSE)); else if ( action == wxACTION_NOTEBOOK_GOTO ) - ChangePage((int)numArg); + SetSelection((int)numArg); else return wxControl::PerformAction(action, numArg, strArg); @@ -1389,8 +1389,9 @@ bool wxStdNotebookInputHandler::HandleMouseMove(wxInputConsumer *consumer, return wxStdInputHandler::HandleMouseMove(consumer, event); } -bool wxStdNotebookInputHandler::HandleFocus(wxInputConsumer *consumer, - const wxFocusEvent& event) +bool +wxStdNotebookInputHandler::HandleFocus(wxInputConsumer *consumer, + const wxFocusEvent& WXUNUSED(event)) { HandleFocusChange(consumer);