// Created: 06/01/06
// RCS-ID: $Id$
// Copyright: (c) Robert Roebling
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
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:
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
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));
}
void MyListModel::DeleteItem( const wxDataViewItem &item )
{
unsigned int row = GetRow( item );
+
if (row >= m_textColValues.GetCount())
return;
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:
return false;
}
break;
+
+ case Col_Max:
+ wxFAIL_MSG( "invalid column" );
}
return true;
{
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
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);
}