// ----------------------------------------------------------------------------
// the margin between the text control and the choice
-static const wxCoord MARGIN = 2;
#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;
virtual wxSize DoGetBestSize() const
{
wxSize sz = wxChoice::DoGetBestSize() ;
- sz.x = POPUPWIDTH ;
+ if (! m_cb->HasFlag(wxCB_READONLY) )
+ sz.x = POPUPWIDTH;
return sz ;
}
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
+ SetBestSize(size); // 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);