Lines Matching defs:tree
2 * Specialization of GtkTreeView for the XML tree view
16 #include "sp-xmlview-tree.h"
19 SPXMLViewTree * tree;
32 static NodeData * node_data_new (SPXMLViewTree * tree, GtkTreeIter * node, GtkTreeRowReference *rowref, Inkscape::XML::Node * repr);
34 static GtkTreeRowReference * add_node (SPXMLViewTree * tree, GtkTreeIter * parent, GtkTreeIter * before, Inkscape::XML::Node * repr);
48 GtkTreeRowReference *tree_iter_to_ref (SPXMLViewTree * tree, GtkTreeIter* iter);
49 static gboolean tree_ref_to_iter (SPXMLViewTree * tree, GtkTreeIter* iter, GtkTreeRowReference *ref);
92 SPXMLViewTree *tree = SP_XMLVIEW_TREE(g_object_new (SP_TYPE_XMLVIEW_TREE, NULL));
94 tree->store = gtk_tree_store_new (STORE_N_COLS, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER);
97 g_object_ref(tree->store);
98 gtk_tree_view_set_model(GTK_TREE_VIEW(tree), NULL);
100 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(tree), FALSE);
101 gtk_tree_view_set_reorderable (GTK_TREE_VIEW(tree), TRUE);
102 gtk_tree_view_set_enable_search (GTK_TREE_VIEW(tree), TRUE);
103 gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW(tree), search_equal_func, NULL, NULL);
107 gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
111 sp_xmlview_tree_set_repr (tree, repr);
113 g_signal_connect(G_OBJECT(tree->store), "row-changed", G_CALLBACK(on_row_changed), tree);
114 g_signal_connect(GTK_TREE_VIEW(tree), "drag_data_received", G_CALLBACK(on_drag_data_received), tree);
115 g_signal_connect(GTK_TREE_VIEW(tree), "drag-motion", G_CALLBACK(do_drag_motion), tree);
117 return GTK_WIDGET(tree);
132 // Signal for when a tree drag and drop has completed
144 sp_xmlview_tree_init (SPXMLViewTree * tree)
146 tree->repr = NULL;
147 tree->blocked = 0;
148 tree->dndactive = FALSE;
158 SPXMLViewTree * tree = SP_XMLVIEW_TREE (object);
160 sp_xmlview_tree_set_repr (tree, NULL);
170 * Add a new row to the tree
173 add_node (SPXMLViewTree * tree, GtkTreeIter *parent, GtkTreeIter *before, Inkscape::XML::Node * repr)
179 g_assert (tree != NULL);
182 if (before && !gtk_tree_store_iter_is_valid(tree->store, before)) {
187 gtk_tree_store_insert_before (tree->store, &iter, parent, before);
189 if (!gtk_tree_store_iter_is_valid(tree->store, &iter)) {
193 GtkTreeRowReference *rowref = tree_iter_to_ref (tree, &iter);
194 data = node_data_new (tree, &iter, rowref, repr);
197 gtk_tree_store_set (tree->store, &iter, STORE_TEXT_COL, default_text, STORE_DATA_COL, data, STORE_REPR_COL, repr, -1);
223 NodeData *node_data_new(SPXMLViewTree * tree, GtkTreeIter * /*node*/, GtkTreeRowReference *rowref, Inkscape::XML::Node *repr)
226 data->tree = tree;
238 if (data->tree->blocked) return;
245 tree_ref_to_iter(data->tree, &data_iter, data->rowref);
246 add_node (data->tree, &data_iter, &before, child);
254 if (data->tree->blocked) return;
271 if (tree_ref_to_iter(data->tree, &iter, data->rowref)) {
272 gtk_tree_store_set (GTK_TREE_STORE(data->tree->store), &iter, STORE_TEXT_COL, label, -1);
281 if (data->tree->blocked) return;
285 gtk_tree_store_remove (GTK_TREE_STORE(data->tree->store), &iter);
294 if (data->tree->blocked) return;
299 if (gtk_tree_store_iter_is_valid(data->tree->store, &before)) {
300 gtk_tree_store_move_before (data->tree->store, &node, &before);
303 gtk_tree_store_move_after (data->tree->store, &node, &before);
311 if (data->tree->blocked) return;
315 if (tree_ref_to_iter(data->tree, &iter, data->rowref)) {
316 gtk_tree_store_set (GTK_TREE_STORE(data->tree->store), &iter, STORE_TEXT_COL, label, -1);
326 if (data->tree->blocked) return;
330 if (tree_ref_to_iter(data->tree, &iter, data->rowref)) {
331 gtk_tree_store_set (GTK_TREE_STORE(data->tree->store), &iter, STORE_TEXT_COL, label, -1);
340 if (data->tree->blocked) return;
344 if (tree_ref_to_iter(data->tree, &iter, data->rowref)) {
345 gtk_tree_store_set (GTK_TREE_STORE(data->tree->store), &iter, STORE_TEXT_COL, label, -1);
357 SPXMLViewTree *tree = static_cast<SPXMLViewTree *>(userdata);
358 if (!tree) {
362 if (tree->dndactive) {
368 GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
371 tree->dndactive = TRUE;
376 parent_ref = tree_iter_to_ref (tree, &parent_iter);
379 g_object_set_data(G_OBJECT(tree), "drag-src-path", parent_ref);
389 SPXMLViewTree *tree = SP_XMLVIEW_TREE(user_data);
391 if (!tree->dndactive) {
394 tree->dndactive = FALSE;
400 g_signal_emit_by_name(G_OBJECT (tree), "tree_move", GUINT_TO_POINTER(0) );
404 GtkTreeRowReference *old_parent_ref = static_cast<GtkTreeRowReference *>(g_object_get_data (G_OBJECT (tree), "drag-src-path"));
407 g_signal_emit_by_name(G_OBJECT (tree), "tree_move", GUINT_TO_POINTER(0) );
412 if (!tree_ref_to_iter(tree, &old_parent, old_parent_ref)) {
414 g_signal_emit_by_name(G_OBJECT (tree), "tree_move", GUINT_TO_POINTER(0) );
438 SP_XMLVIEW_TREE (tree)->blocked++;
445 SP_XMLVIEW_TREE (tree)->blocked--;
448 GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
449 gtk_tree_view_expand_to_path (GTK_TREE_VIEW(tree), path);
450 //gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW(tree), path, NULL, true, 0.66, 0.0);
454 g_signal_emit_by_name(G_OBJECT (tree), "tree_move", GUINT_TO_POINTER(1) );
466 gtk_tree_model_iter_next (GTK_TREE_MODEL(data->tree->store), iter);
469 if (!tree_ref_to_iter(data->tree, &data_iter, data->rowref)) {
472 gtk_tree_model_iter_children(GTK_TREE_MODEL(data->tree->store), iter, &data_iter);
483 tree_ref_to_iter(data->tree, &data_iter, data->rowref);
484 GtkTreeModel *model = GTK_TREE_MODEL(data->tree->store);
487 if (!gtk_tree_store_iter_is_valid(data->tree->store, &data_iter)) {
514 GtkTreeRowReference *tree_iter_to_ref (SPXMLViewTree * tree, GtkTreeIter* iter)
516 GtkTreePath* path = gtk_tree_model_get_path(GTK_TREE_MODEL(tree->store), iter);
517 GtkTreeRowReference *ref = gtk_tree_row_reference_new(GTK_TREE_MODEL(tree->store), path);
526 gboolean tree_ref_to_iter (SPXMLViewTree * tree, GtkTreeIter* iter, GtkTreeRowReference *ref)
532 gtk_tree_model_get_iter(GTK_TREE_MODEL(tree->store), iter, path);
534 return gtk_tree_store_iter_is_valid(GTK_TREE_STORE(tree->store), iter);
569 SPXMLViewTree *tree = SP_XMLVIEW_TREE(user_data);
571 gtk_tree_model_get_iter(GTK_TREE_MODEL(tree->store), &iter, path);
572 if (sp_xmlview_tree_node_get_repr (GTK_TREE_MODEL(tree->store), &iter)->type() != Inkscape::XML::ELEMENT_NODE) {
594 * Set the tree selection and scroll to the row with the given repr
597 sp_xmlview_tree_set_repr (SPXMLViewTree * tree, Inkscape::XML::Node * repr)
599 if ( tree->repr == repr ) return;
600 if (tree->repr) {
606 //gtk_tree_store_clear(tree->store);
607 gtk_tree_view_set_model(GTK_TREE_VIEW(tree), NULL);
608 g_object_unref(tree->store);
609 tree->store = gtk_tree_store_new (STORE_N_COLS, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER);
610 gtk_tree_view_set_model (GTK_TREE_VIEW(tree), GTK_TREE_MODEL(tree->store));
612 Inkscape::GC::release(tree->repr);
614 tree->repr = repr;
618 rowref = add_node (tree, NULL, NULL, repr);
620 // Set the tree model here, after all data is inserted
621 gtk_tree_view_set_model (GTK_TREE_VIEW(tree), GTK_TREE_MODEL(tree->store));
622 g_object_unref(tree->store);
625 gtk_tree_view_expand_to_path (GTK_TREE_VIEW(tree), path);
626 gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW(tree), path, NULL, true, 0.5, 0.0);
645 * Find a GtkTreeIter position in the tree by repr
648 sp_xmlview_tree_get_repr_node (SPXMLViewTree * tree, Inkscape::XML::Node * repr, GtkTreeIter *iter)
655 anode.tree = tree;
659 gtk_tree_model_foreach(GTK_TREE_MODEL(tree->store), foreach_func, &anode);
661 tree_ref_to_iter(tree, iter, anode.rowref);
674 GtkTreeRowReference *rowref = tree_iter_to_ref (anode->tree, iter);
683 * Callback function for string searches in the tree