+ wxDoChangeForegroundColour(m_widgetArray[i], m_foregroundColour);
+}
+
+int wxChoice::GetCount() const
+{
+ return m_noStrings;
+}
+
+void wxChoice::DoSetItemClientData(int n, void* clientData)
+{
+ m_clientDataDict.Set(n, (wxClientData*)clientData, FALSE);
+}
+
+void* wxChoice::DoGetItemClientData(int n) const
+{
+ return (void*)m_clientDataDict.Get(n);
+}
+
+void wxChoice::DoSetItemClientObject(int n, wxClientData* clientData)
+{
+ // don't delete, wxItemContainer does that for us
+ m_clientDataDict.Set(n, clientData, FALSE);
+}
+
+wxClientData* wxChoice::DoGetItemClientObject(int n) const
+{
+ return m_clientDataDict.Get(n);
+}
+
+void wxChoice::SetString(int WXUNUSED(n), const wxString& WXUNUSED(s))
+{
+ wxFAIL_MSG( wxT("wxChoice::SetString not implemented") );
+}
+
+wxSize wxChoice::GetItemsSize() const
+{
+ int x, y, mx = 0, my = 0;
+
+ // get my
+ GetTextExtent( "|", &x, &my );
+
+ wxStringList::Node* curr = m_stringList.GetFirst();
+ while( curr )
+ {
+ GetTextExtent( curr->GetData(), &x, &y );
+ mx = wxMax( mx, x );
+ my = wxMax( my, y );
+ curr = curr->GetNext();
+ }
+
+ return wxSize( mx, my );
+}
+
+wxSize wxChoice::DoGetBestSize() const
+{
+ wxSize items = GetItemsSize();
+ // FIXME arbitrary constants
+ return wxSize( ( items.x ? items.x + WIDTH_OVERHEAD : 120 ),
+ items.y + HEIGHT_OVERHEAD );