]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/dataview.cpp
compilation fix for Borland C++
[wxWidgets.git] / src / gtk / dataview.cpp
index f1f6d5a26a1b69e1803b7277d8e0f23ef75a61bb..d0de7177ec3bc49a7c979c67e3750da52523e3d3 100644 (file)
@@ -116,9 +116,13 @@ public:
     
     wxDataViewModel* GetDataViewModel() { return m_wx_model; }
     GtkWxTreeModel* GetOwner()          { return m_owner; }
+
+    bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item );
+    bool ItemDeleted( const wxDataViewItem &item );
     
 protected:
     void InitTree();
+    wxGtkTreeModelNode *FindNode( const wxDataViewItem &item );
     wxGtkTreeModelNode *FindNode( GtkTreeIter *iter );
     void BuildBranch( wxGtkTreeModelNode *branch );
     
@@ -420,7 +424,7 @@ wxgtk_tree_model_get_value (GtkTreeModel *tree_model,
     {
         wxVariant variant;
         g_value_init( value, G_TYPE_STRING );
-        wxDataViewItem item( (wxUint32) iter->user_data );
+        wxDataViewItem item( (void*) iter->user_data );
         model->GetValue( variant, item, (unsigned int) column );
 
         g_value_set_string( value, variant.GetString().utf8_str() );
@@ -602,6 +606,23 @@ void wxGtkTreeModel::BuildBranch( wxGtkTreeModelNode *node )
     }
 }
 
