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:
parent
41d368a4bb
commit
8095ef23e7
@ -91,6 +91,7 @@ class WXDLLEXPORT wxComboBox: public wxChoice
|
||||
virtual void Remove(long from, long to);
|
||||
virtual void SetSelection(long from, long to);
|
||||
virtual void SetEditable(bool editable);
|
||||
virtual int GetCount() const { return m_choice->GetCount() ; }
|
||||
void MacHandleControlClick( WXWidget control , wxInt16 controlpart ) ;
|
||||
protected:
|
||||
// the subcontrols
|
||||
|
@ -57,13 +57,63 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
void OnTextChange( wxCommandEvent& event )
|
||||
void OnChar( wxKeyEvent& event )
|
||||
{
|
||||
wxString s = GetValue();
|
||||
|
||||
if (!s.IsEmpty())
|
||||
m_cb->DelegateTextChanged( s );
|
||||
if ( event.KeyCode() == WXK_RETURN )
|
||||
{
|
||||
wxString value = GetValue();
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@ -74,7 +124,7 @@ private:
|
||||
};
|
||||
|
||||
BEGIN_EVENT_TABLE(wxComboBoxText, wxTextCtrl)
|
||||
EVT_TEXT(-1, wxComboBoxText::OnTextChange)
|
||||
EVT_CHAR( wxComboBoxText::OnChar)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
class wxComboBoxChoice : public wxChoice
|
||||
@ -92,6 +142,11 @@ protected:
|
||||
wxString s = e.GetString();
|
||||
|
||||
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:
|
||||
@ -187,6 +242,7 @@ void wxComboBox::SetFocus()
|
||||
|
||||
void wxComboBox::DelegateTextChanged( const wxString& value )
|
||||
{
|
||||
SetStringSelection( value );
|
||||
}
|
||||
|
||||
|
||||
|
@ -57,13 +57,63 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
void OnTextChange( wxCommandEvent& event )
|
||||
void OnChar( wxKeyEvent& event )
|
||||
{
|
||||
wxString s = GetValue();
|
||||
|
||||
if (!s.IsEmpty())
|
||||
m_cb->DelegateTextChanged( s );
|
||||
if ( event.KeyCode() == WXK_RETURN )
|
||||
{
|
||||
wxString value = GetValue();
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@ -74,7 +124,7 @@ private:
|
||||
};
|
||||
|
||||
BEGIN_EVENT_TABLE(wxComboBoxText, wxTextCtrl)
|
||||
EVT_TEXT(-1, wxComboBoxText::OnTextChange)
|
||||
EVT_CHAR( wxComboBoxText::OnChar)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
class wxComboBoxChoice : public wxChoice
|
||||
@ -92,6 +142,11 @@ protected:
|
||||
wxString s = e.GetString();
|
||||
|
||||
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:
|
||||
@ -187,6 +242,7 @@ void wxComboBox::SetFocus()
|
||||
|
||||
void wxComboBox::DelegateTextChanged( const wxString& value )
|
||||
{
|
||||
SetStringSelection( value );
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user