]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/dataview/dataview.cpp
Include wx/filedlg.h when not WX_PRECOMP.
[wxWidgets.git] / samples / dataview / dataview.cpp
index c69df0c9ecac2b170934cf0e96649f0287071a8d..7132c5d9caa79e09a471970e5b90e63f3c1042a1 100644 (file)
@@ -26,6 +26,7 @@
 #include "wx/choicdlg.h"
 #include "wx/numdlg.h"
 #include "wx/dataview.h"
+#include "wx/spinctrl.h"
 
 #ifndef __WXMSW__
     #include "../sample.xpm"
@@ -117,7 +118,7 @@ public:
                 variant = tmp;
             }
         }
-    virtual bool SetValue( wxVariant &value, unsigned int col, unsigned int row )
+    virtual bool SetValue( const wxVariant &value, unsigned int col, unsigned int row )
         {
             if (col == 6)
             {
@@ -159,7 +160,6 @@ public:
         {
             wxMessageDialog dlg( NULL, wxT("string too long") , wxT("Error") );
             dlg.ShowModal();
-            // Activate();
             return false;
         }
         
@@ -220,6 +220,63 @@ private:
     wxString m_colour;
 };
 
+// -------------------------------------
+// MySpinCtrlInPlaceRenderer
+// -------------------------------------
+
+class MySpinCtrlInPlaceRenderer: public wxDataViewCustomRenderer
+{
+public:
+    MySpinCtrlInPlaceRenderer() :
+        wxDataViewCustomRenderer( wxT("long"), wxDATAVIEW_CELL_EDITABLE ) { }
+    
+    
+    virtual bool HasEditorCtrl()
+        { 
+            return true; 
+        }
+    virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value )
+        { 
+            long l = value;
+            return new wxSpinCtrl( parent, wxID_ANY, wxEmptyString, 
+                    labelRect.GetTopLeft(), labelRect.GetSize(), 0, 0, 100, l );
+        }
+    virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value )
+        { 
+            wxSpinCtrl *sc = (wxSpinCtrl*) editor;
+            long l = sc->GetValue();
+            value = l;
+            return true;
+        }
+        
+    bool Render( wxRect rect, wxDC *dc, int WXUNUSED(state) )
+    {
+        wxString str;
+        str.Printf( wxT("%d"), (int) m_data );
+        dc->SetTextForeground( *wxBLACK );
+        dc->DrawText( str, rect.x, rect.y );
+        return true;
+    }
+    wxSize GetSize() const
+    {
+        return wxSize(80,16);
+    }
+    bool SetValue( const wxVariant &value )
+    {
+        m_data = value.GetLong();
+        return true;
+    }
+    bool GetValue( wxVariant &value ) const
+    {
+        value = m_data;
+        return true;
+    }
+    
+    
+private:
+    long    m_data;
+};
+
 // -------------------------------------
 // MyUnsortedTextModel
 // -------------------------------------
@@ -237,6 +294,14 @@ public:
         m_list.Add( wxT("of") );
         m_list.Add( wxT("words.") );
         
+        m_ilist.Add( 0 );
+        m_ilist.Add( 1);
+        m_ilist.Add( 2 );
+        m_ilist.Add( 3 );
+        m_ilist.Add( 4 );
+        m_ilist.Add( 5 );
+        m_ilist.Add( 6 );
+        
         m_bitmap = wxBitmap( null_xpm );
     }
 
@@ -247,7 +312,7 @@ public:
 
     virtual unsigned int GetColumnCount() const 
     { 
-        return 2
+        return 4
     }
 
     virtual wxString GetColumnType( unsigned int WXUNUSED(col) ) const 
@@ -261,23 +326,34 @@ public:
         {
             variant = m_list[row];
             return;
-        }
+        } else
         if ((col == 2) || (col == 3))
         {
             variant << m_bitmap;
             return;
+        } else
+        if (col == 4)
+        {
+            variant = (long) m_ilist[row];
+            return;
         }
+        
         wxString tmp;
         tmp.Printf( wxT("item(%d;%d)"), (int)row, (int)col );
         variant = tmp;
     }
 
