git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41382
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// (ie. wxComboPopup::SetStringValue doesn't get called).
void SetText(const wxString& value);
// (ie. wxComboPopup::SetStringValue doesn't get called).
void SetText(const wxString& value);
+ // This method sets value and also optionally sends EVT_TEXT
+ // (needed by combo popups)
+ void SetValueWithEvent(const wxString& value, bool withEvent = true);
+
//
// Popup customization methods
//
//
// Popup customization methods
//
+ wxByte m_ignoreEvtText; // Number of next EVT_TEXTs to ignore
+
DECLARE_EVENT_TABLE()
DECLARE_ABSTRACT_CLASS(wxComboCtrlBase)
DECLARE_EVENT_TABLE()
DECLARE_ABSTRACT_CLASS(wxComboCtrlBase)
m_btnState = 0;
m_btnWidDefault = 0;
m_blankButtonBg = false;
m_btnState = 0;
m_btnWidDefault = 0;
m_blankButtonBg = false;
m_btnWid = m_btnHei = -1;
m_btnSide = wxRIGHT;
m_btnSpacingX = 0;
m_btnWid = m_btnHei = -1;
m_btnSide = wxRIGHT;
m_btnSpacingX = 0;
if ( HasFlag(wxTE_PROCESS_ENTER) )
style |= wxTE_PROCESS_ENTER;
if ( HasFlag(wxTE_PROCESS_ENTER) )
style |= wxTE_PROCESS_ENTER;
+ // Ignore EVT_TEXT generated by the constructor (but only
+ // if the event redirector already exists)
+ // NB: This must be " = 1" instead of "++";
+ if ( m_textEvtHandler )
+ m_ignoreEvtText = 1;
+ else
+ m_ignoreEvtText = 0;
+
m_text = new wxTextCtrl(this, wxID_ANY, m_valueString,
wxDefaultPosition, wxDefaultSize,
style, validator);
m_text = new wxTextCtrl(this, wxID_ANY, m_valueString,
wxDefaultPosition, wxDefaultSize,
style, validator);
void wxComboCtrlBase::OnTextCtrlEvent(wxCommandEvent& event)
{
void wxComboCtrlBase::OnTextCtrlEvent(wxCommandEvent& event)
{
+ if ( event.GetEventType() == wxEVT_COMMAND_TEXT_UPDATED )
+ {
+ if ( m_ignoreEvtText > 0 )
+ {
+ m_ignoreEvtText--;
+ return;
+ }
+ }
+
// Change event id, object and string before relaying it forward
event.SetId(GetId());
wxString s = event.GetString();
// Change event id, object and string before relaying it forward
event.SetId(GetId());
wxString s = event.GetString();
-void wxComboCtrlBase::SetValue(const wxString& value)
+void wxComboCtrlBase::SetValueWithEvent(const wxString& value, bool withEvent)
+ if ( !withEvent )
+ m_ignoreEvtText++;
+
m_text->SetValue(value);
if ( !(m_iFlags & wxCC_NO_TEXT_AUTO_SELECT) )
m_text->SelectAll();
m_text->SetValue(value);
if ( !(m_iFlags & wxCC_NO_TEXT_AUTO_SELECT) )
m_text->SelectAll();
+void wxComboCtrlBase::SetValue(const wxString& value)
+{
+ SetValueWithEvent(value, false);
+}
+
// In this SetValue variant wxComboPopup::SetStringValue is not called
void wxComboCtrlBase::SetText(const wxString& value)
{
// In this SetValue variant wxComboPopup::SetStringValue is not called
void wxComboCtrlBase::SetText(const wxString& value)
{
+ if ( m_text )
+ {
+ m_ignoreEvtText++;
+ m_text->SetValue( value );
+ }
+
m_value = selection;
if ( valStr != m_combo->GetValue() )
m_value = selection;
if ( valStr != m_combo->GetValue() )
- m_combo->SetValue(valStr);
+ m_combo->SetValueWithEvent(valStr);
SendComboBoxEvent(selection);
}
SendComboBoxEvent(selection);
}