diff --git a/include/wx/propgrid/propgrid.h b/include/wx/propgrid/propgrid.h index a46583491e..40350413b3 100644 --- a/include/wx/propgrid/propgrid.h +++ b/include/wx/propgrid/propgrid.h @@ -1029,13 +1029,10 @@ public: /** Makes given column editable by user. - @see BeginLabelEdit(), EndLabelEdit() + @param editable + Using @false here will disable column from being editable. */ - void MakeColumnEditable( unsigned int column ) - { - wxASSERT( column != 1 ); - m_pState->m_editableColumns.push_back(column); - } + void MakeColumnEditable( unsigned int column, bool editable = true ); /** Creates label editor wxTextCtrl for given column, for property diff --git a/interface/wx/propgrid/propgrid.h b/interface/wx/propgrid/propgrid.h index 622be65cf4..c65a6d86be 100644 --- a/interface/wx/propgrid/propgrid.h +++ b/interface/wx/propgrid/propgrid.h @@ -751,9 +751,12 @@ public: /** Makes given column editable by user. + @param editable + Using @false here will disable column from being editable. + @see BeginLabelEdit(), EndLabelEdit() */ - void MakeColumnEditable( unsigned int column ); + void MakeColumnEditable( unsigned int column, bool editable = true ); /** It is recommended that you call this function any time your code causes diff --git a/samples/propgrid/tests.cpp b/samples/propgrid/tests.cpp index 28d553b068..8efbe0f392 100644 --- a/samples/propgrid/tests.cpp +++ b/samples/propgrid/tests.cpp @@ -775,6 +775,29 @@ bool FormMain::RunTests( bool fullTest, bool interactive ) 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) diff --git a/src/propgrid/propgrid.cpp b/src/propgrid/propgrid.cpp index 6f8ad97379..e520c268a2 100644 --- a/src/propgrid/propgrid.cpp +++ b/src/propgrid/propgrid.cpp @@ -925,6 +925,29 @@ void wxPropertyGrid::DoSetSelection( const wxArrayPGProperty& newSelection, // ----------------------------------------------------------------------- +void wxPropertyGrid::MakeColumnEditable( unsigned int column, + bool editable ) +{ + wxASSERT( column != 1 ); + + wxArrayInt& cols = m_pState->m_editableColumns; + + if ( editable ) + { + cols.push_back(column); + } + else + { + for ( int i = cols.size() - 1; i > 0; i-- ) + { + if ( cols[i] == (int)column ) + cols.erase( cols.begin() + i ); + } + } +} + +// ----------------------------------------------------------------------- + void wxPropertyGrid::DoBeginLabelEdit( unsigned int colIndex, int selFlags ) {