[libdazzle] tests: add simple file-browser test for DzlTree



commit a1f726025d3b15678fe51d26fd0796f450a44f78
Author: Christian Hergert <chergert redhat com>
Date:   Sat Dec 2 15:39:58 2017 -0800

    tests: add simple file-browser test for DzlTree

 tests/meson.build |    6 +++
 tests/test-tree.c |   98 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 104 insertions(+), 0 deletions(-)
---
diff --git a/tests/meson.build b/tests/meson.build
index e037414..7097ddb 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -350,4 +350,10 @@ test_recursive_monitor = executable('test-recursive-monitor', 'test-recursive-mo
 )
 test('test-recursive-monitor', test_recursive_monitor, env: test_env)
 
+test_tree = executable('test-tree', 'test-tree.c',
+        c_args: test_cflags,
+     link_args: test_link_args,
+  dependencies: libdazzle_deps + [libdazzle_dep],
+)
+
 endif
diff --git a/tests/test-tree.c b/tests/test-tree.c
new file mode 100644
index 0000000..0665a4c
--- /dev/null
+++ b/tests/test-tree.c
@@ -0,0 +1,98 @@
+#include <dazzle.h>
+
+static void
+build_node_cb (DzlTreeBuilder *builder,
+               DzlTreeNode    *node)
+{
+  GFile *file;
+
+  g_assert (DZL_IS_TREE_BUILDER (builder));
+  g_assert (DZL_IS_TREE_NODE (node));
+
+  file = G_FILE (dzl_tree_node_get_item (node));
+  g_assert (G_IS_FILE (file));
+
+  if (g_file_query_file_type (file, 0, NULL) == G_FILE_TYPE_DIRECTORY)
+    {
+      g_autoptr(GFileEnumerator) enumerator = NULL;
+      gpointer infoptr;
+
+      enumerator = g_file_enumerate_children (file,
+                                              G_FILE_ATTRIBUTE_STANDARD_NAME","
+                                              G_FILE_ATTRIBUTE_STANDARD_TYPE,
+                                              0, NULL, NULL);
+
+      if (enumerator == NULL)
+        return;
+
+      while (!!(infoptr = g_file_enumerator_next_file (enumerator, NULL, NULL)))
+        {
+          g_autoptr(GFileInfo) info = infoptr;
+          g_autoptr(GFile) child = g_file_get_child (file, g_file_info_get_name (info));
+          DzlTreeNode *child_node;
+
+          child_node = dzl_tree_node_new ();
+          dzl_tree_node_set_item (child_node, G_OBJECT (child));
+          dzl_tree_node_set_text (child_node, g_file_info_get_name (info));
+          dzl_tree_node_set_reset_on_collapse (child_node, TRUE);
+
+          if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
+            {
+              dzl_tree_node_set_children_possible (child_node, TRUE);
+              dzl_tree_node_set_icon_name (child_node, "folder-symbolic");
+            }
+          else
+            dzl_tree_node_set_icon_name (child_node, "text-x-generic-symbolic");
+
+          dzl_tree_node_append (node, child_node);
+        }
+
+      g_file_enumerator_close (enumerator, NULL, NULL);
+    }
+}
+
+gint
+main (gint argc,
+      gchar *argv[])
+{
+  GtkWidget *window;
+  GtkWidget *scroller;
+  GtkWidget *tree;
+  DzlTreeBuilder *builder;
+  DzlTreeNode *root;
+  g_autoptr(GFile) file = NULL;
+
+  gtk_init (&argc, &argv);
+
+  window = g_object_new (GTK_TYPE_WINDOW,
+                         "default-width", 300,
+                         "default-height", 700,
+                         "title", "Tree Test",
+                         "visible", TRUE,
+                         NULL);
+  scroller = g_object_new (GTK_TYPE_SCROLLED_WINDOW,
+                           "visible", TRUE,
+                           NULL);
+  gtk_container_add (GTK_CONTAINER (window), scroller);
+  tree = g_object_new (DZL_TYPE_TREE,
+                       "headers-visible", FALSE,
+                       "visible", TRUE,
+                       NULL);
+  gtk_container_add (GTK_CONTAINER (scroller), tree);
+
+  builder = dzl_tree_builder_new ();
+  g_signal_connect (builder, "build-node", G_CALLBACK (build_node_cb), NULL);
+  dzl_tree_add_builder (DZL_TREE (tree), builder);
+
+  root = dzl_tree_node_new ();
+  file = g_file_new_for_path ("/");
+  dzl_tree_node_set_item (root, G_OBJECT (file));
+
+  dzl_tree_set_root (DZL_TREE (tree), root);
+
+  g_signal_connect (window, "delete-event", gtk_main_quit, NULL);
+  gtk_window_present (GTK_WINDOW (window));
+  gtk_main ();
+
+  return 0;
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]