inspector: Link to model for attributes
This commit is contained in:
@ -1056,6 +1056,28 @@ gtk_inspector_prop_editor_init (GtkInspectorPropEditor *editor)
|
|||||||
NULL);
|
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
|
static void
|
||||||
constructed (GObject *object)
|
constructed (GObject *object)
|
||||||
{
|
{
|
||||||
@ -1070,6 +1092,44 @@ constructed (GObject *object)
|
|||||||
gtk_widget_show (label);
|
gtk_widget_show (label);
|
||||||
gtk_container_add (GTK_CONTAINER (editor), 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 &&
|
can_modify = ((spec->flags & G_PARAM_WRITABLE) != 0 &&
|
||||||
(spec->flags & G_PARAM_CONSTRUCT_ONLY) == 0);
|
(spec->flags & G_PARAM_CONSTRUCT_ONLY) == 0);
|
||||||
|
|
||||||
|
|||||||
@ -241,10 +241,14 @@ gtk_inspector_prop_list_update_prop (GtkInspectorPropList *pl,
|
|||||||
|
|
||||||
if (GTK_IS_CELL_RENDERER (pl->priv->object))
|
if (GTK_IS_CELL_RENDERER (pl->priv->object))
|
||||||
{
|
{
|
||||||
|
gpointer *layout;
|
||||||
gpointer *area;
|
gpointer *area;
|
||||||
gint column = -1;
|
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)
|
if (area)
|
||||||
column = gtk_cell_area_attribute_get_column (GTK_CELL_AREA (area),
|
column = gtk_cell_area_attribute_get_column (GTK_CELL_AREA (area),
|
||||||
GTK_CELL_RENDERER (pl->priv->object),
|
GTK_CELL_RENDERER (pl->priv->object),
|
||||||
|
|||||||
@ -196,8 +196,10 @@ cell_callback (GtkCellRenderer *renderer,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
FindAllData *d = 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);
|
gtk_inspector_widget_tree_append_object (d->wt, G_OBJECT (renderer), d->iter, NULL);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -360,6 +362,7 @@ gtk_inspector_widget_tree_append_object (GtkInspectorWidgetTree *wt,
|
|||||||
GtkCellArea *area;
|
GtkCellArea *area;
|
||||||
|
|
||||||
area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (object));
|
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");
|
gtk_inspector_widget_tree_append_object (wt, G_OBJECT (area), &iter, "cell-area");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user