]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/dataview.cpp
don't use WPARAM in the header (build fix after r59336)
[wxWidgets.git] / src / gtk / dataview.cpp
index 5c9c64c115d03c54315c1c5699034d3320bd4e33..4e7fc719a47a9415e679ed3836f7ec03f23a49c6 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/dataobj.h"
     #include "wx/crt.h"
 #endif
 
@@ -39,9 +36,7 @@
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
-class wxDataViewCtrlInternal;
-
-wxDataViewCtrlInternal *g_internal = NULL;
+static wxDataViewCtrlInternal *gs_internal = NULL;
 
 class wxGtkTreeModelNode;
 
@@ -56,7 +51,7 @@ typedef struct _GtkWxTreeModel       GtkWxTreeModel;
 WX_DECLARE_LIST(wxDataViewItem, ItemList);
 WX_DEFINE_LIST(ItemList)
 
-class wxDataViewCtrlInternal
+class WXDLLIMPEXP_ADV wxDataViewCtrlInternal
 {
 public:
     wxDataViewCtrlInternal( wxDataViewCtrl *owner, wxDataViewModel *wx_model, GtkWxTreeModel *gtk_model );
@@ -74,10 +69,10 @@ public:
     gboolean iter_parent( GtkTreeIter *iter, GtkTreeIter *child );
 
     // dnd iface
-   
+
     bool EnableDragSource( const wxDataFormat &format );
     bool EnableDropTarget( const wxDataFormat &format );
-    
+
     gboolean row_draggable( GtkTreeDragSource *drag_source, GtkTreePath *path );
     gboolean drag_data_delete( GtkTreeDragSource *drag_source, GtkTreePath* path );
     gboolean drag_data_get( GtkTreeDragSource *drag_source, GtkTreePath *path,
@@ -128,11 +123,11 @@ private:
     GtkSortType           m_sort_order;
     wxDataViewColumn     *m_dataview_sort_column;
     int                   m_sort_column;
-    
+
     GtkTargetEntry        m_dragSourceTargetEntry;
     wxCharBuffer          m_dragSourceTargetEntryTarget;
     wxDataObject         *m_dragDataObject;
-    
+
     GtkTargetEntry        m_dropTargetTargetEntry;
     wxCharBuffer          m_dropTargetTargetEntryTarget;
     wxDataObject         *m_dropDataObject;
@@ -143,10 +138,11 @@ private:
 // wxGtkTreeModelNode
 //-----------------------------------------------------------------------------
 
+static
 int LINKAGEMODE wxGtkTreeModelChildCmp( void** id1, void** id2 )
 {
-    int ret = g_internal->GetDataViewModel()->Compare( *id1, *id2,
-        g_internal->GetSortColumn(), (g_internal->GetSortOrder() == GTK_SORT_ASCENDING) );
+    int ret = gs_internal->GetDataViewModel()->Compare( *id1, *id2,
+        gs_internal->GetSortColumn(), (gs_internal->GetSortOrder() == GTK_SORT_ASCENDING) );
 
     return ret;
 }
@@ -186,7 +182,7 @@ public:
 
             if (m_internal->IsSorted() || m_internal->GetDataViewModel()->HasDefaultCompare())
             {
-                g_internal = m_internal;
+                gs_internal = m_internal;
                 m_children.Sort( &wxGtkTreeModelChildCmp );
                 return m_children.Index( id );
             }
@@ -200,7 +196,7 @@ public:
 
             if (m_internal->IsSorted() || m_internal->GetDataViewModel()->HasDefaultCompare())
             {
-                g_internal = m_internal;
+                gs_internal = m_internal;
                 m_children.Sort( &wxGtkTreeModelChildCmp );
                 return m_children.Index( id );
             }
@@ -645,8 +641,10 @@ wxgtk_tree_model_iter_n_children (GtkTreeModel *tree_model,
 {
     GtkWxTreeModel *wxtree_model = (GtkWxTreeModel *) tree_model;
     g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (wxtree_model), FALSE);
-    g_return_val_if_fail (wxtree_model->stamp == iter->stamp, 0);
-
+    
+    if (iter != NULL)
+        g_return_val_if_fail (wxtree_model->stamp == iter->stamp, 0);
+        
     return wxtree_model->internal->iter_n_children( iter );
 }
 
@@ -1107,11 +1105,10 @@ gtk_wx_cell_renderer_render (GtkCellRenderer      *renderer,
         wxRect renderrect( rect.x, rect.y, rect.width, rect.height );
         wxWindowDC* dc = (wxWindowDC*) cell->GetDC();
         wxWindowDCImpl *impl = (wxWindowDCImpl *) dc->GetImpl();
-        if (impl->m_gdkwindow == NULL)
-        {
-            impl->m_gdkwindow = window;
-            impl->SetUpDC();
-        }
+        // Reinitilise GDK window everytime as drawing can also
+        // be done into DnD drop window.
+        impl->m_gdkwindow = window;
+        impl->SetUpDC();
 
         int state = 0;
         if (flags & GTK_CELL_RENDERER_SELECTED)
@@ -1831,7 +1828,7 @@ public:
 
         m_window = window;
 
-        m_context = window->GtkGetPangoDefaultContext();
+        m_context = window->GTKGetPangoDefaultContext();
         m_layout = pango_layout_new( m_context );
         m_fontdesc = pango_font_description_copy( widget->style->font_desc );
 
@@ -2051,9 +2048,12 @@ wxDataViewChoiceRenderer::wxDataViewChoiceRenderer( const wxArrayString &choices
         m_renderer = (GtkCellRenderer*) gtk_cell_renderer_combo_new();
 
         GtkListStore *store = gtk_list_store_new( 1, G_TYPE_STRING );
-        size_t n;
-        for (n = 0; n < m_choices.GetCount(); n++)
-            gtk_list_store_insert_with_values( store, NULL, n, 0, m_choices[n].utf8_str(), -1 );
+        for (size_t n = 0; n < m_choices.GetCount(); n++)
+        {
+            gtk_list_store_insert_with_values(
+                store, NULL, n, 0,
+                static_cast<const char *>(m_choices[n].utf8_str()), -1 );
+        }
 
         g_object_set (m_renderer,
                 "model", store,
@@ -2116,7 +2116,8 @@ bool wxDataViewChoiceRenderer::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 temp = wxGTK_CONV_BACK_FONT( g_value_get_string( &gvalue ), const_cast<wxDataViewTextRenderer*>(this)->GetOwner()->GetOwner()->GetFont() );
+        wxString temp = wxGTK_CONV_BACK_FONT( g_value_get_string( &gvalue ),
+                const_cast<wxDataViewChoiceRenderer*>(this)->GetOwner()->GetOwner()->GetFont() );
         g_value_unset( &gvalue );
         value = temp;
         wxPrintf( "temp %s\n", temp );
@@ -2836,7 +2837,7 @@ void wxGtkTreeModelNode::Resort()
     wxGtkTreeModelChildren temp;
     WX_APPEND_ARRAY( temp, m_children );
 
-    g_internal = m_internal;
+    gs_internal = m_internal;
     m_children.Sort( &wxGtkTreeModelChildCmp );
 
     gint *new_order = new gint[child_count];
@@ -2884,7 +2885,7 @@ wxDataViewCtrlInternal::wxDataViewCtrlInternal( wxDataViewCtrl *owner,
     m_sort_order = GTK_SORT_ASCENDING;
     m_sort_column = -1;
     m_dataview_sort_column = NULL;
-    
+
     m_dragDataObject = NULL;
     m_dropDataObject = NULL;
 
@@ -2895,7 +2896,7 @@ wxDataViewCtrlInternal::wxDataViewCtrlInternal( wxDataViewCtrl *owner,
 wxDataViewCtrlInternal::~wxDataViewCtrlInternal()
 {
     g_object_unref( m_gtk_model );
-    
+
     delete m_dragDataObject;
     delete m_dropDataObject;
 }
@@ -2935,14 +2936,14 @@ bool wxDataViewCtrlInternal::EnableDragSource( const wxDataFormat &format )
 {
     wxGtkString atom_str( gdk_atom_name( format  ) );
     m_dragSourceTargetEntryTarget = wxCharBuffer( atom_str );
-    
+
     m_dragSourceTargetEntry.target =  m_dragSourceTargetEntryTarget.data();
     m_dragSourceTargetEntry.flags = 0;
     m_dragSourceTargetEntry.info = static_cast<guint>(-1);
-    
+
     gtk_tree_view_enable_model_drag_source( GTK_TREE_VIEW(m_owner->GtkGetTreeView() ),
        GDK_BUTTON1_MASK, &m_dragSourceTargetEntry, 1, (GdkDragAction) GDK_ACTION_COPY );
-       
+
     return true;
 }
 
@@ -2950,14 +2951,14 @@ bool wxDataViewCtrlInternal::EnableDropTarget( const wxDataFormat &format )
 {
     wxGtkString atom_str( gdk_atom_name( format  ) );
     m_dropTargetTargetEntryTarget = wxCharBuffer( atom_str );
-    
-    m_dropTargetTargetEntry.target =  m_dragSourceTargetEntryTarget.data();
+
+    m_dropTargetTargetEntry.target =  m_dropTargetTargetEntryTarget.data();
     m_dropTargetTargetEntry.flags = 0;
     m_dropTargetTargetEntry.info = static_cast<guint>(-1);
-    
+
     gtk_tree_view_enable_model_drag_dest( GTK_TREE_VIEW(m_owner->GtkGetTreeView() ),
        &m_dropTargetTargetEntry, 1, (GdkDragAction) GDK_ACTION_COPY );
-       
+
     return true;
 }
 
@@ -2965,7 +2966,7 @@ gboolean wxDataViewCtrlInternal::row_draggable( GtkTreeDragSource *WXUNUSED(drag
     GtkTreePath *path )
 {
     delete m_dragDataObject;
-    
+
     GtkTreeIter iter;
     if (!get_iter( &iter, path )) return FALSE;
     wxDataViewItem item( (void*) iter.user_data );
@@ -2976,16 +2977,16 @@ gboolean wxDataViewCtrlInternal::row_draggable( GtkTreeDragSource *WXUNUSED(drag
     event.SetModel( m_wx_model );
     if (!m_owner->HandleWindowEvent( event ))
         return FALSE;
-        
+
     if (!event.IsAllowed())
         return FALSE;
-        
+
     wxDataObject *obj = event.GetDataObject();
     if (!obj)
         return FALSE;
-    
+
     m_dragDataObject = obj;
-    
+
     return TRUE;
 }
 
@@ -3009,14 +3010,14 @@ gboolean wxDataViewCtrlInternal::drag_data_get( GtkTreeDragSource *WXUNUSED(drag
     size_t size = m_dragDataObject->GetDataSize( selection_data->target );
     if (size == 0)
         return FALSE;
-       
+
     void *buf = malloc( size );
-    
+
     gboolean res = FALSE;
     if (m_dragDataObject->GetDataHere( selection_data->target, buf ))
     {
         res = TRUE;
-    
+
         gtk_selection_data_set( selection_data, selection_data->target,
             8, (const guchar*) buf, size );
     }
@@ -3034,7 +3035,7 @@ wxDataViewCtrlInternal::drag_data_received(GtkTreeDragDest *WXUNUSED(drag_dest),
     GtkTreeIter iter;
     if (!get_iter( &iter, path )) return FALSE;
     wxDataViewItem item( (void*) iter.user_data );
-    
+
     wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_DROP, m_owner->GetId() );
     event.SetEventObject( m_owner );
     event.SetItem( item );
@@ -3044,7 +3045,7 @@ wxDataViewCtrlInternal::drag_data_received(GtkTreeDragDest *WXUNUSED(drag_dest),
     event.SetDataBuffer( selection_data->data );
     if (!m_owner->HandleWindowEvent( event ))
         return FALSE;
-        
+
     if (!event.IsAllowed())
         return FALSE;
 
@@ -3059,7 +3060,7 @@ wxDataViewCtrlInternal::row_drop_possible(GtkTreeDragDest *WXUNUSED(drag_dest),
     GtkTreeIter iter;
     if (!get_iter( &iter, path )) return FALSE;
     wxDataViewItem item( (void*) iter.user_data );
-    
+
     wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner->GetId() );
     event.SetEventObject( m_owner );
     event.SetItem( item );
@@ -3067,10 +3068,10 @@ wxDataViewCtrlInternal::row_drop_possible(GtkTreeDragDest *WXUNUSED(drag_dest),
     event.SetDataFormat( selection_data->target );
     if (!m_owner->HandleWindowEvent( event ))
         return FALSE;
-        
+
     if (!event.IsAllowed())
         return FALSE;
-    
+
     return TRUE;
 }
 
@@ -3347,6 +3348,9 @@ gint wxDataViewCtrlInternal::iter_n_children( GtkTreeIter *iter )
     }
     else
     {
+        if (iter == NULL)
+            return m_root->GetChildCount();
+            
         wxDataViewItem item( (void*) iter->user_data );
 
         if (!m_wx_model->IsContainer( item ))
@@ -3829,7 +3833,7 @@ bool wxDataViewCtrl::Create(wxWindow *parent, wxWindowID id,
     m_widget = gtk_scrolled_window_new (NULL, NULL);
     g_object_ref(m_widget);
 
-    GtkScrolledWindowSetBorder(m_widget, style);
+    GTKScrolledWindowSetBorder(m_widget, style);
 
     m_treeview = gtk_tree_view_new();
     gtk_container_add (GTK_CONTAINER (m_widget), m_treeview);
@@ -3874,7 +3878,7 @@ bool wxDataViewCtrl::Create(wxWindow *parent, wxWindowID id,
     gtk_tree_view_set_rules_hint( GTK_TREE_VIEW(m_treeview), (style & wxDV_ROW_LINES) != 0 );
 
     gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (m_widget),
-        GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+        GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
     gtk_widget_show (m_treeview);
 
     m_parent->DoAddChild( this );
@@ -4126,7 +4130,7 @@ bool wxDataViewCtrl::IsExpanded( const wxDataViewItem & item ) const
     GtkTreePath *path = m_internal->get_path( &iter );
     bool res = gtk_tree_view_row_expanded( GTK_TREE_VIEW(m_treeview), path );
     gtk_tree_path_free( path );
-    
+
     return res;
 }