// ----------------------------------------------------------------------------
// the margin between the text control and the choice
+#if TARGET_API_MAC_OSX
+// margin should be bigger on OS X due to blue highlight
+// around text control.
+static const wxCoord MARGIN = 6;
+static const int POPUPWIDTH = 24;
+#else
static const wxCoord MARGIN = 2;
static const int POPUPWIDTH = 18;
+#endif
static const int POPUPHEIGHT = 23;
: wxTextCtrl( cb , 1 )
{
m_cb = cb;
+
+ // remove the default minsize, the combobox will have one instead
+ SetSizeHints(-1,-1);
}
protected:
: wxChoice( cb , 1 )
{
m_cb = cb;
+
+ // remove the default minsize, the combobox will have one instead
+ SetSizeHints(-1,-1);
}
protected:
event2.SetString(m_cb->GetStringSelection());
m_cb->ProcessCommand(event2);
}
+ virtual wxSize DoGetBestSize() const
+ {
+ wxSize sz = wxChoice::DoGetBestSize() ;
+ if (! m_cb->HasFlag(wxCB_READONLY) )
+ sz.x = POPUPWIDTH;
+ return sz ;
+ }
private:
wxComboBox *m_cb;
wxSize wxComboBox::DoGetBestSize() const
{
+ if (!m_choice || !m_text)
+ return GetSize();
wxSize size = m_choice->GetBestSize();
if ( m_text != NULL )
{
wxSize sizeText = m_text->GetBestSize();
-
+ if (sizeText.y > size.y)
+ size.y = sizeText.y;
size.x = POPUPWIDTH + sizeText.x + MARGIN;
}
void wxComboBox::DoMoveWindow(int x, int y, int width, int height) {
height = POPUPHEIGHT;
-
- wxControl::DoMoveWindow(x, y, width, height);
+ int origin = 0;
+#if TARGET_API_MAC_OSX
+ // give the controls some padding so that the text ctrl's borders
+ // and blue highlight can appear
+ origin = 4;
+#endif
+
+ wxControl::DoMoveWindow(x, y, width + origin, height + origin);
if ( m_text == NULL )
{
else
{
wxCoord wText = width - POPUPWIDTH - MARGIN;
- m_text->SetSize(0, 0, wText, height);
- m_choice->SetSize(0 + wText + MARGIN, 0, POPUPWIDTH, -1);
+#if TARGET_API_MAC_OSX
+ // also, we need to shrink the size of the wxTextCtrl a bit
+ // to make it appear properly on OS X.
+ height -= 8;
+ wText -= 8;
+#endif
+ m_text->SetSize(origin, origin, wText, height);
+ m_choice->SetSize(origin + wText + MARGIN, 0, POPUPWIDTH, -1);
}
}
}
m_choice = new wxComboBoxChoice(this, style );
-
+ m_choice->SetSizeHints( wxSize( POPUPWIDTH , POPUPHEIGHT ) ) ;
wxSize csize = size;
if ( style & wxCB_READONLY )
{
m_choice->DoAppend( choices[ i ] );
}
+ SetBestSize(csize); // Needed because it is a wxControlWithItems
+
return TRUE;
}
return result;
}
+int wxComboBox::GetCount() const
+{
+ return m_choice->GetCount() ;
+}
+
void wxComboBox::SetValue(const wxString& value)
{
int s = FindString (value);
}
-void wxComboBox::MacHandleControlClick( WXWidget WXUNUSED(control) , wxInt16 WXUNUSED(controlpart) , bool WXUNUSED(mouseStillDown))
+wxInt32 wxComboBox::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF WXUNUSED(event) )
{
wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_SELECTED, m_windowId );
event.SetInt(GetSelection());
event.SetEventObject(this);
event.SetString(GetStringSelection());
ProcessCommand(event);
+ return noErr ;
}