1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
4 * (GLABELS) Label and Business Card Creation program for GNOME
6 * ui.c: GLabels ui module
8 * Copyright (C) 2001-2002 Jim Evins <evins@snaught.com>.
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #include <glib/gi18n.h>
29 #include <gconf/gconf-client.h>
30 #include "recent-files/egg-recent-view.h"
31 #include "recent-files/egg-recent-view-uimanager.h"
35 #include "ui-commands.h"
44 /*==========================================================================*/
45 /* Private macros and constants. */
46 /*==========================================================================*/
48 /*==========================================================================*/
50 /*==========================================================================*/
53 /*==========================================================================*/
54 /* Local function prototypes */
55 /*==========================================================================*/
57 static void view_ui_item_toggled_cb (GtkToggleAction *action,
60 static void set_app_main_toolbar_style (GtkUIManager *ui);
62 static void set_app_drawing_toolbar_style (GtkUIManager *ui);
64 static void set_view_style (GtkUIManager *ui);
66 static void connect_proxy_cb (GtkUIManager *ui,
71 static void disconnect_proxy_cb (GtkUIManager *ui,
76 static void menu_item_select_cb (GtkMenuItem *proxy,
79 static void menu_item_deselect_cb (GtkMenuItem *proxy,
82 static char *recent_tooltip_func (EggRecentItem *item,
87 /*==========================================================================*/
89 /*==========================================================================*/
91 static GtkActionEntry entries[] = {
94 { "FileMenu", NULL, N_("_File") },
95 { "FileRecentsMenu", NULL, N_("Recent _Files") },
96 { "EditMenu", NULL, N_("_Edit") },
97 { "ViewMenu", NULL, N_("_View") },
98 { "ViewMainToolBarMenu", NULL, N_("Customize Main Toolbar") },
99 { "ViewDrawingToolBarMenu", NULL, N_("Customize Drawing Toolbar") },
100 { "ViewPropertyToolBarMenu", NULL, N_("Customize Properties Toolbar") },
101 { "ObjectsMenu", NULL, N_("_Objects") },
102 { "ObjectsCreateMenu", NULL, N_("_Create") },
103 { "ObjectsOrderMenu", NULL, N_("_Order") },
104 { "ObjectsRotateFlipMenu", NULL, N_("_Rotate/Flip") },
105 { "ObjectsAlignHorizMenu", NULL, N_("Align _Horizontal") },
106 { "ObjectsAlignVertMenu", NULL, N_("Align _Vertical") },
107 { "HelpMenu", NULL, N_("_Help") },
110 { "ContextMenu", NULL, N_("Context Menu") },
111 { "EmptySelectionContextMenu", NULL, N_("Context Menu") },
113 /* File action entries. */
118 N_("Create a new file"),
119 G_CALLBACK (gl_ui_cmd_file_new) },
126 G_CALLBACK (gl_ui_cmd_file_open) },
132 N_("Save current file"),
133 G_CALLBACK (gl_ui_cmd_file_save) },
139 N_("Save the current file to a different name"),
140 G_CALLBACK (gl_ui_cmd_file_save_as) },
146 N_("Print the current file"),
147 G_CALLBACK (gl_ui_cmd_file_print) },
150 GTK_STOCK_PROPERTIES,
153 N_("Modify document properties"),
154 G_CALLBACK (gl_ui_cmd_file_properties) },
156 { "FileTemplateDesigner",
158 N_("Template _Designer..."),
160 N_("Create a custom template"),
161 G_CALLBACK (gl_ui_cmd_file_template_designer) },
167 N_("Close the current file"),
168 G_CALLBACK (gl_ui_cmd_file_close) },
174 N_("Quit the program"),
175 G_CALLBACK (gl_ui_cmd_file_quit) },
178 /* Edit action entries. */
183 N_("Cut the selection"),
184 G_CALLBACK (gl_ui_cmd_edit_cut) },
190 N_("Copy the selection"),
191 G_CALLBACK (gl_ui_cmd_edit_copy) },
197 N_("Paste the clipboard"),
198 G_CALLBACK (gl_ui_cmd_edit_paste) },
204 N_("Delete the selected objects"),
205 G_CALLBACK (gl_ui_cmd_edit_delete) },
211 N_("Select all objects"),
212 G_CALLBACK (gl_ui_cmd_edit_select_all) },
218 N_("Remove all selections"),
219 G_CALLBACK (gl_ui_cmd_edit_unselect_all) },
222 GTK_STOCK_PREFERENCES,
225 N_("Configure the application"),
226 G_CALLBACK (gl_ui_cmd_edit_preferences) },
229 /* View action entries. */
234 N_("Increase magnification"),
235 G_CALLBACK (gl_ui_cmd_view_zoomin) },
241 N_("Decrease magnification"),
242 G_CALLBACK (gl_ui_cmd_view_zoomout) },
248 N_("Restore scale to 100%"),
249 G_CALLBACK (gl_ui_cmd_view_zoom1to1) },
255 N_("Set scale to fit window"),
256 G_CALLBACK (gl_ui_cmd_view_zoom_to_fit) },
259 /* Objects action entries. */
260 { "ObjectsArrowMode",
264 N_("Select, move and modify objects"),
265 G_CALLBACK (gl_ui_cmd_objects_arrow_mode) },
267 { "ObjectsCreateText",
271 N_("Create text object"),
272 G_CALLBACK (gl_ui_cmd_objects_create_text) },
274 { "ObjectsCreateBox",
278 N_("Create box/rectangle object"),
279 G_CALLBACK (gl_ui_cmd_objects_create_box) },
281 { "ObjectsCreateLine",
285 N_("Create line object"),
286 G_CALLBACK (gl_ui_cmd_objects_create_line) },
288 { "ObjectsCreateEllipse",
292 N_("Create ellipse/circle object"),
293 G_CALLBACK (gl_ui_cmd_objects_create_ellipse) },
295 { "ObjectsCreateImage",
299 N_("Create image object"),
300 G_CALLBACK (gl_ui_cmd_objects_create_image) },
302 { "ObjectsCreateBarcode",
306 N_("Create barcode object"),
307 G_CALLBACK (gl_ui_cmd_objects_create_barcode) },
311 N_("Bring to front"),
313 N_("Raise object to top"),
314 G_CALLBACK (gl_ui_cmd_objects_raise) },
317 GL_STOCK_ORDER_BOTTOM,
320 N_("Lower object to bottom"),
321 G_CALLBACK (gl_ui_cmd_objects_lower) },
323 { "ObjectsRotateLeft",
324 GL_STOCK_ROTATE_LEFT,
327 N_("Rotate object 90 degrees counter-clockwise"),
328 G_CALLBACK (gl_ui_cmd_objects_rotate_left) },
330 { "ObjectsRotateRight",
331 GL_STOCK_ROTATE_RIGHT,
334 N_("Rotate object 90 degrees clockwise"),
335 G_CALLBACK (gl_ui_cmd_objects_rotate_right) },
337 { "ObjectsFlipHorizontal",
339 N_("Flip horizontally"),
341 N_("Flip object horizontally"),
342 G_CALLBACK (gl_ui_cmd_objects_flip_horiz) },
344 { "ObjectsFlipVertical",
346 N_("Flip vertically"),
348 N_("Flip object vertically"),
349 G_CALLBACK (gl_ui_cmd_objects_flip_vert) },
351 { "ObjectsAlignLeft",
355 N_("Align objects to left edges"),
356 G_CALLBACK (gl_ui_cmd_objects_align_left) },
358 { "ObjectsAlignRight",
359 GL_STOCK_ALIGN_RIGHT,
362 N_("Align objects to right edges"),
363 G_CALLBACK (gl_ui_cmd_objects_align_right) },
365 { "ObjectsAlignHCenter",
366 GL_STOCK_ALIGN_HCENTER,
367 N_("Align horizontal center"),
369 N_("Align objects to horizontal centers"),
370 G_CALLBACK (gl_ui_cmd_objects_align_hcenter) },
376 N_("Align objects to top edges"),
377 G_CALLBACK (gl_ui_cmd_objects_align_top) },
379 { "ObjectsAlignBottom",
380 GL_STOCK_ALIGN_BOTTOM,
383 N_("Align objects to bottom edges"),
384 G_CALLBACK (gl_ui_cmd_objects_align_bottom) },
386 { "ObjectsAlignVCenter",
387 GL_STOCK_ALIGN_VCENTER,
388 N_("Align vertical center"),
390 N_("Align objects to vertical centers"),
391 G_CALLBACK (gl_ui_cmd_objects_align_vcenter) },
393 { "ObjectsCenterHorizontal",
394 GL_STOCK_CENTER_HORIZ,
395 N_("Center horizontally"),
397 N_("Center objects to horizontal label center"),
398 G_CALLBACK (gl_ui_cmd_objects_center_horiz) },
400 { "ObjectsCenterVertical",
401 GL_STOCK_CENTER_VERT,
402 N_("Center vertically"),
404 N_("Center objects to vertical label center"),
405 G_CALLBACK (gl_ui_cmd_objects_center_vert) },
407 { "ObjectsMergeProperties",
409 N_("Merge properties"),
411 N_("Edit merge properties"),
412 G_CALLBACK (gl_ui_cmd_objects_merge_properties) },
415 /* Help actions entries. */
420 N_("Open glabels manual"),
421 G_CALLBACK (gl_ui_cmd_help_contents) },
428 G_CALLBACK (gl_ui_cmd_help_about) },
431 static guint n_entries = G_N_ELEMENTS (entries);
433 static GtkToggleActionEntry toggle_entries[] = {
435 { "ViewPropertyToolBar",
437 N_("Property toolbar"),
439 N_("Change the visibility of the property toolbar in the current window"),
440 G_CALLBACK (gl_ui_cmd_view_property_bar_toggle),
443 { "ViewPropertyToolBarToolTips",
447 N_("Show tooltips for property toolbar"),
448 G_CALLBACK (gl_ui_cmd_view_property_bar_tips_toggle),
455 N_("Change the visibility of the grid in the current window"),
456 G_CALLBACK (gl_ui_cmd_view_grid_toggle),
463 N_("Change the visibility of markup lines in the current window"),
464 G_CALLBACK (gl_ui_cmd_view_markup_toggle),
468 static guint n_toggle_entries = G_N_ELEMENTS (toggle_entries);
470 static GtkToggleActionEntry ui_toggle_entries[] = {
476 N_("Change the visibility of the main toolbar in the current window"),
477 G_CALLBACK (view_ui_item_toggled_cb),
480 { "ViewDrawingToolBar",
482 N_("Drawing toolbar"),
484 N_("Change the visibility of the drawing toolbar in the current window"),
485 G_CALLBACK (view_ui_item_toggled_cb),
488 { "ViewMainToolBarToolTips",
492 N_("Show tooltips for main toolbar"),
493 G_CALLBACK (view_ui_item_toggled_cb),
496 { "ViewDrawingToolBarToolTips",
500 N_("Show tooltips for drawing toolbar"),
501 G_CALLBACK (view_ui_item_toggled_cb),
505 static guint n_ui_toggle_entries = G_N_ELEMENTS (ui_toggle_entries);
507 static const gchar *ui_info =
510 " <menubar name='MenuBar'>"
511 " <menu action='FileMenu'>"
512 " <menuitem action='FileNew' />"
513 " <menuitem action='FileOpen' />"
514 " <menu action='FileRecentsMenu'>"
515 " <placeholder name='FileRecentsPlaceHolder' />"
518 " <menuitem action='FileSave' />"
519 " <menuitem action='FileSaveAs' />"
521 " <menuitem action='FilePrint' />"
523 " <menuitem action='FileProperties' />"
524 " <menuitem action='FileTemplateDesigner' />"
526 " <menuitem action='FileClose' />"
527 " <menuitem action='FileQuit' />"
529 " <menu action='EditMenu'>"
530 " <menuitem action='EditCut' />"
531 " <menuitem action='EditCopy' />"
532 " <menuitem action='EditPaste' />"
533 " <menuitem action='EditDelete' />"
535 " <menuitem action='EditSelectAll' />"
536 " <menuitem action='EditUnSelectAll' />"
538 " <menuitem action='EditPreferences' />"
540 " <menu action='ViewMenu'>"
541 " <menuitem action='ViewMainToolBar' />"
542 " <menuitem action='ViewDrawingToolBar' />"
543 " <menuitem action='ViewPropertyToolBar' />"
545 " <menu action='ViewMainToolBarMenu'>"
546 " <menuitem action='ViewMainToolBarToolTips' />"
548 " <menu action='ViewDrawingToolBarMenu'>"
549 " <menuitem action='ViewDrawingToolBarToolTips' />"
551 " <menu action='ViewPropertyToolBarMenu'>"
552 " <menuitem action='ViewPropertyToolBarToolTips' />"
555 " <menuitem action='ViewGrid' />"
556 " <menuitem action='ViewMarkup' />"
558 " <menuitem action='ViewZoomIn' />"
559 " <menuitem action='ViewZoomOut' />"
560 " <menuitem action='ViewZoom1to1' />"
561 " <menuitem action='ViewZoomToFit' />"
563 " <menu action='ObjectsMenu'>"
564 " <menuitem action='ObjectsArrowMode' />"
565 " <menu action='ObjectsCreateMenu'>"
566 " <menuitem action='ObjectsCreateText' />"
567 " <menuitem action='ObjectsCreateBox' />"
568 " <menuitem action='ObjectsCreateLine' />"
569 " <menuitem action='ObjectsCreateEllipse' />"
570 " <menuitem action='ObjectsCreateImage' />"
571 " <menuitem action='ObjectsCreateBarcode' />"
574 " <menu action='ObjectsOrderMenu'>"
575 " <menuitem action='ObjectsRaise' />"
576 " <menuitem action='ObjectsLower' />"
578 " <menu action='ObjectsRotateFlipMenu'>"
579 " <menuitem action='ObjectsRotateLeft' />"
580 " <menuitem action='ObjectsRotateRight' />"
581 " <menuitem action='ObjectsFlipHorizontal' />"
582 " <menuitem action='ObjectsFlipVertical' />"
584 " <menu action='ObjectsAlignHorizMenu'>"
585 " <menuitem action='ObjectsAlignLeft' />"
586 " <menuitem action='ObjectsAlignHCenter' />"
587 " <menuitem action='ObjectsAlignRight' />"
588 " <menuitem action='ObjectsCenterHorizontal' />"
590 " <menu action='ObjectsAlignVertMenu'>"
591 " <menuitem action='ObjectsAlignTop' />"
592 " <menuitem action='ObjectsAlignVCenter' />"
593 " <menuitem action='ObjectsAlignBottom' />"
594 " <menuitem action='ObjectsCenterVertical' />"
597 " <menuitem action='ObjectsMergeProperties' />"
599 " <menu action='HelpMenu'>"
600 " <menuitem action='HelpContents' />"
601 " <menuitem action='HelpAbout' />"
605 " <toolbar name='MainToolBar'>"
606 " <toolitem action='FileNew' />"
607 " <toolitem action='FileOpen' />"
608 " <toolitem action='FileSave' />"
610 " <toolitem action='FilePrint' />"
612 " <toolitem action='EditCut' />"
613 " <toolitem action='EditCopy' />"
614 " <toolitem action='EditPaste' />"
617 " <toolbar name='DrawingToolBar'>"
618 " <toolitem action='ObjectsArrowMode' />"
620 " <toolitem action='ObjectsCreateText' />"
621 " <toolitem action='ObjectsCreateBox' />"
622 " <toolitem action='ObjectsCreateLine' />"
623 " <toolitem action='ObjectsCreateEllipse' />"
624 " <toolitem action='ObjectsCreateImage' />"
625 " <toolitem action='ObjectsCreateBarcode' />"
627 " <toolitem action='ViewZoomIn' />"
628 " <toolitem action='ViewZoomOut' />"
629 " <toolitem action='ViewZoom1to1' />"
630 " <toolitem action='ViewZoomToFit' />"
632 " <toolitem action='ObjectsMergeProperties' />"
635 " <popup action='ContextMenu'>"
636 " <menu action='ObjectsOrderMenu'>"
637 " <menuitem action='ObjectsRaise' />"
638 " <menuitem action='ObjectsLower' />"
640 " <menu action='ObjectsRotateFlipMenu'>"
641 " <menuitem action='ObjectsRotateLeft' />"
642 " <menuitem action='ObjectsRotateRight' />"
643 " <menuitem action='ObjectsFlipHorizontal' />"
644 " <menuitem action='ObjectsFlipVertical' />"
646 " <menu action='ObjectsAlignHorizMenu'>"
647 " <menuitem action='ObjectsAlignLeft' />"
648 " <menuitem action='ObjectsAlignHCenter' />"
649 " <menuitem action='ObjectsAlignRight' />"
650 " <menuitem action='ObjectsCenterHorizontal' />"
652 " <menu action='ObjectsAlignVertMenu'>"
653 " <menuitem action='ObjectsAlignTop' />"
654 " <menuitem action='ObjectsAlignVCenter' />"
655 " <menuitem action='ObjectsAlignBottom' />"
656 " <menuitem action='ObjectsCenterVertical' />"
659 " <menuitem action='EditCut' />"
660 " <menuitem action='EditCopy' />"
661 " <menuitem action='EditPaste' />"
662 " <menuitem action='EditDelete' />"
665 " <popup action='EmptySelectionContextMenu'>"
666 " <menuitem action='EditPaste' />"
672 static gchar* doc_verbs [] = {
673 "/ui/MenuBar/FileMenu/FileProperties",
674 "/ui/MenuBar/FileMenu/FileSave",
675 "/ui/MenuBar/FileMenu/FileSaveAs",
676 "/ui/MenuBar/FileMenu/FilePrint",
677 "/ui/MenuBar/FileMenu/FileClose",
678 "/ui/MenuBar/EditMenu/EditCut",
679 "/ui/MenuBar/EditMenu/EditCopy",
680 "/ui/MenuBar/EditMenu/EditPaste",
681 "/ui/MenuBar/EditMenu/EditDelete",
682 "/ui/MenuBar/EditMenu/EditSelectAll",
683 "/ui/MenuBar/EditMenu/EditUnSelectAll",
684 "/ui/MenuBar/ViewMenu/ViewZoomIn",
685 "/ui/MenuBar/ViewMenu/ViewZoomOut",
686 "/ui/MenuBar/ViewMenu/ViewZoom1to1",
687 "/ui/MenuBar/ViewMenu/ViewZoomToFit",
688 "/ui/MenuBar/ViewMenu/ViewGrid",
689 "/ui/MenuBar/ViewMenu/ViewMarkup",
690 "/ui/MenuBar/ObjectsMenu/ObjectsArrowMode",
691 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateText",
692 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateLine",
693 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateBox",
694 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateEllipse",
695 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateImage",
696 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateBarcode",
697 "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsRaise",
698 "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsLower",
699 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateLeft",
700 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateRight",
701 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipHorizontal",
702 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipVertical",
703 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignLeft",
704 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignRight",
705 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignHCenter",
706 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsCenterHorizontal",
707 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignTop",
708 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignBottom",
709 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignVCenter",
710 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsCenterVertical",
711 "/ui/MenuBar/ObjectsMenu/ObjectsMergeProperties",
716 static gchar* doc_modified_verbs [] = {
717 "/ui/MenuBar/FileMenu/Save",
722 static gchar* selection_verbs [] = {
723 "/ui/MenuBar/EditMenu/EditCut",
724 "/ui/MenuBar/EditMenu/EditCopy",
725 "/ui/MenuBar/EditMenu/EditDelete",
726 "/ui/MenuBar/EditMenu/EditUnSelectAll",
727 "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsRaise",
728 "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsLower",
729 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateLeft",
730 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateRight",
731 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipHorizontal",
732 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipVertical",
733 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsCenterHorizontal",
734 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsCenterVertical",
739 static gchar* atomic_selection_verbs [] = {
744 static gchar* multi_selection_verbs [] = {
745 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignLeft",
746 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignRight",
747 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignHCenter",
748 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignTop",
749 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignBottom",
750 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignVCenter",
756 /*****************************************************************************/
757 /** Initialize UI component for given window. */
758 /*****************************************************************************/
760 gl_ui_new (glWindow *window)
763 GtkActionGroup *actions;
764 GError *error = NULL;
765 EggRecentViewUIManager *recent_view;
767 gl_debug (DEBUG_UI, "START");
769 g_return_val_if_fail (window && GL_IS_WINDOW (window), NULL);
771 gl_debug (DEBUG_UI, "window = %p", window);
773 ui = gtk_ui_manager_new ();
775 g_signal_connect (ui, "connect_proxy",
776 G_CALLBACK (connect_proxy_cb), window);
777 g_signal_connect (ui, "disconnect_proxy",
778 G_CALLBACK (disconnect_proxy_cb), window);
780 actions = gtk_action_group_new ("Actions");
781 gtk_action_group_add_actions (actions, entries, n_entries, GTK_WINDOW (window));
782 gtk_action_group_add_toggle_actions (actions,
783 toggle_entries, n_toggle_entries,
785 gtk_action_group_add_toggle_actions (actions,
786 ui_toggle_entries, n_ui_toggle_entries,
789 gtk_ui_manager_insert_action_group (ui, actions, 0);
790 gtk_window_add_accel_group (GTK_WINDOW (window), gtk_ui_manager_get_accel_group (ui));
792 gl_debug (DEBUG_UI, "Creating ui from string");
793 if (!gtk_ui_manager_add_ui_from_string (ui, ui_info, strlen (ui_info), &error)) {
794 g_message ("building menus failed: %s", error->message);
795 g_error_free (error);
798 /* Set the toolbar styles according to prefs */
799 set_app_main_toolbar_style (ui);
800 set_app_drawing_toolbar_style (ui);
802 /* Set view grid and markup visibility according to prefs */
805 /* add an eggRecentView */
807 egg_recent_view_uimanager_new (ui,
808 "/ui/MenuBar/FileMenu/FileRecentsMenu/FileRecentsPlaceHolder",
809 G_CALLBACK (gl_ui_cmd_file_open_recent),
811 egg_recent_view_uimanager_show_icons (recent_view, FALSE);
812 egg_recent_view_uimanager_set_tooltip_func (recent_view, recent_tooltip_func, NULL);
813 egg_recent_view_set_model (EGG_RECENT_VIEW (recent_view), gl_recent_get_model ());
814 g_object_set_data (G_OBJECT (ui), "recent-view", recent_view);
816 gl_ui_util_set_verb_list_sensitive (ui, doc_verbs, FALSE);
818 gl_debug (DEBUG_UI, "END");
823 /*****************************************************************************/
824 /** Unref wrapper. */
825 /*****************************************************************************/
827 gl_ui_unref (GtkUIManager *ui)
829 GObject *recent_view;
831 gl_debug (DEBUG_UI, "START");
833 /* Pull out recent view to unreference. */
834 recent_view = g_object_get_data (G_OBJECT(ui), "recent-view");
836 g_object_unref (recent_view);
841 gl_debug (DEBUG_UI, "END");
844 /*****************************************************************************/
845 /** Update all verbs of given UI component. */
846 /*****************************************************************************/
848 gl_ui_update_all (GtkUIManager *ui,
853 gl_debug (DEBUG_UI, "START");
855 gl_ui_util_set_verb_list_sensitive (ui, doc_verbs, TRUE);
858 g_return_if_fail (label != NULL);
860 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditUndo",
861 gl_label_can_undo (label));
862 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditRedo",
863 gl_label_can_redo (label));
865 gl_ui_util_set_verb_list_sensitive (ui, doc_modified_verbs,
866 gl_label_is_modified (label));
868 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomIn",
869 !gl_view_is_zoom_max (view));
870 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomOut",
871 !gl_view_is_zoom_min (view));
873 gl_ui_util_set_verb_list_sensitive (ui, selection_verbs,
874 !gl_view_is_selection_empty (view));
876 gl_ui_util_set_verb_list_sensitive (ui, atomic_selection_verbs,
877 gl_view_is_selection_atomic (view));
879 gl_ui_util_set_verb_list_sensitive (ui, multi_selection_verbs,
880 !gl_view_is_selection_empty (view)
881 && !gl_view_is_selection_atomic (view));
883 gl_debug (DEBUG_UI, "END");
886 /*****************************************************************************/
887 /** Update all verbs of given UI component to "no document" state. */
888 /*****************************************************************************/
890 gl_ui_update_nodoc (GtkUIManager *ui)
892 gl_debug (DEBUG_UI, "START");
894 gl_ui_util_set_verb_list_sensitive (ui, doc_verbs, FALSE);
896 gl_debug (DEBUG_UI, "END");
899 /*****************************************************************************/
900 /** Update label modified verbs of given UI component. */
901 /*****************************************************************************/
903 gl_ui_update_modified_verbs (GtkUIManager *ui,
906 gl_debug (DEBUG_UI, "START");
908 gl_ui_util_set_verb_list_sensitive (ui,
910 gl_label_is_modified (label));
912 gl_debug (DEBUG_UI, "END");
915 /*****************************************************************************/
916 /** Update verbs associated with selection state of given UI component. */
917 /*****************************************************************************/
919 gl_ui_update_selection_verbs (GtkUIManager *ui,
922 gl_debug (DEBUG_UI, "START");
924 gl_ui_util_set_verb_list_sensitive (ui, selection_verbs,
925 !gl_view_is_selection_empty (view));
927 gl_ui_util_set_verb_list_sensitive (ui, atomic_selection_verbs,
928 gl_view_is_selection_atomic (view));
930 gl_ui_util_set_verb_list_sensitive (ui, multi_selection_verbs,
931 !gl_view_is_selection_empty (view)
932 && !gl_view_is_selection_atomic (view));
934 gl_debug (DEBUG_UI, "END");
937 /*****************************************************************************/
938 /** Update verbs associated with zoom level of given UI component. */
939 /*****************************************************************************/
941 gl_ui_update_zoom_verbs (GtkUIManager *ui,
944 gl_debug (DEBUG_UI, "START");
946 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomIn",
947 !gl_view_is_zoom_max (view));
948 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomOut",
949 !gl_view_is_zoom_min (view));
951 gl_debug (DEBUG_UI, "END");
954 /*****************************************************************************/
955 /** Update undo/redo verbs of given UI component. */
956 /*****************************************************************************/
958 gl_ui_update_undo_redo_verbs (GtkUIManager *ui,
961 gl_debug (DEBUG_UI, "START");
963 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditUndo",
964 gl_label_can_undo (label));
966 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditRedo",
967 gl_label_can_redo (label));
969 gl_debug (DEBUG_UI, "END");
972 /*---------------------------------------------------------------------------*/
973 /** PRIVATE. View menu item toggled callback. */
974 /*---------------------------------------------------------------------------*/
976 view_ui_item_toggled_cb (GtkToggleAction *action,
982 gl_debug (DEBUG_UI, "START");
984 g_return_if_fail (action && GTK_IS_TOGGLE_ACTION (action));
986 name = gtk_action_get_name (GTK_ACTION (action));
987 state = gtk_toggle_action_get_active (action);
989 gl_debug (DEBUG_UI, "Action = %s, State = %d", name, state);
991 if (strcmp (name, "ViewMainToolBar") == 0)
993 gl_prefs->main_toolbar_visible = state;
994 set_app_main_toolbar_style (ui);
995 gl_prefs_model_save_settings (gl_prefs);
998 if (strcmp (name, "ViewMainToolBarToolTips") == 0)
1000 gl_prefs->main_toolbar_view_tooltips = state;
1001 set_app_main_toolbar_style (ui);
1002 gl_prefs_model_save_settings (gl_prefs);
1005 if (strcmp (name, "ViewDrawingToolBar") == 0)
1007 gl_prefs->drawing_toolbar_visible = state;
1008 set_app_drawing_toolbar_style (ui);
1009 gl_prefs_model_save_settings (gl_prefs);
1012 if (strcmp (name, "ViewDrawingToolBarToolTips") == 0)
1014 gl_prefs->drawing_toolbar_view_tooltips = state;
1015 set_app_drawing_toolbar_style (ui);
1016 gl_prefs_model_save_settings (gl_prefs);
1019 gl_debug (DEBUG_UI, "");
1022 /*---------------------------------------------------------------------------*/
1023 /** PRIVATE. Set main toolbar style. */
1024 /*---------------------------------------------------------------------------*/
1026 set_app_main_toolbar_style (GtkUIManager *ui)
1030 gl_debug (DEBUG_UI, "START");
1032 g_return_if_fail (ui && GTK_IS_UI_MANAGER (ui));
1034 /* Updated view menu */
1035 gl_ui_util_set_verb_state (ui, "/ui/ViewMenu/ViewMainToolBar",
1036 gl_prefs->main_toolbar_visible);
1038 gl_ui_util_set_verb_sensitive (ui, "/ui/ViewMenu/ViewMainToolBarToolTips",
1039 gl_prefs->main_toolbar_visible);
1041 gl_ui_util_set_verb_state (ui, "/ui/ViewMenu/ViewMainToolBarToolTips",
1042 gl_prefs->main_toolbar_view_tooltips);
1045 toolbar = gtk_ui_manager_get_widget (ui, "/MainToolBar");
1047 gtk_toolbar_set_tooltips (GTK_TOOLBAR (toolbar),
1048 gl_prefs->main_toolbar_view_tooltips);
1050 if (gl_prefs->main_toolbar_visible) {
1051 gtk_widget_show_all (toolbar);
1053 gtk_widget_hide (toolbar);
1056 gl_debug (DEBUG_UI, "END");
1060 /*---------------------------------------------------------------------------*/
1061 /** PRIVATE. Set drawing toolbar style. */
1062 /*---------------------------------------------------------------------------*/
1064 set_app_drawing_toolbar_style (GtkUIManager *ui)
1068 gl_debug (DEBUG_UI, "START");
1070 g_return_if_fail (ui && GTK_IS_UI_MANAGER (ui));
1072 /* Updated view menu */
1073 gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenu/ViewDrawingToolBar",
1074 gl_prefs->drawing_toolbar_visible);
1076 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewDrawingToolBarToolTips",
1077 gl_prefs->drawing_toolbar_visible);
1079 gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenuDrawingToolBarToolTips",
1080 gl_prefs->drawing_toolbar_view_tooltips);
1083 toolbar = gtk_ui_manager_get_widget (ui, "/DrawingToolBar");
1085 gtk_toolbar_set_tooltips (GTK_TOOLBAR (toolbar),
1086 gl_prefs->drawing_toolbar_view_tooltips);
1088 gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
1090 if (gl_prefs->drawing_toolbar_visible) {
1091 gtk_widget_show_all (toolbar);
1093 gtk_widget_hide (toolbar);
1096 gl_debug (DEBUG_UI, "END");
1099 /*---------------------------------------------------------------------------*/
1100 /** PRIVATE. Set visibility of grid and markup. */
1101 /*---------------------------------------------------------------------------*/
1103 set_view_style (GtkUIManager *ui)
1105 gl_debug (DEBUG_UI, "START");
1107 g_return_if_fail (ui && GTK_IS_UI_MANAGER(ui));
1109 gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenu/ViewGrid",
1110 gl_prefs->grid_visible);
1112 gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenu/ViewMarkup",
1113 gl_prefs->markup_visible);
1115 gl_debug (DEBUG_UI, "END");
1118 /*---------------------------------------------------------------------------*/
1119 /** PRIVATE. Connect proxy callback. */
1120 /*---------------------------------------------------------------------------*/
1122 connect_proxy_cb (GtkUIManager *ui,
1127 if (GTK_IS_MENU_ITEM (proxy))
1129 g_signal_connect (proxy, "select",
1130 G_CALLBACK (menu_item_select_cb), window);
1131 g_signal_connect (proxy, "deselect",
1132 G_CALLBACK (menu_item_deselect_cb), window);
1136 /*---------------------------------------------------------------------------*/
1137 /** PRIVATE. Disconnect proxy callback. */
1138 /*---------------------------------------------------------------------------*/
1140 disconnect_proxy_cb (GtkUIManager *ui,
1145 if (GTK_IS_MENU_ITEM (proxy))
1147 g_signal_handlers_disconnect_by_func
1148 (proxy, G_CALLBACK (menu_item_select_cb), window);
1149 g_signal_handlers_disconnect_by_func
1150 (proxy, G_CALLBACK (menu_item_deselect_cb), window);
1154 /*---------------------------------------------------------------------------*/
1155 /** PRIVATE. Menu item select callback. */
1156 /*---------------------------------------------------------------------------*/
1158 menu_item_select_cb (GtkMenuItem *proxy,
1164 g_return_if_fail (window && GL_IS_WINDOW (window));
1165 g_return_if_fail (window->status_bar && GTK_IS_STATUSBAR (window->status_bar));
1167 action = g_object_get_data (G_OBJECT (proxy), "gtk-action");
1168 g_return_if_fail (action != NULL);
1170 g_object_get (G_OBJECT (action), "tooltip", &message, NULL);
1173 gtk_statusbar_push (GTK_STATUSBAR (window->status_bar),
1174 window->menu_tips_context_id, message);
1179 /*---------------------------------------------------------------------------*/
1180 /** PRIVATE. Menu item deselect callback. */
1181 /*---------------------------------------------------------------------------*/
1183 menu_item_deselect_cb (GtkMenuItem *proxy,
1186 g_return_if_fail (window && GL_IS_WINDOW (window));
1187 g_return_if_fail (window->status_bar && GTK_IS_STATUSBAR (window->status_bar));
1189 gtk_statusbar_pop (GTK_STATUSBAR (window->status_bar),
1190 window->menu_tips_context_id);
1193 /*---------------------------------------------------------------------------*/
1194 /** PRIVATE. Tooltip function for recent file menu items. */
1195 /*---------------------------------------------------------------------------*/
1197 recent_tooltip_func (EggRecentItem *item, gpointer user_data)
1200 char *uri_for_display;
1202 uri_for_display = egg_recent_item_get_uri_for_display (item);
1203 g_return_val_if_fail (uri_for_display != NULL, NULL);
1205 tip = g_strdup_printf (_("Open '%s'"), uri_for_display);
1207 g_free (uri_for_display);