1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     Property sheet test implementation 
   4 // Author:      Julian Smart 
   8 // Copyright:   (c) Julian Smart 
   9 // Licence:     wxWindows license 
  10 ///////////////////////////////////////////////////////////////////////////// 
  13 #pragma implementation "test.h" 
  16 // For compilers that support precompilation, includes "wx/wx.h". 
  17 #include "wx/wxprec.h" 
  29 // A macro needed for some compilers (AIX) that need 'main' to be defined 
  30 // in the application itself. 
  35 wxPropertyValidatorRegistry myListValidatorRegistry
; 
  36 wxPropertyValidatorRegistry myFormValidatorRegistry
; 
  44 bool MyApp::OnInit(void) 
  48   // Create the main frame window 
  49   m_mainFrame 
= new MyFrame(NULL
, "wxPropertySheet Demo", wxPoint(0, 0), wxSize(300, 400), wxDEFAULT_FRAME
); 
  52   wxMenu 
*file_menu 
= new wxMenu
; 
  53   file_menu
->Append(PROPERTY_TEST_DIALOG_LIST
, "Test property list &dialog..."); 
  54   file_menu
->Append(PROPERTY_TEST_FRAME_LIST
, "Test property list &frame..."); 
  55   file_menu
->AppendSeparator(); 
  56   file_menu
->Append(PROPERTY_TEST_DIALOG_FORM
, "Test property form d&ialog..."); 
  57   file_menu
->Append(PROPERTY_TEST_FRAME_FORM
, "Test property form f&rame..."); 
  58   file_menu
->AppendSeparator(); 
  59   file_menu
->Append(PROPERTY_QUIT
, "E&xit"); 
  61   wxMenu 
*help_menu 
= new wxMenu
; 
  62   help_menu
->Append(PROPERTY_ABOUT
, "&About"); 
  64   wxMenuBar 
*menu_bar 
= new wxMenuBar
; 
  66   menu_bar
->Append(file_menu
, "&File"); 
  67   menu_bar
->Append(help_menu
, "&Help"); 
  69   // Associate the menu bar with the frame 
  70   m_mainFrame
->SetMenuBar(menu_bar
); 
  72   m_mainFrame
->Centre(wxBOTH
); 
  73   m_mainFrame
->Show(TRUE
); 
  75   SetTopWindow(m_mainFrame
); 
  80 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
) 
  81     EVT_CLOSE(MyFrame::OnCloseWindow
) 
  82     EVT_MENU(PROPERTY_QUIT
, MyFrame::OnQuit
) 
  83     EVT_MENU(PROPERTY_ABOUT
, MyFrame::OnAbout
) 
  84     EVT_MENU(PROPERTY_TEST_DIALOG_LIST
, MyFrame::OnDialogList
) 
  85     EVT_MENU(PROPERTY_TEST_FRAME_LIST
, MyFrame::OnFrameList
) 
  86     EVT_MENU(PROPERTY_TEST_DIALOG_FORM
, MyFrame::OnDialogForm
) 
  87     EVT_MENU(PROPERTY_TEST_FRAME_FORM
, MyFrame::OnFrameForm
) 
  90 // Define my frame constructor 
  91 MyFrame::MyFrame(wxFrame 
*frame
, const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
, long type
): 
  92   wxFrame(frame
, -1, title
, pos
, size
, type
) 
  96 // Define the behaviour for the frame closing 
  97 // - must delete all frames except for the main one. 
  98 void MyFrame::OnCloseWindow(wxCloseEvent
& event
) 
 100     if (wxGetApp().m_childWindow
) 
 102         wxGetApp().m_childWindow
->Close(TRUE
); 
 108 void MyFrame::OnQuit(wxCommandEvent
& event
) 
 113 void MyFrame::OnDialogList(wxCommandEvent
& event
) 
 115     wxGetApp().PropertyListTest(TRUE
); 
 118 void MyFrame::OnFrameList(wxCommandEvent
& event
) 
 120     wxGetApp().PropertyListTest(FALSE
); 
 123 void MyFrame::OnDialogForm(wxCommandEvent
& event
) 
 125     wxGetApp().PropertyFormTest(TRUE
); 
 128 void MyFrame::OnFrameForm(wxCommandEvent
& event
) 
 130     wxGetApp().PropertyFormTest(FALSE
); 
 133 void MyFrame::OnAbout(wxCommandEvent
& event
) 
 135     (void)wxMessageBox("Property Classes Demo\nAuthor: Julian Smart", "About Property Classes Test"); 
 138 void MyApp::RegisterValidators(void) 
 140   myListValidatorRegistry
