attempt to bring event system in synch with MSW
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16509 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -91,6 +91,7 @@ class WXDLLEXPORT wxComboBox: public wxChoice
|
|||||||
virtual void Remove(long from, long to);
|
virtual void Remove(long from, long to);
|
||||||
virtual void SetSelection(long from, long to);
|
virtual void SetSelection(long from, long to);
|
||||||
virtual void SetEditable(bool editable);
|
virtual void SetEditable(bool editable);
|
||||||
|
virtual int GetCount() const { return m_choice->GetCount() ; }
|
||||||
void MacHandleControlClick( WXWidget control , wxInt16 controlpart ) ;
|
void MacHandleControlClick( WXWidget control , wxInt16 controlpart ) ;
|
||||||
protected:
|
protected:
|
||||||
// the subcontrols
|
// the subcontrols
|
||||||
|
@@ -57,13 +57,63 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void OnTextChange( wxCommandEvent& event )
|
void OnChar( wxKeyEvent& event )
|
||||||
{
|
{
|
||||||
wxString s = GetValue();
|
if ( event.KeyCode() == WXK_RETURN )
|
||||||
|
{
|
||||||
if (!s.IsEmpty())
|
wxString value = GetValue();
|
||||||
m_cb->DelegateTextChanged( s );
|
|
||||||
|
|
||||||
|
if ( m_cb->GetCount() == 0 )
|
||||||
|
{
|
||||||
|
// make Enter generate "selected" event if there is only one item
|
||||||
|
// in the combobox - without it, it's impossible to select it at
|
||||||
|
// all!
|
||||||
|
wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, m_cb->GetId() );
|
||||||
|
event.SetInt( 0 );
|
||||||
|
event.SetString( value );
|
||||||
|
event.SetEventObject( m_cb );
|
||||||
|
m_cb->GetEventHandler()->ProcessEvent( event );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// add the item to the list if it's not there yet
|
||||||
|
if ( m_cb->FindString(value) == wxNOT_FOUND )
|
||||||
|
{
|
||||||
|
m_cb->Append(value);
|
||||||
|
m_cb->SetStringSelection(value);
|
||||||
|
|
||||||
|
// and generate the selected event for it
|
||||||
|
wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, m_cb->GetId() );
|
||||||
|
event.SetInt( m_cb->GetCount() - 1 );
|
||||||
|
event.SetString( value );
|
||||||
|
event.SetEventObject( m_cb );
|
||||||
|
m_cb->GetEventHandler()->ProcessEvent( event );
|
||||||
|
}
|
||||||
|
|
||||||
|
// This will invoke the dialog default action, such
|
||||||
|
// as the clicking the default button.
|
||||||
|
|
||||||
|
wxWindow *parent = GetParent();
|
||||||
|
while( parent && !parent->IsTopLevel() && parent->GetDefaultItem() == NULL ) {
|
||||||
|
parent = parent->GetParent() ;
|
||||||
|
}
|
||||||
|
if ( parent && parent->GetDefaultItem() )
|
||||||
|
{
|
||||||
|
wxButton *def = wxDynamicCast(parent->GetDefaultItem(),
|
||||||
|
wxButton);
|
||||||
|
if ( def && def->IsEnabled() )
|
||||||
|
{
|
||||||
|
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
|
||||||
|
event.SetEventObject(def);
|
||||||
|
def->Command(event);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
event.Skip();
|
event.Skip();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +124,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(wxComboBoxText, wxTextCtrl)
|
BEGIN_EVENT_TABLE(wxComboBoxText, wxTextCtrl)
|
||||||
EVT_TEXT(-1, wxComboBoxText::OnTextChange)
|
EVT_CHAR( wxComboBoxText::OnChar)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
class wxComboBoxChoice : public wxChoice
|
class wxComboBoxChoice : public wxChoice
|
||||||
@@ -92,6 +142,11 @@ protected:
|
|||||||
wxString s = e.GetString();
|
wxString s = e.GetString();
|
||||||
|
|
||||||
m_cb->DelegateChoice( s );
|
m_cb->DelegateChoice( s );
|
||||||
|
wxCommandEvent event2(wxEVT_COMMAND_COMBOBOX_SELECTED, m_cb->GetId() );
|
||||||
|
event2.SetInt(m_cb->GetSelection());
|
||||||
|
event2.SetEventObject(m_cb);
|
||||||
|
event2.SetString(m_cb->GetStringSelection());
|
||||||
|
m_cb->ProcessCommand(event2);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -187,6 +242,7 @@ void wxComboBox::SetFocus()
|
|||||||
|
|
||||||
void wxComboBox::DelegateTextChanged( const wxString& value )
|
void wxComboBox::DelegateTextChanged( const wxString& value )
|
||||||
{
|
{
|
||||||
|
SetStringSelection( value );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -57,13 +57,63 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void OnTextChange( wxCommandEvent& event )
|
void OnChar( wxKeyEvent& event )
|
||||||
{
|
{
|
||||||
wxString s = GetValue();
|
if ( event.KeyCode() == WXK_RETURN )
|
||||||
|
{
|
||||||
if (!s.IsEmpty())
|
wxString value = GetValue();
|
||||||
m_cb->DelegateTextChanged( s );
|
|
||||||
|
|
||||||
|
if ( m_cb->GetCount() == 0 )
|
||||||
|
{
|
||||||
|
// make Enter generate "selected" event if there is only one item
|
||||||
|
// in the combobox - without it, it's impossible to select it at
|
||||||
|
// all!
|
||||||
|
wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, m_cb->GetId() );
|
||||||
|
event.SetInt( 0 );
|
||||||
|
event.SetString( value );
|
||||||
|
event.SetEventObject( m_cb );
|
||||||
|
m_cb->GetEventHandler()->ProcessEvent( event );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// add the item to the list if it's not there yet
|
||||||
|
if ( m_cb->FindString(value) == wxNOT_FOUND )
|
||||||
|
{
|
||||||
|
m_cb->Append(value);
|
||||||
|
m_cb->SetStringSelection(value);
|
||||||
|
|
||||||
|
// and generate the selected event for it
|
||||||
|
wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, m_cb->GetId() );
|
||||||
|
event.SetInt( m_cb->GetCount() - 1 );
|
||||||
|
event.SetString( value );
|
||||||
|
event.SetEventObject( m_cb );
|
||||||
|
m_cb->GetEventHandler()->ProcessEvent( event );
|
||||||
|
}
|
||||||
|
|
||||||
|
// This will invoke the dialog default action, such
|
||||||
|
// as the clicking the default button.
|
||||||
|
|
||||||
|
wxWindow *parent = GetParent();
|
||||||
|
while( parent && !parent->IsTopLevel() && parent->GetDefaultItem() == NULL ) {
|
||||||
|
parent = parent->GetParent() ;
|
||||||
|
}
|
||||||
|
if ( parent && parent->GetDefaultItem() )
|
||||||
|
{
|
||||||
|
wxButton *def = wxDynamicCast(parent->GetDefaultItem(),
|
||||||
|
wxButton);
|
||||||
|
if ( def && def->IsEnabled() )
|
||||||
|
{
|
||||||
|
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
|
||||||
|
event.SetEventObject(def);
|
||||||
|
def->Command(event);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
event.Skip();
|
event.Skip();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +124,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(wxComboBoxText, wxTextCtrl)
|
BEGIN_EVENT_TABLE(wxComboBoxText, wxTextCtrl)
|
||||||
EVT_TEXT(-1, wxComboBoxText::OnTextChange)
|
EVT_CHAR( wxComboBoxText::OnChar)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
class wxComboBoxChoice : public wxChoice
|
class wxComboBoxChoice : public wxChoice
|
||||||
@@ -92,6 +142,11 @@ protected:
|
|||||||
wxString s = e.GetString();
|
wxString s = e.GetString();
|
||||||
|
|
||||||
m_cb->DelegateChoice( s );
|
m_cb->DelegateChoice( s );
|
||||||
|
wxCommandEvent event2(wxEVT_COMMAND_COMBOBOX_SELECTED, m_cb->GetId() );
|
||||||
|
event2.SetInt(m_cb->GetSelection());
|
||||||
|
event2.SetEventObject(m_cb);
|
||||||
|
event2.SetString(m_cb->GetStringSelection());
|
||||||
|
m_cb->ProcessCommand(event2);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -187,6 +242,7 @@ void wxComboBox::SetFocus()
|
|||||||
|
|
||||||
void wxComboBox::DelegateTextChanged( const wxString& value )
|
void wxComboBox::DelegateTextChanged( const wxString& value )
|
||||||
{
|
{
|
||||||
|
SetStringSelection( value );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user