]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/mac/carbon/choice.cpp
Got rid of some wierd VisualAge debug nonsense that had appeared in this after the...
[wxWidgets.git] / src / mac / carbon / choice.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: choice.cpp
3// Purpose: wxChoice
4// Author: AUTHOR
5// Modified by:
6// Created: ??/??/98
7// RCS-ID: $Id$
8// Copyright: (c) AUTHOR
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13#pragma implementation "choice.h"
14#endif
15
16// For compilers that support precompilation, includes "wx.h".
17#include "wx/choice.h"
18#include "wx/menu.h"
19#include "wx/mac/uma.h"
20
21#if !USE_SHARED_LIBRARY
22IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl)
23#endif
24
25short nextMenuId = 100 ; // wxMenu takes the lower ids
26
27wxChoice::~wxChoice()
28{
29 // DeleteMenu( m_macPopUpMenuId ) ;
30 DisposeMenu( m_macPopUpMenuHandle ) ;
31}
32
33int wxChoice::GetCount() const {
34 return m_strings.Count() ;
35}
36
37void wxChoice::SetString( int n , const wxString& s ) {
38 m_strings[n] = s ;
39}
40
41bool wxChoice::Create(wxWindow *parent, wxWindowID id,
42 const wxPoint& pos,
43 const wxSize& size,
44 int n, const wxString choices[],
45 long style,
46 const wxValidator& validator,
47 const wxString& name)
48{
49
50 Rect bounds ;
51 Str255 title ;
52
53 MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ;
54
55 m_macPopUpMenuHandle = NewMenu( 1 , "\pPopUp Menu" ) ;
56 m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , true , 0 , -12345 , 0 ,
57 kControlPopupButtonProc + kControlPopupFixedWidthVariant , (long) this ) ;
58
59 m_macPopUpMenuHandle = NewMenu( 1 , "\pPopUp Menu" ) ;
60 SetControlData( m_macControl , kControlNoPart , kControlPopupButtonMenuHandleTag , sizeof( MenuHandle ) , (char*) &m_macPopUpMenuHandle) ;
61 for ( int i = 0 ; i < n ; i++ )
62 {
63 Str255 label;
64 wxMenuItem::MacBuildMenuString( label , NULL , NULL , choices[i] ,false);
65 AppendMenu( m_macPopUpMenuHandle , label ) ;
66 m_strings.Add( choices[i] ) ;
67 m_dataArray.Add( NULL );
68 }
69 SetControlMinimum( m_macControl , 0 ) ;
70 SetControlMaximum( m_macControl , Number()) ;
71 if ( n > 0 )
72 SetControlValue( m_macControl , 1 ) ;
73
74 MacPostControlCreate() ;
75
76 return TRUE;
77}
78
79int wxChoice::DoAppend(const wxString& item)
80{
81 Str255 label;
82 wxMenuItem::MacBuildMenuString( label , NULL , NULL , item ,false);
83 AppendMenu( m_macPopUpMenuHandle , label ) ;
84 m_strings.Add( item ) ;
85 m_dataArray.Add( NULL );
86 return m_strings.Count() ;
87}
88
89void *wxChoice::DoGetItemClientData(int N) const
90{
91 return (void *)m_dataArray[N];
92}
93
94void wxChoice::DoSetItemClientData( int N, void* Client_data )
95{
96 wxASSERT_MSG( m_dataArray.GetCount() >= N , "invalid client_data array" ) ;
97
98 if ( m_dataArray.GetCount() > N )
99 {
100 m_dataArray[N] = (char*) Client_data ;
101 }
102 else
103 {
104 m_dataArray.Add( (char*) Client_data ) ;
105 }
106}
107
108void wxChoice::DoSetItemClientObject( int n, wxClientData* clientData )
109{
110 DoSetItemClientData(n, clientData);
111}
112
113wxClientData* wxChoice::DoGetItemClientObject( int N ) const
114{
115 return (wxClientData *) DoGetItemClientData( N ) ;
116}
117
118void wxChoice::Delete(int n)
119{
120 ::DeleteMenuItem( m_macPopUpMenuHandle , n + 1) ;
121 m_strings.Remove( n ) ;
122 m_dataArray.Remove( n ) ;
123 SetControlMaximum( m_macControl , Number()) ;
124}
125
126void wxChoice::Clear()
127{
128 for ( int i = 0 ; i < Number() ; i++ )
129 {
130 ::DeleteMenuItem( m_macPopUpMenuHandle , 1 ) ;
131 }
132 m_strings.Clear() ;
133 m_dataArray.Empty() ;
134 SetControlMaximum( m_macControl , Number()) ;
135}
136
137int wxChoice::GetSelection() const
138{
139 return GetControlValue( m_macControl ) -1 ;
140}
141
142void wxChoice::MacHandleControlClick( ControlHandle control , SInt16 controlpart )
143{
144 wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId );
145 event.SetInt(GetSelection());
146 event.SetEventObject(this);
147 event.SetString(GetStringSelection());
148 ProcessCommand(event);
149}
150
151
152void wxChoice::SetSelection(int n)
153{
154 SetControlValue( m_macControl , n + 1 ) ;
155}
156
157int wxChoice::FindString(const wxString& s) const
158{
159 for( int i = 0 ; i < Number() ; i++ )
160 {
161 if ( GetString( i ) == s )
162 return i ;
163 }
164 return -1;
165}
166
167wxString wxChoice::GetString(int n) const
168{
169 return m_strings[n] ;
170}
171
172void wxChoice::DoSetSize(int x, int y, int width, int height, int sizeFlags)
173{
174 wxControl::SetSize( x,y,width,height,sizeFlags ) ;
175}
176