\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.
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}
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}
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}
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; }
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() {}
{
m_checked =
m_enabled =
+ m_shown =
m_setEnabled =
+ m_setShown =
m_setText =
m_setChecked = false;
}
: 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)
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.
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;
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; }
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
// ----------------------------------------------------------------------------
// 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() )
// 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() )
}
// 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
}
// 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