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 );
{
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() );
}
}
+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 );
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 );
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;
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;
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;
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 ))
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();
if (!iter)
return m_root;
- wxDataViewItem item( (wxUint32) iter->user_data );
+ wxDataViewItem item( (void*) iter->user_data );
wxGtkTreeModelNode *result = wxGtkTreeModel_FindNode( m_root, item );
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
//-----------------------------------------------------------------------------
// 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;
}
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();
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;
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;
}
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();
GTK_TREE_MODEL(m_wxgtk_model), path );
gtk_tree_path_free (path);
+ m_wxgtk_model->model->ItemDeleted( item );
+
return true;
}
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)
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)
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() );
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()
{
}