aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/shortcut-bar/test-shortcut-bar.c
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/shortcut-bar/test-shortcut-bar.c')
-rw-r--r--widgets/shortcut-bar/test-shortcut-bar.c445
1 files changed, 445 insertions, 0 deletions
diff --git a/widgets/shortcut-bar/test-shortcut-bar.c b/widgets/shortcut-bar/test-shortcut-bar.c
new file mode 100644
index 0000000000..186bf3ed8a
--- /dev/null
+++ b/widgets/shortcut-bar/test-shortcut-bar.c
@@ -0,0 +1,445 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
+/*
+ * Author :
+ * Damon Chaplin <damon@gtk.org>
+ *
+ * Copyright 1999, Helix Code, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+/*
+ * This tests the ShortcutBar widget.
+ */
+
+#include <gnome.h>
+
+#include "e-shortcut-bar.h"
+
+#define NUM_SHORTCUT_TYPES 5
+gchar *shortcut_types[] = {
+ "folder:", "file:", "calendar:", "todo:", "contacts:"
+};
+
+GtkWidget *main_label;
+
+static void quit (GtkWidget *window, GdkEvent *event, gpointer data);
+static void add_test_groups (EShortcutBar *shortcut_bar);
+static void add_test_group (EShortcutBar *shortcut_bar, gint i,
+ gchar *group_name);
+static gint get_random_int (gint max);
+
+static void on_shortcut_bar_item_selected (EShortcutBar *shortcut_bar,
+ GdkEvent *event,
+ gint group_num,
+ gint item_num);
+static void show_standard_popup (EShortcutBar *shortcut_bar,
+ GdkEvent *event,
+ gint group_num);
+static void show_context_popup (EShortcutBar *shortcut_bar,
+ GdkEvent *event,
+ gint group_num,
+ gint item_num);
+
+static void set_large_icons (GtkWidget *menuitem,
+ EShortcutBar *shortcut_bar);
+static void set_small_icons (GtkWidget *menuitem,
+ EShortcutBar *shortcut_bar);
+static void remove_group (GtkWidget *menuitem,
+ EShortcutBar *shortcut_bar);
+
+static void rename_item (GtkWidget *menuitem,
+ EShortcutBar *shortcut_bar);
+static void remove_item (GtkWidget *menuitem,
+ EShortcutBar *shortcut_bar);
+
+int
+main (int argc, char *argv[])
+{
+ GtkWidget *window, *hpaned, *shortcut_bar;
+
+ gnome_init ("test-shortcut-bar", "0.1", argc, argv);
+
+ gtk_widget_push_visual (gdk_imlib_get_visual ());
+ gtk_widget_push_colormap (gdk_imlib_get_colormap ());
+
+ window = gnome_app_new ("TestShortcutBar", "TestShortCutBar");
+ gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
+ gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, FALSE);
+
+ gtk_signal_connect (GTK_OBJECT (window), "delete-event",
+ GTK_SIGNAL_FUNC (quit), NULL);
+
+ hpaned = gtk_hpaned_new ();
+ gnome_app_set_contents (GNOME_APP (window), hpaned);
+ gtk_widget_show (hpaned);
+
+ shortcut_bar = e_shortcut_bar_new ();
+ gtk_paned_pack1 (GTK_PANED (hpaned), shortcut_bar, FALSE, TRUE);
+ gtk_widget_show (shortcut_bar);
+
+#if 0
+ gtk_container_set_border_width (GTK_CONTAINER (shortcut_bar), 4);
+#endif
+
+ gtk_paned_set_position (GTK_PANED (hpaned), 100);
+ /*gtk_paned_set_gutter_size (GTK_PANED (hpaned), 12);*/
+
+ main_label = gtk_label_new ("Main Application Window Goes Here");
+ gtk_paned_pack2 (GTK_PANED (hpaned), main_label, TRUE, TRUE);
+ gtk_widget_show (main_label);
+
+
+ gtk_widget_pop_visual ();
+ gtk_widget_pop_colormap ();
+
+ add_test_groups (E_SHORTCUT_BAR (shortcut_bar));
+
+ gtk_signal_connect (GTK_OBJECT (shortcut_bar), "item_selected",
+ GTK_SIGNAL_FUNC (on_shortcut_bar_item_selected),
+ NULL);
+
+ gtk_widget_show (window);
+ gtk_main ();
+ return 0;
+}
+
+
+static void
+quit (GtkWidget *window, GdkEvent *event, gpointer data)
+{
+ gtk_widget_destroy (window);
+ gtk_exit (0);
+}
+
+
+static void
+add_test_groups (EShortcutBar *shortcut_bar)
+{
+ add_test_group (shortcut_bar, 1, "Shortcuts");
+ add_test_group (shortcut_bar, 2, "My Shortcuts");
+ add_test_group (shortcut_bar, 3, "Longer Shortcuts");
+ add_test_group (shortcut_bar, 4, "Very Long Shortcuts");
+ add_test_group (shortcut_bar, 5, "Incredibly Long Shortcuts");
+}
+
+
+static void
+add_test_group (EShortcutBar *shortcut_bar, gint i, gchar *group_name)
+{
+ gint group_num, item_num, num_items;
+ gchar buffer[128];
+ gint shortcut_type, j;
+
+ group_num = e_shortcut_bar_add_group (E_SHORTCUT_BAR (shortcut_bar),
+ group_name);
+
+ if (group_num % 2)
+ e_shortcut_bar_set_view_type (E_SHORTCUT_BAR (shortcut_bar),
+ group_num,
+ E_ICON_BAR_SMALL_ICONS);
+
+ num_items = get_random_int (5) + 3;
+ for (j = 1; j <= num_items; j++) {
+ if (j == 1)
+ sprintf (buffer, "A very long shortcut with proper words so I can test the wrapping and ellipsis behaviour");
+ else if (j == 2)
+ sprintf (buffer, "A very long shortcut with averylongworkinthemiddlesoIcantestthewrappingandellipsisbehaviour");
+ else
+ sprintf (buffer, "Item %i:%i\n", i, j);
+
+ shortcut_type = get_random_int (NUM_SHORTCUT_TYPES);
+ item_num = e_shortcut_bar_add_item (E_SHORTCUT_BAR (shortcut_bar), group_num, shortcut_types[shortcut_type], buffer);
+ }
+}
+
+
+/* Returns a random integer between 0 and max - 1. */
+static gint
+get_random_int (gint max)
+{
+ gint random_num;
+
+ random_num = (int) (max * (rand () / (RAND_MAX + 1.0)));
+#if 0
+ g_print ("Random num (%i): %i\n", max, random_num);
+#endif
+ return random_num;
+}
+
+
+static void
+on_shortcut_bar_item_selected (EShortcutBar *shortcut_bar,
+ GdkEvent *event, gint group_num, gint item_num)
+{
+ gchar buffer[256];
+
+ if (event->button.button == 1) {
+ sprintf (buffer, "Item Selected - %i:%i",
+ group_num + 1, item_num + 1);
+ gtk_label_set_text (GTK_LABEL (main_label), buffer);
+ } else if (event->button.button == 3) {
+ if (item_num == -1)
+ show_standard_popup (shortcut_bar, event, group_num);
+ else
+ show_context_popup (shortcut_bar, event, group_num,
+ item_num);
+ }
+}
+
+
+static void
+show_standard_popup (EShortcutBar *shortcut_bar,
+ GdkEvent *event,
+ gint group_num)
+{
+ GtkWidget *menu, *menuitem;
+
+ /* We don't have any commands if there aren't any groups yet. */
+ if (group_num == -1)
+ return;
+
+ menu = gtk_menu_new ();
+
+ menuitem = gtk_menu_item_new_with_label ("Large Icons");
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+ gtk_signal_connect (GTK_OBJECT (menuitem), "activate",
+ GTK_SIGNAL_FUNC (set_large_icons), shortcut_bar);
+
+ menuitem = gtk_menu_item_new_with_label ("Small Icons");
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+ gtk_signal_connect (GTK_OBJECT (menuitem), "activate",
+ GTK_SIGNAL_FUNC (set_small_icons), shortcut_bar);
+
+ menuitem = gtk_menu_item_new ();
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+
+ menuitem = gtk_menu_item_new_with_label ("Add New Group");
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+
+ menuitem = gtk_menu_item_new_with_label ("Remove Group");
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+ gtk_signal_connect (GTK_OBJECT (menuitem), "activate",
+ GTK_SIGNAL_FUNC (remove_group), shortcut_bar);
+
+ menuitem = gtk_menu_item_new_with_label ("Rename Group");
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+
+ menuitem = gtk_menu_item_new ();
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+
+ menuitem = gtk_menu_item_new_with_label ("Add Shortcut...");
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+
+ menuitem = gtk_menu_item_new ();
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+
+ menuitem = gtk_menu_item_new_with_label ("Hide Shortcut Bar");
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+
+ /* Save the group num so we can get it in the callbacks. */
+ gtk_object_set_data (GTK_OBJECT (menu), "group_num",
+ GINT_TO_POINTER (group_num));
+
+ /* FIXME: Destroy menu when finished with it somehow? */
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
+ event->button.button, event->button.time);
+}
+
+
+static void
+set_large_icons (GtkWidget *menuitem,
+ EShortcutBar *shortcut_bar)
+{
+ GtkWidget *menu;
+ gint group_num;
+
+ menu = menuitem->parent;
+ g_return_if_fail (GTK_IS_MENU (menu));
+
+ group_num = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu),
+ "group_num"));
+
+ e_shortcut_bar_set_view_type (shortcut_bar, group_num,
+ E_ICON_BAR_LARGE_ICONS);
+}
+
+
+static void
+set_small_icons (GtkWidget *menuitem,
+ EShortcutBar *shortcut_bar)
+{
+ GtkWidget *menu;
+ gint group_num;
+
+ menu = menuitem->parent;
+ g_return_if_fail (GTK_IS_MENU (menu));
+
+ group_num = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu),
+ "group_num"));
+
+ e_shortcut_bar_set_view_type (shortcut_bar, group_num,
+ E_ICON_BAR_SMALL_ICONS);
+}
+
+
+static void
+remove_group (GtkWidget *menuitem,
+ EShortcutBar *shortcut_bar)
+{
+ GtkWidget *menu;
+ gint group_num;
+
+ menu = menuitem->parent;
+ g_return_if_fail (GTK_IS_MENU (menu));
+
+ group_num = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu),
+ "group_num"));
+
+ e_shortcut_bar_remove_group (shortcut_bar, group_num);
+}
+
+
+static void
+show_context_popup (EShortcutBar *shortcut_bar,
+ GdkEvent *event,
+ gint group_num,
+ gint item_num)
+{
+ GtkWidget *menu, *menuitem, *label, *pixmap;
+
+ menu = gtk_menu_new ();
+
+ menuitem = gtk_pixmap_menu_item_new ();
+ label = gtk_label_new ("Open Folder");
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_widget_show (label);
+ gtk_container_add (GTK_CONTAINER (menuitem), label);
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+ pixmap = gnome_stock_pixmap_widget (menu, GNOME_STOCK_MENU_OPEN);
+ if (pixmap) {
+ gtk_widget_show(pixmap);
+ gtk_pixmap_menu_item_set_pixmap (GTK_PIXMAP_MENU_ITEM (menuitem), pixmap);
+ }
+
+ menuitem = gtk_menu_item_new_with_label ("Open in New Window");
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+
+ menuitem = gtk_menu_item_new_with_label ("Advanced Find");
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+
+ menuitem = gtk_menu_item_new ();
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+
+ menuitem = gtk_menu_item_new_with_label ("Remove from Shortcut Bar");
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+ gtk_signal_connect (GTK_OBJECT (menuitem), "activate",
+ GTK_SIGNAL_FUNC (remove_item), shortcut_bar);
+
+ menuitem = gtk_menu_item_new_with_label ("Rename Shortcut");
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+ gtk_signal_connect (GTK_OBJECT (menuitem), "activate",
+ GTK_SIGNAL_FUNC (rename_item), shortcut_bar);
+
+ menuitem = gtk_menu_item_new ();
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+
+ menuitem = gtk_menu_item_new_with_label ("Properties");
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+
+
+ /* Save the group & item nums so we can get them in the callbacks. */
+ gtk_object_set_data (GTK_OBJECT (menu), "group_num",
+ GINT_TO_POINTER (group_num));
+ gtk_object_set_data (GTK_OBJECT (menu), "item_num",
+ GINT_TO_POINTER (item_num));
+
+ /* FIXME: Destroy menu when finished with it somehow? */
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
+ event->button.button, event->button.time);
+}
+
+
+static void
+rename_item (GtkWidget *menuitem,
+ EShortcutBar *shortcut_bar)
+{
+ GtkWidget *menu;
+ gint group_num, item_num;
+
+ menu = menuitem->parent;
+ g_return_if_fail (GTK_IS_MENU (menu));
+
+ group_num = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu),
+ "group_num"));
+ item_num = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu),
+ "item_num"));
+
+ e_shortcut_bar_start_editing_item (shortcut_bar, group_num, item_num);
+}
+
+
+static void
+remove_item (GtkWidget *menuitem,
+ EShortcutBar *shortcut_bar)
+{
+ GtkWidget *menu;
+ gint group_num, item_num;
+
+ menu = menuitem->parent;
+ g_return_if_fail (GTK_IS_MENU (menu));
+
+ group_num = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu),
+ "group_num"));
+ item_num = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menu),
+ "item_num"));
+
+ e_shortcut_bar_remove_item (shortcut_bar, group_num, item_num);
+}
+
+