/////////////////////////////////////////////////////////////////////////////
-// Name: combobox.cpp
+// Name: src/mac/carbon/combobox.cpp
// Purpose: wxComboBox class
// Author: Stefan Csomor
// Modified by:
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-#pragma implementation "combobox.h"
-#endif
+#include "wx/wxprec.h"
+
+#if wxUSE_COMBOBOX
#include "wx/combobox.h"
#include "wx/button.h"
#include "wx/menu.h"
#include "wx/mac/uma.h"
-#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxControl)
-#endif
// composite combobox implementation by Dan "Bud" Keith bud@otsys.com
protected:
void OnChar( wxKeyEvent& event )
{
- // Allows processing the tab key to go to the next control
- if (event.GetKeyCode() == WXK_TAB)
- {
- wxNavigationKeyEvent NavEvent;
- NavEvent.SetEventObject(this);
- NavEvent.SetDirection(true);
- NavEvent.SetWindowChange(false);
-
- // Get the parent of the combo and have it process the navigation?
- if (m_cb->GetParent()->GetEventHandler()->ProcessEvent(NavEvent))
+ // Allows processing the tab key to go to the next control
+ if (event.GetKeyCode() == WXK_TAB)
+ {
+ wxNavigationKeyEvent NavEvent;
+ NavEvent.SetEventObject(this);
+ NavEvent.SetDirection(true);
+ NavEvent.SetWindowChange(false);
+
+ // Get the parent of the combo and have it process the navigation?
+ if (m_cb->GetParent()->GetEventHandler()->ProcessEvent(NavEvent))
return;
- }
+ }
+
+ // send the event to the combobox class in case the user has bound EVT_CHAR
+ wxKeyEvent kevt(event);
+ kevt.SetEventObject(m_cb);
+ if (m_cb->GetEventHandler()->ProcessEvent(kevt))
+ // If the event was handled and not skipped then we're done
+ return;
+
if ( event.GetKeyCode() == WXK_RETURN )
{
wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_cb->GetId());
event.Skip();
}
- // Use the KeyUp as a naive approximation for TEXT_UPDATED, even though it is somewhat delayed
- // but this is less complicated than dealing with idle-ness, and is much better than nothing
void OnKeyUp( wxKeyEvent& event )
{
- if ( event.GetKeyCode() != WXK_RETURN )
- {
- wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_cb->GetId());
- event.SetString( GetValue() );
- event.SetEventObject( m_cb );
- m_cb->GetEventHandler()->ProcessEvent(event);
- }
+ event.SetEventObject(m_cb);
+ event.SetId(m_cb->GetId());
+ if (! m_cb->GetEventHandler()->ProcessEvent(event))
+ event.Skip();
+ }
+
+ void OnKeyDown( wxKeyEvent& event )
+ {
+ event.SetEventObject(m_cb);
+ event.SetId(m_cb->GetId());
+ if (! m_cb->GetEventHandler()->ProcessEvent(event))
+ event.Skip();
}
+
+ void OnText( wxCommandEvent& event )
+ {
+ event.SetEventObject(m_cb);
+ event.SetId(m_cb->GetId());
+ if (! m_cb->GetEventHandler()->ProcessEvent(event))
+ event.Skip();
+ }
+
private:
wxComboBox *m_cb;
};
BEGIN_EVENT_TABLE(wxComboBoxText, wxTextCtrl)
- EVT_CHAR( wxComboBoxText::OnChar)
- EVT_KEY_UP( wxComboBoxText::OnKeyUp)
+ EVT_KEY_DOWN( wxComboBoxText::OnKeyDown)
+ EVT_CHAR( wxComboBoxText::OnChar)
+ EVT_KEY_UP( wxComboBoxText::OnKeyUp)
+ EVT_TEXT( -1, wxComboBoxText::OnText)
END_EVENT_TABLE()
class wxComboBoxChoice : public wxChoice
{
public:
wxComboBoxChoice(wxComboBox *cb, int style)
- : wxChoice( cb , 1 )
+ : wxChoice( cb , 1 , wxDefaultPosition , wxDefaultSize , 0 , NULL , style & (wxCB_SORT) )
{
m_cb = cb;
}
bool wxComboBox::Enable(bool enable)
{
if ( !wxControl::Enable(enable) )
- return FALSE;
+ return false;
+
+ if (m_text)
+ m_text->Enable(enable);
- return TRUE;
+ return true;
}
bool wxComboBox::Show(bool show)
{
if ( !wxControl::Show(show) )
- return FALSE;
+ return false;
- return TRUE;
+ return true;
}
void wxComboBox::SetFocus()
const wxString& name)
{
if ( !wxControl::Create(parent, id, wxDefaultPosition, wxDefaultSize, style ,
- wxDefaultValidator, name) )
+ validator, name) )
{
- return FALSE;
+ return false;
}
m_choice = new wxComboBoxChoice(this, style );
}
SetBestSize(size); // Needed because it is a wxControlWithItems
+ SetStringSelection(value);
- return TRUE;
+ return true;
}
wxString wxComboBox::GetValue() const
return 0;
}
-long wxComboBox::GetLastPosition() const
+wxTextPos wxComboBox::GetLastPosition() const
{
// TODO
return 0;
}
}
-int wxComboBox::FindString(const wxString& s) const
+int wxComboBox::FindString(const wxString& s, bool bCase) const
{
- return m_choice->FindString( s );
+ return m_choice->FindString( s, bCase );
}
wxString wxComboBox::GetString(int n) const
return wxEmptyString;
}
-bool wxComboBox::SetStringSelection(const wxString& sel)
-{
- int s = FindString (sel);
- if (s > -1)
- {
- SetSelection (s);
- return TRUE;
- }
- else
- return FALSE;
-}
-
void wxComboBox::SetString(int n, const wxString& s)
{
m_choice->SetString( n , s ) ;
bool wxComboBox::IsEditable() const
{
- return m_text != NULL && !HasFlag(wxCB_READONLY);
+ return m_text != NULL && !HasFlag(wxCB_READONLY);
}
void wxComboBox::Undo()
return noErr ;
}
+#endif