[gtk/wip/otte/listview: 96/101] demo: Add a file browser demo



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]