/src/wrappers/gtk/examples/gtk-demo/ui_manager.e
http://github.com/tybor/Liberty · Specman e · 262 lines · 21 code · 35 blank · 206 comment · 2 complexity · acca099d04cdcbaac4e5795ea2624c32 MD5 · raw file
- indexing
- description: "."
- copyright: "[
- Copyright (C) 2006 Paolo Redaelli, GTK+ team
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation; either version 2.1 of
- the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301 USA
- ]"
- class UI_MANAGER
- creation make, from_external_pointer
- feature {} -- Creation
- -- /* UI Manager
- -- *
- -- * The GtkUIManager object allows the easy creation of menus
- -- * from an array of actions and a description of the menu hierarchy.
- -- */
- -- #include <gtk/gtk.h>
- -- static void
- -- activate_action (GtkAction *action)
- -- {
- -- g_message ("Action \"%s\" activated", gtk_action_get_name (action));
- -- }
- -- static void
- -- activate_radio_action (GtkAction *action, GtkRadioAction *current)
- -- {
- -- g_message ("Radio action \"%s\" selected",
- -- gtk_action_get_name (GTK_ACTION (current)));
- -- }
- -- static GtkActionEntry entries[] = {
- -- { "FileMenu", NULL, "_File" }, /* name, stock id, label */
- -- { "PreferencesMenu", NULL, "_Preferences" }, /* name, stock id, label */
- -- { "ColorMenu", NULL, "_Color" }, /* name, stock id, label */
- -- { "ShapeMenu", NULL, "_Shape" }, /* name, stock id, label */
- -- { "HelpMenu", NULL, "_Help" }, /* name, stock id, label */
- -- { "New", GTK_STOCK_NEW, /* name, stock id */
- -- "_New", "<control>N", /* label, accelerator */
- -- "Create a new file", /* tooltip */
- -- G_CALLBACK (activate_action) },
- -- { "Open", GTK_STOCK_OPEN, /* name, stock id */
- -- "_Open","<control>O", /* label, accelerator */
- -- "Open a file", /* tooltip */
- -- G_CALLBACK (activate_action) },
- -- { "Save", GTK_STOCK_SAVE, /* name, stock id */
- -- "_Save","<control>S", /* label, accelerator */
- -- "Save current file", /* tooltip */
- -- G_CALLBACK (activate_action) },
- -- { "SaveAs", GTK_STOCK_SAVE, /* name, stock id */
- -- "Save _As...", NULL, /* label, accelerator */
- -- "Save to a file", /* tooltip */
- -- G_CALLBACK (activate_action) },
- -- { "Quit", GTK_STOCK_QUIT, /* name, stock id */
- -- "_Quit", "<control>Q", /* label, accelerator */
- -- "Quit", /* tooltip */
- -- G_CALLBACK (activate_action) },
- -- { "About", NULL, /* name, stock id */
- -- "_About", "<control>A", /* label, accelerator */
- -- "About", /* tooltip */
- -- G_CALLBACK (activate_action) },
- -- { "Logo", "demo-gtk-logo", /* name, stock id */
- -- NULL, NULL, /* label, accelerator */
- -- "GTK+", /* tooltip */
- -- G_CALLBACK (activate_action) },
- -- };
- -- static guint n_entries = G_N_ELEMENTS (entries);
- -- static GtkToggleActionEntry toggle_entries[] = {
- -- { "Bold", GTK_STOCK_BOLD, /* name, stock id */
- -- "_Bold", "<control>B", /* label, accelerator */
- -- "Bold", /* tooltip */
- -- G_CALLBACK (activate_action),
- -- TRUE }, /* is_active */
- -- };
- -- static guint n_toggle_entries = G_N_ELEMENTS (toggle_entries);
- -- enum {
- -- COLOR_RED,
- -- COLOR_GREEN,
- -- COLOR_BLUE
- -- };
- -- static GtkRadioActionEntry color_entries[] = {
- -- { "Red", NULL, /* name, stock id */
- -- "_Red", "<control>R", /* label, accelerator */
- -- "Blood", COLOR_RED }, /* tooltip, value */
- -- { "Green", NULL, /* name, stock id */
- -- "_Green", "<control>G", /* label, accelerator */
- -- "Grass", COLOR_GREEN }, /* tooltip, value */
- -- { "Blue", NULL, /* name, stock id */
- -- "_Blue", "<control>B", /* label, accelerator */
- -- "Sky", COLOR_BLUE }, /* tooltip, value */
- -- };
- -- static guint n_color_entries = G_N_ELEMENTS (color_entries);
- -- enum {
- -- SHAPE_SQUARE,
- -- SHAPE_RECTANGLE,
- -- SHAPE_OVAL
- -- };
- -- static GtkRadioActionEntry shape_entries[] = {
- -- { "Square", NULL, /* name, stock id */
- -- "_Square", "<control>S", /* label, accelerator */
- -- "Square", SHAPE_SQUARE }, /* tooltip, value */
- -- { "Rectangle", NULL, /* name, stock id */
- -- "_Rectangle", "<control>R", /* label, accelerator */
- -- "Rectangle", SHAPE_RECTANGLE }, /* tooltip, value */
- -- { "Oval", NULL, /* name, stock id */
- -- "_Oval", "<control>O", /* label, accelerator */
- -- "Egg", SHAPE_OVAL }, /* tooltip, value */
- -- };
- -- static guint n_shape_entries = G_N_ELEMENTS (shape_entries);
- -- static const gchar *ui_info =
- -- "<ui>"
- -- " <menubar name='MenuBar'>"
- -- " <menu action='FileMenu'>"
- -- " <menuitem action='New'/>"
- -- " <menuitem action='Open'/>"
- -- " <menuitem action='Save'/>"
- -- " <menuitem action='SaveAs'/>"
- -- " <separator/>"
- -- " <menuitem action='Quit'/>"
- -- " </menu>"
- -- " <menu action='PreferencesMenu'>"
- -- " <menu action='ColorMenu'>"
- -- " <menuitem action='Red'/>"
- -- " <menuitem action='Green'/>"
- -- " <menuitem action='Blue'/>"
- -- " </menu>"
- -- " <menu action='ShapeMenu'>"
- -- " <menuitem action='Square'/>"
- -- " <menuitem action='Rectangle'/>"
- -- " <menuitem action='Oval'/>"
- -- " </menu>"
- -- " <menuitem action='Bold'/>"
- -- " </menu>"
- -- " <menu action='HelpMenu'>"
- -- " <menuitem action='About'/>"
- -- " </menu>"
- -- " </menubar>"
- -- " <toolbar name='ToolBar'>"
- -- " <toolitem action='Open'/>"
- -- " <toolitem action='Quit'/>"
- -- " <separator action='Sep1'/>"
- -- " <toolitem action='Logo'/>"
- -- " </toolbar>"
- -- "</ui>";
- -- GtkWidget *
- -- do_ui_manager (GtkWidget *do_widget)
- -- {
- -- static GtkWidget *window = NULL;
-
- -- if (!window)
- -- {
- -- GtkWidget *box1;
- -- GtkWidget *box2;
- -- GtkWidget *separator;
- -- GtkWidget *label;
- -- GtkWidget *button;
- -- GtkUIManager *ui;
- -- GtkActionGroup *actions;
- -- GError *error = NULL;
- -- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- -- gtk_window_set_screen (GTK_WINDOW (window),
- -- gtk_widget_get_screen (do_widget));
-
- -- g_signal_connect (window, "destroy",
- -- G_CALLBACK (gtk_widget_destroyed), &window);
- -- g_signal_connect (window, "delete-event",
- -- G_CALLBACK (gtk_true), NULL);
- -- actions = gtk_action_group_new ("Actions");
- -- gtk_action_group_add_actions (actions, entries, n_entries, NULL);
- -- gtk_action_group_add_toggle_actions (actions,
- -- toggle_entries, n_toggle_entries,
- -- NULL);
- -- gtk_action_group_add_radio_actions (actions,
- -- color_entries, n_color_entries,
- -- COLOR_RED,
- -- G_CALLBACK (activate_radio_action),
- -- NULL);
- -- gtk_action_group_add_radio_actions (actions,
- -- shape_entries, n_shape_entries,
- -- SHAPE_OVAL,
- -- G_CALLBACK (activate_radio_action),
- -- NULL);
- -- ui = gtk_ui_manager_new ();
- -- gtk_ui_manager_insert_action_group (ui, actions, 0);
- -- gtk_window_add_accel_group (GTK_WINDOW (window),
- -- gtk_ui_manager_get_accel_group (ui));
- -- gtk_window_set_title (GTK_WINDOW (window), "UI Manager");
- -- gtk_container_set_border_width (GTK_CONTAINER (window), 0);
-
- -- if (!gtk_ui_manager_add_ui_from_string (ui, ui_info, -1, &error))
- -- {
- -- g_message ("building menus failed: %s", error->message);
- -- g_error_free (error);
- -- }
- -- box1 = gtk_vbox_new (FALSE, 0);
- -- gtk_container_add (GTK_CONTAINER (window), box1);
-
- -- gtk_box_pack_start (GTK_BOX (box1),
- -- gtk_ui_manager_get_widget (ui, "/MenuBar"),
- -- FALSE, FALSE, 0);
- -- label = gtk_label_new ("Type\n<alt>\nto start");
- -- gtk_widget_set_size_request (label, 200, 200);
- -- gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
- -- gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
- -- separator = gtk_hseparator_new ();
- -- gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
- -- box2 = gtk_vbox_new (FALSE, 10);
- -- gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
- -- gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
- -- button = gtk_button_new_with_label ("close");
- -- g_signal_connect_swapped (button, "clicked",
- -- G_CALLBACK (gtk_widget_destroy), window);
- -- gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
- -- GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
- -- gtk_widget_grab_default (button);
- -- gtk_widget_show_all (window);
- -- }
- -- else
- -- {
- -- gtk_widget_destroy (window);
- -- window = NULL;
- -- }
- -- return window;
- -- }
- end