aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/table/e-tree-model.c66
-rw-r--r--widgets/table/e-tree-model.h6
-rw-r--r--widgets/table/e-tree.c46
3 files changed, 117 insertions, 1 deletions
diff --git a/widgets/table/e-tree-model.c b/widgets/table/e-tree-model.c
index 60b01310ab..24eada7d56 100644
--- a/widgets/table/e-tree-model.c
+++ b/widgets/table/e-tree-model.c
@@ -740,3 +740,69 @@ e_tree_model_value_to_string (ETreeModel *etree, int col, const void *value)
else
return g_strdup("");
}
+
+/**
+ * e_tree_model_node_traverse:
+ * @model:
+ * @path:
+ * @func:
+ * @data:
+ *
+ *
+ **/
+void
+e_tree_model_node_traverse (ETreeModel *model, ETreePath path, ETreePathFunc func, gpointer data)
+{
+ ETreePath child;
+
+ g_return_if_fail (model != NULL);
+ g_return_if_fail (E_IS_TREE_MODEL (model));
+ g_return_if_fail (path != NULL);
+
+ child = e_tree_model_node_get_first_child (model, path);
+
+ while (child) {
+ ETreePath next_child;
+
+ next_child = e_tree_model_node_get_next (model, child);
+ e_tree_model_node_traverse (model, child, func, data);
+ if (func (model, child, data) == TRUE)
+ return;
+
+ child = next_child;
+ }
+}
+
+/**
+ * e_tree_model_node_traverse_preorder:
+ * @model:
+ * @path:
+ * @func:
+ * @data:
+ *
+ *
+ **/
+void
+e_tree_model_node_traverse_preorder (ETreeModel *model, ETreePath path, ETreePathFunc func, gpointer data)
+{
+ ETreePath child;
+
+ g_return_if_fail (model != NULL);
+ g_return_if_fail (E_IS_TREE_MODEL (model));
+ g_return_if_fail (path != NULL);
+
+ child = e_tree_model_node_get_first_child (model, path);
+
+ while (child) {
+ ETreePath next_child;
+
+ if (func (model, child, data) == TRUE)
+ return;
+
+ next_child = e_tree_model_node_get_next (model, child);
+ e_tree_model_node_traverse_preorder (model, child, func, data);
+
+ child = next_child;
+ }
+}
+
diff --git a/widgets/table/e-tree-model.h b/widgets/table/e-tree-model.h
index 720bd897de..0db3779e4a 100644
--- a/widgets/table/e-tree-model.h
+++ b/widgets/table/e-tree-model.h
@@ -142,7 +142,11 @@ void e_tree_model_node_traverse (ETreeModel *model,
ETreePath path,
ETreePathFunc func,
gpointer data);
-
+void e_tree_model_node_traverse_preorder (ETreeModel *model,
+ ETreePath path,
+ ETreePathFunc func,
+ gpointer data);
+
/*
** Routines for emitting signals on the ETreeModel
*/
diff --git a/widgets/table/e-tree.c b/widgets/table/e-tree.c
index fe8576175f..014009a41a 100644
--- a/widgets/table/e-tree.c
+++ b/widgets/table/e-tree.c
@@ -68,6 +68,10 @@ enum {
enum {
ARG_0,
ARG_LENGTH_THRESHOLD,
+ ARG_HORIZONTAL_DRAW_GRID,
+ ARG_VERTICAL_DRAW_GRID,
+ ARG_DRAW_FOCUS,
+ ARG_ETTA
};
struct ETreePriv {
@@ -1128,7 +1132,15 @@ e_tree_get_printable (ETree *e_tree)
static void
et_get_arg (GtkObject *o, GtkArg *arg, guint arg_id)
{
+ ETree *etree = E_TREE (o);
+
switch (arg_id){
+ case ARG_ETTA:
+ if (etree->priv->item) {
+ GTK_VALUE_OBJECT (*arg) = GTK_OBJECT (etree->priv->etta);
+ }
+ break;
+
default:
break;
}
@@ -1154,6 +1166,32 @@ et_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
}
break;
+ case ARG_HORIZONTAL_DRAW_GRID:
+ etree->priv->horizontal_draw_grid = GTK_VALUE_BOOL (*arg);
+ if (etree->priv->item) {
+ gnome_canvas_item_set (GNOME_CANVAS_ITEM(etree->priv->item),
+ "horizontal_draw_grid", GTK_VALUE_BOOL (*arg),
+ NULL);
+ }
+ break;
+
+ case ARG_VERTICAL_DRAW_GRID:
+ etree->priv->vertical_draw_grid = GTK_VALUE_BOOL (*arg);
+ if (etree->priv->item) {
+ gnome_canvas_item_set (GNOME_CANVAS_ITEM(etree->priv->item),
+ "vertical_draw_grid", GTK_VALUE_BOOL (*arg),
+ NULL);
+ }
+ break;
+
+ case ARG_DRAW_FOCUS:
+ etree->priv->draw_focus = GTK_VALUE_BOOL (*arg);
+ if (etree->priv->item) {
+ gnome_canvas_item_set (GNOME_CANVAS_ITEM(etree->priv->item),
+ "draw_focus", GTK_VALUE_BOOL (*arg),
+ NULL);
+ }
+ break;
}
}
@@ -2138,6 +2176,14 @@ e_tree_class_init (ETreeClass *class)
gtk_object_add_arg_type ("ETree::length_threshold", GTK_TYPE_INT,
GTK_ARG_WRITABLE, ARG_LENGTH_THRESHOLD);
+ gtk_object_add_arg_type ("ETree::horizontal_draw_grid", GTK_TYPE_BOOL,
+ GTK_ARG_WRITABLE, ARG_HORIZONTAL_DRAW_GRID);
+ gtk_object_add_arg_type ("ETree::vertical_draw_grid", GTK_TYPE_BOOL,
+ GTK_ARG_WRITABLE, ARG_VERTICAL_DRAW_GRID);
+ gtk_object_add_arg_type ("ETree::draw_focus", GTK_TYPE_BOOL,
+ GTK_ARG_WRITABLE, ARG_DRAW_FOCUS);
+ gtk_object_add_arg_type ("ETree::ETreeTableAdapter", GTK_TYPE_OBJECT,
+ GTK_ARG_READABLE, ARG_ETTA);
}
E_MAKE_TYPE(e_tree, "ETree", ETree, e_tree_class_init, e_tree_init, PARENT_TYPE);