Make the wxComboCtrl's wxTextEntry interface more complete and consistent. All text is no longer selected on SetValue(), but only when user selects an item from the drop-down list.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66394 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
708cc39462
commit
0306e73e63
@ -199,14 +199,32 @@ public:
|
|||||||
virtual bool Show(bool show = true);
|
virtual bool Show(bool show = true);
|
||||||
virtual bool SetFont(const wxFont& font);
|
virtual bool SetFont(const wxFont& font);
|
||||||
|
|
||||||
// wxTextCtrl methods - for readonly combo they should return
|
//
|
||||||
// without errors.
|
// wxTextEntry methods
|
||||||
virtual void SetValue(const wxString& value);
|
//
|
||||||
|
// 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 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 Replace(long from, long to, const wxString& value);
|
||||||
|
|
||||||
virtual void Remove(long from, long to);
|
virtual void Remove(long from, long to);
|
||||||
|
|
||||||
virtual void Copy();
|
virtual void Copy();
|
||||||
@ -237,7 +255,13 @@ public:
|
|||||||
|
|
||||||
// This method sets value and also optionally sends EVT_TEXT
|
// This method sets value and also optionally sends EVT_TEXT
|
||||||
// (needed by combo popups)
|
// (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
|
// Popup customization methods
|
||||||
@ -464,6 +488,10 @@ protected:
|
|||||||
// extraStyle: Extra style parameters
|
// extraStyle: Extra style parameters
|
||||||
void CreateTextCtrl( int extraStyle );
|
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)
|
// Installs standard input handler to combo (and optionally to the textctrl)
|
||||||
void InstallInputHandlers();
|
void InstallInputHandlers();
|
||||||
|
|
||||||
@ -558,6 +586,7 @@ protected:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// protected wxTextEntry methods
|
// protected wxTextEntry methods
|
||||||
|
virtual void DoSetValue(const wxString& value, int flags);
|
||||||
virtual wxString DoGetValue() const;
|
virtual wxString DoGetValue() const;
|
||||||
virtual wxWindow *GetEditableWindow() { return this; }
|
virtual wxWindow *GetEditableWindow() { return this; }
|
||||||
|
|
||||||
|
@ -2388,7 +2388,7 @@ void wxComboCtrlBase::HidePopup(bool generateEvent)
|
|||||||
|
|
||||||
// transfer value and show it in textctrl, if any
|
// transfer value and show it in textctrl, if any
|
||||||
if ( !IsPopupWindowState(Animating) )
|
if ( !IsPopupWindowState(Animating) )
|
||||||
SetValue( m_popupInterface->GetStringValue() );
|
SetValueByUser( m_popupInterface->GetStringValue() );
|
||||||
|
|
||||||
m_winPopup->Hide();
|
m_winPopup->Hide();
|
||||||
|
|
||||||
@ -2555,18 +2555,16 @@ wxString wxComboCtrlBase::DoGetValue() const
|
|||||||
return m_valueString;
|
return m_valueString;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxComboCtrlBase::SetValueWithEvent(const wxString& value, bool withEvent)
|
void wxComboCtrlBase::SetValueWithEvent(const wxString& value,
|
||||||
|
bool withEvent)
|
||||||
{
|
{
|
||||||
if ( m_text )
|
DoSetValue(value, withEvent ? SetValue_SendEvent : 0);
|
||||||
{
|
}
|
||||||
if ( !withEvent )
|
|
||||||
m_ignoreEvtText++;
|
|
||||||
|
|
||||||
m_text->SetValue(value);
|
void wxComboCtrlBase::OnSetValue(const wxString& value)
|
||||||
|
{
|
||||||
if ( !(m_iFlags & wxCC_NO_TEXT_AUTO_SELECT) )
|
// Note: before wxComboCtrl inherited from wxTextEntry,
|
||||||
m_text->SelectAll();
|
// this code used to be in SetValueWithEvent().
|
||||||
}
|
|
||||||
|
|
||||||
// Since wxComboPopup may want to paint the combo as well, we need
|
// Since wxComboPopup may want to paint the combo as well, we need
|
||||||
// to set the string value here (as well as sometimes in ShowPopup).
|
// to set the string value here (as well as sometimes in ShowPopup).
|
||||||
@ -2583,9 +2581,20 @@ void wxComboCtrlBase::SetValueWithEvent(const wxString& value, bool withEvent)
|
|||||||
Refresh();
|
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
|
// In this SetValue variant wxComboPopup::SetStringValue is not called
|
||||||
@ -2646,24 +2655,48 @@ long wxComboCtrlBase::GetLastPosition() const
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxComboCtrlBase::Replace(long from, long to, const wxString& value)
|
|
||||||
{
|
|
||||||
if ( m_text )
|
|
||||||
m_text->Replace(from, to, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxComboCtrlBase::WriteText(const wxString& text)
|
void wxComboCtrlBase::WriteText(const wxString& text)
|
||||||
{
|
{
|
||||||
if ( m_text )
|
if ( m_text )
|
||||||
|
{
|
||||||
m_text->WriteText(text);
|
m_text->WriteText(text);
|
||||||
|
OnSetValue(m_text->GetValue());
|
||||||
|
}
|
||||||
else
|
else
|
||||||
SetText(m_valueString + text);
|
{
|
||||||
|
OnSetValue(text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxComboCtrlBase::DoSetValue(const wxString& value, int flags)
|
||||||
|
{
|
||||||
|
if ( m_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)
|
void wxComboCtrlBase::Remove(long from, long to)
|
||||||
{
|
{
|
||||||
if ( m_text )
|
if ( m_text )
|
||||||
|
{
|
||||||
m_text->Remove(from, to);
|
m_text->Remove(from, to);
|
||||||
|
OnSetValue(m_text->GetValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxComboCtrlBase::SetSelection(long from, long to)
|
void wxComboCtrlBase::SetSelection(long from, long to)
|
||||||
|
@ -228,7 +228,7 @@ void wxVListBoxComboPopup::DismissWithEvent()
|
|||||||
m_stringValue = wxEmptyString;
|
m_stringValue = wxEmptyString;
|
||||||
|
|
||||||
if ( m_stringValue != m_combo->GetValue() )
|
if ( m_stringValue != m_combo->GetValue() )
|
||||||
m_combo->SetValueWithEvent(m_stringValue);
|
m_combo->SetValueByUser(m_stringValue);
|
||||||
|
|
||||||
m_value = selection;
|
m_value = selection;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user