]> git.sur5r.net Git - glabels/blob - glabels2/src/menus.c
Rearranged app menus.
[glabels] / glabels2 / src / menus.c
1 /*
2  *  (GLABELS) Label and Business Card Creation program for GNOME
3  *
4  *  menus.c:  GLabels menus module
5  *
6  *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program; if not, write to the Free Software
20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21  */
22
23 /*
24  * This file is based on gedit-menus.c from gedit2:
25  *
26  * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
27  * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi 
28  *
29  */
30 #include <config.h>
31
32 #include "menus.h"
33 #include "commands.h"
34 #include "tools.h"
35 #include "glabels.h"
36
37 BonoboUIVerb gl_verbs [] = {
38         BONOBO_UI_VERB ("FileNew", gl_cmd_file_new),
39         BONOBO_UI_VERB ("FileOpen", gl_cmd_file_open),
40         BONOBO_UI_VERB ("FileSave", gl_cmd_file_save),
41         BONOBO_UI_VERB ("FileSaveAs", gl_cmd_file_save_as),
42         BONOBO_UI_VERB ("FilePrint", gl_cmd_file_print),
43         BONOBO_UI_VERB ("FileClose", gl_cmd_file_close),
44         BONOBO_UI_VERB ("FileCloseAll", gl_cmd_file_close_all),
45         BONOBO_UI_VERB ("FileExit", gl_cmd_file_exit),
46         BONOBO_UI_VERB ("EditCut", gl_cmd_edit_cut),
47         BONOBO_UI_VERB ("EditCopy", gl_cmd_edit_copy),
48         BONOBO_UI_VERB ("EditPaste", gl_cmd_edit_paste),
49         BONOBO_UI_VERB ("EditDelete", gl_cmd_edit_delete),
50         BONOBO_UI_VERB ("EditSelectAll", gl_cmd_edit_select_all),
51         BONOBO_UI_VERB ("EditUnSelectAll", gl_cmd_edit_unselect_all),
52         BONOBO_UI_VERB ("ToolsArrow", gl_tools_arrow),
53         BONOBO_UI_VERB ("ToolsText", gl_tools_text),
54         BONOBO_UI_VERB ("ToolsBox", gl_tools_box),
55         BONOBO_UI_VERB ("ToolsLine", gl_tools_line),
56         BONOBO_UI_VERB ("ToolsEllipse", gl_tools_ellipse),
57         BONOBO_UI_VERB ("ToolsImage", gl_tools_image),
58         BONOBO_UI_VERB ("ToolsBarcode", gl_tools_barcode),
59         BONOBO_UI_VERB ("ToolsZoomIn", gl_tools_zoomin),
60         BONOBO_UI_VERB ("ToolsZoomOut", gl_tools_zoomout),
61         BONOBO_UI_VERB ("ToolsZoom1to1", gl_tools_zoom1to1),
62         BONOBO_UI_VERB ("ToolsMergeProperties", gl_tools_merge_properties),
63         BONOBO_UI_VERB ("ToolsObjectProperties", gl_tools_object_properties),
64         BONOBO_UI_VERB ("ToolsRaiseObjects", gl_tools_raise_objects),
65         BONOBO_UI_VERB ("ToolsLowerObjects", gl_tools_lower_objects),
66         BONOBO_UI_VERB ("SettingsPreferences", gl_cmd_settings_preferences),
67         BONOBO_UI_VERB ("HelpContents", gl_cmd_help_contents),
68         BONOBO_UI_VERB ("About", gl_cmd_help_about),
69
70         BONOBO_UI_VERB_END
71 };
72
73 gchar* gl_menus_no_docs_sensible_verbs [] = {
74         "/commands/FileSave",
75         "/commands/FileSaveAs",
76         "/commands/FilePrint",
77         "/commands/FilePrintPreview",
78         "/commands/FileClose",
79         "/commands/FileCloseAll",
80         "/commands/EditUndo",
81         "/commands/EditRedo",
82         "/commands/EditCut",
83         "/commands/EditCopy",
84         "/commands/EditPaste",
85         "/commands/EditDelete",
86         "/commands/EditSelectAll",
87         "/commands/EditUnSelectAll",
88         "/commands/ToolsArrow",
89         "/commands/ToolsText",
90         "/commands/ToolsLine",
91         "/commands/ToolsBox",
92         "/commands/ToolsEllipse",
93         "/commands/ToolsImage",
94         "/commands/ToolsBarcode",
95         "/commands/ToolsZoomIn",
96         "/commands/ToolsZoomOut",
97         "/commands/ToolsZoom1to1",
98         "/commands/ToolsMergeProperties",
99         "/commands/ToolsObjectProperties",
100         "/commands/ToolsRaiseObjects",
101         "/commands/ToolsLowerObjects",
102
103         NULL
104 };
105
106 gchar* gl_menus_not_modified_doc_sensible_verbs [] = {
107         "/commands/FileSave",
108
109         NULL
110 };
111
112
113 void
114 gl_menus_set_verb_sensitive (BonoboUIComponent *ui_component, gchar* cname, gboolean sensitive)
115 {
116         g_return_if_fail (cname != NULL);
117         g_return_if_fail (BONOBO_IS_UI_COMPONENT (ui_component));
118
119         bonobo_ui_component_set_prop (
120                 ui_component, cname, "sensitive", sensitive ? "1" : "0", NULL);
121 }
122
123 void
124 gl_menus_set_verb_list_sensitive (BonoboUIComponent *ui_component, gchar** vlist, gboolean sensitive)
125 {
126         g_return_if_fail (vlist != NULL);
127         g_return_if_fail (BONOBO_IS_UI_COMPONENT (ui_component));
128
129         for ( ; *vlist; ++vlist)
130         {
131                 bonobo_ui_component_set_prop (
132                         ui_component, *vlist, "sensitive", sensitive ? "1" : "0", NULL);
133         }
134 }
135
136 void
137 gl_menus_set_verb_state (BonoboUIComponent *ui_component, gchar* cname, gboolean state)
138 {
139         g_return_if_fail (cname != NULL);
140         g_return_if_fail (BONOBO_IS_UI_COMPONENT (ui_component));
141
142         bonobo_ui_component_set_prop (
143                 ui_component, cname, "state", state ? "1" : "0", NULL);
144 }
145
146 void
147 gl_menus_add_menu_item (BonoboWindow *window, const gchar *path,
148                      const gchar *name, const gchar *label,
149                      const gchar *tooltip, const gchar *stock_pixmap,
150                      BonoboUIVerbFn cb)
151 {
152         BonoboUIComponent *ui_component;
153         gchar *item_path;
154         gchar *cmd;
155
156         g_return_if_fail (window != NULL);
157         g_return_if_fail (path != NULL);
158         g_return_if_fail (label != NULL);
159         g_return_if_fail (cb != NULL);
160         
161         item_path = g_strconcat (path, name, NULL);
162         ui_component = bonobo_mdi_get_ui_component_from_window (BONOBO_WINDOW (window));
163         if (!bonobo_ui_component_path_exists (ui_component, item_path, NULL)) {
164                 gchar *xml;
165
166                 xml = g_strdup_printf ("<menuitem name=\"%s\" verb=\"\""
167                                        " _label=\"%s\""
168                                        " _tip=\"%s\" hident=\"0\" />", name,
169                                        label, tooltip);
170
171
172                 if (stock_pixmap != NULL) {
173                         cmd = g_strdup_printf ("<cmd name=\"%s\""
174                                 " pixtype=\"stock\" pixname=\"%s\" />",
175                                 name, stock_pixmap);
176                 }
177                 else {
178                         cmd = g_strdup_printf ("<cmd name=\"%s\" />", name);
179                 }
180
181
182                 bonobo_ui_component_set_translate (ui_component, path,
183                                                    xml, NULL);
184
185                 bonobo_ui_component_set_translate (ui_component, "/commands/",
186                                                    cmd, NULL);
187                                                    
188                 bonobo_ui_component_add_verb (ui_component, name, cb, NULL);
189
190                 g_free (xml);
191                 g_free (cmd);
192         }
193
194         g_free (item_path);
195 }
196
197 void
198 gl_menus_remove_menu_item (BonoboWindow *window, const gchar *path,
199                         const gchar *name)
200 {
201         BonoboUIComponent *ui_component;
202         gchar *item_path;
203
204         g_return_if_fail (window != NULL);
205         g_return_if_fail (path != NULL);
206         g_return_if_fail (name != NULL);
207
208         item_path = g_strconcat (path, name, NULL);
209         ui_component = bonobo_mdi_get_ui_component_from_window (BONOBO_WINDOW (window));
210
211         if (bonobo_ui_component_path_exists (ui_component, item_path, NULL)) {
212                 gchar *cmd;
213
214                 cmd = g_strdup_printf ("/commands/%s", name);
215                 
216                 bonobo_ui_component_rm (ui_component, item_path, NULL);
217                 bonobo_ui_component_rm (ui_component, cmd, NULL);
218                 
219                 g_free (cmd);
220         }
221
222         g_free (item_path);
223 }
224
225 void
226 gl_menus_add_menu_item_all (const gchar *path, const gchar *name,
227                          const gchar *label, const gchar *tooltip,
228                          const gchar *stock_pixmap,
229                          BonoboUIVerbFn cb)
230 {
231         GList* top_windows;
232         
233         top_windows = glabels_get_top_windows ();
234         g_return_if_fail (top_windows != NULL);
235        
236         while (top_windows)
237         {
238                 BonoboWindow* window = BONOBO_WINDOW (top_windows->data);
239
240
241                 gl_menus_add_menu_item (window, path, name, label, tooltip,
242                                      stock_pixmap, cb);
243                 
244                 top_windows = g_list_next (top_windows);
245         }
246 }
247
248 void
249 gl_menus_remove_menu_item_all (const gchar *path, const gchar *name)
250 {
251         GList* top_windows;
252         
253         top_windows = glabels_get_top_windows ();
254         g_return_if_fail (top_windows != NULL);
255        
256         while (top_windows)
257         {
258                 BonoboWindow* window = BONOBO_WINDOW (top_windows->data);
259
260
261                 gl_menus_remove_menu_item (window, path, name);
262
263                 
264                 top_windows = g_list_next (top_windows);
265         }
266 }