]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/dataview.cpp
Added wxQsort()
[wxWidgets.git] / src / gtk / dataview.cpp
index 89a1585145011e9ebcdf7240eb92be53bd2f1ad3..0e0bfce9a1860cae266eb22e2616c0bdfe3e4d59 100644 (file)
@@ -75,7 +75,9 @@ public:
 
     bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item );
     bool ItemDeleted( const wxDataViewItem &item );
-    
+    bool ItemChanged( const wxDataViewItem &item );
+    bool ValueChanged( const wxDataViewItem &item, unsigned int col );
+    bool Cleared();
     void Resort();
     
 protected:
@@ -118,6 +120,7 @@ public:
     
     ~wxGtkTreeModelNode()
     { 
+        g_model = m_internal->GetDataViewModel();
         size_t count = m_children->GetCount();
         size_t i;
         for (i = 0; i < count; i++)
@@ -130,17 +133,20 @@ public:
 
     unsigned int AddNode( wxGtkTreeModelNode* child ) 
         { 
+            g_model = m_internal->GetDataViewModel();
             m_nodes.Add( child );
             return m_children->Add( child->GetItem().GetID() );
         }
         
     unsigned int AddLeave( void* id )
         {
+            g_model = m_internal->GetDataViewModel();
             return m_children->Add( id );
         }
         
     void DeleteChild( void* id )
         {
+            g_model = m_internal->GetDataViewModel();
             size_t pos;
             size_t count = m_children->GetCount();
             for (pos = 0; pos < count; pos++)
@@ -1092,6 +1098,8 @@ bool wxGtkDataViewModelNotifier::ItemChanged( const wxDataViewItem &item )
         GTK_TREE_MODEL(m_wxgtk_model), path, &iter );
     gtk_tree_path_free (path);
 
+    m_owner->GtkGetInternal()->ItemChanged( item );
+    
     return true;
 }
 
@@ -1125,14 +1133,22 @@ bool wxGtkDataViewModelNotifier::ValueChanged( const wxDataViewItem &item, unsig
             // Redraw
             gtk_widget_queue_draw_area( GTK_WIDGET(widget),
                 cell_area.x - xdiff, ydiff + cell_area.y, cell_area.width, cell_area.height );
+                
+            m_owner->GtkGetInternal()->ValueChanged( item, model_col );
+            
+            return true;
         }
     }
 
-    return true;
+    return false;
 }
 
 bool wxGtkDataViewModelNotifier::Cleared()
 {
+    // TODO: delete everything
+
+    m_owner->GtkGetInternal()->Cleared();
+    
     return false;
 }
 
@@ -2131,6 +2147,8 @@ void wxDataViewColumn::SetWidth( int width )
 
 void wxGtkTreeModelNode::Resort()
 {
+    g_model = m_internal->GetDataViewModel();
+    
     size_t child_count = GetChildCount();
     if (child_count == 0)
         return;
@@ -2243,6 +2261,9 @@ void wxDataViewCtrlInternal::BuildBranch( wxGtkTreeModelNode *node )
                 node->AddNode( new wxGtkTreeModelNode( node, child, this ) );
             else
                 node->AddLeave( child.GetID() );
+    
+            // Don't send any events here
+    
             child = m_wx_model->GetNextSibling( child );
         }
     }
@@ -2260,6 +2281,13 @@ bool wxDataViewCtrlInternal::ItemAdded( const wxDataViewItem &parent, const wxDa
         parent_node->AddNode( new wxGtkTreeModelNode( parent_node, item, this ) );
     else
         parent_node->AddLeave( item.GetID() );
+        
+    wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_ADDED, m_owner->GetId() );
+    event.SetEventObject( m_owner );
+    event.SetModel( m_owner->GetModel() );
+    event.SetItem( item );
+    m_owner->GetEventHandler()->ProcessEvent( event );
+
     return true;
 }
 
