X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/205bdf2069b93743848d69a39c0bd4a32e9ff8b7..2ac06991a797c3a97e47f1f1f3ca313e17c78a10:/samples/dataview/dataview.cpp diff --git a/samples/dataview/dataview.cpp b/samples/dataview/dataview.cpp index 7e65b9b9a6..1f43e05adb 100644 --- a/samples/dataview/dataview.cpp +++ b/samples/dataview/dataview.cpp @@ -91,6 +91,11 @@ public: // event handlers 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 ); @@ -150,15 +155,25 @@ private: 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; } @@ -182,20 +197,19 @@ public: 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; }; @@ -261,7 +275,12 @@ enum 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) @@ -286,6 +305,11 @@ 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 ) @@ -339,7 +363,7 @@ MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int 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(); @@ -420,9 +444,16 @@ MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int 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); @@ -523,7 +554,7 @@ void MyFrame::BuildDataViewCtrl(wxPanel* parent, unsigned int nPanel, unsigned l // 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 ); @@ -545,10 +576,23 @@ void MyFrame::BuildDataViewCtrl(wxPanel* parent, unsigned int nPanel, unsigned l 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; @@ -582,7 +626,7 @@ void MyFrame::BuildDataViewCtrl(wxPanel* parent, unsigned int nPanel, unsigned l 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 ); @@ -1024,3 +1068,39 @@ void MyFrame::OnAddMany(wxCommandEvent& WXUNUSED(event)) 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 ); +} +