X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/205bdf2069b93743848d69a39c0bd4a32e9ff8b7..65fb4b3a4f18e1d8b58ac92d50d4cc7f81f03783:/samples/dataview/mymodels.cpp diff --git a/samples/dataview/mymodels.cpp b/samples/dataview/mymodels.cpp index 4be852d6ff..a3cb111198 100644 --- a/samples/dataview/mymodels.cpp +++ b/samples/dataview/mymodels.cpp @@ -6,7 +6,7 @@ // Created: 06/01/06 // RCS-ID: $Id$ // Copyright: (c) Robert Roebling -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -203,18 +203,13 @@ void MyMusicTreeModel::GetValue( wxVariant &variant, variant = node->m_quality; break; case 4: - // wxMac doesn't conceal the popularity progress renderer, return 0 for containers - if (IsContainer(item)) - variant = (long) 0; - else - variant = (long) 80; // all music is very 80% popular + variant = 80L; // all music is very 80% popular break; case 5: - // Make size of red square depend on year if (GetYear(item) < 1900) - variant = (long) 35; + variant = "old"; else - variant = (long) 25; + variant = "new"; break; default: @@ -249,6 +244,17 @@ bool MyMusicTreeModel::SetValue( const wxVariant &variant, return false; } +bool MyMusicTreeModel::IsEnabled( const wxDataViewItem &item, + unsigned int col ) const +{ + wxASSERT(item.IsOk()); + + MyMusicTreeModelNode *node = (MyMusicTreeModelNode*) item.GetID(); + + // disable Beethoven's ratings, his pieces can only be good + return !(col == 3 && node->m_artist.EndsWith("Beethoven")); +} + wxDataViewItem MyMusicTreeModel::GetParent( const wxDataViewItem &item ) const { // the invisible root node has no parent @@ -322,23 +328,18 @@ static int my_sort( int *v1, int *v2 ) return *v1-*v2; } -#ifdef __WXMAC__ - #define INITIAL_NUMBER_OF_ITEMS 100 -#else - #define INITIAL_NUMBER_OF_ITEMS 100000 -#endif +#define INITIAL_NUMBER_OF_ITEMS 10000 MyListModel::MyListModel() : wxDataViewVirtualListModel( INITIAL_NUMBER_OF_ITEMS ) { - m_virtualItems = INITIAL_NUMBER_OF_ITEMS; - // the first 100 items are really stored in this model; // all the others are synthesized on request static const unsigned NUMBER_REAL_ITEMS = 100; m_textColValues.reserve(NUMBER_REAL_ITEMS); - for (unsigned int i = 0; i < NUMBER_REAL_ITEMS; i++) + m_textColValues.push_back("first row with long label to test ellipsization"); + for (unsigned int i = 1; i < NUMBER_REAL_ITEMS; i++) { m_textColValues.push_back(wxString::Format("real row %d", i)); } @@ -358,6 +359,7 @@ void MyListModel::Prepend( const wxString &text ) void MyListModel::DeleteItem( const wxDataViewItem &item ) { unsigned int row = GetRow( item ); + if (row >= m_textColValues.GetCount()) return; @@ -400,57 +402,70 @@ void MyListModel::DeleteItems( const wxDataViewItemArray &items ) void MyListModel::AddMany() { - m_virtualItems += 1000; - Reset( m_textColValues.GetCount() + m_virtualItems ); + Reset( GetCount()+1000 ); } 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]; + variant = labels[row % 5]; + } + break; + + case Col_Custom: + variant = wxString::Format("%d", row % 100); + break; + + case Col_Max: + wxFAIL_MSG( "invalid column" ); } } bool MyListModel::GetAttrByRow( unsigned int row, unsigned int col, - wxDataViewItemAttr &attr ) + wxDataViewItemAttr &attr ) const { 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: - // do what the labels defined above hint at + case Col_TextWithAttr: + case Col_Custom: + // do what the labels defined in GetValueByRow() hint at switch ( row % 5 ) { case 0: @@ -474,6 +489,9 @@ bool MyListModel::GetAttrByRow( unsigned int row, unsigned int col, return false; } break; + + case Col_Max: + wxFAIL_MSG( "invalid column" ); } return true; @@ -484,8 +502,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 @@ -495,22 +513,37 @@ 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: + case Col_Custom: wxLogError("Cannot edit the column %d", col); - return false; + break; + + case Col_Max: + wxFAIL_MSG( "invalid column" ); } - return true; + return false; +} + + +// ---------------------------------------------------------------------------- +// MyListStoreDerivedModel +// ---------------------------------------------------------------------------- + +bool MyListStoreDerivedModel::IsEnabledByRow(unsigned int row, unsigned int col) const +{ + // disabled the last two checkboxes + return !(col == 0 && 8 <= row && row <= 9); }