@@ -2267,11 +2295,53 @@ bool wxDataViewCtrlInternal::ItemDeleted( const wxDataViewItem &item )
 {
     wxGtkTreeModelNode *parent = FindParentNode( item );
     parent->DeleteChild( item.GetID() );
+    
+    wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_DELETED, m_owner->GetId() );
+    event.SetEventObject( m_owner );
+    event.SetModel( m_owner->GetModel() );
+    event.SetItem( item );
+    m_owner->GetEventHandler()->ProcessEvent( event );
+
+    return true;
+}
+
+bool wxDataViewCtrlInternal::ItemChanged( const wxDataViewItem &item )
+{
+    wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_CHANGED, m_owner->GetId() );
+    event.SetEventObject( m_owner );
+    event.SetModel( m_owner->GetModel() );
+    event.SetItem( item );
+    m_owner->GetEventHandler()->ProcessEvent( event );
+    
+    return true;
+}
+
+bool wxDataViewCtrlInternal::ValueChanged( const wxDataViewItem &item, unsigned int col )
+{
+    wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_VALUE_CHANGED, m_owner->GetId() );
+    event.SetEventObject( m_owner );
+    event.SetModel( m_owner->GetModel() );
+    event.SetColumn( col );
+    event.SetItem( item );
+    m_owner->GetEventHandler()->ProcessEvent( event );
+    
+    return true;
+}
+
+bool wxDataViewCtrlInternal::Cleared()
+{
+    wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_CLEARED, m_owner->GetId() );
+    event.SetEventObject( m_owner );
+    event.SetModel( m_owner->GetModel() );
+    m_owner->GetEventHandler()->ProcessEvent( event );
+    
     return true;
 }
 
 gboolean wxDataViewCtrlInternal::get_iter( GtkTreeIter *iter, GtkTreePath *path )
 {
+    g_model = m_wx_model;
+    
     int depth = gtk_tree_path_get_depth( path );
 
     wxGtkTreeModelNode *node = m_root;
@@ -2312,6 +2382,8 @@ gboolean wxDataViewCtrlInternal::get_iter( GtkTreeIter *iter, GtkTreePath *path
 
 GtkTreePath *wxDataViewCtrlInternal::get_path( GtkTreeIter *iter )
 {
+    g_model = m_wx_model;
+    
     GtkTreePath *retval = gtk_tree_path_new ();
     void *id = iter->user_data;    
     
@@ -2330,6 +2402,8 @@ GtkTreePath *wxDataViewCtrlInternal::get_path( GtkTreeIter *iter )
 
 GtkTreePath *wxDataViewCtrlInternal::get_path_safe( GtkTreeIter *iter )
 {
+    g_model = m_wx_model;
+    
     GtkTreePath *retval = gtk_tree_path_new ();
     void *id = iter->user_data;    
     
@@ -2355,6 +2429,8 @@ GtkTreePath *wxDataViewCtrlInternal::get_path_safe( GtkTreeIter *iter )
 
 gboolean wxDataViewCtrlInternal::iter_next( GtkTreeIter *iter )
 {
+    g_model = m_wx_model;
+    
     wxGtkTreeModelNode *parent = FindParentNode( iter );
     unsigned int pos = parent->GetChildren().Index( iter->user_data );
     
@@ -2369,6 +2445,8 @@ gboolean wxDataViewCtrlInternal::iter_next( GtkTreeIter *iter )
 
 gboolean wxDataViewCtrlInternal::iter_children( GtkTreeIter *iter, GtkTreeIter *parent )
 {
+    g_model = m_wx_model;
+    
     wxDataViewItem item( (void*) parent->user_data );
     
     if (!m_wx_model->IsContainer( item ))
@@ -2388,6 +2466,8 @@ gboolean wxDataViewCtrlInternal::iter_children( GtkTreeIter *iter, GtkTreeIter *
 
 gboolean wxDataViewCtrlInternal::iter_has_child( GtkTreeIter *iter )
 {
+    g_model = m_wx_model;
+    
     wxDataViewItem item( (void*) iter->user_data );
     bool is_container = m_wx_model->IsContainer( item );
     
@@ -2402,6 +2482,8 @@ gboolean wxDataViewCtrlInternal::iter_has_child( GtkTreeIter *iter )
 
 gint wxDataViewCtrlInternal::iter_n_children( GtkTreeIter *iter )
 {
+    g_model = m_wx_model;
+    
     wxDataViewItem item( (void*) iter->user_data );
     
     if (!m_wx_model->IsContainer( item ))
@@ -2417,6 +2499,8 @@ gint wxDataViewCtrlInternal::iter_n_children( GtkTreeIter *iter )
 
 gboolean wxDataViewCtrlInternal::iter_nth_child( GtkTreeIter *iter, GtkTreeIter *parent, gint n )
 {
+    g_model = m_wx_model;
+    
     void* id = NULL;
     if (parent) id = (void*) parent->user_data;
     wxDataViewItem item( id );
@@ -2437,6 +2521,8 @@ gboolean wxDataViewCtrlInternal::iter_nth_child( GtkTreeIter *iter, GtkTreeIter
 
 gboolean wxDataViewCtrlInternal::iter_parent( GtkTreeIter *iter, GtkTreeIter *child )
 {
+    g_model = m_wx_model;
+
     wxGtkTreeModelNode *node = FindParentNode( child );
     if (!node)
         return FALSE;