X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2c755d9bbf4c786a03cf6193c630fc986a69f802..f675b4f521c6696648674d8901e2d6162ab5e2fb:/src/osx/cocoa/combobox.mm diff --git a/src/osx/cocoa/combobox.mm b/src/osx/cocoa/combobox.mm index 56ce4b05ca..16876eef2e 100644 --- a/src/osx/cocoa/combobox.mm +++ b/src/osx/cocoa/combobox.mm @@ -46,7 +46,7 @@ { wxUnusedVar(aNotification); wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self ); - if ( impl ) + if ( impl && impl->ShouldSendEvents() ) { wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer(); if ( wxpeer ) { @@ -62,7 +62,7 @@ { wxUnusedVar(notification); wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self ); - if ( impl ) + if ( impl && impl->ShouldSendEvents()) { wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer(); if ( wxpeer ) { @@ -94,7 +94,10 @@ int wxNSComboBoxControl::GetSelectedItem() const void wxNSComboBoxControl::SetSelectedItem(int item) { + wxASSERT_MSG(item >= 0 && item < [m_comboBox numberOfItems], "Inavlid item index."); + SendEvents(false); [m_comboBox selectItemAtIndex: item]; + SendEvents(true); } int wxNSComboBoxControl::GetNumberOfItems() const @@ -109,12 +112,16 @@ void wxNSComboBoxControl::InsertItem(int pos, const wxString& item) void wxNSComboBoxControl::RemoveItem(int pos) { + SendEvents(false); [m_comboBox removeItemAtIndex:pos]; + SendEvents(true); } void wxNSComboBoxControl::Clear() { + SendEvents(false); [m_comboBox removeAllItems]; + SendEvents(true); } wxString wxNSComboBoxControl::GetStringAtIndex(int pos) const @@ -136,13 +143,44 @@ wxWidgetImplType* wxWidgetImpl::CreateComboBox( wxWindowMac* wxpeer, wxMenu* menu, const wxPoint& pos, const wxSize& size, - long WXUNUSED(style), + long style, long WXUNUSED(extraStyle)) { NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ; wxNSComboBox* v = [[wxNSComboBox alloc] initWithFrame:r]; + if (style & wxCB_READONLY) + [v setEditable:NO]; wxNSComboBoxControl* c = new wxNSComboBoxControl( wxpeer, v ); return c; } +wxSize wxComboBox::DoGetBestSize() const +{ + int lbWidth = GetCount() > 0 ? 20 : 100; // some defaults + wxSize baseSize = wxWindow::DoGetBestSize(); + int lbHeight = baseSize.y; + int wLine; + + { + wxClientDC dc(const_cast(this)); + + // Find the widest line + for(unsigned int i = 0; i < GetCount(); i++) + { + wxString str(GetString(i)); + + wxCoord width, height ; + dc.GetTextExtent( str , &width, &height); + wLine = width ; + + lbWidth = wxMax( lbWidth, wLine ) ; + } + + // Add room for the popup arrow + lbWidth += 2 * lbHeight ; + } + + return wxSize( lbWidth, lbHeight ); +} + #endif // wxUSE_COMBOBOX \ No newline at end of file