///////////////////////////////////////////////////////////////////////////// // Name: serctrl.cpp // Purpose: Serialization: control classes // Author: Guilhem Lavaux // Modified by: // Created: July 1998 // RCS-ID: $Id$ // Copyright: (c) 1998 Guilhem Lavaux // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ #pragma implementation "serctrl.h" #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "serwnd.h" #include "serctrl.h" IMPLEMENT_ALIAS_SERIAL_CLASS(wxControl, wxWindow) #ifdef __WINDOWS__ IMPLEMENT_SERIAL_CLASS(wxSlider95, wxControl) IMPLEMENT_SERIAL_CLASS(wxGauge95, wxControl) #else IMPLEMENT_SERIAL_CLASS(wxSlider, wxControl) IMPLEMENT_SERIAL_CLASS(wxGauge, wxControl) #endif IMPLEMENT_SERIAL_CLASS(wxCheckBox, wxControl) IMPLEMENT_SERIAL_CLASS(wxChoice, wxControl) IMPLEMENT_SERIAL_CLASS(wxComboBox, wxControl) IMPLEMENT_SERIAL_CLASS(wxListBox, wxControl) IMPLEMENT_SERIAL_CLASS(wxNotebook, wxControl) IMPLEMENT_SERIAL_CLASS(wxRadioBox, wxControl) IMPLEMENT_SERIAL_CLASS(wxRadioButton, wxControl) IMPLEMENT_SERIAL_CLASS(wxButton, wxControl) IMPLEMENT_SERIAL_CLASS(wxStaticText, wxControl) IMPLEMENT_SERIAL_CLASS(wxStaticBox, wxControl) //----------------------------------------------------------------------------- void WXSERIAL(wxButton)::StoreObject(wxObjectOutputStream& s) { WXSERIAL(wxControl)::StoreObject(s); } void WXSERIAL(wxButton)::LoadObject(wxObjectInputStream& s) { WXSERIAL(wxControl)::LoadObject(s); if (s.SecondCall()) return; wxButton *button = (wxButton *)Object(); printf("label = %s\n", WXSTRINGCAST m_label); button->Create(m_parent, m_id, m_label, wxPoint(m_x, m_y), wxSize(m_w, m_h), m_style, *m_validator, m_name); } //----------------------------------------------------------------------------- void WXSERIAL(wxCheckBox)::StoreObject(wxObjectOutputStream& s) { WXSERIAL(wxControl)::StoreObject(s); if (s.FirstStage()) return; wxDataOutputStream data_s(s); data_s.Write8( ((wxCheckBox *)Object())->GetValue() ); } void WXSERIAL(wxCheckBox)::LoadObject(wxObjectInputStream& s) { WXSERIAL(wxControl)::LoadObject(s); if (s.SecondCall()) return; wxDataInputStream data_s(s); wxCheckBox *chkbox = (wxCheckBox *)Object(); chkbox->Create(m_parent, m_id, m_label, wxPoint(m_x, m_y), wxSize(m_w, m_h), m_style, *m_validator, m_name); chkbox->SetValue(data_s.Read8()); } //----------------------------------------------------------------------------- #ifdef __WXMSW__ void WXSERIAL(wxSlider95)::StoreObject(wxObjectOutputStream& s) #else void WXSERIAL(wxSlider)::StoreObject(wxObjectOutputStream& s) #endif { WXSERIAL(wxControl)::StoreObject(s); if (s.FirstStage()) return; wxDataOutputStream data_s(s); wxSlider *slider = (wxSlider *)Object(); data_s.Write32( slider->GetMin() ); data_s.Write32( slider->GetMax() ); data_s.Write32( slider->GetValue() ); data_s.Write32( slider->GetTickFreq() ); data_s.Write32( slider->GetPageSize() ); data_s.Write32( slider->GetLineSize() ); data_s.Write32( slider->GetSelStart() ); data_s.Write32( slider->GetSelEnd() ); data_s.Write32( slider->GetThumbLength() ); } #ifdef __WXMSW__ void WXSERIAL(wxSlider95)::LoadObject(wxObjectInputStream& s) #else void WXSERIAL(wxSlider)::LoadObject(wxObjectInputStream& s) #endif { WXSERIAL(wxControl)::LoadObject(s); if (s.SecondCall()) return; wxDataInputStream data_s(s); wxSlider *slider = (wxSlider *)Object(); int value, min, max; min = data_s.Read32(); max = data_s.Read32(); value = data_s.Read32(); slider->Create(m_parent, m_id, value, min, max, wxPoint(m_x, m_y), wxSize(m_w, m_h), m_style, *m_validator, m_name); slider->SetTickFreq( 0, data_s.Read32() ); slider->SetPageSize( data_s.Read32() ); slider->SetLineSize( data_s.Read32() ); min = data_s.Read32(); max = data_s.Read32(); slider->SetSelection(min, max); slider->SetThumbLength( data_s.Read32() ); } //----------------------------------------------------------------------------- #ifdef __WXMSW__ void WXSERIAL(wxGauge95)::StoreObject(wxObjectOutputStream& s) #else void WXSERIAL(wxGauge)::StoreObject(wxObjectOutputStream& s) #endif { WXSERIAL(wxControl)::StoreObject(s); if (s.FirstStage()) return; wxDataOutputStream data_s(s); wxGauge *gauge = (wxGauge *)Object(); data_s.Write32( gauge->GetRange() ); data_s.Write8( gauge->GetShadowWidth() ); data_s.Write8( gauge->GetBezelFace() ); data_s.Write32( gauge->GetValue() ); } #ifdef __WXMSW__ void WXSERIAL(wxGauge95)::LoadObject(wxObjectInputStream& s) #else void WXSERIAL(wxGauge)::LoadObject(wxObjectInputStream& s) #endif { WXSERIAL(wxControl)::LoadObject(s); if (s.SecondCall()) return; wxDataInputStream data_s(s); wxGauge *gauge = (wxGauge *)Object(); int range; range = data_s.Read32(); gauge->Create(m_parent, m_id, range, wxPoint(m_x, m_y), wxSize(m_w, m_h), m_style, *m_validator, m_name); gauge->SetShadowWidth( data_s.Read8() ); gauge->SetBezelFace( data_s.Read8() ); gauge->SetValue( data_s.Read32() ); } //----------------------------------------------------------------------------- void WXSERIAL(wxChoice)::StoreObject(wxObjectOutputStream& s) { WXSERIAL(wxControl)::StoreObject(s); if (s.FirstStage()) return; wxDataOutputStream data_s(s); wxChoice *choice = (wxChoice *)Object(); int i, num = choice->Number(); data_s.Write32(num); for (i=0;iGetString(i) ); } void WXSERIAL(wxChoice)::LoadObject(wxObjectInputStream& s) { WXSERIAL(wxControl)::LoadObject(s); if (s.SecondCall()) return; wxDataInputStream data_s(s); wxChoice *choice = (wxChoice *)Object(); int i,num = data_s.Read32(); choice->Create(m_parent, m_id, wxPoint(m_x, m_y), wxSize(m_w, m_h), 0, NULL, m_style, *m_validator, m_name); for (i=0;iAppend( data_s.ReadString() ); } //----------------------------------------------------------------------------- void WXSERIAL(wxListBox)::StoreObject(wxObjectOutputStream& s) { WXSERIAL(wxControl)::StoreObject(s); if (s.FirstStage()) return; wxDataOutputStream data_s(s); wxListBox *listbox = (wxListBox *)Object(); int i, num = listbox->Number(); data_s.Write32(num); for (i=0;iGetString(i) ); } void WXSERIAL(wxListBox)::LoadObject(wxObjectInputStream& s) { WXSERIAL(wxListBox)::LoadObject(s); if (s.SecondCall()) return; wxDataInputStream data_s(s); wxListBox *listbox = (wxListBox *)Object(); int i, num = data_s.Read32(); for (i=0;iAppend( data_s.ReadString() ); } //----------------------------------------------------------------------------- void WXSERIAL(wxNotebook)::StoreObject(wxObjectOutputStream& s) { wxNotebook *notebook = (wxNotebook *)Object(); wxImageList *imaglist = notebook->GetImageList(); int i, pcount = notebook->GetPageCount(); WXSERIAL(wxControl)::StoreObject(s); if (s.FirstStage()) { s.AddChild(imaglist); return; } wxDataOutputStream data_s(s); data_s.Write8( pcount ); for (i=0;iGetPageText(i) ); } void WXSERIAL(wxNotebook)::LoadObject(wxObjectInputStream& s) { wxNotebook *notebook = (wxNotebook *)Object(); int i; wxImageList *imaglist; WXSERIAL(wxControl)::LoadObject(s); if (s.SecondCall()) { for (i=0;iAddPage( (wxWindow *)s.GetChild(), m_stringlist[i] ); return; } imaglist = (wxImageList *)s.GetChild(); notebook->Create(m_parent, m_id, wxPoint(m_x, m_y), wxSize(m_w, m_h), m_style, m_name); wxDataInputStream data_s(s); m_pcount = data_s.Read8(); for (i=0;iNumber(); data_s.Write8( n_items ); data_s.Write8( box->GetNumberOfRowsOrCols() ); for (i=0;iGetString(i) ); } void WXSERIAL(wxRadioBox)::LoadObject(wxObjectInputStream& s) { wxRadioBox *box = (wxRadioBox *)Object(); WXSERIAL(wxControl)::LoadObject(s); if (s.SecondCall()) return; wxDataInputStream data_s(s); int i, n_rows_cols, n_items; wxString *items; n_items = data_s.Read8(); n_rows_cols = data_s.Read8(); items = new wxString[n_items]; for (i=0;iCreate(m_parent, m_id, m_title, wxPoint(m_x, m_y), wxSize(m_w, m_h), n_items, items, 0, m_style, *m_validator, m_name); } //----------------------------------------------------------------------------- void WXSERIAL(wxRadioButton)::StoreObject(wxObjectOutputStream& s) { WXSERIAL(wxControl)::StoreObject(s); if (s.FirstStage()) return; wxDataOutputStream data_s(s); data_s.Write8( (char) ((wxRadioButton *)Object())->GetValue() ); } void WXSERIAL(wxRadioButton)::LoadObject(wxObjectInputStream& s) { wxDataInputStream data_s(s); WXSERIAL(wxControl)::LoadObject(s); if (s.SecondCall()) return; ((wxRadioButton *)Object())->SetValue( (bool)data_s.Read8() ); } //----------------------------------------------------------------------------- void WXSERIAL(wxComboBox)::StoreObject(wxObjectOutputStream& s) { WXSERIAL(wxControl)::StoreObject(s); if (s.FirstStage()) return; wxDataOutputStream data_s(s); wxComboBox *box = (wxComboBox *)Object(); int i, num = box->Number(); data_s.Write8( num ); data_s.Write8( box->GetSelection() ); for (i=0;iGetString(i) ); data_s.WriteString( box->GetValue() ); // TODO: Editable flag } void WXSERIAL(wxComboBox)::LoadObject(wxObjectInputStream& s) { WXSERIAL(wxControl)::LoadObject(s); if (s.SecondCall()) return; wxDataInputStream data_s(s); wxComboBox *box = (wxComboBox *)Object(); int i, num, selection; box->Create(m_parent, m_id, wxEmptyString, wxPoint(m_x, m_y), wxSize(m_w, m_h), 0, NULL, m_style, *m_validator, m_name); num = data_s.Read8(); selection = data_s.Read8(); for (i=0;iAppend( data_s.ReadString() ); box->SetSelection( selection ); box->SetValue( data_s.ReadString() ); } //----------------------------------------------------------------------------- void WXSERIAL(wxStaticText)::StoreObject(wxObjectOutputStream& s) { WXSERIAL(wxControl)::StoreObject(s); } void WXSERIAL(wxStaticText)::LoadObject(wxObjectInputStream& s) { WXSERIAL(wxControl)::LoadObject(s); if (s.SecondCall()) return; ((wxStaticText *)Object())->Create(m_parent, m_id, m_label, wxPoint(m_x, m_y), wxSize(m_w, m_h), m_style, m_name); } //----------------------------------------------------------------------------- void WXSERIAL(wxStaticBox)::StoreObject(wxObjectOutputStream& s) { WXSERIAL(wxControl)::StoreObject(s); } void WXSERIAL(wxStaticBox)::LoadObject(wxObjectInputStream& s) { WXSERIAL(wxControl)::LoadObject(s); if (s.SecondCall()) return; ((wxStaticBox *)Object())->Create(m_parent, m_id, m_label, wxPoint(m_x, m_y), wxSize(m_w, m_h), m_style, m_name); }