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:
		@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user