added SendPageChanging/ChangedEvent() functions; fixed wxCocoa build broken by wxNotebook::ChangePage() change

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41764 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-10-08 23:41:52 +00:00
parent dd1c16314e
commit a570e8f8fe
8 changed files with 62 additions and 39 deletions

View File

@@ -57,7 +57,6 @@ protected:
public: public:
// set the currently selected page, return the index of the previously // set the currently selected page, return the index of the previously
// selected one (or -1 on error) // selected one (or -1 on error)
// NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events
int SetSelection(size_t nPage); int SetSelection(size_t nPage);
// get the currently selected page // get the currently selected page
int GetSelection() const; int GetSelection() const;

View File

@@ -89,6 +89,17 @@ public:
// On platforms that support it, get the theme page background colour, else invalid colour // On platforms that support it, get the theme page background colour, else invalid colour
virtual wxColour GetThemeBackgroundColour() const { return wxNullColour; } virtual wxColour GetThemeBackgroundColour() const { return wxNullColour; }
// send wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING/ED events
// returns false if the change to nPage is vetoed by the program
bool SendPageChangingEvent(int nPage);
// sends the event about page change from old to new (or GetSelection() if
// new is -1)
void SendPageChangedEvent(int nPageOld, int nPageNew = -1);
protected: protected:
DECLARE_NO_COPY_CLASS(wxNotebookBase) DECLARE_NO_COPY_CLASS(wxNotebookBase)
}; };

View File

@@ -261,8 +261,23 @@ bool wxNotebook::SetPageImage(size_t nPage, int nImage)
return true; return true;
} }
int wxNotebook::SetSelection(size_t nPage) int wxNotebook::SetSelection(size_t nPage)
{
const int pageOld = GetSelection();
if ( !SendPageChangingEvent(nPage) )
return pageOld;
int page = ChangeSelection(nPage);
if ( page != wxNOT_FOUND )
{
SendPageChangedEvent(pageOld);
}
return page;
}
int wxNotebook::ChangeSelection(size_t nPage)
{ {
wxAutoNSAutoreleasePool pool; wxAutoNSAutoreleasePool pool;
[GetNSTabView() selectTabViewItemAtIndex:nPage]; [GetNSTabView() selectTabViewItemAtIndex:nPage];

View File

@@ -59,4 +59,26 @@ wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage) const
return sizeTotal; return sizeTotal;
} }
// ----------------------------------------------------------------------------
// events
// ----------------------------------------------------------------------------
bool wxNotebookBase::SendPageChangingEvent(int nPage)
{
wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, GetId());
event.SetSelection(nPage);
event.SetOldSelection(GetSelection());
event.SetEventObject(this);
return !GetEventHandler()->ProcessEvent(event) || event.IsAllowed();
}
void wxNotebookBase::SendPageChangedEvent(int nPageOld, int nPageNew)
{
wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, GetId());
event.SetSelection(nPageNew == -1 ? GetSelection() : nPageNew);
event.SetOldSelection(nPageOld);
event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event);
}
#endif // wxUSE_NOTEBOOK #endif // wxUSE_NOTEBOOK

View File

@@ -89,7 +89,7 @@ WX_DEFINE_LIST(wxGtkNotebookPagesList)
extern "C" { extern "C" {
static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget), static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget),
GtkNotebookPage *WXUNUSED(page), GtkNotebookPage *WXUNUSED(gpage),
guint page, guint page,
wxNotebook *notebook ) wxNotebook *notebook )
{ {
@@ -118,12 +118,7 @@ static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget),
} }
else else
{ {
wxNotebookEvent eventChanging( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, if ( !notebook->SendPageChangingEvent(page) )
notebook->GetId(), page, old );
eventChanging.SetEventObject( notebook );
if ( (notebook->GetEventHandler()->ProcessEvent(eventChanging)) &&
!eventChanging.IsAllowed() )
{ {
/* program doesn't allow the page change */ /* program doesn't allow the page change */
g_signal_stop_emission_by_name (notebook->m_widget, g_signal_stop_emission_by_name (notebook->m_widget,
@@ -136,10 +131,7 @@ static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget),
// not really changed in GTK+ // not really changed in GTK+
notebook->m_selection = page; notebook->m_selection = page;
wxNotebookEvent eventChanged( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, notebook->SendPageChangedEvent(old);
notebook->GetId(), page, old );
eventChanged.SetEventObject( notebook );
notebook->GetEventHandler()->ProcessEvent( eventChanged );
} }
} }

View File

@@ -168,19 +168,14 @@ int wxNotebook::DoSetSelection(size_t nPage, int flags)
{ {
if ( flags & SetSelection_SendEvent ) if ( flags & SetSelection_SendEvent )
{ {
wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId); if ( !SendPageChangingEvent(nPage) )
event.SetSelection(nPage);
event.SetOldSelection(m_nSelection);
event.SetEventObject(this);
if ( GetEventHandler()->ProcessEvent(event) && !event.IsAllowed() )
{ {
// vetoed by program // vetoed by program
return m_nSelection; return m_nSelection;
} }
//else: program allows the page change //else: program allows the page change
event.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED); SendPageChangedEvent(m_nSelection, nPage);
(void)GetEventHandler()->ProcessEvent(event);
} }
ChangePage(m_nSelection, nPage); ChangePage(m_nSelection, nPage);

View File

@@ -443,19 +443,14 @@ int wxNotebook::SetSelection(size_t nPage)
{ {
wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") ); wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") );
if ( int(nPage) != m_nSelection ) if ( m_nSelection == wxNOT_FOUND || nPage != (size_t)m_nSelection )
{ {
wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId); if ( SendPageChangingEvent(nPage) )
event.SetSelection(nPage);
event.SetOldSelection(m_nSelection);
event.SetEventObject(this);
if ( !GetEventHandler()->ProcessEvent(event) || event.IsAllowed() )
{ {
// program allows the page change // program allows the page change
event.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED); SendPageChangedEvent(m_nSelection, nPage);
(void)GetEventHandler()->ProcessEvent(event);
TabCtrl_SetCurSel(GetHwnd(), nPage); TabCtrl_SetCurSel(GetHwnd(), nPage);
} }
} }

View File

@@ -243,14 +243,9 @@ int wxNotebook::DoSetSelection(size_t nPage, int flags)
return m_sel; return m_sel;
} }
wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId); if ( flags & SetSelection_SendEvent )
if (flags & SetSelection_SendEvent)
{ {
// event handling if ( !SendPageChangingEvent(nPage) )
event.SetSelection(nPage);
event.SetOldSelection(m_sel);
event.SetEventObject(this);
if ( GetEventHandler()->ProcessEvent(event) && !event.IsAllowed() )
{ {
// program doesn't allow the page change // program doesn't allow the page change
return m_sel; return m_sel;
@@ -300,11 +295,10 @@ int wxNotebook::DoSetSelection(size_t nPage, int flags)
m_pages[m_sel]->Show(); m_pages[m_sel]->Show();
} }
if (flags & SetSelection_SendEvent) if ( flags & SetSelection_SendEvent )
{ {
// event handling // event handling
event.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED); SendPageChangedEvent(selOld);
GetEventHandler()->ProcessEvent(event);
} }
return selOld; return selOld;