[gtk/wip/otte/listview: 96/101] demo: Add a file browser demo
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/listview: 96/101] demo: Add a file browser demo
- Date: Sat, 19 Oct 2019 19:53:28 +0000 (UTC)
commit 13bc2341a3b023b0b6fb1e9756a165fba4f7a8a2
Author: Benjamin Otte <otte redhat com>
Date: Fri Oct 18 20:47:48 2019 +0200
demo: Add a file browser demo
demos/gtk-demo/demo.gresource.xml | 5 ++
demos/gtk-demo/listview_filebrowser.c | 74 +++++++++++++++++++++++++++++
demos/gtk-demo/listview_filebrowser.ui | 56 ++++++++++++++++++++++
demos/gtk-demo/listview_filebrowser_list.ui | 20 ++++++++
demos/gtk-demo/meson.build | 1 +
5 files changed, 156 insertions(+)
---
diff --git a/demos/gtk-demo/demo.gresource.xml b/demos/gtk-demo/demo.gresource.xml
index 7d94e0462b..3829ddd61d 100644
--- a/demos/gtk-demo/demo.gresource.xml
+++ b/demos/gtk-demo/demo.gresource.xml
@@ -118,6 +118,10 @@
<file>gnome-fs-directory.png</file>
<file>gnome-fs-regular.png</file>
</gresource>
+ <gresource prefix="/listview_filebrowser">
+ <file>listview_filebrowser.ui</file>
+ <file>listview_filebrowser_list.ui</file>
+ </gresource>
<gresource prefix="/listview_weather">
<file compressed="true">listview_weather.txt</file>
</gresource>
@@ -200,6 +204,7 @@
<file>infobar.c</file>
<file>links.c</file>
<file>listbox.c</file>
+ <file>listview_filebrowser.c</file>
<file>listview_settings.c</file>
<file>listview_weather.c</file>
<file>list_store.c</file>
diff --git a/demos/gtk-demo/listview_filebrowser.c b/demos/gtk-demo/listview_filebrowser.c
new file mode 100644
index 0000000000..fd0419e5f1
--- /dev/null
+++ b/demos/gtk-demo/listview_filebrowser.c
@@ -0,0 +1,74 @@
+/* Icon View/Icon View Basics
+ *
+ * The GtkIconView widget is used to display and manipulate icons.
+ * It uses a GtkTreeModel for data storage, so the list store
+ * example might be helpful.
+ */
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+static GtkWidget *window = NULL;
+
+static void
+up_clicked_cb (GtkButton *button,
+ GtkDirectoryList *list)
+{
+ GFile *file;
+
+ file = g_file_get_parent (gtk_directory_list_get_file (list));
+ if (file == NULL)
+ return;
+
+ gtk_directory_list_set_file (list, file);
+}
+
+static void
+view_button_clicked_cb (GtkButton *button,
+ GtkListView *view)
+{
+ g_print ("Somebody clicked me!");
+}
+
+GtkWidget *
+do_listview_filebrowser (GtkWidget *do_widget)
+{
+ if (!window)
+ {
+ GtkWidget *view;
+ GtkBuilder *builder;
+ GtkDirectoryList *dirlist;
+ GFile *file;
+
+ builder = gtk_builder_new_from_resource ("/listview_filebrowser/listview_filebrowser.ui");
+ gtk_builder_add_callback_symbols (builder,
+ "up_clicked_cb", G_CALLBACK (up_clicked_cb),
+ "view_button_clicked_cb", G_CALLBACK (view_button_clicked_cb),
+ NULL);
+ gtk_builder_connect_signals (builder, NULL);
+ window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
+ gtk_window_set_display (GTK_WINDOW (window),
+ gtk_widget_get_display (do_widget));
+ g_signal_connect (window, "destroy",
+ G_CALLBACK (gtk_widget_destroyed), &window);
+
+ /* Create the model and fill it with the contents of the current directory */
+ file = g_file_new_for_path (g_get_current_dir ());
+ dirlist = GTK_DIRECTORY_LIST (gtk_builder_get_object (builder, "dirlist"));
+ gtk_directory_list_set_file (dirlist, file);
+ g_object_unref (file);
+
+ /* grab focus in the view */
+ view = gtk_list_view_new_with_factory (gtk_builder_list_item_factory_new_from_resource
("/listview_filebrowser/listview_filebrowser_list.ui"));
+ gtk_widget_grab_focus (view);
+
+ g_object_unref (builder);
+ }
+
+ if (!gtk_widget_get_visible (window))
+ gtk_widget_show (window);
+ else
+ gtk_widget_destroy (window);
+
+ return window;
+}
diff --git a/demos/gtk-demo/listview_filebrowser.ui b/demos/gtk-demo/listview_filebrowser.ui
new file mode 100644
index 0000000000..27b4f8a0f9
--- /dev/null
+++ b/demos/gtk-demo/listview_filebrowser.ui
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <object class="GtkDirectoryList" id="dirlist">
+ <property name="attributes">standard::name,standard::display-name,standard::icon</property>
+ </object>
+ <object class="GtkWindow" id="window">
+ <property name="title" translatable="yes">File browser</property>
+ <property name="default-width">600</property>
+ <property name="default-height">400</property>
+ <child type="titlebar">
+ <object class="GtkHeaderBar" id="">
+ <property name="show-title-buttons">1</property>
+ <child>
+ <object class="GtkButton">
+ <property name="icon-name">go-up</property>
+ <signal name="clicked" handler="up_clicked_cb" object="dirlist" swapped="no"/>
+ </object>
+ </child>
+ <child type="end">
+ <object class="GtkBox">
+ <style>
+ <class name="linked"/>
+ </style>
+ <child>
+ <object class="GtkButton">
+ <property name="icon-name">view-list-symbolic</property>
+ <signal name="clicked" handler="view_button_clicked_cb" object="view" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton">
+ <property name="icon-name">view-grid-symbolic</property>
+ <signal name="clicked" handler="view_button_clicked_cb" object="view" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="can-focus">1</property>
+ <child>
+ <object class="GtkGridView" id="view">
+ <property name="model">dirlist</property>
+ <property name="factory">
+ <object class="GtkBuilderListItemFactory">
+ <property name="resource">/listview_filebrowser/listview_filebrowser_list.ui</property>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/demos/gtk-demo/listview_filebrowser_list.ui b/demos/gtk-demo/listview_filebrowser_list.ui
new file mode 100644
index 0000000000..a5a7204ec4
--- /dev/null
+++ b/demos/gtk-demo/listview_filebrowser_list.ui
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <template class="GtkListItem">
+ <child>
+ <object class="GtkBox">
+ <child>
+ <object class="GtkImage">
+ <binding name="gicon">file-info(GtkListItem.item:GFileInfo, "standard::icon",
object):GIcon</binding>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="halign">start</property>
+ <binding name="label">file-info(GtkListItem.item:GFileInfo, "standard::display-name",
string)</binding>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/demos/gtk-demo/meson.build b/demos/gtk-demo/meson.build
index 6db5774c41..410d26d202 100644
--- a/demos/gtk-demo/meson.build
+++ b/demos/gtk-demo/meson.build
@@ -44,6 +44,7 @@ demos = files([
'listbox.c',
'flowbox.c',
'list_store.c',
+ 'listview_filebrowser.c',
'listview_settings.c',
'listview_weather.c',
'markup.c',
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]