Use GetWidgets() in the widgets samples instead of GetWidget2().

Add a function which can be overridden to return an arbitrary number of
widgets instead of having just GetWidget() and GetWidget2(): spin control page
already uses 3 widgets (and defines GetWidget3() which is never called) and we
could have even more in the future. Just use a generic solution which will
always work.

The practical consequence of this is that the "Enable/Disable" menu item now
also enables and disables the wxSpinCtrlDouble in the spin page, see #12045.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64301 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-05-13 15:31:30 +00:00
parent 2d4a03f8a7
commit ca288f2afe
3 changed files with 61 additions and 36 deletions

View File

@@ -86,8 +86,14 @@ public:
virtual ~SpinBtnWidgetsPage(){}; virtual ~SpinBtnWidgetsPage(){};
virtual wxControl *GetWidget() const { return m_spinbtn; } virtual wxControl *GetWidget() const { return m_spinbtn; }
virtual wxControl *GetWidget2() const { return m_spinctrl; } virtual Widgets GetWidgets() const
virtual wxControl *GetWidget3() const { return m_spinctrldbl; } {
Widgets widgets(WidgetsPage::GetWidgets());
widgets.push_back(m_spinctrl);
widgets.push_back(m_spinctrldbl);
return widgets;
}
virtual void RecreateWidget() { CreateSpin(); } virtual void RecreateWidget() { CreateSpin(); }
// lazy creation of the content // lazy creation of the content

View File

