// Author: Stefan Csomor
// Modified by:
// Created: 1998-01-01
-// RCS-ID: $Id: choice.cpp 54129 2008-06-11 19:30:52Z SC $
+// RCS-ID: $Id$
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
@interface wxNSPopUpButton : NSPopUpButton
{
- wxWidgetImpl* impl;
}
-- (void)setImplementation: (wxWidgetImpl *) theImplementation;
-- (wxWidgetImpl*) implementation;
-- (BOOL) isFlipped;
-- (void) clickedAction: (id) sender;
-
@end
@implementation wxNSPopUpButton
-- (id)initWithFrame:(NSRect)frame pullsDown:(BOOL) pd
-{
- [super initWithFrame:frame pullsDown:pd];
- impl = NULL;
- [self setTarget: self];
- [self setAction: @selector(clickedAction:)];
- return self;
-}
-
-- (void) clickedAction: (id) sender
++ (void)initialize
{
- if ( impl )
+ static BOOL initialized = NO;
+ if (!initialized)
{
- wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer();
- if ( wxpeer )
- wxpeer->HandleClicked(0);
+ initialized = YES;
+ wxOSXCocoaClassAddWXMethods( self );
}
}
-- (void)setImplementation: (wxWidgetImpl *) theImplementation
-{
- impl = theImplementation;
-}
-
-- (wxWidgetImpl*) implementation
-{
- return impl;
-}
-
-- (BOOL) isFlipped
-{
- return YES;
-}
-
- (int) intValue
{
return [self indexOfSelectedItem];
@end
-wxWidgetImplType* wxWidgetImpl::CreateChoice( wxWindowMac* wxpeer,
- wxWindowMac* parent,
- wxWindowID id,
+@interface NSView(PossibleSizeMethods)
+- (NSControlSize)controlSize;
+@end
+
+class wxChoiceCocoaImpl : public wxWidgetCocoaImpl
+{
+public:
+ wxChoiceCocoaImpl(wxWindowMac *wxpeer, wxNSPopUpButton *v)
+ : wxWidgetCocoaImpl(wxpeer, v)
+ {
+ }
+
+ void GetLayoutInset(int &left , int &top , int &right, int &bottom) const
+ {
+ left = top = right = bottom = 0;
+ NSControlSize size = NSRegularControlSize;
+ if ( [m_osxView respondsToSelector:@selector(controlSize)] )
+ size = [m_osxView controlSize];
+ else if ([m_osxView respondsToSelector:@selector(cell)])
+ {
+ id cell = [(id)m_osxView cell];
+ if ([cell respondsToSelector:@selector(controlSize)])
+ size = [cell controlSize];
+ }
+
+ switch( size )
+ {
+ case NSRegularControlSize:
+ left = right = 3;
+ top = 2;
+ bottom = 4;
+ break;
+ case NSSmallControlSize:
+ left = right = 3;
+ top = 1;
+ bottom = 4;
+ break;
+ case NSMiniControlSize:
+ left = 1;
+ right = 2;
+ top = 0;
+ bottom = 0;
+ break;
+ }
+ }
+};
+
+wxWidgetImplType* wxWidgetImpl::CreateChoice( wxWindowMac* wxpeer,
+ wxWindowMac* WXUNUSED(parent),
+ wxWindowID WXUNUSED(id),
wxMenu* menu,
- const wxPoint& pos,
+ const wxPoint& pos,
const wxSize& size,
- long style,
- long extraStylew)
+ long WXUNUSED(style),
+ long WXUNUSED(extraStyle))
{
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
wxNSPopUpButton* v = [[wxNSPopUpButton alloc] initWithFrame:r pullsDown:NO];
[v setMenu: menu->GetHMenu()];
- wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
- [v setImplementation:c];
+ [v setAutoenablesItems:NO];
+ wxWidgetCocoaImpl* c = new wxChoiceCocoaImpl( wxpeer, v );
return c;
}