]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxDataViewBitmapCell
authorRobert Roebling <robert@roebling.de>
Tue, 26 Sep 2006 22:17:00 +0000 (22:17 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 26 Sep 2006 22:17:00 +0000 (22:17 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41473 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/dataview.h
samples/dataview/dataview.cpp
src/gtk/dataview.cpp

index 3d650b3cac37cd07ccff970ceaca9fe953399e63..c31e2fc50b0496ccdd80787a8badbce7c224d82d 100644 (file)
@@ -58,6 +58,23 @@ protected:
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextCell)
 };
     
+// --------------------------------------------------------- 
+// wxDataViewBitmapCell
+// --------------------------------------------------------- 
+
+class wxDataViewBitmapCell: public wxDataViewCell
+{
+public:
+    wxDataViewBitmapCell( const wxString &varianttype = wxT("wxBitmap"), 
+                        wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
+
+    bool SetValue( const wxVariant &value );
+    bool GetValue( wxVariant &value );
+    
+protected:
+    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapCell)
+};
+    
 // --------------------------------------------------------- 
 // wxDataViewToggleCell
 // --------------------------------------------------------- 
index d77dabbcc417547152b755f041c3073b564db9fe..4014110cbb37fcf5e08459e91bc3e1172d901c58 100644 (file)
@@ -26,6 +26,8 @@
     #include "../sample.xpm"
 #endif
 
+#include "null.xpm"
+
 #include "wx/dataview.h"
 
 // -------------------------------------
@@ -191,6 +193,8 @@ public:
         m_list.Add( wxT("list") );
         m_list.Add( wxT("of") );
         m_list.Add( wxT("words.") );
+        
+        m_bitmap = wxBitmap( null_xpm );
     }
 
     virtual size_t GetNumberOfRows() { return m_list.GetCount(); }
@@ -203,6 +207,11 @@ public:
             variant = m_list[row];
             return;
         }
+        if (col == 2)
+        {
+            variant = &m_bitmap;
+            return;
+        }
         wxString tmp;
         tmp.Printf( wxT("item(%d;%d)"), (int)row, (int)col );
         variant = tmp;
@@ -243,6 +252,7 @@ public:
     }
 
     wxArrayString m_list;
+    wxBitmap m_bitmap;
 };
 
 // -------------------------------------
@@ -474,6 +484,7 @@ MySortingFrame::MySortingFrame(wxFrame *frame, wxChar *title, int x, int y, int
     wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), text_cell, 0 );
     dataview_left->AppendColumn( column );
     dataview_left->AppendTextColumn( wxT("second"), 1 );
+    dataview_left->AppendColumn( new wxDataViewColumn( wxT("icon"), new wxDataViewBitmapCell, 2 ) );
 
     // Right wxDataViewCtrl using the sorting model
     dataview_right = new wxDataViewCtrl( this, wxID_ANY );
