[ 1560860 ] wxComboCtrl EVT_TEXT filtering.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41382 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
25dff19c97
commit
ce9685190e
@ -199,6 +199,10 @@ public:
|
|||||||
// (ie. wxComboPopup::SetStringValue doesn't get called).
|
// (ie. wxComboPopup::SetStringValue doesn't get called).
|
||||||
void SetText(const wxString& value);
|
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
|
||||||
//
|
//
|
||||||
@ -522,6 +526,8 @@ protected:
|
|||||||
private:
|
private:
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
|
wxByte m_ignoreEvtText; // Number of next EVT_TEXTs to ignore
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
|
|
||||||
DECLARE_ABSTRACT_CLASS(wxComboCtrlBase)
|
DECLARE_ABSTRACT_CLASS(wxComboCtrlBase)
|
||||||
|
@ -638,6 +638,7 @@ void wxComboCtrlBase::Init()
|
|||||||
m_btnState = 0;
|
m_btnState = 0;
|
||||||
m_btnWidDefault = 0;
|
m_btnWidDefault = 0;
|
||||||
m_blankButtonBg = false;
|
m_blankButtonBg = false;
|
||||||
|
m_ignoreEvtText = 0;
|
||||||
m_btnWid = m_btnHei = -1;
|
m_btnWid = m_btnHei = -1;
|
||||||
m_btnSide = wxRIGHT;
|
m_btnSide = wxRIGHT;
|
||||||
m_btnSpacingX = 0;
|
m_btnSpacingX = 0;
|
||||||
@ -709,6 +710,14 @@ wxComboCtrlBase::CreateTextCtrl(int style, const wxValidator& validator)
|
|||||||
if ( HasFlag(wxTE_PROCESS_ENTER) )
|
if ( HasFlag(wxTE_PROCESS_ENTER) )
|
||||||
style |= 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,
|
m_text = new wxTextCtrl(this, wxID_ANY, m_valueString,
|
||||||
wxDefaultPosition, wxDefaultSize,
|
wxDefaultPosition, wxDefaultSize,
|
||||||
style, validator);
|
style, validator);
|
||||||
@ -1248,6 +1257,15 @@ wxBitmap& wxComboCtrlBase::GetBufferBitmap( const wxSize& sz ) const
|
|||||||
|
|
||||||
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
|
// Change event id, object and string before relaying it forward
|
||||||
event.SetId(GetId());
|
event.SetId(GetId());
|
||||||
wxString s = event.GetString();
|
wxString s = event.GetString();
|
||||||
@ -1924,10 +1942,13 @@ wxString wxComboCtrlBase::GetValue() const
|
|||||||
return m_valueString;
|
return m_valueString;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxComboCtrlBase::SetValue(const wxString& value)
|
void wxComboCtrlBase::SetValueWithEvent(const wxString& value, bool withEvent)
|
||||||
{
|
{
|
||||||
if ( m_text )
|
if ( m_text )
|
||||||
{
|
{
|
||||||
|
if ( !withEvent )
|
||||||
|
m_ignoreEvtText++;
|
||||||
|
|
||||||
m_text->SetValue(value);
|
m_text->SetValue(value);
|
||||||
if ( !(m_iFlags & wxCC_NO_TEXT_AUTO_SELECT) )
|
if ( !(m_iFlags & wxCC_NO_TEXT_AUTO_SELECT) )
|
||||||
m_text->SelectAll();
|
m_text->SelectAll();
|
||||||
@ -1945,6 +1966,11 @@ void wxComboCtrlBase::SetValue(const wxString& value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxComboCtrlBase::SetValue(const wxString& value)
|
||||||
|
{
|
||||||
|
SetValueWithEvent(value, false);
|
||||||
|
}
|
||||||
|
|
||||||
// In this SetValue variant wxComboPopup::SetStringValue is not called
|
// In this SetValue variant wxComboPopup::SetStringValue is not called
|
||||||
void wxComboCtrlBase::SetText(const wxString& value)
|
void wxComboCtrlBase::SetText(const wxString& value)
|
||||||
{
|
{
|
||||||
@ -1954,6 +1980,12 @@ void wxComboCtrlBase::SetText(const wxString& value)
|
|||||||
|
|
||||||
m_valueString = value;
|
m_valueString = value;
|
||||||
|
|
||||||
|
if ( m_text )
|
||||||
|
{
|
||||||
|
m_ignoreEvtText++;
|
||||||
|
m_text->SetValue( value );
|
||||||
|
}
|
||||||
|
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,7 +210,7 @@ void wxVListBoxComboPopup::DismissWithEvent()
|
|||||||
m_value = selection;
|
m_value = selection;
|
||||||
|
|
||||||
if ( valStr != m_combo->GetValue() )
|
if ( valStr != m_combo->GetValue() )
|
||||||
m_combo->SetValue(valStr);
|
m_combo->SetValueWithEvent(valStr);
|
||||||
|
|
||||||
SendComboBoxEvent(selection);
|
SendComboBoxEvent(selection);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user