]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/dataview.cpp
initialize bitmap to avoid assertion
[wxWidgets.git] / src / gtk / dataview.cpp
index 92706b80017b1b7a12cb775689d2841feb33b5b0..f7d910d2de85e73b2d241f9816432236c05a370f 100644 (file)
     #include "wx/log.h"
     #include "wx/dcclient.h"
     #include "wx/sizer.h"
+    #include "wx/icon.h"
+    #include "wx/list.h"
+    #include "wx/settings.h"
+    #include "wx/crt.h"
 #endif
 
 #include "wx/stockitem.h"
 #include "wx/calctrl.h"
 #include "wx/popupwin.h"
-#include "wx/icon.h"
-#include "wx/list.h"
 #include "wx/listimpl.cpp"
-#include "wx/settings.h"
 
 #include "wx/gtk/private.h"
-#include "wx/gtk/win_gtk.h"
-
-#include <gobject/gvaluecollector.h>
-#include <gtk/gtktreemodel.h>
-#include <gtk/gtktreesortable.h>
-#include <gtk/gtktreednd.h>
-
-#include <gdk/gdkkeysyms.h>
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -58,7 +51,7 @@ typedef struct _GtkWxTreeModel       GtkWxTreeModel;
 //-----------------------------------------------------------------------------
 
 WX_DECLARE_LIST(wxDataViewItem, ItemList);
-WX_DEFINE_LIST(ItemList);
+WX_DEFINE_LIST(ItemList)
 
 class wxDataViewCtrlInternal
 {
@@ -920,6 +913,13 @@ gtk_wx_cell_renderer_render (GtkCellRenderer      *renderer,
     GtkWxCellRenderer *wxrenderer = (GtkWxCellRenderer *) renderer;
     wxDataViewCustomRenderer *cell = wxrenderer->cell;
 
+    cell->window = window;
+    cell->widget = widget;
+    cell->background_area = (void*) background_area;
+    cell->cell_area = (void*) cell_area;
+    cell->expose_area = (void*) expose_area;
+    cell->flags = (int) flags;
+
     GdkRectangle rect;
     gtk_wx_cell_renderer_get_size (renderer, widget, cell_area,
                                    &rect.x,
@@ -990,7 +990,7 @@ gtk_wx_cell_renderer_activate(
     GtkTreePath *treepath = gtk_tree_path_new_from_string( path );
 
     GtkTreeIter iter;
-    cell->GetOwner()->GetOwner()->GetInternal()->get_iter( &iter, treepath );
+    cell->GetOwner()->GetOwner()->GtkGetInternal()->get_iter( &iter, treepath );
     wxDataViewItem item( iter.user_data );
     gtk_tree_path_free( treepath );
 
@@ -1434,7 +1434,7 @@ bool wxDataViewTextRenderer::SetValue( const wxVariant &value )
 
     GValue gvalue = { 0, };
     g_value_init( &gvalue, G_TYPE_STRING );
-    g_value_set_string( &gvalue, wxGTK_CONV_FONT( tmp, GetOwner()->GetOwner()->GetFont() ) );
+    g_value_set_string( &gvalue, wxGTK_CONV( tmp ) );
     g_object_set_property( G_OBJECT(m_renderer), "text", &gvalue );
     g_value_unset( &gvalue );
 
@@ -1446,8 +1446,7 @@ bool wxDataViewTextRenderer::GetValue( wxVariant &value ) const
     GValue gvalue = { 0, };
     g_value_init( &gvalue, G_TYPE_STRING );
     g_object_get_property( G_OBJECT(m_renderer), "text", &gvalue );
-    wxString tmp = wxGTK_CONV_BACK_FONT( g_value_get_string( &gvalue ),
-        wx_const_cast(wxDataViewTextRenderer*, this)->GetOwner()->GetOwner()->GetFont() );
+    wxString tmp = wxGTK_CONV_BACK( g_value_get_string( &gvalue ) );
     g_value_unset( &gvalue );
 
     value = tmp;
@@ -1668,6 +1667,7 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype,
     wxDataViewRenderer( varianttype, mode, align )
 {
     m_dc = NULL;
+    m_text_renderer = NULL;
 
     if (no_init)
         m_renderer = NULL;
@@ -1677,12 +1677,37 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype,
 
 void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state )
 {
+#if 0
     wxDataViewCtrl *view = GetOwner()->GetOwner();
     wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
                         wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
                         view->GetForegroundColour();
     dc->SetTextForeground(col);
     dc->DrawText( text, cell.x + xoffset, cell.y + ((cell.height - dc->GetCharHeight()) / 2));
+#else
+    if (!m_text_renderer)
+        m_text_renderer = gtk_cell_renderer_text_new();
+    
+    GValue gvalue = { 0, };
+    g_value_init( &gvalue, G_TYPE_STRING );
+    g_value_set_string( &gvalue, wxGTK_CONV( text ) );
+    g_object_set_property( G_OBJECT(m_text_renderer), "text", &gvalue );
+    g_value_unset( &gvalue );
+
+    ((GdkRectangle*) cell_area)->x += xoffset;
+    ((GdkRectangle*) cell_area)->width -= xoffset;
+    
+    gtk_cell_renderer_render( m_text_renderer,
+        window,
+        widget,
+        (GdkRectangle*) background_area,
+        (GdkRectangle*) cell_area,
+        (GdkRectangle*) expose_area,
+        (GtkCellRendererState) flags );
+    
+    ((GdkRectangle*) cell_area)->x -= xoffset;
+    ((GdkRectangle*) cell_area)->width += xoffset;
+#endif
 }
 
 bool wxDataViewCustomRenderer::Init(wxDataViewCellMode mode, int align)
@@ -1704,6 +1729,9 @@ wxDataViewCustomRenderer::~wxDataViewCustomRenderer()
 {
     if (m_dc)
         delete m_dc;
+
+    if (m_text_renderer)
+        gtk_object_sink( GTK_OBJECT(m_text_renderer) );
 }
 
 wxDC *wxDataViewCustomRenderer::GetDC()
@@ -1741,8 +1769,7 @@ wxDataViewProgressRenderer::wxDataViewProgressRenderer( const wxString &label,
         GValue gvalue = { 0, };
         g_value_init( &gvalue, G_TYPE_STRING );
 
-        // FIXME: font encoding support
-        g_value_set_string( &gvalue, wxGTK_CONV_SYS(m_label) );
+        g_value_set_string( &gvalue, wxGTK_CONV(m_label) );
         g_object_set_property( G_OBJECT(m_renderer), "text", &gvalue );
         g_value_unset( &gvalue );
 
@@ -2115,7 +2142,7 @@ static void wxGtkTreeCellDataFunc( GtkTreeViewColumn *column,
 IMPLEMENT_CLASS(wxDataViewColumn, wxDataViewColumnBase)
 
 #include <wx/listimpl.cpp>
-WX_DEFINE_LIST(wxDataViewColumnList);
+WX_DEFINE_LIST(wxDataViewColumnList)
 
 wxDataViewColumn::wxDataViewColumn( const wxString &title, wxDataViewRenderer *cell,
                                     unsigned int model_column, int width,