[gthumb] use a switcher to change the file property page
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] use a switcher to change the file property page
- Date: Thu, 30 Oct 2014 22:06:46 +0000 (UTC)
commit fc218ecf4ecb18982cae6bad52143d6c56e91169
Author: Paolo Bacchilega <paobac src gnome org>
Date: Thu Oct 30 22:56:16 2014 +0100
use a switcher to change the file property page
instead of using a combobox
gthumb/gth-multipage.c | 138 +++++++++++++++++++----------------------------
1 files changed, 56 insertions(+), 82 deletions(-)
---
diff --git a/gthumb/gth-multipage.c b/gthumb/gth-multipage.c
index 1be52af..baf6f31 100644
--- a/gthumb/gth-multipage.c
+++ b/gthumb/gth-multipage.c
@@ -34,22 +34,14 @@ enum {
};
-enum {
- ICON_COLUMN,
- NAME_COLUMN,
- CHILD_COLUMN,
- N_COLUMNS
-};
-
-
static guint gth_multipage_signals[LAST_SIGNAL] = { 0 };
struct _GthMultipagePrivate {
- GtkListStore *model;
- GtkWidget *combobox;
- GtkWidget *stack;
- GList *children;
+ GtkWidget *stack;
+ GtkWidget *switcher;
+ GList *children;
+ GList *boxes;
};
@@ -64,6 +56,7 @@ gth_multipage_finalize (GObject *object)
multipage = GTH_MULTIPAGE (object);
g_list_free (multipage->priv->children);
+ g_list_free (multipage->priv->boxes);
G_OBJECT_CLASS (gth_multipage_parent_class)->finalize (object);
}
@@ -94,25 +87,6 @@ gth_multipage_class_init (GthMultipageClass *klass)
static void
-combobox_changed_cb (GtkComboBox *widget,
- gpointer user_data)
-{
- GthMultipage *multipage = user_data;
- GtkTreeIter iter;
- GtkWidget *child;
-
- if (! gtk_combo_box_get_active_iter (GTK_COMBO_BOX (multipage->priv->combobox), &iter))
- return;
-
- gtk_tree_model_get (GTK_TREE_MODEL (multipage->priv->model), &iter,
- CHILD_COLUMN, &child,
- -1);
- gtk_stack_set_visible_child (GTK_STACK (multipage->priv->stack), child);
- g_signal_emit (G_OBJECT (multipage), gth_multipage_signals[CHANGED], 0);
-}
-
-
-static void
multipage_realize_cb (GtkWidget *widget,
gpointer user_data)
{
@@ -130,26 +104,38 @@ multipage_realize_cb (GtkWidget *widget,
switch (gtk_orientable_get_orientation (GTK_ORIENTABLE (orientable_parent))) {
case GTK_ORIENTATION_HORIZONTAL:
gtk_box_set_spacing (GTK_BOX (multipage), 0);
- gtk_widget_set_margin_top (multipage->priv->combobox, 4);
- gtk_widget_set_margin_bottom (multipage->priv->combobox, 4);
+ gtk_widget_set_margin_top (multipage->priv->switcher, 4);
+ gtk_widget_set_margin_bottom (multipage->priv->switcher, 4);
break;
case GTK_ORIENTATION_VERTICAL:
- gtk_box_set_spacing (GTK_BOX (multipage), 6);
- gtk_widget_set_margin_top (multipage->priv->combobox, 0);
- gtk_widget_set_margin_bottom (multipage->priv->combobox, 0);
+ gtk_box_set_spacing (GTK_BOX (multipage), 0);
+ gtk_widget_set_margin_top (multipage->priv->switcher, 4);
+ gtk_widget_set_margin_bottom (multipage->priv->switcher, 4);
break;
}
}
static void
+visible_child_changed_cb (GObject *playbin,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ GthMultipage *multipage = user_data;
+ g_signal_emit (G_OBJECT (multipage), gth_multipage_signals[CHANGED], 0);
+}
+
+
+static void
gth_multipage_init (GthMultipage *multipage)
{
+ GtkWidget *switcher_box;
GtkCellRenderer *renderer;
multipage->priv = GTH_MULTIPAGE_GET_PRIVATE (multipage);
multipage->priv->children = NULL;
+ multipage->priv->boxes = NULL;
gtk_orientable_set_orientation (GTK_ORIENTABLE (multipage), GTK_ORIENTATION_VERTICAL);
@@ -157,47 +143,28 @@ gth_multipage_init (GthMultipage *multipage)
"realize",
G_CALLBACK (multipage_realize_cb),
multipage);
- multipage->priv->model = gtk_list_store_new (N_COLUMNS,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_POINTER);
- multipage->priv->combobox = gtk_combo_box_new_with_model (GTK_TREE_MODEL (multipage->priv->model));
- gtk_widget_show (multipage->priv->combobox);
- gtk_box_pack_start (GTK_BOX (multipage), multipage->priv->combobox, FALSE, FALSE, 0);
- g_object_unref (multipage->priv->model);
-
- g_signal_connect (multipage->priv->combobox,
- "changed",
- G_CALLBACK (combobox_changed_cb),
- multipage);
-
- /* icon renderer */
-
- renderer = gtk_cell_renderer_pixbuf_new ();
- g_object_set (renderer, "follow-state", TRUE, NULL);
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (multipage->priv->combobox),
- renderer,
- FALSE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (multipage->priv->combobox),
- renderer,
- "icon-name", ICON_COLUMN,
- NULL);
-
- /* name renderer */
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (multipage->priv->combobox),
- renderer,
- TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (multipage->priv->combobox),
- renderer,
- "text", NAME_COLUMN,
- NULL);
/* stack */
multipage->priv->stack = gtk_stack_new ();
gtk_widget_show (multipage->priv->stack);
+
+ g_signal_connect (multipage->priv->stack,
+ "notify::visible-child",
+ G_CALLBACK (visible_child_changed_cb),
+ multipage);
+
+ /* switcher */
+
+ multipage->priv->switcher = gtk_stack_switcher_new ();
+ gtk_widget_show (multipage->priv->switcher);
+ gtk_stack_switcher_set_stack (GTK_STACK_SWITCHER (multipage->priv->switcher), GTK_STACK
(multipage->priv->stack));
+
+ switcher_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+ gtk_widget_show (switcher_box);
+ gtk_box_pack_start (GTK_BOX (switcher_box), multipage->priv->switcher, TRUE, FALSE, 0);
+
+ gtk_box_pack_end (GTK_BOX (multipage), switcher_box, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (multipage), multipage->priv->stack, TRUE, TRUE, 0);
}
@@ -222,14 +189,14 @@ gth_multipage_add_child (GthMultipage *multipage,
gtk_box_pack_start (GTK_BOX (box), GTK_WIDGET (child), TRUE, TRUE, 0);
gtk_widget_show (GTK_WIDGET (child));
gtk_widget_show (box);
- gtk_container_add (GTK_CONTAINER (multipage->priv->stack), box);
-
- gtk_list_store_append (GTK_LIST_STORE (multipage->priv->model), &iter);
- gtk_list_store_set (GTK_LIST_STORE (multipage->priv->model), &iter,
- NAME_COLUMN, gth_multipage_child_get_name (child),
- ICON_COLUMN, gth_multipage_child_get_icon (child),
- CHILD_COLUMN, box,
- -1);
+ gtk_container_add_with_properties (GTK_CONTAINER (multipage->priv->stack),
+ box,
+ "name", gth_multipage_child_get_name (child),
+ "title", gth_multipage_child_get_name (child),
+ "icon-name", gth_multipage_child_get_icon (child),
+ NULL);
+
+ multipage->priv->boxes = g_list_append (multipage->priv->boxes, box);
}
@@ -244,14 +211,21 @@ void
gth_multipage_set_current (GthMultipage *multipage,
int index_)
{
- gtk_combo_box_set_active (GTK_COMBO_BOX (multipage->priv->combobox), index_);
+ GtkWidget *child;
+
+ child = g_list_nth_data (multipage->priv->boxes, index_);
+ if (child != NULL)
+ gtk_stack_set_visible_child (GTK_STACK (multipage->priv->stack), child);
}
int
gth_multipage_get_current (GthMultipage *multipage)
{
- return gtk_combo_box_get_active (GTK_COMBO_BOX (multipage->priv->combobox));
+ GtkWidget *child;
+
+ child = gtk_stack_get_visible_child (GTK_STACK (multipage->priv->stack));
+ return g_list_index (multipage->priv->boxes, child);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]