X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9044b125fd8542dab159d4a1585aae62e5547ae6..8a07956565ddccd1720abf4e510945593128d774:/src/osx/carbon/combobox.cpp diff --git a/src/osx/carbon/combobox.cpp b/src/osx/carbon/combobox.cpp index 54c70ebca5..2662bb8bd0 100644 --- a/src/osx/carbon/combobox.cpp +++ b/src/osx/carbon/combobox.cpp @@ -11,7 +11,7 @@ #include "wx/wxprec.h" -#if wxUSE_COMBOBOX +#if wxUSE_COMBOBOX && wxOSX_USE_CARBON #include "wx/combobox.h" @@ -25,8 +25,6 @@ #include "wx/osx/private.h" -IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxControl) - WX_DELEGATE_TO_CONTROL_CONTAINER(wxComboBox, wxControl) BEGIN_EVENT_TABLE(wxComboBox, wxControl) @@ -57,7 +55,6 @@ public: : wxTextCtrl( cb , 1 ) { m_cb = cb; - SetTriggerOnSetValue( false ); } protected: @@ -147,6 +144,7 @@ protected: event.Skip(); } + private: wxComboBox *m_cb; @@ -230,17 +228,8 @@ wxComboBox::~wxComboBox() // delete the controls now, don't leave them alive even though they would // still be eventually deleted by our parent - but it will be too late, the // user code expects them to be gone now - if (m_text != NULL) - { - delete m_text; - m_text = NULL; - } - - if (m_choice != NULL) - { - delete m_choice; - m_choice = NULL; - } + wxDELETE(m_text); + wxDELETE(m_choice); } // ---------------------------------------------------------------------------- @@ -257,12 +246,11 @@ wxSize wxComboBox::DoGetBestSize() const if ( m_text != NULL ) { wxSize sizeText = m_text->GetBestSize(); - if (sizeText.y > size.y) - size.y = sizeText.y; + if (sizeText.y + 2 * TEXTFOCUSBORDER > size.y) + size.y = sizeText.y + 2 * TEXTFOCUSBORDER; size.x = m_choice->GetPopupWidth() + sizeText.x + MARGIN; size.x += TEXTFOCUSBORDER ; - size.y += 2 * TEXTFOCUSBORDER ; } else { @@ -287,9 +275,13 @@ void wxComboBox::DoMoveWindow(int x, int y, int width, int height) { wxCoord wText = width - m_choice->GetPopupWidth() - MARGIN; m_text->SetSize(TEXTFOCUSBORDER, TEXTFOCUSBORDER, wText, -1); + wxSize tSize = m_text->GetSize(); + wxSize cSize = m_choice->GetSize(); + + int yOffset = ( tSize.y + 2 * TEXTFOCUSBORDER - cSize.y ) / 2; // put it at an inset of 1 to have outer area shadows drawn as well - m_choice->SetSize(TEXTFOCUSBORDER + wText + MARGIN - 1 , TEXTFOCUSBORDER, m_choice->GetPopupWidth() , -1); + m_choice->SetSize(TEXTFOCUSBORDER + wText + MARGIN - 1 , yOffset, m_choice->GetPopupWidth() , -1); } } @@ -394,6 +386,19 @@ bool wxComboBox::Create(wxWindow *parent, return true; } +void wxComboBox::EnableTextChangedEvents(bool enable) +{ + if ( m_text ) + m_text->ForwardEnableTextChangedEvents(enable); +} + +wxString wxComboBox::DoGetValue() const +{ + wxCHECK_MSG( m_text, wxString(), "can't be called for read-only combobox" ); + + return m_text->GetValue(); +} + wxString wxComboBox::GetValue() const { wxString result; @@ -455,10 +460,9 @@ void wxComboBox::SetEditable(bool editable) { m_text = new wxComboBoxText( this ); } - else if ( ( m_text != NULL ) && !editable ) + else if ( !editable ) { - delete m_text; - m_text = NULL; + wxDELETE(m_text); } int currentX, currentY; @@ -652,7 +656,7 @@ bool wxComboBox::CanRedo() const return false; } -bool wxComboBox::HandleClicked( double timestampsec ) +bool wxComboBox::OSXHandleClicked( double WXUNUSED(timestampsec) ) { /* For consistency with other platforms, clicking in the text area does not constitute a selection @@ -666,4 +670,12 @@ bool wxComboBox::HandleClicked( double timestampsec ) return true ; } -#endif // wxUSE_COMBOBOX +wxTextWidgetImpl* wxComboBox::GetTextPeer() const +{ + if (m_text) + return m_text->GetTextPeer(); + + return NULL; +} + +#endif // wxUSE_COMBOBOX && wxOSX_USE_CARBON