inspector: Minimal support for attributes

Show mapping information for cell renderer properties; no editing
yet.
This commit is contained in:
Matthias Clasen
2014-05-08 10:16:58 -04:00
parent e87addd9ae
commit 86adead803
3 changed files with 55 additions and 11 deletions

View File

@@ -32,7 +32,8 @@ enum
COLUMN_DEFINED_AT,
COLUMN_OBJECT,
COLUMN_TOOLTIP,
COLUMN_WRITABLE
COLUMN_WRITABLE,
COLUMN_ATTRIBUTE
};
enum
@@ -51,6 +52,7 @@ struct _GtkInspectorPropListPrivate
GtkWidget *widget_tree;
GtkCellRenderer *value_renderer;
gboolean child_properties;
GtkTreeViewColumn *attribute_column;
};
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorPropList, gtk_inspector_prop_list, GTK_TYPE_TREE_VIEW)
@@ -85,9 +87,6 @@ get_property (GObject *object,
case PROP_CHILD_PROPERTIES:
g_value_set_boolean (value, pl->priv->child_properties);
g_object_set (pl->priv->value_renderer,
"is-child-property", pl->priv->child_properties,
NULL);
break;
default:
@@ -113,6 +112,9 @@ set_property (GObject *object,
case PROP_CHILD_PROPERTIES:
pl->priv->child_properties = g_value_get_boolean (value);
g_object_set (pl->priv->value_renderer,
"is-child-property", pl->priv->child_properties,
NULL);
break;
default:
@@ -140,6 +142,7 @@ gtk_inspector_prop_list_class_init (GtkInspectorPropListClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/inspector/prop-list.ui");
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, model);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, value_renderer);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, attribute_column);
}
static void
@@ -148,9 +151,10 @@ gtk_inspector_prop_list_update_prop (GtkInspectorPropList *pl,
GParamSpec *prop)
{
GValue gvalue = {0};
gchar *value;
gchar *value = NULL;
gchar *attribute = NULL;
g_value_init(&gvalue, prop->value_type);
g_value_init (&gvalue, prop->value_type);
if (pl->priv->child_properties)
{
GtkWidget *parent;
@@ -172,19 +176,36 @@ gtk_inspector_prop_list_update_prop (GtkInspectorPropList *pl,
}
else
{
value = g_strdup_value_contents(&gvalue);
value = g_strdup_value_contents (&gvalue);
}
if (GTK_IS_CELL_RENDERER (pl->priv->object))
{
gpointer *area;
gint column = -1;
area = g_object_get_data (pl->priv->object, "gtk-inspector-cell-area");
if (area)
column = gtk_cell_area_attribute_get_column (GTK_CELL_AREA (area),
GTK_CELL_RENDERER (pl->priv->object),
prop->name);
if (column != -1)
attribute = g_strdup_printf ("%d", column);
}
gtk_list_store_set (pl->priv->model, iter,
COLUMN_NAME, prop->name,
COLUMN_VALUE, value ? value : g_strdup (""),
COLUMN_VALUE, value ? value : "",
COLUMN_DEFINED_AT, g_type_name (prop->owner_type),
COLUMN_OBJECT, pl->priv->object,
COLUMN_TOOLTIP, g_param_spec_get_blurb (prop),
COLUMN_WRITABLE, (prop->flags & G_PARAM_WRITABLE) != 0,
COLUMN_ATTRIBUTE, attribute ? attribute : "",
-1);
g_free (value);
g_free (attribute);
g_value_unset (&gvalue);
}
@@ -280,12 +301,15 @@ gtk_inspector_prop_list_set_object (GtkInspectorPropList *pl,
pl->priv->signal_cnxs =
g_list_prepend (pl->priv->signal_cnxs,
GINT_TO_POINTER (g_signal_connect(object, signal_name,
G_CALLBACK (gtk_inspector_prop_list_prop_changed_cb), pl)));
GINT_TO_POINTER (g_signal_connect (object, signal_name,
G_CALLBACK (gtk_inspector_prop_list_prop_changed_cb), pl)));
g_free (signal_name);
}
g_object_set (pl->priv->attribute_column,
"visible", !pl->priv->child_properties && GTK_IS_CELL_RENDERER (object),
NULL);
return TRUE;
}

View File

@@ -8,6 +8,7 @@
<column type="GObject"/>
<column type="gchararray"/>
<column type="gboolean"/>
<column type="gchararray"/>
</columns>
</object>
<template class="GtkInspectorPropList" parent="GtkTreeView">
@@ -48,6 +49,22 @@
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="attribute_column">
<property name="title" translatable="yes">Attribute</property>
<property name="resizable">True</property>
<child>
<object class="GtkCellRendererText">
<property name="scale">0.8</property>
<property name="editable">False</property>
</object>
<attributes>
<attribute name="text">6</attribute>
<attribute name="sensitive">5</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Defined At</property>

View File

@@ -194,7 +194,7 @@ gtk_inspector_widget_tree_append_object (GtkInspectorWidgetTree *wt,
-1);
g_hash_table_insert (wt->priv->iters, object, gtk_tree_iter_copy (&iter));
g_free(address);
g_free (address);
if (GTK_IS_CONTAINER (object))
{
@@ -223,11 +223,14 @@ gtk_inspector_widget_tree_append_object (GtkInspectorWidgetTree *wt,
{
GList *cells, *l;
GObject *cell;
GtkCellArea *area;
area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (object));
cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (object));
for (l = cells; l; l = l->next)
{
cell = l->data;
g_object_set_data (cell, "gtk-inspector-cell-area", area);
gtk_inspector_widget_tree_append_object (wt, cell, &iter, NULL);
}
g_list_free (cells);