mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-09-20 05:50:11 +00:00
widget-factory: Add a flowbox example
This is now really polished yet, but will let us work towards 'responsive grid'.
This commit is contained in:
parent
c46ca9b25b
commit
9fab7a684b
@ -531,6 +531,75 @@ populate_colors (GtkWidget *widget)
|
|||||||
gtk_list_box_invalidate_headers (GTK_LIST_BOX (widget));
|
gtk_list_box_invalidate_headers (GTK_LIST_BOX (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
|
static void
|
||||||
row_activated (GtkListBox *box, GtkListBoxRow *row)
|
row_activated (GtkListBox *box, GtkListBoxRow *row)
|
||||||
{
|
{
|
||||||
@ -686,6 +755,14 @@ activate (GApplication *app)
|
|||||||
widget = (GtkWidget *)gtk_builder_get_object (builder, "preference_dialog_button");
|
widget = (GtkWidget *)gtk_builder_get_object (builder, "preference_dialog_button");
|
||||||
g_signal_connect (widget, "clicked", G_CALLBACK (show_dialog), dialog);
|
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");
|
widget = (GtkWidget *)gtk_builder_get_object (builder, "charletree");
|
||||||
populate_model ((GtkTreeStore *)gtk_tree_view_get_model (GTK_TREE_VIEW (widget)));
|
populate_model ((GtkTreeStore *)gtk_tree_view_get_model (GTK_TREE_VIEW (widget)));
|
||||||
gtk_tree_view_expand_all (GTK_TREE_VIEW (widget));
|
gtk_tree_view_expand_all (GTK_TREE_VIEW (widget));
|
||||||
|
@ -2919,7 +2919,8 @@ Suspendisse feugiat quam quis dolor accumsan cursus. </property>
|
|||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="shadow_type">in</property>
|
<property name="shadow_type">in</property>
|
||||||
<property name="hscrollbar_policy">automatic</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>
|
<child>
|
||||||
<object class="GtkIconView" id="iconview1">
|
<object class="GtkIconView" id="iconview1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
@ -2968,6 +2969,13 @@ Suspendisse feugiat quam quis dolor accumsan cursus. </property>
|
|||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</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>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
@ -3322,6 +3330,55 @@ bad things might happen.</property>
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</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">
|
<object class="GtkSizeGroup">
|
||||||
<property name="mode">vertical</property>
|
<property name="mode">vertical</property>
|
||||||
<widgets>
|
<widgets>
|
||||||
|
Loading…
Reference in New Issue
Block a user