.RegisterValidator((wxString
)"real", new wxRealListValidator
); 
 141   myListValidatorRegistry
.RegisterValidator((wxString
)"string", new wxStringListValidator
); 
 142   myListValidatorRegistry
.RegisterValidator((wxString
)"integer", new wxIntegerListValidator
); 
 143   myListValidatorRegistry
.RegisterValidator((wxString
)"bool", new wxBoolListValidator
); 
 144   myListValidatorRegistry
.RegisterValidator((wxString
)"stringlist", new wxListOfStringsListValidator
); 
 146   myFormValidatorRegistry
.RegisterValidator((wxString
)"real", new wxRealFormValidator
); 
 147   myFormValidatorRegistry
.RegisterValidator((wxString
)"string", new wxStringFormValidator
); 
 148   myFormValidatorRegistry
.RegisterValidator((wxString
)"integer", new wxIntegerFormValidator
); 
 149   myFormValidatorRegistry
.RegisterValidator((wxString
)"bool", new wxBoolFormValidator
); 
 152 void MyApp::PropertyListTest(bool useDialog
) 
 157   wxPropertySheet 
*sheet 
= new wxPropertySheet
; 
 159   sheet
->AddProperty(new wxProperty("fred", 1.0, "real")); 
 160   sheet
->AddProperty(new wxProperty("tough choice", (bool)TRUE
, "bool")); 
 161   sheet
->AddProperty(new wxProperty("ian", (long)45, "integer", new wxIntegerListValidator(-50, 50))); 
 162   sheet
->AddProperty(new wxProperty("bill", 25.0, "real", new wxRealListValidator(0.0, 100.0))); 
 163   sheet
->AddProperty(new wxProperty("julian", "one", "string")); 
 164   sheet
->AddProperty(new wxProperty("bitmap", "none", "string", new wxFilenameListValidator("Select a bitmap file", "*.bmp"))); 
 165   wxStringList 
*strings 
= new wxStringList("one", "two", "three", NULL
); 
 166   sheet
->AddProperty(new wxProperty("constrained", "one", "string", new wxStringListValidator(strings
))); 
 168   wxStringList 
*strings2 
= new wxStringList("earth", "fire", "wind", "water", NULL
); 
 169   sheet
->AddProperty(new wxProperty("string list", strings2
, "stringlist")); 
 171   wxPropertyListView 
*view 
= 
 172     new wxPropertyListView(NULL
, 
 173      wxPROP_BUTTON_CHECK_CROSS
|wxPROP_DYNAMIC_VALUE_FIELD
|wxPROP_PULLDOWN
|wxPROP_SHOWVALUES
); 
 175   wxDialog 
*propDialog 
= NULL
; 
 176   wxPropertyListFrame 
*propFrame 
= NULL
; 
 179     propDialog 
= new PropListDialog(view
, NULL
, "Property Sheet Test", 
 180                 wxPoint(-1, -1), wxSize(400, 500), wxDEFAULT_DIALOG_STYLE
|wxDIALOG_MODELESS
); 
 181     m_childWindow 
= propDialog
; 
 185     propFrame 
= new PropListFrame(view
, NULL
, "Property Sheet Test", wxPoint(-1, -1), wxSize(400, 500)); 
 186     m_childWindow 
= propFrame
; 
 189   view
->AddRegistry(&myListValidatorRegistry
); 
 193     view
->ShowView(sheet
, propDialog
); 
 194     propDialog
->Centre(wxBOTH
); 
 195     propDialog
->Show(TRUE
); 
 199     propFrame
->Initialize(); 
 200     view
->ShowView(sheet
, propFrame
->GetPropertyPanel()); 
 202     propFrame
->Centre(wxBOTH
); 
 203     propFrame
->Show(TRUE
); 
 207 void MyApp::PropertyFormTest(bool useDialog
) 
 213   wxPropertySheet 
*sheet 
= new wxPropertySheet
; 
 215   sheet
->AddProperty(new wxProperty("fred", 25.0, "real", new wxRealFormValidator(0.0, 100.0))); 
 216   sheet
->AddProperty(new wxProperty("tough choice", (bool)TRUE
, "bool")); 
 217   sheet
->AddProperty(new wxProperty("ian", (long)45, "integer", new wxIntegerFormValidator(-50, 50))); 
 218   sheet
->AddProperty(new wxProperty("julian", "one", "string")); 
 219   wxStringList 
