1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Property sheet test implementation
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "proplist_sample.h"
16 // For compilers that support precompilation, includes "wx/wx.h".
17 #include "wx/wxprec.h"
27 #include "wx/deprecated/setup.h"
30 #error Please set wxUSE_PROPSHEET to 1 in contrib/include/wx/deprecated/setup.h and recompile.
37 wxPropertyValidatorRegistry myListValidatorRegistry
;
38 wxPropertyValidatorRegistry myFormValidatorRegistry
;
46 bool MyApp::OnInit(void)
50 // Create the main frame window
51 m_mainFrame
= new MyFrame(NULL
, _T("wxPropertySheet Demo"), wxPoint(0, 0), wxSize(300, 400), wxDEFAULT_FRAME_STYLE
);
54 wxMenu
*file_menu
= new wxMenu
;
55 file_menu
->Append(PROPERTY_TEST_DIALOG_LIST
, _T("Test property list &dialog..."));
56 file_menu
->Append(PROPERTY_TEST_FRAME_LIST
, _T("Test property list &frame..."));
57 file_menu
->AppendSeparator();
58 file_menu
->Append(PROPERTY_TEST_DIALOG_FORM
, _T("Test property form d&ialog..."));
59 file_menu
->Append(PROPERTY_TEST_FRAME_FORM
, _T("Test property form f&rame..."));
60 file_menu
->AppendSeparator();
61 file_menu
->Append(PROPERTY_QUIT
, _T("E&xit"));
63 wxMenu
*help_menu
= new wxMenu
;
64 help_menu
->Append(PROPERTY_ABOUT
, _T("&About"));
66 wxMenuBar
*menu_bar
= new wxMenuBar
;
68 menu_bar
->Append(file_menu
, _T("&File"));
69 menu_bar
->Append(help_menu
, _T("&Help"));
71 // Associate the menu bar with the frame
72 m_mainFrame
->SetMenuBar(menu_bar
);
74 m_mainFrame
->Centre(wxBOTH
);
75 m_mainFrame
->Show(true);
77 SetTopWindow(m_mainFrame
);
82 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
83 EVT_CLOSE(MyFrame::OnCloseWindow
)
84 EVT_MENU(PROPERTY_QUIT
, MyFrame::OnQuit
)
85 EVT_MENU(PROPERTY_ABOUT
, MyFrame::OnAbout
)
86 EVT_MENU(PROPERTY_TEST_DIALOG_LIST
, MyFrame::OnDialogList
)
87 EVT_MENU(PROPERTY_TEST_FRAME_LIST
, MyFrame::OnFrameList
)
88 EVT_MENU(PROPERTY_TEST_DIALOG_FORM
, MyFrame::OnDialogForm
)
89 EVT_MENU(PROPERTY_TEST_FRAME_FORM
, MyFrame::OnFrameForm
)
92 // Define my frame constructor
93 MyFrame::MyFrame(wxFrame
*frame
, const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
, long type
):
94 wxFrame(frame
, wxID_ANY
, title
, pos
, size
, type
)
98 // Define the behaviour for the frame closing
99 // - must delete all frames except for the main one.
100 void MyFrame::OnCloseWindow(wxCloseEvent
& WXUNUSED(event
))
102 if (wxGetApp().m_childWindow
)
104 wxGetApp().m_childWindow
->Close(true);
110 void MyFrame::OnQuit(wxCommandEvent
& WXUNUSED(event
))
115 void MyFrame::OnDialogList(wxCommandEvent
& WXUNUSED(event
))
117 wxGetApp().PropertyListTest(true);
120 void MyFrame::OnFrameList(wxCommandEvent
& WXUNUSED(event
))
122 wxGetApp().PropertyListTest(false);
125 void MyFrame::OnDialogForm(wxCommandEvent
& WXUNUSED(event
))
127 wxGetApp().PropertyFormTest(true);
130 void MyFrame::OnFrameForm(wxCommandEvent
& WXUNUSED(event
))
132 wxGetApp().PropertyFormTest(false);
135 void MyFrame::OnAbout(wxCommandEvent
& WXUNUSED(event
))
137 (void)wxMessageBox(_T("Property Classes Demo\nAuthor: Julian Smart"), _T("About Property Classes Test"));
140 void MyApp::RegisterValidators(void)
142 myListValidatorRegistry
.RegisterValidator((wxString
)_T("real"), new wxRealListValidator
);
143 myListValidatorRegistry
.RegisterValidator((wxString
)_T("string"), new wxStringListValidator
);
144 myListValidatorRegistry
.RegisterValidator((wxString
)_T("integer"), new wxIntegerListValidator
);
145 myListValidatorRegistry
.RegisterValidator((wxString
)_T("bool"), new wxBoolListValidator
);
146 myListValidatorRegistry
.RegisterValidator((wxString
)_T("stringlist"), new wxListOfStringsListValidator
);
148 myFormValidatorRegistry
.RegisterValidator((wxString
)_T("real"), new wxRealFormValidator
);
149 myFormValidatorRegistry
.RegisterValidator((wxString
)_T("string"), new wxStringFormValidator
);
150 myFormValidatorRegistry
.RegisterValidator((wxString
)_T("integer"), new wxIntegerFormValidator
);
151 myFormValidatorRegistry
.RegisterValidator((wxString
)_T("bool"), new wxBoolFormValidator
);
154 void MyApp::PropertyListTest(bool useDialog
)
159 wxPropertySheet
*sheet
= new wxPropertySheet
;
161 sheet
->AddProperty(new wxProperty(_T("fred"), 1.0, _T("real")));
162 sheet
->AddProperty(new wxProperty(_T("tough choice"), true, _T("bool")));
163 sheet
->AddProperty(new wxProperty(_T("ian"), (long)45, _T("integer"), new wxIntegerListValidator(-50, 50)));
164 sheet
->AddProperty(new wxProperty(_T("bill"), 25.0, _T("real"), new wxRealListValidator(0.0, 100.0)));
165 sheet
->AddProperty(new wxProperty(_T("julian"), _T("one"), _T("string")));
166 sheet
->AddProperty(new wxProperty(_T("bitmap"), _T("none"), _T("string"), new wxFilenameListValidator(_T("Select a bitmap file"), _T("*.bmp"))));
167 wxStringList
*strings
= new wxStringList(wxT("one"), wxT("two"), wxT("three"), NULL
);
168 sheet
->AddProperty(new wxProperty(_T("constrained"), _T("one"), _T("string"), new wxStringListValidator(strings
)));
170 wxStringList
*strings2
= new wxStringList(wxT("earth"), wxT("fire"), wxT("wind"), wxT("water"), NULL
);
171 sheet
->AddProperty(new wxProperty(_T("string list"), strings2
, _T("stringlist")));
173 wxPropertyListView
*view
= new wxPropertyListView
176 wxPROP_BUTTON_OK
| wxPROP_BUTTON_CANCEL
| wxPROP_BUTTON_CHECK_CROSS
177 | wxPROP_DYNAMIC_VALUE_FIELD
| wxPROP_PULLDOWN
| wxPROP_SHOWVALUES
180 PropListDialog
*propDialog
= NULL
;
181 PropListFrame
*propFrame
= NULL
;
184 propDialog
= new PropListDialog(view
, NULL
, _T("Property Sheet Test"),
185 wxDefaultPosition
, wxSize(400, 500), wxDEFAULT_DIALOG_STYLE
|wxDIALOG_MODELESS
);
186 m_childWindow
= propDialog
;
190 propFrame
= new PropListFrame(view
, NULL
, _T("Property Sheet Test"),
191 wxDefaultPosition
, wxSize(400, 500));
192 m_childWindow
= propFrame
;
195 view
->AddRegistry(&myListValidatorRegistry
);
199 view
->ShowView(sheet
, (wxPanel
*)propDialog
);
203 propFrame
->Initialize();
204 view
->ShowView(sheet
, propFrame
->GetPropertyPanel());
207 m_childWindow
->Centre(wxBOTH
);
208 m_childWindow
->Show(true);
211 void MyApp::PropertyFormTest(bool useDialog
)
216 wxPropertySheet
*sheet
= new wxPropertySheet
;
218 sheet
->AddProperty(new wxProperty(_T("fred"), 25.0, _T("real"), new wxRealFormValidator(0.0, 100.0)));
219 sheet
->AddProperty(new wxProperty(_T("tough choice"), true, _T("bool")));
220 sheet
->AddProperty(new wxProperty(_T("ian"), (long)45, _T("integer"), new wxIntegerFormValidator(-50, 50)));
221 sheet
->AddProperty(new wxProperty(_T("julian"), _T("one"), _T("string")));
222 wxStringList
*strings
= new wxStringList(wxT("one"), wxT("two"), wxT("three"), NULL
);
223 sheet
->AddProperty(new wxProperty(_T("constrained"), _T("one"), _T("string"), new wxStringFormValidator(strings
)));
225 wxPropertyFormView
*view
= new wxPropertyFormView(NULL
);
227 wxDialog
*propDialog
= NULL
;
228 wxPropertyFormFrame
*propFrame
= NULL
;
232 propDialog
= new PropFormDialog(view
, NULL
, _T("Property Form Test"),
233 wxDefaultPosition
, wxSize(380, 250), wxDEFAULT_DIALOG_STYLE
|wxDIALOG_MODAL
);
234 m_childWindow
= propDialog
;
238 propFrame
= new PropFormFrame(view
, NULL
, _T("Property Form Test"),
239 wxDefaultPosition
, wxSize(380, 250));
240 propFrame
->Initialize();
241 m_childWindow
= propFrame
;
244 // BCC32 does not like ?:
252 panel
= propFrame
->GetPropertyPanel() ;
255 wxLayoutConstraints
* c
;
260 c
= new wxLayoutConstraints
;
261 c
->left
.SameAs(m_childWindow
, wxLeft
, 4);
262 c
->right
.SameAs(m_childWindow
, wxRight
, 4);
263 c
->top
.SameAs(m_childWindow
, wxTop
, 4);
264 c
->bottom
.SameAs(m_childWindow
, wxBottom
, 40);
266 panel
->SetConstraints(c
);
270 // Add items to the panel
271 wxButton
*okButton
= new wxButton(panel
, wxID_OK
, _T("OK"), wxDefaultPosition
,
272 wxSize(80, 26), 0, wxDefaultValidator
, _T("ok"));
273 wxButton
*cancelButton
= new wxButton(panel
, wxID_CANCEL
, _T("Cancel"), wxDefaultPosition
,
274 wxSize(80, 26), 0, wxDefaultValidator
, _T("cancel"));
275 wxButton
*updateButton
= new wxButton(panel
, wxID_PROP_UPDATE
, _T("Update"), wxDefaultPosition
,
276 wxSize(80, 26), 0, wxDefaultValidator
, _T("update"));
277 wxButton
*revertButton
= new wxButton(panel
, wxID_PROP_REVERT
, _T("Revert"), wxDefaultPosition
,
278 wxSize(80, 26), 0, wxDefaultValidator
, _T("revert"));
280 c
= new wxLayoutConstraints
;
281 c
->right
.SameAs(panel
, wxRight
, 4);
282 c
->bottom
.SameAs(panel
, wxBottom
, 4);
285 revertButton
->SetConstraints(c
);
287 c
= new wxLayoutConstraints
;
288 c
->right
.SameAs(revertButton
, wxLeft
, 4);
289 c
->bottom
.SameAs(panel
, wxBottom
, 4);
292 updateButton
->SetConstraints(c
);
294 c
= new wxLayoutConstraints
;
295 c
->right
.SameAs(updateButton
, wxLeft
, 4);
296 c
->bottom
.SameAs(panel
, wxBottom
, 4);
299 cancelButton
->SetConstraints(c
);
301 c
= new wxLayoutConstraints
;
302 c
->right
.SameAs(cancelButton
, wxLeft
, 4);
303 c
->bottom
.SameAs(panel
, wxBottom
, 4);
306 okButton
->SetConstraints(c
);
308 // The name of this text item matches the "fred" property
309 wxTextCtrl
*text
= new wxTextCtrl(panel
, wxID_ANY
, _T("Fred"), wxDefaultPosition
,
310 wxSize( 200, wxDefaultSize
.y
), 0, wxDefaultValidator
, _T("fred"));
312 c
= new wxLayoutConstraints
;
313 c
->left
.SameAs(panel
, wxLeft
, 4);
314 c
->top
.SameAs(panel
, wxTop
, 4);
317 text
->SetConstraints(c
);
319 wxCheckBox
*checkBox
= new wxCheckBox(panel
, wxID_ANY
, _T("Yes or no"), wxDefaultPosition
,
320 wxDefaultSize
, 0, wxDefaultValidator
, _T("tough choice"));
322 c
= new wxLayoutConstraints
;
323 c
->left
.SameAs(text
, wxRight
, 20);
324 c
->top
.SameAs(panel
, wxTop
, 4);
327 checkBox
->SetConstraints(c
);
329 wxSlider
*slider
= new wxSlider(panel
, wxID_ANY
, -50, 50, 150, wxDefaultPosition
,
330 wxSize(200,10), 0, wxDefaultValidator
, _T("ian"));
332 c
= new wxLayoutConstraints
;
333 c
->left
.SameAs(panel
, wxLeft
, 4);
334 c
->top
.SameAs(text
, wxBottom
, 10);
337 slider
->SetConstraints(c
);
339 wxListBox
*listBox
= new wxListBox(panel
, wxID_ANY
, wxDefaultPosition
,
340 wxSize(200, 100), 0, NULL
, 0, wxDefaultValidator
, _T("constrained"));
342 c
= new wxLayoutConstraints
;
343 c
->left
.SameAs(panel
, wxLeft
, 4);
344 c
->top
.SameAs(slider
, wxBottom
, 10);
347 listBox
->SetConstraints(c
);
349 view
->AddRegistry(&myFormValidatorRegistry
);
351 panel
->SetAutoLayout(true);
353 view
->ShowView(sheet
, panel
);
354 view
->AssociateNames();
355 view
->TransferToDialog();
358 propDialog
->Layout();
364 m_childWindow
->Centre(wxBOTH
);
365 m_childWindow
->Show(true);
368 BEGIN_EVENT_TABLE(PropListFrame
, wxPropertyListFrame
)
369 EVT_CLOSE(PropListFrame::OnCloseWindow
)
372 void PropListFrame::OnCloseWindow(wxCloseEvent
& event
)
374 wxGetApp().m_childWindow
= NULL
;
376 wxPropertyListFrame::OnCloseWindow(event
);
379 BEGIN_EVENT_TABLE(PropListDialog
, wxPropertyListDialog
)
380 EVT_CLOSE(PropListDialog::OnCloseWindow
)
383 void PropListDialog::OnCloseWindow(wxCloseEvent
& event
)
385 wxGetApp().m_childWindow
= NULL
;
387 wxPropertyListDialog::OnCloseWindow(event
);
390 BEGIN_EVENT_TABLE(PropFormFrame
, wxPropertyFormFrame
)
391 EVT_CLOSE(PropFormFrame::OnCloseWindow
)
392 EVT_SIZE(PropFormFrame::OnSize
)
395 void PropFormFrame::OnCloseWindow(wxCloseEvent
& event
)
397 wxGetApp().m_childWindow
= NULL
;
399 wxPropertyFormFrame::OnCloseWindow(event
);
402 void PropFormFrame::OnSize(wxSizeEvent
& event
)
404 wxPropertyFormFrame::OnSize(event
);
405 GetPropertyPanel()->Layout();
408 BEGIN_EVENT_TABLE(PropFormDialog
, wxPropertyFormDialog
)
409 EVT_CLOSE(PropFormDialog::OnCloseWindow
)
412 void PropFormDialog::OnCloseWindow(wxCloseEvent
& event
)
414 wxGetApp().m_childWindow
= NULL
;
416 wxPropertyFormDialog::OnCloseWindow(event
);