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>
32 #include "ui-commands.h"
40 /*==========================================================================*/
41 /* Private macros and constants. */
42 /*==========================================================================*/
44 /*==========================================================================*/
46 /*==========================================================================*/
49 /*==========================================================================*/
50 /* Local function prototypes */
51 /*==========================================================================*/
53 static void view_ui_item_toggled_cb (GtkToggleAction *action,
56 static void set_app_main_toolbar_style (GtkUIManager *ui);
58 static void set_app_drawing_toolbar_style (GtkUIManager *ui);
60 static void set_view_style (GtkUIManager *ui);
62 static void connect_proxy_cb (GtkUIManager *ui,
67 static void disconnect_proxy_cb (GtkUIManager *ui,
72 static void menu_item_select_cb (GtkMenuItem *proxy,
75 static void menu_item_deselect_cb (GtkMenuItem *proxy,
80 /*==========================================================================*/
82 /*==========================================================================*/
84 static GtkActionEntry entries[] = {
87 { "FileMenu", NULL, N_("_File") },
88 { "FileRecentsMenu", NULL, N_("Recent _Files") },
89 { "EditMenu", NULL, N_("_Edit") },
90 { "ViewMenu", NULL, N_("_View") },
91 { "ViewMainToolBarMenu", NULL, N_("Customize Main Toolbar") },
92 { "ViewDrawingToolBarMenu", NULL, N_("Customize Drawing Toolbar") },
93 { "ViewPropertyToolBarMenu", NULL, N_("Customize Properties Toolbar") },
94 { "ObjectsMenu", NULL, N_("_Objects") },
95 { "ObjectsCreateMenu", NULL, N_("_Create") },
96 { "ObjectsOrderMenu", NULL, N_("_Order") },
97 { "ObjectsRotateFlipMenu", NULL, N_("_Rotate/Flip") },
98 { "ObjectsAlignHorizMenu", NULL, N_("Align _Horizontal") },
99 { "ObjectsAlignVertMenu", NULL, N_("Align _Vertical") },
100 { "HelpMenu", NULL, N_("_Help") },
103 /* File action entries. */
108 N_("Create a new file"),
109 G_CALLBACK (gl_ui_cmd_file_new) },
116 G_CALLBACK (gl_ui_cmd_file_open) },
122 N_("Save current file"),
123 G_CALLBACK (gl_ui_cmd_file_save) },
129 N_("Save the current file to a different name"),
130 G_CALLBACK (gl_ui_cmd_file_save_as) },
136 N_("Print the current file"),
137 G_CALLBACK (gl_ui_cmd_file_print) },
140 GTK_STOCK_PROPERTIES,
143 N_("Modify document properties"),
144 G_CALLBACK (gl_ui_cmd_file_properties) },
146 { "FileTemplateDesigner",
148 N_("Template _Designer..."),
150 N_("Create a custom template"),
151 G_CALLBACK (gl_ui_cmd_file_template_designer) },
157 N_("Close the current file"),
158 G_CALLBACK (gl_ui_cmd_file_close) },
164 N_("Quit the program"),
165 G_CALLBACK (gl_ui_cmd_file_quit) },
168 /* Edit action entries. */
173 N_("Cut the selection"),
174 G_CALLBACK (gl_ui_cmd_edit_cut) },
180 N_("Copy the selection"),
181 G_CALLBACK (gl_ui_cmd_edit_copy) },
187 N_("Paste the clipboard"),
188 G_CALLBACK (gl_ui_cmd_edit_paste) },
194 N_("Delete the selected objects"),
195 G_CALLBACK (gl_ui_cmd_edit_delete) },
201 N_("Select all objects"),
202 G_CALLBACK (gl_ui_cmd_edit_select_all) },
208 N_("Remove all selections"),
209 G_CALLBACK (gl_ui_cmd_edit_unselect_all) },
212 GTK_STOCK_PREFERENCES,
215 N_("Configure the application"),
216 G_CALLBACK (gl_ui_cmd_edit_preferences) },
219 /* View action entries. */
224 N_("Increase magnification"),
225 G_CALLBACK (gl_ui_cmd_view_zoomin) },
231 N_("Decrease magnification"),
232 G_CALLBACK (gl_ui_cmd_view_zoomout) },
238 N_("Restore scale to 100%"),
239 G_CALLBACK (gl_ui_cmd_view_zoom1to1) },
245 N_("Set scale to fit window"),
246 G_CALLBACK (gl_ui_cmd_view_zoom_to_fit) },
249 /* Objects action entries. */
250 { "ObjectsArrowMode",
254 N_("Select, move and modify objects"),
255 G_CALLBACK (gl_ui_cmd_objects_arrow_mode) },
257 { "ObjectsCreateText",
261 N_("Create text object"),
262 G_CALLBACK (gl_ui_cmd_objects_create_text) },
264 { "ObjectsCreateBox",
268 N_("Create box/rectangle object"),
269 G_CALLBACK (gl_ui_cmd_objects_create_box) },
271 { "ObjectsCreateLine",
275 N_("Create line object"),
276 G_CALLBACK (gl_ui_cmd_objects_create_line) },
278 { "ObjectsCreateEllipse",
282 N_("Create ellipse/circle object"),
283 G_CALLBACK (gl_ui_cmd_objects_create_ellipse) },
285 { "ObjectsCreateImage",
289 N_("Create image object"),
290 G_CALLBACK (gl_ui_cmd_objects_create_image) },
292 { "ObjectsCreateBarcode",
296 N_("Create barcode object"),
297 G_CALLBACK (gl_ui_cmd_objects_create_barcode) },
301 N_("Bring to front"),
303 N_("Raise object to top"),
304 G_CALLBACK (gl_ui_cmd_objects_raise) },
307 GL_STOCK_ORDER_BOTTOM,
310 N_("Lower object to bottom"),
311 G_CALLBACK (gl_ui_cmd_objects_lower) },
313 { "ObjectsRotateLeft",
314 GL_STOCK_ROTATE_LEFT,
317 N_("Rotate object 90 degrees counter-clockwise"),
318 G_CALLBACK (gl_ui_cmd_objects_rotate_left) },
320 { "ObjectsRotateRight",
321 GL_STOCK_ROTATE_RIGHT,
324 N_("Rotate object 90 degrees clockwise"),
325 G_CALLBACK (gl_ui_cmd_objects_rotate_right) },
327 { "ObjectsFlipHorizontal",
329 N_("Flip horizontally"),
331 N_("Flip object horizontally"),
332 G_CALLBACK (gl_ui_cmd_objects_flip_horiz) },
334 { "ObjectsFlipVertical",
336 N_("Flip vertically"),
338 N_("Flip object vertically"),
339 G_CALLBACK (gl_ui_cmd_objects_flip_vert) },
341 { "ObjectsAlignLeft",
345 N_("Align objects to left edges"),
346 G_CALLBACK (gl_ui_cmd_objects_align_left) },
348 { "ObjectsAlignRight",
349 GL_STOCK_ALIGN_RIGHT,
352 N_("Align objects to right edges"),
353 G_CALLBACK (gl_ui_cmd_objects_align_right) },
355 { "ObjectsAlignHCenter",
356 GL_STOCK_ALIGN_HCENTER,
357 N_("Align horizontal center"),
359 N_("Align objects to horizontal centers"),
360 G_CALLBACK (gl_ui_cmd_objects_align_hcenter) },
366 N_("Align objects to top edges"),
367 G_CALLBACK (gl_ui_cmd_objects_align_top) },
369 { "ObjectsAlignBottom",
370 GL_STOCK_ALIGN_BOTTOM,
373 N_("Align objects to bottom edges"),
374 G_CALLBACK (gl_ui_cmd_objects_align_bottom) },
376 { "ObjectsAlignVCenter",
377 GL_STOCK_ALIGN_VCENTER,
378 N_("Align vertical center"),
380 N_("Align objects to vertical centers"),
381 G_CALLBACK (gl_ui_cmd_objects_align_vcenter) },
383 { "ObjectsCenterHorizontal",
384 GL_STOCK_CENTER_HORIZ,
385 N_("Center horizontally"),
387 N_("Center objects to horizontal label center"),
388 G_CALLBACK (gl_ui_cmd_objects_center_horiz) },
390 { "ObjectsCenterVertical",
391 GL_STOCK_CENTER_VERT,
392 N_("Center vertically"),
394 N_("Center objects to vertical label center"),
395 G_CALLBACK (gl_ui_cmd_objects_center_vert) },
397 { "ObjectsMergeProperties",
399 N_("Merge properties"),
401 N_("Edit merge properties"),
402 G_CALLBACK (gl_ui_cmd_objects_merge_properties) },
405 /* Help actions entries. */
410 N_("Open glabels manual"),
411 G_CALLBACK (gl_ui_cmd_help_contents) },
418 G_CALLBACK (gl_ui_cmd_help_about) },
421 static guint n_entries = G_N_ELEMENTS (entries);
423 static GtkToggleActionEntry toggle_entries[] = {
425 { "ViewPropertyToolBar",
427 N_("Property toolbar"),
429 N_("Change the visibility of the property toolbar in the current window"),
430 G_CALLBACK (gl_ui_cmd_view_property_bar_toggle),
433 { "ViewPropertyToolBarToolTips",
437 N_("Show tooltips for property toolbar"),
438 G_CALLBACK (gl_ui_cmd_view_property_bar_tips_toggle),
445 N_("Change the visibility of the grid in the current window"),
446 G_CALLBACK (gl_ui_cmd_view_grid_toggle),
453 N_("Change the visibility of markup lines in the current window"),
454 G_CALLBACK (gl_ui_cmd_view_markup_toggle),
458 static guint n_toggle_entries = G_N_ELEMENTS (toggle_entries);
460 static GtkToggleActionEntry ui_toggle_entries[] = {
466 N_("Change the visibility of the main toolbar in the current window"),
467 G_CALLBACK (view_ui_item_toggled_cb),
470 { "ViewDrawingToolBar",
472 N_("Drawing toolbar"),
474 N_("Change the visibility of the drawing toolbar in the current window"),
475 G_CALLBACK (view_ui_item_toggled_cb),
478 { "ViewMainToolBarToolTips",
482 N_("Show tooltips for main toolbar"),
483 G_CALLBACK (view_ui_item_toggled_cb),
486 { "ViewDrawingToolBarToolTips",
490 N_("Show tooltips for drawing toolbar"),
491 G_CALLBACK (view_ui_item_toggled_cb),
495 static guint n_ui_toggle_entries = G_N_ELEMENTS (ui_toggle_entries);
497 static const gchar *ui_info =
500 " <menubar name='MenuBar'>"
501 " <menu action='FileMenu'>"
502 " <menuitem action='FileNew' />"
503 " <menuitem action='FileOpen' />"
504 " <menu action='FileRecentsMenu'>"
505 " <placeholder name='FileRecentsPlaceHolder' />"
508 " <menuitem action='FileSave' />"
509 " <menuitem action='FileSaveAs' />"
511 " <menuitem action='FilePrint' />"
513 " <menuitem action='FileProperties' />"
514 " <menuitem action='FileTemplateDesigner' />"
516 " <menuitem action='FileClose' />"
517 " <menuitem action='FileQuit' />"
519 " <menu action='EditMenu'>"
520 " <menuitem action='EditCut' />"
521 " <menuitem action='EditCopy' />"
522 " <menuitem action='EditPaste' />"
523 " <menuitem action='EditDelete' />"
525 " <menuitem action='EditSelectAll' />"
526 " <menuitem action='EditUnSelectAll' />"
528 " <menuitem action='EditPreferences' />"
530 " <menu action='ViewMenu'>"
531 " <menuitem action='ViewMainToolBar' />"
532 " <menuitem action='ViewDrawingToolBar' />"
533 " <menuitem action='ViewPropertyToolBar' />"
535 " <menu action='ViewMainToolBarMenu'>"
536 " <menuitem action='ViewMainToolBarToolTips' />"
538 " <menu action='ViewDrawingToolBarMenu'>"
539 " <menuitem action='ViewDrawingToolBarToolTips' />"
541 " <menu action='ViewPropertyToolBarMenu'>"
542 " <menuitem action='ViewPropertyToolBarToolTips' />"
545 " <menuitem action='ViewGrid' />"
546 " <menuitem action='ViewMarkup' />"
548 " <menuitem action='ViewZoomIn' />"
549 " <menuitem action='ViewZoomOut' />"
550 " <menuitem action='ViewZoom1to1' />"
551 " <menuitem action='ViewZoomToFit' />"
553 " <menu action='ObjectsMenu'>"
554 " <menuitem action='ObjectsArrowMode' />"
555 " <menu action='ObjectsCreateMenu'>"
556 " <menuitem action='ObjectsCreateText' />"
557 " <menuitem action='ObjectsCreateBox' />"
558 " <menuitem action='ObjectsCreateLine' />"
559 " <menuitem action='ObjectsCreateEllipse' />"
560 " <menuitem action='ObjectsCreateImage' />"
561 " <menuitem action='ObjectsCreateBarcode' />"
564 " <menu action='ObjectsOrderMenu'>"
565 " <menuitem action='ObjectsRaise' />"
566 " <menuitem action='ObjectsLower' />"
568 " <menu action='ObjectsRotateFlipMenu'>"
569 " <menuitem action='ObjectsRotateLeft' />"
570 " <menuitem action='ObjectsRotateRight' />"
571 " <menuitem action='ObjectsFlipHorizontal' />"
572 " <menuitem action='ObjectsFlipVertical' />"
574 " <menu action='ObjectsAlignHorizMenu'>"
575 " <menuitem action='ObjectsAlignLeft' />"
576 " <menuitem action='ObjectsAlignHCenter' />"
577 " <menuitem action='ObjectsAlignRight' />"
578 " <menuitem action='ObjectsCenterHorizontal' />"
580 " <menu action='ObjectsAlignVertMenu'>"
581 " <menuitem action='ObjectsAlignTop' />"
582 " <menuitem action='ObjectsAlignVCenter' />"
583 " <menuitem action='ObjectsAlignBottom' />"
584 " <menuitem action='ObjectsCenterVertical' />"
587 " <menuitem action='ObjectsMergeProperties' />"
589 " <menu action='HelpMenu'>"
590 " <menuitem action='HelpContents' />"
591 " <menuitem action='HelpAbout' />"
595 " <toolbar name='MainToolBar'>"
596 " <toolitem action='FileNew' />"
597 " <toolitem action='FileOpen' />"
598 " <toolitem action='FileSave' />"
600 " <toolitem action='FilePrint' />"
602 " <toolitem action='EditCut' />"
603 " <toolitem action='EditCopy' />"
604 " <toolitem action='EditPaste' />"
607 " <toolbar name='DrawingToolBar'>"
608 " <toolitem action='ObjectsArrowMode' />"
610 " <toolitem action='ObjectsCreateText' />"
611 " <toolitem action='ObjectsCreateBox' />"
612 " <toolitem action='ObjectsCreateLine' />"
613 " <toolitem action='ObjectsCreateEllipse' />"
614 " <toolitem action='ObjectsCreateImage' />"
615 " <toolitem action='ObjectsCreateBarcode' />"
617 " <toolitem action='ViewZoomIn' />"
618 " <toolitem action='ViewZoomOut' />"
619 " <toolitem action='ViewZoom1to1' />"
620 " <toolitem action='ViewZoomToFit' />"
622 " <toolitem action='ObjectsMergeProperties' />"
628 static gchar* doc_verbs [] = {
629 "/ui/MenuBar/FileMenu/FileProperties",
630 "/ui/MenuBar/FileMenu/FileSave",
631 "/ui/MenuBar/FileMenu/FileSaveAs",
632 "/ui/MenuBar/FileMenu/FilePrint",
633 "/ui/MenuBar/FileMenu/FileClose",
634 "/ui/MenuBar/EditMenu/EditCut",
635 "/ui/MenuBar/EditMenu/EditCopy",
636 "/ui/MenuBar/EditMenu/EditPaste",
637 "/ui/MenuBar/EditMenu/EditDelete",
638 "/ui/MenuBar/EditMenu/EditSelectAll",
639 "/ui/MenuBar/EditMenu/EditUnSelectAll",
640 "/ui/MenuBar/ViewMenu/ViewZoomIn",
641 "/ui/MenuBar/ViewMenu/ViewZoomOut",
642 "/ui/MenuBar/ViewMenu/ViewZoom1to1",
643 "/ui/MenuBar/ViewMenu/ViewZoomToFit",
644 "/ui/MenuBar/ViewMenu/ViewGrid",
645 "/ui/MenuBar/ViewMenu/ViewMarkup",
646 "/ui/MenuBar/ObjectsMenu/ObjectsArrowMode",
647 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateText",
648 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateLine",
649 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateBox",
650 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateEllipse",
651 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateImage",
652 "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateBarcode",
653 "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsRaise",
654 "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsLower",
655 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateLeft",
656 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateRight",
657 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipHorizontal",
658 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipVertical",
659 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignLeft",
660 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignRight",
661 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignHCenter",
662 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsCenterHorizontal",
663 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignTop",
664 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignBottom",
665 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignVCenter",
666 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsCenterVertical",
667 "/ui/MenuBar/ObjectsMenu/ObjectsMergeProperties",
672 static gchar* doc_modified_verbs [] = {
673 "/ui/MenuBar/FileMenu/Save",
678 static gchar* selection_verbs [] = {
679 "/ui/MenuBar/EditMenu/EditCut",
680 "/ui/MenuBar/EditMenu/EditCopy",
681 "/ui/MenuBar/EditMenu/EditDelete",
682 "/ui/MenuBar/EditMenu/EditUnSelectAll",
683 "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsRaise",
684 "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsLower",
685 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateLeft",
686 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateRight",
687 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipHorizontal",
688 "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipVertical",
689 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsCenterHorizontal",
690 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsCenterVertical",
695 static gchar* atomic_selection_verbs [] = {
700 static gchar* multi_selection_verbs [] = {
701 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignLeft",
702 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignRight",
703 "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignHCenter",
704 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignTop",
705 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignBottom",
706 "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignVCenter",
712 /*****************************************************************************/
713 /** Initialize UI component for given window. */
714 /*****************************************************************************/
716 gl_ui_new (glWindow *window)
719 GtkActionGroup *actions;
720 GError *error = NULL;
722 gl_debug (DEBUG_UI, "START");
724 g_return_val_if_fail (window && GL_IS_WINDOW (window), NULL);
726 gl_debug (DEBUG_UI, "window = %p", window);
728 ui = gtk_ui_manager_new ();
730 g_signal_connect (ui, "connect_proxy",
731 G_CALLBACK (connect_proxy_cb), window);
732 g_signal_connect (ui, "disconnect_proxy",
733 G_CALLBACK (disconnect_proxy_cb), window);
735 actions = gtk_action_group_new ("Actions");
736 gtk_action_group_add_actions (actions, entries, n_entries, GTK_WINDOW (window));
737 gtk_action_group_add_toggle_actions (actions,
738 toggle_entries, n_toggle_entries,
740 gtk_action_group_add_toggle_actions (actions,
741 ui_toggle_entries, n_ui_toggle_entries,
744 gtk_ui_manager_insert_action_group (ui, actions, 0);
745 gtk_window_add_accel_group (GTK_WINDOW (window), gtk_ui_manager_get_accel_group (ui));
747 if (!gtk_ui_manager_add_ui_from_string (ui, ui_info, strlen (ui_info), &error)) {
748 g_message ("building menus failed: %s", error->message);
749 g_error_free (error);
752 /* Set the toolbar styles according to prefs */
753 set_app_main_toolbar_style (ui);
754 set_app_drawing_toolbar_style (ui);
756 /* Set view grid and markup visibility according to prefs */
759 gl_ui_util_set_verb_list_sensitive (ui, doc_verbs, FALSE);
761 gl_debug (DEBUG_UI, "END");
766 /*****************************************************************************/
767 /** Unref wrapper. */
768 /*****************************************************************************/
770 gl_ui_unref (GtkUIManager *ui)
772 gl_debug (DEBUG_UI, "START");
776 gl_debug (DEBUG_UI, "END");
779 /*****************************************************************************/
780 /* Update all verbs of given UI component. */
781 /*****************************************************************************/
783 gl_ui_update_all (GtkUIManager *ui,
788 gl_debug (DEBUG_UI, "START");
790 gl_ui_util_set_verb_list_sensitive (ui, doc_verbs, TRUE);
793 g_return_if_fail (label != NULL);
795 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditUndo",
796 gl_label_can_undo (label));
797 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditRedo",
798 gl_label_can_redo (label));
800 gl_ui_util_set_verb_list_sensitive (ui, doc_modified_verbs,
801 gl_label_is_modified (label));
803 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomIn",
804 !gl_view_is_zoom_max (view));
805 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomOut",
806 !gl_view_is_zoom_min (view));
808 gl_ui_util_set_verb_list_sensitive (ui, selection_verbs,
809 !gl_view_is_selection_empty (view));
811 gl_ui_util_set_verb_list_sensitive (ui, atomic_selection_verbs,
812 gl_view_is_selection_atomic (view));
814 gl_ui_util_set_verb_list_sensitive (ui, multi_selection_verbs,
815 !gl_view_is_selection_empty (view)
816 && !gl_view_is_selection_atomic (view));
818 gl_debug (DEBUG_UI, "END");
821 /*****************************************************************************/
822 /* Update all verbs of given UI component to "no document" state. */
823 /*****************************************************************************/
825 gl_ui_update_nodoc (GtkUIManager *ui)
827 gl_debug (DEBUG_UI, "START");
829 gl_ui_util_set_verb_list_sensitive (ui, doc_verbs, FALSE);
831 gl_debug (DEBUG_UI, "END");
834 /*****************************************************************************/
835 /* Update label modified verbs of given UI component. */
836 /*****************************************************************************/
838 gl_ui_update_modified_verbs (GtkUIManager *ui,
841 gl_debug (DEBUG_UI, "START");
843 gl_ui_util_set_verb_list_sensitive (ui,
845 gl_label_is_modified (label));
847 gl_debug (DEBUG_UI, "END");
850 /*****************************************************************************/
851 /* Update verbs associated with selection state of given UI component. */
852 /*****************************************************************************/
854 gl_ui_update_selection_verbs (GtkUIManager *ui,
857 gl_debug (DEBUG_UI, "START");
859 gl_ui_util_set_verb_list_sensitive (ui, selection_verbs,
860 !gl_view_is_selection_empty (view));
862 gl_ui_util_set_verb_list_sensitive (ui, atomic_selection_verbs,
863 gl_view_is_selection_atomic (view));
865 gl_ui_util_set_verb_list_sensitive (ui, multi_selection_verbs,
866 !gl_view_is_selection_empty (view)
867 && !gl_view_is_selection_atomic (view));
869 gl_debug (DEBUG_UI, "END");
872 /*****************************************************************************/
873 /* Update verbs associated with zoom level of given UI component. */
874 /*****************************************************************************/
876 gl_ui_update_zoom_verbs (GtkUIManager *ui,
879 gl_debug (DEBUG_UI, "START");
881 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomIn",
882 !gl_view_is_zoom_max (view));
883 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomOut",
884 !gl_view_is_zoom_min (view));
886 gl_debug (DEBUG_UI, "END");
889 /*****************************************************************************/
890 /* Update undo/redo verbs of given UI component. */
891 /*****************************************************************************/
893 gl_ui_update_undo_redo_verbs (GtkUIManager *ui,
896 gl_debug (DEBUG_UI, "START");
898 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditUndo",
899 gl_label_can_undo (label));
901 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditRedo",
902 gl_label_can_redo (label));
904 gl_debug (DEBUG_UI, "END");
907 /*---------------------------------------------------------------------------*/
908 /* PRIVATE. View menu item toggled callback. */
909 /*---------------------------------------------------------------------------*/
911 view_ui_item_toggled_cb (GtkToggleAction *action,
917 gl_debug (DEBUG_UI, "START");
919 g_return_if_fail (action && GTK_IS_TOGGLE_ACTION (action));
921 name = gtk_action_get_name (GTK_ACTION (action));
922 state = gtk_toggle_action_get_active (action);
924 gl_debug (DEBUG_UI, "Action = %s, State = %d", name, state);
926 if (strcmp (name, "ViewMainToolBar") == 0)
928 gl_prefs->main_toolbar_visible = state;
929 set_app_main_toolbar_style (ui);
930 gl_prefs_model_save_settings (gl_prefs);
933 if (strcmp (name, "ViewMainToolBarToolTips") == 0)
935 gl_prefs->main_toolbar_view_tooltips = state;
936 set_app_main_toolbar_style (ui);
937 gl_prefs_model_save_settings (gl_prefs);
940 if (strcmp (name, "ViewDrawingToolBar") == 0)
942 gl_prefs->drawing_toolbar_visible = state;
943 set_app_drawing_toolbar_style (ui);
944 gl_prefs_model_save_settings (gl_prefs);
947 if (strcmp (name, "ViewDrawingToolBarToolTips") == 0)
949 gl_prefs->drawing_toolbar_view_tooltips = state;
950 set_app_drawing_toolbar_style (ui);
951 gl_prefs_model_save_settings (gl_prefs);
954 gl_debug (DEBUG_UI, "");
957 /*---------------------------------------------------------------------------*/
958 /* PRIVATE. Set main toolbar style. */
959 /*---------------------------------------------------------------------------*/
961 set_app_main_toolbar_style (GtkUIManager *ui)
965 gl_debug (DEBUG_UI, "START");
967 g_return_if_fail (ui && GTK_IS_UI_MANAGER (ui));
969 /* Updated view menu */
970 gl_ui_util_set_verb_state (ui, "/ui/ViewMenu/ViewMainToolBar",
971 gl_prefs->main_toolbar_visible);
973 gl_ui_util_set_verb_sensitive (ui, "/ui/ViewMenu/ViewMainToolBarToolTips",
974 gl_prefs->main_toolbar_visible);
976 gl_ui_util_set_verb_state (ui, "/ui/ViewMenu/ViewMainToolBarToolTips",
977 gl_prefs->main_toolbar_view_tooltips);
980 toolbar = gtk_ui_manager_get_widget (ui, "/MainToolBar");
982 gtk_toolbar_set_tooltips (GTK_TOOLBAR (toolbar),
983 gl_prefs->main_toolbar_view_tooltips);
985 if (gl_prefs->main_toolbar_visible) {
986 gtk_widget_show_all (toolbar);
988 gtk_widget_hide (toolbar);
991 gl_debug (DEBUG_UI, "END");
995 /*---------------------------------------------------------------------------*/
996 /* PRIVATE. Set drawing toolbar style. */
997 /*---------------------------------------------------------------------------*/
999 set_app_drawing_toolbar_style (GtkUIManager *ui)
1003 gl_debug (DEBUG_UI, "START");
1005 g_return_if_fail (ui && GTK_IS_UI_MANAGER (ui));
1007 /* Updated view menu */
1008 gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenu/ViewDrawingToolBar",
1009 gl_prefs->drawing_toolbar_visible);
1011 gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewDrawingToolBarToolTips",
1012 gl_prefs->drawing_toolbar_visible);
1014 gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenuDrawingToolBarToolTips",
1015 gl_prefs->drawing_toolbar_view_tooltips);
1018 toolbar = gtk_ui_manager_get_widget (ui, "/DrawingToolBar");
1020 gtk_toolbar_set_tooltips (GTK_TOOLBAR (toolbar),
1021 gl_prefs->drawing_toolbar_view_tooltips);
1023 gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
1025 if (gl_prefs->drawing_toolbar_visible) {
1026 gtk_widget_show_all (toolbar);
1028 gtk_widget_hide (toolbar);
1031 gl_debug (DEBUG_UI, "END");
1034 /*---------------------------------------------------------------------------*/
1035 /* PRIVATE. Set visibility of grid and markup. */
1036 /*---------------------------------------------------------------------------*/
1038 set_view_style (GtkUIManager *ui)
1040 gl_debug (DEBUG_UI, "START");
1042 g_return_if_fail (ui && GTK_IS_UI_MANAGER(ui));
1044 gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenu/ViewGrid",
1045 gl_prefs->grid_visible);
1047 gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenu/ViewMarkup",
1048 gl_prefs->markup_visible);
1050 gl_debug (DEBUG_UI, "END");
1053 /*---------------------------------------------------------------------------*/
1054 /* PRIVATE. Connect proxy callback. */
1055 /*---------------------------------------------------------------------------*/
1057 connect_proxy_cb (GtkUIManager *ui,
1062 if (GTK_IS_MENU_ITEM (proxy))
1064 g_signal_connect (proxy, "select",
1065 G_CALLBACK (menu_item_select_cb), window);
1066 g_signal_connect (proxy, "deselect",
1067 G_CALLBACK (menu_item_deselect_cb), window);
1071 /*---------------------------------------------------------------------------*/
1072 /* PRIVATE. Disconnect proxy callback. */
1073 /*---------------------------------------------------------------------------*/
1075 disconnect_proxy_cb (GtkUIManager *ui,
1080 if (GTK_IS_MENU_ITEM (proxy))
1082 g_signal_handlers_disconnect_by_func
1083 (proxy, G_CALLBACK (menu_item_select_cb), window);
1084 g_signal_handlers_disconnect_by_func
1085 (proxy, G_CALLBACK (menu_item_deselect_cb), window);
1089 /*---------------------------------------------------------------------------*/
1090 /* PRIVATE. Menu item select callback. */
1091 /*---------------------------------------------------------------------------*/
1093 menu_item_select_cb (GtkMenuItem *proxy,
1099 g_return_if_fail (window && GL_IS_WINDOW (window));
1100 g_return_if_fail (window->status_bar && GTK_IS_STATUSBAR (window->status_bar));
1102 action = g_object_get_data (G_OBJECT (proxy), "gtk-action");
1103 g_return_if_fail (action != NULL);
1105 g_object_get (G_OBJECT (action), "tooltip", &message, NULL);
1108 gtk_statusbar_push (GTK_STATUSBAR (window->status_bar),
1109 window->menu_tips_context_id, message);
1114 /*---------------------------------------------------------------------------*/
1115 /* PRIVATE. Menu item deselect callback. */
1116 /*---------------------------------------------------------------------------*/
1118 menu_item_deselect_cb (GtkMenuItem *proxy,
1121 g_return_if_fail (window && GL_IS_WINDOW (window));
1122 g_return_if_fail (window->status_bar && GTK_IS_STATUSBAR (window->status_bar));
1124 gtk_statusbar_pop (GTK_STATUSBAR (window->status_bar),
1125 window->menu_tips_context_id);