#if wxUSE_CHOICE
+#include "wx/choice.h"
+
#ifndef WX_PRECOMP
#include "wx/log.h"
#include "wx/app.h"
- #include "wx/choice.h"
#include "wx/arrstr.h"
#endif //WX_PRECOMP
#import <Foundation/NSNotification.h>
#import <Foundation/NSDictionary.h>
-IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl)
+IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControlWithItems)
BEGIN_EVENT_TABLE(wxChoice, wxChoiceBase)
END_EVENT_TABLE()
// WX_IMPLEMENT_COCOA_OWNER(wxChoice,NSButton,NSControl,NSView)
{
DisassociateNSMenu([(NSPopUpButton*)m_cocoaNSView menu]);
- if(m_sortedStrings)
- m_sortedStrings->Clear();
- delete m_sortedStrings;
-
- if(HasClientObjectData())
- {
- for(unsigned int i=0; i < m_itemsClientData.GetCount(); i++)
- delete (wxClientData*)m_itemsClientData.Item(i);
- }
- m_itemsClientData.Clear();
+ Clear();
}
void wxChoice::CocoaNotification_menuDidSendAction(WX_NSNotification notification)
event.SetInt(index);
event.SetEventObject(this);
event.SetString(GetStringSelection());
- GetEventHandler()->ProcessEvent(event);
+ HandleWindowEvent(event);
}
-void wxChoice::Clear()
+void wxChoice::DoClear()
{
if(m_sortedStrings)
m_sortedStrings->Clear();
- if(HasClientObjectData())
- {
- for(unsigned int i=0; i < m_itemsClientData.GetCount(); i++)
- delete (wxClientData*)m_itemsClientData.Item(i);
- }
m_itemsClientData.Clear();
[(NSPopUpButton*)m_cocoaNSView removeAllItems];
}
-void wxChoice::Delete(unsigned int n)
+void wxChoice::DoDeleteOneItem(unsigned int n)
{
if(m_sortedStrings)
m_sortedStrings->RemoveAt(n);
- if(HasClientObjectData())
- delete (wxClientData*)m_itemsClientData.Item(n);
m_itemsClientData.RemoveAt(n);
[(NSPopUpButton*)m_cocoaNSView removeItemAtIndex:n];
}
return [(NSPopUpButton*)m_cocoaNSView indexOfSelectedItem];
}
-int wxChoice::DoAppend(const wxString& title)
+int wxChoice::DoInsertItems(const wxArrayStringsAdapter & items,
+ unsigned int pos,
+ void **clientData, wxClientDataType type)
{
- wxAutoNSAutoreleasePool pool;
NSMenu *nsmenu = [(NSPopUpButton*)m_cocoaNSView menu];
- NSMenuItem *item;
- if(m_sortedStrings)
- {
- int sortedIndex = m_sortedStrings->Add(title);
- item = [nsmenu insertItemWithTitle:
- wxNSStringWithWxString(title)
- action: nil keyEquivalent:@"" atIndex:sortedIndex];
- m_itemsClientData.Insert(NULL, sortedIndex);
- }
- else
+ NSMenuItem *item = NULL;
+
+ unsigned int numItems = items.GetCount();
+ for ( unsigned int i = 0; i < numItems; ++i, ++pos )
{
- item = [nsmenu addItemWithTitle:wxNSStringWithWxString(title)
- action: nil keyEquivalent:@""];
- m_itemsClientData.Add(NULL);
- }
- return [nsmenu indexOfItem:item];
-}
+ const wxString& str = items[i];
+ int idx = m_sortedStrings ? m_sortedStrings->Add(str) : pos;
-int wxChoice::DoInsert(const wxString& title, unsigned int pos)
-{
- if(m_sortedStrings)
- return DoAppend(title);
- NSMenu *nsmenu = [(NSPopUpButton*)m_cocoaNSView menu];
- NSMenuItem *item = [nsmenu insertItemWithTitle:wxNSStringWithWxString(title)
- action: nil keyEquivalent:@"" atIndex:pos];
- m_itemsClientData.Insert(NULL, pos);
+ item = [nsmenu insertItemWithTitle:wxNSStringWithWxString(str)
+ action: nil keyEquivalent:@"" atIndex:idx];
+ m_itemsClientData.Insert(NULL, idx);
+ AssignNewItemClientData(idx, clientData, i, type);
+ }
return [nsmenu indexOfItem:item];
}
void wxChoice::DoSetItemClientData(unsigned int n, void *data)
{
- m_itemsClientData.Item(n) = data;
+ m_itemsClientData[n] = data;
}
void* wxChoice::DoGetItemClientData(unsigned int n) const
{
- return m_itemsClientData.Item(n);
-}
-
-void wxChoice::DoSetItemClientObject(unsigned int n, wxClientData *data)
-{
- m_itemsClientData.Item(n) = data;
-}
-
-wxClientData* wxChoice::DoGetItemClientObject(unsigned int n) const
-{
- return (wxClientData*)m_itemsClientData.Item(n);
+ return m_itemsClientData[n];
}
void wxChoice::SetSelection(int n)
[(NSPopUpButton*)m_cocoaNSView selectItemAtIndex:n];
}
-#endif
+#endif // wxUSE_CHOICE