@@ -498,7 +509,7 @@ MySortingFrame::MySortingFrame(wxFrame *frame, wxChar *title, int x, int y, int
     left_sizer->Add( new wxButton( this, ID_APPEND_ROW_LEFT, wxT("Append") ), 0, wxALL, 5 );
     left_sizer->Add( new wxButton( this, ID_PREPEND_ROW_LEFT, wxT("Prepend") ), 0, wxALL, 5 );
     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") ), 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 );
     button_sizer->Add( left_sizer );
     button_sizer->Add( 10, 10, 2 );
@@ -506,7 +517,7 @@ MySortingFrame::MySortingFrame(wxFrame *frame, wxChar *title, int x, int y, int
     right_sizer->Add( new wxButton( this, ID_APPEND_ROW_RIGHT, wxT("Append") ), 0, wxALL, 5 );
     right_sizer->Add( new wxButton( this, ID_PREPEND_ROW_RIGHT, wxT("Prepend") ), 0, wxALL, 5 );
     right_sizer->Add( new wxButton( this, ID_INSERT_ROW_RIGHT, wxT("Insert") ), 0, wxALL, 5 );
-    right_sizer->Add( new wxButton( this, ID_DELETE_ROW_RIGHT, wxT("Delete") ), 0, wxALL, 5 );
+    right_sizer->Add( new wxButton( this, ID_DELETE_ROW_RIGHT, wxT("Delete second") ), 0, wxALL, 5 );
     right_sizer->Add( new wxButton( this, ID_EDIT_ROW_RIGHT, wxT("Edit") ), 0, wxALL, 5 );
     button_sizer->Add( right_sizer );
     button_sizer->Add( 10, 10, 1 );
@@ -555,7 +566,7 @@ void MySortingFrame::OnPrependRowLeft(wxCommandEvent& WXUNUSED(event))
 
 void MySortingFrame::OnInsertRowLeft(wxCommandEvent& WXUNUSED(event))
 {
-    wxTextEntryDialog dialog( this, wxT("Enter text to insert at #2") );
+    wxTextEntryDialog dialog( this, wxT("Enter text to insert before second") );
     if (dialog.ShowModal() == wxID_OK)
     {
         wxString value = dialog.GetValue();
index e4e08902666823b4730336a5db44a8fec7f3e569..f03d36bcdbc07418c5563cfe8dcc53d026a19a56 100644 (file)
@@ -919,7 +919,7 @@ static void wxGtkTextRendererEditedCallback( GtkCellRendererText *renderer,
     model->ValueChanged( model_col, model_row );
 }
 
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewTextCell, wxDataViewCell)
+IMPLEMENT_CLASS(wxDataViewTextCell, wxDataViewCell)
 
 wxDataViewTextCell::wxDataViewTextCell( const wxString &varianttype, wxDataViewCellMode mode ) :
     wxDataViewCell( varianttype, mode )
@@ -964,6 +964,48 @@ bool wxDataViewTextCell::GetValue( wxVariant &value )
     return true;
 }
 
+// --------------------------------------------------------- 
+// wxDataViewBitmapCell
+// --------------------------------------------------------- 
+
+IMPLEMENT_CLASS(wxDataViewBitmapCell, wxDataViewCell)
+
+wxDataViewBitmapCell::wxDataViewBitmapCell( const wxString &varianttype, wxDataViewCellMode mode ) :
+    wxDataViewCell( varianttype, mode )
+{
+    m_renderer = (void*) gtk_cell_renderer_pixbuf_new();
+}
+
+bool wxDataViewBitmapCell::SetValue( const wxVariant &value )
+{
+    if (value.GetType() == wxT("wxBitmap"))
+    {
+        // We could also use the type safe wxGetVariantCast here
+        const wxBitmap *bitmap = (const wxBitmap*) value.GetWxObjectPtr();
+        if (!bitmap) 
+            return false;
+        
+        // This may create a Pixbuf representation in the
+        // wxBitmap object (and it will stay there)
+        GdkPixbuf *pixbuf = bitmap->GetPixbuf();
+        
+        GValue gvalue = { 0, };
+        g_value_init( &gvalue, G_TYPE_OBJECT );
+        g_value_set_object( &gvalue, pixbuf );
+        g_object_set_property( G_OBJECT(m_renderer), "pixbuf", &gvalue );
+        g_value_unset( &gvalue );
+        
+        return true;
+    }
+    
+    return false;
+}
+
+bool wxDataViewBitmapCell::GetValue( wxVariant &value )
+{
+    return false;
+}
+    
 // ---------------------------------------------------------
 // wxDataViewToggleCell
 // ---------------------------------------------------------
@@ -1003,7 +1045,7 @@ static void wxGtkToggleRendererToggledCallback( GtkCellRendererToggle *renderer,
     model->ValueChanged( model_col, model_row );
 }
 
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewToggleCell, wxDataViewCell)
+IMPLEMENT_CLASS(wxDataViewToggleCell, wxDataViewCell)
 
 wxDataViewToggleCell::wxDataViewToggleCell( const wxString &varianttype,
                         wxDataViewCellMode mode ) :
@@ -1088,7 +1130,7 @@ public:
 // wxDataViewCustomCell
 // ---------------------------------------------------------
 
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewCustomCell, wxDataViewCell)
+IMPLEMENT_CLASS(wxDataViewCustomCell, wxDataViewCell)
 
 wxDataViewCustomCell::wxDataViewCustomCell( const wxString &varianttype,
                           wxDataViewCellMode mode, bool no_init ) :
@@ -1145,7 +1187,7 @@ wxDC *wxDataViewCustomCell::GetDC()
 // wxDataViewProgressCell
 // ---------------------------------------------------------
 
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewProgressCell, wxDataViewCustomCell)
+IMPLEMENT_CLASS(wxDataViewProgressCell, wxDataViewCustomCell)
 
 wxDataViewProgressCell::wxDataViewProgressCell( const wxString &label,
     const wxString &varianttype, wxDataViewCellMode mode ) :
@@ -1271,7 +1313,7 @@ void wxDataViewDateCellPopupTransient::OnCalendar( wxCalendarEvent &event )
     DismissAndNotify();
 }
 
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewDateCell, wxDataViewCustomCell)
+IMPLEMENT_CLASS(wxDataViewDateCell, wxDataViewCustomCell)
 
 wxDataViewDateCell::wxDataViewDateCell( const wxString &varianttype,
                         wxDataViewCellMode mode ) :
@@ -1350,12 +1392,14 @@ static void wxGtkTreeCellDataFunc( GtkTreeViewColumn *column,
     list_store->model->GetValue( value, cell->GetOwner()->GetModelColumn(), model_row );
 
     if (value.GetType() != cell->GetVariantType())
-        wxLogError( wxT("Wrong type\n") );
+        wxLogError( wxT("Wrong type, required: %s but: %s"), 
+                    value.GetType().c_str(), 
+                    cell->GetVariantType().c_str() );
 
     cell->SetValue( value );
 }
 
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewColumn, wxDataViewColumnBase)
+IMPLEMENT_CLASS(wxDataViewColumn, wxDataViewColumnBase)
 
 wxDataViewColumn::wxDataViewColumn( const wxString &title, wxDataViewCell *cell, size_t model_column,
     int fixed_width, wxDataViewColumnSizing sizing, int flags ) :