void OnPrependList(wxCommandEvent& event);
void OnDeleteList(wxCommandEvent& event);
+ // Fourth page.
+ void OnDeleteTreeItem(wxCommandEvent& event);
+ void OnDeleteAllTreeItems(wxCommandEvent& event);
+ void OnAddTreeItem(wxCommandEvent& event);
+ void OnAddTreeContainerItem(wxCommandEvent& event);
void OnValueChanged( wxDataViewEvent &event );
class MyCustomRenderer: public wxDataViewCustomRenderer
{
public:
- MyCustomRenderer( wxDataViewCellMode mode, int alignment ) :
- wxDataViewCustomRenderer( wxString("long"), mode, alignment )
- { m_height = 25; }
+ MyCustomRenderer()
+ : wxDataViewCustomRenderer("string",
+ wxDATAVIEW_CELL_ACTIVATABLE,
+ wxALIGN_CENTER)
+ { }
- virtual bool Render( wxRect rect, wxDC *dc, int WXUNUSED(state) )
+ virtual bool Render( wxRect rect, wxDC *dc, int state )
{
- dc->SetBrush( *wxRED_BRUSH );
+ dc->SetBrush( *wxLIGHT_GREY_BRUSH );
dc->SetPen( *wxTRANSPARENT_PEN );
- dc->DrawRectangle( rect.Deflate(2) );
+
+ rect.Deflate(2);
+ dc->DrawRoundedRectangle( rect, 5 );
+
+ RenderText(m_value,
+ 0, // no offset
+ wxRect(dc->GetTextExtent(m_value)).CentreIn(rect),
+ dc,
+ state);
return true;
}
virtual wxSize GetSize() const
{
- //return wxSize(60,m_height);
return wxSize(60,20);
}
virtual bool SetValue( const wxVariant &value )
{
- m_height = value;
+ m_value = value.GetString();
return true;
}
virtual bool GetValue( wxVariant &WXUNUSED(value) ) const { return true; }
private:
- long m_height;
+ wxString m_value;
};
ID_PREPEND_LIST = 200,
ID_DELETE_LIST = 201,
ID_GOTO = 202,
- ID_ADD_MANY = 203
+ ID_ADD_MANY = 203,
+ // Fourth page.
+ ID_DELETE_TREE_ITEM = 400,
+ ID_DELETE_ALL_TREE_ITEMS = 401,
+ ID_ADD_TREE_ITEM = 402,
+ ID_ADD_TREE_CONTAINER_ITEM = 403
};
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_BUTTON( ID_DELETE_LIST, MyFrame::OnDeleteList )
EVT_BUTTON( ID_GOTO, MyFrame::OnGoto)
EVT_BUTTON( ID_ADD_MANY, MyFrame::OnAddMany)
+ // Fourth page.
+ EVT_BUTTON( ID_DELETE_TREE_ITEM, MyFrame::OnDeleteTreeItem )
+ EVT_BUTTON( ID_DELETE_ALL_TREE_ITEMS, MyFrame::OnDeleteAllTreeItems )
+ EVT_BUTTON( ID_ADD_TREE_ITEM, MyFrame::OnAddTreeItem )
+ EVT_BUTTON( ID_ADD_TREE_CONTAINER_ITEM, MyFrame::OnAddTreeContainerItem )
EVT_DATAVIEW_ITEM_VALUE_CHANGED( ID_MUSIC_CTRL, MyFrame::OnValueChanged )
wxMenu *file_menu = new wxMenu;
file_menu->Append(ID_CLEARLOG, "&Clear log\tCtrl-L");
- file_menu->Append(ID_FOREGROUND_COLOUR, "Set &foreground colour...\tCtrl-F");
+ file_menu->Append(ID_FOREGROUND_COLOUR, "Set &foreground colour...\tCtrl-S");
file_menu->Append(ID_BACKGROUND_COLOUR, "Set &background colour...\tCtrl-B");
file_menu->Append(ID_STYLE_MENU, "&Style", style_menu);
file_menu->AppendSeparator();
wxPanel *fourthPanel = new wxPanel( m_notebook, wxID_ANY );
BuildDataViewCtrl(fourthPanel, 3); // sets m_ctrl[3]
+ // Buttons
+ wxBoxSizer *button_sizer4 = new wxBoxSizer( wxHORIZONTAL );
+ button_sizer4->Add( new wxButton( fourthPanel, ID_DELETE_TREE_ITEM, "Delete Selected"), 0, wxALL, 10 );
+ button_sizer4->Add( new wxButton( fourthPanel, ID_DELETE_ALL_TREE_ITEMS, "Delete All"), 0, wxALL, 10 );
+ button_sizer4->Add( new wxButton( fourthPanel, ID_ADD_TREE_ITEM, "Add Item"), 0, wxALL, 10 );
+ button_sizer4->Add( new wxButton( fourthPanel, ID_ADD_TREE_CONTAINER_ITEM, "Add Container"), 0, wxALL, 10 );
wxSizer *fourthPanelSz = new wxBoxSizer( wxVERTICAL );
fourthPanelSz->Add(m_ctrl[3], 1, wxGROW|wxALL, 5);
+ fourthPanelSz->Add(button_sizer4);
fourthPanel->SetSizerAndFit(fourthPanelSz);
// column 5 of the view control:
- MyCustomRenderer *cr = new MyCustomRenderer( wxDATAVIEW_CELL_ACTIVATABLE, wxALIGN_RIGHT );
+ MyCustomRenderer *cr = new MyCustomRenderer;
wxDataViewColumn *column5 =
new wxDataViewColumn( "custom", cr, 5, -1, wxALIGN_LEFT,
wxDATAVIEW_COL_RESIZABLE );
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,
+ MyListModel::Col_TextWithAttr)
+ );
+
m_ctrl[1]->AppendColumn(
- new wxDataViewColumn("attributes", new wxDataViewTextRenderer, 2 ));
+ new wxDataViewColumn("custom renderer",
+ new MyCustomRenderer,
+ MyListModel::Col_Custom)
+ );
}
break;
wxASSERT(!m_ctrl[3]);
wxDataViewTreeCtrl* tc =
new wxDataViewTreeCtrl( parent, wxID_ANY, wxDefaultPosition,
- wxDefaultSize, style );
+ wxDefaultSize, style | wxDV_NO_HEADER );
m_ctrl[3] = tc;
wxImageList *ilist = new wxImageList( 16, 16 );
m_list_model->AddMany();
}
+// ----------------------------------------------------------------------------
+// MyFrame - event handlers for the fourth page
+// ----------------------------------------------------------------------------
+
+void MyFrame::OnDeleteTreeItem(wxCommandEvent& WXUNUSED(event))
+{
+ wxDataViewTreeCtrl* ctrl = (wxDataViewTreeCtrl*) m_ctrl[3];
+ wxDataViewItem selected = ctrl->GetSelection();
+ if (!selected.IsOk())
+ return;
+
+ ctrl->DeleteItem(selected);
+}
+
+void MyFrame::OnDeleteAllTreeItems(wxCommandEvent& WXUNUSED(event))
+{
+ wxDataViewTreeCtrl* ctrl = (wxDataViewTreeCtrl*) m_ctrl[3];
+ ctrl->DeleteAllItems();
+}
+
+void MyFrame::OnAddTreeItem(wxCommandEvent& WXUNUSED(event))
+{
+ wxDataViewTreeCtrl* ctrl = (wxDataViewTreeCtrl*) m_ctrl[3];
+ wxDataViewItem selected = ctrl->GetSelection();
+ if (ctrl->IsContainer(selected))
+ ctrl->AppendItem( selected, "Item", 0 );
+}
+
+void MyFrame::OnAddTreeContainerItem(wxCommandEvent& WXUNUSED(event))
+{
+ wxDataViewTreeCtrl* ctrl = (wxDataViewTreeCtrl*) m_ctrl[3];
+ wxDataViewItem selected = ctrl->GetSelection();
+ if (ctrl->IsContainer(selected))
+ ctrl->AppendContainer(selected, "Container", 0 );
+}
+