[gtk+/parasite2: 16/38] parasite: Use template for widget tree
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/parasite2: 16/38] parasite: Use template for widget tree
- Date: Thu, 8 May 2014 22:17:12 +0000 (UTC)
commit 6fbcccd56310b6cf4c9ead2078a9008a70a0de2d
Author: Matthias Clasen <mclasen redhat com>
Date: Sun May 4 19:53:04 2014 -0400
parasite: Use template for widget tree
modules/other/parasite/parasite.gresource.xml | 1 +
modules/other/parasite/widget-tree.c | 310 ++++++-------------------
modules/other/parasite/widget-tree.h | 30 ++--
modules/other/parasite/widget-tree.ui | 113 +++++++++
4 files changed, 201 insertions(+), 253 deletions(-)
---
diff --git a/modules/other/parasite/parasite.gresource.xml b/modules/other/parasite/parasite.gresource.xml
index 2e2d939..5f121be 100644
--- a/modules/other/parasite/parasite.gresource.xml
+++ b/modules/other/parasite/parasite.gresource.xml
@@ -5,5 +5,6 @@
<file>object-hierarchy.ui</file>
<file>css-editor.ui</file>
<file>classes-list.ui</file>
+ <file>widget-tree.ui</file>
</gresource>
</gresources>
diff --git a/modules/other/parasite/widget-tree.c b/modules/other/parasite/widget-tree.c
index e35c505..7a526e4 100644
--- a/modules/other/parasite/widget-tree.c
+++ b/modules/other/parasite/widget-tree.c
@@ -35,8 +35,7 @@ enum
WIDGET_VISIBLE,
WIDGET_MAPPED,
OBJECT_ADDRESS,
- SENSITIVE,
- NUM_COLUMNS
+ SENSITIVE
};
@@ -58,138 +57,47 @@ static guint widget_tree_signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE_WITH_PRIVATE (ParasiteWidgetTree, parasite_widget_tree, GTK_TYPE_TREE_VIEW)
static void
-parasite_widget_tree_on_widget_selected(GtkTreeSelection *selection,
- ParasiteWidgetTree *widget_tree)
+on_widget_selected (GtkTreeSelection *selection,
+ ParasiteWidgetTree *wt)
{
- g_signal_emit(widget_tree, widget_tree_signals[WIDGET_CHANGED], 0);
+ g_signal_emit (wt, widget_tree_signals[WIDGET_CHANGED], 0);
}
static void
-parasite_widget_tree_init (ParasiteWidgetTree *widget_tree)
+parasite_widget_tree_init (ParasiteWidgetTree *wt)
{
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- GtkTreeSelection *selection;
-
- widget_tree->priv = parasite_widget_tree_get_instance_private (widget_tree);
-
- widget_tree->priv->iters = g_hash_table_new_full (g_direct_hash,
- g_direct_equal,
- NULL,
- (GDestroyNotify) gtk_tree_iter_free);
-
- widget_tree->priv->model = gtk_tree_store_new(
- NUM_COLUMNS,
- G_TYPE_POINTER, // OBJECT
- G_TYPE_STRING, // OBJECT_TYPE
- G_TYPE_STRING, // OBJECT_NAME
- G_TYPE_BOOLEAN, // WIDGET_REALIZED
- G_TYPE_BOOLEAN, // WIDGET_VISIBLE
- G_TYPE_BOOLEAN, // WIDGET_MAPPED
- G_TYPE_STRING, // OBJECT_ADDRESS
- G_TYPE_BOOLEAN);// SENSITIVE
-
- gtk_tree_view_set_model(GTK_TREE_VIEW(widget_tree),
- GTK_TREE_MODEL(widget_tree->priv->model));
- gtk_tree_view_set_enable_search(GTK_TREE_VIEW(widget_tree), TRUE);
- gtk_tree_view_set_search_column(GTK_TREE_VIEW(widget_tree), OBJECT_NAME);
-
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget_tree));
- g_signal_connect(G_OBJECT(selection), "changed",
- G_CALLBACK(parasite_widget_tree_on_widget_selected),
- widget_tree);
-
- // Widget column
- renderer = gtk_cell_renderer_text_new();
- g_object_set(G_OBJECT(renderer), "scale", TREE_TEXT_SCALE, NULL);
- column = gtk_tree_view_column_new_with_attributes("Widget", renderer,
- "text", OBJECT_TYPE,
- "sensitive", SENSITIVE,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(widget_tree), column);
- gtk_tree_view_column_set_resizable(column, TRUE);
-
- // Name column
- renderer = gtk_cell_renderer_text_new();
- g_object_set(G_OBJECT(renderer), "scale", TREE_TEXT_SCALE, NULL);
- column = gtk_tree_view_column_new_with_attributes("Name", renderer,
- "text", OBJECT_NAME,
- "sensitive", SENSITIVE,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(widget_tree), column);
- gtk_tree_view_column_set_resizable(column, TRUE);
-
- // Realized column
- renderer = gtk_cell_renderer_toggle_new();
- g_object_set(G_OBJECT(renderer),
- "activatable", TRUE,
- "indicator-size", TREE_CHECKBOX_SIZE,
- NULL);
- column = gtk_tree_view_column_new_with_attributes("Realized",
- renderer,
- "active", WIDGET_REALIZED,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(widget_tree), column);
-
- // Mapped column
- renderer = gtk_cell_renderer_toggle_new();
- g_object_set(G_OBJECT(renderer),
- "activatable", TRUE,
- "indicator-size", TREE_CHECKBOX_SIZE,
- NULL);
- column = gtk_tree_view_column_new_with_attributes("Mapped",
- renderer,
- "active", WIDGET_MAPPED,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(widget_tree), column);
-
- // Visible column
- renderer = gtk_cell_renderer_toggle_new();
- g_object_set(G_OBJECT(renderer),
- "activatable", TRUE,
- "indicator-size", TREE_CHECKBOX_SIZE,
- NULL);
- column = gtk_tree_view_column_new_with_attributes("Visible",
- renderer,
- "active", WIDGET_VISIBLE,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(widget_tree), column);
-
- // Poinder Address column
- renderer = gtk_cell_renderer_text_new();
- g_object_set(G_OBJECT(renderer),
- "scale", TREE_TEXT_SCALE,
- "family", "monospace",
- NULL);
- column = gtk_tree_view_column_new_with_attributes("Pointer Address",
- renderer,
- "text", OBJECT_ADDRESS,
- "sensitive", SENSITIVE,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(widget_tree), column);
- gtk_tree_view_column_set_resizable(column, TRUE);
-
- parasite_widget_tree_append_object (widget_tree, G_OBJECT (gtk_settings_get_default ()), NULL);
+ wt->priv = parasite_widget_tree_get_instance_private (wt);
+ wt->priv->iters = g_hash_table_new_full (g_direct_hash,
+ g_direct_equal,
+ NULL,
+ (GDestroyNotify) gtk_tree_iter_free);
+ gtk_widget_init_template (GTK_WIDGET (wt));
+
+ parasite_widget_tree_append_object (wt, G_OBJECT (gtk_settings_get_default ()), NULL);
}
-
static void
-parasite_widget_tree_class_init(ParasiteWidgetTreeClass *klass)
+parasite_widget_tree_class_init (ParasiteWidgetTreeClass *klass)
{
- klass->widget_changed = NULL;
-
- widget_tree_signals[WIDGET_CHANGED] =
- g_signal_new("widget-changed",
- G_OBJECT_CLASS_TYPE(klass),
- G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
- G_STRUCT_OFFSET(ParasiteWidgetTreeClass, widget_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ klass->widget_changed = NULL;
+
+ widget_tree_signals[WIDGET_CHANGED] =
+ g_signal_new ("widget-changed",
+ G_OBJECT_CLASS_TYPE(klass),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
+ G_STRUCT_OFFSET(ParasiteWidgetTreeClass, widget_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/parasite/widget-tree.ui");
+ gtk_widget_class_bind_template_child_private (widget_class, ParasiteWidgetTree, model);
+ gtk_widget_class_bind_template_callback (widget_class, on_widget_selected);
}
-
GtkWidget *
parasite_widget_tree_new ()
{
@@ -198,13 +106,13 @@ parasite_widget_tree_new ()
GObject *
-parasite_widget_tree_get_selected_object (ParasiteWidgetTree *widget_tree)
+parasite_widget_tree_get_selected_object (ParasiteWidgetTree *wt)
{
GtkTreeIter iter;
GtkTreeSelection *sel;
GtkTreeModel *model;
- sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget_tree));
+ sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (wt));
if (gtk_tree_selection_get_selected (sel, &model, &iter))
{
@@ -218,28 +126,33 @@ parasite_widget_tree_get_selected_object (ParasiteWidgetTree *widget_tree)
return NULL;
}
-static void
-on_container_forall(GtkWidget *widget, gpointer data)
+typedef struct
{
- GList **list = (GList **)data;
+ ParasiteWidgetTree *wt;
+ GtkTreeIter *iter;
+} FindAllData;
- *list = g_list_append(*list, widget);
+static void
+on_container_forall (GtkWidget *widget,
+ gpointer data)
+{
+ FindAllData *d = data;
+ parasite_widget_tree_append_object (d->wt, G_OBJECT (widget), d->iter);
}
void
-parasite_widget_tree_append_object (ParasiteWidgetTree *widget_tree,
+parasite_widget_tree_append_object (ParasiteWidgetTree *wt,
GObject *object,
GtkTreeIter *parent_iter)
{
GtkTreeIter iter;
- const char *class_name = G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (object));
- const char *name = NULL;
- char *address;
+ const gchar *class_name = G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (object));
+ const gchar *name = NULL;
+ gchar *address;
gboolean realized;
gboolean mapped;
gboolean visible;
gboolean is_widget;
- GList *l;
realized = mapped = visible = FALSE;
@@ -248,7 +161,6 @@ parasite_widget_tree_append_object (ParasiteWidgetTree *widget_tree,
{
GtkWidget *widget = GTK_WIDGET (object);
name = gtk_widget_get_name (GTK_WIDGET (object));
-
realized = gtk_widget_get_realized (widget);
mapped = gtk_widget_get_mapped (widget);
visible = gtk_widget_get_visible (widget);
@@ -257,27 +169,19 @@ parasite_widget_tree_append_object (ParasiteWidgetTree *widget_tree,
if (name == NULL || g_strcmp0 (name, class_name) == 0)
{
if (GTK_IS_LABEL (object))
- {
- name = gtk_label_get_text (GTK_LABEL (object));
- }
+ name = gtk_label_get_text (GTK_LABEL (object));
else if (GTK_IS_BUTTON (object))
- {
- name = gtk_button_get_label (GTK_BUTTON (object));
- }
+ name = gtk_button_get_label (GTK_BUTTON (object));
else if (GTK_IS_WINDOW (object))
- {
- name = gtk_window_get_title (GTK_WINDOW (object));
- }
+ name = gtk_window_get_title (GTK_WINDOW (object));
else
- {
- name = "";
- }
+ name = "";
}
address = g_strdup_printf ("%p", object);
- gtk_tree_store_append (widget_tree->priv->model, &iter, parent_iter);
- gtk_tree_store_set (widget_tree->priv->model, &iter,
+ gtk_tree_store_append (wt->priv->model, &iter, parent_iter);
+ gtk_tree_store_set (wt->priv->model, &iter,
OBJECT, object,
OBJECT_TYPE, class_name,
OBJECT_NAME, name,
@@ -287,106 +191,39 @@ parasite_widget_tree_append_object (ParasiteWidgetTree *widget_tree,
OBJECT_ADDRESS, address,
SENSITIVE, !is_widget || (realized && mapped && visible),
-1);
- g_hash_table_insert (widget_tree->priv->iters, object, gtk_tree_iter_copy (&iter));
+ g_hash_table_insert (wt->priv->iters, object, gtk_tree_iter_copy (&iter));
g_free(address);
if (GTK_IS_CONTAINER (object))
{
- GList* children = NULL;
-
- /* Pick up all children, including those that are internal. */
- gtk_container_forall (GTK_CONTAINER (object),
- on_container_forall, &children);
+ FindAllData data;
- for (l = children; l != NULL; l = l->next)
- {
- parasite_widget_tree_append_object (widget_tree, l->data, &iter);
- }
+ data.wt = wt;
+ data.iter = &iter;
- g_list_free(children);
+ gtk_container_forall (GTK_CONTAINER (object), on_container_forall, &data);
}
}
void
-parasite_widget_tree_scan (ParasiteWidgetTree *widget_tree,
+parasite_widget_tree_scan (ParasiteWidgetTree *wt,
GtkWidget *window)
{
- gtk_tree_store_clear (widget_tree->priv->model);
- g_hash_table_remove_all (widget_tree->priv->iters);
- parasite_widget_tree_append_object (widget_tree, G_OBJECT (gtk_settings_get_default ()), NULL);
- parasite_widget_tree_append_object (widget_tree, G_OBJECT (window), NULL);
-
- gtk_tree_view_columns_autosize (GTK_TREE_VIEW (widget_tree));
-}
-
-
-/*
-static GList *
-get_parents(GtkWidget *widget,
- GList *parents)
-{
- GtkWidget *parent = gtk_widget_get_parent(widget);
+ gtk_tree_store_clear (wt->priv->model);
+ g_hash_table_remove_all (wt->priv->iters);
+ parasite_widget_tree_append_object (wt, G_OBJECT (gtk_settings_get_default ()), NULL);
+ parasite_widget_tree_append_object (wt, G_OBJECT (window), NULL);
- parents = g_list_prepend(parents, widget);
-
- if (parent != NULL)
- return get_parents(parent, parents);
-
- return parents;
+ gtk_tree_view_columns_autosize (GTK_TREE_VIEW (wt));
}
gboolean
-parasite_widget_tree_find_widget (ParasiteWidgetTree *widget_tree,
- GtkWidget *widget,
- GtkTreeIter *iter)
-{
- GList *parents = get_parents (widget, NULL);
- GList *l;
- GtkTreeIter inner_iter, parent_iter = {0};
- gboolean found = FALSE;
- gboolean in_root = TRUE;
-
- for (l = parents; l != NULL; l = l->next)
- {
- GtkWidget *cur_widget = GTK_WIDGET (l->data);
- gboolean valid;
- found = FALSE;
-
- for (valid = gtk_tree_model_iter_children (widget_tree->priv->model,
- &inner_iter,
- in_root ? NULL : &parent_iter);
- valid;
- valid = gtk_tree_model_iter_next (widget_tree->priv->model, &inner_iter))
- {
- GtkWidget *iter_widget;
- gtk_tree_model_get (widget_tree->priv->model,
- &inner_iter,
- WIDGET, &iter_widget,
- -1);
- if (iter_widget == cur_widget)
- {
- parent_iter = inner_iter;
- in_root = FALSE;
- found = TRUE;
- break;
- }
- }
- }
-
- g_list_free(parents);
-
- *iter = inner_iter;
- return found;
-}
-*/
-
-gboolean
-parasite_widget_tree_find_object (ParasiteWidgetTree *widget_tree,
+parasite_widget_tree_find_object (ParasiteWidgetTree *wt,
GObject *object,
GtkTreeIter *iter)
{
- GtkTreeIter *internal_iter = g_hash_table_lookup (widget_tree->priv->iters, object);
+ GtkTreeIter *internal_iter = g_hash_table_lookup (wt->priv->iters, object);
if (internal_iter)
{
*iter = *internal_iter;
@@ -397,22 +234,19 @@ parasite_widget_tree_find_object (ParasiteWidgetTree *widget_tree,
}
void
-parasite_widget_tree_select_object (ParasiteWidgetTree *widget_tree,
+parasite_widget_tree_select_object (ParasiteWidgetTree *wt,
GObject *object)
{
GtkTreeIter iter;
- if (parasite_widget_tree_find_object (widget_tree, object, &iter))
+ if (parasite_widget_tree_find_object (wt, object, &iter))
{
- GtkTreePath *path = gtk_tree_model_get_path (GTK_TREE_MODEL (widget_tree->priv->model), &iter);
- gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widget_tree), path);
- gtk_tree_selection_select_iter(
- gtk_tree_view_get_selection(GTK_TREE_VIEW(widget_tree)),
- &iter);
- gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (widget_tree), path, NULL, FALSE, 0, 0);
+ GtkTreePath *path = gtk_tree_model_get_path (GTK_TREE_MODEL (wt->priv->model), &iter);
+ gtk_tree_view_expand_to_path (GTK_TREE_VIEW (wt), path);
+ gtk_tree_selection_select_iter (gtk_tree_view_get_selection (GTK_TREE_VIEW (wt)), &iter);
+ gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (wt), path, NULL, FALSE, 0, 0);
}
-
}
-// vim: set et sw=4 ts=4:
+// vim: set et sw=2 ts=2:
diff --git a/modules/other/parasite/widget-tree.h b/modules/other/parasite/widget-tree.h
index f3c5017..9c078c0 100644
--- a/modules/other/parasite/widget-tree.h
+++ b/modules/other/parasite/widget-tree.h
@@ -37,17 +37,17 @@
typedef struct _ParasiteWidgetTreePrivate ParasiteWidgetTreePrivate;
-typedef struct _ParasiteWidgetTree {
- GtkTreeView parent;
-
- // Private
- ParasiteWidgetTreePrivate *priv;
+typedef struct _ParasiteWidgetTree
+{
+ GtkTreeView parent;
+ ParasiteWidgetTreePrivate *priv;
} ParasiteWidgetTree;
-typedef struct _ParasiteWidgetTreeClass {
- GtkTreeViewClass parent;
+typedef struct _ParasiteWidgetTreeClass
+{
+ GtkTreeViewClass parent;
- void (*widget_changed)(ParasiteWidgetTree *tree);
+ void (*widget_changed) (ParasiteWidgetTree *tree);
} ParasiteWidgetTreeClass;
@@ -57,16 +57,16 @@ G_BEGIN_DECLS
GType parasite_widget_tree_get_type (void);
GtkWidget *parasite_widget_tree_new (void);
-GObject *parasite_widget_tree_get_selected_object (ParasiteWidgetTree *widget_tree);
+GObject *parasite_widget_tree_get_selected_object (ParasiteWidgetTree *wt);
-void parasite_widget_tree_scan (ParasiteWidgetTree *widget_tree,
- GtkWidget *window);
-void parasite_widget_tree_select_object (ParasiteWidgetTree *widget_tree,
+void parasite_widget_tree_scan (ParasiteWidgetTree *wt,
+ GtkWidget *window);
+void parasite_widget_tree_select_object (ParasiteWidgetTree *wt,
GObject *object);
-void parasite_widget_tree_append_object (ParasiteWidgetTree *widget_tree,
+void parasite_widget_tree_append_object (ParasiteWidgetTree *wt,
GObject *object,
GtkTreeIter *parent_iter);
-gboolean parasite_widget_tree_find_object (ParasiteWidgetTree *widget_tree,
+gboolean parasite_widget_tree_find_object (ParasiteWidgetTree *wt,
GObject *object,
GtkTreeIter *iter);
@@ -75,4 +75,4 @@ G_END_DECLS
#endif // _GTKPARASITE_WIDGETTREE_H_
-// vim: set et sw=4 ts=4:
+// vim: set et sw=2 ts=2:
diff --git a/modules/other/parasite/widget-tree.ui b/modules/other/parasite/widget-tree.ui
new file mode 100644
index 0000000..8803fde
--- /dev/null
+++ b/modules/other/parasite/widget-tree.ui
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <object class="GtkTreeStore" id="model">
+ <columns>
+ <column type="gpointer"/>
+ <column type="gchararray"/>
+ <column type="gchararray"/>
+ <column type="gboolean"/>
+ <column type="gboolean"/>
+ <column type="gboolean"/>
+ <column type="gchararray"/>
+ <column type="gboolean"/>
+ </columns>
+ </object>
+ <template class="ParasiteWidgetTree" parent="GtkTreeView">
+ <property name="model">model</property>
+ <property name="enable-search">True</property>
+ <property name="search-column">2</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection">
+ <signal name="changed" handler="on_widget_selected"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn">
+ <property name="title">Widget</property>
+ <property name="resizable">True</property>
+ <child>
+ <object class="GtkCellRendererText">
+ <property name="scale">0.8</property>
+ </object>
+ <attributes>
+ <attribute name="text">1</attribute>
+ <attribute name="sensitive">7</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn">
+ <property name="title">Name</property>
+ <property name="resizable">True</property>
+ <child>
+ <object class="GtkCellRendererText">
+ <property name="scale">0.8</property>
+ </object>
+ <attributes>
+ <attribute name="text">2</attribute>
+ <attribute name="sensitive">7</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn">
+ <property name="title">Realized</property>
+ <child>
+ <object class="GtkCellRendererToggle">
+ <property name="activatable">True</property>
+ <property name="indicator-size">10</property>
+ </object>
+ <attributes>
+ <attribute name="active">3</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn">
+ <property name="title">Mapped</property>
+ <child>
+ <object class="GtkCellRendererToggle">
+ <property name="activatable">True</property>
+ <property name="indicator-size">10</property>
+ </object>
+ <attributes>
+ <attribute name="active">4</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn">
+ <property name="title">Visible</property>
+ <child>
+ <object class="GtkCellRendererToggle">
+ <property name="activatable">True</property>
+ <property name="indicator-size">10</property>
+ </object>
+ <attributes>
+ <attribute name="active">5</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn">
+ <property name="title">Address</property>
+ <property name="resizable">True</property>
+ <child>
+ <object class="GtkCellRendererText">
+ <property name="scale">0.8</property>
+ <property name="family">monospace</property>
+ </object>
+ <attributes>
+ <attribute name="text">6</attribute>
+ <attribute name="sensitive">7</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]