Freeciv-3.3
Loading...
Searching...
No Matches
menu.c
Go to the documentation of this file.
1/***********************************************************************
2 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12***********************************************************************/
13
14#ifdef HAVE_CONFIG_H
15#include <fc_config.h>
16#endif
17
18#include <stdlib.h>
19
20#include <gtk/gtk.h>
21
22/* utility */
23#include "fcintl.h"
24#include "log.h"
25#include "shared.h"
26#include "support.h"
27
28/* common */
29#include "game.h"
30#include "government.h"
31#include "road.h"
32#include "unit.h"
33
34/* client */
35#include "audio.h"
36#include "client_main.h"
37#include "clinet.h"
38#include "connectdlg_common.h"
39#include "control.h"
40#include "mapview_common.h"
41#include "options.h"
42#include "tilespec.h"
43#include "zoom.h"
44
45/* client/gui-gtk-4.0 */
46#include "chatline.h"
47#include "cityrep.h"
48#include "dialogs.h"
49#include "editgui.h"
50#include "editprop.h"
51#include "finddlg.h"
52#include "gamedlgs.h"
53#include "gotodlg.h"
54#include "gui_main.h"
55#include "gui_stuff.h"
56#include "helpdlg.h"
57#include "infradlg.h"
58#include "luaconsole.h"
59#include "mapctrl.h" /* center_on_unit(). */
60#include "messagedlg.h"
61#include "messagewin.h"
62#include "optiondlg.h"
63#include "pages.h"
64#include "plrdlg.h"
65#include "rallypointdlg.h"
66#include "ratesdlg.h"
67#include "repodlgs.h"
68#include "sprite.h"
69#include "spaceshipdlg.h"
70#include "unitselect.h"
71#include "wldlg.h"
72
73#include "menu.h"
74
76static bool menus_built = FALSE;
77
79
81
82enum menu_entry_grouping { MGROUP_SAFE = 0B00000001,
83 MGROUP_EDIT = 0B00000010,
84 MGROUP_PLAYING = 0B00000100,
85 MGROUP_UNIT = 0B00001000,
86 MGROUP_PLAYER = 0B00010000,
87 MGROUP_CHAR = 0B00100000,
88 MGROUP_ALL = 0B11111111 };
89
97
98struct menu_entry_info {
99 const char *key;
100 const char *name;
101 const char *action;
102 const char *accl;
104 void (*toggle)(GSimpleAction *act, GVariant *value, gpointer data);
105 bool state; /* Only for toggle actions */
106};
107
110static GMenuItem *create_toggle_menu_item_for_key(const char *key);
111
112/* Menu entry callbacks */
114 GVariant *parameter,
115 gpointer data);
117 GVariant *parameter,
118 gpointer data);
120 GVariant *parameter,
121 gpointer data);
123 GVariant *parameter,
124 gpointer data);
126 GVariant *parameter,
127 gpointer data);
129 GVariant *parameter,
130 gpointer data);
132 GVariant *parameter,
133 gpointer data);
135 GVariant *parameter,
136 gpointer data);
138 GVariant *parameter,
139 gpointer data);
140
141#ifdef FREECIV_DEBUG
143 GVariant *parameter,
144 gpointer data);
145#endif /* FREECIV_DEBUG */
146
148 GVariant *parameter,
149 gpointer data);
151 GVariant *parameter,
152 gpointer data);
154 GVariant *parameter,
155 gpointer data);
157 GVariant *parameter,
158 gpointer data);
160 GVariant *parameter,
161 gpointer data);
163 GVariant *parameter,
164 gpointer data);
166 GVariant *parameter,
167 gpointer data);
169 GVariant *parameter,
170 gpointer data);
172 GVariant *parameter,
173 gpointer data);
175 GVariant *parameter,
176 gpointer data);
178 GVariant *parameter,
179 gpointer data);
181 GVariant *parameter,
182 gpointer data);
184 GVariant *parameter,
185 gpointer data);
187 GVariant *parameter,
188 gpointer data);
190 GVariant *parameter,
191 gpointer data);
193 GVariant *parameter,
194 gpointer data);
196 GVariant *parameter,
197 gpointer data);
199 GVariant *parameter,
200 gpointer data);
202 GVariant *parameter,
203 gpointer data);
205 GVariant *parameter,
206 gpointer data);
208 GVariant *parameter,
209 gpointer data);
211 GVariant *parameter,
212 gpointer data);
214 GVariant *parameter,
215 gpointer data);
217 GVariant *parameter,
218 gpointer data);
220 GVariant *parameter,
221 gpointer data);
223 GVariant *parameter,
224 gpointer data);
226 GVariant *parameter,
227 gpointer data);
229 GVariant *parameter,
230 gpointer data);
232 GVariant *parameter,
233 gpointer data);
235 GVariant *parameter,
236 gpointer data);
238 GVariant *parameter,
239 gpointer data);
241 GVariant *parameter,
242 gpointer data);
244 GVariant *parameter,
245 gpointer data);
247 GVariant *parameter,
248 gpointer data);
250 GVariant *parameter,
251 gpointer data);
253 GVariant *parameter,
254 gpointer data);
256 GVariant *parameter,
257 gpointer data);
259 GVariant *parameter,
260 gpointer data);
262 GVariant *parameter,
263 gpointer data);
265 GVariant *parameter,
266 gpointer data);
268 GVariant *parameter,
269 gpointer data);
271 GVariant *parameter,
272 gpointer data);
274 GVariant *parameter,
275 gpointer data);
277 GVariant *parameter,
278 gpointer data);
280 GVariant *parameter,
281 gpointer data);
283 GVariant *parameter,
284 gpointer data);
286 GVariant *parameter,
287 gpointer data);
289 GVariant *parameter,
290 gpointer data);
292 GVariant *parameter,
293 gpointer data);
295 GVariant *parameter,
296 gpointer data);
298 GVariant *parameter,
299 gpointer data);
301 GVariant *parameter,
302 gpointer data);
304 GVariant *parameter,
305 gpointer data);
307 GVariant *parameter,
308 gpointer data);
310 GVariant *parameter,
311 gpointer data);
313 GVariant *parameter,
314 gpointer data);
316 GVariant *parameter,
317 gpointer data);
319 GVariant *parameter,
320 gpointer data);
322 GVariant *parameter,
323 gpointer data);
325 GVariant *parameter,
326 gpointer data);
328 GVariant *parameter,
329 gpointer data);
331 GVariant *parameter,
332 gpointer data);
334 GVariant *parameter,
335 gpointer data);
337 GVariant *parameter,
338 gpointer data);
340 GVariant *parameter,
341 gpointer data);
343 GVariant *parameter,
344 gpointer data);
346 GVariant *parameter,
347 gpointer data);
349 GVariant *parameter,
350 gpointer data);
352 GVariant *parameter,
353 gpointer data);
355 GVariant *parameter,
356 gpointer data);
358 GVariant *parameter,
359 gpointer data);
361 GVariant *parameter,
362 gpointer data);
364 GVariant *parameter,
365 gpointer data);
367 GVariant *parameter,
368 gpointer data);
370 GVariant *parameter,
371 gpointer data);
373 GVariant *parameter,
374 gpointer data);
376 GVariant *parameter,
377 gpointer data);
379 GVariant *parameter,
380 gpointer data);
382 GVariant *parameter,
383 gpointer data);
385 GVariant *parameter,
386 gpointer data);
388 GVariant *parameter,
389 gpointer data);
391 GVariant *parameter,
392 gpointer data);
394 GVariant *parameter,
395 gpointer data);
397 GVariant *parameter,
398 gpointer data);
400 GVariant *parameter,
401 gpointer data);
402
404 GVariant *parameter,
405 gpointer data);
407 GVariant *parameter,
408 gpointer data);
410 GVariant *parameter,
411 gpointer data);
413 GVariant *parameter,
414 gpointer data);
416 GVariant *parameter,
417 gpointer data);
419 GVariant *parameter,
420 gpointer data);
422 GVariant *parameter,
423 gpointer data);
425 GVariant *parameter,
426 gpointer data);
428 GVariant *parameter,
429 gpointer data);
431 GVariant *parameter,
432 gpointer data);
434 GVariant *parameter,
435 gpointer data);
437 GVariant *parameter,
438 gpointer data);
440 GVariant *parameter,
441 gpointer data);
443 GVariant *parameter,
444 gpointer data);
446 GVariant *parameter,
447 gpointer data);
449 GVariant *parameter,
450 gpointer data);
452 GVariant *parameter,
453 gpointer data);
455 GVariant *parameter,
456 gpointer data);
458 GVariant *parameter,
459 gpointer data);
461 GVariant *parameter,
462 gpointer data);
464 GVariant *parameter,
465 gpointer data);
467 GVariant *parameter,
468 gpointer data);
470 GVariant *parameter,
471 gpointer data);
473 GVariant *parameter,
474 gpointer data);
476 GVariant *parameter,
477 gpointer data);
479 GVariant *parameter,
480 gpointer data);
482 GVariant *parameter,
483 gpointer data);
485 GVariant *parameter,
486 gpointer data);
488 GVariant *parameter,
489 gpointer data);
491 GVariant *parameter,
492 gpointer data);
494 GVariant *parameter,
495 gpointer data);
497 GVariant *parameter,
498 gpointer data);
500 GVariant *parameter,
501 gpointer data);
502
504 GVariant *parameter,
505 gpointer data);
507 GVariant *parameter,
508 gpointer data);
510 GVariant *parameter,
511 gpointer data);
513 GVariant *parameter,
514 gpointer data);
516 GVariant *parameter,
517 gpointer data);
519 GVariant *parameter,
520 gpointer data);
522 GVariant *parameter,
523 gpointer data);
525 GVariant *parameter,
526 gpointer data);
528 GVariant *parameter,
529 gpointer data);
531 GVariant *parameter,
532 gpointer data);
534 GVariant *parameter,
535 gpointer data);
537 GVariant *parameter,
538 gpointer data);
540 GVariant *parameter,
541 gpointer data);
543 GVariant *parameter,
544 gpointer data);
545
547 GVariant *parameter,
548 gpointer data);
550 GVariant *parameter,
551 gpointer data);
553 GVariant *parameter,
554 gpointer data);
555
557{
558 /* Game menu */
559 { "CLEAR_CHAT_LOGS", N_("_Clear Chat Log"),
560 "clear_chat", NULL, MGROUP_SAFE,
561 NULL, FALSE },
562 { "SAVE_CHAT_LOGS", N_("Save Chat _Log"),
563 "save_chat", NULL, MGROUP_SAFE,
564 NULL, FALSE },
565
566 { "LOCAL_OPTIONS", N_("_Local Client"),
567 "local_options", NULL, MGROUP_SAFE,
568 NULL, FALSE },
569 { "MESSAGE_OPTIONS", N_("_Message"),
570 "message_options", NULL, MGROUP_SAFE,
571 NULL, FALSE },
572 { "SERVER_OPTIONS", N_("_Remote Server"),
573 "server_options", NULL, MGROUP_SAFE,
574 NULL, FALSE },
575 { "SAVE_OPTIONS", N_("Save Options _Now"),
576 "save_options", NULL, MGROUP_SAFE,
577 NULL, FALSE },
578 { "SAVE_OPTIONS_ON_EXIT", N_("Save Options on _Exit"),
579 "save_options_on_exit", NULL, MGROUP_SAFE,
581
582#ifdef FREECIV_DEBUG
583 { "RELOAD_TILESET", N_("_Reload Tileset"),
584 "reload_tileset", ACCL_MOD_KEY"<alt>r", MGROUP_SAFE,
585 NULL, FALSE },
586#endif /* FREECIV_DEBUG */
587
588 { "GAME_SAVE", N_("_Save Game"),
589 "game_save", ACCL_MOD_KEY"s", MGROUP_SAFE,
590 NULL, FALSE },
591 { "GAME_SAVE_AS", N_("Save Game _As..."),
592 "game_save_as", NULL, MGROUP_SAFE,
593 NULL, FALSE },
594 { "MAPIMG_SAVE", N_("Save Map _Image"),
595 "save_mapimg", NULL, MGROUP_SAFE,
596 NULL, FALSE },
597 { "MAPIMG_SAVE_AS", N_("Save _Map Image As..."),
598 "save_mapimg_as", NULL, MGROUP_SAFE,
599 NULL, FALSE },
600 { "VOLUME_UP", N_("Volume Up"),
601 "volume_up", "greater", MGROUP_SAFE | MGROUP_CHAR,
602 NULL, FALSE },
603 { "VOLUME_DOWN", N_("Volume Down"),
604 "volume_down", "less", MGROUP_SAFE | MGROUP_CHAR,
605 NULL, FALSE },
606 { "LEAVE", N_("_Leave"),
607 "leave", NULL, MGROUP_SAFE,
608 NULL, FALSE },
609 { "QUIT", N_("_Quit"),
610 "quit", ACCL_MOD_KEY"q", MGROUP_SAFE,
611 NULL, FALSE },
612
613 /* Edit menu */
614 { "FIND_CITY", N_("_Find City"),
615 "find_city", ACCL_MOD_KEY"f", MGROUP_SAFE,
616 NULL, FALSE },
617 { "WORKLISTS", N_("Work_lists"),
618 "worklists", ACCL_MOD_KEY"<shift>l", MGROUP_SAFE,
619 NULL, FALSE },
620 { "RALLY_DLG", N_("Rally point dialog"),
621 "rally_dlg", ACCL_MOD_KEY"<shift>r", MGROUP_SAFE,
622 NULL, FALSE },
623 { "INFRA_DLG", N_("Infra dialog"),
624 "infra_dlg", ACCL_MOD_KEY"<shift>f", MGROUP_SAFE,
625 NULL, FALSE },
626 { "EDIT_MODE", N_("_Editing Mode"),
627 "edit_mode", ACCL_MOD_KEY"e", MGROUP_SAFE,
629 { "TOGGLE_FOG", N_("Toggle Fog of _War"),
630 "toggle_fog", ACCL_MOD_KEY"<shift>w", MGROUP_EDIT,
632 { "SCENARIO_PROPERTIES", N_("Game/Scenario Properties"),
633 "scenario_props", NULL, MGROUP_EDIT,
634 NULL, FALSE },
635 { "SCENARIO_SAVE", N_("Save Scenario"),
636 "scenario_save", NULL, MGROUP_EDIT,
637 NULL, FALSE },
638 { "CLIENT_LUA_SCRIPT", N_("Client _Lua Script"),
639 "lua_script", NULL, MGROUP_SAFE,
640 NULL, FALSE },
641
642 /* View menu */
643 { "SHOW_CITY_OUTLINES", N_("Cit_y Outlines"),
644 "show_city_outlines", ACCL_MOD_KEY"y", MGROUP_SAFE,
646 { "SHOW_CITY_OUTPUT", N_("City Output"),
647 "show_city_output", ACCL_MOD_KEY"v", MGROUP_SAFE,
649 { "SHOW_MAP_GRID", N_("Map _Grid"),
650 "show_map_grid", ACCL_MOD_KEY"g", MGROUP_SAFE,
652 { "SHOW_NAT_BORDERS", N_("National _Borders"),
653 "show_nat_borders", ACCL_MOD_KEY"b", MGROUP_SAFE,
655 { "SHOW_NATIVE_TILES", N_("Native Tiles"),
656 "show_native_tiles", ACCL_MOD_KEY"<shift>n", MGROUP_SAFE,
658 { "SHOW_CITY_FULL_BAR", N_("City Full Bar"),
659 "show_city_full_bar", NULL, MGROUP_SAFE,
661 { "SHOW_CITY_NAMES", N_("City _Names"),
662 "show_city_names", ACCL_MOD_KEY"n", MGROUP_SAFE,
664 { "SHOW_CITY_GROWTH", N_("City G_rowth"),
665 "show_city_growth", ACCL_MOD_KEY"o", MGROUP_SAFE,
667 { "SHOW_CITY_PRODUCTIONS", N_("City _Production"),
668 "show_city_productions", ACCL_MOD_KEY"p", MGROUP_SAFE,
670 { "SHOW_CITY_BUY_COST", N_("City Buy Cost"),
671 "show_city_buy_cost", NULL, MGROUP_SAFE,
673 { "SHOW_CITY_TRADE_ROUTES", N_("City Tra_deroutes"),
674 "show_trade_routes", ACCL_MOD_KEY"d", MGROUP_SAFE,
676 { "SHOW_TERRAIN", N_("_Terrain"),
677 "show_terrain", NULL, MGROUP_SAFE,
679 { "SHOW_COASTLINE", N_("C_oastline"),
680 "show_coastline", NULL, MGROUP_SAFE,
682 { "SHOW_PATHS", N_("_Paths"),
683 "show_paths", NULL, MGROUP_SAFE,
685 { "SHOW_IRRIGATION", N_("_Irrigation"),
686 "show_irrigation", NULL, MGROUP_SAFE,
688 { "SHOW_MINES", N_("_Mines"),
689 "show_mines", NULL, MGROUP_SAFE,
691 { "SHOW_BASES", N_("_Bases"),
692 "show_bases", NULL, MGROUP_SAFE,
694 { "SHOW_RESOURCES", N_("_Resources"),
695 "show_resources", NULL, MGROUP_SAFE,
697 { "SHOW_HUTS", N_("_Huts"),
698 "show_huts", NULL, MGROUP_SAFE,
700 { "SHOW_POLLUTION", N_("Po_llution & Fallout"),
701 "show_pollution", NULL, MGROUP_SAFE,
703 { "SHOW_CITIES", N_("Citi_es"),
704 "show_cities", NULL, MGROUP_SAFE,
706 { "SHOW_UNITS", N_("_Units"),
707 "show_units", NULL, MGROUP_SAFE,
709 { "SHOW_UNIT_SOLID_BG", N_("Unit Solid Background"),
710 "show_unit_solid_bg", NULL, MGROUP_SAFE,
712 { "SHOW_UNIT_SHIELDS", N_("Unit shields"),
713 "show_unit_shields", NULL, MGROUP_SAFE,
715 { "SHOW_STACK_SIZE", N_("Unit Stack Size"),
716 "show_stack_size", ACCL_MOD_KEY"plus", MGROUP_SAFE,
718 { "SHOW_FOCUS_UNIT", N_("Focu_s Unit"),
719 "show_focus_unit", NULL, MGROUP_SAFE,
721 { "SHOW_FOG_OF_WAR", N_("Fog of _War"),
722 "show_fow", NULL, MGROUP_SAFE,
724
725 { "FULL_SCREEN", N_("_Fullscreen"),
726 "full_screen", ACCL_MOD_KEY"F11", MGROUP_SAFE,
728 { "CENTER_VIEW", N_("_Center View"),
729 "center_view", "c", MGROUP_PLAYER | MGROUP_CHAR,
730 NULL, FALSE },
731 { "ZOOM_IN", N_("_Zoom in"),
732 "zoom_in", "plus", MGROUP_PLAYER,
733 NULL, FALSE },
734 { "ZOOM_OUT", N_("_Zoom out"),
735 "zoom_out", "minus", MGROUP_PLAYER,
736 NULL, FALSE },
737
738 /* Select menu */
739 { "SELECT_SINGLE", N_("_Single Unit (Unselect Others)"),
740 "select_single", "z", MGROUP_UNIT | MGROUP_CHAR,
741 NULL, FALSE },
742 { "SELECT_ALL_ON_TILE", N_("_All On Tile"),
743 "select_all_tile", "v", MGROUP_UNIT | MGROUP_CHAR,
744 NULL, FALSE },
745 { "SELECT_SAME_TYPE_TILE", N_("Same Type on _Tile"),
746 "select_same_type_tile", "<shift>v", MGROUP_UNIT | MGROUP_CHAR,
747 NULL, FALSE },
748 { "SELECT_SAME_TYPE_CONT", N_("Same Type on _Continent"),
749 "select_same_type_cont", "<shift>c", MGROUP_UNIT | MGROUP_CHAR,
750 NULL, FALSE },
751 { "SELECT_SAME_TYPE", N_("Same Type _Everywhere"),
752 "select_same_type", "<shift>x", MGROUP_UNIT | MGROUP_CHAR,
753 NULL, FALSE },
754 { "SELECT_DLG", N_("Unit Selection Dialog"),
755 "select_dlg", NULL, MGROUP_UNIT,
756 NULL, FALSE },
757
758 /* Unit menu */
759 { "UNIT_GOTO", N_("_Go to"),
760 "goto", "g", MGROUP_UNIT | MGROUP_CHAR,
761 NULL, FALSE },
762 { "UNIT_GOTO_CITY", N_("Go _to/Airlift to City..."),
763 "goto_city", "t", MGROUP_UNIT | MGROUP_CHAR,
764 NULL, FALSE },
765 { "UNIT_RETURN", N_("_Return to Nearest City"),
766 "return", "<shift>g", MGROUP_UNIT | MGROUP_CHAR,
767 NULL, FALSE },
768 { "UNIT_EXPLORE", N_("Auto E_xplore"),
769 "explore", "x", MGROUP_UNIT | MGROUP_CHAR,
770 NULL, FALSE },
771 { "UNIT_PATROL", N_("_Patrol"),
772 "patrol", "q", MGROUP_UNIT | MGROUP_CHAR,
773 NULL, FALSE },
774 { "UNIT_TELEPORT", N_("_Teleport"),
775 "teleport", NULL, MGROUP_UNIT,
776 NULL, FALSE },
777 { "UNIT_SENTRY", N_("_Sentry"),
778 "sentry", "s", MGROUP_UNIT | MGROUP_CHAR,
779 NULL, FALSE },
780 { "UNSENTRY_ALL", N_("Uns_entry All On Tile"),
781 "unsentry_all", "<shift>s", MGROUP_UNIT | MGROUP_CHAR,
782 NULL, FALSE },
783 { "UNIT_BOARD", N_("_Load"),
784 "board", "l", MGROUP_UNIT | MGROUP_CHAR,
785 NULL, FALSE },
786 { "UNIT_DEBOARD", N_("_Unload"),
787 "deboard", "u", MGROUP_UNIT | MGROUP_CHAR,
788 NULL, FALSE },
789 { "UNIT_UNLOAD_TRANSPORTER", N_("U_nload All From Transporter"),
790 "unload_transporter", "<shift>t", MGROUP_UNIT | MGROUP_CHAR,
791 NULL, FALSE },
792 { "UNIT_HOMECITY", N_("Set _Home City"),
793 "homecity", "h", MGROUP_UNIT | MGROUP_CHAR,
794 NULL, FALSE },
795 { "UNIT_UPGRADE", N_("Upgr_ade"),
796 "upgrade", "<shift>u", MGROUP_UNIT | MGROUP_CHAR,
797 NULL, FALSE },
798 { "UNIT_CONVERT", N_("C_onvert"),
799 "convert", "<shift>o", MGROUP_UNIT | MGROUP_CHAR,
800 NULL, FALSE },
801 { "UNIT_DISBAND", N_("_Disband"),
802 "disband", "<shift>d", MGROUP_UNIT | MGROUP_CHAR,
803 NULL, FALSE },
804 { "DO_ACTION", N_("_Do..."),
805 "do_action", "d", MGROUP_UNIT | MGROUP_CHAR,
806 NULL, FALSE },
807 { "UNIT_WAIT", N_("_Wait"),
808 "wait", "w", MGROUP_UNIT | MGROUP_CHAR,
809 NULL, FALSE },
810 { "UNIT_DONE", N_("_Done"),
811 "done", "space", MGROUP_UNIT | MGROUP_CHAR,
812 NULL, FALSE },
813
814 /* Work menu */
815 { "BUILD_CITY", N_("_Build City"),
816 "build_city", "b", MGROUP_UNIT | MGROUP_CHAR,
817 NULL, FALSE },
818 { "AUTO_WORKER", N_("_Auto Worker"),
819 "auto_work", "a", MGROUP_UNIT | MGROUP_CHAR,
820 NULL, FALSE },
821 { "BUILD_ROAD", N_("Build _Road"),
822 "build_road", "r", MGROUP_UNIT | MGROUP_CHAR,
823 NULL, FALSE },
824 { "BUILD_IRRIGATION", N_("Build _Irrigation"),
825 "build_irrigation", "i", MGROUP_UNIT | MGROUP_CHAR,
826 NULL, FALSE },
827 { "BUILD_MINE", N_("Build _Mine"),
828 "build_mine", "m", MGROUP_UNIT | MGROUP_CHAR,
829 NULL, FALSE },
830 { "CULTIVATE", N_("Cultivate"),
831 "cultivate", "<shift>i", MGROUP_UNIT | MGROUP_CHAR,
832 NULL, FALSE },
833 { "PLANT", N_("Plant"),
834 "plant", "<shift>m", MGROUP_UNIT | MGROUP_CHAR,
835 NULL, FALSE },
836 { "TRANSFORM_TERRAIN", N_("Transf_orm Terrain"),
837 "transform_terrain", "o", MGROUP_UNIT | MGROUP_CHAR,
838 NULL, FALSE },
839 { "CONNECT_ROAD", N_("Connect With Roa_d"),
840 "connect_road", ACCL_MOD_KEY"r", MGROUP_UNIT,
841 NULL, FALSE },
842 { "CONNECT_RAIL", N_("Connect With Rai_l"),
843 "connect_rail", ACCL_MOD_KEY"l", MGROUP_UNIT,
844 NULL, FALSE },
845 { "CONNECT_MAGLEV", N_("Connect With _Maglev"),
846 "connect_maglev", ACCL_MOD_KEY"m", MGROUP_UNIT,
847 NULL, FALSE },
848 { "CONNECT_IRRIGATION", N_("Connect With Irri_gation"),
849 "connect_irrigation", ACCL_MOD_KEY"i", MGROUP_UNIT,
850 NULL, FALSE },
851 { "CLEAN", N_("_Clean"),
852 "clean", "p", MGROUP_UNIT | MGROUP_CHAR,
853 NULL, FALSE },
854
855 /* Combat menu */
856 { "FORTIFY", N_("Fortify"),
857 "fortify", "f", MGROUP_UNIT | MGROUP_CHAR,
858 NULL, FALSE },
859 { "BUILD_FORTRESS", N_("Build Fortress"),
860 "build_base_fortress", "<shift>f", MGROUP_UNIT | MGROUP_CHAR,
861 NULL, FALSE },
862 { "BUILD_AIRBASE", N_("Build Airbase"),
863 "build_base_airbase", "<shift>e", MGROUP_UNIT | MGROUP_CHAR,
864 NULL, FALSE },
865 { "PARADROP", N_("P_aradrop"),
866 "paradrop", "j", MGROUP_UNIT | MGROUP_CHAR,
867 NULL, FALSE },
868 { "PILLAGE", N_("_Pillage"),
869 "pillage", "<shift>p", MGROUP_UNIT | MGROUP_CHAR,
870 NULL, FALSE },
871
872 /* Civilization */
873 { "MAP_VIEW", N_("?noun:_View"),
874 "map_view", "F1", MGROUP_SAFE,
875 NULL, FALSE },
876 { "REPORT_UNITS", N_("_Units"),
877 "report_units", "F2", MGROUP_SAFE,
878 NULL, FALSE },
879 { "REPORT_NATIONS", N_("_Nations"),
880 "report_nations", "F3", MGROUP_SAFE,
881 NULL, FALSE },
882 { "REPORT_CITIES", N_("_Cities"),
883 "report_cities", "F4", MGROUP_SAFE,
884 NULL, FALSE },
885 { "REPORT_ECONOMY", N_("_Economy"),
886 "report_economy", "F5", MGROUP_PLAYER,
887 NULL, FALSE },
888 { "REPORT_RESEARCH", N_("_Research"),
889 "report_research", "F6", MGROUP_PLAYER,
890 NULL, FALSE },
891
892 { "TAX_RATES", N_("_Tax Rates..."),
893 "tax_rates", ACCL_MOD_KEY"t", MGROUP_PLAYING,
894 NULL, FALSE },
895 { "POLICIES", N_("_Policies..."),
896 "policies", "<shift><ctrl>p", MGROUP_PLAYER,
897 NULL, FALSE },
898 { "START_REVOLUTION", N_("_Revolution..."),
899 "revolution", "<shift><ctrl>g", MGROUP_PLAYING,
900 NULL, FALSE },
901
902 { "REPORT_WOW", N_("_Wonders of the World"),
903 "report_wow", "F7", MGROUP_SAFE,
904 NULL, FALSE },
905 { "REPORT_TOP_CITIES", N_("Top Cities"),
906 "report_top_cities", "F8", MGROUP_SAFE,
907 NULL, FALSE },
908 { "REPORT_MESSAGES", N_("_Messages"),
909 "report_messages", "F9", MGROUP_SAFE,
910 NULL, FALSE },
911 { "REPORT_DEMOGRAPHIC", N_("_Demographics"),
912 "report_demographics", "F11", MGROUP_SAFE,
913 NULL, FALSE },
914 { "REPORT_SPACESHIP", N_("_Spaceship"),
915 "report_spaceship", "F12", MGROUP_SAFE,
916 NULL, FALSE },
917 { "REPORT_ACHIEVEMENTS", N_("_Achievements"),
918 "report_achievements", "asterisk", MGROUP_SAFE | MGROUP_CHAR,
919 NULL, FALSE },
920
921 /* Battle Groups menu */
922 /* Note that user view: 1 - 4, internal: 0 - 3 */
923 { "BG_SELECT_1", N_("Select Battle Group 1"),
924 "bg_select_0", "<shift>F1", MGROUP_PLAYING,
925 NULL, FALSE },
926 { "BG_ASSIGN_1", N_("Assign Battle Group 1"),
927 "bg_assign_0", ACCL_MOD_KEY"F1", MGROUP_PLAYING,
928 NULL, FALSE },
929 { "BG_APPEND_1", N_("Append to Battle Group 1"),
930 "bg_append_0", "<shift><ctrl>F1", MGROUP_PLAYING,
931 NULL, FALSE },
932 { "BG_SELECT_2", N_("Select Battle Group 2"),
933 "bg_select_1", "<shift>F2", MGROUP_PLAYING,
934 NULL, FALSE },
935 { "BG_ASSIGN_2", N_("Assign Battle Group 2"),
936 "bg_assign_1", ACCL_MOD_KEY"F2", MGROUP_PLAYING,
937 NULL, FALSE },
938 { "BG_APPEND_2", N_("Append to Battle Group 2"),
939 "bg_append_1", "<shift><ctrl>F2", MGROUP_PLAYING,
940 NULL, FALSE },
941 { "BG_SELECT_3", N_("Select Battle Group 3"),
942 "bg_select_2", "<shift>F3", MGROUP_PLAYING,
943 NULL, FALSE },
944 { "BG_ASSIGN_3", N_("Assign Battle Group 3"),
945 "bg_assign_2", ACCL_MOD_KEY"F3", MGROUP_PLAYING,
946 NULL, FALSE },
947 { "BG_APPEND_3", N_("Append to Battle Group 3"),
948 "bg_append_2", "<shift><ctrl>F3", MGROUP_PLAYING,
949 NULL, FALSE },
950 { "BG_SELECT_4", N_("Select Battle Group 4"),
951 "bg_select_3", "<shift>F4", MGROUP_PLAYING,
952 NULL, FALSE },
953 { "BG_ASSIGN_4", N_("Assign Battle Group 4"),
954 "bg_assign_3", ACCL_MOD_KEY"F4", MGROUP_PLAYING,
955 NULL, FALSE },
956 { "BG_APPEND_4", N_("Append to Battle Group 4"),
957 "bg_append_3", "<shift><ctrl>F4", MGROUP_PLAYING,
958 NULL, FALSE },
959
960 /* Help menu */
961 { "HELP_OVERVIEW", N_("?help:Overview"),
962 "help_overview", NULL, MGROUP_SAFE,
963 NULL, FALSE },
964 { "HELP_PLAYING", N_("Strategy and Tactics"),
965 "help_playing", NULL, MGROUP_SAFE,
966 NULL, FALSE },
967 { "HELP_POLICIES", N_("Policies"),
968 "help_policies", NULL, MGROUP_SAFE,
969 NULL, FALSE },
970 { "HELP_TERRAIN", N_("Terrain"),
971 "help_terrains", NULL, MGROUP_SAFE,
972 NULL, FALSE },
973 { "HELP_ECONOMY", N_("Economy"),
974 "help_economy", NULL, MGROUP_SAFE,
975 NULL, FALSE },
976 { "HELP_CITIES", N_("Cities"),
977 "help_cities", NULL, MGROUP_SAFE,
978 NULL, FALSE },
979 { "HELP_IMPROVEMENTS", N_("City Improvements"),
980 "help_improvements", NULL, MGROUP_SAFE,
981 NULL, FALSE },
982 { "HELP_WONDERS", N_("Wonders of the World"),
983 "help_wonders", NULL, MGROUP_SAFE,
984 NULL, FALSE },
985 { "HELP_UNITS", N_("Units"),
986 "help_units", NULL, MGROUP_SAFE,
987 NULL, FALSE },
988 { "HELP_COMBAT", N_("Combat"),
989 "help_combat", NULL, MGROUP_SAFE,
990 NULL, FALSE },
991 { "HELP_COUNTERS", N_("Counters"),
992 "help_counters", NULL, MGROUP_SAFE,
993 NULL, FALSE },
994 { "HELP_ZOC", N_("Zones of Control"),
995 "help_zoc", NULL, MGROUP_SAFE,
996 NULL, FALSE },
997 { "HELP_GOVERNMENT", N_("Government"),
998 "help_government", NULL, MGROUP_SAFE,
999 NULL, FALSE },
1000 { "HELP_DIPLOMACY", N_("Diplomacy"),
1001 "help_diplomacy", NULL, MGROUP_SAFE,
1002 NULL, FALSE },
1003 { "HELP_TECH", N_("Technology"),
1004 "help_tech", NULL, MGROUP_SAFE,
1005 NULL, FALSE },
1006 { "HELP_SPACE_RACE", N_("Space Race"),
1007 "help_space_race", NULL, MGROUP_SAFE,
1008 NULL, FALSE },
1009 { "HELP_RULESET", N_("About Current Ruleset"),
1010 "help_ruleset", NULL, MGROUP_SAFE,
1011 NULL, FALSE },
1012 { "HELP_TILESET", N_("About Current Tileset"),
1013 "help_tileset", NULL, MGROUP_SAFE,
1014 NULL, FALSE },
1015 { "HELP_MUSICSET", N_("About Current Musicset"),
1016 "help_musicset", NULL, MGROUP_SAFE,
1017 NULL, FALSE },
1018 { "HELP_NATIONS", N_("About Nations"),
1019 "help_nations", NULL, MGROUP_SAFE,
1020 NULL, FALSE },
1021 { "HELP_CONNECTING", N_("Connecting"),
1022 "help_connecting", NULL, MGROUP_SAFE,
1023 NULL, FALSE },
1024 { "HELP_CONTROLS", N_("Controls"),
1025 "help_controls", NULL, MGROUP_SAFE,
1026 NULL, FALSE },
1027 { "HELP_GOVERNOR", N_("Citizen Governor"),
1028 "help_governor", NULL, MGROUP_SAFE,
1029 NULL, FALSE },
1030 { "HELP_CHATLINE", N_("Chatline"),
1031 "help_chatline", NULL, MGROUP_SAFE,
1032 NULL, FALSE },
1033 { "HELP_WORKLIST_EDITOR", N_("Worklist Editor"),
1034 "help_worklist_editor", NULL, MGROUP_SAFE,
1035 NULL, FALSE },
1036 { "HELP_LANGUAGES", N_("Languages"),
1037 "help_languages", NULL, MGROUP_SAFE,
1038 NULL, FALSE },
1039 { "HELP_COPYING", N_("Copying"),
1040 "help_copying", NULL, MGROUP_SAFE,
1041 NULL, FALSE },
1042 { "HELP_ABOUT", N_("About Freeciv"),
1043 "help_about", NULL, MGROUP_SAFE,
1044 NULL, FALSE },
1045 { NULL }
1046};
1047
1048enum {
1078
1080 { "clear_chat", clear_chat_logs_callback },
1081 { "save_chat", save_chat_logs_callback },
1082 { "local_options", local_options_callback },
1083 { "message_options", message_options_callback },
1084 { "server_options", server_options_callback },
1085 { "save_options", save_options_callback },
1086
1087#ifdef FREECIV_DEBUG
1088 { "reload_tileset", reload_tileset_callback },
1089#endif /* FREECIV_DEBUG */
1090
1091 { "game_save", save_game_callback },
1092 { "game_save_as", save_game_as_callback },
1093 { "save_mapimg", save_mapimg_callback },
1094 { "save_mapimg_as", save_mapimg_as_callback },
1095 { "volume_up", volume_up_callback },
1096 { "volume_down", volume_down_callback },
1097 { "leave", leave_callback },
1098 { "quit", quit_callback },
1099
1100 { "find_city", find_city_callback },
1101 { "worklists", worklists_callback },
1102 { "rally_dlg", rally_dialog_callback },
1103 { "infra_dlg", infra_dialog_callback },
1104 { "scenario_props", scenario_properties_callback },
1105 { "scenario_save", save_scenario_callback },
1106 { "lua_script", client_lua_script_callback },
1107
1108 { "center_view", center_view_callback },
1109 { "zoom_in", zoom_in_callback },
1110 { "zoom_out", zoom_out_callback },
1111
1112 { "select_single", select_single_callback },
1113 { "select_all_tile", select_all_on_tile_callback },
1114 { "select_same_type_tile", select_same_type_tile_callback },
1115 { "select_same_type_cont", select_same_type_cont_callback },
1116 { "select_same_type", select_same_type_callback },
1117 { "select_dlg", select_dialog_callback },
1118
1119 { "goto", unit_goto_callback },
1120 { "goto_city", unit_goto_city_callback },
1121 { "return", unit_return_callback },
1122 { "explore", unit_explore_callback },
1123 { "patrol", unit_patrol_callback },
1124 { "teleport", unit_teleport_callback },
1125 { "sentry", unit_sentry_callback },
1126 { "unsentry_all", unsentry_all_callback },
1127 { "board", unit_board_callback },
1128 { "deboard", unit_deboard_callback },
1129 { "unload_transporter", unit_unload_transporter_callback },
1130 { "homecity", unit_homecity_callback },
1131 { "upgrade", unit_upgrade_callback },
1132 { "convert", unit_convert_callback },
1133 { "disband", unit_disband_callback },
1134 { "do_action", do_action_callback },
1135 { "wait", unit_wait_callback },
1136 { "done", unit_done_callback },
1137
1138 { "build_city", build_city_callback },
1139 { "auto_work", auto_work_callback },
1140 { "build_road", build_road_callback },
1141 { "build_irrigation", build_irrigation_callback },
1142 { "build_mine", build_mine_callback },
1143 { "cultivate", cultivate_callback },
1144 { "plant", plant_callback },
1145 { "transform_terrain", transform_terrain_callback },
1146 { "connect_road", connect_road_callback },
1147 { "connect_rail", connect_rail_callback },
1148 { "connect_maglev", connect_maglev_callback },
1149 { "connect_irrigation", connect_irrigation_callback },
1150 { "clean", clean_callback },
1151
1152 { "fortify", fortify_callback },
1153 { "build_base_fortress", build_fortress_callback },
1154 { "build_base_airbase", build_airbase_callback },
1155 { "paradrop", paradrop_callback },
1156 { "pillage", pillage_callback },
1157
1158 { "revolution", revolution_callback },
1159
1160 { "map_view", map_view_callback },
1161 { "report_units", report_units_callback },
1162 { "report_nations", report_nations_callback },
1163 { "report_cities", report_cities_callback },
1164 { "report_economy", report_economy_callback },
1165 { "report_research", report_research_callback },
1166 { "tax_rates", tax_rate_callback },
1167 { "policies", multiplier_callback },
1168 { "report_wow", report_wow_callback },
1169 { "report_top_cities", report_top_cities_callback },
1170 { "report_messages", report_messages_callback },
1171 { "report_demographics", report_demographic_callback },
1172 { "report_spaceship", report_spaceship_callback },
1173 { "report_achievements", report_achievements_callback },
1174
1175 { "help_overview", help_overview_callback },
1176 { "help_playing", help_playing_callback },
1177 { "help_policies", help_policies_callback },
1178 { "help_counters", help_counters_callback },
1179 { "help_terrains", help_terrain_callback },
1180 { "help_economy", help_economy_callback },
1181 { "help_cities", help_cities_callback },
1182 { "help_improvements", help_improvements_callback },
1183 { "help_wonders", help_wonders_callback },
1184 { "help_units", help_units_callback },
1185 { "help_combat", help_combat_callback },
1186 { "help_zoc", help_zoc_callback },
1187 { "help_government", help_government_callback },
1188 { "help_diplomacy", help_diplomacy_callback },
1189 { "help_tech", help_tech_callback },
1190 { "help_space_race", help_space_race_callback },
1191 { "help_ruleset", help_ruleset_callback },
1192 { "help_tileset", help_tileset_callback },
1193 { "help_musicset", help_musicset_callback },
1194 { "help_nations", help_nations_callback },
1195 { "help_connecting", help_connecting_callback },
1196 { "help_controls", help_controls_callback },
1197 { "help_governor", help_governor_callback },
1198 { "help_chatline", help_chatline_callback },
1199 { "help_worklist_editor", help_worklist_editor_callback },
1200 { "help_languages", help_language_callback },
1201 { "help_copying", help_copying_callback },
1202 { "help_about", help_about_callback }
1203};
1204
1205static struct menu_entry_info *menu_entry_info_find(const char *key);
1206
1207/************************************************************************/
1211 GVariant *parameter,
1212 gpointer data)
1213{
1215}
1216
1217/************************************************************************/
1221 GVariant *parameter,
1222 gpointer data)
1223{
1225}
1226
1227/************************************************************************/
1231 GVariant *parameter,
1232 gpointer data)
1233{
1234 option_dialog_popup(_("Set local options"), client_optset);
1235}
1236
1237/************************************************************************/
1241 GVariant *parameter,
1242 gpointer data)
1243{
1245}
1246
1247/************************************************************************/
1251 GVariant *parameter,
1252 gpointer data)
1253{
1254 option_dialog_popup(_("Game Settings"), server_optset);
1255}
1256
1257/************************************************************************/
1261 GVariant *parameter,
1262 gpointer data)
1263{
1265}
1266
1267/************************************************************************/
1271 GVariant *parameter,
1272 gpointer data)
1273{
1274 struct menu_entry_info *info = (struct menu_entry_info *)data;
1275
1276 info->state ^= 1;
1278
1280
1283}
1284
1285#ifdef FREECIV_DEBUG
1286/************************************************************************/
1290 GVariant *parameter,
1291 gpointer data)
1292{
1293 tilespec_reread(NULL, TRUE, 1.0);
1294}
1295#endif /* FREECIV_DEBUG */
1296
1297/************************************************************************/
1301 gpointer data)
1302{
1304}
1305
1306/************************************************************************/
1310 gpointer data)
1311{
1313}
1314
1315/************************************************************************/
1319 gpointer data)
1320{
1322}
1323
1324/************************************************************************/
1328 gpointer data)
1329{
1331}
1332
1333/************************************************************************/
1337static void leave_local_game_response(GtkWidget *dialog, gint response)
1338{
1340 if (response == GTK_RESPONSE_OK) {
1341 /* It might be killed already */
1342 if (client.conn.used) {
1343 /* It will also kill the server */
1345 }
1346 }
1347}
1348
1349/************************************************************************/
1353 GVariant *parameter,
1354 gpointer data)
1355{
1356 if (is_server_running()) {
1357 GtkWidget *dialog
1360 _("Leaving a local game will end it!"));
1361 setup_dialog(dialog, toplevel);
1362 g_signal_connect(dialog, "response",
1365 } else {
1367 }
1368}
1369
1370/************************************************************************/
1374 GVariant *parameter,
1375 gpointer data)
1376{
1377 struct option *poption = optset_option_by_name(client_optset, "sound_effects_volume");
1378
1382}
1383
1384/************************************************************************/
1388 GVariant *parameter,
1389 gpointer data)
1390{
1391 struct option *poption = optset_option_by_name(client_optset, "sound_effects_volume");
1392
1396}
1397
1398/************************************************************************/
1402 GVariant *parameter,
1403 gpointer data)
1404{
1406}
1407
1408/************************************************************************/
1412 GVariant *parameter,
1413 gpointer data)
1414{
1416}
1417
1418/************************************************************************/
1422 GVariant *parameter,
1423 gpointer data)
1424{
1426}
1427
1428/************************************************************************/
1432 GVariant *parameter, gpointer data)
1433{
1435}
1436
1437/************************************************************************/
1441 GVariant *parameter,
1442 gpointer data)
1443{
1445}
1446
1447/************************************************************************/
1460
1461/************************************************************************/
1465 GVariant *parameter,
1466 gpointer data)
1467{
1469}
1470
1471/************************************************************************/
1475 GVariant *parameter,
1476 gpointer data)
1477{
1479}
1480
1481/************************************************************************/
1485 GVariant *parameter,
1486 gpointer data)
1487{
1489}
1490
1491/************************************************************************/
1500
1501/************************************************************************/
1510
1511/************************************************************************/
1520
1521/************************************************************************/
1525 GVariant *parameter,
1526 gpointer data)
1527{
1529}
1530
1531/************************************************************************/
1541
1542/************************************************************************/
1551
1552/************************************************************************/
1556 GVariant *parameter,
1557 gpointer data)
1558{
1560}
1561
1562/************************************************************************/
1566 GVariant *parameter,
1567 gpointer data)
1568{
1570}
1571
1572/************************************************************************/
1576 GVariant *parameter,
1577 gpointer data)
1578{
1580}
1581
1582/************************************************************************/
1591
1592/************************************************************************/
1596 GVariant *parameter,
1597 gpointer data)
1598{
1600}
1601
1602/************************************************************************/
1606 GVariant *parameter,
1607 gpointer data)
1608{
1610}
1611
1612/************************************************************************/
1616 GVariant *parameter,
1617 gpointer data)
1618{
1620}
1621
1622/************************************************************************/
1626 GVariant *parameter,
1627 gpointer data)
1628{
1630}
1631
1632/************************************************************************/
1641
1642/************************************************************************/
1651
1652/************************************************************************/
1656 GVariant *parameter,
1657 gpointer data)
1658{
1660}
1661
1662/************************************************************************/
1671
1672/************************************************************************/
1676 GVariant *parameter,
1677 gpointer data)
1678{
1680}
1681
1682/************************************************************************/
1686 GVariant *parameter,
1687 gpointer data)
1688{
1690}
1691
1692/************************************************************************/
1701
1702/************************************************************************/
1706 GVariant *parameter,
1707 gpointer data)
1708{
1710}
1711
1712/************************************************************************/
1721
1722/************************************************************************/
1731
1732/************************************************************************/
1736 GVariant *parameter,
1737 gpointer data)
1738{
1740}
1741
1742/************************************************************************/
1751
1752/************************************************************************/
1761
1762/************************************************************************/
1771
1772/************************************************************************/
1776 GVariant *parameter,
1777 gpointer data)
1778{
1780}
1781
1782/************************************************************************/
1786 GVariant *parameter,
1787 gpointer data)
1788{
1790}
1791
1792/************************************************************************/
1796 GVariant *parameter,
1797 gpointer data)
1798{
1800
1801 /* Unreachable techs in reqtree on/off */
1803}
1804
1806 const char *menu_entry;
1807 bool *option;
1809};
1810
1812 { "SAVE_OPTIONS_ON_EXIT", &gui_options.save_options_on_exit, -1 },
1813 { "FULL_SCREEN", &(GUI_GTK_OPTION(fullscreen)), -1 },
1814 { "EDIT_MODE", &game.info.is_edit_mode, -1 },
1815 { "TOGGLE_FOG", &game.client.fog_of_war, -1 },
1816 { "SHOW_CITY_OUTLINES", &gui_options.draw_city_outlines, VMENU_CITY_OUTLINES },
1817 { "SHOW_CITY_OUTPUT", &gui_options.draw_city_output, VMENU_CITY_OUTPUT },
1818 { "SHOW_MAP_GRID", &gui_options.draw_map_grid, VMENU_MAP_GRID },
1819 { "SHOW_NAT_BORDERS", &gui_options.draw_borders, VMENU_NAT_BORDERS },
1820 { "SHOW_NATIVE_TILES", &gui_options.draw_native, VMENU_NATIVE_TILES },
1821 { "SHOW_CITY_FULL_BAR", &gui_options.draw_full_citybar, VMENU_CITY_FULL_BAR },
1822 { "SHOW_CITY_NAMES", &gui_options.draw_city_names, VMENU_CITY_NAMES },
1823 { "SHOW_CITY_GROWTH", &gui_options.draw_city_growth, VMENU_CITY_GROWTH },
1824 { "SHOW_CITY_PRODUCTIONS", &gui_options.draw_city_productions,
1826 { "SHOW_CITY_BUY_COST", &gui_options.draw_city_buycost, VMENU_CITY_BUY_COST },
1827 { "SHOW_CITY_TRADE_ROUTES", &gui_options.draw_city_trade_routes,
1829 { "SHOW_TERRAIN", &gui_options.draw_terrain, VMENU_TERRAIN },
1830 { "SHOW_COASTLINE", &gui_options.draw_coastline, VMENU_COASTLINE },
1831 { "SHOW_PATHS", &gui_options.draw_paths, VMENU_PATHS },
1832 { "SHOW_IRRIGATION", &gui_options.draw_irrigation, VMENU_IRRIGATION },
1833 { "SHOW_MINES", &gui_options.draw_mines, VMENU_MINES },
1834 { "SHOW_BASES", &gui_options.draw_fortress_airbase, VMENU_BASES },
1835 { "SHOW_RESOURCES", &gui_options.draw_specials, VMENU_RESOURCES },
1836 { "SHOW_HUTS", &gui_options.draw_huts, VMENU_HUTS },
1837 { "SHOW_POLLUTION", &gui_options.draw_pollution, VMENU_POLLUTION },
1838 { "SHOW_CITIES", &gui_options.draw_cities, VMENU_CITIES },
1839 { "SHOW_UNITS", &gui_options.draw_units, VMENU_UNITS },
1840 { "SHOW_UNIT_SOLID_BG", &gui_options.solid_color_behind_units, VMENU_UNIT_SOLID_BG },
1841 { "SHOW_UNIT_SHIELDS", &gui_options.draw_unit_shields , VMENU_UNIT_SHIELDS },
1842 { "SHOW_STACK_SIZE", &gui_options.draw_unit_stack_size, VMENU_STACK_SIZE },
1843 { "SHOW_FOCUS_UNIT", &gui_options.draw_focus_unit, VMENU_FOCUS_UNIT },
1844 { "SHOW_FOG_OF_WAR", &gui_options.draw_fog_of_war, VMENU_FOW },
1845
1846 { NULL, NULL, -1 }
1847};
1848
1849/************************************************************************/
1852static void view_menu_item_toggle(void (*cb)(void),
1853 bool updt_sensitivity,
1854 gpointer data)
1855{
1856 int i;
1857 struct menu_entry_info *info = (struct menu_entry_info *)data;
1858
1859 info->state ^= 1;
1860
1861 cb();
1862
1863 if (updt_sensitivity) {
1865 }
1866
1867 /* TODO: Make the information available directly from menu_entry_info,
1868 * se we don't need to do this search for it */
1869 for (i = 0; meoms[i].menu_entry != NULL; i++) {
1870 if (!strcmp(meoms[i].menu_entry, info->key)) {
1871 g_menu_remove(view_menu, meoms[i].menu_pos);
1874 return;
1875 }
1876 }
1877}
1878
1879/************************************************************************/
1888
1889/************************************************************************/
1893 GVariant *parameter,
1894 gpointer data)
1895{
1897}
1898
1899/************************************************************************/
1907
1908/************************************************************************/
1917
1918/************************************************************************/
1922 GVariant *parameter,
1923 gpointer data)
1924{
1926}
1927
1928/************************************************************************/
1937
1938/************************************************************************/
1942 GVariant *parameter,
1943 gpointer data)
1944{
1946}
1947
1948/************************************************************************/
1952 GVariant *parameter,
1953 gpointer data)
1954{
1956}
1957
1958/************************************************************************/
1967
1968/************************************************************************/
1977
1978/************************************************************************/
1987
1988/************************************************************************/
1992 GVariant *parameter,
1993 gpointer data)
1994{
1996}
1997
1998/************************************************************************/
2002 GVariant *parameter,
2003 gpointer data)
2004{
2006}
2007
2008/************************************************************************/
2012 GVariant *parameter,
2013 gpointer data)
2014{
2016}
2017
2018/************************************************************************/
2022 GVariant *parameter,
2023 gpointer data)
2024{
2026}
2027
2028/************************************************************************/
2032 GVariant *parameter,
2033 gpointer data)
2034{
2036}
2037
2038/************************************************************************/
2042 gpointer data)
2043{
2045}
2046
2047/************************************************************************/
2051 GVariant *parameter,
2052 gpointer data)
2053{
2055}
2056
2057/************************************************************************/
2061 gpointer data)
2062{
2064}
2065
2066/************************************************************************/
2074
2075/************************************************************************/
2079 gpointer data)
2080{
2082}
2083
2084/************************************************************************/
2088 gpointer data)
2089{
2091}
2092
2093/************************************************************************/
2102
2103/************************************************************************/
2112
2113/************************************************************************/
2122
2123/************************************************************************/
2127 GVariant *parameter,
2128 gpointer data)
2129{
2131}
2132
2133/************************************************************************/
2141
2142/************************************************************************/
2146 gpointer data)
2147{
2148 struct menu_entry_info *info = (struct menu_entry_info *)data;
2149
2150 info->state ^= 1;
2152
2154
2156
2159}
2160
2161/************************************************************************/
2165 GVariant *parameter,
2166 gpointer data)
2167{
2168 struct menu_entry_info *info = (struct menu_entry_info *)data;
2169
2170 info->state ^= 1;
2171
2173
2175
2178}
2179
2180/************************************************************************/
2193
2194/************************************************************************/
2198 gpointer data)
2199{
2201}
2202
2203/************************************************************************/
2211
2212/************************************************************************/
2221
2222/************************************************************************/
2231
2232/************************************************************************/
2241
2242/************************************************************************/
2251
2252/************************************************************************/
2256 GVariant *parameter,
2257 gpointer data)
2258{
2260}
2261
2262/************************************************************************/
2266 GVariant *parameter,
2267 gpointer data)
2268{
2270}
2271
2272/************************************************************************/
2276 GVariant *parameter,
2277 gpointer data)
2278{
2280}
2281
2282/************************************************************************/
2286 GVariant *parameter,
2287 gpointer data)
2288{
2289 key_unit_wait();
2290}
2291
2292/************************************************************************/
2296 GVariant *parameter,
2297 gpointer data)
2298{
2299 key_unit_done();
2300}
2301
2302/************************************************************************/
2306 gpointer data)
2307{
2308 key_unit_goto();
2309}
2310
2311/************************************************************************/
2315 GVariant *parameter,
2316 gpointer data)
2317{
2318 int sub_target = NO_TARGET;
2319 struct action *paction = (struct action *)data;
2320
2322
2324 case ASTK_BUILDING:
2325 {
2327 "end_building");
2329 sub_target = improvement_number(pbuilding);
2330 }
2331 break;
2332 case ASTK_TECH:
2333 {
2335 "end_tech");
2337 sub_target = advance_number(ptech);
2338 }
2339 break;
2340 case ASTK_EXTRA:
2342 {
2343 struct extra_type *pextra = g_object_get_data(G_OBJECT(action),
2344 "end_extra");
2345 fc_assert_ret(pextra != NULL);
2346 sub_target = extra_number(pextra);
2347 }
2348 break;
2349 case ASTK_NONE:
2350 sub_target = NO_TARGET;
2351 break;
2352 case ASTK_COUNT:
2353 /* Should not exits */
2355 break;
2356 }
2357
2359}
2360
2361/************************************************************************/
2365 GVariant *parameter,
2366 gpointer data)
2367{
2368 if (get_num_units_in_focus() > 0) {
2370 }
2371}
2372
2373/************************************************************************/
2384
2385/************************************************************************/
2389 GVariant *parameter,
2390 gpointer data)
2391{
2393}
2394
2395/************************************************************************/
2399 gpointer data)
2400{
2402}
2403
2404/************************************************************************/
2408 gpointer data)
2409{
2411}
2412
2413/************************************************************************/
2417 GVariant *parameter,
2418 gpointer data)
2419{
2421}
2422
2423/************************************************************************/
2427 GVariant *parameter,
2428 gpointer data)
2429{
2431}
2432
2433/************************************************************************/
2444
2445/************************************************************************/
2455
2456/************************************************************************/
2466
2467/************************************************************************/
2471 GVariant *parameter,
2472 gpointer data)
2473{
2475}
2476
2477/************************************************************************/
2481 GVariant *parameter,
2482 gpointer data)
2483{
2485}
2486
2487/************************************************************************/
2496
2497/************************************************************************/
2501 GVariant *parameter,
2502 gpointer data)
2503{
2505}
2506
2507/************************************************************************/
2516
2517/************************************************************************/
2521 GVariant *parameter,
2522 gpointer data)
2523{
2525 /* FIXME: this can provide different items for different units...
2526 * not good! */
2527 /* Enable the button for adding to a city in all cases, so we
2528 get an eventual error message from the server if we try. */
2534 }
2536}
2537
2538/************************************************************************/
2542 GVariant *parameter,
2543 gpointer data)
2544{
2546}
2547
2548/************************************************************************/
2552 GVariant *parameter,
2553 gpointer data)
2554{
2556 /* FIXME: this can provide different actions for different units...
2557 * not good! */
2559 EC_ROAD,
2561 punit);
2562 bool building_road = FALSE;
2563
2564 if (tgt != NULL
2568 }
2569
2572 }
2574}
2575
2576/************************************************************************/
2580 GVariant *parameter,
2581 gpointer data)
2582{
2584}
2585
2586/************************************************************************/
2590 GVariant *parameter,
2591 gpointer data)
2592{
2594}
2595
2596/************************************************************************/
2600 GVariant *parameter,
2601 gpointer data)
2602{
2604}
2605
2606/************************************************************************/
2610 GVariant *parameter,
2611 gpointer data)
2612{
2613 key_unit_mine();
2614}
2615
2616/************************************************************************/
2620 GVariant *parameter,
2621 gpointer data)
2622{
2624
2625 if (proad != NULL) {
2626 struct extra_type *tgt;
2627
2628 tgt = road_extra_get(proad);
2629
2631 }
2632}
2633
2634/************************************************************************/
2638 GVariant *parameter,
2639 gpointer data)
2640{
2642
2643 if (prail != NULL) {
2644 struct extra_type *tgt;
2645
2646 tgt = road_extra_get(prail);
2647
2649 }
2650}
2651
2652/************************************************************************/
2656 GVariant *parameter,
2657 gpointer data)
2658{
2660
2661 if (pmaglev != NULL) {
2662 struct extra_type *tgt;
2663
2664 tgt = road_extra_get(pmaglev);
2665
2667 }
2668}
2669
2670/************************************************************************/
2674 GVariant *parameter,
2675 gpointer data)
2676{
2678
2679 if (extra_type_list_size(extras) > 0) {
2680 struct extra_type *pextra;
2681
2683
2685 }
2686}
2687
2688/************************************************************************/
2692 GVariant *parameter,
2693 gpointer data)
2694{
2696}
2697
2698/************************************************************************/
2702 gpointer data)
2703{
2705}
2706
2707/************************************************************************/
2711 gpointer data)
2712{
2714}
2715
2716/************************************************************************/
2720 gpointer data)
2721{
2723}
2724
2725/************************************************************************/
2729 GVariant *parameter,
2730 gpointer data)
2731{
2733}
2734
2735/************************************************************************/
2739 GVariant *parameter,
2740 gpointer data)
2741{
2743}
2744
2745/************************************************************************/
2749 GVariant *parameter,
2750 gpointer data)
2751{
2753}
2754
2755/************************************************************************/
2759 gpointer data)
2760{
2762}
2763
2764/************************************************************************/
2768 gpointer data)
2769{
2771}
2772
2773/************************************************************************/
2777 GVariant *parameter,
2778 gpointer data)
2779{
2781}
2782
2783/************************************************************************/
2787 GVariant *parameter,
2788 gpointer data)
2789{
2791}
2792
2793/************************************************************************/
2797 GVariant *parameter,
2798 gpointer data)
2799{
2800 struct extra_type *pextra = data;
2801
2805}
2806
2807/************************************************************************/
2811 GVariant *parameter,
2812 gpointer data)
2813{
2814 struct extra_type *pextra = data;
2815
2818 pextra);
2820}
2821
2822/************************************************************************/
2826 GVariant *parameter,
2827 gpointer data)
2828{
2829 struct extra_type *pextra = data;
2830
2833 pextra);
2835}
2836
2837/************************************************************************/
2841 GVariant *parameter,
2842 gpointer data)
2843{
2844 struct extra_type *pextra = data;
2845
2848 pextra);
2850}
2851
2852/************************************************************************/
2856 GVariant *parameter,
2857 gpointer data)
2858{
2859 struct extra_type *pextra = data;
2860
2864 pextra);
2865 }
2867}
2868
2869/************************************************************************/
2873 GVariant *parameter,
2874 gpointer data)
2875{
2877}
2878
2879/************************************************************************/
2883 GVariant *parameter,
2884 gpointer data)
2885{
2886 zoom_step_up();
2887}
2888
2889/************************************************************************/
2893 GVariant *parameter,
2894 gpointer data)
2895{
2897}
2898
2899/************************************************************************/
2903 GVariant *parameter,
2904 gpointer data)
2905{
2907}
2908
2909/************************************************************************/
2913 GVariant *parameter,
2914 gpointer data)
2915
2916{
2918}
2919
2920/************************************************************************/
2929
2930/************************************************************************/
2939
2940/************************************************************************/
2944 GVariant *parameter,
2945 gpointer data)
2946{
2947 if (NULL != client.conn.playing) {
2949 }
2950}
2951
2952/************************************************************************/
2961
2962/************************************************************************/
2971
2972/************************************************************************/
2981
2982/************************************************************************/
2987{
2988 char actname[150];
2989 GMenuItem *item;
2990
2991 fc_snprintf(actname, sizeof(actname), "app.%s(%s)",
2992 info->action, info->state ? "true" : "false");
2993 item = g_menu_item_new(Q_(info->name), NULL);
2995
2996 if (info->accl != NULL) {
2997 const char *accls[2] = { info->accl, NULL };
2998
3000 }
3001
3002 return item;
3003}
3004
3005/************************************************************************/
3010{
3012}
3013
3014/************************************************************************/
3017static void menu_entry_init(GMenu *sub, const char *key)
3018{
3020
3021 if (info != NULL) {
3022 GMenuItem *item;
3023
3024 if (info->toggle != NULL) {
3026 } else {
3027 char actname[150];
3028
3029 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
3030 item = g_menu_item_new(Q_(info->name), actname);
3031 }
3032
3033 /* Should be menu_item_append_unref()? */
3036 }
3037}
3038
3039/************************************************************************/
3043{
3044 int i;
3045
3046 for (i = 0; meoms[i].menu_entry != NULL; i++) {
3047 struct menu_entry_info *info = menu_entry_info_find(meoms[i].menu_entry);
3048
3049 if (meoms[i].option != NULL) {
3050 info->state = *meoms[i].option;
3051 } else {
3052 info->state = FALSE; /* Best guess we have */
3053 }
3054 }
3055}
3056
3057/************************************************************************/
3061{
3062 int i;
3064
3065 /* Simple entries */
3068
3069 /* Toggles */
3070 for (i = 0; menu_entries[i].key != NULL; i++) {
3071 if (menu_entries[i].toggle != NULL) {
3072 GSimpleAction *act;
3073 GVariant *var = g_variant_new("b", TRUE);
3074
3077 g_signal_connect(act, "change-state",
3079 (gpointer)&(menu_entries[i]));
3080 }
3081 }
3082
3084
3085 for (i = 0; menu_entries[i].key != NULL; i++) {
3086 if (menu_entries[i].accl != NULL && menu_entries[i].toggle == NULL) {
3087 const char *accls[2] = { menu_entries[i].accl, NULL };
3088 char actname[150];
3089
3090 fc_snprintf(actname, sizeof(actname), "app.%s", menu_entries[i].action);
3091
3093 }
3094 }
3095}
3096
3097/************************************************************************/
3100static void register_bg_actions(GActionMap *map, int bg)
3101{
3102 GSimpleAction *act;
3103 char actname[256];
3104
3105 fc_snprintf(actname, sizeof(actname), "bg_select_%d", bg);
3108 g_signal_connect(act, "activate",
3110
3111 fc_snprintf(actname, sizeof(actname), "bg_assign_%d", bg);
3114 g_signal_connect(act, "activate",
3116
3117 fc_snprintf(actname, sizeof(actname), "bg_append_%d", bg);
3120 g_signal_connect(act, "activate",
3122}
3123
3124/************************************************************************/
3128{
3129 GMenu *menubar;
3130 GMenu *topmenu;
3131 GMenu *submenu;
3132 int i;
3133
3135
3136 menubar = g_menu_new();
3137
3138 topmenu = g_menu_new();
3139 menu_entry_init(topmenu, "CLEAR_CHAT_LOGS");
3140 menu_entry_init(topmenu, "SAVE_CHAT_LOGS");
3141
3143 menu_entry_init(options_menu, "LOCAL_OPTIONS");
3144 menu_entry_init(options_menu, "MESSAGE_OPTIONS");
3145 menu_entry_init(options_menu, "SERVER_OPTIONS");
3146 menu_entry_init(options_menu, "SAVE_OPTIONS");
3147 menu_entry_init(options_menu, "SAVE_OPTIONS_ON_EXIT");
3148
3150
3151#ifdef FREECIV_DEBUG
3152 menu_entry_init(topmenu, "RELOAD_TILESET");
3153#endif /* FREECIV_DEBUG */
3154
3155 menu_entry_init(topmenu, "GAME_SAVE");
3156 menu_entry_init(topmenu, "GAME_SAVE_AS");
3157 menu_entry_init(topmenu, "MAPIMG_SAVE");
3158 menu_entry_init(topmenu, "MAPIMG_SAVE_AS");
3159 menu_entry_init(topmenu, "VOLUME_UP");
3160 menu_entry_init(topmenu, "VOLUME_DOWN");
3161 menu_entry_init(topmenu, "LEAVE");
3162 menu_entry_init(topmenu, "QUIT");
3163
3165
3167
3168 menu_entry_init(edit_menu, "FIND_CITY");
3169 menu_entry_init(edit_menu, "WORKLISTS");
3170 menu_entry_init(edit_menu, "RALLY_DLG");
3171 menu_entry_init(edit_menu, "INFRA_DLG");
3172 menu_entry_init(edit_menu, "EDIT_MODE");
3173 menu_entry_init(edit_menu, "TOGGLE_FOG");
3174 menu_entry_init(edit_menu, "SCENARIO_PROPERTIES");
3175 menu_entry_init(edit_menu, "SCENARIO_SAVE");
3176 menu_entry_init(edit_menu, "CLIENT_LUA_SCRIPT");
3177
3179
3181
3182 menu_entry_init(view_menu, "SHOW_CITY_OUTLINES");
3183 menu_entry_init(view_menu, "SHOW_CITY_OUTPUT");
3184 menu_entry_init(view_menu, "SHOW_MAP_GRID");
3185 menu_entry_init(view_menu, "SHOW_NAT_BORDERS");
3186 menu_entry_init(view_menu, "SHOW_NATIVE_TILES");
3187 menu_entry_init(view_menu, "SHOW_CITY_FULL_BAR");
3188 menu_entry_init(view_menu, "SHOW_CITY_NAMES");
3189 menu_entry_init(view_menu, "SHOW_CITY_GROWTH");
3190 menu_entry_init(view_menu, "SHOW_CITY_PRODUCTIONS");
3191 menu_entry_init(view_menu, "SHOW_CITY_BUY_COST");
3192 menu_entry_init(view_menu, "SHOW_CITY_TRADE_ROUTES");
3193 menu_entry_init(view_menu, "SHOW_TERRAIN");
3194 menu_entry_init(view_menu, "SHOW_COASTLINE");
3195 menu_entry_init(view_menu, "SHOW_PATHS");
3196 menu_entry_init(view_menu, "SHOW_IRRIGATION");
3197 menu_entry_init(view_menu, "SHOW_MINES");
3198 menu_entry_init(view_menu, "SHOW_BASES");
3199 menu_entry_init(view_menu, "SHOW_RESOURCES");
3200 menu_entry_init(view_menu, "SHOW_HUTS");
3201 menu_entry_init(view_menu, "SHOW_POLLUTION");
3202 menu_entry_init(view_menu, "SHOW_CITIES");
3203 menu_entry_init(view_menu, "SHOW_UNITS");
3204 menu_entry_init(view_menu, "SHOW_UNIT_SOLID_BG");
3205 menu_entry_init(view_menu, "SHOW_UNIT_SHIELDS");
3206 menu_entry_init(view_menu, "SHOW_STACK_SIZE");
3207 menu_entry_init(view_menu, "SHOW_FOCUS_UNIT");
3208
3209 menu_entry_init(view_menu, "SHOW_FOG_OF_WAR");
3210
3211 menu_entry_init(view_menu, "FULL_SCREEN");
3212 menu_entry_init(view_menu, "CENTER_VIEW");
3213 menu_entry_init(view_menu, "ZOOM_IN");
3214 menu_entry_init(view_menu, "ZOOM_OUT");
3215
3217
3218 topmenu = g_menu_new();
3219
3220 menu_entry_init(topmenu, "SELECT_SINGLE");
3221 menu_entry_init(topmenu, "SELECT_ALL_ON_TILE");
3222 menu_entry_init(topmenu, "SELECT_SAME_TYPE_TILE");
3223 menu_entry_init(topmenu, "SELECT_SAME_TYPE_CONT");
3224 menu_entry_init(topmenu, "SELECT_SAME_TYPE");
3225 menu_entry_init(topmenu, "SELECT_DLG");
3226
3228
3230
3231 menu_entry_init(unit_menu, "UNIT_GOTO");
3232
3233 /* Placeholder submenu (so that menu update has something to replace) */
3234 submenu = g_menu_new();
3236
3237 menu_entry_init(unit_menu, "UNIT_GOTO_CITY");
3238 menu_entry_init(unit_menu, "UNIT_RETURN");
3239 menu_entry_init(unit_menu, "UNIT_EXPLORE");
3240 menu_entry_init(unit_menu, "UNIT_PATROL");
3241 menu_entry_init(unit_menu, "UNIT_TELEPORT");
3242 menu_entry_init(unit_menu, "UNIT_SENTRY");
3243 menu_entry_init(unit_menu, "UNSENTRY_ALL");
3244 menu_entry_init(unit_menu, "UNIT_BOARD");
3245 menu_entry_init(unit_menu, "UNIT_DEBOARD");
3246 menu_entry_init(unit_menu, "UNIT_UNLOAD_TRANSPORTER");
3247 menu_entry_init(unit_menu, "UNIT_HOMECITY");
3248 menu_entry_init(unit_menu, "UNIT_UPGRADE");
3249 menu_entry_init(unit_menu, "UNIT_CONVERT");
3250 menu_entry_init(unit_menu, "UNIT_DISBAND");
3251 menu_entry_init(unit_menu, "DO_ACTION");
3252 menu_entry_init(unit_menu, "UNIT_WAIT");
3253 menu_entry_init(unit_menu, "UNIT_DONE");
3254
3256
3258 menu_entry_init(work_menu, "BUILD_CITY");
3259 menu_entry_init(work_menu, "AUTO_WORKER");
3260
3261 /* Placeholder submenus (so that menu update has something to replace) */
3262 submenu = g_menu_new();
3264 submenu = g_menu_new();
3265 submenu_append_unref(work_menu, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3266 submenu = g_menu_new();
3268 submenu = g_menu_new();
3269 submenu_append_unref(work_menu, _("_Clean Nuisance"), G_MENU_MODEL(submenu));
3270
3271 menu_entry_init(work_menu, "BUILD_ROAD");
3272 menu_entry_init(work_menu, "BUILD_IRRIGATION");
3273 menu_entry_init(work_menu, "BUILD_MINE");
3274 menu_entry_init(work_menu, "CULTIVATE");
3275 menu_entry_init(work_menu, "PLANT");
3276 menu_entry_init(work_menu, "TRANSFORM_TERRAIN");
3277 menu_entry_init(work_menu, "CONNECT_ROAD");
3278 menu_entry_init(work_menu, "CONNECT_RAIL");
3279 menu_entry_init(work_menu, "CONNECT_MAGLEV");
3280 menu_entry_init(work_menu, "CONNECT_IRRIGATION");
3281 menu_entry_init(work_menu, "CLEAN");
3282
3284
3286 menu_entry_init(combat_menu, "FORTIFY");
3287 menu_entry_init(combat_menu, "BUILD_FORTRESS");
3288 menu_entry_init(combat_menu, "BUILD_AIRBASE");
3289
3290 /* Placeholder submenu (so that menu update has something to replace) */
3291 submenu = g_menu_new();
3293
3295
3296 menu_entry_init(combat_menu, "PARADROP");
3297 menu_entry_init(combat_menu, "PILLAGE");
3298
3299 gov_menu = g_menu_new();
3300
3301 menu_entry_init(gov_menu, "MAP_VIEW");
3302 menu_entry_init(gov_menu, "REPORT_UNITS");
3303 menu_entry_init(gov_menu, "REPORT_NATIONS");
3304 menu_entry_init(gov_menu, "REPORT_CITIES");
3305 menu_entry_init(gov_menu, "REPORT_ECONOMY");
3306 menu_entry_init(gov_menu, "REPORT_RESEARCH");
3307 menu_entry_init(gov_menu, "TAX_RATES");
3308 menu_entry_init(gov_menu, "POLICIES");
3309
3310 /* Placeholder submenu (so that menu update has something to replace) */
3311 submenu = g_menu_new();
3313
3314 menu_entry_init(gov_menu, "REPORT_WOW");
3315 menu_entry_init(gov_menu, "REPORT_TOP_CITIES");
3316 menu_entry_init(gov_menu, "REPORT_MESSAGES");
3317 menu_entry_init(gov_menu, "REPORT_DEMOGRAPHIC");
3318 menu_entry_init(gov_menu, "REPORT_SPACESHIP");
3319 menu_entry_init(gov_menu, "REPORT_ACHIEVEMENTS");
3320
3321 submenu_append_unref(menubar, _("C_ivilization"), G_MENU_MODEL(gov_menu));
3322
3323 topmenu = g_menu_new();
3324
3325 /* Keys exist for 4 battle groups */
3327
3328 for (i = 0; i < MAX_NUM_BATTLEGROUPS; i++) {
3329 char key[128];
3330
3331 /* User side battle group numbers start from 1 */
3332 fc_snprintf(key, sizeof(key), "BG_SELECT_%d", i + 1);
3334 fc_snprintf(key, sizeof(key), "BG_ASSIGN_%d", i + 1);
3336 fc_snprintf(key, sizeof(key), "BG_APPEND_%d", i + 1);
3338
3340 }
3341
3342 submenu_append_unref(menubar, _("_Battle Groups"), G_MENU_MODEL(topmenu));
3343
3344 topmenu = g_menu_new();
3345
3346 menu_entry_init(topmenu, "HELP_OVERVIEW");
3347 menu_entry_init(topmenu, "HELP_PLAYING");
3348 menu_entry_init(topmenu, "HELP_POLICIES");
3349 menu_entry_init(topmenu, "HELP_TERRAIN");
3350 menu_entry_init(topmenu, "HELP_ECONOMY");
3351 menu_entry_init(topmenu, "HELP_CITIES");
3352 menu_entry_init(topmenu, "HELP_IMPROVEMENTS");
3353 menu_entry_init(topmenu, "HELP_WONDERS");
3354 menu_entry_init(topmenu, "HELP_UNITS");
3355 menu_entry_init(topmenu, "HELP_COMBAT");
3356 menu_entry_init(topmenu, "HELP_COUNTERS");
3357 menu_entry_init(topmenu, "HELP_ZOC");
3358 menu_entry_init(topmenu, "HELP_GOVERNMENT");
3359 menu_entry_init(topmenu, "HELP_DIPLOMACY");
3360 menu_entry_init(topmenu, "HELP_TECH");
3361 menu_entry_init(topmenu, "HELP_SPACE_RACE");
3362 menu_entry_init(topmenu, "HELP_RULESET");
3363 menu_entry_init(topmenu, "HELP_TILESET");
3364 menu_entry_init(topmenu, "HELP_MUSICSET");
3365 menu_entry_init(topmenu, "HELP_NATIONS");
3366 menu_entry_init(topmenu, "HELP_CONNECTING");
3367 menu_entry_init(topmenu, "HELP_CONTROLS");
3368 menu_entry_init(topmenu, "HELP_GOVERNOR");
3369 menu_entry_init(topmenu, "HELP_CHATLINE");
3370 menu_entry_init(topmenu, "HELP_WORKLIST_EDITOR");
3371 menu_entry_init(topmenu, "HELP_LANGUAGES");
3372 menu_entry_init(topmenu, "HELP_COPYING");
3373 menu_entry_init(topmenu, "HELP_ABOUT");
3374
3376
3377 menus_built = TRUE;
3378
3380
3381 return menubar;
3382}
3383
3384/************************************************************************/
3387static struct menu_entry_info *menu_entry_info_find(const char *key)
3388{
3389 int i;
3390
3391 for (i = 0; menu_entries[i].key != NULL; i++) {
3392 if (!strcmp(key, menu_entries[i].key)) {
3393 return &(menu_entries[i]);
3394 }
3395 }
3396
3397 return NULL;
3398}
3399
3400/************************************************************************/
3404 struct menu_entry_info *info,
3406{
3407 GAction *act = g_action_map_lookup_action(map, info->action);
3408
3409 if (act != NULL) {
3411 }
3412}
3413
3414/************************************************************************/
3418 const char *key,
3420{
3422
3423 if (info != NULL) {
3425 }
3426}
3427
3428/************************************************************************/
3432 enum menu_entry_grouping group,
3434{
3435 int i;
3436
3437 for (i = 0; menu_entries[i].key != NULL; i++) {
3438 if (menu_entries[i].grouping & group) {
3440 }
3441 }
3442}
3443
3444/************************************************************************/
3447static void menus_rename(GMenu *parent, int index, const char *key,
3448 const char *new_name)
3449{
3451
3452 if (info != NULL) {
3453 char actname[150];
3454 GMenuItem *item;
3455
3456 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
3457 g_menu_remove(parent, index);
3458
3459 item = g_menu_item_new(new_name, actname);
3461 }
3462}
3463
3464/************************************************************************/
3468{
3469 /* The "full" city bar (i.e. the new way of drawing the
3470 * city name), can draw the city growth even without drawing
3471 * the city name. But the old method cannot. */
3473 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", TRUE);
3474 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES", TRUE);
3475 } else {
3476 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", gui_options.draw_city_names);
3477 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES",
3479 }
3480
3481 menu_entry_set_sensitive(map, "SHOW_CITY_BUY_COST",
3483 menu_entry_set_sensitive(map, "SHOW_COASTLINE", !gui_options.draw_terrain);
3484 menu_entry_set_sensitive(map, "SHOW_UNIT_SOLID_BG",
3486 menu_entry_set_sensitive(map, "SHOW_UNIT_SHIELDS",
3488 menu_entry_set_sensitive(map, "SHOW_FOCUS_UNIT", !gui_options.draw_units);
3489}
3490
3491/************************************************************************/
3497static const char *get_tile_change_menu_text(struct tile *ptile,
3498 enum unit_activity activity)
3499{
3500 struct tile *newtile = tile_virtual_new(ptile);
3501 const char *text;
3502
3503 tile_apply_activity(newtile, activity, NULL);
3504 text = tile_get_info_text(newtile, FALSE, 0);
3506
3507 return text;
3508}
3509
3510/************************************************************************/
3514{
3517 GMenu *submenu;
3518 int i, j;
3519 int tgt_kind_group;
3520 struct unit_list *punits;
3521 unsigned num_units;
3522 struct menu_entry_info *info;
3523 struct road_type *proad;
3524 struct extra_type_list *extras;
3525 bool conn_possible;
3526
3528 return;
3529 }
3530
3532
3533 submenu = g_menu_new();
3534
3535 i = 0;
3536 j = 0;
3537
3538 /* Add the new action entries grouped by target kind. */
3541 struct action *paction = action_by_number(act_id);
3542 GSimpleAction *act;
3543 char actname[256];
3544 char name[256];
3545
3546 if (action_id_get_actor_kind(act_id) != AAK_UNIT) {
3547 /* This action isn't performed by a unit. */
3548 continue;
3549 }
3550
3552 /* Wrong group. */
3553 continue;
3554 }
3555
3556 if (!units_can_do_action(punits, act_id, TRUE)) {
3557 continue;
3558 }
3559
3560 /* Create and add the menu item. */
3561 fc_snprintf(actname, sizeof(actname), "action_%d", i);
3564
3565 fc_snprintf(name, sizeof(name), "%s",
3566 action_get_ui_name_mnemonic(act_id, "_"));
3567 fc_snprintf(actname, sizeof(actname), "app.action_%d", i++);
3568
3569 if (action_id_has_complex_target(act_id)) {
3571 char subname[256];
3572
3573#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_) \
3574{ \
3575 fc_snprintf(actname, sizeof(actname), "subtgt_%d", j); \
3576 act = g_simple_action_new(actname, NULL); \
3577 g_action_map_add_action(map, G_ACTION(act)); \
3578 g_object_set_data(G_OBJECT(act), _sub_target_key_, _sub_target_); \
3579 g_signal_connect(act, "activate", G_CALLBACK(unit_goto_and_callback), \
3580 paction); \
3581 fc_snprintf(subname, sizeof(subname), "%s", _sub_target_name_); \
3582 fc_snprintf(actname, sizeof(actname), "app.subtgt_%d", j++); \
3583 menu_item_append_unref(sub_target_menu, \
3584 g_menu_item_new(subname, actname)); \
3585}
3586
3588 case ASTK_BUILDING:
3590 CREATE_SUB_ITEM(pimpr, "end_building",
3593 break;
3594 case ASTK_TECH:
3596 CREATE_SUB_ITEM(ptech, "end_tech",
3599 break;
3600 case ASTK_EXTRA:
3602 extra_type_iterate(pextra) {
3603 if (!actres_creates_extra(paction->result, pextra)
3604 && !actres_removes_extra(paction->result, pextra)) {
3605 /* Not relevant */
3606 continue;
3607 }
3608 CREATE_SUB_ITEM(pextra, "end_extra",
3609 extra_name_translation(pextra));
3611 break;
3612 case ASTK_NONE:
3613 /* Should not be here. */
3615 break;
3616 case ASTK_COUNT:
3617 /* Should not exits */
3619 break;
3620 }
3621
3622#undef CREATE_SUB_ITEM
3623
3625 } else {
3626 g_signal_connect(act, "activate",
3629 }
3631 }
3633 g_menu_insert_submenu(unit_menu, 1, _("Go to a_nd..."), G_MENU_MODEL(submenu));
3634
3635 submenu = g_menu_new();
3636
3638 menu_entry_init(submenu, "START_REVOLUTION");
3639 }
3640
3641 i = 0;
3644 char name[256];
3645 char actname[256];
3646 GSimpleAction *act;
3647
3648 fc_snprintf(actname, sizeof(actname), "government_%d", i);
3652 g_signal_connect(act, "activate", G_CALLBACK(government_callback), g);
3653
3654 /* TRANS: %s is a government name */
3655 fc_snprintf(name, sizeof(name), _("%s..."),
3657 fc_snprintf(actname, sizeof(actname), "app.government_%d", i++);
3659 }
3662 g_menu_insert_submenu(gov_menu, 8, _("_Government"), G_MENU_MODEL(submenu));
3663
3664 submenu = g_menu_new();
3665
3667 if (pextra->buildable) {
3668 char actname[256];
3669 GSimpleAction *act;
3670
3671 fc_snprintf(actname, sizeof(actname), "path_%d", i);
3676 pextra));
3678 g_signal_connect(act, "activate", G_CALLBACK(road_callback), pextra);
3679
3680 fc_snprintf(actname, sizeof(actname), "app.path_%d", i++);
3683 }
3685
3688
3689 submenu = g_menu_new();
3690
3692 if (pextra->buildable) {
3693 char actname[256];
3694 GSimpleAction *act;
3695
3696 fc_snprintf(actname, sizeof(actname), "irrig_%d", i);
3701 pextra));
3703 g_signal_connect(act, "activate", G_CALLBACK(irrigation_callback), pextra);
3704
3705 fc_snprintf(actname, sizeof(actname), "app.irrig_%d", i++);
3708 }
3710
3712 g_menu_insert_submenu(work_menu, 3, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3713
3714 submenu = g_menu_new();
3715
3717 if (pextra->buildable) {
3718 char actname[256];
3719 GSimpleAction *act;
3720
3721 fc_snprintf(actname, sizeof(actname), "mine_%d", i);
3726 pextra));
3728 g_signal_connect(act, "activate", G_CALLBACK(mine_callback), pextra);
3729
3730 fc_snprintf(actname, sizeof(actname), "app.mine_%d", i++);
3733 }
3735
3738
3739 submenu = g_menu_new();
3740
3742 char actname[256];
3743 GSimpleAction *act;
3744
3745 fc_snprintf(actname, sizeof(actname), "clean_%d", i);
3750 pextra));
3752 g_signal_connect(act, "activate", G_CALLBACK(clean_menu_callback), pextra);
3753
3754 fc_snprintf(actname, sizeof(actname), "app.clean_%d", i++);
3758
3760 g_menu_insert_submenu(work_menu, 5, _("_Clean Nuisance"),
3762
3763 submenu = g_menu_new();
3764
3766 if (pextra->buildable) {
3767 char actname[256];
3768 GSimpleAction *act;
3769
3770 fc_snprintf(actname, sizeof(actname), "base_%d", i);
3775 pextra));
3777 g_signal_connect(act, "activate", G_CALLBACK(base_callback), pextra);
3778
3779 fc_snprintf(actname, sizeof(actname), "app.base_%d", i++);
3782 }
3784
3787
3789 char acttext[128], irrtext[128], mintext[128], transtext[128];
3790 char cultext[128], plantext[128];
3791 struct terrain *pterrain;
3792
3793 if (!can_client_change_view()) {
3794 return;
3795 }
3796
3798
3799 if (num_units > 0) {
3800 const struct tile *ptile = NULL;
3801 const struct unit_type *ptype = NULL;
3802
3804 fc_assert((ptile == NULL) == (ptype == NULL));
3805
3806 if (ptile || ptype) {
3807 if (unit_tile(punit) != ptile) {
3809 }
3810 if (unit_type_get(punit) != ptype) {
3812 }
3813 } else {
3814 ptile = unit_tile(punit);
3816 }
3818 }
3819
3824 num_units > 0
3826 && !editor_is_active());
3827
3829 menu_entry_set_sensitive(map, "VOLUME_UP", !audio_is_dummy_plugin());
3830 menu_entry_set_sensitive(map, "VOLUME_DOWN", !audio_is_dummy_plugin());
3831
3832 menu_entry_set_sensitive(map, "GAME_SAVE_AS",
3834 menu_entry_set_sensitive(map, "GAME_SAVE",
3836
3837 menu_entry_set_sensitive(map, "SERVER_OPTIONS", client.conn.established);
3838
3839 menu_entry_set_sensitive(map, "LEAVE",
3841
3843 menu_entry_set_sensitive(map, "INFRA_DLG", terrain_control.infrapoints);
3844
3845 menu_entry_set_sensitive(map, "POLICIES", multiplier_count() > 0);
3846 menu_entry_set_sensitive(map, "REPORT_TOP_CITIES", game.info.top_cities_count > 0);
3847 menu_entry_set_sensitive(map, "REPORT_SPACESHIP",
3848 client_player() != NULL && client_player()->spaceship.state != SSHIP_NONE);
3849
3850 info = menu_entry_info_find("EDIT_MODE");
3851 if (info->state != game.info.is_edit_mode) {
3852 info->state = game.info.is_edit_mode;
3856
3857 menu_entry_set_sensitive(map, "EDIT_MODE",
3860 }
3861
3862 info = menu_entry_info_find("TOGGLE_FOG");
3863 if (info->state != game.client.fog_of_war) {
3864 info->state = game.client.fog_of_war;
3865
3869 }
3870
3871 {
3872 char road_buf[500];
3873
3875 if (proad != NULL) {
3876 /* TRANS: Connect with some road type (Road/Railroad) */
3877 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3879 menus_rename(work_menu, 12, "CONNECT_ROAD", road_buf);
3880 }
3881
3883 if (proad != NULL) {
3884 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3886 menus_rename(work_menu, 13, "CONNECT_RAIL", road_buf);
3887 }
3888 }
3889
3890 if (!can_client_issue_orders()) {
3891 return;
3892 }
3893
3894 if (!punits) {
3895 return;
3896 }
3897
3898 /* Remaining part of this function: Update Unit, Work, and Combat menus */
3899
3900 /* Enable the button for adding to a city in all cases, so we
3901 * get an eventual error message from the server if we try. */
3902 menu_entry_set_sensitive(map, "BUILD_CITY",
3907
3908 menu_entry_set_sensitive(map, "DO_ACTION",
3910
3911 menu_entry_set_sensitive(map, "UNIT_TELEPORT",
3913
3914 menu_entry_set_sensitive(map, "BUILD_ROAD",
3918 menu_entry_set_sensitive(map, "BUILD_IRRIGATION",
3920 menu_entry_set_sensitive(map, "BUILD_MINE",
3922 menu_entry_set_sensitive(map, "CULTIVATE",
3924 menu_entry_set_sensitive(map, "PLANT",
3926 menu_entry_set_sensitive(map, "TRANSFORM_TERRAIN",
3928 menu_entry_set_sensitive(map, "FORTIFY",
3931 menu_entry_set_sensitive(map, "PARADROP",
3933 menu_entry_set_sensitive(map, "PILLAGE",
3935 menu_entry_set_sensitive(map, "CLEAN",
3937 menu_entry_set_sensitive(map, "BUILD_FORTRESS",
3939 menu_entry_set_sensitive(map, "BUILD_AIRBASE",
3941 menu_entry_set_sensitive(map, "UNIT_SENTRY",
3943 menu_entry_set_sensitive(map, "UNSENTRY_ALL",
3946 menu_entry_set_sensitive(map, "UNIT_HOMECITY",
3948 menu_entry_set_sensitive(map, "UNIT_UPGRADE", units_can_upgrade(&(wld.map), punits));
3949 menu_entry_set_sensitive(map, "UNIT_CONVERT", units_can_convert(&(wld.map), punits));
3950 menu_entry_set_sensitive(map, "UNIT_DISBAND",
3952 TRUE));
3953
3954 menu_entry_set_sensitive(map, "AUTO_WORKER",
3956 menu_entry_set_sensitive(map, "UNIT_EXPLORE",
3958 menu_entry_set_sensitive(map, "UNIT_BOARD",
3960 menu_entry_set_sensitive(map, "UNIT_DEBOARD",
3962 menu_entry_set_sensitive(map, "UNIT_UNLOAD_TRANSPORTER",
3964
3966 if (proad != NULL) {
3967 struct extra_type *tgt;
3968
3969 tgt = road_extra_get(proad);
3970
3972 } else {
3974 }
3975 menu_entry_set_sensitive(map, "CONNECT_ROAD", conn_possible);
3976
3978 if (proad != NULL) {
3979 struct extra_type *tgt;
3980
3981 tgt = road_extra_get(proad);
3982
3984 } else {
3986 }
3987 menu_entry_set_sensitive(map, "CONNECT_RAIL", conn_possible);
3988
3990 if (proad != NULL) {
3991 struct extra_type *tgt;
3992
3993 tgt = road_extra_get(proad);
3994
3996 } else {
3998 }
3999 menu_entry_set_sensitive(map, "CONNECT_MAGLEV", conn_possible);
4000
4002
4003 if (extra_type_list_size(extras) > 0) {
4004 struct extra_type *tgt;
4005
4006 tgt = extra_type_list_get(extras, 0);
4008 } else {
4010 }
4011 menu_entry_set_sensitive(map, "CONNECT_IRRIGATION", conn_possible);
4012
4013 menu_entry_set_sensitive(map, "TAX_RATES",
4016
4018 menus_rename(work_menu, 0, "BUILD_CITY",
4020 } else {
4021 bool city_on_tile = FALSE;
4022
4023 /* FIXME: This overloading doesn't work well with multiple focus
4024 * units. */
4026 if (tile_city(unit_tile(punit))) {
4028 break;
4029 }
4031
4033 TRUE)) {
4034 menus_rename(work_menu, 0, "BUILD_CITY",
4036 } else {
4037 /* Refresh default order */
4038 menus_rename(work_menu, 0, "BUILD_CITY",
4040 }
4041 }
4042
4044 menus_rename(work_menu, 6, "BUILD_ROAD",
4047 char road_item[500];
4048 struct extra_type *pextra = NULL;
4049
4050 /* FIXME: This overloading doesn't work well with multiple focus
4051 * units. */
4055 if (pextra != NULL) {
4056 break;
4057 }
4059
4060 if (pextra != NULL) {
4061 /* TRANS: Build road of specific type (Road/Railroad) */
4062 snprintf(road_item, sizeof(road_item), _("Build %s"),
4063 extra_name_translation(pextra));
4064 menus_rename(work_menu, 6, "BUILD_ROAD", road_item);
4065 }
4066 } else {
4067 menus_rename(work_menu, 6, "BUILD_ROAD", _("Build _Road"));
4068 }
4069
4070 if (units_all_same_type && num_units > 0) {
4071 struct unit *punit = unit_list_get(punits, 0);
4072 const struct unit_type *to_unittype
4074
4075 if (to_unittype) {
4076 /* TRANS: %s is a unit type. */
4077 fc_snprintf(acttext, sizeof(acttext), _("Upgr_ade to %s"),
4080 unit_type_get(punit))));
4081 } else {
4082 acttext[0] = '\0';
4083 }
4084 } else {
4085 acttext[0] = '\0';
4086 }
4087 if ('\0' != acttext[0]) {
4088 menus_rename(unit_menu, 13, "UNIT_UPGRADE", acttext);
4089 } else {
4090 menus_rename(unit_menu, 13, "UNIT_UPGRADE", _("Upgr_ade"));
4091 }
4092
4093 if (units_can_convert(&(wld.map), punits)) {
4094 if (units_all_same_type && num_units > 0) {
4095 struct unit *punit = unit_list_get(punits, 0);
4096
4097 /* TRANS: %s is a unit type. */
4098 fc_snprintf(acttext, sizeof(acttext), _("C_onvert to %s"),
4100 } else {
4101 acttext[0] = '\0';
4102 }
4103 } else {
4104 menu_entry_set_sensitive(map, "UNIT_CONVERT", FALSE);
4105 acttext[0] = '\0';
4106 }
4107 if ('\0' != acttext[0]) {
4108 menus_rename(unit_menu, 14, "UNIT_CONVERT", acttext);
4109 } else {
4110 menus_rename(unit_menu, 14, "UNIT_CONVERT", _("C_onvert"));
4111 }
4112
4113 if (units_all_same_tile && num_units > 0) {
4114 struct unit *first = unit_list_get(punits, 0);
4115
4116 pterrain = tile_terrain(unit_tile(first));
4117
4119 struct extra_type *pextra = NULL;
4120
4121 /* FIXME: this overloading doesn't work well with multiple focus
4122 * units. */
4126 if (pextra != NULL) {
4127 break;
4128 }
4130
4131 if (pextra != NULL) {
4132 /* TRANS: Build irrigation of specific type */
4133 snprintf(irrtext, sizeof(irrtext), _("Build %s"),
4134 extra_name_translation(pextra));
4135 } else {
4136 sz_strlcpy(irrtext, _("Build _Irrigation"));
4137 }
4138 } else {
4139 sz_strlcpy(irrtext, _("Build _Irrigation"));
4140 }
4141
4142 if (pterrain->cultivate_result != T_NONE) {
4143 fc_snprintf(cultext, sizeof(cultext), _("Change to %s"),
4146 } else {
4147 sz_strlcpy(cultext, _("_Cultivate"));
4148 }
4149
4151 struct extra_type *pextra = NULL;
4152
4153 /* FIXME: this overloading doesn't work well with multiple focus
4154 * units. */
4158 if (pextra != NULL) {
4159 break;
4160 }
4162
4163 if (pextra != NULL) {
4164 /* TRANS: Build mine of specific type */
4165 snprintf(mintext, sizeof(mintext), _("Build %s"),
4166 extra_name_translation(pextra));
4167 } else {
4168 sz_strlcpy(mintext, _("Build _Mine"));
4169 }
4170 } else {
4171 sz_strlcpy(mintext, _("Build _Mine"));
4172 }
4173
4174 if (pterrain->plant_result != T_NONE) {
4175 fc_snprintf(plantext, sizeof(plantext), _("Change to %s"),
4177 } else {
4178 sz_strlcpy(plantext, _("_Plant"));
4179 }
4180
4181 if (pterrain->transform_result != T_NONE
4182 && pterrain->transform_result != pterrain) {
4183 fc_snprintf(transtext, sizeof(transtext), _("Transf_orm to %s"),
4186 } else {
4187 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4188 }
4189 } else {
4190 sz_strlcpy(irrtext, _("Build _Irrigation"));
4191 sz_strlcpy(cultext, _("_Cultivate"));
4192 sz_strlcpy(mintext, _("Build _Mine"));
4193 sz_strlcpy(plantext, _("_Plant"));
4194 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4195 }
4196
4197 menus_rename(work_menu, 7, "BUILD_IRRIGATION", irrtext);
4198 menus_rename(work_menu, 9, "CULTIVATE", cultext);
4199 menus_rename(work_menu, 8, "BUILD_MINE", mintext);
4200 menus_rename(work_menu, 10, "PLANT", plantext);
4201 menus_rename(work_menu, 11, "TRANSFORM_TERRAIN", transtext);
4202
4203 menus_rename(unit_menu, 12, "UNIT_HOMECITY",
4205
4206 menus_rename(combat_menu, 1, "BUILD_FORTRESS",
4207 Q_(terrain_control.gui_type_base0));
4208 menus_rename(combat_menu, 2, "BUILD_AIRBASE",
4209 Q_(terrain_control.gui_type_base1));
4210}
4211
4212/************************************************************************/
4217{
4218 if (!menus_built) {
4219 return;
4220 }
4221}
4222
4223/**********************************************************************/
4227{
4229
4230 if (enable) {
4231 if (main_menubar == NULL) {
4234 /* Ensure the menus are really created before performing any operations
4235 * on them. */
4236 while (g_main_context_pending(NULL)) {
4238 }
4239 }
4240
4243
4244 } else {
4247 }
4248
4249 /* Workaround for gtk bug that (re)setting the menubar after the window has
4250 * been already created is not noticed. */
4251 g_object_notify(G_OBJECT(gtk_settings_get_default()), "gtk-shell-shows-menubar");
4252}
4253
4254/**********************************************************************/
4261
4262/**********************************************************************/
enum action_sub_target_kind action_get_sub_target_kind(const struct action *paction)
Definition actions.c:1119
const char * action_get_ui_name_mnemonic(action_id act_id, const char *mnemonic)
Definition actions.c:1258
#define action_noninternal_iterate_end
Definition actions.h:240
static struct action * action_by_number(action_id act_id)
Definition actions.h:400
#define action_id_get_actor_kind(act_id)
Definition actions.h:413
#define ACTION_ANY
Definition actions.h:56
#define action_noninternal_iterate(_act_)
Definition actions.h:235
#define action_id_get_target_kind(act_id)
Definition actions.h:417
#define action_id_has_complex_target(act_id)
Definition actions.h:435
bool actres_removes_extra(enum action_result result, const struct extra_type *pextra)
Definition actres.c:810
bool actres_creates_extra(enum action_result result, const struct extra_type *pextra)
Definition actres.c:789
bool audio_is_dummy_plugin(void)
Definition audio.c:715
struct civclient client
enum client_states client_state(void)
void send_report_request(enum report_type type)
bool can_client_issue_orders(void)
bool can_client_change_view(void)
#define client_player()
@ C_S_DISCONNECTED
Definition client_main.h:45
@ C_S_RUNNING
Definition client_main.h:47
bool can_units_do_connect(struct unit_list *punits, enum unit_activity activity, struct extra_type *tgt)
Definition climisc.c:1242
void disconnect_from_server(bool leaving_sound)
Definition clinet.c:306
char * incite_cost
Definition comments.c:76
@ REPORT_WONDERS_OF_THE_WORLD
Definition conn_types.h:50
@ REPORT_DEMOGRAPHIC
Definition conn_types.h:53
@ REPORT_WONDERS_OF_THE_WORLD_LONG
Definition conn_types.h:51
@ REPORT_ACHIEVEMENTS
Definition conn_types.h:54
@ REPORT_TOP_CITIES
Definition conn_types.h:52
void send_save_game(const char *filename)
bool is_server_running(void)
bool can_client_access_hack(void)
bool can_conn_enable_editing(const struct connection *pconn)
Definition connection.c:521
void key_coastline_toggle(void)
Definition control.c:3964
void key_irrigation_toggle(void)
Definition control.c:3980
void key_unit_sentry(void)
Definition control.c:3768
void key_city_output_toggle(void)
Definition control.c:3865
void request_unit_return(struct unit *punit)
Definition control.c:1564
void request_unit_fortify(struct unit *punit)
Definition control.c:2365
void request_unit_caravan_action(struct unit *punit, action_id action)
Definition control.c:2235
void key_focus_unit_toggle(void)
Definition control.c:4060
void key_unit_auto_explore(void)
Definition control.c:3589
void key_unit_connect(enum unit_activity activity, struct extra_type *tgt)
Definition control.c:3387
void key_city_full_bar_toggle(void)
Definition control.c:3897
void key_bases_toggle(void)
Definition control.c:3996
void key_map_native_toggle(void)
Definition control.c:3889
void key_resources_toggle(void)
Definition control.c:4004
void request_unit_goto(enum unit_orders last_order, action_id act_id, int sub_tgt_id)
Definition control.c:1142
void key_unit_paradrop(void)
Definition control.c:3491
struct unit_list * get_units_in_focus(void)
Definition control.c:177
void key_unit_teleport(void)
Definition control.c:3507
void key_unit_shields_toggle(void)
Definition control.c:4052
void key_city_productions_toggle(void)
Definition control.c:3931
void key_unit_plant(void)
Definition control.c:3708
void key_unit_fortress(void)
Definition control.c:3636
void key_unit_mine(void)
Definition control.c:3700
void key_unit_pillage(void)
Definition control.c:3720
void request_unit_unload(struct unit *pcargo)
Definition control.c:2206
void key_editor_toggle_fogofwar(void)
Definition control.c:4093
void request_new_unit_activity_targeted(struct unit *punit, enum unit_activity act, struct extra_type *tgt)
Definition control.c:1950
void key_unit_irrigate(void)
Definition control.c:3680
void request_unit_build_city(struct unit *punit)
Definition control.c:1829
void key_unit_unload_all(void)
Definition control.c:3529
void key_cities_toggle(void)
Definition control.c:4028
void key_city_outlines_toggle(void)
Definition control.c:3857
void key_unit_homecity(void)
Definition control.c:3653
void key_unit_patrol(void)
Definition control.c:3499
void key_unit_solid_bg_toggle(void)
Definition control.c:4044
void key_terrain_toggle(void)
Definition control.c:3956
void key_paths_toggle(void)
Definition control.c:3972
void key_unit_wakeup_others(void)
Definition control.c:3562
void key_unit_stack_size_toggle(void)
Definition control.c:3948
void key_huts_toggle(void)
Definition control.c:4012
void key_fog_of_war_toggle(void)
Definition control.c:4068
void key_unit_wait(void)
Definition control.c:3554
void key_units_toggle(void)
Definition control.c:4036
void key_unit_select_battlegroup(int battlegroup, bool append)
Definition control.c:3831
void key_map_grid_toggle(void)
Definition control.c:3873
void key_pollution_toggle(void)
Definition control.c:4020
void key_city_growth_toggle(void)
Definition control.c:3914
void key_unit_action_select_tgt(void)
Definition control.c:3418
void key_city_buycost_toggle(void)
Definition control.c:3923
int get_num_units_in_focus(void)
Definition control.c:185
void key_unit_transform(void)
Definition control.c:3780
void key_unit_done(void)
Definition control.c:3475
void key_city_trade_routes_toggle(void)
Definition control.c:3940
void key_city_names_toggle(void)
Definition control.c:3905
void request_unit_select(struct unit_list *punits, enum unit_select_type_mode seltype, enum unit_select_location_mode selloc)
Definition control.c:1633
void key_unit_auto_work(void)
Definition control.c:3602
void key_unit_airbase(void)
Definition control.c:3572
void key_unit_goto(void)
Definition control.c:3483
void key_unit_convert(void)
Definition control.c:3614
void key_unit_clean(void)
Definition control.c:3732
void key_editor_toggle(void)
Definition control.c:4076
void key_unit_assign_battlegroup(int battlegroup, bool append)
Definition control.c:3792
void key_unit_cultivate(void)
Definition control.c:3688
void key_mines_toggle(void)
Definition control.c:3988
void key_map_borders_toggle(void)
Definition control.c:3881
#define can_unit_do_activity_targeted_client(_punit_, _act_, _tgt_)
Definition control.h:43
#define can_units_do_activity_targeted_client(_punits_, _act_, _tgt_)
Definition control.h:47
#define can_units_do_activity_client(_punits_, _act_)
Definition control.h:45
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit * punit
Definition dialogs_g.h:74
bool editor_is_active(void)
Definition editor.c:346
@ OBJTYPE_GAME
Definition editor.h:31
struct extra_type * next_extra_for_tile(const struct tile *ptile, enum extra_cause cause, const struct player *pplayer, const struct unit *punit)
Definition extras.c:779
int extra_number(const struct extra_type *pextra)
Definition extras.c:161
struct extra_type_list * extra_type_list_by_cause(enum extra_cause cause)
Definition extras.c:249
static struct extra_type extras[MAX_EXTRA_TYPES]
Definition extras.c:31
const char * extra_name_translation(const struct extra_type *pextra)
Definition extras.c:194
#define extra_type_iterate(_p)
Definition extras.h:315
#define extra_type_iterate_end
Definition extras.h:321
#define extra_type_by_rmcause_iterate_end
Definition extras.h:358
#define extra_type_by_rmcause_iterate(_rmcause, _extra)
Definition extras.h:353
#define extra_type_by_cause_iterate_end
Definition extras.h:339
#define extra_type_by_cause_iterate(_cause, _extra)
Definition extras.h:333
#define NO_TARGET
Definition fc_types.h:214
#define Q_(String)
Definition fcintl.h:70
#define _(String)
Definition fcintl.h:67
#define N_(String)
Definition fcintl.h:69
struct civ_game game
Definition game.c:61
struct world wld
Definition game.c:62
const char * government_name_translation(const struct government *pgovern)
Definition government.c:143
bool untargeted_revolution_allowed(void)
Definition government.c:570
bool can_change_to_government(struct player *pplayer, const struct government *gov)
Definition government.c:170
#define governments_iterate(NAME_pgov)
Definition government.h:124
#define governments_iterate_end
Definition government.h:127
void log_output_window(void)
Definition chatline.c:929
void clear_output_window(void)
Definition chatline.c:944
void city_report_dialog_popup(bool raise)
Definition cityrep.c:292
void unit_select_dialog_popup(struct tile *ptile)
Definition dialogs.c:377
void popup_upgrade_dialog(struct unit_list *punits)
Definition dialogs.c:1435
void popup_disband_dialog(struct unit_list *punits)
Definition dialogs.c:1473
void editgui_refresh(void)
Definition editgui.c:1798
void property_editor_popup(struct property_editor *pe, enum editor_object_type objtype)
Definition editprop.c:6292
struct property_editor * editprop_get_property_editor(void)
Definition editprop.c:6245
void property_editor_reload(struct property_editor *pe, enum editor_object_type objtype)
Definition editprop.c:6382
void popup_find_dialog(void)
Definition finddlg.c:58
void popup_multiplier_dialog(void)
Definition gamedlgs.c:383
void popup_rates_dialog(void)
Definition gamedlgs.c:533
void popup_goto_dialog(void)
Definition gotodlg.c:258
void fullscreen_opt_refresh(struct option *poption)
Definition gui_main.c:2431
gboolean map_canvas_focus(void)
Definition gui_main.c:360
GtkWidget * toplevel
Definition gui_main.c:126
void popup_quit_dialog(void)
Definition gui_main.c:2347
#define ACCL_MOD_KEY
Definition gui_main.h:26
#define GUI_GTK_OPTION(optname)
Definition gui_main.h:32
void setup_dialog(GtkWidget *shell, GtkWidget *parent)
Definition gui_stuff.c:287
void popup_help_dialog_string(const char *item)
Definition helpdlg.c:212
void infra_dialog_popup(void)
Definition infradlg.c:85
void luaconsole_dialog_popup(bool raise)
Definition luaconsole.c:126
void center_on_unit(void)
Definition mapctrl.c:496
static void save_mapimg_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:714
static void show_national_borders_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1257
static void show_focus_unit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1493
GtkWidget * setup_menus(GtkWidget *window)
Definition menu.c:2219
static void help_connecting_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:907
static void menus_rename(const char *key, const gchar *new_label)
Definition menu.c:2353
static void help_combat_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1115
static void menu_entry_group_set_sensitive(enum menu_entry_grouping group, gboolean is_sensitive)
Definition menu.c:2321
static void help_ruleset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1059
static void select_single_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1565
static void unit_unload_transporter_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1773
static void help_government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1155
static void report_achievements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:874
static void show_fog_of_war_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1504
static void help_zoc_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1123
static void show_city_productions_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1314
static void toggle_fog_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1535
static void client_lua_script_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:858
static void show_city_names_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1291
static void help_space_race_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1171
static void help_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1067
static void help_playing_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1051
static void plant_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1891
static struct menu_entry_info menu_entries[]
Definition menu.c:274
static void base_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2053
static void help_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1083
static void unit_sentry_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1737
static void center_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2093
static void unit_explore_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1721
static void build_mine_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1883
static void quit_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:790
static void unit_return_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1711
static void show_city_trade_routes_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1337
static void transform_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1963
static void help_wonders_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1147
static void show_terrain_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1348
static void show_city_growth_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1303
static void show_stack_size_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1482
static void multiplier_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2037
static void help_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1139
static void zoom_out_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2109
static void save_game_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:698
static void show_unit_solid_bg_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1460
static void show_coastline_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1359
static void show_city_full_bar_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1279
static void edit_mode_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1212
static void help_chatline_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:923
static void show_paths_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1369
static void connect_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1899
static void help_overview_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1043
static void save_game_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:706
static void help_diplomacy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1163
static void show_units_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1449
static void show_irrigation_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1379
static void show_map_grid_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1246
static void help_improvements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1099
static void find_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:798
static void report_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:822
static void report_demographic_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:866
static void help_worklist_editor_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:931
static void help_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1091
static void leave_local_game_response(GtkWidget *dialog, gint response)
Definition menu.c:731
static void help_language_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:882
static void server_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:674
static void leave_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:746
static void select_same_type_cont_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1589
static void unit_convert_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1798
static void select_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1605
static void show_huts_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1419
static void report_wow_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:830
static void unit_upgrade_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1790
static void help_tech_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1131
static void unit_goto_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1645
static void clean_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2078
static void build_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1814
static void unit_patrol_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1729
void real_menus_init(void)
Definition menu.c:2986
menu_entry_grouping
Definition menu.c:93
@ MGROUP_ALL
Definition menu.c:94
@ MGROUP_PLAYING
Definition menu.c:93
@ MGROUP_PLAYER
Definition menu.c:94
@ MGROUP_SAFE
Definition menu.c:93
@ MGROUP_EDIT
Definition menu.c:93
@ MGROUP_UNIT
Definition menu.c:94
static void rally_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1613
static void help_about_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1195
static void build_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1841
static void local_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:658
static void show_cities_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1439
static void unit_homecity_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1782
static void menu_entry_set_sensitive(const char *key, gboolean is_sensitive)
Definition menu.c:2308
static void show_pollution_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1429
static void save_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:682
static void save_mapimg_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:722
static void worklists_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:806
static void connect_maglev_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1931
static void full_screen_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1515
static void report_top_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:842
static void help_controls_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:915
static void select_same_type_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1597
static void connect_rail_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1915
static void unit_wait_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1629
static const char * get_tile_change_menu_text(struct tile *ptile, enum unit_activity activity)
Definition menu.c:2406
static void build_airbase_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1997
static void report_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2125
static void infra_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1621
static void message_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:666
static void tax_rate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2029
static void help_counters_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:899
static void help_musicset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1075
static void unit_goto_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1701
static struct menu_entry_info * menu_entry_info_find(const char *key)
Definition menu.c:2279
static void auto_work_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1833
static void government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2045
static void report_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2133
static void report_messages_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:850
static void show_bases_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1399
static void select_same_type_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1581
static void save_options_on_exit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1203
static void volume_up_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:766
static void show_native_tiles_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1268
static void menu_entry_init(GtkBuildable *item)
Definition menu.c:2159
static void show_unit_shields_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1471
static void reload_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:690
static void scenario_properties_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1545
static void clear_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:642
static void unit_deboard_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1763
static void help_policies_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:891
static void unit_done_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1637
static void help_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1179
static void zoom_in_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2101
static void unit_goto_and_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1653
static void show_city_output_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1235
static void show_city_outlines_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1224
static void save_scenario_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1557
static void help_copying_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1187
static void cultivate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1875
static void save_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:650
void real_menus_update(void)
Definition menu.c:2421
static void report_spaceship_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2149
static void select_all_on_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1573
static void show_city_buy_cost_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1326
static void build_fortress_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1979
#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_)
static void view_menu_update_sensitivity(void)
Definition menu.c:2374
static void unit_board_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1753
static void fortify_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1987
static void show_resources_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1409
static void connect_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1947
static void build_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1867
static void report_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2117
static void road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2065
static void unit_disband_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1806
static void help_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1107
static void report_research_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2141
static void map_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:814
static void volume_down_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:778
void popup_messageopt_dialog(void)
Definition messagedlg.c:51
void meswin_dialog_popup(bool raise)
Definition messagewin.c:417
void option_dialog_popup(const char *name, const struct option_set *poptset)
Definition optiondlg.c:984
void save_mapimg_dialog_popup(void)
Definition pages.c:3551
void mapimg_client_save(const char *filename)
Definition pages.c:3570
void save_game_dialog_popup(void)
Definition pages.c:3487
void save_scenario_dialog_popup(void)
Definition pages.c:3522
void popup_players_dialog(bool raise)
Definition plrdlg.c:91
void rally_dialog_popup(void)
void science_report_dialog_popup(bool raise)
Definition repodlgs.c:716
void economy_report_dialog_popup(bool raise)
Definition repodlgs.c:1243
void units_report_dialog_popup(bool raise)
Definition repodlgs.c:1768
void science_report_dialog_popdown(void)
Definition repodlgs.c:740
void popup_spaceship_dialog(struct player *pplayer)
bool request_transport(struct unit *cargo, struct tile *ptile)
void popup_worklists_report(void)
Definition wldlg.c:287
static GtkApplication * fc_app
Definition gui_main.c:184
GtkApplication * gui_app(void)
Definition gui_main.c:2680
#define submenu_append_unref(menu, name, submenu)
Definition gui_stuff.h:165
#define menu_item_insert_unref(menu, index, item)
Definition gui_stuff.h:142
#define menu_item_append_unref(menu, item)
Definition gui_stuff.h:149
static void help_governor_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:1735
static void irrigation_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2825
static void bg_append_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2975
static void unsentry_all_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2426
static GMenu * combat_menu
Definition menu.c:96
static GMenuItem * create_toggle_menu_item_for_key(const char *key)
Definition menu.c:3009
static void pillage_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2738
void enable_menus(bool enable)
Definition menu.c:4226
static void setup_app_actions(GApplication *fc_app)
Definition menu.c:3060
static GMenu * options_menu
Definition menu.c:90
static void register_bg_actions(GActionMap *map, int bg)
Definition menu.c:3100
const GActionEntry acts[]
Definition menu.c:1079
static void revolution_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2786
static GMenu * view_menu
Definition menu.c:92
static GMenu * work_menu
Definition menu.c:95
menu_entry_grouping
Definition menu.c:82
@ MGROUP_CHAR
Definition menu.c:87
static void bg_assign_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2965
static void menu_entry_set_sensitive_info(GActionMap *map, struct menu_entry_info *info, gboolean is_enabled)
Definition menu.c:3403
static bool menus_built
Definition menu.c:76
void menus_disable_char_commands(void)
Definition menu.c:4265
static void show_mines_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2031
static GMenu * edit_menu
Definition menu.c:91
void menus_disable_unit_commands(void)
Definition menu.c:4257
static void unit_teleport_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2407
static void paradrop_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2728
const struct menu_entry_option_map meoms[]
Definition menu.c:1811
static GMenu * unit_menu
Definition menu.c:94
static void do_action_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2748
static void bg_select_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2955
static void mine_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2840
static GMenu * main_menubar
Definition menu.c:75
static GMenuItem * create_toggle_menu_item(struct menu_entry_info *info)
Definition menu.c:2986
void menus_set_initial_toggle_values(void)
Definition menu.c:3042
static void clean_menu_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2855
@ VMENU_HUTS
Definition menu.c:1067
@ VMENU_MINES
Definition menu.c:1064
@ VMENU_COASTLINE
Definition menu.c:1061
@ VMENU_UNIT_SOLID_BG
Definition menu.c:1071
@ VMENU_CITY_NAMES
Definition menu.c:1055
@ VMENU_UNITS
Definition menu.c:1070
@ VMENU_CITY_FULL_BAR
Definition menu.c:1054
@ VMENU_CITY_OUTLINES
Definition menu.c:1049
@ VMENU_POLLUTION
Definition menu.c:1068
@ VMENU_FOCUS_UNIT
Definition menu.c:1074
@ VMENU_BASES
Definition menu.c:1065
@ VMENU_MAP_GRID
Definition menu.c:1051
@ VMENU_CITY_BUY_COST
Definition menu.c:1058
@ VMENU_TERRAIN
Definition menu.c:1060
@ VMENU_CITY_GROWTH
Definition menu.c:1056
@ VMENU_PATHS
Definition menu.c:1062
@ VMENU_CITIES
Definition menu.c:1069
@ VMENU_STACK_SIZE
Definition menu.c:1073
@ VMENU_UNIT_SHIELDS
Definition menu.c:1072
@ VMENU_IRRIGATION
Definition menu.c:1063
@ VMENU_NATIVE_TILES
Definition menu.c:1053
@ VMENU_CITY_OUTPUT
Definition menu.c:1050
@ VMENU_RESOURCES
Definition menu.c:1066
@ VMENU_CITY_PRODUCTIONS
Definition menu.c:1057
@ VMENU_CITY_TRADE_ROUTES
Definition menu.c:1059
@ VMENU_FULL_SCREEN
Definition menu.c:1076
@ VMENU_NAT_BORDERS
Definition menu.c:1052
@ VMENU_FOW
Definition menu.c:1075
static void view_menu_item_toggle(void(*cb)(void), bool updt_sensitivity, gpointer data)
Definition menu.c:1852
#define enable(id)
Definition widget.h:223
void popup_revolution_dialog(void)
Definition dialogs.c:112
#define HELP_MUSICSET_ITEM
#define HELP_CITIES_ITEM
#define HELP_TERRAIN_ITEM
#define HELP_LANGUAGES_ITEM
#define HELP_CONNECTING_ITEM
#define HELP_TILESET_ITEM
#define HELP_CHATLINE_ITEM
#define HELP_RULESET_ITEM
#define HELP_GOVERNMENT_ITEM
#define HELP_ABOUT_ITEM
#define HELP_MULTIPLIER_ITEM
#define HELP_PLAYING_ITEM
#define HELP_IMPROVEMENTS_ITEM
#define HELP_UNITS_ITEM
#define HELP_ZOC_ITEM
#define HELP_WORKLIST_EDITOR_ITEM
#define HELP_WONDERS_ITEM
#define HELP_COMBAT_ITEM
#define HELP_SPACE_RACE_ITEM
#define HELP_COPYING_ITEM
#define HELP_OVERVIEW_ITEM
#define HELP_NATIONS_ITEM
#define HELP_TECHS_ITEM
#define HELP_DIPLOMACY_ITEM
#define HELP_ECONOMY_ITEM
#define HELP_CMA_ITEM
#define HELP_CONTROLS_ITEM
#define HELP_COUNTER_ITEM
Impr_type_id improvement_number(const struct impr_type *pimprove)
const char * improvement_name_translation(const struct impr_type *pimprove)
#define improvement_iterate_end
#define improvement_iterate(_p)
const char * name
Definition inputfile.c:127
#define fc_assert_ret(condition)
Definition log.h:192
#define fc_assert(condition)
Definition log.h:177
#define FC_STATIC_ASSERT(cond, tag)
Definition log.h:238
struct terrain_misc terrain_control
Definition map.c:68
Multiplier_type_id multiplier_count(void)
Definition multipliers.c:88
void option_changed(struct option *poption)
Definition options.c:759
const struct option_set * server_optset
Definition options.c:4077
const struct option_set * client_optset
Definition options.c:1291
void options_save(option_save_log_callback log_cb)
Definition options.c:6177
struct client_options gui_options
Definition options.c:71
struct option * optset_option_by_name(const struct option_set *poptset, const char *name)
Definition options.c:442
@ GUI_GTK_MSGCHAT_MERGED
Definition options.h:69
struct extra_type * road_extra_get(const struct road_type *proad)
Definition road.c:42
struct road_type * road_by_gui_type(enum road_gui_type gui_type)
Definition road.c:180
static char * grouping
Definition shared.c:98
#define CLIP(lower, current, upper)
Definition shared.h:57
@ SSHIP_NONE
Definition spaceship.h:84
struct civ_game::@32::@35 client
bool fog_of_war
Definition game.h:121
struct packet_game_info info
Definition game.h:89
struct government * government_during_revolution
Definition game.h:94
struct connection conn
Definition client_main.h:96
bool draw_native
Definition options.h:215
bool draw_specials
Definition options.h:207
bool draw_city_output
Definition options.h:194
bool draw_city_names
Definition options.h:196
bool draw_city_productions
Definition options.h:198
bool draw_mines
Definition options.h:205
bool draw_borders
Definition options.h:214
bool draw_fortress_airbase
Definition options.h:206
bool draw_city_buycost
Definition options.h:199
bool draw_unit_stack_size
Definition options.h:218
bool draw_irrigation
Definition options.h:204
bool draw_terrain
Definition options.h:201
bool draw_units
Definition options.h:211
bool draw_fog_of_war
Definition options.h:213
bool draw_city_trade_routes
Definition options.h:200
bool draw_unit_shields
Definition options.h:217
bool draw_cities
Definition options.h:210
bool save_options_on_exit
Definition options.h:125
int sound_effects_volume
Definition options.h:190
bool draw_map_grid
Definition options.h:195
bool draw_city_growth
Definition options.h:197
bool draw_focus_unit
Definition options.h:212
bool draw_paths
Definition options.h:203
bool draw_city_outlines
Definition options.h:193
bool draw_coastline
Definition options.h:202
bool draw_full_citybar
Definition options.h:216
bool draw_pollution
Definition options.h:209
bool solid_color_behind_units
Definition options.h:149
bool established
Definition connection.h:140
struct player * playing
Definition connection.h:151
struct extra_type::@26 data
Definition climisc.h:82
Definition menu.c:99
const char * key
Definition menu.c:100
bool state
Definition menu.c:105
const char * accl
Definition menu.c:102
enum menu_entry_grouping grouping
Definition menu.c:105
GCallback cb
Definition menu.c:104
const char * name
Definition menu.c:101
const char * action
Definition menu.c:101
void(* toggle)(GSimpleAction *act, GVariant *value, gpointer data)
Definition menu.c:104
Definition menu.c:1805
const char * menu_entry
Definition menu.c:1806
bool * option
Definition menu.c:1807
int menu_pos
Definition menu.c:1808
struct terrain * cultivate_result
Definition terrain.h:108
struct terrain * plant_result
Definition terrain.h:111
struct terrain * transform_result
Definition terrain.h:122
Definition tile.h:50
Definition unit.h:140
struct civ_map map
int fc_snprintf(char *str, size_t n, const char *format,...)
Definition support.c:960
#define sz_strlcpy(dest, src)
Definition support.h:195
#define TRUE
Definition support.h:46
#define FALSE
Definition support.h:47
const char * advance_name_translation(const struct advance *padvance)
Definition tech.c:300
Tech_type_id advance_number(const struct advance *padvance)
Definition tech.c:98
#define advance_iterate(_p)
Definition tech.h:271
#define advance_iterate_end
Definition tech.h:272
#define T_NONE
Definition terrain.h:61
void tile_virtual_destroy(struct tile *vtile)
Definition tile.c:1035
bool tile_apply_activity(struct tile *ptile, Activity_type_id act, struct extra_type *tgt)
Definition tile.c:681
struct tile * tile_virtual_new(const struct tile *ptile)
Definition tile.c:981
const char * tile_get_info_text(const struct tile *ptile, bool include_nuisances, int linebreaks)
Definition tile.c:771
struct city * tile_city(const struct tile *ptile)
Definition tile.c:83
#define tile_terrain(_tile)
Definition tile.h:115
bool tilespec_reread(const char *new_tileset_name, bool game_fully_initialized, float scale)
Definition tilespec.c:1401
bool unit_can_est_trade_route_here(const struct unit *punit)
Definition unit.c:302
bool unit_can_add_or_build_city(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:490
bool can_unit_change_homecity(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:523
bool can_unit_do_autoworker(const struct unit *punit)
Definition unit.c:648
bool can_unit_teleport(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:848
bool can_unit_paradrop(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:864
bool unit_can_help_build_wonder_here(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:276
#define unit_tile(_pu)
Definition unit.h:407
@ ORDER_PERFORM_ACTION
Definition unit.h:48
#define unit_owner(_pu)
Definition unit.h:406
#define MAX_NUM_BATTLEGROUPS
Definition unit.h:192
bool units_can_convert(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:352
bool units_are_occupied(const struct unit_list *punits)
Definition unitlist.c:275
bool units_can_unload(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:303
bool can_units_do_base_gui(const struct unit_list *punits, enum base_gui_type base_gui)
Definition unitlist.c:182
bool can_units_do_any_road(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:163
bool units_can_upgrade(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:337
bool units_have_activity_on_tile(const struct unit_list *punits, enum unit_activity activity)
Definition unitlist.c:321
bool units_have_type_flag(const struct unit_list *punits, enum unit_type_flag_id flag, bool has_flag)
Definition unitlist.c:204
bool can_units_do(const struct unit_list *punits, bool(can_fn)(const struct unit *punit))
Definition unitlist.c:95
bool units_can_do_action(const struct unit_list *punits, action_id act_id, bool can_do)
Definition unitlist.c:241
bool units_can_load(const struct unit_list *punits)
Definition unitlist.c:289
bool can_units_do_on_map(const struct civ_map *nmap, const struct unit_list *punits, bool(can_fn)(const struct civ_map *nmap, const struct unit *punit))
Definition unitlist.c:111
#define unit_list_iterate(unitlist, punit)
Definition unitlist.h:31
#define unit_list_iterate_end
Definition unitlist.h:33
const struct unit_type * unit_type_get(const struct unit *punit)
Definition unittype.c:123
const struct unit_type * can_upgrade_unittype(const struct player *pplayer, const struct unit_type *punittype)
Definition unittype.c:1707
const char * utype_name_translation(const struct unit_type *punittype)
Definition unittype.c:1564
bool utype_can_do_action(const struct unit_type *putype, const action_id act_id)
Definition unittype.c:375
void zoom_step_down(void)
Definition zoom.c:130
void zoom_step_up(void)
Definition zoom.c:106