]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/combobox.cpp
non PCH compilation
[wxWidgets.git] / src / osx / carbon / combobox.cpp
index 90ba52c9c8e123e4fa76ddfbc84f3677b28485f9..2dd77998678eb8374bc4e40fa1301777e2ecbd3f 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        src/mac/carbon/combobox.cpp
+// Name:        src/osx/carbon/combobox.cpp
 // Purpose:     wxComboBox class
 // Author:      Stefan Csomor, Dan "Bud" Keith (composite combobox)
 // Modified by:
@@ -11,7 +11,7 @@
 
 #include "wx/wxprec.h"
 
-#if wxUSE_COMBOBOX
+#if wxUSE_COMBOBOX && wxOSX_USE_CARBON
 
 #include "wx/combobox.h"
 
@@ -23,7 +23,7 @@
     #include "wx/textctrl.h"
 #endif
 
-#include "wx/mac/uma.h"
+#include "wx/osx/private.h"
 
 IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxControl)
 
@@ -34,17 +34,6 @@ BEGIN_EVENT_TABLE(wxComboBox, wxControl)
 END_EVENT_TABLE()
 
 
-static int nextPopUpMenuId = 1000 ;
-
-MenuHandle NewUniqueMenu()
-{
-    MenuHandle handle = UMANewMenu(nextPopUpMenuId, wxString(wxT("Menu")), wxFont::GetDefaultEncoding() );
-    nextPopUpMenuId++ ;
-
-    return handle ;
-}
-
-
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
@@ -68,9 +57,12 @@ public:
         : wxTextCtrl( cb , 1 )
     {
         m_cb = cb;
-        SetTriggerOnSetValue( false );
     }
 
+    void ForwardEnableTextChangedEvents(bool enable)
+    {
+        EnableTextChangedEvents(enable);
+    }
 protected:
     void OnChar( wxKeyEvent& event )
     {
@@ -148,6 +140,17 @@ protected:
             event.Skip();
     }
 
+    void OnFocus( wxFocusEvent& event )
+    {
+        // in case the textcontrol gets the focus we propagate
+        // it to the parent's handlers.
+        wxFocusEvent evt2(event.GetEventType(),m_cb->GetId());
+        evt2.SetEventObject(m_cb);
+        m_cb->GetEventHandler()->ProcessEvent(evt2);
+
+        event.Skip();
+    }
+
 private:
     wxComboBox *m_cb;
 
@@ -158,6 +161,8 @@ BEGIN_EVENT_TABLE(wxComboBoxText, wxTextCtrl)
     EVT_KEY_DOWN(wxComboBoxText::OnKeyDown)
     EVT_CHAR(wxComboBoxText::OnChar)
     EVT_KEY_UP(wxComboBoxText::OnKeyUp)
+    EVT_SET_FOCUS(wxComboBoxText::OnFocus)
+    EVT_KILL_FOCUS(wxComboBoxText::OnFocus)
     EVT_TEXT(wxID_ANY, wxComboBoxText::OnText)
 END_EVENT_TABLE()
 
@@ -256,12 +261,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
     {
@@ -286,9 +290,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);
     }
 }
 
@@ -393,6 +401,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;
@@ -651,7 +672,7 @@ bool wxComboBox::CanRedo() const
         return false;
 }
 
-wxInt32 wxComboBox::MacControlHit( WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF WXUNUSED(event) )
+bool wxComboBox::OSXHandleClicked( double WXUNUSED(timestampsec) )
 {
 /*
     For consistency with other platforms, clicking in the text area does not constitute a selection
@@ -662,7 +683,15 @@ wxInt32 wxComboBox::MacControlHit( WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENT
     ProcessCommand(event);
 */
 
-    return noErr ;
+    return true ;
+}
+
+wxTextWidgetImpl* wxComboBox::GetTextPeer() const
+{
+    if (m_text)
+        return m_text->GetTextPeer();
+    
+    return NULL;
 }
 
-#endif // wxUSE_COMBOBOX
+#endif // wxUSE_COMBOBOX && wxOSX_USE_CARBON