[gtk+] Add an action bar test



commit 07f9b3ffa2e241679f6cc9efc027e70796625972
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Jan 6 23:34:41 2014 -0500

    Add an action bar test
    
    https://bugzilla.gnome.org/show_bug.cgi?id=721665

 tests/Makefile.am     |    1 +
 tests/testactionbar.c |  150 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 151 insertions(+), 0 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 54633e3..7f250bc 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -141,6 +141,7 @@ noinst_PROGRAMS =  $(TEST_PROGS)    \
        testrevealer                    \
        testtitlebar                    \
        testsplitheaders                \
+       testactionbar                   \
        testwindowsize
 
 if USE_X11
diff --git a/tests/testactionbar.c b/tests/testactionbar.c
new file mode 100644
index 0000000..6c11c91
--- /dev/null
+++ b/tests/testactionbar.c
@@ -0,0 +1,150 @@
+#include <gtk/gtk.h>
+
+static void
+toggle_center (GtkCheckButton *button,
+               GParamSpec     *pspec,
+               GtkActionBar   *bar)
+{
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
+    {
+      GtkWidget *button;
+
+      button = gtk_button_new_with_label ("Center");
+      gtk_widget_show (button);
+      gtk_action_bar_set_center_widget (bar, button);
+    }
+  else
+    {
+      gtk_action_bar_set_center_widget (bar, NULL);
+    }
+}
+
+static void
+create_widgets (GtkActionBar  *bar,
+                GtkPackType    pack_type,
+                gint           n)
+{
+  GList *children, *l;
+  GtkWidget *child;
+  gint i;
+  gchar *label;
+
+  children = gtk_container_get_children (GTK_CONTAINER (bar));
+  for (l = children; l; l = l->next)
+    {
+      GtkPackType type;
+
+      child = l->data;
+      gtk_container_child_get (GTK_CONTAINER (bar), child, "pack-type", &type, NULL);
+      if (type == pack_type)
+        gtk_container_remove (GTK_CONTAINER (bar), child);
+    }
+  g_list_free (children);
+
+  for (i = 0; i < n; i++)
+    {
+      label = g_strdup_printf ("%d", i);
+      child = gtk_button_new_with_label (label);
+      g_free (label);
+
+      gtk_widget_show (child);
+      if (pack_type == GTK_PACK_START)
+        gtk_action_bar_pack_start (bar, child);
+      else
+        gtk_action_bar_pack_end (bar, child);
+    }
+}
+
+static void
+change_start (GtkSpinButton *button,
+              GParamSpec    *pspec,
+              GtkActionBar  *bar)
+{
+  create_widgets (bar,
+                  GTK_PACK_START,
+                  gtk_spin_button_get_value_as_int (button));
+}
+
+static void
+change_end (GtkSpinButton *button,
+            GParamSpec    *pspec,
+            GtkActionBar  *bar)
+{
+  create_widgets (bar,
+                  GTK_PACK_END,
+                  gtk_spin_button_get_value_as_int (button));
+}
+
+static void
+activate (GApplication *gapp)
+{
+  GtkApplication *app = GTK_APPLICATION (gapp);
+  GtkWidget *window;
+  GtkWidget *box;
+  GtkWidget *grid;
+  GtkWidget *label;
+  GtkWidget *spin;
+  GtkWidget *check;
+  GtkWidget *bar;
+  GtkWidget *frame;
+
+  window = gtk_application_window_new (app);
+  gtk_application_add_window (app, GTK_WINDOW (window));
+
+  bar = gtk_action_bar_new ();
+
+  box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+  
+  grid = gtk_grid_new ();
+  g_object_set (grid,
+                "halign", GTK_ALIGN_CENTER,
+                "margin", 20,
+                "row-spacing", 12,
+                "column-spacing", 12,
+                NULL);
+  gtk_box_pack_start (GTK_BOX (box), grid, FALSE, FALSE, 0);
+
+  label = gtk_label_new ("Start");
+  gtk_widget_set_halign (label, GTK_ALIGN_END);
+  spin = gtk_spin_button_new_with_range (0, 10, 1);
+  g_signal_connect (spin, "notify::value",
+                    G_CALLBACK (change_start), bar);
+  gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);
+  gtk_grid_attach (GTK_GRID (grid), spin, 1, 0, 1, 1);
+
+  label = gtk_label_new ("Center");
+  gtk_widget_set_halign (label, GTK_ALIGN_END);
+  check = gtk_check_button_new ();
+  g_signal_connect (check, "notify::active",
+                    G_CALLBACK (toggle_center), bar);
+  gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1);
+  gtk_grid_attach (GTK_GRID (grid), check, 1, 1, 1, 1);
+
+  label = gtk_label_new ("End");
+  gtk_widget_set_halign (label, GTK_ALIGN_END);
+  spin = gtk_spin_button_new_with_range (0, 10, 1);
+  g_signal_connect (spin, "notify::value",
+                    G_CALLBACK (change_end), bar);
+  gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1);
+  gtk_grid_attach (GTK_GRID (grid), spin, 1, 2, 1, 1);
+
+  frame = gtk_frame_new (NULL);
+  gtk_widget_set_halign (frame, GTK_ALIGN_FILL);
+  gtk_widget_set_valign (frame, GTK_ALIGN_END);
+  gtk_container_add (GTK_CONTAINER (frame), bar);
+
+  gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 0);
+  gtk_container_add (GTK_CONTAINER (window), box);
+  gtk_widget_show_all (window);
+}
+
+int
+main (int argc, char *argv[])
+{
+  GtkApplication *app;
+
+  app = gtk_application_new ("org.gtk.Test.ActionBar", 0);
+  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
+
+  return g_application_run (G_APPLICATION (app), argc, argv);
+}


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