X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1802a91dec8bf45fbcfc89332c97dd63461aa4c6..8aa40b04f87deb33b41efab7a6a28fc9fc053d8d:/samples/propgrid/tests.cpp diff --git a/samples/propgrid/tests.cpp b/samples/propgrid/tests.cpp index fcbb3e6a04..7a8cc656f3 100644 --- a/samples/propgrid/tests.cpp +++ b/samples/propgrid/tests.cpp @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: 2007-05-16 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) Jaakko Salli // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// @@ -31,133 +31,16 @@ // wxTestCustomFlagsProperty // ----------------------------------------------------------------------- -// -// Constant definitions required by wxFlagsProperty examples. -// - -static const wxChar* _fs_framestyle_labels[] = { - wxT("wxCAPTION"), - wxT("wxMINIMIZE"), - wxT("wxMAXIMIZE"), - wxT("wxCLOSE_BOX"), - wxT("wxSTAY_ON_TOP"), - wxT("wxSYSTEM_MENU"), - wxT("wxRESIZE_BORDER"), - wxT("wxFRAME_TOOL_WINDOW"), - wxT("wxFRAME_NO_TASKBAR"), - wxT("wxFRAME_FLOAT_ON_PARENT"), - wxT("wxFRAME_SHAPED"), - (const wxChar*) NULL -}; - -static const long _fs_framestyle_values[] = { - wxCAPTION, - wxMINIMIZE, - wxMAXIMIZE, - wxCLOSE_BOX, - wxSTAY_ON_TOP, - wxSYSTEM_MENU, - wxRESIZE_BORDER, - wxFRAME_TOOL_WINDOW, - wxFRAME_NO_TASKBAR, - wxFRAME_FLOAT_ON_PARENT, - wxFRAME_SHAPED -}; - -// Colour labels. Last (before NULL, if any) must be Custom. -static const wxChar* mycolprop_labels[] = { - wxT("Black"), - wxT("Blue"), - wxT("Brown"), - wxT("Custom"), - (const wxChar*) NULL -}; - -// Relevant colour values as unsigned longs. -static unsigned long mycolprop_colours[] = { - wxPG_COLOUR(0,0,0), - wxPG_COLOUR(0,0,255), - wxPG_COLOUR(166,124,81), - wxPG_COLOUR(0,0,0) -}; - -// Implement property class. Third argument is optional values array, -// but in this example we are only interested in creating a shortcut -// for user to access the colour values. Last arg is itemcount, but -// it will be deprecated in the future. -WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR(wxMyColourProperty) -WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR(wxMyColourProperty, - mycolprop_labels, - (long*)NULL, - mycolprop_colours) - - -WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY(wxMyColour2Property) -WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY(wxMyColour2Property, - mycolprop_labels, - (long*)NULL, - mycolprop_colours) - - - -// Just testing the macros -WX_PG_DECLARE_STRING_PROPERTY(wxTestStringProperty) -WX_PG_IMPLEMENT_STRING_PROPERTY(wxTestStringProperty,wxPG_NO_ESCAPE) -bool wxTestStringProperty::OnButtonClick( wxPropertyGrid*, - wxString& ) -{ - ::wxMessageBox(wxT("Button Clicked")); - return true; -} - -WX_PG_DECLARE_STRING_PROPERTY(wxTextStringPropertyWithValidator) -WX_PG_IMPLEMENT_STRING_PROPERTY_WITH_VALIDATOR(wxTextStringPropertyWithValidator, - wxPG_NO_ESCAPE) - -bool wxTextStringPropertyWithValidator::OnButtonClick( wxPropertyGrid* WXUNUSED(propgrid), - wxString& WXUNUSED(value) ) -{ - ::wxMessageBox(wxT("Button Clicked")); - return true; -} - -wxValidator* wxTextStringPropertyWithValidator::DoGetValidator() const -{ -#if wxUSE_VALIDATORS - WX_PG_DOGETVALIDATOR_ENTRY() - wxTextValidator* validator = new - wxTextValidator(wxFILTER_INCLUDE_CHAR_LIST); - wxArrayString oValid; - oValid.Add(wxT("0")); - oValid.Add(wxT("1")); - oValid.Add(wxT("2")); - oValid.Add(wxT("3")); - oValid.Add(wxT("4")); - oValid.Add(wxT("5")); - oValid.Add(wxT("6")); - oValid.Add(wxT("7")); - oValid.Add(wxT("8")); - oValid.Add(wxT("9")); - oValid.Add(wxT("$")); - validator->SetIncludes(oValid); - WX_PG_DOGETVALIDATOR_EXIT(validator) -#else - return NULL; -#endif -} - -// ----------------------------------------------------------------------- - // // Test customizing wxColourProperty via subclassing // // * Includes custom colour entry. // * Includes extra custom entry. // -class MyColourProperty3 : public wxColourProperty +class MyColourProperty : public wxColourProperty { public: - MyColourProperty3( const wxString& label = wxPG_LABEL, + MyColourProperty( const wxString& label = wxPG_LABEL, const wxString& name = wxPG_LABEL, const wxColour& value = *wxWHITE ) : wxColourProperty(label, name, value) @@ -177,7 +60,7 @@ public: SetValue(variant); } - virtual ~MyColourProperty3() + virtual ~MyColourProperty() { } @@ -222,29 +105,13 @@ public: void FormMain::AddTestProperties( wxPropertyGridPage* pg ) { - pg->Append( new wxMyColourProperty(wxT("CustomColourProperty1")) ); + pg->Append( new MyColourProperty(wxT("CustomColourProperty"), wxPG_LABEL, *wxGREEN) ); + pg->GetProperty(wxT("CustomColourProperty"))->SetFlag(wxPG_PROP_AUTO_UNSPECIFIED); + pg->SetPropertyEditor( wxT("CustomColourProperty"), wxPGEditor_ComboBox ); - pg->SetPropertyHelpString(wxT("CustomColourProperty1"), - wxT("This is a wxMyColourProperty from the sample app. ") - wxT("It is built with WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR macro ") - wxT("and has wxColour as its data type")); - - pg->Append( new wxMyColour2Property(wxT("CustomColourProperty2")) ); - - pg->SetPropertyHelpString(wxT("CustomColourProperty2"), - wxT("This is a wxMyColour2Property from the sample app. ") - wxT("It is built with WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY macro ") - wxT("and has wxColourPropertyValue as its data type")); - - pg->Append( new MyColourProperty3(wxT("CustomColourProperty3"), wxPG_LABEL, *wxGREEN) ); - pg->GetProperty(wxT("CustomColourProperty3"))->SetFlag(wxPG_PROP_AUTO_UNSPECIFIED); - pg->SetPropertyEditor( wxT("CustomColourProperty3"), wxPG_EDITOR(ComboBox) ); - - pg->SetPropertyHelpString(wxT("CustomColourProperty3"), - wxT("This is a MyColourProperty3 from the sample app. ") + pg->SetPropertyHelpString(wxT("CustomColourProperty"), + wxT("This is a MyColourProperty from the sample app. ") wxT("It is built by subclassing wxColourProperty.")); - - pg->Append( new wxTextStringPropertyWithValidator(wxT("TestProp1"), wxPG_LABEL) ); } // ----------------------------------------------------------------------- @@ -439,26 +306,13 @@ wxArrayPGProperty GetPropertiesInRandomOrder( wxPropertyGridInterface* props, in return arr; } -static void PropertiesToNames( wxPropertyGridInterface* WXUNUSED(iface), - wxArrayString* names, - const wxArrayPGProperty& properties ) +// Callback for testing property sorting +int MyPropertySortFunction(wxPropertyGrid* WXUNUSED(propGrid), + wxPGProperty* p1, + wxPGProperty* p2) { - unsigned int i; - for ( i=0; iAdd( properties[i]->GetName() ); -} - -static void NamesToProperties( wxPropertyGridInterface* iface, - wxArrayPGProperty* properties, - const wxArrayString& names ) -{ - unsigned int i; - for ( i=0; iGetPropertyByName(names[i]); - if ( p ) - properties->push_back(p); - } + // Reverse alphabetical order + return p2->GetLabel().CmpNoCase( p1->GetBaseName() ); } bool FormMain::RunTests( bool fullTest, bool interactive ) @@ -594,50 +448,6 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) } } - { - RT_START_TEST(GetPropertiesWithFlag) - - // - // Get list of expanded properties - wxArrayPGProperty array = pgman->GetExpandedProperties(); - - // Make sure list only has items with children - for ( i=0; iIsKindOf(CLASSINFO(wxPGProperty)) ) - RT_FAILURE_MSG(wxString::Format(wxT("'%s' was returned by GetExpandedProperties(), but was not a parent"),p->GetName().c_str()).c_str()); - } - - wxArrayString names; - PropertiesToNames( pgman, &names, array ); - - // - // ... and then collapse them - wxArrayPGProperty array2; - NamesToProperties( pgman, &array2, names ); - - for ( i=0; iSetExpanded(false); - } - - // Make sure everything is collapsed - wxPGVIterator it; - - for ( it = pgman->GetVIterator(wxPG_ITERATE_ALL); - !it.AtEnd(); - it.Next() ) - { - wxPGProperty* p = it.GetProperty(); - if ( p->IsExpanded() ) - RT_FAILURE_MSG(wxString::Format(wxT("'%s.%s' was expanded"),p->GetParent()->GetName().c_str(),p->GetName().c_str()).c_str()); - } - - pgman->Refresh(); - } - { // // Delete everything in reverse order @@ -667,8 +477,8 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) { // - // Clear property value - RT_START_TEST(ClearPropertyValue) + // Test property default values + RT_START_TEST(Default_Values) wxPGVIterator it; @@ -676,8 +486,8 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) !it.AtEnd(); it.Next() ) { - RT_MSG(wxString::Format(wxT("Clearing value of '%s'"),it.GetProperty()->GetLabel().c_str())); - pgman->ClearPropertyValue(it.GetProperty()); + wxPGProperty* p = it.GetProperty(); + pgman->SetPropertyValue(p, p->GetDefaultValue()); } // Recreate grid @@ -759,8 +569,8 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) wxColour emptyCol; pgman->SetPropertyValue(wxT("ColourProperty"),emptyCol); pgman->SetPropertyValue(wxT("ColourProperty"),(wxObject*)wxBLACK); - pgman->SetPropertyValue(wxT("Size"),wxSize(150,150)); - pgman->SetPropertyValue(wxT("Position"),wxPoint(150,150)); + pgman->SetPropertyValue(wxT("Size"),WXVARIANT(wxSize(150,150))); + pgman->SetPropertyValue(wxT("Position"),WXVARIANT(wxPoint(150,150))); pgman->SetPropertyValue(wxT("MultiChoiceProperty"),test_arrint_1); #if wxUSE_DATETIME pgman->SetPropertyValue(wxT("DateProperty"),dt1); @@ -785,9 +595,9 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) col << pgman->GetPropertyValue(wxT("ColourProperty")); if ( col != *wxBLACK ) RT_FAILURE(); - if ( pg->GetPropertyValueAsSize(wxT("Size")) != wxSize(150,150) ) + if ( wxSizeRefFromVariant(pg->GetPropertyValue(wxT("Size"))) != wxSize(150,150) ) RT_FAILURE(); - if ( pg->GetPropertyValueAsPoint(wxT("Position")) != wxPoint(150,150) ) + if ( wxPointRefFromVariant(pg->GetPropertyValue(wxT("Position"))) != wxPoint(150,150) ) RT_FAILURE(); if ( !(pg->GetPropertyValueAsArrayInt(wxT("MultiChoiceProperty")) == test_arrint_1) ) RT_FAILURE(); @@ -807,8 +617,8 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) pg->SetPropertyValue(wxT("EnumProperty"),80); pg->SetPropertyValue(wxT("ArrayStringProperty"),test_arrstr_2); pg->SetPropertyValue(wxT("ColourProperty"),(wxObject*)wxWHITE); - pg->SetPropertyValue(wxT("Size"),wxSize(300,300)); - pg->SetPropertyValue(wxT("Position"),wxPoint(300,300)); + pg->SetPropertyValue(wxT("Size"),WXVARIANT(wxSize(300,300))); + pg->SetPropertyValue(wxT("Position"),WXVARIANT(wxPoint(300,300))); pg->SetPropertyValue(wxT("MultiChoiceProperty"),test_arrint_2); #if wxUSE_DATETIME pg->SetPropertyValue(wxT("DateProperty"),dt2); @@ -833,9 +643,9 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) col << pgman->GetPropertyValue(wxT("ColourProperty")); if ( col != *wxWHITE ) RT_FAILURE(); - if ( pgman->GetPropertyValueAsSize(wxT("Size")) != wxSize(300,300) ) + if ( wxSizeRefFromVariant(pgman->GetPropertyValue(wxT("Size"))) != wxSize(300,300) ) RT_FAILURE(); - if ( pgman->GetPropertyValueAsPoint(wxT("Position")) != wxPoint(300,300) ) + if ( wxPointRefFromVariant(pgman->GetPropertyValue(wxT("Position"))) != wxPoint(300,300) ) RT_FAILURE(); if ( !(pgman->GetPropertyValueAsArrayInt(wxT("MultiChoiceProperty")) == test_arrint_2) ) RT_FAILURE(); @@ -901,11 +711,11 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) RT_FAILURE(); // Make sure children of composite parent get updated as well - // Original string value: "Lamborghini Diablo SV; 5707; [300; 3.9; 8.6] 300000" + // Original string value: "Lamborghini Diablo SV; 5707; [300; 3.9; 8.6] 300000; Not Convertible" // // This updates children as well - wxString nvs = "Lamborghini Diablo XYZ; 5707; [100; 3.9; 8.6] 3000002"; + wxString nvs = "Lamborghini Diablo XYZ; 5707; [100; 3.9; 8.6] 3000002; Convertible"; pgman->SetPropertyValue("Car", nvs); if ( pgman->GetPropertyValueAsString("Car.Model") != "Lamborghini Diablo XYZ" ) @@ -925,6 +735,12 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) wxLogDebug("Did not match: Car.Price ($)=%s", pgman->GetPropertyValueAsString("Car.Price ($)").c_str()); RT_FAILURE(); } + + if ( !pgman->GetPropertyValueAsBool("Car.Convertible") ) + { + wxLogDebug("Did not match: Car.Convertible=%s", pgman->GetPropertyValueAsString("Car.Convertible").c_str()); + RT_FAILURE(); + } } { @@ -1118,34 +934,74 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) } { - RT_START_TEST(SetPropertyBackgroundColour) - wxCommandEvent evt; - evt.SetInt(1); // IsChecked() will return TRUE. - evt.SetId(ID_COLOURSCHEME4); - OnCatColours(evt); - OnColourScheme(evt); + RT_START_TEST(RemoveProperty) + + wxPGProperty* p; + + wxPGProperty* origParent = + pgman->GetProperty(wxT("Window Styles"))->GetParent(); + + p = pgman->RemoveProperty(wxT("Window Styles")); + pgman->Refresh(); + pgman->Update(); + + pgman->AppendIn(origParent, p); + pgman->Refresh(); + pgman->Update(); } { - // Test ClearPropertyValue - RT_START_TEST(ClearPropertyValue) + RT_START_TEST(SortFunction) - for ( i=0; i<3; i++ ) - { - wxPropertyGridPage* page = pgman->GetPage(i); + wxPGProperty* p; - // Iterate over all properties. - wxPropertyGridIterator it; + // Make sure indexes are as supposed - for ( it = page->GetIterator(); - !it.AtEnd(); - it++ ) - { - wxLogDebug((*it)->GetLabel()); - pgman->ClearPropertyValue( *it ); - } - } + p = pgman->GetProperty(wxT("User Name")); + if ( p->GetIndexInParent() != 3 ) + RT_FAILURE(); + + p = pgman->GetProperty(wxT("User Id")); + if ( p->GetIndexInParent() != 2 ) + RT_FAILURE(); + + p = pgman->GetProperty(wxT("User Home")); + if ( p->GetIndexInParent() != 1 ) + RT_FAILURE(); + + p = pgman->GetProperty(wxT("Operating System")); + if ( p->GetIndexInParent() != 0 ) + RT_FAILURE(); + + pgman->GetGrid()->SetSortFunction(MyPropertySortFunction); + + pgman->GetGrid()->SortChildren(wxT("Environment")); + + // Make sure indexes have been reversed + p = pgman->GetProperty(wxT("User Name")); + if ( p->GetIndexInParent() != 0 ) + RT_FAILURE(); + p = pgman->GetProperty(wxT("User Id")); + if ( p->GetIndexInParent() != 1 ) + RT_FAILURE(); + + p = pgman->GetProperty(wxT("User Home")); + if ( p->GetIndexInParent() != 2 ) + RT_FAILURE(); + + p = pgman->GetProperty(wxT("Operating System")); + if ( p->GetIndexInParent() != 3 ) + RT_FAILURE(); + } + + { + RT_START_TEST(SetPropertyBackgroundColour) + wxCommandEvent evt; + evt.SetInt(1); // IsChecked() will return TRUE. + evt.SetId(ID_COLOURSCHEME4); + OnCatColours(evt); + OnColourScheme(evt); } {