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:
@@ -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;
|
||||||
|
@@ -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)
|
||||||
};
|
};
|
||||||
|
@@ -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];
|
||||||
|
@@ -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
|
||||||
|
@@ -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 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -443,17 +443,12 @@ 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);
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user