234
136
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(_menu.redo), icon);
235
137
gtk_widget_show(icon);
239
142
paste_buffer_added(Object_t *obj, gpointer data)
241
gtk_widget_set_sensitive((GtkWidget*) data, TRUE);
144
set_sensitive("/MainMenu/EditMenu/Paste", TRUE);
245
148
paste_buffer_removed(Object_t *obj, gpointer data)
247
gtk_widget_set_sensitive((GtkWidget*) data, FALSE);
251
make_edit_menu(GtkWidget *menu_bar)
253
GtkWidget *edit_menu = make_menu_bar_item(menu_bar, _("_Edit"));
254
GtkWidget *item, *paste;
256
_menu.edit_menu = edit_menu;
257
command_list_changed(NULL, NULL);
259
make_separator(edit_menu);
260
_menu.cut = make_item_with_image(edit_menu, GTK_STOCK_CUT, menu_command,
262
_menu.copy = make_item_with_image(edit_menu, GTK_STOCK_COPY, menu_command,
264
paste = make_item_with_image(edit_menu, GTK_STOCK_PASTE, menu_command,
266
gtk_widget_set_sensitive(paste, FALSE);
267
_menu.clear = make_item_with_image(edit_menu, GTK_STOCK_CLEAR, menu_command,
269
add_accelerator(_menu.clear, 'K', GDK_CONTROL_MASK);
270
make_separator(edit_menu);
271
item = make_item_with_label(edit_menu, _("Select _all"), menu_command,
272
&_menu.cmd_select_all);
273
add_accelerator(item, 'A', GDK_CONTROL_MASK);
274
_menu.deselect_all = make_item_with_label(edit_menu, _("Deselect _all"),
276
&_menu.cmd_deselect_all);
277
add_accelerator(_menu.deselect_all, 'A', GDK_SHIFT_MASK|GDK_CONTROL_MASK);
278
make_separator(edit_menu);
279
_menu.edit = make_item_with_label(edit_menu, _("Edit area info..."),
280
menu_command, &_menu.cmd_edit_area_info);
281
make_separator(edit_menu);
282
make_item_with_image(edit_menu, GTK_STOCK_PREFERENCES, menu_command,
283
&_menu.cmd_preferences);
285
paste_buffer_add_add_cb(paste_buffer_added, (gpointer) paste);
286
paste_buffer_add_remove_cb(paste_buffer_removed, (gpointer) paste);
288
command_list_add_update_cb(command_list_changed, NULL);
292
make_view_menu(GtkWidget *menu_bar)
294
GtkWidget *view_menu = make_menu_bar_item(menu_bar, _("_View"));
295
GtkWidget *zoom_menu, *item;
296
GSList *group = NULL;
298
item = make_check_item(view_menu, _("Area list"), menu_command,
299
&_menu.cmd_area_list);
300
GTK_CHECK_MENU_ITEM(item)->active = TRUE;
302
make_item_with_label(view_menu, _("Source..."), menu_command,
304
make_separator(view_menu);
306
_menu.color = make_radio_item(view_menu, NULL, _("Color"), menu_command,
308
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.color));
310
_menu.gray = make_radio_item(view_menu, group, _("Grayscale"), menu_command,
312
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.gray));
314
if (!get_map_info()->color) { /* Gray image */
315
gtk_widget_set_sensitive(_menu.color, FALSE);
316
GTK_CHECK_MENU_ITEM(_menu.color)->active = FALSE;
317
GTK_CHECK_MENU_ITEM(_menu.gray)->active = TRUE;
320
make_separator(view_menu);
322
_menu.zoom_in = make_item_with_image(view_menu, GTK_STOCK_ZOOM_IN,
323
menu_command, &_menu.cmd_zoom_in);
324
_menu.zoom_out = make_item_with_image(view_menu, GTK_STOCK_ZOOM_OUT,
325
menu_command, &_menu.cmd_zoom_out);
326
gtk_widget_set_sensitive(_menu.zoom_out, FALSE);
328
zoom_menu = make_sub_menu(view_menu, _("Zoom to"));
330
_menu.zoom[0] = make_radio_item(zoom_menu, NULL, "1:1", menu_zoom_to,
332
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.zoom[0]));
333
_menu.zoom[1] = make_radio_item(zoom_menu, group, "1:2", menu_zoom_to,
335
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.zoom[1]));
336
_menu.zoom[2] = make_radio_item(zoom_menu, group, "1:3", menu_zoom_to,
338
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.zoom[2]));
339
_menu.zoom[3] = make_radio_item(zoom_menu, group, "1:4", menu_zoom_to,
341
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.zoom[3]));
342
_menu.zoom[4] = make_radio_item(zoom_menu, group, "1:5", menu_zoom_to,
344
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.zoom[4]));
345
_menu.zoom[5] = make_radio_item(zoom_menu, group, "1:6", menu_zoom_to,
347
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.zoom[5]));
348
_menu.zoom[6] = make_radio_item(zoom_menu, group, "1:7", menu_zoom_to,
350
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.zoom[6]));
351
_menu.zoom[7] = make_radio_item(zoom_menu, group, "1:8", menu_zoom_to,
356
make_mapping_menu(GtkWidget *menu_bar)
358
GtkWidget *menu = make_menu_bar_item(menu_bar, _("_Mapping"));
361
_menu.arrow = make_radio_item(menu, NULL, _("Arrow"), menu_arrow, NULL);
362
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.arrow));
363
#ifdef _NOT_READY_YET_
364
_menu.fuzzy_select = make_radio_item(menu, group,
365
_("Select contiguous region"),
366
menu_fuzzy_select, NULL);
367
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.fuzzy_select));
369
_menu.rectangle = make_radio_item(menu, group, _("Rectangle"),
370
menu_rectangle, NULL);
371
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.rectangle));
372
_menu.circle = make_radio_item(menu, group, _("Circle"), menu_circle, NULL);
373
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(_menu.circle));
374
_menu.polygon = make_radio_item(menu, group, _("Polygon"), menu_polygon,
376
make_separator(menu);
377
make_item_with_image(menu, IMAP_STOCK_MAP_INFO, menu_command,
378
&_menu.cmd_edit_map_info);
382
make_tools_menu(GtkWidget *menu_bar)
384
GtkWidget *tools_menu = make_menu_bar_item(menu_bar, _("_Tools"));
385
_menu.grid = make_check_item(tools_menu, _("Grid"), menu_grid, NULL);
386
make_item_with_label(tools_menu, _("Grid settings..."), menu_command,
387
&_menu.cmd_grid_settings);
388
make_separator(tools_menu);
389
make_item_with_label(tools_menu, _("Use GIMP guides..."), menu_command,
390
&_menu.cmd_use_gimp_guides);
391
make_item_with_label(tools_menu, _("Create guides..."), menu_command,
392
&_menu.cmd_create_guides);
396
make_help_menu(GtkWidget *menu_bar)
399
GtkWidget *help_menu = make_menu_bar_item(menu_bar, _("_Help"));
401
item = make_item_with_label(help_menu, _("_Contents"), menu_command,
403
add_accelerator(item, GDK_F1, 0);
405
make_item_with_label(help_menu, _("_About ImageMap"), menu_command,
150
set_sensitive("/MainMenu/EditMenu/Paste", FALSE);
154
static const GtkActionEntry entries[] = {
155
{ "FileMenu", NULL, N_("_File") },
156
{ "Open", GTK_STOCK_OPEN, N_("_Open..."), NULL, N_("Open"),
157
do_file_open_dialog},
158
{ "Save", GTK_STOCK_SAVE, N_("_Save..."), NULL, N_("Save"),
160
{ "SaveAs", GTK_STOCK_SAVE_AS, N_("Save _As..."), "<shift><control>S", NULL,
161
do_file_save_as_dialog},
162
{ "Close", GTK_STOCK_CLOSE, NULL, NULL, NULL, do_close},
163
{ "Quit", GTK_STOCK_QUIT, NULL, NULL, NULL, do_quit},
165
{ "EditMenu", NULL, N_("_Edit") },
166
{ "Undo", GTK_STOCK_UNDO, NULL, NULL, N_("Undo"), NULL},
167
{ "Redo", GTK_STOCK_REDO, NULL, NULL, N_("Redo"), NULL},
168
{ "Cut", GTK_STOCK_CUT, NULL, NULL, N_("Cut"), do_cut},
169
{ "Copy", GTK_STOCK_COPY, NULL, NULL, N_("Copy"), do_copy},
170
{ "Paste", GTK_STOCK_PASTE, NULL, NULL, N_("Paste"), do_paste},
171
{ "Clear", GTK_STOCK_DELETE, NULL, N_("Delete"), NULL, do_clear},
172
{ "SelectAll", NULL, N_("Select _All"), "<control>A", NULL, do_select_all},
173
{ "DeselectAll", NULL, N_("D_eselect All"), "<shift><control>A", NULL,
175
{ "EditAreaInfo", GTK_STOCK_EDIT, N_("Edit Area _Info..."), NULL,
176
N_("Edit selected area info"), do_edit_selected_shape},
177
{ "Preferences", GTK_STOCK_PREFERENCES, NULL, NULL, N_("Preferences"),
178
do_preferences_dialog},
179
{ "MoveToFront", IMAP_STOCK_TO_FRONT, "", NULL, N_("Move to Front"),
181
{ "SendToBack", IMAP_STOCK_TO_BACK, "", NULL, N_("Send to Back"),
183
{ "DeleteArea", NULL, N_("Delete Area"), NULL, NULL, NULL},
184
{ "MoveUp", GTK_STOCK_GO_UP, N_("Move Up"), NULL, NULL, NULL},
185
{ "MoveDown", GTK_STOCK_GO_DOWN, N_("Move Down"), NULL, NULL, NULL},
187
{ "InsertPoint", NULL, N_("Insert Point"), NULL, NULL, polygon_insert_point},
188
{ "DeletePoint", NULL, N_("Delete Point"), NULL, NULL, polygon_delete_point},
190
{ "ViewMenu", NULL, N_("_View") },
191
{ "Source", NULL, N_("Source..."), NULL, NULL, do_source_dialog},
192
{ "ZoomIn", GTK_STOCK_ZOOM_IN, NULL, "plus", N_("Zoom in"), do_zoom_in},
193
{ "ZoomOut", GTK_STOCK_ZOOM_OUT, NULL, "minus", N_("Zoom out"), do_zoom_out},
194
{ "ZoomToMenu", NULL, N_("_Zoom To") },
196
{ "MappingMenu", NULL, N_("_Mapping") },
197
{ "EditMapInfo", GTK_STOCK_INFO, N_("Edit Map Info..."), NULL,
198
N_("Edit Map Info"), do_settings_dialog},
200
{ "ToolsMenu", NULL, N_("_Tools") },
201
{ "GridSettings", NULL, N_("Grid Settings..."), NULL, NULL,
202
do_grid_settings_dialog},
203
{ "UseGimpGuides", NULL, N_("Use GIMP Guides..."), NULL, NULL,
204
do_use_gimp_guides_dialog},
205
{ "CreateGuides", NULL, N_("Create Guides..."), NULL, NULL,
206
do_create_guides_dialog},
208
{ "HelpMenu", NULL, N_("_Help") },
209
{ "Contents", GTK_STOCK_HELP, N_("_Contents"), NULL, NULL, imap_help},
210
{ "About", GTK_STOCK_ABOUT, NULL, NULL, NULL, do_about_dialog},
212
{ "ZoomMenu", NULL, N_("_Zoom") },
216
static const GtkToggleActionEntry toggle_entries[] = {
217
{ "AreaList", NULL, N_("Area List"), NULL, NULL, NULL, TRUE },
218
{ "Grid", GIMP_STOCK_GRID, N_("_Grid"), NULL, N_("Grid"), toggle_grid, FALSE }
221
static const GtkRadioActionEntry color_entries[] = {
222
{ "Color", NULL, N_("Color"), NULL, NULL, 0},
223
{ "Gray", NULL, N_("Gray"), NULL, NULL, 1},
226
static const GtkRadioActionEntry mapping_entries[] = {
227
{ "Arrow", GIMP_STOCK_CURSOR, N_("Arrow"), NULL,
228
N_("Select existing area"), 0},
229
{ "Rectangle", IMAP_STOCK_RECTANGLE, N_("Rectangle"), NULL,
230
N_("Define Rectangle area"), 1},
231
{ "Circle", IMAP_STOCK_CIRCLE, N_("Circle"), NULL,
232
N_("Define Circle/Oval area"), 2},
233
{ "Polygon", IMAP_STOCK_POLYGON, N_("Polygon"), NULL,
234
N_("Define Polygon area"), 3},
237
static const GtkRadioActionEntry zoom_entries[] = {
238
{ "Zoom1:1", NULL, "1:1", NULL, NULL, 0},
239
{ "Zoom1:2", NULL, "1:2", NULL, NULL, 1},
240
{ "Zoom1:3", NULL, "1:3", NULL, NULL, 2},
241
{ "Zoom1:4", NULL, "1:4", NULL, NULL, 3},
242
{ "Zoom1:5", NULL, "1:5", NULL, NULL, 4},
243
{ "Zoom1:6", NULL, "1:6", NULL, NULL, 5},
244
{ "Zoom1:7", NULL, "1:7", NULL, NULL, 6},
245
{ "Zoom1:8", NULL, "1:8", NULL, NULL, 7},
248
static const gchar ui_description[] =
250
" <menubar name='MainMenu'>"
251
" <menu action='FileMenu'>"
252
" <menuitem action='Open'/>"
253
" <menuitem action='Save'/>"
254
" <menuitem action='SaveAs'/>"
256
" <menuitem action='Close'/>"
257
" <menuitem action='Quit'/>"
259
" <menu action='EditMenu'>"
260
" <menuitem action='Cut'/>"
261
" <menuitem action='Copy'/>"
262
" <menuitem action='Paste'/>"
263
" <menuitem action='Clear'/>"
265
" <menuitem action='SelectAll'/>"
266
" <menuitem action='DeselectAll'/>"
268
" <menuitem action='EditAreaInfo'/>"
270
" <menuitem action='Preferences'/>"
272
" <menu action='ViewMenu'>"
273
" <menuitem action='AreaList'/>"
274
" <menuitem action='Source'/>"
276
" <menuitem action='Color'/>"
277
" <menuitem action='Gray'/>"
279
" <menuitem action='ZoomIn'/>"
280
" <menuitem action='ZoomOut'/>"
281
" <menu action='ZoomToMenu'>"
282
" <menuitem action='Zoom1:1'/>"
283
" <menuitem action='Zoom1:2'/>"
284
" <menuitem action='Zoom1:3'/>"
285
" <menuitem action='Zoom1:4'/>"
286
" <menuitem action='Zoom1:5'/>"
287
" <menuitem action='Zoom1:6'/>"
288
" <menuitem action='Zoom1:7'/>"
289
" <menuitem action='Zoom1:8'/>"
292
" <menu action='MappingMenu'>"
293
" <menuitem action='Arrow'/>"
294
" <menuitem action='Rectangle'/>"
295
" <menuitem action='Circle'/>"
296
" <menuitem action='Polygon'/>"
298
" <menuitem action='EditMapInfo'/>"
300
" <menu action='ToolsMenu'>"
301
" <menuitem action='Grid'/>"
302
" <menuitem action='GridSettings'/>"
304
" <menuitem action='UseGimpGuides'/>"
305
" <menuitem action='CreateGuides'/>"
307
" <menu action='HelpMenu'>"
308
" <menuitem action='Contents'/>"
309
" <menuitem action='About'/>"
313
" <popup name='PopupMenu'>"
314
" <menuitem action='EditMapInfo'/>"
315
" <menu action='ToolsMenu'>"
316
" <menuitem action='Arrow'/>"
317
" <menuitem action='Rectangle'/>"
318
" <menuitem action='Circle'/>"
319
" <menuitem action='Polygon'/>"
321
" <menu action='ZoomMenu'>"
322
" <menuitem action='ZoomIn'/>"
323
" <menuitem action='ZoomOut'/>"
325
" <menuitem action='Grid'/>"
326
" <menuitem action='GridSettings'/>"
327
" <menuitem action='CreateGuides'/>"
328
" <menuitem action='Paste'/>"
331
" <popup name='ObjectPopupMenu'>"
332
" <menuitem action='EditAreaInfo'/>"
333
" <menuitem action='DeleteArea'/>"
334
" <menuitem action='MoveUp'/>"
335
" <menuitem action='MoveDown'/>"
336
" <menuitem action='Cut'/>"
337
" <menuitem action='Copy'/>"
340
" <popup name='PolygonPopupMenu'>"
341
" <menuitem action='InsertPoint'/>"
342
" <menuitem action='DeletePoint'/>"
343
" <menuitem action='EditAreaInfo'/>"
344
" <menuitem action='DeleteArea'/>"
345
" <menuitem action='MoveUp'/>"
346
" <menuitem action='MoveDown'/>"
347
" <menuitem action='Cut'/>"
348
" <menuitem action='Copy'/>"
351
" <toolbar name='Toolbar'>"
352
" <toolitem action='Open'/>"
353
" <toolitem action='Save'/>"
355
" <toolitem action='Preferences'/>"
357
" <toolitem action='Undo'/>"
358
" <toolitem action='Redo'/>"
360
" <toolitem action='Cut'/>"
361
" <toolitem action='Copy'/>"
362
" <toolitem action='Paste'/>"
364
" <toolitem action='ZoomIn'/>"
365
" <toolitem action='ZoomOut'/>"
367
" <toolitem action='EditMapInfo'/>"
369
" <toolitem action='MoveToFront'/>"
370
" <toolitem action='SendToBack'/>"
372
" <toolitem action='Grid'/>"
375
" <toolbar name='Tools'>"
376
" <toolitem action='Arrow'/>"
377
" <toolitem action='Rectangle'/>"
378
" <toolitem action='Circle'/>"
379
" <toolitem action='Polygon'/>"
381
" <toolitem action='EditAreaInfo'/>"
384
" <toolbar name='Selection'>"
385
" <toolitem action='MoveUp'/>"
386
" <toolitem action='MoveDown'/>"
387
" <toolitem action='EditAreaInfo'/>"
388
" <toolitem action='Clear'/>"
410
393
make_menu(GtkWidget *main_vbox, GtkWidget *window)
412
GtkWidget *menu_bar = gtk_menu_bar_new();
414
gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0);
415
gtk_widget_show(menu_bar);
417
init_accel_group(window);
419
make_file_menu(menu_bar);
420
make_edit_menu(menu_bar);
421
make_view_menu(menu_bar);
422
make_mapping_menu(menu_bar);
423
make_tools_menu(menu_bar);
424
make_help_menu(menu_bar);
426
menu_shapes_selected(0);
396
GtkActionGroup *action_group;
397
GtkAccelGroup *accel_group;
400
action_group = gtk_action_group_new ("MenuActions");
401
gtk_action_group_set_translation_domain (action_group, NULL);
403
gtk_action_group_add_actions (action_group, entries, G_N_ELEMENTS (entries),
405
gtk_action_group_add_toggle_actions (action_group, toggle_entries,
406
G_N_ELEMENTS (toggle_entries), window);
408
gtk_action_group_add_radio_actions (action_group, color_entries,
409
G_N_ELEMENTS (color_entries), 0,
410
G_CALLBACK (set_preview_color), NULL);
411
gtk_action_group_add_radio_actions (action_group, zoom_entries,
412
G_N_ELEMENTS (zoom_entries), 0,
413
G_CALLBACK (set_zoom_factor), NULL);
414
gtk_action_group_add_radio_actions (action_group, mapping_entries,
415
G_N_ELEMENTS (mapping_entries), 0,
416
G_CALLBACK (set_func), window);
418
ui_manager = gtk_ui_manager_new ();
419
gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
421
accel_group = gtk_ui_manager_get_accel_group (ui_manager);
422
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
425
if (!gtk_ui_manager_add_ui_from_string (ui_manager, ui_description, -1,
428
g_warning ("building menus failed: %s", error->message);
429
g_error_free (error);
430
/* exit (EXIT_FAILURE); */
433
menubar = gtk_ui_manager_get_widget (ui_manager, "/MainMenu");
434
gtk_widget_show (menubar);
435
gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
437
paste_buffer_add_add_cb(paste_buffer_added, NULL);
438
paste_buffer_add_remove_cb(paste_buffer_removed, NULL);
440
set_sensitive ("/MainMenu/EditMenu/Paste", FALSE);
441
menu_shapes_selected (0);
443
menu_set_zoom_sensitivity (1);