[gtk+] inspector: Avoid a split pane for resources
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] inspector: Avoid a split pane for resources
- Date: Sat, 11 Oct 2014 05:00:06 +0000 (UTC)
commit ee99ca661015dc455a5892eff7b43d6d8136c572
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Oct 10 20:20:02 2014 -0400
inspector: Avoid a split pane for resources
There is not much room in the inspector window; squeezing a
tree and a detailed view in the same page is not great. Instead,
make the details a separate page.
gtk/inspector/resource-list.c | 191 +++++++++++-----------
gtk/inspector/resource-list.ui | 334 +++++++++++++++++++++-----------------
gtk/inspector/resource-list.ui.h | 2 +-
3 files changed, 285 insertions(+), 242 deletions(-)
---
diff --git a/gtk/inspector/resource-list.c b/gtk/inspector/resource-list.c
index f036972..756c82e 100644
--- a/gtk/inspector/resource-list.c
+++ b/gtk/inspector/resource-list.c
@@ -40,12 +40,12 @@ struct _GtkInspectorResourceListPrivate
GtkTextBuffer *buffer;
GtkWidget *image;
GtkWidget *content;
+ GtkWidget *name_label;
GtkWidget *type;
GtkWidget *type_label;
- GtkWidget *count;
- GtkWidget *count_label;
GtkWidget *size_label;
GtkWidget *info_grid;
+ GtkWidget *stack;
GtkTreeViewColumn *count_column;
GtkCellRenderer *count_renderer;
GtkTreeViewColumn *size_column;
@@ -116,110 +116,105 @@ load_resources_recurse (GtkInspectorResourceList *sl,
}
-static void
-selection_changed (GtkTreeSelection *selection,
- GtkInspectorResourceList *rl)
+static gboolean
+populate_details (GtkInspectorResourceList *rl,
+ GtkTreePath *tree_path)
{
GtkTreeIter iter;
-
- if (gtk_tree_selection_get_selected (selection, NULL, &iter))
+ gchar *path;
+ gchar *name;
+ GBytes *bytes;
+ gchar *type;
+ gconstpointer data;
+ gint count;
+ gsize size;
+ GError *error = NULL;
+ gchar *markup;
+
+
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (rl->priv->model), &iter, tree_path);
+
+ gtk_tree_model_get (GTK_TREE_MODEL (rl->priv->model), &iter,
+ COLUMN_PATH, &path,
+ COLUMN_NAME, &name,
+ COLUMN_COUNT, &count,
+ COLUMN_SIZE, &size,
+ -1);
+
+ if (g_str_has_suffix (path, "/"))
+ {
+ g_free (path);
+ g_free (name);
+ return FALSE;
+ }
+
+ markup = g_strconcat ("<span face='Monospace' size='small'>", path, "</span>", NULL);
+ gtk_label_set_markup (GTK_LABEL (rl->priv->name_label), markup);
+ g_free (markup);
+
+ bytes = g_resources_lookup_data (path, 0, &error);
+ if (bytes == NULL)
{
- gchar *path;
- gchar *name;
- GBytes *bytes;
- gchar *type;
- gconstpointer data;
- gint count;
- gsize size;
- GError *error = NULL;
-
- gtk_widget_hide (rl->priv->info_grid);
-
- gtk_tree_model_get (GTK_TREE_MODEL (rl->priv->model), &iter,
- COLUMN_PATH, &path,
- COLUMN_NAME, &name,
- COLUMN_COUNT, &count,
- COLUMN_SIZE, &size,
- -1);
+ gtk_text_buffer_set_text (rl->priv->buffer, error->message, -1);
+ g_error_free (error);
+ gtk_stack_set_visible_child_name (GTK_STACK (rl->priv->content), "text");
+ }
+ else
+ {
+ gchar *text;
- if (g_str_has_suffix (path, "/"))
- {
- gchar *text;
+ data = g_bytes_get_data (bytes, &size);
+ type = g_content_type_guess (name, data, size, NULL);
- text = g_strdup_printf ("%d", count);
- gtk_label_set_text (GTK_LABEL (rl->priv->count_label), text);
- g_free (text);
+ text = g_content_type_get_description (type);
+ gtk_label_set_text (GTK_LABEL (rl->priv->type_label), text);
+ g_free (text);
- text = g_format_size (size);
- gtk_label_set_text (GTK_LABEL (rl->priv->size_label), text);
- g_free (text);
+ text = g_format_size (size);
+ gtk_label_set_text (GTK_LABEL (rl->priv->size_label), text);
+ g_free (text);
- gtk_widget_hide (rl->priv->type);
- gtk_widget_hide (rl->priv->type_label);
- gtk_widget_show (rl->priv->count);
- gtk_widget_show (rl->priv->count_label);
- gtk_widget_show (rl->priv->info_grid);
-
- gtk_text_buffer_set_text (rl->priv->buffer, "", -1);
+ if (g_content_type_is_a (type, "text/*"))
+ {
+ gtk_text_buffer_set_text (rl->priv->buffer, data, -1);
gtk_stack_set_visible_child_name (GTK_STACK (rl->priv->content), "text");
- goto out;
}
- bytes = g_resources_lookup_data (path, 0, &error);
- if (bytes == NULL)
+ else if (g_content_type_is_a (type, "image/*"))
{
- gtk_text_buffer_set_text (rl->priv->buffer, error->message, -1);
- g_error_free (error);
- gtk_stack_set_visible_child_name (GTK_STACK (rl->priv->content), "text");
+ gtk_image_set_from_resource (GTK_IMAGE (rl->priv->image), path);
+ gtk_stack_set_visible_child_name (GTK_STACK (rl->priv->content), "image");
}
else
{
- gchar *text;
+ gtk_text_buffer_set_text (rl->priv->buffer, "", 0);
+ gtk_stack_set_visible_child_name (GTK_STACK (rl->priv->content), "text");
+ }
- data = g_bytes_get_data (bytes, &size);
- type = g_content_type_guess (name, data, size, NULL);
+ g_free (type);
+ g_bytes_unref (bytes);
+ }
- text = g_content_type_get_description (type);
- gtk_label_set_text (GTK_LABEL (rl->priv->type_label), text);
- g_free (text);
+ g_free (path);
+ g_free (name);
- text = g_format_size (size);
- gtk_label_set_text (GTK_LABEL (rl->priv->size_label), text);
- g_free (text);
-
- gtk_widget_show (rl->priv->type);
- gtk_widget_show (rl->priv->type_label);
- gtk_widget_hide (rl->priv->count);
- gtk_widget_hide (rl->priv->count_label);
- gtk_widget_show (rl->priv->info_grid);
-
- if (g_content_type_is_a (type, "text/*"))
- {
- gtk_text_buffer_set_text (rl->priv->buffer, data, -1);
- gtk_stack_set_visible_child_name (GTK_STACK (rl->priv->content), "text");
- }
- else if (g_content_type_is_a (type, "image/*"))
- {
- gtk_image_set_from_resource (GTK_IMAGE (rl->priv->image), path);
- gtk_stack_set_visible_child_name (GTK_STACK (rl->priv->content), "image");
- }
- else
- {
- gtk_text_buffer_set_text (rl->priv->buffer, "", 0);
- gtk_stack_set_visible_child_name (GTK_STACK (rl->priv->content), "text");
- }
-
- g_free (type);
- g_bytes_unref (bytes);
- }
-out:
- g_free (path);
- g_free (name);
- }
- else
- {
- gtk_text_buffer_set_text (rl->priv->buffer, "", -1);
- gtk_stack_set_visible_child_name (GTK_STACK (rl->priv->content), "text");
- }
+ return TRUE;
+}
+
+static void
+row_activated (GtkTreeView *treeview,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ GtkInspectorResourceList *sl)
+{
+ if (populate_details (sl, path))
+ gtk_stack_set_visible_child_name (GTK_STACK (sl->priv->stack), "details");
+}
+
+static void
+close_details (GtkWidget *button,
+ GtkInspectorResourceList *sl)
+{
+ gtk_stack_set_visible_child_name (GTK_STACK (sl->priv->stack), "list");
}
static void
@@ -269,6 +264,14 @@ size_data_func (GtkTreeViewColumn *col,
}
static void
+on_map (GtkWidget *widget)
+{
+ GtkInspectorResourceList *sl = GTK_INSPECTOR_RESOURCE_LIST (widget);
+
+ gtk_stack_set_visible_child_name (GTK_STACK (sl->priv->stack), "list");
+}
+
+static void
gtk_inspector_resource_list_init (GtkInspectorResourceList *sl)
{
sl->priv = gtk_inspector_resource_list_get_instance_private (sl);
@@ -279,6 +282,7 @@ gtk_inspector_resource_list_init (GtkInspectorResourceList *sl)
gtk_tree_view_column_set_cell_data_func (sl->priv->size_column,
sl->priv->size_renderer,
size_data_func, sl, NULL);
+ g_signal_connect (sl, "map", G_CALLBACK (on_map), NULL);
load_resources (sl);
}
@@ -292,18 +296,19 @@ gtk_inspector_resource_list_class_init (GtkInspectorResourceListClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, buffer);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, content);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, image);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, name_label);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, type_label);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, type);
- gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, count_label);
- gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, count);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, size_label);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, info_grid);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, count_column);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, count_renderer);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, size_column);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, size_renderer);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorResourceList, stack);
- gtk_widget_class_bind_template_callback (widget_class, selection_changed);
+ gtk_widget_class_bind_template_callback (widget_class, row_activated);
+ gtk_widget_class_bind_template_callback (widget_class, close_details);
}
// vim: set et sw=2 ts=2:
diff --git a/gtk/inspector/resource-list.ui b/gtk/inspector/resource-list.ui
index f452e74..823ae97 100644
--- a/gtk/inspector/resource-list.ui
+++ b/gtk/inspector/resource-list.ui
@@ -14,190 +14,228 @@
<template class="GtkInspectorResourceList" parent="GtkBox">
<property name="orientation">horizontal</property>
<child>
- <object class="GtkScrolledWindow">
+ <object class="GtkStack" id="stack">
<property name="visible">True</property>
- <property name="expand">True</property>
- <property name="hscrollbar-policy">automatic</property>
- <property name="vscrollbar-policy">always</property>
- <property name="shadow-type">in</property>
+ <property name="transition-type">none</property>
<child>
- <object class="GtkTreeView">
+ <object class="GtkScrolledWindow">
<property name="visible">True</property>
- <property name="model">model</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection">
- <property name="mode">single</property>
- <signal name="changed" handler="selection_changed"/>
- </object>
- </child>
+ <property name="expand">True</property>
+ <property name="hscrollbar-policy">automatic</property>
+ <property name="vscrollbar-policy">always</property>
+ <property name="shadow-type">in</property>
<child>
- <object class="GtkTreeViewColumn">
- <property name="title" translatable="yes">Path</property>
- <property name="sort-column-id">0</property>
+ <object class="GtkTreeView">
+ <property name="visible">True</property>
+ <property name="model">model</property>
+ <property name="activate-on-single-click">True</property>
+ <signal name="row-activated" handler="row_activated"/>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection">
+ <property name="mode">none</property>
+ </object>
+ </child>
<child>
- <object class="GtkCellRendererText">
- <property name="scale">0.8</property>
+ <object class="GtkTreeViewColumn">
+ <property name="title" translatable="yes">Path</property>
+ <property name="sort-column-id">0</property>
+ <child>
+ <object class="GtkCellRendererText">
+ <property name="scale">0.8</property>
+ </object>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
</object>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
</child>
- </object>
- </child>
- <child>
- <object class="GtkTreeViewColumn" id="count_column">
- <property name="title" translatable="yes">Count</property>
- <property name="sort-column-id">1</property>
<child>
- <object class="GtkCellRendererText" id="count_renderer">
- <property name="scale">0.8</property>
+ <object class="GtkTreeViewColumn" id="count_column">
+ <property name="title" translatable="yes">Count</property>
+ <property name="sort-column-id">1</property>
+ <child>
+ <object class="GtkCellRendererText" id="count_renderer">
+ <property name="scale">0.8</property>
+ </object>
+ </child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="GtkTreeViewColumn" id="size_column">
- <property name="title" translatable="yes">Size</property>
- <property name="sort-column-id">2</property>
<child>
- <object class="GtkCellRendererText" id="size_renderer">
- <property name="scale">0.8</property>
+ <object class="GtkTreeViewColumn" id="size_column">
+ <property name="title" translatable="yes">Size</property>
+ <property name="sort-column-id">2</property>
+ <child>
+ <object class="GtkCellRendererText" id="size_renderer">
+ <property name="scale">0.8</property>
+ </object>
+ </child>
</object>
</child>
</object>
</child>
</object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkGrid" id="info_grid">
- <property name="row-spacing">10</property>
- <property name="column-spacing">10</property>
- <property name="margin">20</property>
- <child>
- <object class="GtkLabel" id="type">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Type:</property>
- <property name="halign">end</property>
- <property name="valign">baseline</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="type_label">
- <property name="visible">True</property>
- <property name="halign">start</property>
- <property name="valign">baseline</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="count">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Count:</property>
- <property name="halign">end</property>
- <property name="valign">baseline</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="count_label">
- <property name="visible">True</property>
- <property name="halign">start</property>
- <property name="valign">baseline</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Size:</property>
- <property name="halign">end</property>
- <property name="valign">baseline</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="size_label">
- <property name="visible">True</property>
- <property name="halign">start</property>
- <property name="valign">baseline</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">2</property>
- </packing>
- </child>
- </object>
+ <packing>
+ <property name="name">list</property>
+ </packing>
</child>
<child>
- <object class="GtkStack" id="content">
+ <object class="GtkBox">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkScrolledWindow">
+ <object class="GtkGrid" id="info_grid">
<property name="visible">True</property>
- <property name="expand">True</property>
- <property name="hscrollbar-policy">automatic</property>
- <property name="vscrollbar-policy">automatic</property>
- <property name="shadow-type">in</property>
- <style>
- <class name="view"/>
- </style>
+ <property name="row-spacing">10</property>
+ <property name="column-spacing">10</property>
+ <property name="margin">10</property>
+ <child>
+ <object class="GtkLabel" id="name">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Name:</property>
+ <property name="halign">end</property>
+ <property name="valign">baseline</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
<child>
- <object class="GtkTextView">
+ <object class="GtkLabel" id="name_label">
<property name="visible">True</property>
- <property name="editable">False</property>
- <property name="buffer">buffer</property>
+ <property name="halign">start</property>
+ <property name="valign">baseline</property>
+ <property name="selectable">True</property>
</object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="type">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Type:</property>
+ <property name="halign">end</property>
+ <property name="valign">baseline</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="type_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="valign">baseline</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Size:</property>
+ <property name="halign">end</property>
+ <property name="valign">baseline</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="size_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="valign">baseline</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <signal name="clicked" handler="close_details"/>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon-name">window-close-symbolic</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">-1</property>
+ <property name="top-attach">0</property>
+ <property name="height">3</property>
+ </packing>
</child>
</object>
- <packing>
- <property name="name">text</property>
- </packing>
</child>
<child>
- <object class="GtkScrolledWindow">
+ <object class="GtkStack" id="content">
<property name="visible">True</property>
- <property name="expand">True</property>
- <property name="hscrollbar-policy">automatic</property>
- <property name="vscrollbar-policy">automatic</property>
- <property name="shadow-type">in</property>
- <style>
- <class name="view"/>
- </style>
<child>
- <object class="GtkImage" id="image">
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="expand">True</property>
+ <property name="hscrollbar-policy">automatic</property>
+ <property name="vscrollbar-policy">automatic</property>
+ <property name="shadow-type">in</property>
+ <style>
+ <class name="view"/>
+ </style>
+ <child>
+ <object class="GtkTextView">
+ <property name="visible">True</property>
+ <property name="editable">False</property>
+ <property name="buffer">buffer</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">text</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
<property name="visible">True</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
+ <property name="expand">True</property>
+ <property name="hscrollbar-policy">automatic</property>
+ <property name="vscrollbar-policy">automatic</property>
+ <property name="shadow-type">in</property>
+ <style>
+ <class name="view"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="image">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
</object>
+ <packing>
+ <property name="name">image</property>
+ </packing>
</child>
</object>
- <packing>
- <property name="name">image</property>
- </packing>
</child>
</object>
+ <packing>
+ <property name="name">details</property>
+ </packing>
</child>
</object>
</child>
diff --git a/gtk/inspector/resource-list.ui.h b/gtk/inspector/resource-list.ui.h
index 4379194..254dd87 100644
--- a/gtk/inspector/resource-list.ui.h
+++ b/gtk/inspector/resource-list.ui.h
@@ -1,6 +1,6 @@
N_("Path");
N_("Count");
N_("Size");
+N_("Name:");
N_("Type:");
-N_("Count:");
N_("Size:");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]