Added multiple selection feature to wxPropertyGrid (enabled by setting wxPG_EX_MULTIPLE_SELECTION style)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61681 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli
2009-08-17 18:36:00 +00:00
parent 17a5460272
commit fc72fab6c6
15 changed files with 663 additions and 197 deletions

View File

@@ -2045,7 +2045,8 @@ void FormMain::CreateGrid( int style, int extraStyle )
if ( extraStyle == -1 )
// default extra style
extraStyle = wxPG_EX_MODE_BUTTONS;
extraStyle = wxPG_EX_MODE_BUTTONS |
wxPG_EX_MULTIPLE_SELECTION;
//| wxPG_EX_AUTO_UNSPECIFIED_VALUES
//| wxPG_EX_GREY_LABEL_WHEN_DISABLED
//| wxPG_EX_NATIVE_DOUBLE_BUFFERING
@@ -2140,7 +2141,8 @@ FormMain::FormMain(const wxString& title, const wxPoint& pos, const wxSize& size
wxPG_TOOLBAR |
wxPG_DESCRIPTION,
// extra style
wxPG_EX_MODE_BUTTONS
wxPG_EX_MODE_BUTTONS |
wxPG_EX_MULTIPLE_SELECTION
//| wxPG_EX_AUTO_UNSPECIFIED_VALUES
//| wxPG_EX_GREY_LABEL_WHEN_DISABLED
//| wxPG_EX_NATIVE_DOUBLE_BUFFERING
@@ -2928,6 +2930,8 @@ void FormMain::OnSelectStyle( wxCommandEvent& WXUNUSED(event) )
ADD_FLAG(wxPG_EX_NATIVE_DOUBLE_BUFFERING)
ADD_FLAG(wxPG_EX_AUTO_UNSPECIFIED_VALUES)
ADD_FLAG(wxPG_EX_WRITEONLY_BUILTIN_ATTRIBUTES)
ADD_FLAG(wxPG_EX_HIDE_PAGE_BUTTONS)
ADD_FLAG(wxPG_EX_MULTIPLE_SELECTION)
wxMultiChoiceDialog dlg( this, wxT("Select extra window styles to use"),
wxT("wxPropertyGrid Extra Style"), chs );
dlg.SetSelections(sel);

View File

@@ -249,6 +249,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); \
@@ -714,6 +718,63 @@ 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) )
}
{
RT_START_TEST(Attributes)
@@ -985,8 +1046,7 @@ bool FormMain::RunTests( bool fullTest, bool interactive )
pgman = m_pPropGridManager;
}
/*
{
/*{
// TODO: This test fails.
RT_START_TEST(SetSplitterPosition)
@@ -1023,8 +1083,7 @@ bool FormMain::RunTests( bool fullTest, bool interactive )
// Recreate the original grid
CreateGrid( -1, -1 );
pgman = m_pPropGridManager;
}
*/
}*/
{
RT_START_TEST(HideProperty)
@@ -1034,7 +1093,7 @@ bool FormMain::RunTests( bool fullTest, bool interactive )
srand(0x1234);
wxArrayPGProperty arr1;
arr1 = GetPropertiesInRandomOrder(page);
if ( !_failed_ )
@@ -1178,7 +1237,7 @@ bool FormMain::RunTests( bool fullTest, bool interactive )
wxASSERT(wxPG_EX_INIT_NOCAT == 0x00001000);
for ( i=12; i<24; i++ )
for ( i=12; i<26; i++ )
{
int flag = 1<<i;
RT_MSG(wxString::Format(wxT("ExStyle: 0x%X"),flag));