@@ -755,11 +755,13 @@ void WidgetsFrame::OnSetTooltip(wxCommandEvent& WXUNUSED(event))
WidgetsPage *page = CurrentPage(); WidgetsPage *page = CurrentPage();
page->GetWidget()->SetToolTip(s_tip); const Widgets widgets = page->GetWidgets();
for ( Widgets::const_iterator it = widgets.begin();
wxControl *ctrl2 = page->GetWidget2(); it != widgets.end();
if ( ctrl2 ) ++it )
ctrl2->SetToolTip(s_tip); {
(*it)->SetToolTip(s_tip);
}
} }
#endif // wxUSE_TOOLTIPS #endif // wxUSE_TOOLTIPS
@@ -779,14 +781,13 @@ void WidgetsFrame::OnSetFgCol(wxCommandEvent& WXUNUSED(event))
m_colFg = col; m_colFg = col;
page->GetWidget()->SetForegroundColour(m_colFg); const Widgets widgets = page->GetWidgets();
page->GetWidget()->Refresh(); for ( Widgets::const_iterator it = widgets.begin();
it != widgets.end();
wxControl *ctrl2 = page->GetWidget2(); ++it )
if ( ctrl2 )
{ {
ctrl2->SetForegroundColour(m_colFg); (*it)->SetForegroundColour(m_colFg);
ctrl2->Refresh(); (*it)->Refresh();
} }
#else #else
wxLogMessage(wxT("Colour selection dialog not available in current build.")); wxLogMessage(wxT("Colour selection dialog not available in current build."));
@@ -807,14 +808,13 @@ void WidgetsFrame::OnSetBgCol(wxCommandEvent& WXUNUSED(event))
m_colBg = col; m_colBg = col;
page->GetWidget()->SetBackgroundColour(m_colBg); const Widgets widgets = page->GetWidgets();
page->GetWidget()->Refresh(); for ( Widgets::const_iterator it = widgets.begin();
it != widgets.end();
wxControl *ctrl2 = page->GetWidget2(); ++it )
if ( ctrl2 )
{ {
ctrl2->SetBackgroundColour(m_colFg); (*it)->SetBackgroundColour(m_colBg);
ctrl2->Refresh(); (*it)->Refresh();
} }
#else #else
wxLogMessage(wxT("Colour selection dialog not available in current build.")); wxLogMessage(wxT("Colour selection dialog not available in current build."));
@@ -835,14 +835,13 @@ void WidgetsFrame::OnSetFont(wxCommandEvent& WXUNUSED(event))
m_font = font; m_font = font;
page->GetWidget()->SetFont(m_font); const Widgets widgets = page->GetWidgets();
page->GetWidget()->Refresh(); for ( Widgets::const_iterator it = widgets.begin();
it != widgets.end();
wxControl *ctrl2 = page->GetWidget2(); ++it )
if ( ctrl2 )
{ {
ctrl2->SetFont(m_font); (*it)->SetFont(m_font);
ctrl2->Refresh(); (*it)->Refresh();
} }
#else #else
wxLogMessage(wxT("Font selection dialog not available in current build.")); wxLogMessage(wxT("Font selection dialog not available in current build."));
@@ -851,9 +850,13 @@ void WidgetsFrame::OnSetFont(wxCommandEvent& WXUNUSED(event))
void WidgetsFrame::OnEnable(wxCommandEvent& event) void WidgetsFrame::OnEnable(wxCommandEvent& event)
{ {
CurrentPage()->GetWidget()->Enable(event.IsChecked()); const Widgets widgets = CurrentPage()->GetWidgets();
if (CurrentPage()->GetWidget2()) for ( Widgets::const_iterator it = widgets.begin();
CurrentPage()->GetWidget2()->Enable(event.IsChecked()); it != widgets.end();
++it )
{
(*it)->Enable(event.IsChecked());
}
} }
void WidgetsFrame::OnSetBorder(wxCommandEvent& event) void WidgetsFrame::OnSetBorder(wxCommandEvent& event)
@@ -893,9 +896,16 @@ void WidgetsFrame::OnToggleGlobalBusyCursor(wxCommandEvent& event)
void WidgetsFrame::OnToggleBusyCursor(wxCommandEvent& event) void WidgetsFrame::OnToggleBusyCursor(wxCommandEvent& event)
{ {
CurrentPage()->GetWidget()->SetCursor(*(event.IsChecked() wxCursor cursor(*(event.IsChecked() ? wxHOURGLASS_CURSOR
? wxHOURGLASS_CURSOR : wxSTANDARD_CURSOR));
: wxSTANDARD_CURSOR));
const Widgets widgets = CurrentPage()->GetWidgets();
for ( Widgets::const_iterator it = widgets.begin();
it != widgets.end();
++it )
{
(*it)->SetCursor(cursor);
}
} }
void WidgetsFrame::OnDisableAutoComplete(wxCommandEvent& WXUNUSED(event)) void WidgetsFrame::OnDisableAutoComplete(wxCommandEvent& WXUNUSED(event))

View File

@@ -52,6 +52,7 @@ class WXDLLIMPEXP_FWD_CORE WidgetsBookCtrl;
class WidgetsPageInfo; class WidgetsPageInfo;
#include "wx/panel.h" #include "wx/panel.h"
#include "wx/vector.h"
// INTRODUCING NEW PAGES DON'T FORGET TO ADD ENTRIES TO 'WidgetsCategories' // INTRODUCING NEW PAGES DON'T FORGET TO ADD ENTRIES TO 'WidgetsCategories'
enum enum
@@ -83,6 +84,8 @@ enum
ALL_CTRLS = 1 << ALL_PAGE ALL_CTRLS = 1 << ALL_PAGE
}; };
typedef wxVector<wxControl *> Widgets;
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// WidgetsPage: a book page demonstrating some widget // WidgetsPage: a book page demonstrating some widget
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -103,8 +106,14 @@ public:
// lazy creation of the content // lazy creation of the content
virtual void CreateContent() = 0; virtual void CreateContent() = 0;
// some pages show 2 controls, in this case override this one as well // some pages show additional controls, in this case override this one to
virtual wxControl *GetWidget2() const { return NULL; } // return all of them (including the one returned by GetWidget())
virtual Widgets GetWidgets() const
{
Widgets widgets;
widgets.push_back(GetWidget());
return widgets;
}
// recreate the control shown by this page // recreate the control shown by this page
// //