X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1c4293cb91327247ad69e6ec8d589bfaa299db28..8d9eee83203dfc7177cd8639c14a5c809085698d:/samples/propgrid/tests.cpp diff --git a/samples/propgrid/tests.cpp b/samples/propgrid/tests.cpp index 4f13184f4c..d432334cb5 100644 --- a/samples/propgrid/tests.cpp +++ b/samples/propgrid/tests.cpp @@ -4,9 +4,9 @@ // Author: Jaakko Salli // Modified by: // Created: 2007-05-16 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) Jaakko Salli -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #include "wx/wxprec.h" @@ -27,158 +27,20 @@ #include "sampleprops.h" -// ----------------------------------------------------------------------- -// Declare custom test properties -// ----------------------------------------------------------------------- - -WX_PG_DECLARE_CUSTOM_FLAGS_PROPERTY(wxTestCustomFlagsProperty) - -WX_PG_DECLARE_CUSTOM_ENUM_PROPERTY(wxTestCustomEnumProperty) - - // ----------------------------------------------------------------------- // 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 -}; - - -WX_PG_IMPLEMENT_CUSTOM_FLAGS_PROPERTY(wxTestCustomFlagsProperty, - _fs_framestyle_labels, - _fs_framestyle_values, - wxDEFAULT_FRAME_STYLE) - -WX_PG_IMPLEMENT_CUSTOM_ENUM_PROPERTY(wxTestCustomEnumProperty, - _fs_framestyle_labels, - _fs_framestyle_values, - wxCAPTION) - - -// 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) @@ -198,7 +60,7 @@ public: SetValue(variant); } - virtual ~MyColourProperty3() + virtual ~MyColourProperty() { } @@ -226,12 +88,14 @@ public: return wxColour(); } - virtual wxString ColourToString( const wxColour& col, int index ) const + virtual wxString ColourToString( const wxColour& col, + int index, + int argFlags = 0 ) const { if ( index == (int)(m_choices.GetCount()-1) ) return wxT(""); - return wxColourProperty::ColourToString(col, index); + return wxColourProperty::ColourToString(col, index, argFlags); } virtual int GetCustomColourIndex() const @@ -243,34 +107,13 @@ public: void FormMain::AddTestProperties( wxPropertyGridPage* pg ) { - pg->Append( new wxTestCustomFlagsProperty(wxT("Custom FlagsProperty"), wxPG_LABEL ) ); - pg->SetPropertyEditor( wxT("Custom FlagsProperty"), wxPG_EDITOR(TextCtrlAndButton) ); - - pg->Append( new wxTestCustomEnumProperty(wxT("Custom EnumProperty"), wxPG_LABEL ) ); - - pg->Append( new wxMyColourProperty(wxT("CustomColourProperty1")) ); - - 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 MyColourProperty(wxT("CustomColourProperty"), wxPG_LABEL, *wxGREEN) ); + pg->GetProperty(wxT("CustomColourProperty"))->SetAutoUnspecified(true); + pg->SetPropertyEditor( wxT("CustomColourProperty"), wxPGEditor_ComboBox ); - 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) ); } // ----------------------------------------------------------------------- @@ -321,8 +164,9 @@ void FormMain::OnDumpList( wxCommandEvent& WXUNUSED(event) ) const int spacing = 8; wxBoxSizer* topsizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* rowsizer = new wxBoxSizer( wxHORIZONTAL ); - wxTextCtrl* ed = new wxTextCtrl(dlg,11,text, - wxDefaultPosition,wxDefaultSize,wxTE_MULTILINE|wxTE_READONLY); + wxTextCtrl* ed = new wxTextCtrl(dlg, 11, text, + wxDefaultPosition, wxDefaultSize, + wxTE_MULTILINE); rowsizer->Add( ed, 1, wxEXPAND|wxALL, spacing ); topsizer->Add( rowsizer, 1, wxEXPAND, 0 ); rowsizer = new wxBoxSizer( wxHORIZONTAL ); @@ -408,6 +252,10 @@ protected: failures++; \ } +#define RT_ASSERT(COND) \ + if (!(COND)) \ + RT_FAILURE() + #define RT_FAILURE_MSG(MSG) \ { \ wxString s1 = wxString::Format(wxT("Test failure in tests.cpp, line %i."),__LINE__-1); \ @@ -465,26 +313,13 @@ wxArrayPGProperty GetPropertiesInRandomOrder( wxPropertyGridInterface* props, in return arr; } -static void PropertiesToNames( wxPropertyGridInterface* WXUNUSED(iface), - wxArrayString* names, - const wxArrayPGProperty& properties ) -{ - unsigned int i; - for ( i=0; iAdd( properties[i]->GetName() ); -} - -static void NamesToProperties( wxPropertyGridInterface* iface, - wxArrayPGProperty* properties, - const wxArrayString& names ) +// Callback for testing property sorting +int MyPropertySortFunction(wxPropertyGrid* WXUNUSED(propGrid), + wxPGProperty* p1, + wxPGProperty* p2) { - 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 ) @@ -510,8 +345,9 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) const int spacing = 8; wxBoxSizer* topsizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* rowsizer = new wxBoxSizer( wxHORIZONTAL ); - wxTextCtrl* ed = new wxTextCtrl(dlg,11,wxEmptyString, - wxDefaultPosition,wxDefaultSize,wxTE_MULTILINE|wxTE_READONLY); + wxTextCtrl* ed = new wxTextCtrl(dlg, 11, wxEmptyString, + wxDefaultPosition, wxDefaultSize, + wxTE_MULTILINE); rowsizer->Add( ed, 1, wxEXPAND|wxALL, spacing ); topsizer->Add( rowsizer, 1, wxEXPAND, 0 ); rowsizer = new wxBoxSizer( wxHORIZONTAL ); @@ -620,50 +456,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 @@ -693,8 +485,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; @@ -702,8 +494,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 @@ -711,6 +503,59 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) pgman = m_pPropGridManager; } + { + // + // Test wxAny<->wxVariant conversion + RT_START_TEST(WXVARIANT_TO_WXANY_CONVERSION) + + wxPGProperty* prop; + wxAny any; + +#if wxUSE_DATETIME + prop = pgman->GetProperty("DateProperty"); + wxDateTime testTime = wxDateTime::Now(); + any = testTime; + prop->SetValue(any); + if ( wxANY_AS(prop->GetValue().GetAny(), wxDateTime) != testTime ) + RT_FAILURE(); +#endif + + prop = pgman->GetProperty("IntProperty"); + int testInt = 25537983; + any = testInt; + prop->SetValue(any); + if ( wxANY_AS(prop->GetValue().GetAny(), int) != testInt ) + RT_FAILURE(); +#ifdef wxLongLong_t + if ( wxANY_AS(prop->GetValue().GetAny(), wxLongLong_t) != testInt ) + RT_FAILURE(); +#endif + + prop = pgman->GetProperty("StringProperty"); + wxString testString = "asd934jfyn3"; + any = testString; + prop->SetValue(any); + if ( wxANY_AS(prop->GetValue().GetAny(), wxString) != testString ) + RT_FAILURE(); + + // Test with a type generated with IMPLEMENT_VARIANT_OBJECT() + prop = pgman->GetProperty("ColourProperty"); + wxColour testCol = *wxCYAN; + any = testCol; + prop->SetValue(any); + if ( wxANY_AS(prop->GetValue().GetAny(), wxColour) != testCol ) + RT_FAILURE(); + + // Test with a type with custom wxVariantData defined by + // wxPG headers. + prop = pgman->GetProperty("Position"); + wxPoint testPoint(199, 199); + any = testPoint; + prop->SetValue(any); + if ( wxANY_AS(prop->GetValue().GetAny(), wxPoint) != testPoint ) + RT_FAILURE(); + } + { RT_START_TEST(GetPropertyValues) @@ -739,6 +584,10 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) { RT_START_TEST(SetPropertyValue_and_GetPropertyValue) + // In this section, mixed up usage of wxT("propname") and "propname" + // in wxPropertyGridInterface functions is intentional. + // Purpose is to test wxPGPropArgCls ctors. + //pg = (wxPropertyGrid*) NULL; wxArrayString test_arrstr_1; @@ -769,6 +618,9 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) dt2.SetYear(dt2.GetYear()-10); #endif + wxColour colWithAlpha(1, 128, 254, 100); + wxString colWithAlphaStr(colWithAlpha.GetAsString(wxC2S_CSS_SYNTAX)); + #define FLAG_TEST_SET1 (wxCAPTION|wxCLOSE_BOX|wxSYSTEM_MENU|wxRESIZE_BORDER) #define FLAG_TEST_SET2 (wxSTAY_ON_TOP|wxCAPTION|wxICONIZE|wxSYSTEM_MENU) @@ -777,13 +629,12 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) pgman->SetPropertyValue(wxT("FloatProperty"),1024.0000000001); pgman->SetPropertyValue(wxT("BoolProperty"),FALSE); pgman->SetPropertyValue(wxT("EnumProperty"),120); - pgman->SetPropertyValue(wxT("Custom FlagsProperty"),FLAG_TEST_SET1); pgman->SetPropertyValue(wxT("ArrayStringProperty"),test_arrstr_1); 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); @@ -804,15 +655,15 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) RT_FAILURE(); if ( pg->GetPropertyValueAsArrayString(wxT("ArrayStringProperty")) != test_arrstr_1 ) RT_FAILURE(); - if ( pg->GetPropertyValueAsLong(wxT("Custom FlagsProperty")) != FLAG_TEST_SET1 ) - RT_FAILURE(); wxColour col; col << pgman->GetPropertyValue(wxT("ColourProperty")); if ( col != *wxBLACK ) RT_FAILURE(); - if ( pg->GetPropertyValueAsSize(wxT("Size")) != wxSize(150,150) ) + wxVariant varSize(pg->GetPropertyValue(wxT("Size"))); + if ( wxSizeRefFromVariant(varSize) != wxSize(150,150) ) RT_FAILURE(); - if ( pg->GetPropertyValueAsPoint(wxT("Position")) != wxPoint(150,150) ) + wxVariant varPos(pg->GetPropertyValue(wxT("Position"))); + if ( wxPointRefFromVariant(varPos) != wxPoint(150,150) ) RT_FAILURE(); if ( !(pg->GetPropertyValueAsArrayInt(wxT("MultiChoiceProperty")) == test_arrint_1) ) RT_FAILURE(); @@ -831,10 +682,9 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) pg->SetPropertyValue(wxT("BoolProperty"),TRUE); pg->SetPropertyValue(wxT("EnumProperty"),80); pg->SetPropertyValue(wxT("ArrayStringProperty"),test_arrstr_2); - pg->SetPropertyValue(wxT("Custom FlagsProperty"),FLAG_TEST_SET2); 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); @@ -856,14 +706,14 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) RT_FAILURE(); if ( pgman->GetPropertyValueAsArrayString(wxT("ArrayStringProperty")) != test_arrstr_2 ) RT_FAILURE(); - if ( pgman->GetPropertyValueAsLong(wxT("Custom FlagsProperty")) != FLAG_TEST_SET2 ) - RT_FAILURE(); col << pgman->GetPropertyValue(wxT("ColourProperty")); if ( col != *wxWHITE ) RT_FAILURE(); - if ( pgman->GetPropertyValueAsSize(wxT("Size")) != wxSize(300,300) ) + varSize = pgman->GetPropertyValue(wxT("Size")); + if ( wxSizeRefFromVariant(varSize) != wxSize(300,300) ) RT_FAILURE(); - if ( pgman->GetPropertyValueAsPoint(wxT("Position")) != wxPoint(300,300) ) + varPos = pgman->GetPropertyValue(wxT("Position")); + if ( wxPointRefFromVariant(varPos) != wxPoint(300,300) ) RT_FAILURE(); if ( !(pgman->GetPropertyValueAsArrayInt(wxT("MultiChoiceProperty")) == test_arrint_2) ) RT_FAILURE(); @@ -875,6 +725,57 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) pgman->SetPropertyValue(wxT("IntProperty"),wxLL(-80000000000)); if ( pgman->GetPropertyValueAsLongLong(wxT("IntProperty")) != wxLL(-80000000000) ) 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; Not Convertible" + + // + // This updates children as well + 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" ) + { + wxLogDebug("Did not match: Car.Model=%s", pgman->GetPropertyValueAsString("Car.Model").c_str()); + RT_FAILURE(); + } + + if ( pgman->GetPropertyValueAsInt("Car.Speeds.Max. Speed (mph)") != 100 ) + { + wxLogDebug("Did not match: Car.Speeds.Max. Speed (mph)=%s", pgman->GetPropertyValueAsString("Car.Speeds.Max. Speed (mph)").c_str()); + RT_FAILURE(); + } + + if ( pgman->GetPropertyValueAsInt("Car.Price ($)") != 3000002 ) + { + 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(); + } + + // SetPropertyValueString for special cases such as wxColour + pgman->SetPropertyValueString("ColourProperty", "(123,4,255)"); + col << pgman->GetPropertyValue("ColourProperty"); + if ( col != wxColour(123, 4, 255) ) + RT_FAILURE(); + pgman->SetPropertyValueString("ColourProperty", "#FE860B"); + col << pgman->GetPropertyValue("ColourProperty"); + if ( col != wxColour(254, 134, 11) ) + RT_FAILURE(); + + pgman->SetPropertyValueString("ColourPropertyWithAlpha", + "(10, 20, 30, 128)"); + col << pgman->GetPropertyValue("ColourPropertyWithAlpha"); + if ( col != wxColour(10, 20, 30, 128) ) + RT_FAILURE(); + if ( pgman->GetPropertyValueAsString("ColourPropertyWithAlpha") + != "(10,20,30,128)" ) + RT_FAILURE(); } { @@ -887,7 +788,6 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) pgman->SetPropertyValueUnspecified(wxT("BoolProperty")); pgman->SetPropertyValueUnspecified(wxT("EnumProperty")); pgman->SetPropertyValueUnspecified(wxT("ArrayStringProperty")); - pgman->SetPropertyValueUnspecified(wxT("Custom FlagsProperty")); pgman->SetPropertyValueUnspecified(wxT("ColourProperty")); pgman->SetPropertyValueUnspecified(wxT("Size")); pgman->SetPropertyValueUnspecified(wxT("Position")); @@ -897,6 +797,122 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) #endif } + { + // + // Test multiple selection + RT_START_TEST(MULTIPLE_SELECTION) + if ( !(pgman->GetExtraStyle() & wxPG_EX_MULTIPLE_SELECTION) ) + CreateGrid( -1, wxPG_EX_MULTIPLE_SELECTION); + pgman = m_pPropGridManager; + + wxPropertyGrid* pg = pgman->GetGrid(); + + wxPGProperty* prop1 = pg->GetProperty(wxT("Label")); + wxPGProperty* prop2 = pg->GetProperty(wxT("Cell Text Colour")); + wxPGProperty* prop3 = pg->GetProperty(wxT("Height")); + wxPGProperty* catProp = pg->GetProperty(wxT("Appearance")); + + RT_ASSERT( prop1 && prop2 && prop3 ); + + pg->ClearSelection(); + pg->AddToSelection(prop1); + pg->AddToSelection(prop2); + pg->AddToSelection(prop3); + + // Adding category to selection should fail silently + pg->AddToSelection(catProp); + + wxArrayPGProperty selectedProperties = pg->GetSelectedProperties(); + + RT_ASSERT( selectedProperties.size() == 3 ) + RT_ASSERT( pg->IsPropertySelected(prop1) ) + RT_ASSERT( pg->IsPropertySelected(prop2) ) + RT_ASSERT( pg->IsPropertySelected(prop3) ) + RT_ASSERT( !pg->IsPropertySelected(catProp) ) + + pg->RemoveFromSelection(prop1); + wxArrayPGProperty selectedProperties2 = pg->GetSelectedProperties(); + + RT_ASSERT( selectedProperties2.size() == 2 ) + RT_ASSERT( !pg->IsPropertySelected(prop1) ) + RT_ASSERT( pg->IsPropertySelected(prop2) ) + RT_ASSERT( pg->IsPropertySelected(prop3) ) + + pg->ClearSelection(); + + wxArrayPGProperty selectedProperties3 = pg->GetSelectedProperties(); + + RT_ASSERT( selectedProperties3.size() == 0 ) + RT_ASSERT( !pg->IsPropertySelected(prop1) ) + RT_ASSERT( !pg->IsPropertySelected(prop2) ) + RT_ASSERT( !pg->IsPropertySelected(prop3) ) + + pg->SelectProperty(prop2); + + RT_ASSERT( !pg->IsPropertySelected(prop1) ) + RT_ASSERT( pg->IsPropertySelected(prop2) ) + RT_ASSERT( !pg->IsPropertySelected(prop3) ) + } + + { + // + // Test label editing + RT_START_TEST(LABEL_EDITING) + + wxPropertyGrid* pg = pgman->GetGrid(); + + // Just mostly test that these won't crash + pg->MakeColumnEditable(0, true); + pg->MakeColumnEditable(2, true); + pg->MakeColumnEditable(0, false); + pg->MakeColumnEditable(2, false); + pg->SelectProperty(wxT("Height")); + pg->BeginLabelEdit(0); + pg->BeginLabelEdit(0); + pg->EndLabelEdit(0); + pg->EndLabelEdit(0); + + // Recreate grid + CreateGrid( -1, -1 ); + pgman = m_pPropGridManager; + } + + { + RT_START_TEST(Attributes) + + wxPGProperty* prop = pgman->GetProperty(wxT("StringProperty")); + prop->SetAttribute(wxT("Dummy Attribute"), (long)15); + + if ( prop->GetAttribute(wxT("Dummy Attribute")).GetLong() != 15 ) + RT_FAILURE(); + + prop->SetAttribute(wxT("Dummy Attribute"), wxVariant()); + + if ( !prop->GetAttribute(wxT("Dummy Attribute")).IsNull() ) + RT_FAILURE(); + } + + { + RT_START_TEST(DoubleToString) + + // Locale-specific decimal separator + wxString sep = wxString::Format("%g", 1.1)[1]; + + wxString s; + + if ( wxPropertyGrid::DoubleToString(s, 123.123, 2, true) != + wxString::Format("123%s12", sep.c_str()) ) + RT_FAILURE(); + if ( wxPropertyGrid::DoubleToString(s, -123.123, 4, false) != + wxString::Format("-123%s1230", sep.c_str()) ) + RT_FAILURE(); + if ( wxPropertyGrid::DoubleToString(s, -0.02, 1, false) != + wxString::Format("0%s0", sep) ) + RT_FAILURE(); + if ( wxPropertyGrid::DoubleToString(s, -0.000123, 3, true) != "0" ) + RT_FAILURE(); + } + { wxPropertyGridPage* page1; wxPropertyGridPage* page2; @@ -993,6 +1009,24 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) } } + { + RT_START_TEST(Choice_Manipulation) + + wxPGProperty* enumProp = pgman->GetProperty(wxT("EnumProperty")); + + pgman->SelectPage(2); + pgman->SelectProperty(enumProp); + wxASSERT(pgman->GetGrid()->GetSelection() == enumProp); + + const wxPGChoices& choices = enumProp->GetChoices(); + int ind = enumProp->InsertChoice(wxT("New Choice"), choices.GetCount()/2); + enumProp->DeleteChoice(ind); + + // Recreate the original grid + CreateGrid( -1, -1 ); + pgman = m_pPropGridManager; + } + //if ( !(pgman->GetWindowStyleFlag()&wxPG_HIDE_CATEGORIES) ) { RT_START_TEST(RandomCollapse) @@ -1035,6 +1069,72 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) pgman->EnsureVisible(wxT("Cell Colour")); } + { + RT_START_TEST(RemoveProperty) + + wxPGProperty* p; + + wxPGProperty* origParent = + pgman->GetProperty("Window Styles")->GetParent(); + + // For testing purposes, let's set some custom cell colours + p = pgman->GetProperty("Window Styles"); + p->SetCell(2, wxPGCell("style")); + p = pgman->RemoveProperty("Window Styles"); + pgman->Refresh(); + pgman->Update(); + + pgman->AppendIn(origParent, p); + wxASSERT( p->GetCell(2).GetText() == "style"); + pgman->Refresh(); + pgman->Update(); + } + + { + RT_START_TEST(SortFunction) + + wxPGProperty* p; + + // Make sure indexes are as supposed + + 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; @@ -1045,32 +1145,27 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) } { - // Test ClearPropertyValue - RT_START_TEST(ClearPropertyValue) + RT_START_TEST(Clear) - for ( i=0; i<3; i++ ) - { - wxPropertyGridPage* page = pgman->GetPage(i); + // Manager clear + pgman->SelectProperty("Label"); + pgman->Clear(); - // Iterate over all properties. - wxPropertyGridIterator it; + if ( pgman->GetPageCount() ) + RT_FAILURE(); - for ( it = page->GetIterator(); - !it.AtEnd(); - it++ ) - { - wxLogDebug((*it)->GetLabel()); - pgman->ClearPropertyValue( *it ); - } - } + if ( pgman->GetGrid()->GetRoot()->GetChildCount() ) + RT_FAILURE(); - } + // Recreate the original grid + CreateGrid( -1, -1 ); + pgman = m_pPropGridManager; - { - RT_START_TEST(ManagerClear) - pgman->Clear(); + // Grid clear + pgman->SelectProperty("Label"); + pgman->GetGrid()->Clear(); - if ( pgman->GetPageCount() ) + if ( pgman->GetGrid()->GetRoot()->GetChildCount() ) RT_FAILURE(); // Recreate the original grid @@ -1078,15 +1173,14 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) pgman = m_pPropGridManager; } - /* - { + /*{ // TODO: This test fails. RT_START_TEST(SetSplitterPosition) InitPanel(); const int trySplitterPos = 50; - + int style = wxPG_AUTO_SORT; // wxPG_SPLITTER_AUTO_CENTER; pgman = m_pPropGridManager = new wxPropertyGridManager(m_panel, wxID_ANY, @@ -1116,8 +1210,7 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) // Recreate the original grid CreateGrid( -1, -1 ); pgman = m_pPropGridManager; - } - */ + }*/ { RT_START_TEST(HideProperty) @@ -1127,7 +1220,7 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) srand(0x1234); wxArrayPGProperty arr1; - + arr1 = GetPropertiesInRandomOrder(page); if ( !_failed_ ) @@ -1197,11 +1290,7 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) // // Ok, this time only hide half of them arr1 = GetPropertiesInRandomOrder(page); -#if wxCHECK_VERSION(2,8,0) arr1.resize(arr1.size()/2); -#else - arr1.SetCount(arr1.size()/2); -#endif if ( !_failed_ ) { @@ -1275,7 +1364,7 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) wxASSERT(wxPG_EX_INIT_NOCAT == 0x00001000); - for ( i=12; i<24; i++ ) + for ( i=12; i<27; i++ ) { int flag = 1<m_warnings); + s = wxString::Format(wxT("All tests were successful, but there were %i warnings!"), wxPGGlobalVars->m_warnings); #endif RT_MSG(s) for ( i=0; i