]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/dataview/dataview.cpp
For whatever reason, font-size 9 is now hardly readable on Mac. Using default font...
[wxWidgets.git] / samples / dataview / dataview.cpp
index eb84440a760ada75d3122d690a69ab1aed4ec78f..be70dd56be48e8565ed998014756901b7c22577d 100644 (file)
@@ -133,14 +133,14 @@ public:
 };
 
 // -------------------------------------
-// MyCustomCell
+// MyCustomRenderer
 // -------------------------------------
 
-class MyCustomCell: public wxDataViewCustomCell
+class MyCustomRenderer: public wxDataViewCustomRenderer
 {
 public:
-    MyCustomCell() :
-        wxDataViewCustomCell( wxT("string"), wxDATAVIEW_CELL_ACTIVATABLE )
+    MyCustomRenderer() :
+        wxDataViewCustomRenderer( wxT("string"), wxDATAVIEW_CELL_ACTIVATABLE )
     {
         m_colour = wxT("black");
     }
@@ -294,6 +294,9 @@ enum my_events
     ID_INSERT_ROW_LEFT,
     ID_DELETE_ROW_LEFT,
     ID_EDIT_ROW_LEFT,
+    
+    ID_SELECT,
+    ID_UNSELECT_ALL,
 
     ID_APPEND_ROW_RIGHT,
     ID_PREPEND_ROW_RIGHT,
@@ -302,7 +305,8 @@ enum my_events
     ID_EDIT_ROW_RIGHT,
     
     ID_SORTED,
-    ID_UNSORTED
+    ID_UNSORTED,
+    ID_ACTIVATED
 };
 
 class MySortingFrame: public wxFrame
@@ -327,8 +331,15 @@ public:
     void OnDeleteRowRight(wxCommandEvent& event);
     void OnEditRowRight(wxCommandEvent& event);
 
+    void OnSelect(wxCommandEvent& event);
+    void OnUnselectAll(wxCommandEvent& event);
+    
     void OnSelectedUnsorted(wxDataViewEvent &event);
     void OnSelectedSorted(wxDataViewEvent &event);
+    void OnActivatedUnsorted(wxDataViewEvent &event);
+
+    void OnHeaderClickSorted(wxDataViewEvent &event);
+    void OnHeaderClickUnsorted(wxDataViewEvent &event);
 
 private:
     wxDataViewCtrl* dataview_left;
@@ -337,7 +348,8 @@ private:
     wxLog          *m_logOld;
     wxTextCtrl     *m_logWindow;
 
-    MyUnsortedTextModel *m_unsorted_model;
+    MyUnsortedTextModel        *m_unsorted_model;
+    wxDataViewSortedListModel  *m_sorted_model;
 
     DECLARE_EVENT_TABLE()
 };
@@ -401,14 +413,14 @@ MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
     dataview_left->AppendTextColumn( wxT("first"), 0 );
     dataview_left->AppendTextColumn( wxT("second"), 1 );
 
-    wxDataViewTextCell *text_cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
-    wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), text_cell, 2 );
+    wxDataViewTextRenderer *text_renderer = new wxDataViewTextRenderer( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
+    wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), text_renderer, 2 );
     dataview_left->AppendColumn( column );
 
     dataview_left->AppendToggleColumn( wxT("fourth"), 3 );
 
-    MyCustomCell *custom_cell = new MyCustomCell;
-    column = new wxDataViewColumn( wxT("custom"), custom_cell, 4 );
+    MyCustomRenderer *custom_renderer = new MyCustomRenderer;
+    column = new wxDataViewColumn( wxT("custom"), custom_renderer, 4 );
     dataview_left->AppendColumn( column );
 
     dataview_left->AppendProgressColumn( wxT("progress"), 5 );
@@ -419,13 +431,13 @@ MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
     dataview_right = new wxDataViewCtrl( panel, wxID_ANY );
     dataview_right->AssociateModel( model );
 
