it is not possible to show/hide the window from the UpdateUI event handler; refactored the code by moving control-specific parts into the derived classes (patch 1338350)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37536 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -27,7 +27,7 @@ functions that take a wxUpdateUIEvent argument.
|
||||
\wxheading{Remarks}
|
||||
|
||||
Without update UI events, an application has to work hard to check/uncheck, enable/disable,
|
||||
and set the text for elements such as menu items and toolbar buttons.
|
||||
show/hide, and set the text for elements such as menu items and toolbar buttons.
|
||||
The code for doing this has to be mixed up with the code that is invoked when
|
||||
an action is invoked for a menu item or button.
|
||||
|
||||
@@ -116,6 +116,12 @@ Check or uncheck the UI element.
|
||||
|
||||
Enable or disable the UI element.
|
||||
|
||||
\membersection{wxUpdateUIEvent::Show}\label{wxupdateuieventshow}
|
||||
|
||||
\func{void}{Show}{\param{bool}{ show}}
|
||||
|
||||
Show or hide the UI element.
|
||||
|
||||
\membersection{wxUpdateUIEvent::GetChecked}\label{wxupdateuieventgetchecked}
|
||||
|
||||
\constfunc{bool}{GetChecked}{\void}
|
||||
@@ -128,6 +134,12 @@ Returns true if the UI element should be checked.
|
||||
|
||||
Returns true if the UI element should be enabled.
|
||||
|
||||
\membersection{wxUpdateUIEvent::GetShown}\label{wxupdateuieventgetshown}
|
||||
|
||||
\constfunc{bool}{GetShown}{\void}
|
||||
|
||||
Returns true if the UI element should be shown.
|
||||
|
||||
\membersection{wxUpdateUIEvent::GetSetChecked}\label{wxupdateuieventgetsetchecked}
|
||||
|
||||
\constfunc{bool}{GetSetChecked}{\void}
|
||||
@@ -140,6 +152,12 @@ Returns true if the application has called \helpref{wxUpdateUIEvent::Check}{wxup
|
||||
|
||||
Returns true if the application has called \helpref{wxUpdateUIEvent::Enable}{wxupdateuieventenable}. For wxWidgets internal use only.
|
||||
|
||||
\membersection{wxUpdateUIEvent::GetSetShown}\label{wxupdateuieventgetsetshown}
|
||||
|
||||
\constfunc{bool}{GetSetShown}{\void}
|
||||
|
||||
Returns true if the application has called \helpref{wxUpdateUIEvent::Show}{wxupdateuieventshow}. For wxWidgets internal use only.
|
||||
|
||||
\membersection{wxUpdateUIEvent::GetSetText}\label{wxupdateuieventgetsettext}
|
||||
|
||||
\constfunc{bool}{GetSetText}{\void}
|
||||
|
@@ -108,6 +108,13 @@ public:
|
||||
|
||||
virtual bool HasTransparentBackground() { return true; }
|
||||
|
||||
// wxCheckBox-specific processing after processing the update event
|
||||
virtual void DoUpdateWindowUI(wxUpdateUIEvent& event)
|
||||
{
|
||||
if ( event.GetSetChecked() )
|
||||
SetValue(event.GetChecked());
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void DoSet3StateValue(wxCheckBoxState WXUNUSED(state)) { wxFAIL; }
|
||||
|
||||
|
@@ -62,6 +62,9 @@ public:
|
||||
virtual void SetLabel( const wxString &label );
|
||||
virtual bool SetFont(const wxFont& font);
|
||||
|
||||
// wxControl-specific processing after processing the update event
|
||||
virtual void DoUpdateWindowUI(wxUpdateUIEvent& event);
|
||||
|
||||
// Reserved for future use
|
||||
virtual void ReservedControlFunc1() {}
|
||||
virtual void ReservedControlFunc2() {}
|
||||
|
@@ -1667,7 +1667,9 @@ public:
|
||||
{
|
||||
m_checked =
|
||||
m_enabled =
|
||||
m_shown =
|
||||
m_setEnabled =
|
||||
m_setShown =
|
||||
m_setText =
|
||||
m_setChecked = false;
|
||||
}
|
||||
@@ -1675,7 +1677,9 @@ public:
|
||||
: wxCommandEvent(event),
|
||||
m_checked(event.m_checked),
|
||||
m_enabled(event.m_enabled),
|
||||
m_shown(event.m_shown),
|
||||
m_setEnabled(event.m_setEnabled),
|
||||
m_setShown(event.m_setShown),
|
||||
m_setText(event.m_setText),
|
||||
m_setChecked(event.m_setChecked),
|
||||
m_text(event.m_text)
|
||||
@@ -1683,13 +1687,16 @@ public:
|
||||
|
||||
bool GetChecked() const { return m_checked; }
|
||||
bool GetEnabled() const { return m_enabled; }
|
||||
bool GetShown() const { return m_shown; }
|
||||
wxString GetText() const { return m_text; }
|
||||
bool GetSetText() const { return m_setText; }
|
||||
bool GetSetChecked() const { return m_setChecked; }
|
||||
bool GetSetEnabled() const { return m_setEnabled; }
|
||||
bool GetSetShown() const { return m_setShown; }
|
||||
|
||||
void Check(bool check) { m_checked = check; m_setChecked = true; }
|
||||
void Enable(bool enable) { m_enabled = enable; m_setEnabled = true; }
|
||||
void Show(bool show) { m_shown = show; m_setShown = true; }
|
||||
void SetText(const wxString& text) { m_text = text; m_setText = true; }
|
||||
|
||||
// Sets the interval between updates in milliseconds.
|
||||
@@ -1719,7 +1726,9 @@ public:
|
||||
protected:
|
||||
bool m_checked;
|
||||
bool m_enabled;
|
||||
bool m_shown;
|
||||
bool m_setEnabled;
|
||||
bool m_setShown;
|
||||
bool m_setText;
|
||||
bool m_setChecked;
|
||||
wxString m_text;
|
||||
|
@@ -607,7 +607,10 @@ public:
|
||||
void InitCommandEvent(wxCommandEvent& event) const;
|
||||
|
||||
/// do the window-specific processing after processing the update event
|
||||
// (duplicated code from wxTextCtrlBase)
|
||||
#if !wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
|
||||
virtual void DoUpdateWindowUI(wxUpdateUIEvent& event);
|
||||
#endif
|
||||
|
||||
/// Should we inherit colours?
|
||||
virtual bool ShouldInheritColours() const { return false; }
|
||||
|
@@ -124,6 +124,32 @@ bool wxControlBase::SetFont(const wxFont& font)
|
||||
return wxWindow::SetFont(font);
|
||||
}
|
||||
|
||||
// wxControl-specific processing after processing the update event
|
||||
void wxControlBase::DoUpdateWindowUI(wxUpdateUIEvent& event)
|
||||
{
|
||||
// call inherited
|
||||
wxWindowBase::DoUpdateWindowUI(event);
|
||||
|
||||
// update label
|
||||
if ( event.GetSetText() )
|
||||
{
|
||||
if ( event.GetText() != GetLabel() )
|
||||
SetLabel(event.GetText());
|
||||
}
|
||||
|
||||
// Unfortunately we don't yet have common base class for
|
||||
// wxRadioButton, so we handle updates of radiobuttons here.
|
||||
// TODO: If once wxRadioButtonBase will exist, move this code there.
|
||||
#if wxUSE_RADIOBTN
|
||||
if ( event.GetSetChecked() )
|
||||
{
|
||||
wxRadioButton *radiobtn = wxDynamicCastThis(wxRadioButton);
|
||||
if ( radiobtn )
|
||||
radiobtn->SetValue(event.GetChecked());
|
||||
}
|
||||
#endif // wxUSE_RADIOBTN
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxStaticBitmap
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@@ -471,9 +471,12 @@ wxString wxTextCtrlBase::GetRange(long from, long to) const
|
||||
// do the window-specific processing after processing the update event
|
||||
void wxTextCtrlBase::DoUpdateWindowUI(wxUpdateUIEvent& event)
|
||||
{
|
||||
if ( event.GetSetEnabled() )
|
||||
Enable(event.GetEnabled());
|
||||
// call inherited, but skip the wxControl's version, and call directly the
|
||||
// wxWindow's one instead, because the only reason why we are overriding this
|
||||
// function is that we want to use SetValue() instead of wxControl::SetLabel()
|
||||
wxWindowBase::DoUpdateWindowUI(event);
|
||||
|
||||
// update text
|
||||
if ( event.GetSetText() )
|
||||
{
|
||||
if ( event.GetText() != GetValue() )
|
||||
|
@@ -288,9 +288,12 @@ bool wxTopLevelWindowBase::SendIconizeEvent(bool iconized)
|
||||
// do the window-specific processing after processing the update event
|
||||
void wxTopLevelWindowBase::DoUpdateWindowUI(wxUpdateUIEvent& event)
|
||||
{
|
||||
if ( event.GetSetEnabled() )
|
||||
Enable(event.GetEnabled());
|
||||
// call inherited, but skip the wxControl's version, and call directly the
|
||||
// wxWindow's one instead, because the only reason why we are overriding this
|
||||
// function is that we want to use SetTitle() instead of wxControl::SetLabel()
|
||||
wxWindowBase::DoUpdateWindowUI(event);
|
||||
|
||||
// update title
|
||||
if ( event.GetSetText() )
|
||||
{
|
||||
if ( event.GetText() != GetTitle() )
|
||||
|
@@ -1992,44 +1992,13 @@ void wxWindowBase::UpdateWindowUI(long flags)
|
||||
}
|
||||
|
||||
// do the window-specific processing after processing the update event
|
||||
// TODO: take specific knowledge out of this function and
|
||||
// put in each control's base class. Unfortunately we don't
|
||||
// yet have base implementation files for wxCheckBox and wxRadioButton.
|
||||
void wxWindowBase::DoUpdateWindowUI(wxUpdateUIEvent& event)
|
||||
{
|
||||
if ( event.GetSetEnabled() )
|
||||
Enable(event.GetEnabled());
|
||||
|
||||
#if wxUSE_CONTROLS
|
||||
if ( event.GetSetText() )
|
||||
{
|
||||
wxControl *control = wxDynamicCastThis(wxControl);
|
||||
if ( control )
|
||||
{
|
||||
if ( event.GetText() != control->GetLabel() )
|
||||
control->SetLabel(event.GetText());
|
||||
}
|
||||
}
|
||||
#endif // wxUSE_CONTROLS
|
||||
|
||||
if ( event.GetSetChecked() )
|
||||
{
|
||||
#if wxUSE_CHECKBOX
|
||||
wxCheckBox *checkbox = wxDynamicCastThis(wxCheckBox);
|
||||
if ( checkbox )
|
||||
{
|
||||
checkbox->SetValue(event.GetChecked());
|
||||
}
|
||||
#endif // wxUSE_CHECKBOX
|
||||
|
||||
#if wxUSE_RADIOBTN
|
||||
wxRadioButton *radiobtn = wxDynamicCastThis(wxRadioButton);
|
||||
if ( radiobtn )
|
||||
{
|
||||
radiobtn->SetValue(event.GetChecked());
|
||||
}
|
||||
#endif // wxUSE_RADIOBTN
|
||||
}
|
||||
if ( event.GetSetShown() )
|
||||
Show(event.GetShown());
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
@@ -1581,17 +1581,20 @@ wxString wxRichTextCtrl::GetStringSelection() const
|
||||
}
|
||||
|
||||
// do the window-specific processing after processing the update event
|
||||
#if !wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
|
||||
void wxRichTextCtrl::DoUpdateWindowUI(wxUpdateUIEvent& event)
|
||||
{
|
||||
if ( event.GetSetEnabled() )
|
||||
Enable(event.GetEnabled());
|
||||
// call inherited
|
||||
wxWindowBase::DoUpdateWindowUI(event);
|
||||
|
||||
// update text
|
||||
if ( event.GetSetText() )
|
||||
{
|
||||
if ( event.GetText() != GetValue() )
|
||||
SetValue(event.GetText());
|
||||
}
|
||||
}
|
||||
#endif // !wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// hit testing
|
||||
|
Reference in New Issue
Block a user