Show wxDataViewCheckIconTextRenderer in the sample

Instead of using separate check and icon+text columns in the list model
page, use the combined check+icon+text column to verify that it works
(which is not the case current in the native Mac version).
This commit is contained in:
Vadim Zeitlin
2019-12-15 19:17:10 +01:00
parent 2e71e14dc4
commit 334ff40716
3 changed files with 28 additions and 43 deletions

View File

@@ -833,24 +833,21 @@ void MyFrame::BuildDataViewCtrl(wxPanel* parent, unsigned int nPanel, unsigned l
m_list_model = new MyListModel; m_list_model = new MyListModel;
m_ctrl[Page_List]->AssociateModel( m_list_model.get() ); m_ctrl[Page_List]->AssociateModel( m_list_model.get() );
m_ctrl[Page_List]->AppendToggleColumn(L"\u2714", wxDataViewColumn* const colCheckIconText = new wxDataViewColumn
MyListModel::Col_Toggle, (
wxDATAVIEW_CELL_ACTIVATABLE, L"\u2714 + icon + text",
wxCOL_WIDTH_AUTOSIZE); new wxDataViewCheckIconTextRenderer(),
MyListModel::Col_ToggleIconText,
wxCOL_WIDTH_AUTOSIZE
);
m_ctrl[Page_List]->AppendColumn(colCheckIconText);
// the various columns
m_ctrl[Page_List]->AppendTextColumn("editable string", m_ctrl[Page_List]->AppendTextColumn("editable string",
MyListModel::Col_EditableText, MyListModel::Col_EditableText,
wxDATAVIEW_CELL_EDITABLE, wxDATAVIEW_CELL_EDITABLE,
wxCOL_WIDTH_AUTOSIZE, wxCOL_WIDTH_AUTOSIZE,
wxALIGN_NOT, wxALIGN_NOT,
wxDATAVIEW_COL_SORTABLE); wxDATAVIEW_COL_SORTABLE);
m_ctrl[Page_List]->AppendIconTextColumn("icon",
MyListModel::Col_IconText,
wxDATAVIEW_CELL_EDITABLE,
wxCOL_WIDTH_AUTOSIZE,
wxALIGN_NOT,
wxDATAVIEW_COL_REORDERABLE | wxDATAVIEW_COL_SORTABLE);
m_ctrl[Page_List]->AppendDateColumn("date", m_ctrl[Page_List]->AppendDateColumn("date",
MyListModel::Col_Date); MyListModel::Col_Date);

View File

@@ -437,13 +437,6 @@ void MyListModel::GetValueByRow( wxVariant &variant,
{ {
switch ( col ) switch ( col )
{ {
case Col_Toggle:
if (row >= m_toggleColValues.size())
variant = false;
else
variant = m_toggleColValues[row];
break;
case Col_EditableText: case Col_EditableText:
if (row >= m_textColValues.GetCount()) if (row >= m_textColValues.GetCount())
variant = wxString::Format( "virtual row %d", row ); variant = wxString::Format( "virtual row %d", row );
@@ -451,15 +444,22 @@ void MyListModel::GetValueByRow( wxVariant &variant,
variant = m_textColValues[ row ]; variant = m_textColValues[ row ];
break; break;
case Col_IconText: case Col_ToggleIconText:
{ {
wxString text; wxString text;
wxCheckBoxState state;
if ( row >= m_iconColValues.GetCount() ) if ( row >= m_iconColValues.GetCount() )
{
text = "virtual icon"; text = "virtual icon";
state = wxCHK_UNDETERMINED;
}
else else
{
text = m_iconColValues[row]; text = m_iconColValues[row];
state = m_toggleColValues[row] ? wxCHK_CHECKED : wxCHK_UNCHECKED;
}
variant << wxDataViewIconText(text, m_icon[row % 2]); variant << wxDataViewCheckIconText(text, m_icon[row % 2], state);
} }
break; break;
@@ -505,9 +505,6 @@ bool MyListModel::GetAttrByRow( unsigned int row, unsigned int col,
{ {
switch ( col ) switch ( col )
{ {
case Col_Toggle:
return false;
case Col_EditableText: case Col_EditableText:
case Col_Date: case Col_Date:
if (row < m_toggleColValues.size()) if (row < m_toggleColValues.size())
@@ -521,7 +518,7 @@ bool MyListModel::GetAttrByRow( unsigned int row, unsigned int col,
} }
return false; return false;
case Col_IconText: case Col_ToggleIconText:
if ( !(row % 2) ) if ( !(row % 2) )
return false; return false;
attr.SetColour(*wxYELLOW); attr.SetColour(*wxYELLOW);
@@ -578,15 +575,8 @@ bool MyListModel::SetValueByRow( const wxVariant &variant,
{ {
switch ( col ) switch ( col )
{ {
case Col_Toggle:
if (row >= m_toggleColValues.size())
return false;
m_toggleColValues[row] = variant.GetBool();
return true;
case Col_EditableText: case Col_EditableText:
case Col_IconText: case Col_ToggleIconText:
if (row >= m_textColValues.GetCount()) if (row >= m_textColValues.GetCount())
{ {
// the item is not in the range of the items // the item is not in the range of the items
@@ -600,11 +590,13 @@ bool MyListModel::SetValueByRow( const wxVariant &variant,
{ {
m_textColValues[row] = variant.GetString(); m_textColValues[row] = variant.GetString();
} }
else // col == Col_IconText else // col == Col_ToggleIconText
{ {
wxDataViewIconText iconText; wxDataViewCheckIconText checkIconText;
iconText << variant; checkIconText << variant;
m_iconColValues[row] = iconText.GetText(); m_toggleColValues[row] =
checkIconText.GetCheckedState() == wxCHK_CHECKED;
m_iconColValues[row] = checkIconText.GetText();
} }
return true; return true;

View File

@@ -208,9 +208,8 @@ class MyListModel: public wxDataViewVirtualListModel
public: public:
enum enum
{ {
Col_Toggle, Col_ToggleIconText,
Col_EditableText, Col_EditableText,
Col_IconText,
Col_Date, Col_Date,
Col_TextWithAttr, Col_TextWithAttr,
Col_Custom, Col_Custom,
@@ -236,11 +235,8 @@ public:
virtual wxString GetColumnType( unsigned int col ) const wxOVERRIDE virtual wxString GetColumnType( unsigned int col ) const wxOVERRIDE
{ {
if (col == Col_Toggle) if (col == Col_ToggleIconText)
return "bool"; return wxDataViewCheckIconTextRenderer::GetDefaultType();
if (col == Col_IconText)
return "wxDataViewIconText";
return "string"; return "string";
} }