-    text_cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
-    column = new wxDataViewColumn( wxT("editable"), text_cell, 2 );
+    text_renderer = new wxDataViewTextRenderer( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
+    column = new wxDataViewColumn( wxT("editable"), text_renderer, 2 );
     dataview_right->AppendColumn( column );
     dataview_right->AppendTextColumn( wxT("first"), 0 );
     dataview_right->AppendTextColumn( wxT("second"), 1 );
-    wxDataViewToggleCell *toggle_cell = new wxDataViewToggleCell( wxT("bool"), wxDATAVIEW_CELL_ACTIVATABLE );
-    column = new wxDataViewColumn( wxT("bool"), toggle_cell, 3, 30 );
+    wxDataViewToggleRenderer *toggle_renderer = new wxDataViewToggleRenderer( wxT("bool"), wxDATAVIEW_CELL_ACTIVATABLE );
+    column = new wxDataViewColumn( wxT("bool"), toggle_renderer, 3, 30 );
     dataview_right->AppendColumn( column );
 
     dataview_right->AppendDateColumn( wxT("date"), 6 );
@@ -461,8 +473,13 @@ BEGIN_EVENT_TABLE(MySortingFrame,wxFrame)
     EVT_BUTTON( ID_PREPEND_ROW_LEFT, MySortingFrame::OnPrependRowLeft )
     EVT_BUTTON( ID_INSERT_ROW_LEFT, MySortingFrame::OnInsertRowLeft )
     EVT_BUTTON( ID_DELETE_ROW_LEFT, MySortingFrame::OnDeleteRowLeft )
+    EVT_BUTTON( ID_SELECT, MySortingFrame::OnSelect )
+    EVT_BUTTON( ID_UNSELECT_ALL, MySortingFrame::OnUnselectAll )
     EVT_DATAVIEW_ROW_SELECTED( ID_SORTED, MySortingFrame::OnSelectedSorted )
     EVT_DATAVIEW_ROW_SELECTED( ID_UNSORTED, MySortingFrame::OnSelectedUnsorted )
+    EVT_DATAVIEW_ROW_ACTIVATED( ID_UNSORTED, MySortingFrame::OnActivatedUnsorted )
+    EVT_DATAVIEW_COLUMN_HEADER_CLICK( ID_SORTED, MySortingFrame::OnHeaderClickSorted )
+    EVT_DATAVIEW_COLUMN_HEADER_CLICK( ID_UNSORTED, MySortingFrame::OnHeaderClickUnsorted )
 END_EVENT_TABLE()
 
 MySortingFrame::MySortingFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
@@ -494,21 +511,20 @@ MySortingFrame::MySortingFrame(wxFrame *frame, wxChar *title, int x, int y, int
 
     m_unsorted_model = new MyUnsortedTextModel;
     dataview_left->AssociateModel( m_unsorted_model );
-    wxDataViewTextCell *text_cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
-    wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), text_cell, 0 );
+    wxDataViewTextRenderer *text_renderer = new wxDataViewTextRenderer( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
+    wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), text_renderer, 0 );
     dataview_left->AppendColumn( column );
     dataview_left->AppendTextColumn( wxT("second"), 1 );
-    dataview_left->AppendColumn( new wxDataViewColumn( wxT("icon"), new wxDataViewBitmapCell, 2, 25 ) );
-    dataview_left->AppendColumn( new wxDataViewColumn( wxT("icon"), new wxDataViewBitmapCell, 3, 25 ) );
+    dataview_left->AppendColumn( new wxDataViewColumn( wxBitmap(null_xpm), new wxDataViewBitmapRenderer, 2, 25 ) );
+    dataview_left->AppendColumn( new wxDataViewColumn( wxT("icon"), new wxDataViewBitmapRenderer, 3, 25 ) );
 
     // Right wxDataViewCtrl using the sorting model
     dataview_right = new wxDataViewCtrl( this, ID_SORTED );
     