+bool wxGtkTreeModel::ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item )
+{
+    wxGtkTreeModelNode *parent_node = FindNode( parent );
+    parent_node->Append( new wxGtkTreeModelNode( parent_node, item ) );
+    return true;
+}
+
+bool wxGtkTreeModel::ItemDeleted( const wxDataViewItem &item )
+{
+    wxGtkTreeModelNode *node = FindNode( item );
+    wxGtkTreeModelNode *parent = node->GetParent();
+    parent->GetChildren().Remove( node );
+    delete node;
+
+    return true;
+}
+
 gboolean wxGtkTreeModel::get_iter( GtkTreeIter *iter, GtkTreePath *path )
 {
     int depth = gtk_tree_path_get_depth( path );
@@ -634,7 +655,7 @@ GtkTreePath *wxGtkTreeModel::get_path( GtkTreeIter *iter )
     while (node->GetParent())
     {
         wxGtkTreeModelNode *parent = node->GetParent();
-        int pos = parent->GetChildren().Index( parent );
+        int pos = parent->GetChildren().Index( node );
         
         gtk_tree_path_prepend_index( retval, pos );
 
@@ -646,7 +667,7 @@ GtkTreePath *wxGtkTreeModel::get_path( GtkTreeIter *iter )
 
 gboolean wxGtkTreeModel::iter_next( GtkTreeIter *iter )
 {
-    wxDataViewItem item( (wxUint32) iter->user_data );
+    wxDataViewItem item( (void*) iter->user_data );
     item = m_wx_model->GetNextSibling( item );
     if (!item.IsOk())
         return FALSE;
@@ -658,7 +679,7 @@ gboolean wxGtkTreeModel::iter_next( GtkTreeIter *iter )
 
 gboolean wxGtkTreeModel::iter_children( GtkTreeIter *iter, GtkTreeIter *parent )
 {
-    wxDataViewItem item( (wxUint32) parent->user_data );
+    wxDataViewItem item( (void*) parent->user_data );
     
     if (!m_wx_model->HasChildren( item ))
         return FALSE;
@@ -676,14 +697,14 @@ gboolean wxGtkTreeModel::iter_children( GtkTreeIter *iter, GtkTreeIter *parent )
 
 gboolean wxGtkTreeModel::iter_has_child( GtkTreeIter *iter )
 {
-    wxDataViewItem item( (wxUint32) iter->user_data );
+    wxDataViewItem item( (void*) iter->user_data );
     
     return m_wx_model->HasChildren( item );
 }
 
 gint wxGtkTreeModel::iter_n_children( GtkTreeIter *iter )
 {
-    wxDataViewItem item( (wxUint32) iter->user_data );
+    wxDataViewItem item( (void*) iter->user_data );
     
     if (!m_wx_model->HasChildren( item ))
         return 0;
@@ -696,8 +717,8 @@ gint wxGtkTreeModel::iter_n_children( GtkTreeIter *iter )
 
 gboolean wxGtkTreeModel::iter_nth_child( GtkTreeIter *iter, GtkTreeIter *parent, gint n )
 {
-    wxUint32 id = 0;
-    if (parent) id = (wxUint32) parent->user_data;
+    void* id = NULL;
+    if (parent) id = (void*) parent->user_data;
     wxDataViewItem item( id );
     
     if (!m_wx_model->HasChildren( item ))
@@ -718,7 +739,7 @@ gboolean wxGtkTreeModel::iter_nth_child( GtkTreeIter *iter, GtkTreeIter *parent,
 
 gboolean wxGtkTreeModel::iter_parent( GtkTreeIter *iter, GtkTreeIter *child )
 {
-    wxDataViewItem item( (wxUint32) child->user_data );
+    wxDataViewItem item( (void*) child->user_data );
     
     wxGtkTreeModelNode *node = FindNode( child );
     node = node->GetParent();
@@ -765,7 +786,7 @@ wxGtkTreeModelNode *wxGtkTreeModel::FindNode( GtkTreeIter *iter )
     if (!iter)
         return m_root;
 
-    wxDataViewItem item( (wxUint32) iter->user_data );
+    wxDataViewItem item( (void*) iter->user_data );
     
     wxGtkTreeModelNode *result = wxGtkTreeModel_FindNode( m_root, item );
     
@@ -779,6 +800,20 @@ wxGtkTreeModelNode *wxGtkTreeModel::FindNode( GtkTreeIter *iter )
     return result;
 }
 
+wxGtkTreeModelNode *wxGtkTreeModel::FindNode( const wxDataViewItem &item )
+{
+    wxGtkTreeModelNode *result = wxGtkTreeModel_FindNode( m_root, item );
+    
+    if (!result)
+    {
+        wxPrintf( "Not found %d\n", (int) item.GetID() );
+        char *crash = NULL;
+        *crash = 0;
+    }
+    
+    return result;
+}
+
 //-----------------------------------------------------------------------------
 // define new GTK+ class wxGtkRendererRenderer
 //-----------------------------------------------------------------------------
@@ -954,10 +989,11 @@ static GtkCellEditable *gtk_wx_cell_renderer_start_editing(
     // wxDataViewListModel *model = cell->GetOwner()->GetOwner()->GetModel();
 
     GtkTreePath *treepath = gtk_tree_path_new_from_string( path );
-    unsigned int model_row = (unsigned int)gtk_tree_path_get_indices (treepath)[0];
+    // TODO
+    wxDataViewItem item;
     gtk_tree_path_free( treepath );
 
-    cell->StartEditing( model_row, renderrect );
+    cell->StartEditing( item, renderrect );
 
     return NULL;
 }
@@ -1088,7 +1124,8 @@ gtk_wx_cell_renderer_activate(
     wxDataViewModel *model = cell->GetOwner()->GetOwner()->GetModel();
 
     GtkTreePath *treepath = gtk_tree_path_new_from_string( path );
-    unsigned int model_row = (unsigned int)gtk_tree_path_get_indices (treepath)[0];
+    // TODO
+    wxDataViewItem item;
     gtk_tree_path_free( treepath );
 
     unsigned int model_col = cell->GetOwner()->GetModelColumn();
@@ -1098,7 +1135,7 @@ gtk_wx_cell_renderer_activate(
         bool ret = false;
 
         // activated by <ENTER>
-        if (cell->Activate( renderrect, model, model_col, model_row ))
+        if (cell->Activate( renderrect, model, item, model_col ))
                     ret = true;
 
         return ret;
@@ -1112,16 +1149,16 @@ gtk_wx_cell_renderer_activate(
         bool ret = false;
         if (button_event->button == 1)
         {
-            if (cell->LeftClick( pt, renderrect, model, model_col, model_row ))
+            if (cell->LeftClick( pt, renderrect, model, item, model_col ))
                 ret = true;
             // TODO: query system double-click time
             if (button_event->time - wxrenderer->last_click < 400)
-                if (cell->Activate( renderrect, model, model_col, model_row ))
+                if (cell->Activate( renderrect, model, item, model_col ))
                     ret = true;
         }
         if (button_event->button == 3)
         {
-            if (cell->RightClick( pt, renderrect, model, model_col, model_row ))
+            if (cell->RightClick( pt, renderrect, model, item, model_col ))
                 ret = true;
         }
 
@@ -1177,6 +1214,8 @@ wxGtkDataViewModelNotifier::~wxGtkDataViewModelNotifier()
 
 bool wxGtkDataViewModelNotifier::ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item )
 {
+    m_wxgtk_model->model->ItemAdded( parent, item );
+
     GtkTreeIter iter;
     iter.stamp = m_wxgtk_model->stamp;
     iter.user_data = (gpointer) item.GetID();
@@ -1202,6 +1241,8 @@ bool wxGtkDataViewModelNotifier::ItemDeleted( const wxDataViewItem &item )
         GTK_TREE_MODEL(m_wxgtk_model), path );
     gtk_tree_path_free (path);
 
+    m_wxgtk_model->model->ItemDeleted( item );
+    
     return true;
 }
 
@@ -1413,13 +1454,15 @@ static void wxGtkTextRendererEditedCallback( GtkCellRendererText *renderer,
     wxDataViewModel *model = cell->GetOwner()->GetOwner()->GetModel();
 
     GtkTreePath *path = gtk_tree_path_new_from_string( arg1 );
-    unsigned int model_row = (unsigned int)gtk_tree_path_get_indices (path)[0];
+    GtkTreeIter iter;
+    // TODO    
+    wxDataViewItem item;
     gtk_tree_path_free( path );
 
     unsigned int model_col = cell->GetOwner()->GetModelColumn();
 
-    model->SetValue( value, model_col, model_row );
-    model->ValueChanged( model_col, model_row );
+    model->SetValue( value, item, model_col );
+    model->ValueChanged( item, model_col );
 }
 
 IMPLEMENT_CLASS(wxDataViewTextRenderer, wxDataViewRenderer)
@@ -1585,13 +1628,14 @@ static void wxGtkToggleRendererToggledCallback( GtkCellRendererToggle *renderer,
     wxDataViewModel *model = cell->GetOwner()->GetOwner()->GetModel();
 
     GtkTreePath *gtk_path = gtk_tree_path_new_from_string( path );
-    unsigned int model_row = (unsigned int)gtk_tree_path_get_indices (gtk_path)[0];
+    // TODO
+    wxDataViewItem item;
     gtk_tree_path_free( gtk_path );
 
     unsigned int model_col = cell->GetOwner()->GetModelColumn();
 
-    model->SetValue( value, model_col, model_row );
-    model->ValueChanged( model_col, model_row );
+    model->SetValue( value, item, model_col );
+    model->ValueChanged( item, model_col );
 }
 
 IMPLEMENT_CLASS(wxDataViewToggleRenderer, wxDataViewRenderer)
@@ -1965,7 +2009,7 @@ static void wxGtkTreeCellDataFunc( GtkTreeViewColumn *column,
 
     wxDataViewRenderer *cell = (wxDataViewRenderer*) data;
 
-    wxDataViewItem item( (wxUint32) iter->user_data );
+    wxDataViewItem item( (void*) iter->user_data );
 
     wxVariant value;
     tree_model->model->GetDataViewModel()->GetValue( value, item, cell->GetOwner()->GetModelColumn() );
@@ -2456,6 +2500,26 @@ bool wxDataViewCtrl::AppendColumn( wxDataViewColumn *col )
     return true;
 }
 
+wxDataViewItem wxDataViewCtrl::GetSelection()
+{
+    GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(m_treeview) );
+    
+    if (m_windowStyle & wxDV_MULTIPLE)
+    {
+    }
+    else
+    {
+        GtkTreeIter iter;
+        if (gtk_tree_selection_get_selected( selection, NULL, &iter ))
+        {
+            wxDataViewItem item( (void*) iter.user_data );
+            return item;
+        }
+    }
+    
+    return wxDataViewItem(0);
+}
+
 void wxDataViewCtrl::DoSetExpanderColumn()
 {
 }