-    virtual bool SetValue( wxVariant &variant, unsigned int col, unsigned int row )
+    virtual bool SetValue( const wxVariant &variant, unsigned int col, unsigned int row )
     {
         if (col == 0)
         {
             m_list[row] = variant.GetString();
             return true;
+        } else
+        if (col == 4)
+        {
+            m_ilist[row] = variant.GetLong();
+            return true;
         }
         return false;
 
@@ -286,28 +362,33 @@ public:
     void AppendRow( const wxString &text )
     {
         m_list.Add( text );
+        m_ilist.Add( 0 );
         RowAppended();
     }
 
     void PrependRow( const wxString &text )
     {
         m_list.Insert( text, 0 );
+        m_ilist.Insert( 0, 0 );
         RowPrepended();
     }
 
     void InsertRowAt1( const wxString &text )
     {
         m_list.Insert( text, 1 );
+        m_ilist.Insert( 0, 1 );
         RowInserted( 1 );
     }
 
     void DeleteRow( unsigned int index )
     {
         m_list.RemoveAt( index );
+        m_ilist.RemoveAt( index );
         RowDeleted( index );
     }
 
     wxArrayString m_list;
+    wxArrayInt m_ilist;
     wxBitmap m_bitmap;
 };
 
@@ -601,10 +682,12 @@ void MyFrame::CreateDataViewControls()
         style |= wxDV_MULTIPLE;
     if (GetMenuBar()->FindItem(ID_NO_HEADER_MODE)->IsChecked())
         style |= wxDV_NO_HEADER;
+#if 0
     if (GetMenuBar()->FindItem(ID_HORIZ_RULES_MODE)->IsChecked())
         style |= wxDV_HORIZ_RULES;
     if (GetMenuBar()->FindItem(ID_VERT_RULES_MODE)->IsChecked())
         style |= wxDV_VERT_RULES;
+#endif
 
 
     // Left wxDataViewCtrl
@@ -612,6 +695,9 @@ void MyFrame::CreateDataViewControls()
                                         wxDefaultSize, style );
 
 
+    wxDataViewTextRenderer *text_renderer;
+    wxDataViewColumn *column;
+    
     wxObjectDataPtr<MyTextModel> model(new MyTextModel);
     dataview_left->AssociateModel( model.get() );
 
@@ -620,10 +706,8 @@ void MyFrame::CreateDataViewControls()
     dataview_left->AppendTextColumn( wxT("Second"), 1, wxDATAVIEW_CELL_INERT, -1,
                                      DEFAULT_ALIGN );
 
-    wxDataViewTextRenderer *text_renderer = 
-        new wxDataViewTextRenderer( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
-    wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), text_renderer, 2,
-                                                     -1, DEFAULT_ALIGN );
+    text_renderer = new wxDataViewTextRenderer( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
+    column = new wxDataViewColumn( wxT("editable"), text_renderer, 2, -1, DEFAULT_ALIGN );
     dataview_left->AppendColumn( column );
 
     dataview_left->AppendToggleColumn( wxT("fourth"), 3, wxDATAVIEW_CELL_INERT, -1, 
@@ -638,7 +722,6 @@ void MyFrame::CreateDataViewControls()
 
     dataview_left->AppendDateColumn( wxT("date"), 6, wxDATAVIEW_CELL_INERT, -1, DEFAULT_ALIGN );
 
-
     // Right wxDataViewCtrl using the same model
     dataview_right = new wxDataViewCtrl( m_panelRight, wxID_ANY );
     dataview_right->AssociateModel( model.get() );
@@ -948,6 +1031,10 @@ MySortingFrame::MySortingFrame(wxFrame *frame, wxChar *title, int x, int y, int
     dataview_right->AppendColumn( column );
     
     dataview_right->AppendTextColumn( wxT("second"), 1 );
+    
+    MySpinCtrlInPlaceRenderer *sr = new MySpinCtrlInPlaceRenderer;
+    column = new wxDataViewColumn( wxT("spin"), sr, 4, -1, wxALIGN_CENTER );
+    dataview_right->AppendColumn( column );
 
     // layout dataview controls.