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:
// set the currently selected page, return the index of the previously
// selected one (or -1 on error)
// NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events
int SetSelection(size_t nPage);
// get the currently selected page
int GetSelection() const;

View File

@@ -89,6 +89,17 @@ public:
// On platforms that support it, get the theme page background colour, else invalid colour
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:
DECLARE_NO_COPY_CLASS(wxNotebookBase)
};

View File

@@ -261,8 +261,23 @@ bool wxNotebook::SetPageImage(size_t nPage, int nImage)
return true;
}
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;
[GetNSTabView() selectTabViewItemAtIndex:nPage];

View File

@@ -59,4 +59,26 @@ wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage) const
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

View File

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

View File

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

View File

@@ -443,17 +443,12 @@ int wxNotebook::SetSelection(size_t nPage)
{
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);
event.SetSelection(nPage);
event.SetOldSelection(m_nSelection);
event.SetEventObject(this);
if ( !GetEventHandler()->ProcessEvent(event) || event.IsAllowed() )
if ( SendPageChangingEvent(nPage) )
{
// program allows the page change
event.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED);
(void)GetEventHandler()->ProcessEvent(event);
SendPageChangedEvent(m_nSelection, nPage);
TabCtrl_SetCurSel(GetHwnd(), nPage);
}

View File

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