-    wxDataViewSortedListModel *sorted_model =
-        new wxDataViewSortedListModel( m_unsorted_model );
-    dataview_right->AssociateModel( sorted_model );
-    text_cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
-    column = new wxDataViewColumn( wxT("editable"), text_cell, 0, -1, wxDATAVIEW_COL_SORTABLE|wxDATAVIEW_COL_RESIZABLE );
+    m_sorted_model = new wxDataViewSortedListModel( m_unsorted_model );
+    dataview_right->AssociateModel( m_sorted_model );
+    text_renderer = new wxDataViewTextRenderer( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
+    column = new wxDataViewColumn( wxT("editable"), text_renderer, 0, -1, wxDATAVIEW_COL_SORTABLE|wxDATAVIEW_COL_RESIZABLE );
     dataview_right->AppendColumn( column );
     
     dataview_right->AppendTextColumn( wxT("second"), 1 );
@@ -528,6 +544,9 @@ MySortingFrame::MySortingFrame(wxFrame *frame, wxChar *title, int x, int y, int
     left_sizer->Add( new wxButton( this, ID_INSERT_ROW_LEFT, wxT("Insert") ), 0, wxALL, 5 );
     left_sizer->Add( new wxButton( this, ID_DELETE_ROW_LEFT, wxT("Delete second") ), 0, wxALL, 5 );
     left_sizer->Add( new wxButton( this, ID_EDIT_ROW_LEFT, wxT("Edit") ), 0, wxALL, 5 );
+    left_sizer->Add( 5,5 );
+    left_sizer->Add( new wxButton( this, ID_SELECT, wxT("Select third") ), 0, wxALL, 5 );
+    left_sizer->Add( new wxButton( this, ID_UNSELECT_ALL, wxT("Unselect all") ), 0, wxALL, 5 );
     button_sizer->Add( left_sizer );
     button_sizer->Add( 10, 10, 2 );
     wxFlexGridSizer *right_sizer = new wxFlexGridSizer( 2 );
@@ -561,7 +580,11 @@ MySortingFrame::~MySortingFrame()
 
 void MySortingFrame::OnSelectedUnsorted(wxDataViewEvent &event)
 {
-    wxLogMessage( wxT("OnSelected from unsorted list, selected %d"), (int) event.GetRow() );
+    int row = event.GetRow();
+    wxLogMessage( wxT("OnSelected from unsorted list, selected %d"), row );
+    if (row >= 0)
+        wxLogMessage( wxT("wxDataViewCtrl::IsSelected( %d ): %d (as int)"), 
+                    row, (int) dataview_right->IsSelected( row ) );
 }
 
 void MySortingFrame::OnSelectedSorted(wxDataViewEvent &event)
@@ -569,6 +592,39 @@ void MySortingFrame::OnSelectedSorted(wxDataViewEvent &event)
     wxLogMessage( wxT("OnSelected from sorted list, selected %d"), (int) event.GetRow() );
 }
 
+void MySortingFrame::OnActivatedUnsorted(wxDataViewEvent &event)
+{
+    wxLogMessage( wxT("OnActivated from unsorted list, activated %d"), (int) event.GetRow() );
+}
+
+void MySortingFrame::OnHeaderClickSorted(wxDataViewEvent &event)
+{
+    wxDataViewColumn *col = event.GetDataViewColumn();
+    wxLogMessage( wxT("OnHeaderClick from sorted list, column %s"), col->GetTitle().c_str() );
+    
+    if (col->GetTitle() == wxT("editable"))
+    {
+        // this is the sorting column
+        if (col->IsSortOrderAscending())
+        {
+            col->SetSortOrder( false );
+            m_sorted_model->SetAscending( false );
+            m_sorted_model->Resort();
+        }
+        else
+        {
+            col->SetSortOrder( true );
+            m_sorted_model->SetAscending( true );
+            m_sorted_model->Resort();
+        }
+    }
+}
+
+void MySortingFrame::OnHeaderClickUnsorted(wxDataViewEvent &event)
+{
+    wxLogMessage( wxT("OnHeaderClick from unsorted list, column %s"), event.GetDataViewColumn()->GetTitle().c_str() );
+}
+
 void MySortingFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
 {
     Close(true);
@@ -582,6 +638,16 @@ void MySortingFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
     dialog.ShowModal();
 }
 
+void MySortingFrame::OnSelect(wxCommandEvent& WXUNUSED(event))
+{
+    dataview_left->SetSelection( 2 );
+}
+
+void MySortingFrame::OnUnselectAll(wxCommandEvent& WXUNUSED(event))
+{
+    dataview_left->ClearSelection();
+}
+
 void MySortingFrame::OnAppendRowLeft(wxCommandEvent& WXUNUSED(event))
 {
     wxTextEntryDialog dialog( this, wxT("Enter text to append") );