/////////////////////////////////////////////////////////////////////////////
-// Name: cocoa/choice.mm
+// Name: src/cocoa/choice.mm
// Purpose: wxChoice
// Author: David Elliott
// Modified by:
// Created: 2003/03/16
-// RCS-ID: $Id:
+// Id: $Id$
// Copyright: (c) 2003 David Elliott
-// Licence: wxWidgets licence
+// Licence: wxWidgets licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
#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)
{
m_sortedStrings->Add(choices[i]);
}
- for(size_t i=0; i < m_sortedStrings->GetCount(); i++)
+ for(unsigned int i=0; i < m_sortedStrings->GetCount(); i++)
{
[nsmenu addItemWithTitle:wxNSStringWithWxString(
m_sortedStrings->Item(i))
{
DisassociateNSMenu([(NSPopUpButton*)m_cocoaNSView menu]);
- if(m_sortedStrings)
- m_sortedStrings->Clear();
- delete m_sortedStrings;
-
- if(HasClientObjectData())
- {
- for(size_t 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(size_t i=0; i < m_itemsClientData.GetCount(); i++)
- delete (wxClientData*)m_itemsClientData.Item(i);
- }
m_itemsClientData.Clear();
[(NSPopUpButton*)m_cocoaNSView removeAllItems];
}
-void wxChoice::Delete(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];
}
-int wxChoice::GetCount() const
+unsigned int wxChoice::GetCount() const
{
- return [(NSPopUpButton*)m_cocoaNSView numberOfItems];
+ return (unsigned int)[(NSPopUpButton*)m_cocoaNSView numberOfItems];
}
-wxString wxChoice::GetString(int n) const
+wxString wxChoice::GetString(unsigned int n) const
{
wxAutoNSAutoreleasePool pool;
return wxStringWithNSString([(NSPopUpButton*)m_cocoaNSView itemTitleAtIndex:n]);
}
-void wxChoice::SetString(int n, const wxString& title)
+void wxChoice::SetString(unsigned int n, const wxString& title)
{
NSMenuItem *item = [(NSPopUpButton*)m_cocoaNSView itemAtIndex:n];
[item setTitle:wxNSStringWithWxString(title)];
}
-int wxChoice::FindString(const wxString& title) const
+int wxChoice::FindString(const wxString& title, bool bCase) const
{
+ // FIXME: use wxItemContainerImmutable::FindString for bCase parameter
return [(NSPopUpButton*)m_cocoaNSView indexOfItemWithTitle:
wxNSStringWithWxString(title)];
}
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, 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(int n, void *data)
-{
- m_itemsClientData.Item(n) = data;
-}
-
-void* wxChoice::DoGetItemClientData(int n) const
-{
- return m_itemsClientData.Item(n);
-}
-
-void wxChoice::DoSetItemClientObject(int n, wxClientData *data)
+void wxChoice::DoSetItemClientData(unsigned int n, void *data)
{
- m_itemsClientData.Item(n) = data;
+ m_itemsClientData[n] = data;
}
-wxClientData* wxChoice::DoGetItemClientObject(int n) const
+void* wxChoice::DoGetItemClientData(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