[gtk+] inspector: Link to model for attributes



commit 9a23fd3313b3809f03f13d479c7833823704f2e0
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon May 19 00:13:30 2014 -0400

    inspector: Link to model for attributes

 gtk/inspector/prop-editor.c |   60 +++++++++++++++++++++++++++++++++++++++++++
 gtk/inspector/prop-list.c   |    6 +++-
 gtk/inspector/widget-tree.c |    5 +++-
 3 files changed, 69 insertions(+), 2 deletions(-)
---
diff --git a/gtk/inspector/prop-editor.c b/gtk/inspector/prop-editor.c
index c6a4e75..01de8ac 100644
--- a/gtk/inspector/prop-editor.c
+++ b/gtk/inspector/prop-editor.c
@@ -1056,6 +1056,28 @@ gtk_inspector_prop_editor_init (GtkInspectorPropEditor *editor)
                 NULL);
 }
 
+GtkTreeModel *
+gtk_cell_layout_get_model (GtkCellLayout *layout)
+{
+  if (GTK_IS_TREE_VIEW_COLUMN (layout))
+    return gtk_tree_view_get_model (GTK_TREE_VIEW (gtk_tree_view_column_get_tree_view (GTK_TREE_VIEW_COLUMN 
(layout))));
+  else if (GTK_IS_ICON_VIEW (layout))
+    return gtk_icon_view_get_model (GTK_ICON_VIEW (layout));
+  else if (GTK_IS_COMBO_BOX (layout)) 
+    return gtk_combo_box_get_model (GTK_COMBO_BOX (layout));
+  else
+    return NULL;
+}
+
+static void
+model_properties (GtkButton *button, GtkInspectorPropEditor *editor)
+{
+  GObject *model;
+
+  model = g_object_get_data (G_OBJECT (button), "model");
+  g_signal_emit (editor, signals[SHOW_OBJECT], 0, model, "model");
+}
+
 static void
 constructed (GObject *object)
 {
@@ -1070,6 +1092,44 @@ constructed (GObject *object)
   gtk_widget_show (label);
   gtk_container_add (GTK_CONTAINER (editor), label);
 
+  if (GTK_IS_CELL_RENDERER (editor->priv->object))
+    {
+      gpointer layout;
+      GtkCellArea *area;
+      GtkTreeModel *model = NULL;
+      gint col = -1;
+
+      layout = g_object_get_data (editor->priv->object, "gtk-inspector-cell-layout");
+      if (GTK_IS_CELL_LAYOUT (layout))
+        {
+          area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (layout));
+          col = gtk_cell_area_attribute_get_column (area,
+                                                    GTK_CELL_RENDERER (editor->priv->object), 
+                                                    editor->priv->name);
+          model = gtk_cell_layout_get_model (GTK_CELL_LAYOUT (layout));
+        }
+
+      if (col != -1)
+        {
+           GtkWidget *box;
+           GtkWidget *button;
+           gchar *text;
+
+           box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
+           text = g_strdup_printf (_("Mapped to column %d in %p (%s)"),
+                                   col, model, g_type_name (G_TYPE_FROM_INSTANCE (model)));
+           gtk_container_add (GTK_CONTAINER (box), gtk_label_new (text));
+           g_free (text);
+           button = gtk_button_new_with_label (_("Properties"));
+           g_object_set_data (G_OBJECT (button), "model", model);
+           g_signal_connect (button, "clicked", G_CALLBACK (model_properties), editor);
+           gtk_container_add (GTK_CONTAINER (box), button);
+           gtk_container_add (GTK_CONTAINER (editor), box);
+           gtk_widget_show_all (box);
+           return;
+        }
+    }
+
   can_modify = ((spec->flags & G_PARAM_WRITABLE) != 0 &&
                 (spec->flags & G_PARAM_CONSTRUCT_ONLY) == 0);
 
diff --git a/gtk/inspector/prop-list.c b/gtk/inspector/prop-list.c
index 89367a0..ad5dffe 100644
--- a/gtk/inspector/prop-list.c
+++ b/gtk/inspector/prop-list.c
@@ -241,10 +241,14 @@ gtk_inspector_prop_list_update_prop (GtkInspectorPropList *pl,
 
   if (GTK_IS_CELL_RENDERER (pl->priv->object))
     {
+      gpointer *layout;
       gpointer *area;
       gint column = -1;
 
-      area = g_object_get_data (pl->priv->object, "gtk-inspector-cell-area");
+      area = NULL;
+      layout = g_object_get_data (pl->priv->object, "gtk-inspector-cell-layout");
+      if (layout)
+        area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (layout));
       if (area)
         column = gtk_cell_area_attribute_get_column (GTK_CELL_AREA (area),
                                                      GTK_CELL_RENDERER (pl->priv->object),
diff --git a/gtk/inspector/widget-tree.c b/gtk/inspector/widget-tree.c
index 11d868f..2fef128 100644
--- a/gtk/inspector/widget-tree.c
+++ b/gtk/inspector/widget-tree.c
@@ -196,8 +196,10 @@ cell_callback (GtkCellRenderer *renderer,
                gpointer         data)
 {
   FindAllData *d = data;
+  gpointer cell_layout;
 
-  g_object_set_data (G_OBJECT (renderer), "gtk-inspector-cell-area", d->parent);
+  cell_layout = g_object_get_data (d->parent, "gtk-inspector-cell-layout");
+  g_object_set_data (G_OBJECT (renderer), "gtk-inspector-cell-layout", cell_layout);
   gtk_inspector_widget_tree_append_object (d->wt, G_OBJECT (renderer), d->iter, NULL);
 
   return FALSE;
@@ -360,6 +362,7 @@ gtk_inspector_widget_tree_append_object (GtkInspectorWidgetTree *wt,
       GtkCellArea *area;
 
       area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (object));
+      g_object_set_data (G_OBJECT (area), "gtk-inspector-cell-layout", object);
       gtk_inspector_widget_tree_append_object (wt, G_OBJECT (area), &iter, "cell-area");
     }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]