From 2746bccf233379382f2017ef35d2dfcc114b70cb Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 10 Nov 2009 17:40:25 +0000 Subject: [PATCH] Use symbolic constants for list model columns in dataview sample. Using Col_EditableText, Col_IconText and Col_TextWithAttr instead of 0, 1 and 2 makes the sample code a bit easier to read. Also use switch on the column value instead of nested ifs everywhere to give compiler a chance to warn us if we forget to update some function when a new column is added. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62587 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/dataview/dataview.cpp | 13 ++++-- samples/dataview/mymodels.cpp | 81 +++++++++++++++++++++-------------- samples/dataview/mymodels.h | 12 +++++- 3 files changed, 68 insertions(+), 38 deletions(-) diff --git a/samples/dataview/dataview.cpp b/samples/dataview/dataview.cpp index 7e65b9b9a6..dccee4f9e8 100644 --- a/samples/dataview/dataview.cpp +++ b/samples/dataview/dataview.cpp @@ -545,10 +545,17 @@ void MyFrame::BuildDataViewCtrl(wxPanel* parent, unsigned int nPanel, unsigned l m_ctrl[1]->AssociateModel( m_list_model.get() ); // the various columns - m_ctrl[1]->AppendTextColumn("editable string", 0, wxDATAVIEW_CELL_EDITABLE); - m_ctrl[1]->AppendIconTextColumn("icon", 1, wxDATAVIEW_CELL_EDITABLE); + m_ctrl[1]->AppendTextColumn("editable string", + MyListModel::Col_EditableText, + wxDATAVIEW_CELL_EDITABLE); + m_ctrl[1]->AppendIconTextColumn("icon", + MyListModel::Col_IconText, + wxDATAVIEW_CELL_EDITABLE); m_ctrl[1]->AppendColumn( - new wxDataViewColumn("attributes", new wxDataViewTextRenderer, 2 )); + new wxDataViewColumn("attributes", + new wxDataViewTextRenderer, + MyListModel::Col_TextWithAttr) + ); } break; diff --git a/samples/dataview/mymodels.cpp b/samples/dataview/mymodels.cpp index 3c2f7f4f64..c3bf1ff87a 100644 --- a/samples/dataview/mymodels.cpp +++ b/samples/dataview/mymodels.cpp @@ -404,31 +404,40 @@ void MyListModel::AddMany() void MyListModel::GetValueByRow( wxVariant &variant, unsigned int row, unsigned int col ) const { - if (col==0) - { - if (row >= m_textColValues.GetCount()) - variant = wxString::Format( "virtual row %d", row ); - else - variant = m_textColValues[ row ]; - } - else if (col==1) + switch ( col ) { - wxString text; - if ( row >= m_iconColValues.GetCount() ) - text = "virtual icon"; - else - text = m_iconColValues[row]; + case Col_EditableText: + if (row >= m_textColValues.GetCount()) + variant = wxString::Format( "virtual row %d", row ); + else + variant = m_textColValues[ row ]; + break; - variant << wxDataViewIconText(text, m_icon[row % 2]); - } - else if (col==2) - { - static const char *labels[5] = - { - "blue", "green", "red", "bold cyan", "default", - }; + case Col_IconText: + { + wxString text; + if ( row >= m_iconColValues.GetCount() ) + text = "virtual icon"; + else + text = m_iconColValues[row]; + + variant << wxDataViewIconText(text, m_icon[row % 2]); + } + break; + + case Col_TextWithAttr: + { + static const char *labels[5] = + { + "blue", "green", "red", "bold cyan", "default", + }; + + variant = labels[row % 5]; + } + break; - variant = labels[row % 5]; + case Col_Max: + wxFAIL_MSG( "invalid column" ); } } @@ -437,16 +446,16 @@ bool MyListModel::GetAttrByRow( unsigned int row, unsigned int col, { switch ( col ) { - case 0: + case Col_EditableText: return false; - case 1: + case Col_IconText: if ( !(row % 2) ) return false; attr.SetColour(*wxLIGHT_GREY); break; - case 2: + case Col_TextWithAttr: // do what the labels defined above hint at switch ( row % 5 ) { @@ -471,6 +480,9 @@ bool MyListModel::GetAttrByRow( unsigned int row, unsigned int col, return false; } break; + + case Col_Max: + wxFAIL_MSG( "invalid column" ); } return true; @@ -481,8 +493,8 @@ bool MyListModel::SetValueByRow( const wxVariant &variant, { switch ( col ) { - case 0: - case 1: + case Col_EditableText: + case Col_IconText: if (row >= m_textColValues.GetCount()) { // the item is not in the range of the items @@ -492,22 +504,25 @@ bool MyListModel::SetValueByRow( const wxVariant &variant, return false; } - if ( col == 0 ) + if ( col == Col_EditableText ) { m_textColValues[row] = variant.GetString(); } - else // col == 1 + else // col == Col_IconText { wxDataViewIconText iconText; iconText << variant; m_iconColValues[row] = iconText.GetText(); } - break; + return true; - default: + case Col_TextWithAttr: wxLogError("Cannot edit the column %d", col); - return false; + break; + + case Col_Max: + wxFAIL_MSG( "invalid column" ); } - return true; + return false; } diff --git a/samples/dataview/mymodels.h b/samples/dataview/mymodels.h index 01084a58c4..6d110d645e 100644 --- a/samples/dataview/mymodels.h +++ b/samples/dataview/mymodels.h @@ -188,6 +188,14 @@ private: class MyListModel: public wxDataViewVirtualListModel { public: + enum + { + Col_EditableText, + Col_IconText, + Col_TextWithAttr, + Col_Max + }; + MyListModel(); // helper methods to change the model @@ -202,12 +210,12 @@ public: virtual unsigned int GetColumnCount() const { - return 3; + return Col_Max; } virtual wxString GetColumnType( unsigned int col ) const { - if (col == 1) + if (col == Col_IconText) return wxT("wxDataViewIconText"); return wxT("string"); -- 2.45.2