*strings 
= new wxStringList("one", "two", "three", NULL
); 
 220   sheet
->AddProperty(new wxProperty("constrained", "one", "string", new wxStringFormValidator(strings
))); 
 222   wxPropertyFormView 
*view 
= new wxPropertyFormView(NULL
); 
 224   wxDialogBox 
*propDialog 
= NULL
; 
 225   wxPropertyFormFrame 
*propFrame 
= NULL
; 
 228     propDialog 
= new PropFormDialog(view
, NULL
, "Property Form Test", wxPoint(-1, -1), wxSize(380, 250), 
 229                 wxDEFAULT_DIALOG_STYLE
|wxDIALOG_MODAL
); 
 230     m_childWindow 
= propDialog
; 
 234     propFrame 
= new PropFormFrame(view
, NULL
, "Property Form Test", wxPoint(-1, -1), wxSize(280, 250)); 
 235     propFrame
->Initialize(); 
 236     m_childWindow 
= propFrame
; 
 239   wxPanel 
*panel 
= propDialog 
? propDialog 
: propFrame
->GetPropertyPanel(); 
 240   panel
->SetLabelPosition(wxVERTICAL
); 
 242   // Add items to the panel 
 244   (void) new wxButton(panel
, -1, "OK", -1, -1, -1, -1, 0, "ok"); 
 245   (void) new wxButton(panel
, -1, "Cancel", -1, -1, 80, -1, 0, "cancel"); 
 246   (void) new wxButton(panel
, -1, "Update", -1, -1, 80, -1, 0, "update"); 
 247   (void) new wxButton(panel
, -1, "Revert", -1, -1, -1, -1, 0, "revert"); 
 250   // The name of this text item matches the "fred" property 
 251   (void) new wxText(panel
, -1, "Fred", "", -1, -1, 90, -1, 0, "fred"); 
 252   (void) new wxCheckBox(panel
, -1, "Yes or no", -1, -1, -1, -1, 0, "tough choice"); 
 253   (void) new wxSlider(panel
, -1, "Scale", 0, -50, 50, 150, -1, -1, wxHORIZONTAL
, "ian"); 
 255   (void) new wxListBox(panel
, -1, "Constrained", wxSINGLE
, -1, -1, 100, 90, 0, NULL
, 0, "constrained"); 
 257   view
->AddRegistry(&myFormValidatorRegistry
); 
 261     view
->ShowView(sheet
, propDialog
); 
 262     view
->AssociateNames(); 
 263     view
->TransferToDialog(); 
 264     propDialog
->Centre(wxBOTH
); 
 265     propDialog
->Show(TRUE
); 
 269     view
->ShowView(sheet
, propFrame
->GetPropertyPanel()); 
 270     view
->AssociateNames(); 
 271     view
->TransferToDialog(); 
 272     propFrame
->Centre(wxBOTH
); 
 273     propFrame
->Show(TRUE
); 
 278 BEGIN_EVENT_TABLE(PropListFrame
, wxPropertyListFrame
) 
 279     EVT_CLOSE(PropListFrame::OnCloseWindow
) 
 282 void PropListFrame::OnCloseWindow(wxCloseEvent
& event
) 
 284     wxGetApp().m_childWindow 
= NULL
; 
 286     wxPropertyListFrame::OnCloseWindow(event
); 
 289 BEGIN_EVENT_TABLE(PropListDialog
, wxPropertyListDialog
) 
 290     EVT_CLOSE(PropListDialog::OnCloseWindow
) 
 293 void PropListDialog::OnCloseWindow(wxCloseEvent
& event
) 
 295     wxGetApp().m_childWindow 
= NULL
; 
 297     wxPropertyListDialog::OnCloseWindow(event
); 
 300 BEGIN_EVENT_TABLE(PropFormFrame
, wxPropertyFormFrame
) 
 301     EVT_CLOSE(PropFormFrame::OnCloseWindow
) 
 304 void PropFormFrame::OnCloseWindow(wxCloseEvent
& event
) 
 306     wxGetApp().m_childWindow 
= NULL
; 
 308     wxPropertyFormFrame::OnCloseWindow(event
); 
 311 BEGIN_EVENT_TABLE(PropFormDialog
, wxPropertyFormDialog
) 
 312     EVT_CLOSE(PropFormDialog::OnCloseWindow
) 
 315 void PropFormDialog::OnCloseWindow(wxCloseEvent
& event
) 
 317     wxGetApp().m_childWindow 
= NULL
; 
 319     wxPropertyFormDialog::OnCloseWindow(event
);