X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/061896d126a09dc2c77e00950ba01223d7dddfa6..11fe6505b848a968f4c89cb3c3fd37a6a03bcaea:/src/cocoa/combobox.mm diff --git a/src/cocoa/combobox.mm b/src/cocoa/combobox.mm index e0fe3d4911..041fd382c5 100644 --- a/src/cocoa/combobox.mm +++ b/src/cocoa/combobox.mm @@ -1,23 +1,21 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: cocoa/combobox.mm +// Name: src/cocoa/combobox.mm // Purpose: wxComboBox -// Author: Ryan Norton +// Author: Ryan Norton // Modified by: // Created: 2005/02/16 // RCS-ID: $Id$ // Copyright: (c) 2003 David Elliott -// Licence: wxWidgets licence +// Licence: wxWidgets licence ///////////////////////////////////////////////////////////////////////////// -// #include "wx/wxprec.h" - // // Impl notes: -// There is no custom data source because doing so unneccesaraly sacrifices -// some native autocompletion behavior (we would have to make our own - +// There is no custom data source because doing so unnecessarily sacrifices +// some native autocompletion behavior (we would have to make our own - // the SimpleComboBox sample does so in the developer folder that // comes with OSX). One reason you might want this would be to have -// only one array or be able to display numbers by returned an NSNumber +// only one array or be able to display numbers returned by an NSNumber // from the methods. // // One problem though is that wxCB_SORT isn't implemented... @@ -28,9 +26,9 @@ // doWxEvent is really hackish... but since there's only one event... // // Ideas for future improvement - other notes: -// Combox w/o wxCB_DROPDOWN doesn't seem to be implementable -//wxCB_READONLY Same as wxCB_DROPDOWN but only the strings specified as the combobox choices can be selected, it is impossible to select (even from a program) a string which is not in the choices list. -//wxCB_SORT is possible with data source +// Combox w/o wxCB_DROPDOWN doesn't seem to be implementable +//wxCB_READONLY Same as wxCB_DROPDOWN but only the strings specified as the combobox choices can be selected, it is impossible to select (even from a program) a string which is not in the choices list. +//wxCB_SORT is possible with data source // // setIntercellSpacing:/setItemHeight: to autoadjust to number of inserted items? // @@ -55,7 +53,7 @@ NSString *lowercasePrefix = [prefix lowercaseString]; NSEnumerator *stringEnum = [genres objectEnumerator]; while ((string = [stringEnum nextObject])) { - if ([[string lowercaseString] hasPrefix: lowercasePrefix]) return string; + if ([[string lowercaseString] hasPrefix: lowercasePrefix]) return string; } return nil; } @@ -68,17 +66,6 @@ } */ -///////////////////////////////////////////////////////////////////////////// -// Name: cocoa/NSComboBox.mm -// Purpose: wxCocoaNSComboBox -// Author: Ryan Norton -// Modified by: -// Created: 2005/02/16 -// RCS-ID: $Id: -// Copyright: (c) 2003 David Elliott -// Licence: wxWidgets licence -///////////////////////////////////////////////////////////////////////////// - // ============================================================================ // declarations // ============================================================================ @@ -88,15 +75,17 @@ // ---------------------------------------------------------------------------- #include "wx/wxprec.h" + #if wxUSE_COMBOBOX +#include "wx/combobox.h" + #ifndef WX_PRECOMP #include "wx/window.h" + #include "wx/log.h" + #include "wx/app.h" #endif // WX_PRECOMP -#include "wx/cocoa/ObjcPose.h" -#include "wx/combobox.h" - #import #import #import @@ -111,7 +100,7 @@ void wxCocoaNSComboBox::AssociateNSComboBox(WX_NSComboBox cocoaNSComboBox) if(cocoaNSComboBox) { sm_cocoaHash.insert(wxCocoaNSComboBoxHash::value_type(cocoaNSComboBox,this)); - + [[NSNotificationCenter defaultCenter] addObserver:(id)cocoaNSComboBox selector:@selector(comboBoxSelectionDidChange:) name:@"NSComboBoxSelectionDidChangeNotification" object:cocoaNSComboBox]; [[NSNotificationCenter defaultCenter] addObserver:(id)cocoaNSComboBox selector:@selector(comboBoxSelectionDidChange:) name:@"NSComboBoxSelectionIsChangingNotification" object:cocoaNSComboBox]; [[NSNotificationCenter defaultCenter] addObserver:(id)cocoaNSComboBox selector:@selector(comboBoxSelectionDidChange:) name:@"NSComboBoxWillDismissNotification" object:cocoaNSComboBox]; @@ -170,10 +159,6 @@ void wxCocoaNSComboBox::DisassociateNSComboBox(WX_NSComboBox cocoaNSComboBox) @end // implementation wxPoserNSComboBox -#include "wx/app.h" -#include "wx/combobox.h" -#include "wx/log.h" - #include "wx/cocoa/autorelease.h" #include "wx/cocoa/string.h" @@ -211,7 +196,7 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID winid, wxAutoNSAutoreleasePool pool; if(!CreateControl(parent,winid,pos,size,style,validator,name)) return false; - + m_cocoaNSView = NULL; SetNSComboBox([[wxPoserNSComboBox alloc] initWithFrame:MakeDefaultNSRect(size)]); [m_cocoaNSView release]; @@ -221,11 +206,10 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID winid, m_parent->CocoaAddChild(this); SetInitialFrameRect(pos,size); - for(int i = 0; i < n; ++i) - wxComboBox::DoAppend(choices[i]); - + wxComboBox::Append(n, choices); + [GetNSComboBox() setCompletes:true]; //autocomplete :) - + return true; } @@ -261,75 +245,72 @@ wxString wxComboBox::GetStringSelection() return wxStringWithNSString([GetNSComboBox() objectValueOfSelectedItem]); } -void wxComboBox::Clear() +void wxComboBox::DoClear() { [GetNSComboBox() removeAllItems]; m_Datas.Clear(); } -void wxComboBox::Delete(int nIndex) +void wxComboBox::DoDeleteOneItem(unsigned int n) { - [GetNSComboBox() removeItemAtIndex:nIndex]; - m_Datas.RemoveAt(nIndex); + [GetNSComboBox() removeItemAtIndex:n]; + m_Datas.RemoveAt(n); } -int wxComboBox::GetCount() const +unsigned int wxComboBox::GetCount() const { - return [GetNSComboBox() numberOfItems]; + return (unsigned int)[GetNSComboBox() numberOfItems]; } -wxString wxComboBox::GetString(int nIndex) const -{ return wxStringWithNSString([GetNSComboBox() itemObjectValueAtIndex:nIndex]); } +wxString wxComboBox::GetString(unsigned int nIndex) const +{ + return wxStringWithNSString([GetNSComboBox() itemObjectValueAtIndex:nIndex]); +} -void wxComboBox::SetString(int nIndex, const wxString& szString) -{ +void wxComboBox::SetString(unsigned int nIndex, const wxString& szString) +{ wxAutoNSAutoreleasePool pool; //FIXME: There appears to be no "set item data" method - maybe //an assignment would work? [GetNSComboBox() removeItemAtIndex:nIndex]; - [GetNSComboBox() insertItemWithObjectValue:wxNSStringWithWxString(szString) atIndex:nIndex]; + [GetNSComboBox() insertItemWithObjectValue:wxNSStringWithWxString(szString) atIndex:nIndex]; } -int wxComboBox::FindString(const wxString& szItem) const -{ return [GetNSComboBox() indexOfItemWithObjectValue:wxNSStringWithWxString(szItem)]; } +int wxComboBox::FindString(const wxString& szItem, bool bCase) const +{ + // FIXME: use wxItemContainerImmutable::FindString for bCase parameter + return [GetNSComboBox() indexOfItemWithObjectValue:wxNSStringWithWxString(szItem)]; +} int wxComboBox::GetSelection() const -{ return [GetNSComboBox() indexOfSelectedItem]; } - -int wxComboBox::DoAppend(const wxString& szItem) { - m_Datas.Add(NULL); - wxAutoNSAutoreleasePool pool; - [GetNSComboBox() addItemWithObjectValue:wxNSStringWithWxString(szItem)]; - return [GetNSComboBox() numberOfItems]; + return [GetNSComboBox() indexOfSelectedItem]; } -int wxComboBox::DoInsert(const wxString& szItem, int nIndex) +int wxComboBox::DoInsertItems(const wxArrayStringsAdapter& items, + unsigned int pos, + void **clientData, + wxClientDataType type) { - m_Datas.Insert(NULL, nIndex); wxAutoNSAutoreleasePool pool; - [GetNSComboBox() insertItemWithObjectValue:wxNSStringWithWxString(szItem) atIndex:nIndex]; - return nIndex; + const unsigned int numITems = items.GetCount(); + for ( unsigned int i = 0; i < numITems; ++i, ++pos ) + { + [GetNSComboBox() insertItemWithObjectValue:wxNSStringWithWxString(items[i]) atIndex:(pos)]; + m_Datas.Insert(NULL, pos); + AssignNewItemClientData(pos, clientData, i, type); + } + return pos - 1; } -void wxComboBox::DoSetItemClientData(int nIndex, void* pData) +void wxComboBox::DoSetItemClientData(unsigned int nIndex, void* pData) { m_Datas[nIndex] = pData; } -void* wxComboBox::DoGetItemClientData(int nIndex) const +void* wxComboBox::DoGetItemClientData(unsigned int nIndex) const { return m_Datas[nIndex]; } -void wxComboBox::DoSetItemClientObject(int nIndex, wxClientData* pClientData) -{ - m_Datas[nIndex] = (void*) pClientData; -} - -wxClientData* wxComboBox::DoGetItemClientObject(int nIndex) const -{ - return (wxClientData*) m_Datas[nIndex]; -} - -#endif //wxUSE_COMBOBOX +#endif // wxUSE_COMBOBOX