X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a82e28dd0336e2829496fa1ea0f6a327cf0099c6..77241feb3f132b90af41681b236def04139e8ea7:/samples/dataview/mymodels.cpp diff --git a/samples/dataview/mymodels.cpp b/samples/dataview/mymodels.cpp index 03c13cd356..0424b24936 100644 --- a/samples/dataview/mymodels.cpp +++ b/samples/dataview/mymodels.cpp @@ -334,31 +334,35 @@ MyListModel::MyListModel() : m_virtualItems = INITIAL_NUMBER_OF_ITEMS; // the first 100 items are really stored in this model; - // all the others are synthetized on request - for (unsigned int i = 0; i < 100; i++) + // all the others are synthesized on request + static const unsigned NUMBER_REAL_ITEMS = 100; + + m_textColValues.reserve(NUMBER_REAL_ITEMS); + m_textColValues.push_back("first row with long label to test ellipsization"); + for (unsigned int i = 1; i < NUMBER_REAL_ITEMS; i++) { - wxString str; - str.Printf( "real row %d", i ); - m_array.Add( str ); + m_textColValues.push_back(wxString::Format("real row %d", i)); } + m_iconColValues.assign(NUMBER_REAL_ITEMS, "test"); + m_icon[0] = wxIcon( null_xpm ); m_icon[1] = wxIcon( wx_small_xpm ); } void MyListModel::Prepend( const wxString &text ) { - m_array.Insert( text, 0 ); + m_textColValues.Insert( text, 0 ); RowPrepended(); } void MyListModel::DeleteItem( const wxDataViewItem &item ) { unsigned int row = GetRow( item ); - if (row >= m_array.GetCount()) + if (row >= m_textColValues.GetCount()) return; - m_array.RemoveAt( row ); + m_textColValues.RemoveAt( row ); RowDeleted( row ); } @@ -369,7 +373,7 @@ void MyListModel::DeleteItems( const wxDataViewItemArray &items ) for (i = 0; i < items.GetCount(); i++) { unsigned int row = GetRow( items[i] ); - if (row < m_array.GetCount()) + if (row < m_textColValues.GetCount()) rows.Add( row ); } @@ -377,7 +381,7 @@ void MyListModel::DeleteItems( const wxDataViewItemArray &items ) { // none of the selected items were in the range of the items // which we store... for simplicity, don't allow removing them - wxLogError( "Cannot remove rows with an index greater than %d", m_array.GetCount() ); + wxLogError( "Cannot remove rows with an index greater than %d", m_textColValues.GetCount() ); return; } @@ -386,7 +390,7 @@ void MyListModel::DeleteItems( const wxDataViewItemArray &items ) // remaining indeces would all be wrong. rows.Sort( my_sort_reverse ); for (i = 0; i < rows.GetCount(); i++) - m_array.RemoveAt( rows[i] ); + m_textColValues.RemoveAt( rows[i] ); // This is just to test if wxDataViewCtrl can // cope with removing rows not sorted in @@ -398,7 +402,7 @@ void MyListModel::DeleteItems( const wxDataViewItemArray &items ) void MyListModel::AddMany() { m_virtualItems += 1000; - Reset( m_array.GetCount() + m_virtualItems ); + Reset( m_textColValues.GetCount() + m_virtualItems ); } void MyListModel::GetValueByRow( wxVariant &variant, @@ -406,36 +410,71 @@ void MyListModel::GetValueByRow( wxVariant &variant, { if (col==0) { - if (row >= m_array.GetCount()) + if (row >= m_textColValues.GetCount()) variant = wxString::Format( "virtual row %d", row ); else - variant = m_array[ row ]; + variant = m_textColValues[ row ]; } else if (col==1) { - wxDataViewIconText data( "test", m_icon[ row%2 ] ); - variant << data; + wxString text; + if ( row >= m_iconColValues.GetCount() ) + text = "virtual icon"; + else + text = m_iconColValues[row]; + + variant << wxDataViewIconText(text, m_icon[row % 2]); } else if (col==2) { - if (row >= m_array.GetCount()) - variant = "plain"; - else - variant = "blue/green/red"; + static const char *labels[5] = + { + "blue", "green", "red", "bold cyan", "default", + }; + + variant = labels[row % 5]; } } bool MyListModel::GetAttrByRow( unsigned int row, unsigned int col, wxDataViewItemAttr &attr ) { - if (col != 2) - return false; - - if (row < m_array.GetCount()) + switch ( col ) { - attr.SetColour( (row%2) == 0 ? *wxBLUE : - ((row%3) == 0 ? *wxGREEN : *wxRED) ); - attr.SetItalic( (row%2) == 5 ); + case 0: + return false; + + case 1: + if ( !(row % 2) ) + return false; + attr.SetColour(*wxLIGHT_GREY); + break; + + case 2: + // do what the labels defined above hint at + switch ( row % 5 ) + { + case 0: + attr.SetColour(*wxBLUE); + break; + + case 1: + attr.SetColour(*wxGREEN); + break; + + case 2: + attr.SetColour(*wxRED); + break; + + case 3: + attr.SetColour(*wxCYAN); + attr.SetBold(true); + break; + + case 4: + return false; + } + break; } return true; @@ -444,19 +483,35 @@ bool MyListModel::GetAttrByRow( unsigned int row, unsigned int col, bool MyListModel::SetValueByRow( const wxVariant &variant, unsigned int row, unsigned int col ) { - if (col == 0) + switch ( col ) { - if (row >= m_array.GetCount()) - { - // the item is not in the range of the items - // which we store... for simplicity, don't allow editing it - wxLogError( "Cannot edit rows with an index greater than %d", m_array.GetCount() ); - return false; - } + case 0: + case 1: + if (row >= m_textColValues.GetCount()) + { + // the item is not in the range of the items + // which we store... for simplicity, don't allow editing it + wxLogError( "Cannot edit rows with an index greater than %d", + m_textColValues.GetCount() ); + return false; + } + + if ( col == 0 ) + { + m_textColValues[row] = variant.GetString(); + } + else // col == 1 + { + wxDataViewIconText iconText; + iconText << variant; + m_iconColValues[row] = iconText.GetText(); + } + break; - m_array[row] = variant.GetString(); - return true; + default: + wxLogError("Cannot edit the column %d", col); + return false; } - return false; + return true; }