]> git.saurik.com Git - wxWidgets.git/blame_incremental - utils/serialize/serctrl.cpp
draw the selected items in another colour when the control doesn't have focus, a...
[wxWidgets.git] / utils / serialize / serctrl.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: serctrl.cpp
3// Purpose: Serialization: control classes
4// Author: Guilhem Lavaux
5// Modified by:
6// Created: July 1998
7// RCS-ID: $Id$
8// Copyright: (c) 1998 Guilhem Lavaux
9// Licence: wxWindows license
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13#pragma implementation "serctrl.h"
14#endif
15
16#include <wx/window.h>
17#include <wx/control.h>
18#include <wx/button.h>
19#include <wx/checkbox.h>
20#include <wx/slider.h>
21#include <wx/gauge.h>
22#include <wx/choice.h>
23#include <wx/listbox.h>
24#include <wx/notebook.h>
25#include <wx/radiobox.h>
26#include <wx/radiobut.h>
27#include <wx/stattext.h>
28#include <wx/statbox.h>
29#include <wx/combobox.h>
30#include <wx/imaglist.h>
31#include <wx/objstrm.h>
32#include <wx/datstrm.h>
33#include <wx/serbase.h>
34#include "serwnd.h"
35#include "serctrl.h"
36
37IMPLEMENT_ALIAS_SERIAL_CLASS(wxControl, wxWindow)
38#ifdef __WINDOWS__
39IMPLEMENT_SERIAL_CLASS(wxSlider95, wxControl)
40IMPLEMENT_SERIAL_CLASS(wxGauge95, wxControl)
41#else
42IMPLEMENT_SERIAL_CLASS(wxSlider, wxControl)
43IMPLEMENT_SERIAL_CLASS(wxGauge, wxControl)
44#endif
45IMPLEMENT_SERIAL_CLASS(wxCheckBox, wxControl)
46IMPLEMENT_SERIAL_CLASS(wxChoice, wxControl)
47IMPLEMENT_SERIAL_CLASS(wxComboBox, wxControl)
48IMPLEMENT_SERIAL_CLASS(wxListBox, wxControl)
49IMPLEMENT_SERIAL_CLASS(wxNotebook, wxControl)
50IMPLEMENT_SERIAL_CLASS(wxRadioBox, wxControl)
51IMPLEMENT_SERIAL_CLASS(wxRadioButton, wxControl)
52IMPLEMENT_SERIAL_CLASS(wxButton, wxControl)
53IMPLEMENT_SERIAL_CLASS(wxStaticText, wxControl)
54IMPLEMENT_SERIAL_CLASS(wxStaticBox, wxControl)
55
56//-----------------------------------------------------------------------------
57
58void WXSERIAL(wxButton)::StoreObject(wxObjectOutputStream& s)
59{
60 WXSERIAL(wxControl)::StoreObject(s);
61}
62
63void WXSERIAL(wxButton)::LoadObject(wxObjectInputStream& s)
64{
65 WXSERIAL(wxControl)::LoadObject(s);
66
67 if (s.SecondCall())
68 return;
69
70 wxButton *button = (wxButton *)Object();
71
72 printf("label = %s\n", WXSTRINGCAST m_label);
73 button->Create(m_parent, m_id, m_label, wxPoint(m_x, m_y), wxSize(m_w, m_h),
74 m_style, *m_validator, m_name);
75}
76
77//-----------------------------------------------------------------------------
78
79void WXSERIAL(wxCheckBox)::StoreObject(wxObjectOutputStream& s)
80{
81 WXSERIAL(wxControl)::StoreObject(s);
82
83 if (s.FirstStage())
84 return;
85
86 wxDataOutputStream data_s(s);
87 data_s.Write8( ((wxCheckBox *)Object())->GetValue() );
88}
89
90void WXSERIAL(wxCheckBox)::LoadObject(wxObjectInputStream& s)
91{
92 WXSERIAL(wxControl)::LoadObject(s);
93
94 if (s.SecondCall())
95 return;
96
97 wxDataInputStream data_s(s);
98 wxCheckBox *chkbox = (wxCheckBox *)Object();
99
100 chkbox->Create(m_parent, m_id, m_label, wxPoint(m_x, m_y), wxSize(m_w, m_h),
101 m_style, *m_validator, m_name);
102
103 chkbox->SetValue(data_s.Read8());
104}
105
106//-----------------------------------------------------------------------------
107
108#ifdef __WXMSW__
109void WXSERIAL(wxSlider95)::StoreObject(wxObjectOutputStream& s)
110#else
111void WXSERIAL(wxSlider)::StoreObject(wxObjectOutputStream& s)
112#endif
113{
114 WXSERIAL(wxControl)::StoreObject(s);
115
116 if (s.FirstStage())
117 return;
118
119 wxDataOutputStream data_s(s);
120 wxSlider *slider = (wxSlider *)Object();
121
122 data_s.Write32( slider->GetMin() );
123 data_s.Write32( slider->GetMax() );
124 data_s.Write32( slider->GetValue() );
125 data_s.Write32( slider->GetTickFreq() );
126 data_s.Write32( slider->GetPageSize() );
127 data_s.Write32( slider->GetLineSize() );
128 data_s.Write32( slider->GetSelStart() );
129 data_s.Write32( slider->GetSelEnd() );
130 data_s.Write32( slider->GetThumbLength() );
131}
132
133#ifdef __WXMSW__
134void WXSERIAL(wxSlider95)::LoadObject(wxObjectInputStream& s)
135#else
136void WXSERIAL(wxSlider)::LoadObject(wxObjectInputStream& s)
137#endif
138{
139 WXSERIAL(wxControl)::LoadObject(s);
140
141 if (s.SecondCall())
142 return;
143
144 wxDataInputStream data_s(s);
145 wxSlider *slider = (wxSlider *)Object();
146 int value, min, max;
147
148 min = data_s.Read32();
149 max = data_s.Read32();
150 value = data_s.Read32();
151
152 slider->Create(m_parent, m_id, value, min, max, wxPoint(m_x, m_y),
153 wxSize(m_w, m_h), m_style, *m_validator, m_name);
154
155 slider->SetTickFreq( 0, data_s.Read32() );
156 slider->SetPageSize( data_s.Read32() );
157 slider->SetLineSize( data_s.Read32() );
158 min = data_s.Read32();
159 max = data_s.Read32();
160 slider->SetSelection(min, max);
161 slider->SetThumbLength( data_s.Read32() );
162}
163
164//-----------------------------------------------------------------------------
165
166#ifdef __WXMSW__
167void WXSERIAL(wxGauge95)::StoreObject(wxObjectOutputStream& s)
168#else
169void WXSERIAL(wxGauge)::StoreObject(wxObjectOutputStream& s)
170#endif
171{
172 WXSERIAL(wxControl)::StoreObject(s);
173
174 if (s.FirstStage())
175 return;
176
177 wxDataOutputStream data_s(s);
178 wxGauge *gauge = (wxGauge *)Object();
179
180 data_s.Write32( gauge->GetRange() );
181 data_s.Write8( gauge->GetShadowWidth() );
182 data_s.Write8( gauge->GetBezelFace() );
183 data_s.Write32( gauge->GetValue() );
184}
185
186#ifdef __WXMSW__
187void WXSERIAL(wxGauge95)::LoadObject(wxObjectInputStream& s)
188#else
189void WXSERIAL(wxGauge)::LoadObject(wxObjectInputStream& s)
190#endif
191{
192 WXSERIAL(wxControl)::LoadObject(s);
193
194 if (s.SecondCall())
195 return;
196
197 wxDataInputStream data_s(s);
198 wxGauge *gauge = (wxGauge *)Object();
199 int range;
200
201 range = data_s.Read32();
202 gauge->Create(m_parent, m_id, range, wxPoint(m_x, m_y), wxSize(m_w, m_h),
203 m_style, *m_validator, m_name);
204
205 gauge->SetShadowWidth( data_s.Read8() );
206 gauge->SetBezelFace( data_s.Read8() );
207 gauge->SetValue( data_s.Read32() );
208}
209
210//-----------------------------------------------------------------------------
211
212void WXSERIAL(wxChoice)::StoreObject(wxObjectOutputStream& s)
213{
214 WXSERIAL(wxControl)::StoreObject(s);
215
216 if (s.FirstStage())
217 return;
218
219 wxDataOutputStream data_s(s);
220 wxChoice *choice = (wxChoice *)Object();
221 int i, num = choice->Number();
222
223 data_s.Write32(num);
224 for (i=0;i<num;i++)
225 data_s.WriteString( choice->GetString(i) );
226}
227
228void WXSERIAL(wxChoice)::LoadObject(wxObjectInputStream& s)
229{
230 WXSERIAL(wxControl)::LoadObject(s);
231
232 if (s.SecondCall())
233 return;
234
235 wxDataInputStream data_s(s);
236 wxChoice *choice = (wxChoice *)Object();
237 int i,num = data_s.Read32();
238
239 choice->Create(m_parent, m_id, wxPoint(m_x, m_y), wxSize(m_w, m_h), 0, NULL,
240 m_style, *m_validator, m_name);
241
242 for (i=0;i<num;i++)
243 choice->Append( data_s.ReadString() );
244}
245
246//-----------------------------------------------------------------------------
247
248void WXSERIAL(wxListBox)::StoreObject(wxObjectOutputStream& s)
249{
250 WXSERIAL(wxControl)::StoreObject(s);
251
252 if (s.FirstStage())
253 return;
254
255 wxDataOutputStream data_s(s);
256 wxListBox *listbox = (wxListBox *)Object();
257 int i, num = listbox->Number();
258
259 data_s.Write32(num);
260 for (i=0;i<num;i++)
261 data_s.WriteString( listbox->GetString(i) );
262}
263
264void WXSERIAL(wxListBox)::LoadObject(wxObjectInputStream& s)
265{
266 WXSERIAL(wxListBox)::LoadObject(s);
267
268 if (s.SecondCall())
269 return;
270
271 wxDataInputStream data_s(s);
272 wxListBox *listbox = (wxListBox *)Object();
273 int i, num = data_s.Read32();
274
275 for (i=0;i<num;i++)
276 listbox->Append( data_s.ReadString() );
277}
278
279//-----------------------------------------------------------------------------
280
281void WXSERIAL(wxNotebook)::StoreObject(wxObjectOutputStream& s)
282{
283 wxNotebook *notebook = (wxNotebook *)Object();
284 wxImageList *imaglist = notebook->GetImageList();
285 int i, pcount = notebook->GetPageCount();
286
287 WXSERIAL(wxControl)::StoreObject(s);
288 if (s.FirstStage()) {
289 s.AddChild(imaglist);
290 return;
291 }
292
293 wxDataOutputStream data_s(s);
294
295 data_s.Write8( pcount );
296
297 for (i=0;i<pcount;i++)
298 data_s.WriteString( notebook->GetPageText(i) );
299}
300
301void WXSERIAL(wxNotebook)::LoadObject(wxObjectInputStream& s)
302{
303 wxNotebook *notebook = (wxNotebook *)Object();
304 int i;
305 wxImageList *imaglist;
306
307 WXSERIAL(wxControl)::LoadObject(s);
308
309 if (s.SecondCall()) {
310 for (i=0;i<m_pcount;i++)
311 notebook->AddPage( (wxWindow *)s.GetChild(), m_stringlist[i] );
312 return;
313 }
314
315 imaglist = (wxImageList *)s.GetChild();
316
317 notebook->Create(m_parent, m_id, wxPoint(m_x, m_y), wxSize(m_w, m_h),
318 m_style, m_name);
319
320 wxDataInputStream data_s(s);
321
322 m_pcount = data_s.Read8();
323 for (i=0;i<m_pcount;i++)
324 m_stringlist.Add(data_s.ReadString());
325 s.Recall();
326}
327
328//-----------------------------------------------------------------------------
329
330void WXSERIAL(wxRadioBox)::StoreObject(wxObjectOutputStream& s)
331{
332 wxRadioBox *box = (wxRadioBox *)Object();
333 WXSERIAL(wxControl)::StoreObject(s);
334
335 if (s.FirstStage())
336 return;
337
338 wxDataOutputStream data_s(s);
339 int i, n_items = box->Number();
340
341 data_s.Write8( n_items );
342 data_s.Write8( box->GetNumberOfRowsOrCols() );
343
344 for (i=0;i<n_items;i++)
345 data_s.WriteString( box->GetString(i) );
346}
347
348void WXSERIAL(wxRadioBox)::LoadObject(wxObjectInputStream& s)
349{
350 wxRadioBox *box = (wxRadioBox *)Object();
351
352 WXSERIAL(wxControl)::LoadObject(s);
353
354 if (s.SecondCall())
355 return;
356
357 wxDataInputStream data_s(s);
358 int i, n_rows_cols, n_items;
359 wxString *items;
360
361 n_items = data_s.Read8();
362 n_rows_cols = data_s.Read8();
363
364 items = new wxString[n_items];
365 for (i=0;i<n_items;i++)
366 items[i] = data_s.ReadString();
367
368 box->Create(m_parent, m_id, m_title, wxPoint(m_x, m_y), wxSize(m_w, m_h),
369 n_items, items, 0, m_style, *m_validator, m_name);
370}
371
372//-----------------------------------------------------------------------------
373
374void WXSERIAL(wxRadioButton)::StoreObject(wxObjectOutputStream& s)
375{
376 WXSERIAL(wxControl)::StoreObject(s);
377
378 if (s.FirstStage())
379 return;
380
381 wxDataOutputStream data_s(s);
382 data_s.Write8( (char) ((wxRadioButton *)Object())->GetValue() );
383}
384
385void WXSERIAL(wxRadioButton)::LoadObject(wxObjectInputStream& s)
386{
387 wxDataInputStream data_s(s);
388
389 WXSERIAL(wxControl)::LoadObject(s);
390
391 if (s.SecondCall())
392 return;
393
394 ((wxRadioButton *)Object())->SetValue( (bool)data_s.Read8() );
395}
396
397//-----------------------------------------------------------------------------
398
399void WXSERIAL(wxComboBox)::StoreObject(wxObjectOutputStream& s)
400{
401 WXSERIAL(wxControl)::StoreObject(s);
402
403 if (s.FirstStage())
404 return;
405
406 wxDataOutputStream data_s(s);
407 wxComboBox *box = (wxComboBox *)Object();
408 int i, num = box->Number();
409
410 data_s.Write8( num );
411 data_s.Write8( box->GetSelection() );
412 for (i=0;i<num;i++)
413 data_s.WriteString( box->GetString(i) );
414
415 data_s.WriteString( box->GetValue() );
416
417 // TODO: Editable flag
418}
419
420void WXSERIAL(wxComboBox)::LoadObject(wxObjectInputStream& s)
421{
422 WXSERIAL(wxControl)::LoadObject(s);
423
424 if (s.SecondCall())
425 return;
426
427 wxDataInputStream data_s(s);
428 wxComboBox *box = (wxComboBox *)Object();
429 int i, num, selection;
430
431 box->Create(m_parent, m_id, wxEmptyString, wxPoint(m_x, m_y), wxSize(m_w, m_h),
432 0, NULL, m_style, *m_validator, m_name);
433
434 num = data_s.Read8();
435 selection = data_s.Read8();
436
437 for (i=0;i<num;i++)
438 box->Append( data_s.ReadString() );
439
440 box->SetSelection( selection );
441 box->SetValue( data_s.ReadString() );
442}
443
444//-----------------------------------------------------------------------------
445
446void WXSERIAL(wxStaticText)::StoreObject(wxObjectOutputStream& s)
447{
448 WXSERIAL(wxControl)::StoreObject(s);
449}
450
451void WXSERIAL(wxStaticText)::LoadObject(wxObjectInputStream& s)
452{
453 WXSERIAL(wxControl)::LoadObject(s);
454
455 if (s.SecondCall())
456 return;
457
458 ((wxStaticText *)Object())->Create(m_parent, m_id, m_label, wxPoint(m_x, m_y),
459 wxSize(m_w, m_h), m_style, m_name);
460}
461
462//-----------------------------------------------------------------------------
463
464void WXSERIAL(wxStaticBox)::StoreObject(wxObjectOutputStream& s)
465{
466 WXSERIAL(wxControl)::StoreObject(s);
467}
468
469void WXSERIAL(wxStaticBox)::LoadObject(wxObjectInputStream& s)
470{
471 WXSERIAL(wxControl)::LoadObject(s);
472
473 if (s.SecondCall())
474 return;
475
476 ((wxStaticBox *)Object())->Create(m_parent, m_id, m_label, wxPoint(m_x, m_y),
477 wxSize(m_w, m_h), m_style, m_name);
478}