#if defined(__WXGTK20__)
// for testing
-// #define wxUSE_GENERICDATAVIEWCTRL 1
+ #define wxUSE_GENERICDATAVIEWCTRL 1
#elif defined(__WXMAC__)
#define wxUSE_GENERICDATAVIEWCTRL 1
#else
#include "wx/list.h"
#include "wx/control.h"
#include "wx/scrolwin.h"
+#include "wx/icon.h"
// ---------------------------------------------------------
// classes
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
// ---------------------------------------------------------
#include "wx/calctrl.h"
#include "wx/popupwin.h"
#include "wx/renderer.h"
+#include "wx/icon.h"
//-----------------------------------------------------------------------------
// classes
// wxDataViewTextCell
// ---------------------------------------------------------
-IMPLEMENT_ABSTRACT_CLASS(wxDataViewTextCell, wxDataViewCustomCell)
+IMPLEMENT_CLASS(wxDataViewTextCell, wxDataViewCustomCell)
wxDataViewTextCell::wxDataViewTextCell( const wxString &varianttype, wxDataViewCellMode mode ) :
wxDataViewCustomCell( varianttype, mode )
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
// ---------------------------------------------------------
#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"
{
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 );