]> git.saurik.com Git - wxWidgets.git/blame - src/common/valgen.cpp
Added version of Quantize that manages the palette itself
[wxWidgets.git] / src / common / valgen.cpp
CommitLineData
89c684ef
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: valgen.cpp
3// Purpose: wxGenericValidator class
4// Author: Kevin Smith
5// Modified by:
6// Created: Jan 22 1999
913df6f2 7// RCS-ID:
89c684ef
JS
8// Copyright: (c) 1999 Kevin Smith
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13#pragma implementation "valgen.h"
14#endif
15
16// For compilers that support precompilation, includes "wx.h".
17#include "wx/wxprec.h"
18
19#ifdef __BORLANDC__
ce4169a4 20 #pragma hdrstop
89c684ef
JS
21#endif
22
23#ifndef WX_PRECOMP
ce4169a4
RR
24 #include "wx/defs.h"
25#endif
26
27#if wxUSE_VALIDATORS
28
29#ifndef WX_PRECOMP
30 #include "wx/utils.h"
31 #include "wx/intl.h"
32 #include "wx/dynarray.h"
33 #include "wx/choice.h"
34 #include "wx/combobox.h"
35 #include "wx/radiobox.h"
36 #include "wx/radiobut.h"
37 #include "wx/checkbox.h"
38 #include "wx/scrolbar.h"
39 #include "wx/gauge.h"
40 #include "wx/stattext.h"
41 #include "wx/textctrl.h"
42 #include "wx/button.h"
43 #include "wx/listbox.h"
e90196a5 44 #include "wx/slider.h"
89c684ef
JS
45#endif
46
a55e0ebc
JS
47#if wxUSE_SPINCTRL && !defined(__WIN16__)
48 #include "wx/spinctrl.h"
49#endif
50#if wxUSE_SPINBTN && !defined(__WIN16__)
ce4169a4 51 #include "wx/spinbutt.h"
750b78ba 52#endif
a55e0ebc
JS
53#if wxUSE_CHECKLISTBOX && !defined(__WIN16__)
54 #include "wx/checklst.h"
f6bcfd97 55#endif
89c684ef
JS
56
57#include "wx/valgen.h"
58
59wxGenericValidator::wxGenericValidator(bool *val)
60{
ce4169a4
RR
61 Initialize();
62 m_pBool = val;
89c684ef
JS
63}
64
65wxGenericValidator::wxGenericValidator(int *val)
66{
ce4169a4
RR
67 Initialize();
68 m_pInt = val;
89c684ef
JS
69}
70
71wxGenericValidator::wxGenericValidator(wxString *val)
72{
ce4169a4
RR
73 Initialize();
74 m_pString = val;
89c684ef
JS
75}
76
77wxGenericValidator::wxGenericValidator(wxArrayInt *val)
78{
ce4169a4
RR
79 Initialize();
80 m_pArrayInt = val;
89c684ef
JS
81}
82
83wxGenericValidator::wxGenericValidator(const wxGenericValidator& val)
84{
ce4169a4 85 Copy(val);
89c684ef
JS
86}
87
88bool wxGenericValidator::Copy(const wxGenericValidator& val)
89{
e90196a5 90 wxValidator::Copy(val);
89c684ef 91
e90196a5
RR
92 m_pBool = val.m_pBool;
93 m_pInt = val.m_pInt;
94 m_pString = val.m_pString;
95 m_pArrayInt = val.m_pArrayInt;
89c684ef 96
e90196a5 97 return TRUE;
89c684ef
JS
98}
99
100wxGenericValidator::~wxGenericValidator()
101{
102}
103
104// Called to transfer data to the window
105bool wxGenericValidator::TransferToWindow(void)
106{
e90196a5
RR
107 if ( !m_validatorWindow )
108 return FALSE;
89c684ef 109
e90196a5 110 // bool controls
dcf924a3 111#if wxUSE_CHECKBOX
e90196a5 112 if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckBox)) )
89c684ef 113 {
e90196a5
RR
114 wxCheckBox* pControl = (wxCheckBox*) m_validatorWindow;
115 if (m_pBool)
116 {
117 pControl->SetValue(*m_pBool);
118 return TRUE;
119 }
120 } else
dcf924a3
RR
121#endif
122#if wxUSE_RADIOBTN
e90196a5 123 if (m_validatorWindow->IsKindOf(CLASSINFO(wxRadioButton)) )
89c684ef 124 {
e90196a5
RR
125 wxRadioButton* pControl = (wxRadioButton*) m_validatorWindow;
126 if (m_pBool)
127 {
128 pControl->SetValue(*m_pBool) ;
129 return TRUE;
130 }
131 } else
dcf924a3 132#endif
e90196a5
RR
133
134 // int controls
dcf924a3 135#if wxUSE_GAUGE
e90196a5 136 if (m_validatorWindow->IsKindOf(CLASSINFO(wxGauge)) )
89c684ef 137 {
e90196a5
RR
138 wxGauge* pControl = (wxGauge*) m_validatorWindow;
139 if (m_pInt)
140 {
141 pControl->SetValue(*m_pInt);
142 return TRUE;
143 }
144 } else
dcf924a3
RR
145#endif
146#if wxUSE_RADIOBOX
e90196a5 147 if (m_validatorWindow->IsKindOf(CLASSINFO(wxRadioBox)) )
89c684ef 148 {
e90196a5
RR
149 wxRadioBox* pControl = (wxRadioBox*) m_validatorWindow;
150 if (m_pInt)
151 {
152 pControl->SetSelection(*m_pInt) ;
153 return TRUE;
154 }
155 } else
dcf924a3
RR
156#endif
157#if wxUSE_SCROLLBAR
e90196a5 158 if (m_validatorWindow->IsKindOf(CLASSINFO(wxScrollBar)) )
89c684ef 159 {
e90196a5
RR
160 wxScrollBar* pControl = (wxScrollBar*) m_validatorWindow;
161 if (m_pInt)
162 {
163 pControl->SetThumbPosition(*m_pInt) ;
164 return TRUE;
165 }
166 } else
dcf924a3 167#endif
5e679c40 168#if wxUSE_SPINCTRL && !defined(__WIN16__) && !defined(__WXMOTIF__)
a55e0ebc
JS
169 if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinCtrl)) )
170 {
171 wxSpinCtrl* pControl = (wxSpinCtrl*) m_validatorWindow;
172 if (m_pInt)
173 {
174 pControl->SetValue(*m_pInt);
175 return TRUE;
176 }
177 } else
178#endif
179#if wxUSE_SPINBTN && !defined(__WIN16__)
e90196a5 180 if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinButton)) )
89c684ef 181 {
e90196a5
RR
182 wxSpinButton* pControl = (wxSpinButton*) m_validatorWindow;
183 if (m_pInt)
184 {
185 pControl->SetValue(*m_pInt) ;
186 return TRUE;
187 }
188 } else
dcf924a3 189#endif
e90196a5
RR
190#if wxUSE_SLIDER
191 if (m_validatorWindow->IsKindOf(CLASSINFO(wxSlider)) )
192 {
193 wxSlider* pControl = (wxSlider*) m_validatorWindow;
194 if (m_pInt)
195 {
196 pControl->SetValue(*m_pInt) ;
197 return TRUE;
198 }
199 } else
200#endif
201
89c684ef 202 // string controls
e90196a5 203 if (m_validatorWindow->IsKindOf(CLASSINFO(wxButton)) )
89c684ef 204 {
e90196a5 205 wxButton* pControl = (wxButton*) m_validatorWindow;
89c684ef 206 if (m_pString)
e90196a5
RR
207 {
208 pControl->SetLabel(*m_pString) ;
209 return TRUE;
210 }
211 } else
e90196a5
RR
212#if wxUSE_COMBOBOX
213 if (m_validatorWindow->IsKindOf(CLASSINFO(wxComboBox)) )
89c684ef 214 {
e90196a5 215 wxComboBox* pControl = (wxComboBox*) m_validatorWindow;
f6bcfd97
BP
216 if (m_pInt)
217 {
218 pControl->SetSelection(*m_pInt) ;
219 return TRUE;
220 }
221 else if (m_pString)
222 {
223 if (pControl->FindString(* m_pString) > -1)
224 {
225 pControl->SetStringSelection(* m_pString);
226 }
227 return TRUE;
228 }
e90196a5 229 } else
ce4169a4 230#endif
a55e0ebc
JS
231#if wxUSE_CHOICE
232 if (m_validatorWindow->IsKindOf(CLASSINFO(wxChoice)) )
f6bcfd97 233 {
a55e0ebc 234 wxChoice* pControl = (wxChoice*) m_validatorWindow;
f6bcfd97
BP
235 if (m_pInt)
236 {
237 pControl->SetSelection(*m_pInt) ;
238 return TRUE;
239 }
240 else if (m_pString)
241 {
242 if (pControl->FindString(* m_pString) > -1)
243 {
244 pControl->SetStringSelection(* m_pString);
245 }
246 return TRUE;
247 }
248 } else
a55e0ebc 249#endif
e90196a5 250 if (m_validatorWindow->IsKindOf(CLASSINFO(wxStaticText)) )
89c684ef 251 {
e90196a5 252 wxStaticText* pControl = (wxStaticText*) m_validatorWindow;
f6bcfd97
BP
253 if (m_pString)
254 {
255 pControl->SetLabel(*m_pString) ;
256 return TRUE;
257 }
e90196a5
RR
258 } else
259 if (m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
89c684ef 260 {
e90196a5 261 wxTextCtrl* pControl = (wxTextCtrl*) m_validatorWindow;
f6bcfd97
BP
262 if (m_pString)
263 {
264 pControl->SetValue(*m_pString) ;
265 return TRUE;
266 }
267 else if (m_pInt)
268 {
269 wxString str;
66b3ec7f 270 str.Printf(wxT("%d"), *m_pInt);
f6bcfd97
BP
271 pControl->SetValue(str);
272 return TRUE;
273 }
e90196a5 274 } else
dcf924a3 275#if wxUSE_CHECKLISTBOX
750b78ba 276#ifndef __WIN16__
89c684ef
JS
277 // array controls
278 // NOTE: wxCheckListBox isa wxListBox, so wxCheckListBox
279 // MUST come first:
dcf924a3 280 if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckListBox)) )
89c684ef
JS
281 {
282 wxCheckListBox* pControl = (wxCheckListBox*) m_validatorWindow;
283 if (m_pArrayInt)
284 {
285 // clear all selections
286 int i;
287 for (i = 0 ; i < pControl->Number(); ++i)
288 pControl->Check(i, FALSE);
289 // select each item in our array
290 unsigned u;
291 for (u = 0; u < m_pArrayInt->Count(); ++u)
292 pControl->Check(m_pArrayInt->Item(u));
293 return TRUE;
294 }
295 else
296 return FALSE;
dcf924a3 297 } else
750b78ba 298#endif
dcf924a3
RR
299#endif
300#if wxUSE_LISTBOX
e90196a5 301 if (m_validatorWindow->IsKindOf(CLASSINFO(wxListBox)) )
89c684ef 302 {
e90196a5
RR
303 wxListBox* pControl = (wxListBox*) m_validatorWindow;
304 if (m_pArrayInt)
305 {
306 // clear all selections
307 int i;
308 for (i = 0 ; i < pControl->Number(); ++i)
309 pControl->Deselect(i);
310 // select each item in our array
311 unsigned u;
312 for (u = 0; u < m_pArrayInt->Count(); ++u)
313 pControl->SetSelection(m_pArrayInt->Item(u));
314 return TRUE;
315 }
316 } else
dcf924a3 317#endif
89c684ef
JS
318
319 // unrecognized control, or bad pointer
dcf924a3 320 return FALSE;
89c684ef
JS
321 return FALSE;
322}
323
e90196a5 324// Called to transfer data from the window
89c684ef
JS
325bool wxGenericValidator::TransferFromWindow(void)
326{
327 if ( !m_validatorWindow )
328 return FALSE;
329
330 // bool controls
dcf924a3 331#if wxUSE_CHECKBOX
89c684ef
JS
332 if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckBox)) )
333 {
334 wxCheckBox* pControl = (wxCheckBox*) m_validatorWindow;
335 if (m_pBool)
336 {
337 *m_pBool = pControl->GetValue() ;
338 return TRUE;
339 }
913df6f2 340 } else
dcf924a3
RR
341#endif
342#if wxUSE_RADIOBTN
343 if (m_validatorWindow->IsKindOf(CLASSINFO(wxRadioButton)) )
89c684ef
JS
344 {
345 wxRadioButton* pControl = (wxRadioButton*) m_validatorWindow;
346 if (m_pBool)
347 {
348 *m_pBool = pControl->GetValue() ;
349 return TRUE;
350 }
dcf924a3
RR
351 } else
352#endif
89c684ef 353 // int controls
dcf924a3
RR
354#if wxUSE_GAUGE
355 if (m_validatorWindow->IsKindOf(CLASSINFO(wxGauge)) )
89c684ef
JS
356 {
357 wxGauge* pControl = (wxGauge*) m_validatorWindow;
358 if (m_pInt)
359 {
360 *m_pInt = pControl->GetValue() ;
361 return TRUE;
362 }
913df6f2 363 } else
dcf924a3
RR
364#endif
365#if wxUSE_RADIOBOX
366 if (m_validatorWindow->IsKindOf(CLASSINFO(wxRadioBox)) )
89c684ef
JS
367 {
368 wxRadioBox* pControl = (wxRadioBox*) m_validatorWindow;
369 if (m_pInt)
370 {
371 *m_pInt = pControl->GetSelection() ;
372 return TRUE;
373 }
913df6f2 374 } else
dcf924a3
RR
375#endif
376#if wxUSE_SCROLLBAR
377 if (m_validatorWindow->IsKindOf(CLASSINFO(wxScrollBar)) )
89c684ef
JS
378 {
379 wxScrollBar* pControl = (wxScrollBar*) m_validatorWindow;
380 if (m_pInt)
381 {
382 *m_pInt = pControl->GetThumbPosition() ;
383 return TRUE;
384 }
dcf924a3
RR
385 } else
386#endif
5e679c40 387#if wxUSE_SPINCTRL && !defined(__WIN16__) && !defined(__WXMOTIF__)
a55e0ebc
JS
388 if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinCtrl)) )
389 {
390 wxSpinCtrl* pControl = (wxSpinCtrl*) m_validatorWindow;
391 if (m_pInt)
392 {
393 *m_pInt=pControl->GetValue();
394 return TRUE;
395 }
396 } else
397#endif
398#if wxUSE_SPINBTN && !defined(__WIN16__)
dcf924a3 399 if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinButton)) )
89c684ef
JS
400 {
401 wxSpinButton* pControl = (wxSpinButton*) m_validatorWindow;
402 if (m_pInt)
403 {
404 *m_pInt = pControl->GetValue() ;
405 return TRUE;
406 }
dcf924a3
RR
407 } else
408#endif
e90196a5
RR
409#if wxUSE_SLIDER
410 if (m_validatorWindow->IsKindOf(CLASSINFO(wxSlider)) )
411 {
412 wxSlider* pControl = (wxSlider*) m_validatorWindow;
413 if (m_pInt)
414 {
415 pControl->SetValue(*m_pInt) ;
416 return TRUE;
417 }
418 } else
750b78ba 419#endif
89c684ef 420 // string controls
dcf924a3 421 if (m_validatorWindow->IsKindOf(CLASSINFO(wxButton)) )
89c684ef
JS
422 {
423 wxButton* pControl = (wxButton*) m_validatorWindow;
424 if (m_pString)
425 {
426 *m_pString = pControl->GetLabel() ;
427 return TRUE;
428 }
429 }
913df6f2 430 else
dcf924a3
RR
431#if wxUSE_COMBOBOX
432 if (m_validatorWindow->IsKindOf(CLASSINFO(wxComboBox)) )
89c684ef
JS
433 {
434 wxComboBox* pControl = (wxComboBox*) m_validatorWindow;
435 if (m_pString)
436 {
437 *m_pString = pControl->GetValue() ;
438 return TRUE;
439 }
f6bcfd97
BP
440 else if (m_pString)
441 {
442 *m_pString = pControl->GetStringSelection();
443 return TRUE;
444 }
913df6f2 445 } else
dcf924a3 446#endif
ce4169a4 447#if wxUSE_CHOICE
dcf924a3 448 if (m_validatorWindow->IsKindOf(CLASSINFO(wxChoice)) )
89c684ef
JS
449 {
450 wxChoice* pControl = (wxChoice*) m_validatorWindow;
451 if (m_pInt)
452 {
453 *m_pInt = pControl->GetSelection() ;
454 return TRUE;
455 }
f6bcfd97
BP
456 else if (m_pString)
457 {
458 *m_pString = pControl->GetStringSelection();
459 return TRUE;
460 }
913df6f2 461 } else
ce4169a4 462#endif
dcf924a3 463 if (m_validatorWindow->IsKindOf(CLASSINFO(wxStaticText)) )
89c684ef
JS
464 {
465 wxStaticText* pControl = (wxStaticText*) m_validatorWindow;
466 if (m_pString)
467 {
468 *m_pString = pControl->GetLabel() ;
469 return TRUE;
470 }
913df6f2 471 } else
dcf924a3 472 if (m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
89c684ef
JS
473 {
474 wxTextCtrl* pControl = (wxTextCtrl*) m_validatorWindow;
475 if (m_pString)
476 {
477 *m_pString = pControl->GetValue() ;
478 return TRUE;
479 }
f6bcfd97
BP
480 else if (m_pInt)
481 {
66b3ec7f 482 *m_pInt = wxAtoi(pControl->GetValue());
f6bcfd97
BP
483 return TRUE;
484 }
dcf924a3 485 } else
e90196a5 486#if wxUSE_CHECKLISTBOX
750b78ba 487#ifndef __WIN16__
89c684ef
JS
488 // array controls
489 // NOTE: wxCheckListBox isa wxListBox, so wxCheckListBox
490 // MUST come first:
dcf924a3 491 if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckListBox)) )
89c684ef
JS
492 {
493 wxCheckListBox* pControl = (wxCheckListBox*) m_validatorWindow;
494 if (m_pArrayInt)
495 {
496 // clear our array
497 m_pArrayInt->Clear();
498 // add each selected item to our array
499 int i;
500 for (i = 0 ; i < pControl->Number(); ++i)
501 if (pControl->IsChecked(i))
502 m_pArrayInt->Add(i);
503 return TRUE;
504 }
505 else
506 return FALSE;
dcf924a3
RR
507 } else
508#endif
750b78ba 509#endif
dcf924a3
RR
510#if wxUSE_LISTBOX
511 if (m_validatorWindow->IsKindOf(CLASSINFO(wxListBox)) )
89c684ef
JS
512 {
513 wxListBox* pControl = (wxListBox*) m_validatorWindow;
514 if (m_pArrayInt)
515 {
516 // clear our array
517 m_pArrayInt->Clear();
518 // add each selected item to our array
519 int i;
520 for (i = 0 ; i < pControl->Number(); ++i)
521 if (pControl->Selected(i))
522 m_pArrayInt->Add(i);
523 return TRUE;
524 }
dcf924a3
RR
525 } else
526#endif
89c684ef
JS
527
528 // unrecognized control, or bad pointer
dcf924a3 529 return FALSE;
89c684ef
JS
530 return FALSE;
531}
532
533/*
534 Called by constructors to initialize ALL data members
a55e0ebc 535 Last change: JAC 21 Jul 100 5:00 pm
89c684ef
JS
536*/
537void wxGenericValidator::Initialize()
538{
ce4169a4
RR
539 m_pBool = 0;
540 m_pInt = 0;
541 m_pString = 0;
542 m_pArrayInt = 0;
89c684ef
JS
543}
544
ce4169a4
RR
545#endif
546 // wxUSE_VALIDATORS
913df6f2 547