]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/dataview/dataview.cpp
Moved property unattachment code from wxPropertyGridInterface::RemoveProperty() to...
[wxWidgets.git] / samples / dataview / dataview.cpp
index 9b80b93b69784e1e6ba7a08a319b6a11528a222b..1f43e05adbc9bbc40ae8d0216faa10569ac060e2 100644 (file)
@@ -28,6 +28,7 @@
 #include "wx/datetime.h"
 #include "wx/splitter.h"
 #include "wx/aboutdlg.h"
+#include "wx/colordlg.h"
 #include "wx/choicdlg.h"
 #include "wx/numdlg.h"
 #include "wx/spinctrl.h"
@@ -73,6 +74,8 @@ public:
 public:     // event handlers
 
     void OnStyleChange(wxCommandEvent& event);
+    void OnSetBackgroundColour(wxCommandEvent& event);
+    void OnSetForegroundColour(wxCommandEvent& event);
     void OnQuit(wxCommandEvent& event);
     void OnAbout(wxCommandEvent& event);
 
@@ -88,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 );
 
@@ -147,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;
     }
 
@@ -179,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;
 };
 
 
@@ -227,6 +244,8 @@ bool MyApp::OnInit()
 enum
 {
     ID_CLEARLOG = wxID_HIGHEST+1,
+    ID_BACKGROUND_COLOUR,
+    ID_FOREGROUND_COLOUR,
     ID_STYLE_MENU,
 
     // file menu
@@ -256,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)
@@ -265,6 +289,9 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU( ID_ABOUT, MyFrame::OnAbout )
     EVT_MENU( ID_CLEARLOG, MyFrame::OnClearLog )
 
+    EVT_MENU( ID_FOREGROUND_COLOUR, MyFrame::OnSetForegroundColour )
+    EVT_MENU( ID_BACKGROUND_COLOUR, MyFrame::OnSetBackgroundColour )
+
     EVT_NOTEBOOK_PAGE_CHANGED( wxID_ANY, MyFrame::OnPageChanged )
 
     EVT_BUTTON( ID_ADD_MOZART, MyFrame::OnAddMozart )
@@ -278,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 )
 
@@ -330,7 +362,9 @@ MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int
     style_menu->AppendCheckItem(ID_VERT_RULES, "Display vertical rules");
 
     wxMenu *file_menu = new wxMenu;
-    file_menu->Append(ID_CLEARLOG, "Clear log");
+    file_menu->Append(ID_CLEARLOG, "&Clear log\tCtrl-L");
+    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();
     file_menu->Append(ID_EXIT, "E&xit");
@@ -410,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);
 
 
@@ -513,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 );
@@ -535,15 +576,23 @@ void MyFrame::BuildDataViewCtrl(wxPanel* parent, unsigned int nPanel, unsigned l
             m_ctrl[1]->AssociateModel( m_list_model.get() );
 
             // the various columns
-#if 1
-            m_ctrl[1]->AppendTextColumn("editable string", 0, wxDATAVIEW_CELL_EDITABLE, 120);
-            m_ctrl[1]->AppendIconTextColumn(wxIcon(wx_small_xpm), 1, wxDATAVIEW_CELL_INERT )->SetTitle( "icon");
-#else
-            m_ctrl[1]->AppendTextColumn("editable string", 0, wxDATAVIEW_CELL_EDITABLE);
-            m_ctrl[1]->AppendIconTextColumn("icon", 1, wxDATAVIEW_CELL_INERT);
-#endif
+            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 wxDataViewTextRendererAttr, 2 ));
+                new wxDataViewColumn("attributes",
+                                     new wxDataViewTextRenderer,
+                                     MyListModel::Col_TextWithAttr)
+            );
+
+            m_ctrl[1]->AppendColumn(
+                new wxDataViewColumn("custom renderer",
+                                     new MyCustomRenderer,
+                                     MyListModel::Col_Custom)
+            );
         }
         break;
 
@@ -577,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 );
@@ -611,6 +660,28 @@ void MyFrame::OnClearLog( wxCommandEvent& WXUNUSED(event) )
     m_log->Clear();
 }
 
+void MyFrame::OnSetForegroundColour(wxCommandEvent& WXUNUSED(event))
+{
+    wxDataViewCtrl * const dvc = m_ctrl[m_notebook->GetSelection()];
+    wxColour col = wxGetColourFromUser(this, dvc->GetForegroundColour());
+    if ( col.IsOk() )
+    {
+        dvc->SetForegroundColour(col);
+        Refresh();
+    }
+}
+
+void MyFrame::OnSetBackgroundColour(wxCommandEvent& WXUNUSED(event))
+{
+    wxDataViewCtrl * const dvc = m_ctrl[m_notebook->GetSelection()];
+    wxColour col = wxGetColourFromUser(this, dvc->GetBackgroundColour());
+    if ( col.IsOk() )
+    {
+        dvc->SetBackgroundColour(col);
+        Refresh();
+    }
+}
+
 void MyFrame::OnPageChanged( wxBookCtrlEvent& WXUNUSED(event) )
 {
     unsigned int nPanel = m_notebook->GetSelection();
@@ -692,7 +763,7 @@ void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
     wxAboutDialogInfo info;
     info.SetName(_("DataView sample"));
     info.SetDescription(_("This sample demonstrates wxDataViewCtrl"));
-    info.SetCopyright(_T("(C) 2007-2009 Robert Roebling"));
+    info.SetCopyright(wxT("(C) 2007-2009 Robert Roebling"));
     info.AddDeveloper("Robert Roebling");
     info.AddDeveloper("Francesco Montorsi");
 
@@ -997,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 );
+}
+