aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/table/e-tree-scrolled.c
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/table/e-tree-scrolled.c')
-rw-r--r--widgets/table/e-tree-scrolled.c207
1 files changed, 207 insertions, 0 deletions
diff --git a/widgets/table/e-tree-scrolled.c b/widgets/table/e-tree-scrolled.c
new file mode 100644
index 0000000000..35a5be3729
--- /dev/null
+++ b/widgets/table/e-tree-scrolled.c
@@ -0,0 +1,207 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * E-tree-scrolled.c: A graphical view of a Tree.
+ *
+ * Author:
+ * Chris Lahey <clahey@ximian.com>
+ * Miguel de Icaza (miguel@ximian.com)
+ *
+ * Copyright 2000, 1999, Ximian, Inc
+ */
+#include <config.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdio.h>
+#include <libgnomeui/gnome-canvas.h>
+#include <gtk/gtksignal.h>
+#include <gnome-xml/parser.h>
+#include <gnome-xml/xmlmemory.h>
+
+#include "e-tree-scrolled.h"
+
+#define COLUMN_HEADER_HEIGHT 16
+
+#define PARENT_TYPE e_scroll_frame_get_type ()
+
+static GtkObjectClass *parent_class;
+
+enum {
+ ARG_0,
+ ARG_TREE,
+};
+
+static void
+e_tree_scrolled_init (GtkObject *object)
+{
+ ETreeScrolled *ets;
+ EScrollFrame *scroll_frame;
+
+ ets = E_TREE_SCROLLED (object);
+ scroll_frame = E_SCROLL_FRAME (object);
+
+ GTK_WIDGET_SET_FLAGS (ets, GTK_CAN_FOCUS);
+
+ ets->tree = gtk_type_new(e_tree_get_type());
+
+ e_scroll_frame_set_policy (scroll_frame, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ e_scroll_frame_set_shadow_type (scroll_frame, GTK_SHADOW_IN);
+}
+
+static void
+e_tree_scrolled_real_construct (ETreeScrolled *ets)
+{
+ gtk_container_add(GTK_CONTAINER(ets), GTK_WIDGET(ets->tree));
+
+ gtk_widget_show(GTK_WIDGET(ets->tree));
+}
+
+ETreeScrolled *e_tree_scrolled_construct (ETreeScrolled *ets,
+ ETreeModel *etm,
+ ETableExtras *ete,
+ const char *spec,
+ const char *state)
+{
+ g_return_val_if_fail(ets != NULL, NULL);
+ g_return_val_if_fail(E_IS_TREE_SCROLLED(ets), NULL);
+ g_return_val_if_fail(etm != NULL, NULL);
+ g_return_val_if_fail(E_IS_TREE_MODEL(etm), NULL);
+ g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
+ g_return_val_if_fail(spec != NULL, NULL);
+
+ e_tree_construct(ets->tree, etm, ete, spec, state);
+
+ e_tree_scrolled_real_construct(ets);
+
+ return ets;
+}
+
+GtkWidget *e_tree_scrolled_new (ETreeModel *etm,
+ ETableExtras *ete,
+ const char *spec,
+ const char *state)
+{
+ ETreeScrolled *ets;
+
+ g_return_val_if_fail(etm != NULL, NULL);
+ g_return_val_if_fail(E_IS_TREE_MODEL(etm), NULL);
+ g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
+ g_return_val_if_fail(spec != NULL, NULL);
+
+ ets = E_TREE_SCROLLED (gtk_widget_new (e_tree_scrolled_get_type (),
+ "hadjustment", NULL,
+ "vadjustment", NULL,
+ NULL));
+
+ ets = e_tree_scrolled_construct (ets, etm, ete, spec, state);
+
+ return GTK_WIDGET (ets);
+}
+
+ETreeScrolled *e_tree_scrolled_construct_from_spec_file (ETreeScrolled *ets,
+ ETreeModel *etm,
+ ETableExtras *ete,
+ const char *spec_fn,
+ const char *state_fn)
+{
+ g_return_val_if_fail(ets != NULL, NULL);
+ g_return_val_if_fail(E_IS_TREE_SCROLLED(ets), NULL);
+ g_return_val_if_fail(etm != NULL, NULL);
+ g_return_val_if_fail(E_IS_TREE_MODEL(etm), NULL);
+ g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
+ g_return_val_if_fail(spec_fn != NULL, NULL);
+
+ e_tree_construct_from_spec_file(ets->tree, etm, ete, spec_fn, state_fn);
+
+ e_tree_scrolled_real_construct(ets);
+
+ return ets;
+}
+
+GtkWidget *e_tree_scrolled_new_from_spec_file (ETreeModel *etm,
+ ETableExtras *ete,
+ const char *spec_fn,
+ const char *state_fn)
+{
+ ETreeScrolled *ets;
+
+ g_return_val_if_fail(etm != NULL, NULL);
+ g_return_val_if_fail(E_IS_TREE_MODEL(etm), NULL);
+ g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
+ g_return_val_if_fail(spec_fn != NULL, NULL);
+
+ ets = gtk_type_new (e_tree_scrolled_get_type ());
+
+ ets = e_tree_scrolled_construct_from_spec_file (ets, etm, ete, spec_fn, state_fn);
+
+ return GTK_WIDGET (ets);
+}
+
+ETree *
+e_tree_scrolled_get_tree (ETreeScrolled *ets)
+{
+ return ets->tree;
+}
+
+static void
+ets_get_arg (GtkObject *o, GtkArg *arg, guint arg_id)
+{
+ ETreeScrolled *ets = E_TREE_SCROLLED (o);
+
+ switch (arg_id){
+ case ARG_TREE:
+ if (ets->tree)
+ GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(ets->tree);
+ else
+ GTK_VALUE_OBJECT (*arg) = NULL;
+ break;
+ }
+}
+
+/* Grab_focus handler for the scrolled ETree */
+static void
+ets_grab_focus (GtkWidget *widget)
+{
+ ETreeScrolled *ets;
+
+ ets = E_TREE_SCROLLED (widget);
+
+ gtk_widget_grab_focus (GTK_WIDGET (ets->tree));
+}
+
+/* Focus handler for the scrolled ETree */
+static gint
+ets_focus (GtkContainer *container, GtkDirectionType direction)
+{
+ ETreeScrolled *ets;
+
+ ets = E_TREE_SCROLLED (container);
+
+ return gtk_container_focus (GTK_CONTAINER (ets->tree), direction);
+}
+
+static void
+e_tree_scrolled_class_init (ETreeScrolledClass *class)
+{
+ GtkObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+ GtkContainerClass *container_class;
+
+ object_class = (GtkObjectClass *) class;
+ widget_class = (GtkWidgetClass *) class;
+ container_class = (GtkContainerClass *) class;
+
+ parent_class = gtk_type_class (PARENT_TYPE);
+
+ object_class->get_arg = ets_get_arg;
+
+ widget_class->grab_focus = ets_grab_focus;
+
+ container_class->focus = ets_focus;
+
+ gtk_object_add_arg_type ("ETreeScrolled::tree", GTK_TYPE_OBJECT,
+ GTK_ARG_READABLE, ARG_TREE);
+}
+
+E_MAKE_TYPE(e_tree_scrolled, "ETreeScrolled", ETreeScrolled, e_tree_scrolled_class_init, e_tree_scrolled_init, PARENT_TYPE);
+