1/////////////////////////////////////////////////////////////////////////////
2// Name:        src/osx/cocoa/choice.mm
3// Purpose:     wxChoice
4// Author:      Stefan Csomor
5// Modified by:
6// Created:     1998-01-01
7// Copyright:   (c) Stefan Csomor
8// Licence:     wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
10
11#include "wx/wxprec.h"
12
13#if wxUSE_CHOICE
14
15#include "wx/choice.h"
16
17#ifndef WX_PRECOMP
18    #include "wx/menu.h"
19    #include "wx/dcclient.h"
20#endif
21
22#include "wx/osx/private.h"
23
24@interface wxNSPopUpButton : NSPopUpButton
25{
26}
27
28@end
29
30@implementation wxNSPopUpButton
31
32+ (void)initialize
33{
34    static BOOL initialized = NO;
35    if (!initialized)
36    {
37        initialized = YES;
38        wxOSXCocoaClassAddWXMethods( self );
39    }
40}
41
42- (int) intValue
43{
44   return [self indexOfSelectedItem];
45}
46
47- (void) setIntValue: (int) v
48{
49    [self selectItemAtIndex:v];
50}
51
52@end
53
54@interface NSView(PossibleSizeMethods)
55- (NSControlSize)controlSize;
56@end
57
58class wxChoiceCocoaImpl : public wxWidgetCocoaImpl
59{
60public:
61    wxChoiceCocoaImpl(wxWindowMac *wxpeer, wxNSPopUpButton *v)
62    : wxWidgetCocoaImpl(wxpeer, v)
63    {
64    }
65
66    void GetLayoutInset(int &left , int &top , int &right, int &bottom) const
67    {
68        left = top = right = bottom = 0;
69        NSControlSize size = NSRegularControlSize;
70        if ( [m_osxView respondsToSelector:@selector(controlSize)] )
71            size = [m_osxView controlSize];
72        else if ([m_osxView respondsToSelector:@selector(cell)])
73        {
74            id cell = [(id)m_osxView cell];
75            if ([cell respondsToSelector:@selector(controlSize)])
76                size = [cell controlSize];
77        }
78
79        switch( size )
80        {
81            case NSRegularControlSize:
82                left = right = 3;
83                top = 2;
84                bottom = 3;
85                break;
86            case NSSmallControlSize:
87                left = right = 3;
88                top = 1;
89                bottom = 3;
90                break;
91            case NSMiniControlSize:
92                left = 1;
93                right = 2;
94                top = 0;
95                bottom = 0;
96                break;
97        }
98    }
99};
100
101wxWidgetImplType* wxWidgetImpl::CreateChoice( wxWindowMac* wxpeer,
102                                    wxWindowMac* WXUNUSED(parent),
103                                    wxWindowID WXUNUSED(id),
104                                    wxMenu* menu,
105                                    const wxPoint& pos,
106                                    const wxSize& size,
107                                    long WXUNUSED(style),
108                                    long WXUNUSED(extraStyle))
109{
110    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
111    wxNSPopUpButton* v = [[wxNSPopUpButton alloc] initWithFrame:r pullsDown:NO];
112    [v setMenu: menu->GetHMenu()];
113    [v setAutoenablesItems:NO];
114    wxWidgetCocoaImpl* c = new wxChoiceCocoaImpl( wxpeer, v );
115    return c;
116}
117
118#endif // wxUSE_CHOICE
119