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"
29 #error Please set wxUSE_PROPSHEET to 1 in include/wx/msw/setup.h and recompile.
36 wxPropertyValidatorRegistry myListValidatorRegistry
;
37 wxPropertyValidatorRegistry myFormValidatorRegistry
;
45 bool MyApp::OnInit(void)
49 // Create the main frame window
50 m_mainFrame
= new MyFrame(NULL
, _T("wxPropertySheet Demo"), wxPoint(0, 0), wxSize(300, 400), wxDEFAULT_FRAME_STYLE
);
53 wxMenu
*file_menu
= new wxMenu
;
54 file_menu
->Append(PROPERTY_TEST_DIALOG_LIST
, _T("Test property list &dialog..."));
55 file_menu
->Append(PROPERTY_TEST_FRAME_LIST
, _T("Test property list &frame..."));
56 file_menu
->AppendSeparator();
57 file_menu
->Append(PROPERTY_TEST_DIALOG_FORM
, _T("Test property form d&ialog..."));
58 file_menu
->Append(PROPERTY_TEST_FRAME_FORM
, _T("Test property form f&rame..."));
59 file_menu
->AppendSeparator();
60 file_menu
->Append(PROPERTY_QUIT
, _T("E&xit"));
62 wxMenu
*help_menu
= new wxMenu
;
63 help_menu
->Append(PROPERTY_ABOUT
, _T("&About"));
65 wxMenuBar
*menu_bar
= new wxMenuBar
;
67 menu_bar
->Append(file_menu
, _T("&File"));
68 menu_bar
->Append(help_menu
, _T("&Help"));
70 // Associate the menu bar with the frame
71 m_mainFrame
->SetMenuBar(menu_bar
);
73 m_mainFrame
->Centre(wxBOTH
);
74 m_mainFrame
->Show(TRUE
);
76 SetTopWindow(m_mainFrame
);
81 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
82 EVT_CLOSE(MyFrame::OnCloseWindow
)
83 EVT_MENU(PROPERTY_QUIT
, MyFrame::OnQuit
)
84 EVT_MENU(PROPERTY_ABOUT
, MyFrame::OnAbout
)
85 EVT_MENU(PROPERTY_TEST_DIALOG_LIST
, MyFrame::OnDialogList
)
86 EVT_MENU(PROPERTY_TEST_FRAME_LIST
, MyFrame::OnFrameList
)
87 EVT_MENU(PROPERTY_TEST_DIALOG_FORM
, MyFrame::OnDialogForm
)
88 EVT_MENU(PROPERTY_TEST_FRAME_FORM
, MyFrame::OnFrameForm
)
91 // Define my frame constructor
92 MyFrame::MyFrame(wxFrame
*frame
, const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
, long type
):
93 wxFrame(frame
, -1, title
, pos
, size
, type
)
97 // Define the behaviour for the frame closing
98 // - must delete all frames except for the main one.
99 void MyFrame::OnCloseWindow(wxCloseEvent
& event
)
101 if (wxGetApp().m_childWindow
)
103 wxGetApp().m_childWindow
->Close(TRUE
);
109 void MyFrame::OnQuit(wxCommandEvent
& event
)
114 void MyFrame::OnDialogList(wxCommandEvent
& event
)
116 wxGetApp().PropertyListTest(TRUE
);
119 void MyFrame::OnFrameList(wxCommandEvent
& event
)
121 wxGetApp().PropertyListTest(FALSE
);
124 void MyFrame::OnDialogForm(wxCommandEvent
& event
)
126 wxGetApp().PropertyFormTest(TRUE
);
129 void MyFrame::OnFrameForm(wxCommandEvent
& event
)
131 wxGetApp().PropertyFormTest(FALSE
);
134 void MyFrame::OnAbout(wxCommandEvent
& event
)
136 (void)wxMessageBox(_T("Property Classes Demo\nAuthor: Julian Smart"), _T("About Property Classes Test"));
139 void MyApp::RegisterValidators(void)
141 myListValidatorRegistry
.RegisterValidator((wxString
)_T("real"), new wxRealListValidator
);
142 myListValidatorRegistry
.RegisterValidator((wxString
)_T("string"), new wxStringListValidator
);
143 myListValidatorRegistry
.RegisterValidator((wxString
)_T("integer"), new wxIntegerListValidator
);
144 myListValidatorRegistry
.RegisterValidator((wxString
)_T("bool"), new wxBoolListValidator
);
145 myListValidatorRegistry
.RegisterValidator((wxString
)_T("stringlist"), new wxListOfStringsListValidator
);
147 myFormValidatorRegistry
.RegisterValidator((wxString
)_T("real"), new wxRealFormValidator
);
148 myFormValidatorRegistry
.RegisterValidator((wxString
)_T("string"), new wxStringFormValidator
);
149 myFormValidatorRegistry
.RegisterValidator((wxString
)_T("integer"), new wxIntegerFormValidator
);
150 myFormValidatorRegistry
.RegisterValidator((wxString
)_T("bool"), new wxBoolFormValidator
);
153 void MyApp::PropertyListTest(bool useDialog
)
158 wxPropertySheet
*sheet
= new wxPropertySheet
;
160 sheet
->AddProperty(new wxProperty(_T("fred"), 1.0, _T("real")));
161 sheet
->AddProperty(new wxProperty(_T("tough choice"), (bool)TRUE
, _T("bool")));
162 sheet
->AddProperty(new wxProperty(_T("ian"), (long)45, _T("integer"), new wxIntegerListValidator(-50, 50)));
163 sheet
->AddProperty(new wxProperty(_T("bill"), 25.0, _T("real"), new wxRealListValidator(0.0, 100.0)));
164 sheet
->AddProperty(new wxProperty(_T("julian"), _T("one"), _T("string")));
165 sheet
->AddProperty(new wxProperty(_T("bitmap"), _T("none"), _T("string"), new wxFilenameListValidator(_T("Select a bitmap file"), _T("*.bmp"))));
166 wxStringList
*strings
= new wxStringList(wxT("one"), wxT("two"), wxT("three"), NULL
);
167 sheet
->AddProperty(new wxProperty(_T("constrained"), _T("one"), _T("string"), new wxStringListValidator(strings
)));
169 wxStringList
*strings2
= new wxStringList(wxT("earth"), wxT("fire"), wxT("wind"), wxT("water"), NULL
);
170 sheet
->AddProperty(new wxProperty(_T("string list"), strings2
, _T("stringlist")));
172 wxPropertyListView
*view
= new wxPropertyListView
175 wxPROP_BUTTON_OK
| wxPROP_BUTTON_CANCEL
| wxPROP_BUTTON_CHECK_CROSS
176 |wxPROP_DYNAMIC_VALUE_FIELD
|wxPROP_PULLDOWN
|wxPROP_SHOWVALUES
179 wxDialog
*propDialog
= NULL
;
180 wxPropertyListFrame
*propFrame
= NULL
;
183 propDialog
= new PropListDialog(view
, NULL
, _T("Property Sheet Test"),
184 wxPoint(-1, -1), wxSize(400, 500), wxDEFAULT_DIALOG_STYLE
|wxDIALOG_MODELESS
);
185 m_childWindow
= propDialog
;
189 propFrame
= new PropListFrame(view
, NULL
, _T("Property Sheet Test"), wxPoint(-1, -1), wxSize(400, 500));
190 m_childWindow
= propFrame
;
193 view
->AddRegistry(&myListValidatorRegistry
);
197 view
->ShowView(sheet
, (wxPanel
*)propDialog
);
198 propDialog
->Centre(wxBOTH
);
199 propDialog
->Show(TRUE
);
203 propFrame
->Initialize();
204 view
->ShowView(sheet
, propFrame
->GetPropertyPanel());
206 propFrame
->Centre(wxBOTH
);
207 propFrame
->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"), (bool)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 wxPoint(-1, -1), wxSize(380, 250), wxDEFAULT_DIALOG_STYLE
|wxDIALOG_MODAL
);
234 m_childWindow
= propDialog
;
238 propFrame
= new PropFormFrame(view
, NULL
, _T("Property Form Test"),
239 wxPoint(-1, -1), 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"), wxPoint(-1, -1),
272 wxSize(80, 26), 0, wxDefaultValidator
, _T("ok"));
273 wxButton
*cancelButton
= new wxButton(panel
, wxID_CANCEL
, _T("Cancel"), wxPoint(-1, -1),
274 wxSize(80, 26), 0, wxDefaultValidator
, _T("cancel"));
275 wxButton
*updateButton
= new wxButton(panel
, wxID_PROP_UPDATE
, _T("Update"), wxPoint(-1, -1),
276 wxSize(80, 26), 0, wxDefaultValidator
, _T("update"));
277 wxButton
*revertButton
= new wxButton(panel
, wxID_PROP_REVERT
, _T("Revert"), wxPoint(-1, -1),
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
, -1, _T("Fred"), wxPoint(-1, -1), wxSize(
310 200, -1), 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
, -1, _T("Yes or no"), wxPoint(-1, -1),
320 wxSize(-1, -1), 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
, -1, -50, 50, 150, wxPoint(-1, -1),
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
, -1, wxPoint(-1, -1),
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();
359 propDialog
->Centre(wxBOTH
);
360 propDialog
->Show(TRUE
);
365 propFrame
->Centre(wxBOTH
);
366 propFrame
->Show(TRUE
);
370 BEGIN_EVENT_TABLE(PropListFrame
, wxPropertyListFrame
)
371 EVT_CLOSE(PropListFrame::OnCloseWindow
)
374 void PropListFrame::OnCloseWindow(wxCloseEvent
& event
)
376 wxGetApp().m_childWindow
= NULL
;
378 wxPropertyListFrame::OnCloseWindow(event
);
381 BEGIN_EVENT_TABLE(PropListDialog
, wxPropertyListDialog
)
382 EVT_CLOSE(PropListDialog::OnCloseWindow
)
385 void PropListDialog::OnCloseWindow(wxCloseEvent
& event
)
387 wxGetApp().m_childWindow
= NULL
;
389 wxPropertyListDialog::OnCloseWindow(event
);
392 BEGIN_EVENT_TABLE(PropFormFrame
, wxPropertyFormFrame
)
393 EVT_CLOSE(PropFormFrame::OnCloseWindow
)
394 EVT_SIZE(PropFormFrame::OnSize
)
397 void PropFormFrame::OnCloseWindow(wxCloseEvent
& event
)
399 wxGetApp().m_childWindow
= NULL
;
401 wxPropertyFormFrame::OnCloseWindow(event
);
404 void PropFormFrame::OnSize(wxSizeEvent
& event
)
406 wxPropertyFormFrame::OnSize(event
);
407 GetPropertyPanel()->Layout();
410 BEGIN_EVENT_TABLE(PropFormDialog
, wxPropertyFormDialog
)
411 EVT_CLOSE(PropFormDialog::OnCloseWindow
)
414 void PropFormDialog::OnCloseWindow(wxCloseEvent
& event
)
416 wxGetApp().m_childWindow
= NULL
;
418 wxPropertyFormDialog::OnCloseWindow(event
);