]> git.saurik.com Git - wxWidgets.git/blame - src/palmos/radiobox.cpp
use a larger font again for wxMSW (the chopping off was caused by a wxStaticText...
[wxWidgets.git] / src / palmos / radiobox.cpp
CommitLineData
ffecfa5a 1/////////////////////////////////////////////////////////////////////////////
e2731512 2// Name: src/palmos/radiobox.cpp
ffecfa5a 3// Purpose: wxRadioBox implementation
e2731512 4// Author: William Osborne - minimal working wxPalmOS port
a152561c 5// Modified by: Wlodzimierz ABX Skiba - native wxRadioBox implementation
ffecfa5a 6// Created: 10/13/04
e2731512 7// RCS-ID: $Id$
a152561c 8// Copyright: (c) William Osborne, Wlodzimierz Skiba
ffecfa5a
JS
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12// ===========================================================================
13// declarations
14// ===========================================================================
15
16// ---------------------------------------------------------------------------
17// headers
18// ---------------------------------------------------------------------------
19
20#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
21 #pragma implementation "radiobox.h"
22#endif
23
24// For compilers that support precompilation, includes "wx.h".
25#include "wx/wxprec.h"
26
27#ifdef __BORLANDC__
28 #pragma hdrstop
29#endif
30
31#if wxUSE_RADIOBOX
32
33#ifndef WX_PRECOMP
34 #include "wx/bitmap.h"
35 #include "wx/brush.h"
36 #include "wx/radiobox.h"
37 #include "wx/settings.h"
38 #include "wx/log.h"
39#endif
40
ffecfa5a
JS
41#if wxUSE_TOOLTIPS
42 #include "wx/tooltip.h"
43#endif // wxUSE_TOOLTIPS
44
8be10866
WS
45#include "wx/radiobut.h"
46
ffecfa5a
JS
47// TODO: wxCONSTRUCTOR
48#if 0 // wxUSE_EXTENDED_RTTI
49WX_DEFINE_FLAGS( wxRadioBoxStyle )
50
51wxBEGIN_FLAGS( wxRadioBoxStyle )
52 // new style border flags, we put them first to
53 // use them for streaming out
54 wxFLAGS_MEMBER(wxBORDER_SIMPLE)
55 wxFLAGS_MEMBER(wxBORDER_SUNKEN)
56 wxFLAGS_MEMBER(wxBORDER_DOUBLE)
57 wxFLAGS_MEMBER(wxBORDER_RAISED)
58 wxFLAGS_MEMBER(wxBORDER_STATIC)
59 wxFLAGS_MEMBER(wxBORDER_NONE)
e2731512 60
ffecfa5a
JS
61 // old style border flags
62 wxFLAGS_MEMBER(wxSIMPLE_BORDER)
63 wxFLAGS_MEMBER(wxSUNKEN_BORDER)
64 wxFLAGS_MEMBER(wxDOUBLE_BORDER)
65 wxFLAGS_MEMBER(wxRAISED_BORDER)
66 wxFLAGS_MEMBER(wxSTATIC_BORDER)
67 wxFLAGS_MEMBER(wxBORDER)
68
69 // standard window styles
70 wxFLAGS_MEMBER(wxTAB_TRAVERSAL)
71 wxFLAGS_MEMBER(wxCLIP_CHILDREN)
72 wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW)
73 wxFLAGS_MEMBER(wxWANTS_CHARS)
74 wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE)
75 wxFLAGS_MEMBER(wxALWAYS_SHOW_SB )
76 wxFLAGS_MEMBER(wxVSCROLL)
77 wxFLAGS_MEMBER(wxHSCROLL)
78
79 wxFLAGS_MEMBER(wxRA_SPECIFY_COLS)
80 wxFLAGS_MEMBER(wxRA_HORIZONTAL)
81 wxFLAGS_MEMBER(wxRA_SPECIFY_ROWS)
82 wxFLAGS_MEMBER(wxRA_VERTICAL)
83
84wxEND_FLAGS( wxRadioBoxStyle )
85
86IMPLEMENT_DYNAMIC_CLASS_XTI(wxRadioBox, wxControl,"wx/radiobox.h")
87
88wxBEGIN_PROPERTIES_TABLE(wxRadioBox)
89 wxEVENT_PROPERTY( Select , wxEVT_COMMAND_RADIOBOX_SELECTED , wxCommandEvent )
90 wxPROPERTY_FLAGS( WindowStyle , wxRadioBoxStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style
91wxEND_PROPERTIES_TABLE()
92
93#else
94IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl)
95#endif
96
97/*
98 selection
99 content
100 label
101 dimension
102 item
103*/
104
ffecfa5a
JS
105// ===========================================================================
106// implementation
107// ===========================================================================
108
109// ---------------------------------------------------------------------------
110// wxRadioBox
111// ---------------------------------------------------------------------------
112
1a87edf2
WS
113void wxRadioBox::Init()
114{
115 m_pos = wxPoint(0,0);
116 m_size = wxSize(0,0);
117}
118
ffecfa5a
JS
119int wxRadioBox::GetCount() const
120{
1a87edf2 121 return m_radios.GetCount();
ffecfa5a
JS
122}
123
124int wxRadioBox::GetColumnCount() const
125{
126 return 0;
127}
128
129int wxRadioBox::GetRowCount() const
130{
131 return 0;
132}
133
134// returns the number of rows
135int wxRadioBox::GetNumVer() const
136{
137 return 0;
138}
139
140// returns the number of columns
141int wxRadioBox::GetNumHor() const
142{
143 return 0;
144}
145
ffecfa5a
JS
146bool wxRadioBox::Create(wxWindow *parent,
147 wxWindowID id,
148 const wxString& title,
149 const wxPoint& pos,
150 const wxSize& size,
151 int n,
152 const wxString choices[],
153 int majorDim,
154 long style,
155 const wxValidator& val,
156 const wxString& name)
157{
8be10866 158 // initialize members
1a87edf2
WS
159 m_majorDim = majorDim == 0 ? n : wxMin(majorDim, n);
160 if(m_majorDim==0 || n==0) return false;
161
162 // subtype of the native palmOS radio: checkbox or push button?
163 const bool use_checkbox = style & wxRA_USE_CHECKBOX;
164 const bool use_cols = style & wxRA_SPECIFY_COLS;
165
166 // get default size and position for the initial placement
167 m_size = size;
168 m_pos = pos;
169 int minor = n / m_majorDim;
170 if(n % m_majorDim > 0) minor++;
171 if(m_size.x==wxDefaultCoord)
172 m_size.x=36*(use_cols?m_majorDim:minor);
173 if(m_size.y==wxDefaultCoord)
174 m_size.y=12*(use_cols?minor:m_majorDim);
175 if(m_pos.x==wxDefaultCoord)
176 m_pos.x=0;
177 if(m_pos.y==wxDefaultCoord)
178 m_pos.y=0;
179
11f4a344
WS
180 m_label = title;
181
1a87edf2 182 if(!wxControl::Create(parent, id, m_pos, m_size, style, val, name))
8be10866
WS
183 return false;
184
1a87edf2
WS
185 int i = 0;
186 for ( int j = 0; j < minor; j++ )
8be10866 187 {
1a87edf2
WS
188 for ( int k = 0; k < m_majorDim; k++ )
189 {
190 if(i<n)
191 {
192 wxPoint start, end;
193 start.x = (use_cols ? (k*m_size.x)/m_majorDim : (j*m_size.x)/minor);
194 start.y = (use_cols ? (j*m_size.y)/minor : (k*m_size.y)/m_majorDim);
195 end.x = (use_cols ? ((k+1)*m_size.x)/m_majorDim : ((j+1)*m_size.x)/minor);
196 end.y = (use_cols ? ((j+1)*m_size.y)/minor : ((k+1)*m_size.y)/m_majorDim);
197 wxRadioButton* rb = new wxRadioButton();
198 rb->SetGroup( id );
199 rb->Create(
200 this,
201 wxID_ANY,
202 choices[i],
203 start,
204 wxSize(end.x-start.x-1,end.y-start.y-1),
205 ( n == 0 ? wxRB_GROUP : 0 ) |
206 use_checkbox ? wxRB_USE_CHECKBOX : 0
207 );
208 m_radios.Put(i,rb);
209 i++;
210 }
211 }
8be10866 212 }
ffecfa5a
JS
213}
214
215bool wxRadioBox::Create(wxWindow *parent,
216 wxWindowID id,
217 const wxString& title,
218 const wxPoint& pos,
219 const wxSize& size,
220 const wxArrayString& choices,
221 int majorDim,
222 long style,
223 const wxValidator& val,
224 const wxString& name)
225{
8be10866
WS
226 wxCArrayString chs(choices);
227
228 return Create( parent, id, title, pos, size, chs.GetCount(),
229 chs.GetStrings(), majorDim, style, val, name );
ffecfa5a
JS
230}
231
232wxRadioBox::~wxRadioBox()
233{
234}
235
1a87edf2
WS
236wxRadioButton *wxRadioBox::GetRadioButton(int i)
237{
238 return (wxRadioButton *)m_radios.Get(i);
239}
240
241void wxRadioBox::DoGetPosition( int *x, int *y ) const
242{
243 *x = m_pos.x;
244 *y = m_pos.y;
245}
246
247void wxRadioBox::DoGetSize( int *width, int *height ) const
248{
249 *width = m_size.x;
250 *height = m_size.y;
251}
252
253void wxRadioBox::DoMoveWindow(int x, int y, int width, int height)
254{
255 m_size.x = width;
256 m_size.y = height;
257
258 const bool use_cols = HasFlag(wxRA_SPECIFY_COLS);
259
260 const int n = GetCount();
261 int minor = n / m_majorDim;
262 if(n % m_majorDim > 0) minor++;
263
264 int i = 0;
265 for ( int j = 0; j < minor; j++ )
266 {
267 for ( int k = 0; k < m_majorDim; k++ )
268 {
269 if(i<n)
270 {
271 wxPoint start, end;
272 start.x = (use_cols ? (k*m_size.x)/m_majorDim : (j*m_size.x)/minor);
273 start.y = (use_cols ? (j*m_size.y)/minor : (k*m_size.y)/m_majorDim);
274 end.x = (use_cols ? ((k+1)*m_size.x)/m_majorDim : ((j+1)*m_size.x)/minor);
275 end.y = (use_cols ? ((j+1)*m_size.y)/minor : ((k+1)*m_size.y)/m_majorDim);
276 wxRadioButton* rb = GetRadioButton(i);
277 if(rb)
11f4a344
WS
278 {
279 rb->SetSize(start.x,start.y,end.x-start.x-1,end.y-start.y-1);
280 }
1a87edf2
WS
281 i++;
282 }
283 }
284 }
285}
286
287// get the origin of the client area in the client coordinates
288wxPoint wxRadioBox::GetClientAreaOrigin() const
289{
290 return GetParent()->GetClientAreaOrigin() + GetPosition();
291}
292
ffecfa5a
JS
293void wxRadioBox::SetString(int item, const wxString& label)
294{
295}
296
297void wxRadioBox::SetSelection(int N)
298{
299}
300
301// Get single selection, for single choice list items
302int wxRadioBox::GetSelection() const
303{
304 return 0;
305}
306
307// Find string for position
308wxString wxRadioBox::GetString(int item) const
309{
310 wxString ret;
e2731512 311
ffecfa5a
JS
312 return ret;
313}
314
315// ----------------------------------------------------------------------------
316// size calculations
317// ----------------------------------------------------------------------------
318
319wxSize wxRadioBox::GetMaxButtonSize() const
320{
321 return wxSize(0,0);
322}
323
324wxSize wxRadioBox::GetTotalButtonSize(const wxSize& sizeBtn) const
325{
326 return wxSize(0,0);
327}
328
329wxSize wxRadioBox::DoGetBestSize() const
330{
331 return wxSize(0,0);
332}
333
ffecfa5a
JS
334void wxRadioBox::SetFocus()
335{
336}
337
11f4a344
WS
338// Enable all subcontrols
339bool wxRadioBox::Enable(bool enable)
ffecfa5a 340{
11f4a344
WS
341 for(int i=0; i<GetCount(); i++)
342 Enable(i, enable);
343 return true;
ffecfa5a
JS
344}
345
346// Enable a specific button
1a87edf2 347bool wxRadioBox::Enable(int item, bool enable)
ffecfa5a 348{
1a87edf2
WS
349 wxRadioButton *btn = GetRadioButton(item);
350 if(btn)
351 return btn->Enable(enable);
352 return false;
ffecfa5a
JS
353}
354
11f4a344 355bool wxRadioBox::Show(bool show)
ffecfa5a 356{
11f4a344 357 return false;
ffecfa5a
JS
358}
359
360// Show a specific button
361void wxRadioBox::Show(int item, bool show)
362{
363}
364
11f4a344
WS
365wxString wxRadioBox::GetLabel()
366{
367 return m_label;
368}
369
370void wxRadioBox::SetLabel(const wxString& label)
371{
372 m_label = label;
373}
374
375void wxRadioBox::Refresh(bool eraseBack, const wxRect *rect)
376{
377 wxRect area = GetRect();
378
379 if(rect)
380 {
381 area.Offset(rect->GetPosition());
382 area.SetSize(rect->GetSize());
383 }
384
385 GetParent()->Refresh( eraseBack , &area );
386}
387
ffecfa5a
JS
388void wxRadioBox::Command(wxCommandEvent & event)
389{
390}
391
ffecfa5a
JS
392void wxRadioBox::SendNotificationEvent()
393{
394}
395
396bool wxRadioBox::SetFont(const wxFont& font)
397{
398 return false;
399}
400
ffecfa5a 401#endif // wxUSE_RADIOBOX