3 * Copyright (C) 2001-2009 Jim Evins <evins@snaught.com>.
5 * This file is part of gLabels.
7 * gLabels is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
12 * gLabels is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with gLabels. If not, see <http://www.gnu.org/licenses/>.
25 #include <glib/gi18n.h>
26 #include <gconf/gconf-client.h>
31 #include "ui-commands.h"
41 /*==========================================================================*/
42 /* Private macros and constants. */
43 /*==========================================================================*/
46 /*==========================================================================*/
48 /*==========================================================================*/
51 /*==========================================================================*/
52 /* Local function prototypes */
53 /*==========================================================================*/
55 static void view_ui_item_toggled_cb (GtkToggleAction *action,
58 static void set_app_main_toolbar_style (GtkUIManager *ui);
60 static void set_app_drawing_toolbar_style (GtkUIManager *ui);
62 static void set_view_style (GtkUIManager *ui);
64 static void connect_proxy_cb (GtkUIManager *ui,
69 static void disconnect_proxy_cb (GtkUIManager *ui,
74 static void menu_item_select_cb (GtkMenuItem *proxy,
77 static void menu_item_deselect_cb (GtkMenuItem *proxy,
81 /*==========================================================================*/
83 /*==========================================================================*/
85 static GtkActionEntry entries[] = {
88 { "FileMenu", NULL, N_("_File") },
89 { "FileRecentsMenu", NULL, N_("Open Recent _Files") },
90 { "EditMenu", NULL, N_("_Edit") },
91 { "ViewMenu", NULL, N_("_View") },
92 { "ViewMainToolBarMenu", NULL, N_("Customize Main Toolbar") },
93 { "ViewDrawingToolBarMenu", NULL, N_("Customize Drawing Toolbar") },
94 { "ViewPropertyToolBarMenu", NULL, N_("Customize Properties Toolbar") },
95 { "ObjectsMenu", NULL, N_("_Objects") },
96 { "ObjectsCreateMenu", NULL, N_("_Create") },
97 { "ObjectsOrderMenu", NULL, N_("_Order") },
98 { "ObjectsRotateFlipMenu", NULL, N_("_Rotate/Flip") },
99 { "ObjectsAlignHorizMenu", NULL, N_("Align _Horizontal") },
100 { "ObjectsAlignVertMenu", NULL, N_("Align _Vertical") },
101 { "HelpMenu", NULL, N_("_Help") },
104 { "ContextMenu", NULL, N_("Context Menu") },
105 { "EmptySelectionContextMenu", NULL, N_("Context Menu") },
107 /* File action entries. */
112 N_("Create a new file"),
113 G_CALLBACK (gl_ui_cmd_file_new) },
120 G_CALLBACK (gl_ui_cmd_file_open) },
126 N_("Save current file"),
127 G_CALLBACK (gl_ui_cmd_file_save) },
133 N_("Save the current file to a different name"),
134 G_CALLBACK (gl_ui_cmd_file_save_as) },
140 N_("Print the current file"),
141 G_CALLBACK (gl_ui_cmd_file_print) },
144 GTK_STOCK_PROPERTIES,
147 N_("Modify document properties"),
148 G_CALLBACK (gl_ui_cmd_file_properties) },
150 { "FileTemplateDesigner",
152 N_("Template _Designer..."),
154 N_("Create a custom template"),
155 G_CALLBACK (gl_ui_cmd_file_template_designer) },
161 N_("Close the current file"),
162 G_CALLBACK (gl_ui_cmd_file_close) },
168 N_("Quit the program"),
169 G_CALLBACK (gl_ui_cmd_file_quit) },
172 /* Edit action entries. */
177 N_("Cut the selection"),
178 G_CALLBACK (gl_ui_cmd_edit_cut) },
184 N_("Copy the selection"),
185 G_CALLBACK (gl_ui_cmd_edit_copy) },
191 N_("Paste the clipboard"),
192 G_CALLBACK (gl_ui_cmd_edit_paste) },
198 N_("Delete the selected objects"),
199 G_CALLBACK (gl_ui_cmd_edit_delete) },
205 N_("Select all objects"),
206 G_CALLBACK (gl_ui_cmd_edit_select_all) },
212 N_("Remove all selections"),
213 G_CALLBACK (gl_ui_cmd_edit_unselect_all) },
216 GTK_STOCK_PREFERENCES,
219 N_("Configure the application"),
220 G_CALLBACK (gl_ui_cmd_edit_preferences) },
223 /* View action entries. */
228 N_("Increase magnification"),
229 G_CALLBACK (gl_ui_cmd_view_zoomin) },
235 N_("Decrease magnification"),
236 G_CALLBACK (gl_ui_cmd_view_zoomout) },
242 N_("Restore scale to 100%"),
243 G_CALLBACK (gl_ui_cmd_view_zoom1to1) },
249 N_("Set scale to fit window"),
250 G_CALLBACK (gl_ui_cmd_view_zoom_to_fit) },
253 /* Objects action entries. */
254 { "ObjectsArrowMode",
258 N_("Select, move and modify objects"),
259 G_CALLBACK (gl_ui_cmd_objects_arrow_mode) },
261 { "ObjectsCreateText",
265 N_("Create text object"),
266 G_CALLBACK (gl_ui_cmd_objects_create_text) },
268 { "ObjectsCreateBox",
272 N_("Create box/rectangle object"),
273 G_CALLBACK (gl_ui_cmd_objects_create_box) },
275 { "ObjectsCreateLine",
279 N_("Create line object"),
280 G_CALLBACK (gl_ui_cmd_objects_create_line) },
282 { "ObjectsCreateEllipse",
286 N_("Create ellipse/circle object"),
287 G_CALLBACK (gl_ui_cmd_objects_create_ellipse) },
289 { "ObjectsCreateImage",
293 N_("Create image object"),
294 G_CALLBACK (gl_ui_cmd_objects_create_image) },
296 { "ObjectsCreateBarcode",
300 N_("Create barcode object"),
301 G_CALLBACK (gl_ui_cmd_objects_create_barcode) },
305 N_("Bring to front"),
307 N_("Raise object to top"),
308 G_CALLBACK (gl_ui_cmd_objects_raise) },
311 GL_STOCK_ORDER_BOTTOM,
314 N_("Lower object to bottom"),
315 G_CALLBACK (gl_ui_cmd_objects_lower) },
317 { "ObjectsRotateLeft",
318 GL_STOCK_ROTATE_LEFT,
321 N_("Rotate object 90 degrees counter-clockwise"),
322 G_CALLBACK (gl_ui_cmd_objects_rotate_left) },
324 { "ObjectsRotateRight",
325 GL_STOCK_ROTATE_RIGHT,
328 N_("Rotate object 90 degrees clockwise"),
329 G_CALLBACK (gl_ui_cmd_objects_rotate_right) },
331 { "ObjectsFlipHorizontal",
333 N_("Flip horizontally"),
335 N_("Flip object horizontally"),
336 G_CALLBACK (gl_ui_cmd_objects_flip_horiz) },
338 { "ObjectsFlipVertical",
340 N_("Flip vertically"),
342 N_("Flip object vertically"),
343 G_CALLBACK (gl_ui_cmd_objects_flip_vert) },
345 { "ObjectsAlignLeft",
349 N_("Align objects to left edges"),
350 G_CALLBACK (gl_ui_cmd_objects_align_left) },
352 { "ObjectsAlignRight",
353 GL_STOCK_ALIGN_RIGHT,
356 N_("Align objects to right edges"),
357 G_CALLBACK (gl_ui_cmd_objects_align_right) },
359 { "ObjectsAlignHCenter",
360 GL_STOCK_ALIGN_HCENTER,
361 N_("Align horizontal center"),
363 N_("Align objects to horizontal centers"),
364 G_CALLBACK (gl_ui_cmd_objects_align_hcenter) },
370 N_("Align objects to top edges"),
371 G_CALLBACK (gl_ui_cmd_objects_align_top) },
373 { "ObjectsAlignBottom",
374 GL_STOCK_ALIGN_BOTTOM,
377 N_("Align objects to bottom edges"),
378 G_CALLBACK (gl_ui_cmd_objects_align_bottom) },
380 { "ObjectsAlignVCenter",
381 GL_STOCK_ALIGN_VCENTER,
382 N_("Align vertical center"),
384 N_("Align objects to vertical centers"),
385 G_CALLBACK (gl_ui_cmd_objects_align_vcenter) },
387 { "ObjectsCenterHorizontal",
388 GL_STOCK_CENTER_HORIZ,
389 N_("Center horizontally"),
391 N_("Center objects to horizontal label center"),
392 G_CALLBACK (gl_ui_cmd_objects_center_horiz) },
394 { "ObjectsCenterVertical",
395 GL_STOCK_CENTER_VERT,
396 N_("Center vertically"),
398 N_("Center objects to vertical label center"),
399 G_CALLBACK (gl_ui_cmd_objects_center_vert) },
401 { "ObjectsMergeProperties",
403 N_("Merge properties"),
405 N_("Edit merge properties"),
406 G_CALLBACK (gl_ui_cmd_objects_merge_properties) },
409 /* Help actions entries. */
414 N_("Open glabels manual"),
415 G_CALLBACK (gl_ui_cmd_help_contents) },
422 G_CALLBACK (gl_ui_cmd_help_about) },
425 static guint n_entries = G_N_ELEMENTS (entries);
427 static GtkToggleActionEntry toggle_entries[] = {
429 { "ViewPropertyToolBar",
431 N_("Property toolbar"),
433 N_("Change the visibility of the property toolbar in the current window"),
434 G_CALLBACK (gl_ui_cmd_view_property_bar_toggle),
441 N_("Change the visibility of the grid in the current window"),
442 G_CALLBACK (gl_ui_cmd_view_grid_toggle),
449 N_("Change the visibility of markup lines in the current window"),
450 G_CALLBACK (gl_ui_cmd_view_markup_toggle),
454 static guint n_toggle_entries = G_N_ELEMENTS (toggle_entries);
456 static GtkToggleActionEntry ui_toggle_entries[] = {
462 N_("Change the visibility of the main toolbar in the current window"),
463 G_CALLBACK (view_ui_item_toggled_cb),
466 { "ViewDrawingToolBar",
468 N_("Drawing toolbar"),
470 N_("Change the visibility of the drawing toolbar in the current window"),
471 G_CALLBACK (view_ui_item_toggled_cb),
475 static guint n_ui_toggle_entries = G_N_ELEMENTS (ui_toggle_entries);
477 static const gchar *ui_info =
480 " <menubar name='MenuBar'>"
481 " <menu action='FileMenu'>"
482 " <menuitem action='FileNew' />"
483 " <menuitem action='FileOpen' />"
484 " <menuitem action='FileRecentsMenu' />"
486 " <menuitem action='FileSave' />"
487 " <menuitem action='FileSaveAs' />"
489 " <menuitem action='FilePrint' />"
491 " <menuitem action='FileProperties' />"
492 " <menuitem action='FileTemplateDesigner' />"
494 " <menuitem action='FileClose' />"
495 " <menuitem action='FileQuit' />"
497 " <menu action='EditMenu'>"
498 " <menuitem action='EditCut' />"
499 " <menuitem action='EditCopy' />"
500 " <menuitem action='EditPaste' />"
501 " <menuitem action='EditDelete' />"
503 " <menuitem action='EditSelectAll' />"
504 " <menuitem action='EditUnSelectAll' />"
506 " <menuitem action='EditPreferences' />"
508 " <menu action='ViewMenu'>"
509 " <menuitem action='ViewMainToolBar' />"
510 " <menuitem action='ViewDrawingToolBar' />"
511 " <menuitem action='ViewPropertyToolBar' />"
513 " <menuitem action='ViewGrid' />"
514 " <menuitem action='ViewMarkup' />"
516 " <menuitem action='ViewZoomIn' />"
517 " <menuitem action='ViewZoomOut' />"
518 " <menuitem action='ViewZoom1to1' />"
519 " <menuitem action='ViewZoomToFit' />"
521 " <menu action='ObjectsMenu'>"
522 " <menuitem action='ObjectsArrowMode' />"
523 " <menu action='ObjectsCreateMenu'>"
524 " <menuitem action='ObjectsCreateText' />"
525 " <menuitem action='ObjectsCreateBox' />"
526 " <menuitem action='ObjectsCreateLine' />"
527 " <menuitem action='ObjectsCreateEllipse' />"
528 " <menuitem action='ObjectsCreateImage' />"
529 " <menuitem action='ObjectsCreateBarcode' />"
532 " <menu action='ObjectsOrderMenu'>"
533 " <menuitem action='ObjectsRaise' />"
534 " <menuitem action='ObjectsLower' />"
536 " <menu action='ObjectsRotateFlipMenu'>"
537 " <menuitem action='ObjectsRotateLeft' />"
538 " <menuitem action='ObjectsRotateRight' />"
539 " <menuitem action='ObjectsFlipHorizontal' />"
540 " <menuitem action='ObjectsFlipVertical' />"
542 " <menu action='ObjectsAlignHorizMenu'>"
543 " <menuitem action='ObjectsAlignLeft' />"
544 " <menuitem action='ObjectsAlignHCenter' />"
545 " <menuitem action='ObjectsAlignRight' />"
546 " <menuitem action='ObjectsCenterHorizontal' />"
548 " <menu action='ObjectsAlignVertMenu'>"
549 " <menuitem action='ObjectsAlignTop' />"
550 " <menuitem action='ObjectsAlignVCenter' />"
551 " <menuitem action='ObjectsAlignBottom' />"
552 " <menuitem action='ObjectsCenterVertical' />"
555 " <menuitem action='ObjectsMergeProperties' />"
557 " <menu action='HelpMenu'>"
558 " <menuitem action='HelpContents' />"
559 " <menuitem action='HelpAbout' />"
563 " <toolbar name='MainToolBar'>"
564 " <toolitem action='FileNew' />"
565 " <toolitem action='FileOpen' />"
566 " <toolitem action='FileSave' />"
568 " <toolitem action='FilePrint' />"
570 " <toolitem action='EditCut' />"
571 " <toolitem action='EditCopy' />"
572 " <toolitem action='EditPaste' />"
575 " <toolbar name='DrawingToolBar'>"
576 " <toolitem action='ObjectsArrowMode' />"
578 " <toolitem action='ObjectsCreateText' />"
579 " <toolitem action='ObjectsCreateBox' />"
580 " <toolitem action='ObjectsCreateLine' />"
581 " <toolitem action='ObjectsCreateEllipse' />"
582 " <toolitem action='ObjectsCreateImage' />"
583 " <toolitem action='ObjectsCreateBarcode' />"
585 " <toolitem action='ViewZoomIn' />"
586 " <toolitem action='ViewZoomOut' />"
587 " <toolitem action='ViewZoom1to1' />"
588 " <toolitem action='ViewZoomToFit' />"
590 " <toolitem action='ObjectsMergeProperties' />"
593 " <popup action='ContextMenu'>"
594 " <menu action='ObjectsOrderMenu'>"
595 " <menuitem action='ObjectsRaise' />"
596 " <menuitem action='ObjectsLower' />"
598 " <menu action='ObjectsRotateFlipMenu'>"
599 " <menuitem action='ObjectsRotateLeft' />"
600 " <menuitem action='ObjectsRotateRight' />"
601 " <menuitem action='ObjectsFlipHorizontal' />"
602 " <menuitem action='ObjectsFlipVertical' />"
604 " <menu action='ObjectsAlignHorizMenu'>"
605 " <menuitem action='ObjectsAlignLeft' />"
606 " <menuitem action='ObjectsAlignHCenter' />"
607 " <menuitem action='ObjectsAlignRight' />"
608 " <menuitem action='ObjectsCenterHorizontal' />"
610 " <menu action='ObjectsAlignVertMenu'>"
611 " <menuitem action='ObjectsAlignTop' />"
612 " <menuitem action='ObjectsAlignVCenter' />"
613 " <menuitem action='ObjectsAlignBottom' />"
614 " <menuitem action='ObjectsCenterVertical' />"
617 " <menuitem action='EditCut' />"
618 " <menuitem action='EditCopy' />"
619 " <menuitem action='EditPaste' />"
620 " <menuitem action='EditDelete' />"
623 " <popup action='EmptySelectionContextMenu'>"
624 " <menuitem action='EditPaste' />"
630 static gchar* doc_verbs [] = {
631 "/ui/MenuBar/FileMenu/FileProperties",
632 "/ui/MenuBar/FileMenu/FileSave",
633 "/ui/MenuBar/FileMenu/FileSaveAs",
634 "/ui/MenuBar/FileMenu/FilePrint",
635 "/ui/MenuBar/FileMenu/FileClose",
636 "/ui/MenuBar/EditMenu/EditCut",
637 "/ui/MenuBar/EditMenu/EditCopy",
638 "/ui/MenuBar/EditMenu/EditPaste",
639 "/ui/MenuBar/EditMenu/EditDelete",
640 "/ui/MenuBar/EditMenu/EditSelectAll",
641 "/ui/MenuBar/EditMenu/EditUnSelectAll",
642 "/ui/MenuBar/ViewMenu/ViewZoomIn",
643 "/ui/MenuBar/ViewMenu/ViewZoomOut",
644 "/ui/MenuBar/ViewMenu/ViewZoom1to1",
645 "/ui/MenuBar/ViewMenu/ViewZoomToFit",
646 "/ui/MenuBar/ViewMenu/ViewGrid",
647 "/ui/MenuBar/ViewMenu/ViewMarkup",
648 "/ui/MenuBar/ObjectsMenu/ObjectsArrowMode",
649 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateText",
650 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateLine",
651 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateBox",
652 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateEllipse",
653 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateImage",
654 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateBarcode",
655 "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsRaise",
656 "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsLower",
657 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateLeft",
658 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateRight",
659 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipHorizontal",
660 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipVertical",
661 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignLeft",
662 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignRight",
663 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignHCenter",
664 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsCenterHorizontal",
665 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignTop",
666 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignBottom",
667 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignVCenter",
668 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsCenterVertical",
669 "/ui/MenuBar/ObjectsMenu/ObjectsMergeProperties",
674 static gchar* doc_modified_verbs [] = {
675 "/ui/MenuBar/FileMenu/FileSave",
680 static gchar* selection_verbs [] = {
681 "/ui/MenuBar/EditMenu/EditCut",
682 "/ui/MenuBar/EditMenu/EditCopy",
683 "/ui/MenuBar/EditMenu/EditDelete",
684 "/ui/MenuBar/EditMenu/EditUnSelectAll",
685 "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsRaise",
686 "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsLower",
687 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateLeft",
688 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateRight",
689 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipHorizontal",
690 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipVertical",
691 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsCenterHorizontal",
692 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsCenterVertical",
697 static gchar* atomic_selection_verbs [] = {
702 static gchar* multi_selection_verbs [] = {
703 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignLeft",
704 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignRight",
705 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignHCenter",
706 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignTop",
707 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignBottom",
708 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignVCenter",
714 /*****************************************************************************/
715 /** Initialize UI component for given window. */
716 /*****************************************************************************/
718 gl_ui_new (glWindow *window)
721 GtkActionGroup *actions;
722 GError *error = NULL;
723 GtkWidget *recent_menu;
725 gl_debug (DEBUG_UI, "START");
727 g_return_val_if_fail (window && GL_IS_WINDOW (window), NULL);
729 gl_debug (DEBUG_UI, "window = %p", window);
731 ui = gtk_ui_manager_new ();
733 g_signal_connect (ui, "connect_proxy",
734 G_CALLBACK (connect_proxy_cb), window);
735 g_signal_connect (ui, "disconnect_proxy",
736 G_CALLBACK (disconnect_proxy_cb), window);
738 actions = gtk_action_group_new ("Actions");
739 gtk_action_group_set_translation_domain (actions, NULL);
740 gtk_action_group_add_actions (actions, entries, n_entries, GTK_WINDOW (window));
741 gtk_action_group_add_toggle_actions (actions,
742 toggle_entries, n_toggle_entries,
744 gtk_action_group_add_toggle_actions (actions,
745 ui_toggle_entries, n_ui_toggle_entries,
748 gtk_ui_manager_insert_action_group (ui, actions, 0);
749 gtk_window_add_accel_group (GTK_WINDOW (window), gtk_ui_manager_get_accel_group (ui));
751 gl_debug (DEBUG_UI, "Creating ui from string");
752 if (!gtk_ui_manager_add_ui_from_string (ui, ui_info, strlen (ui_info), &error)) {
753 g_message ("building menus failed: %s", error->message);
754 g_error_free (error);
757 /* Set the toolbar styles according to prefs */
758 set_app_main_toolbar_style (ui);
759 set_app_drawing_toolbar_style (ui);
761 /* Set view grid and markup visibility according to prefs */
764 /* add an Open Recents Submenu */
765 recent_menu = gl_recent_create_menu ();
766 g_signal_connect (G_OBJECT (recent_menu), "item-activated",
767 G_CALLBACK (gl_ui_cmd_file_open_recent), window);
768 gtk_menu_item_set_submenu (GTK_MENU_ITEM (gtk_ui_manager_get_widget (ui, "/MenuBar/FileMenu/FileRecentsMenu")),
772 gl_ui_util_set_verb_list_sensitive (ui, doc_verbs, FALSE);
774 gl_debug (DEBUG_UI, "END");
780 /*****************************************************************************/
781 /** Unref wrapper. */
782 /*****************************************************************************/
784 gl_ui_unref (GtkUIManager *ui)
786 gl_debug (DEBUG_UI, "START");
790 gl_debug (DEBUG_UI, "END");
794 /*****************************************************************************/
795 /** Update all verbs of given UI component. */
796 /*****************************************************************************/
798 gl_ui_update_all (GtkUIManager *ui,
803 gl_debug (DEBUG_UI, "START");
805 gl_ui_util_set_verb_list_sensitive (ui, doc_verbs, TRUE);
808 g_return_if_fail (label != NULL);
810 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditUndo",
811 gl_label_can_undo (label));
812 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditRedo",
813 gl_label_can_redo (label));
815 gl_ui_util_set_verb_list_sensitive (ui, doc_modified_verbs,
816 gl_label_is_modified (label));
818 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomIn",
819 !gl_view_is_zoom_max (view));
820 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomOut",
821 !gl_view_is_zoom_min (view));
823 gl_ui_util_set_verb_list_sensitive (ui, selection_verbs,
824 !gl_view_is_selection_empty (view));
826 gl_ui_util_set_verb_list_sensitive (ui, atomic_selection_verbs,
827 gl_view_is_selection_atomic (view));
829 gl_ui_util_set_verb_list_sensitive (ui, multi_selection_verbs,
830 !gl_view_is_selection_empty (view)
831 && !gl_view_is_selection_atomic (view));
833 gl_debug (DEBUG_UI, "END");
837 /*****************************************************************************/
838 /** Update all verbs of given UI component to "no document" state. */
839 /*****************************************************************************/
841 gl_ui_update_nodoc (GtkUIManager *ui)
843 gl_debug (DEBUG_UI, "START");
845 gl_ui_util_set_verb_list_sensitive (ui, doc_verbs, FALSE);
847 gl_debug (DEBUG_UI, "END");
851 /*****************************************************************************/
852 /** Update label modified verbs of given UI component. */
853 /*****************************************************************************/
855 gl_ui_update_modified_verbs (GtkUIManager *ui,
858 gl_debug (DEBUG_UI, "START");
860 gl_ui_util_set_verb_list_sensitive (ui,
862 gl_label_is_modified (label));
864 gl_debug (DEBUG_UI, "END");
868 /*****************************************************************************/
869 /** Update verbs associated with selection state of given UI component. */
870 /*****************************************************************************/
872 gl_ui_update_selection_verbs (GtkUIManager *ui,
875 gl_debug (DEBUG_UI, "START");
877 gl_ui_util_set_verb_list_sensitive (ui, selection_verbs,
878 !gl_view_is_selection_empty (view));
880 gl_ui_util_set_verb_list_sensitive (ui, atomic_selection_verbs,
881 gl_view_is_selection_atomic (view));
883 gl_ui_util_set_verb_list_sensitive (ui, multi_selection_verbs,
884 !gl_view_is_selection_empty (view)
885 && !gl_view_is_selection_atomic (view));
887 gl_debug (DEBUG_UI, "END");
891 /*****************************************************************************/
892 /** Update verbs associated with zoom level of given UI component. */
893 /*****************************************************************************/
895 gl_ui_update_zoom_verbs (GtkUIManager *ui,
898 gl_debug (DEBUG_UI, "START");
900 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomIn",
901 !gl_view_is_zoom_max (view));
902 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomOut",
903 !gl_view_is_zoom_min (view));
905 gl_debug (DEBUG_UI, "END");
909 /*****************************************************************************/
910 /** Update undo/redo verbs of given UI component. */
911 /*****************************************************************************/
913 gl_ui_update_undo_redo_verbs (GtkUIManager *ui,
916 gl_debug (DEBUG_UI, "START");
918 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditUndo",
919 gl_label_can_undo (label));
921 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditRedo",
922 gl_label_can_redo (label));
924 gl_debug (DEBUG_UI, "END");
928 /*---------------------------------------------------------------------------*/
929 /** PRIVATE. View menu item toggled callback. */
930 /*---------------------------------------------------------------------------*/
932 view_ui_item_toggled_cb (GtkToggleAction *action,
938 gl_debug (DEBUG_UI, "START");
940 g_return_if_fail (action && GTK_IS_TOGGLE_ACTION (action));
942 name = gtk_action_get_name (GTK_ACTION (action));
943 state = gtk_toggle_action_get_active (action);
945 gl_debug (DEBUG_UI, "Action = %s, State = %d", name, state);
947 if (strcmp (name, "ViewMainToolBar") == 0)
949 gl_prefs->main_toolbar_visible = state;
950 set_app_main_toolbar_style (ui);
951 gl_prefs_model_save_settings (gl_prefs);
954 if (strcmp (name, "ViewDrawingToolBar") == 0)
956 gl_prefs->drawing_toolbar_visible = state;
957 set_app_drawing_toolbar_style (ui);
958 gl_prefs_model_save_settings (gl_prefs);
961 gl_debug (DEBUG_UI, "");
965 /*---------------------------------------------------------------------------*/
966 /** PRIVATE. Set main toolbar style. */
967 /*---------------------------------------------------------------------------*/
969 set_app_main_toolbar_style (GtkUIManager *ui)
973 gl_debug (DEBUG_UI, "START");
975 g_return_if_fail (ui && GTK_IS_UI_MANAGER (ui));
977 /* Updated view menu */
978 gl_ui_util_set_verb_state (ui, "/ui/ViewMenu/ViewMainToolBar",
979 gl_prefs->main_toolbar_visible);
981 toolbar = gtk_ui_manager_get_widget (ui, "/MainToolBar");
983 if (gl_prefs->main_toolbar_visible) {
984 gtk_widget_show_all (toolbar);
986 gtk_widget_hide (toolbar);
989 gl_debug (DEBUG_UI, "END");
993 /*---------------------------------------------------------------------------*/
994 /** PRIVATE. Set drawing toolbar style. */
995 /*---------------------------------------------------------------------------*/
997 set_app_drawing_toolbar_style (GtkUIManager *ui)
1001 gl_debug (DEBUG_UI, "START");
1003 g_return_if_fail (ui && GTK_IS_UI_MANAGER (ui));
1005 /* Updated view menu */
1006 gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenu/ViewDrawingToolBar",
1007 gl_prefs->drawing_toolbar_visible);
1009 toolbar = gtk_ui_manager_get_widget (ui, "/DrawingToolBar");
1011 gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
1013 if (gl_prefs->drawing_toolbar_visible) {
1014 gtk_widget_show_all (toolbar);
1016 gtk_widget_hide (toolbar);
1019 gl_debug (DEBUG_UI, "END");
1023 /*---------------------------------------------------------------------------*/
1024 /** PRIVATE. Set visibility of grid and markup. */
1025 /*---------------------------------------------------------------------------*/
1027 set_view_style (GtkUIManager *ui)
1029 gl_debug (DEBUG_UI, "START");
1031 g_return_if_fail (ui && GTK_IS_UI_MANAGER(ui));
1033 gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenu/ViewGrid",
1034 gl_prefs->grid_visible);
1036 gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenu/ViewMarkup",
1037 gl_prefs->markup_visible);
1039 gl_debug (DEBUG_UI, "END");
1043 /*---------------------------------------------------------------------------*/
1044 /** PRIVATE. Connect proxy callback. */
1045 /*---------------------------------------------------------------------------*/
1047 connect_proxy_cb (GtkUIManager *ui,
1052 if (GTK_IS_MENU_ITEM (proxy))
1054 g_signal_connect (proxy, "select",
1055 G_CALLBACK (menu_item_select_cb), window);
1056 g_signal_connect (proxy, "deselect",
1057 G_CALLBACK (menu_item_deselect_cb), window);
1062 /*---------------------------------------------------------------------------*/
1063 /** PRIVATE. Disconnect proxy callback. */
1064 /*---------------------------------------------------------------------------*/
1066 disconnect_proxy_cb (GtkUIManager *ui,
1071 if (GTK_IS_MENU_ITEM (proxy))
1073 g_signal_handlers_disconnect_by_func
1074 (proxy, G_CALLBACK (menu_item_select_cb), window);
1075 g_signal_handlers_disconnect_by_func
1076 (proxy, G_CALLBACK (menu_item_deselect_cb), window);
1081 /*---------------------------------------------------------------------------*/
1082 /** PRIVATE. Menu item select callback. */
1083 /*---------------------------------------------------------------------------*/
1085 menu_item_select_cb (GtkMenuItem *proxy,
1091 g_return_if_fail (window && GL_IS_WINDOW (window));
1092 g_return_if_fail (window->status_bar && GTK_IS_STATUSBAR (window->status_bar));
1094 action = g_object_get_data (G_OBJECT (proxy), "gtk-action");
1095 g_return_if_fail (action != NULL);
1097 g_object_get (G_OBJECT (action), "tooltip", &message, NULL);
1100 gtk_statusbar_push (GTK_STATUSBAR (window->status_bar),
1101 window->menu_tips_context_id, message);
1107 /*---------------------------------------------------------------------------*/
1108 /** PRIVATE. Menu item deselect callback. */
1109 /*---------------------------------------------------------------------------*/
1111 menu_item_deselect_cb (GtkMenuItem *proxy,
1114 g_return_if_fail (window && GL_IS_WINDOW (window));
1115 g_return_if_fail (window->status_bar && GTK_IS_STATUSBAR (window->status_bar));
1117 gtk_statusbar_pop (GTK_STATUSBAR (window->status_bar),
1118 window->menu_tips_context_id);
1124 * Local Variables: -- emacs
1126 * c-basic-offset: 8 -- emacs
1127 * tab-width: 8 -- emacs
1128 * indent-tabs-mode: nil -- emacs