]> git.saurik.com Git - wxWidgets.git/commitdiff
Several wxBitmapDataCell changes.
authorRobert Roebling <robert@roebling.de>
Sat, 30 Sep 2006 21:21:19 +0000 (21:21 +0000)
committerRobert Roebling <robert@roebling.de>
Sat, 30 Sep 2006 21:21:19 +0000 (21:21 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41540 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/dataview.h
include/wx/generic/dataview.h
src/generic/datavgen.cpp
src/gtk/dataview.cpp

index 5e37624e0fe2da61eeec30059ea4f565f98ff464..70f83b67c9ee2e7c39a7891bc3eaa98c3389fb77 100644 (file)
@@ -24,7 +24,7 @@
 
 #if defined(__WXGTK20__)
     // for testing
-//    #define wxUSE_GENERICDATAVIEWCTRL 1
+    #define wxUSE_GENERICDATAVIEWCTRL 1
 #elif defined(__WXMAC__)
     #define wxUSE_GENERICDATAVIEWCTRL 1
 #else
index bb5e2e7338085d2a078f4565da4916636612b9cf..18a6bb0123cd33e3b2b01668e720a2e486a8048a 100644 (file)
@@ -15,6 +15,7 @@
 #include "wx/list.h"
 #include "wx/control.h"
 #include "wx/scrolwin.h"
+#include "wx/icon.h"
 
 // ---------------------------------------------------------
 // classes
@@ -109,6 +110,30 @@ protected:
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextCell)
 };
 
+// ---------------------------------------------------------
+// wxDataViewBitmapCell
+// ---------------------------------------------------------
+
+class WXDLLIMPEXP_ADV wxDataViewBitmapCell: public wxDataViewCustomCell
+{
+public:
+    wxDataViewBitmapCell( const wxString &varianttype = wxT("wxBitmap"),
+                        wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
+
+    bool SetValue( const wxVariant &value );
+    bool GetValue( wxVariant &value );
+
+    bool Render( wxRect cell, wxDC *dc, int state );
+    wxSize GetSize();
+
+private:
+    wxIcon m_icon;
+    wxBitmap m_bitmap;
+
+protected:
+    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapCell)
+};
+
 // ---------------------------------------------------------
 // wxDataViewToggleCell
 // ---------------------------------------------------------
index 7d404f3e72f5d1e2795624ef217ad112cc09f4a4..725dff04b71d5de0d90760cbcf74ea4a8577582a 100644 (file)
@@ -35,6 +35,7 @@
 #include "wx/calctrl.h"
 #include "wx/popupwin.h"
 #include "wx/renderer.h"
+#include "wx/icon.h"
 
 //-----------------------------------------------------------------------------
 // classes
@@ -298,7 +299,7 @@ wxDataViewCustomCell::wxDataViewCustomCell( const wxString &varianttype,
 // wxDataViewTextCell
 // ---------------------------------------------------------
 
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewTextCell, wxDataViewCustomCell)
+IMPLEMENT_CLASS(wxDataViewTextCell, wxDataViewCustomCell)
 
 wxDataViewTextCell::wxDataViewTextCell( const wxString &varianttype, wxDataViewCellMode mode ) :
     wxDataViewCustomCell( varianttype, mode )
@@ -329,6 +330,52 @@ wxSize wxDataViewTextCell::GetSize()
     return wxSize(80,20);
 }
 
+// ---------------------------------------------------------
+// wxDataViewBitmapCell
+// ---------------------------------------------------------
+
+IMPLEMENT_CLASS(wxDataViewBitmapCell, wxDataViewCustomCell)
+
+wxDataViewBitmapCell::wxDataViewBitmapCell( const wxString &varianttype, wxDataViewCellMode mode ) :
+    wxDataViewCustomCell( varianttype, mode )
+{
+}
+
+bool wxDataViewBitmapCell::SetValue( const wxVariant &value )
+{
+    if (value.GetType() == wxT("wxBitmap"))
+        m_bitmap << value;
+    if (value.GetType() == wxT("wxIcon"))
+        m_icon << value;
+
+    return true;
+}
+
+bool wxDataViewBitmapCell::GetValue( wxVariant& WXUNUSED(value) )
+{
+    return false;
+}
+
+bool wxDataViewBitmapCell::Render( wxRect cell, wxDC *dc, int WXUNUSED(state) )
+{
+    if (m_bitmap.Ok())
+        dc->DrawBitmap( m_bitmap, cell.x, cell.y );
+    else if (m_icon.Ok())
+        dc->DrawIcon( m_icon, cell.x, cell.y );
+
+    return true;
+}
+
+wxSize wxDataViewBitmapCell::GetSize()
+{
+    if (m_bitmap.Ok())
+        return wxSize( m_bitmap.GetWidth(), m_bitmap.GetHeight() );
+    else if (m_icon.Ok())
+        return wxSize( m_icon.GetWidth(), m_icon.GetHeight() );
+
+    return wxSize(16,16);
+}
+
 // ---------------------------------------------------------
 // wxDataViewToggleCell
 // ---------------------------------------------------------
index f03d36bcdbc07418c5563cfe8dcc53d026a19a56..34f2ce3746a00192add0cce1f51c0ae5abcdf90c 100644 (file)
@@ -25,6 +25,8 @@
 #include "wx/stockitem.h"
 #include "wx/calctrl.h"
 #include "wx/popupwin.h"
+#include "wx/icon.h"
+
 
 #include "wx/gtk/private.h"
 #include "wx/gtk/win_gtk.h"
@@ -980,14 +982,30 @@ 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;
+        wxBitmap bitmap;
+        bitmap << value;
+        
+        // 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;
+    }
+    
+    if (value.GetType() == wxT("wxIcon"))
+    {
+        wxIcon bitmap;
+        bitmap << value;
         
         // This may create a Pixbuf representation in the
         // wxBitmap object (and it will stay there)
-        GdkPixbuf *pixbuf = bitmap->GetPixbuf();
+        GdkPixbuf *pixbuf = bitmap.GetPixbuf();
         
         GValue gvalue = { 0, };
         g_value_init( &gvalue, G_TYPE_OBJECT );