virtual bool Show(bool show = true);
virtual bool SetFont(const wxFont& font);
- // wxTextCtrl methods - for readonly combo they should return
- // without errors.
- virtual void SetValue(const wxString& value);
+ //
+ // wxTextEntry methods
+ //
+ // NB: We basically need to override all of them because there is
+ // no guarantee how platform-specific wxTextEntry is implemented.
+ //
+ virtual void SetValue(const wxString& value)
+ { wxTextEntryBase::SetValue(value); }
+ virtual void ChangeValue(const wxString& value)
+ { wxTextEntryBase::ChangeValue(value); }
- // wxTextEntry methods - we basically need to override all of them
virtual void WriteText(const wxString& text);
+ virtual void AppendText(const wxString& text)
+ { wxTextEntryBase::AppendText(text); }
+
+ virtual wxString GetValue() const
+ { return wxTextEntryBase::GetValue(); }
+ virtual wxString GetRange(long from, long to) const
+ { return wxTextEntryBase::GetRange(from, to); }
+
+ // Replace() and DoSetValue() need to be fully re-implemented since
+ // EventSuppressor utility class does not work with the way
+ // wxComboCtrl is implemented.
virtual void Replace(long from, long to, const wxString& value);
+
virtual void Remove(long from, long to);
virtual void Copy();
// This method sets value and also optionally sends EVT_TEXT
// (needed by combo popups)
- void SetValueWithEvent(const wxString& value, bool withEvent = true);
+ wxDEPRECATED( void SetValueWithEvent(const wxString& value,
+ bool withEvent = true) );
+
+ // Changes value of the control as if user had done it by selecting an
+ // item from a combo box drop-down list. Needs to be public so that
+ // derived popup classes can call it.
+ void SetValueByUser(const wxString& value);
//
// Popup customization methods
// extraStyle: Extra style parameters
void CreateTextCtrl( int extraStyle );
+ // Called when text was changed programmatically
+ // (e.g. from WriteText())
+ void OnSetValue(const wxString& value);
+
// Installs standard input handler to combo (and optionally to the textctrl)
void InstallInputHandlers();
#endif
// protected wxTextEntry methods
+ virtual void DoSetValue(const wxString& value, int flags);
virtual wxString DoGetValue() const;
virtual wxWindow *GetEditableWindow() { return this; }
// transfer value and show it in textctrl, if any
if ( !IsPopupWindowState(Animating) )
- SetValue( m_popupInterface->GetStringValue() );
+ SetValueByUser( m_popupInterface->GetStringValue() );
m_winPopup->Hide();
return m_valueString;
}
-void wxComboCtrlBase::SetValueWithEvent(const wxString& value, bool withEvent)
+void wxComboCtrlBase::SetValueWithEvent(const wxString& value,
+ bool withEvent)
{
- if ( m_text )
- {
- if ( !withEvent )
- m_ignoreEvtText++;
-
- m_text->SetValue(value);
+ DoSetValue(value, withEvent ? SetValue_SendEvent : 0);
+}
- if ( !(m_iFlags & wxCC_NO_TEXT_AUTO_SELECT) )
- m_text->SelectAll();
- }
+void wxComboCtrlBase::OnSetValue(const wxString& value)
+{
+ // Note: before wxComboCtrl inherited from wxTextEntry,
+ // this code used to be in SetValueWithEvent().
// Since wxComboPopup may want to paint the combo as well, we need
// to set the string value here (as well as sometimes in ShowPopup).
Refresh();
}
-void wxComboCtrlBase::SetValue(const wxString& value)
+void wxComboCtrlBase::SetValueByUser(const wxString& value)
{
- SetValueWithEvent(value, false);
+ // NB: Order of function calls is important here. Otherwise
+ // the SelectAll() may not work.
+
+ if ( m_text )
+ {
+ m_text->SetValue(value);
+
+ if ( !(m_iFlags & wxCC_NO_TEXT_AUTO_SELECT) )
+ m_text->SelectAll();
+ }
+
+ OnSetValue(value);
}
// In this SetValue variant wxComboPopup::SetStringValue is not called
return 0;
}
-void wxComboCtrlBase::Replace(long from, long to, const wxString& value)
+void wxComboCtrlBase::WriteText(const wxString& text)
{
if ( m_text )
- m_text->Replace(from, to, value);
+ {
+ m_text->WriteText(text);
+ OnSetValue(m_text->GetValue());
+ }
+ else
+ {
+ OnSetValue(text);
+ }
}
-void wxComboCtrlBase::WriteText(const wxString& text)
+void wxComboCtrlBase::DoSetValue(const wxString& value, int flags)
{
if ( m_text )
- m_text->WriteText(text);
- else
- SetText(m_valueString + text);
+ {
+ if ( flags & SetValue_SendEvent )
+ m_text->SetValue(value);
+ else
+ m_text->ChangeValue(value);
+ }
+
+ OnSetValue(value);
+}
+
+void wxComboCtrlBase::Replace(long from, long to, const wxString& value)
+{
+ if ( m_text )
+ {
+ m_text->Replace(from, to, value);
+ OnSetValue(m_text->GetValue());
+ }
}
void wxComboCtrlBase::Remove(long from, long to)
{
if ( m_text )
+ {
m_text->Remove(from, to);
+ OnSetValue(m_text->GetValue());
+ }
}
void wxComboCtrlBase::SetSelection(long from, long to)
m_stringValue = wxEmptyString;
if ( m_stringValue != m_combo->GetValue() )
- m_combo->SetValueWithEvent(m_stringValue);
+ m_combo->SetValueByUser(m_stringValue);
m_value = selection;