[gtk+] widget-factory: Add a flowbox example
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] widget-factory: Add a flowbox example
- Date: Wed, 13 Aug 2014 00:23:32 +0000 (UTC)
commit 9fab7a684b8548da00d6fea30f535526193890c8
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Aug 12 20:22:14 2014 -0400
widget-factory: Add a flowbox example
This is now really polished yet, but will let us work towards
'responsive grid'.
demos/widget-factory/widget-factory.c | 77 ++++++++++++++++++++++++++++++++
demos/widget-factory/widget-factory.ui | 59 ++++++++++++++++++++++++-
2 files changed, 135 insertions(+), 1 deletions(-)
---
diff --git a/demos/widget-factory/widget-factory.c b/demos/widget-factory/widget-factory.c
index efc3c9b..58cd5e5 100644
--- a/demos/widget-factory/widget-factory.c
+++ b/demos/widget-factory/widget-factory.c
@@ -532,6 +532,75 @@ populate_colors (GtkWidget *widget)
}
static void
+background_loaded_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer data)
+{
+ GtkWidget *flowbox = data;
+ GtkWidget *child;
+ GdkPixbuf *pixbuf;
+ GError *error = NULL;
+
+ pixbuf = gdk_pixbuf_new_from_stream_finish (res, &error);
+ if (error)
+ {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ child = gtk_image_new_from_pixbuf (pixbuf);
+ gtk_widget_show (child);
+ gtk_flow_box_insert (GTK_FLOW_BOX (flowbox), child, -1);
+}
+
+static void
+populate_flowbox (GtkWidget *button, GtkWidget *flowbox)
+{
+ const gchar *location;
+ GDir *dir;
+ GError *error = NULL;
+ const gchar *name;
+ gchar *filename;
+ GFile *file;
+ GInputStream *stream;
+
+ g_signal_handlers_disconnect_by_func (button, populate_flowbox, flowbox);
+
+ location = "/usr/share/backgrounds/gnome";
+ dir = g_dir_open (location, 0, &error);
+ if (error)
+ {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ while ((name = g_dir_read_name (dir)) != NULL)
+ {
+ filename = g_build_filename (location, name, NULL);
+ file = g_file_new_for_path (filename);
+ stream = G_INPUT_STREAM (g_file_read (file, NULL, &error));
+ if (error)
+ {
+ g_warning ("%s", error->message);
+ g_clear_error (&error);
+ }
+ else
+ {
+ gdk_pixbuf_new_from_stream_at_scale_async (stream, 110, 110, TRUE, NULL,
+ background_loaded_cb, flowbox);
+ }
+
+ g_object_unref (file);
+ g_object_unref (stream);
+ g_free (filename);
+ }
+
+ g_dir_close (dir);
+}
+
+static void
row_activated (GtkListBox *box, GtkListBoxRow *row)
{
GtkWidget *image;
@@ -686,6 +755,14 @@ activate (GApplication *app)
widget = (GtkWidget *)gtk_builder_get_object (builder, "preference_dialog_button");
g_signal_connect (widget, "clicked", G_CALLBACK (show_dialog), dialog);
+ dialog = (GtkWidget *)gtk_builder_get_object (builder, "selection_dialog");
+ g_signal_connect (dialog, "response", G_CALLBACK (close_dialog), NULL);
+ widget = (GtkWidget *)gtk_builder_get_object (builder, "selection_dialog_button");
+ g_signal_connect (widget, "clicked", G_CALLBACK (show_dialog), dialog);
+
+ widget2 = (GtkWidget *)gtk_builder_get_object (builder, "selection_flowbox");
+ g_signal_connect (widget, "clicked", G_CALLBACK (populate_flowbox), widget2);
+
widget = (GtkWidget *)gtk_builder_get_object (builder, "charletree");
populate_model ((GtkTreeStore *)gtk_tree_view_get_model (GTK_TREE_VIEW (widget)));
gtk_tree_view_expand_all (GTK_TREE_VIEW (widget));
diff --git a/demos/widget-factory/widget-factory.ui b/demos/widget-factory/widget-factory.ui
index ed84d81..97e0563 100644
--- a/demos/widget-factory/widget-factory.ui
+++ b/demos/widget-factory/widget-factory.ui
@@ -2919,7 +2919,8 @@ Suspendisse feugiat quam quis dolor accumsan cursus. </property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<property name="hscrollbar_policy">automatic</property>
- <property name="height_request">200</property>
+ <property name="margin-top">6</property>
+ <property name="height_request">226</property>
<child>
<object class="GtkIconView" id="iconview1">
<property name="visible">True</property>
@@ -2968,6 +2969,13 @@ Suspendisse feugiat quam quis dolor accumsan cursus. </property>
<property name="use_underline">True</property>
</object>
</child>
+ <child>
+ <object class="GtkButton" id="selection_dialog_button">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Select</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
</object>
</child>
</object>
@@ -3322,6 +3330,55 @@ bad things might happen.</property>
</object>
</child>
</object>
+ <object class="GtkDialog" id="selection_dialog">
+ <property name="transient-for">window</property>
+ <property name="modal">True</property>
+ <property name="use-header-bar">1</property>
+ <property name="title" translatable="yes">Choose one</property>
+ <signal name="delete-event" handler="gtk_widget_hide_on_delete"/>
+ <child internal-child="vbox">
+ <object class="GtkBox">
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="hscrollbar-policy">never</property>
+ <property name="vscrollbar-policy">never</property>
+ <child>
+ <object class="GtkFlowBox" id="selection_flowbox">
+ <property name="visible">True</property>
+ <property name="selection-mode">single</property>
+ <property name="row-spacing">10</property>
+ <property name="column-spacing">10</property>
+ <property name="margin">10</property>
+ <property name="min-children-per-line">3</property>
+ <property name="max-children-per-line">9</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="cancel_selection_dialog">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Cancel</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="select_selection_dialog">
+ <property name="visible">True</property>
+ <property name="can-default">True</property>
+ <property name="has-default">True</property>
+ <property name="label" translatable="yes">_Select</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="cancel">cancel_selection_dialog</action-widget>
+ <action-widget response="ok" default="true">select_selection_dialog</action-widget>
+ </action-widgets>
+ </object>
<object class="GtkSizeGroup">
<property name="mode">vertical</property>
<widgets>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]