X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3b3dc8019a520ce5e166c8ae9098ba020f8b3f94..19cf1ef3a7077dd99a90f141847b8a9b67b318c9:/src/mac/carbon/combobxc.cpp diff --git a/src/mac/carbon/combobxc.cpp b/src/mac/carbon/combobxc.cpp index fff4f2e43a..670cbf7b6d 100644 --- a/src/mac/carbon/combobxc.cpp +++ b/src/mac/carbon/combobxc.cpp @@ -147,14 +147,10 @@ protected: // This will invoke the dialog default action, such // as the clicking the default button. - wxWindow *parent = GetParent(); - while( parent && !parent->IsTopLevel() && parent->GetDefaultItem() == NULL ) { - parent = parent->GetParent(); - } - if ( parent && parent->GetDefaultItem() ) + wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow); + if ( tlw && tlw->GetDefaultItem() ) { - wxButton *def = wxDynamicCast(parent->GetDefaultItem(), - wxButton); + wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton); if ( def && def->IsEnabled() ) { wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() ); @@ -220,9 +216,6 @@ END_EVENT_TABLE() wxComboBox::~wxComboBox() { - // delete client objects - FreeData(); - // delete the controls now, don't leave them alive even though they would // still be eventually deleted by our parent - but it will be too late, the // user code expects them to be gone now @@ -390,10 +383,7 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id, MacPostControlCreate(pos,size); - for ( int i = 0; i < n; i++ ) - { - DoAppend( choices[ i ] ); - } + Append( choices[ i ] ); HIViewSetVisible( m_peer->GetControlRef(), true ); SetSelection(0); @@ -403,9 +393,7 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id, (EventHandlerRef *)&comboEventHandler); #else m_choice = new wxComboBoxChoice(this, style ); - - m_choice = new wxComboBoxChoice(this, style ); - m_choice->SetSizeHints( wxSize( POPUPWIDTH , POPUPHEIGHT ) ); + m_choice->SetMinSize( wxSize( POPUPWIDTH , POPUPHEIGHT ) ); wxSize csize = size; if ( style & wxCB_READONLY ) @@ -422,11 +410,8 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id, DoSetSize(pos.x, pos.y, csize.x, csize.y); - for ( int i = 0; i < n; i++ ) - { - m_choice->DoAppend( choices[ i ] ); - } - SetBestSize(csize); // Needed because it is a wxControlWithItems + m_choice->Append( n, choices ); + SetInitialSize(csize); // Needed because it is a wxControlWithItems #endif return true; @@ -551,28 +536,26 @@ void wxComboBox::SetSelection(long from, long to) // TODO } -int wxComboBox::DoAppend(const wxString& item) +int wxComboBox::DoInsertItems(const wxArrayStringsAdapter& items, + unsigned int pos, + void **clientData, wxClientDataType type) { #if USE_HICOMBOBOX - CFIndex outIndex; - HIComboBoxAppendTextItem( m_peer->GetControlRef(), wxMacCFStringHolder( item, m_font.GetEncoding() ), &outIndex ); - //SetControl32BitMaximum( m_peer->GetControlRef(), GetCount() ); - return (int) outIndex; -#else - return m_choice->DoAppend( item ); -#endif -} - -int wxComboBox::DoInsert(const wxString& item, unsigned int pos) -{ -#if USE_HICOMBOBOX - HIComboBoxInsertTextItemAtIndex( m_peer->GetControlRef(), (CFIndex)pos, wxMacCFStringHolder(item, m_font.GetEncoding()) ); + const unsigned int count = items.GetCount(); + for ( unsigned int i = 0; i < count; ++i, ++pos ) + { + HIComboBoxInsertTextItemAtIndex(m_peer->GetControlRef(), + (CFIndex)pos, + wxMacCFStringHolder(items[i], + m_font.GetEncoding())); + AssignNewItemClientData(pos, clientData, i, type); + } //SetControl32BitMaximum( m_peer->GetControlRef(), GetCount() ); - return pos; + return pos - 1; #else - return m_choice->DoInsert( item , pos ); + return m_choice->DoInsertItems( items, pos, clientData, type ); #endif } @@ -594,36 +577,6 @@ void* wxComboBox::DoGetItemClientData(unsigned int n) const #endif } -void wxComboBox::DoSetItemClientObject(unsigned int n, wxClientData* clientData) -{ -#if USE_HICOMBOBOX - return; //TODO -#else - return m_choice->DoSetItemClientObject( n , clientData ); -#endif -} - -wxClientData* wxComboBox::DoGetItemClientObject(unsigned int n) const -{ -#if USE_HICOMBOBOX - return NULL; -#else - return m_choice->DoGetItemClientObject( n ); -#endif -} - -void wxComboBox::FreeData() -{ - if (HasClientObjectData()) - { - unsigned int count = GetCount(); - for ( unsigned int n = 0; n < count; n++ ) - { - SetClientObject( n, NULL ); - } - } -} - unsigned int wxComboBox::GetCount() const { #if USE_HICOMBOBOX return (unsigned int) HIComboBoxGetItemCount( m_peer->GetControlRef() ); @@ -632,21 +585,17 @@ unsigned int wxComboBox::GetCount() const { #endif } -void wxComboBox::Delete(unsigned int n) +void wxComboBox::DoDeleteOneItem(unsigned int n) { #if USE_HICOMBOBOX HIComboBoxRemoveItemAtIndex( m_peer->GetControlRef(), (CFIndex)n ); #else - // force client object deletion - if( HasClientObjectData() ) - SetClientObject( n, NULL ); m_choice->Delete( n ); #endif } -void wxComboBox::Clear() +void wxComboBox::DoClear() { - FreeData(); #if USE_HICOMBOBOX for ( CFIndex i = GetCount() - 1; i >= 0; ++ i ) verify_noerr( HIComboBoxRemoveItemAtIndex( m_peer->GetControlRef(), i ) );