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
44/* client/gui-gtk-4.0 */
45#include "chatline.h"
46#include "cityrep.h"
47#include "dialogs.h"
48#include "editgui.h"
49#include "editprop.h"
50#include "finddlg.h"
51#include "gamedlgs.h"
52#include "gotodlg.h"
53#include "gui_main.h"
54#include "gui_stuff.h"
55#include "helpdlg.h"
56#include "infradlg.h"
57#include "luaconsole.h"
58#include "mapctrl.h" /* center_on_unit(). */
59#include "messagedlg.h"
60#include "messagewin.h"
61#include "optiondlg.h"
62#include "pages.h"
63#include "plrdlg.h"
64#include "rallypointdlg.h"
65#include "ratesdlg.h"
66#include "repodlgs.h"
67#include "sprite.h"
68#include "spaceshipdlg.h"
69#include "unitselect.h"
70#include "wldlg.h"
71
72#include "menu.h"
73
75static bool menus_built = FALSE;
76
78
80
81enum menu_entry_grouping { MGROUP_SAFE = 0B00000001,
82 MGROUP_EDIT = 0B00000010,
83 MGROUP_PLAYING = 0B00000100,
84 MGROUP_UNIT = 0B00001000,
85 MGROUP_PLAYER = 0B00010000,
86 MGROUP_CHAR = 0B00100000,
87 MGROUP_ALL = 0B11111111 };
88
96
97struct menu_entry_info {
98 const char *key;
99 const char *name;
100 const char *action;
101 const char *accl;
103 void (*toggle)(GSimpleAction *act, GVariant *value, gpointer data);
104 bool state; /* Only for toggle actions */
105};
106
109static GMenuItem *create_toggle_menu_item_for_key(const char *key);
110
111/* Menu entry callbacks */
113 GVariant *parameter,
114 gpointer data);
116 GVariant *parameter,
117 gpointer data);
119 GVariant *parameter,
120 gpointer data);
122 GVariant *parameter,
123 gpointer data);
125 GVariant *parameter,
126 gpointer data);
128 GVariant *parameter,
129 gpointer data);
131 GVariant *parameter,
132 gpointer data);
134 GVariant *parameter,
135 gpointer data);
137 GVariant *parameter,
138 gpointer data);
139
140#ifdef FREECIV_DEBUG
142 GVariant *parameter,
143 gpointer data);
144#endif /* FREECIV_DEBUG */
145
147 GVariant *parameter,
148 gpointer data);
150 GVariant *parameter,
151 gpointer data);
153 GVariant *parameter,
154 gpointer data);
156 GVariant *parameter,
157 gpointer data);
159 GVariant *parameter,
160 gpointer data);
162 GVariant *parameter,
163 gpointer data);
165 GVariant *parameter,
166 gpointer data);
168 GVariant *parameter,
169 gpointer data);
171 GVariant *parameter,
172 gpointer data);
174 GVariant *parameter,
175 gpointer data);
177 GVariant *parameter,
178 gpointer data);
180 GVariant *parameter,
181 gpointer data);
183 GVariant *parameter,
184 gpointer data);
186 GVariant *parameter,
187 gpointer data);
189 GVariant *parameter,
190 gpointer data);
192 GVariant *parameter,
193 gpointer data);
195 GVariant *parameter,
196 gpointer data);
198 GVariant *parameter,
199 gpointer data);
201 GVariant *parameter,
202 gpointer data);
204 GVariant *parameter,
205 gpointer data);
207 GVariant *parameter,
208 gpointer data);
210 GVariant *parameter,
211 gpointer data);
213 GVariant *parameter,
214 gpointer data);
216 GVariant *parameter,
217 gpointer data);
219 GVariant *parameter,
220 gpointer data);
222 GVariant *parameter,
223 gpointer data);
225 GVariant *parameter,
226 gpointer data);
228 GVariant *parameter,
229 gpointer data);
231 GVariant *parameter,
232 gpointer data);
234 GVariant *parameter,
235 gpointer data);
237 GVariant *parameter,
238 gpointer data);
240 GVariant *parameter,
241 gpointer data);
243 GVariant *parameter,
244 gpointer data);
246 GVariant *parameter,
247 gpointer data);
249 GVariant *parameter,
250 gpointer data);
252 GVariant *parameter,
253 gpointer data);
255 GVariant *parameter,
256 gpointer data);
258 GVariant *parameter,
259 gpointer data);
261 GVariant *parameter,
262 gpointer data);
264 GVariant *parameter,
265 gpointer data);
267 GVariant *parameter,
268 gpointer data);
270 GVariant *parameter,
271 gpointer data);
273 GVariant *parameter,
274 gpointer data);
276 GVariant *parameter,
277 gpointer data);
279 GVariant *parameter,
280 gpointer data);
282 GVariant *parameter,
283 gpointer data);
285 GVariant *parameter,
286 gpointer data);
288 GVariant *parameter,
289 gpointer data);
291 GVariant *parameter,
292 gpointer data);
294 GVariant *parameter,
295 gpointer data);
297 GVariant *parameter,
298 gpointer data);
300 GVariant *parameter,
301 gpointer data);
303 GVariant *parameter,
304 gpointer data);
306 GVariant *parameter,
307 gpointer data);
309 GVariant *parameter,
310 gpointer data);
312 GVariant *parameter,
313 gpointer data);
315 GVariant *parameter,
316 gpointer data);
318 GVariant *parameter,
319 gpointer data);
321 GVariant *parameter,
322 gpointer data);
324 GVariant *parameter,
325 gpointer data);
327 GVariant *parameter,
328 gpointer data);
330 GVariant *parameter,
331 gpointer data);
333 GVariant *parameter,
334 gpointer data);
336 GVariant *parameter,
337 gpointer data);
339 GVariant *parameter,
340 gpointer data);
342 GVariant *parameter,
343 gpointer data);
345 GVariant *parameter,
346 gpointer data);
348 GVariant *parameter,
349 gpointer data);
351 GVariant *parameter,
352 gpointer data);
354 GVariant *parameter,
355 gpointer data);
357 GVariant *parameter,
358 gpointer data);
360 GVariant *parameter,
361 gpointer data);
363 GVariant *parameter,
364 gpointer data);
366 GVariant *parameter,
367 gpointer data);
369 GVariant *parameter,
370 gpointer data);
372 GVariant *parameter,
373 gpointer data);
375 GVariant *parameter,
376 gpointer data);
378 GVariant *parameter,
379 gpointer data);
381 GVariant *parameter,
382 gpointer data);
384 GVariant *parameter,
385 gpointer data);
387 GVariant *parameter,
388 gpointer data);
390 GVariant *parameter,
391 gpointer data);
392
394 GVariant *parameter,
395 gpointer data);
397 GVariant *parameter,
398 gpointer data);
400 GVariant *parameter,
401 gpointer data);
403 GVariant *parameter,
404 gpointer data);
406 GVariant *parameter,
407 gpointer data);
409 GVariant *parameter,
410 gpointer data);
412 GVariant *parameter,
413 gpointer data);
415 GVariant *parameter,
416 gpointer data);
418 GVariant *parameter,
419 gpointer data);
421 GVariant *parameter,
422 gpointer data);
424 GVariant *parameter,
425 gpointer data);
427 GVariant *parameter,
428 gpointer data);
430 GVariant *parameter,
431 gpointer data);
433 GVariant *parameter,
434 gpointer data);
436 GVariant *parameter,
437 gpointer data);
439 GVariant *parameter,
440 gpointer data);
442 GVariant *parameter,
443 gpointer data);
445 GVariant *parameter,
446 gpointer data);
448 GVariant *parameter,
449 gpointer data);
451 GVariant *parameter,
452 gpointer data);
454 GVariant *parameter,
455 gpointer data);
457 GVariant *parameter,
458 gpointer data);
460 GVariant *parameter,
461 gpointer data);
463 GVariant *parameter,
464 gpointer data);
466 GVariant *parameter,
467 gpointer data);
469 GVariant *parameter,
470 gpointer data);
472 GVariant *parameter,
473 gpointer data);
475 GVariant *parameter,
476 gpointer data);
478 GVariant *parameter,
479 gpointer data);
481 GVariant *parameter,
482 gpointer data);
484 GVariant *parameter,
485 gpointer data);
487 GVariant *parameter,
488 gpointer data);
490 GVariant *parameter,
491 gpointer data);
492
494 GVariant *parameter,
495 gpointer data);
497 GVariant *parameter,
498 gpointer data);
500 GVariant *parameter,
501 gpointer data);
503 GVariant *parameter,
504 gpointer data);
506 GVariant *parameter,
507 gpointer data);
509 GVariant *parameter,
510 gpointer data);
512 GVariant *parameter,
513 gpointer data);
515 GVariant *parameter,
516 gpointer data);
518 GVariant *parameter,
519 gpointer data);
521 GVariant *parameter,
522 gpointer data);
524 GVariant *parameter,
525 gpointer data);
527 GVariant *parameter,
528 gpointer data);
530 GVariant *parameter,
531 gpointer data);
533 GVariant *parameter,
534 gpointer data);
535
537 GVariant *parameter,
538 gpointer data);
540 GVariant *parameter,
541 gpointer data);
543 GVariant *parameter,
544 gpointer data);
545
547{
548 /* Game menu */
549 { "CLEAR_CHAT_LOGS", N_("_Clear Chat Log"),
550 "clear_chat", NULL, MGROUP_SAFE,
551 NULL, FALSE },
552 { "SAVE_CHAT_LOGS", N_("Save Chat _Log"),
553 "save_chat", NULL, MGROUP_SAFE,
554 NULL, FALSE },
555
556 { "LOCAL_OPTIONS", N_("_Local Client"),
557 "local_options", NULL, MGROUP_SAFE,
558 NULL, FALSE },
559 { "MESSAGE_OPTIONS", N_("_Message"),
560 "message_options", NULL, MGROUP_SAFE,
561 NULL, FALSE },
562 { "SERVER_OPTIONS", N_("_Remote Server"),
563 "server_options", NULL, MGROUP_SAFE,
564 NULL, FALSE },
565 { "SAVE_OPTIONS", N_("Save Options _Now"),
566 "save_options", NULL, MGROUP_SAFE,
567 NULL, FALSE },
568 { "SAVE_OPTIONS_ON_EXIT", N_("Save Options on _Exit"),
569 "save_options_on_exit", NULL, MGROUP_SAFE,
571
572#ifdef FREECIV_DEBUG
573 { "RELOAD_TILESET", N_("_Reload Tileset"),
574 "reload_tileset", ACCL_MOD_KEY"<alt>r", MGROUP_SAFE,
575 NULL, FALSE },
576#endif /* FREECIV_DEBUG */
577
578 { "GAME_SAVE", N_("_Save Game"),
579 "game_save", ACCL_MOD_KEY"s", MGROUP_SAFE,
580 NULL, FALSE },
581 { "GAME_SAVE_AS", N_("Save Game _As..."),
582 "game_save_as", NULL, MGROUP_SAFE,
583 NULL, FALSE },
584 { "MAPIMG_SAVE", N_("Save Map _Image"),
585 "save_mapimg", NULL, MGROUP_SAFE,
586 NULL, FALSE },
587 { "MAPIMG_SAVE_AS", N_("Save _Map Image As..."),
588 "save_mapimg_as", NULL, MGROUP_SAFE,
589 NULL, FALSE },
590 { "VOLUME_UP", N_("Volume Up"),
591 "volume_up", "greater", MGROUP_SAFE | MGROUP_CHAR,
592 NULL, FALSE },
593 { "VOLUME_DOWN", N_("Volume Down"),
594 "volume_down", "less", MGROUP_SAFE | MGROUP_CHAR,
595 NULL, FALSE },
596 { "LEAVE", N_("_Leave"),
597 "leave", NULL, MGROUP_SAFE,
598 NULL, FALSE },
599 { "QUIT", N_("_Quit"),
600 "quit", ACCL_MOD_KEY"q", MGROUP_SAFE,
601 NULL, FALSE },
602
603 /* Edit menu */
604 { "FIND_CITY", N_("_Find City"),
605 "find_city", ACCL_MOD_KEY"f", MGROUP_SAFE,
606 NULL, FALSE },
607 { "WORKLISTS", N_("Work_lists"),
608 "worklists", ACCL_MOD_KEY"<shift>l", MGROUP_SAFE,
609 NULL, FALSE },
610 { "RALLY_DLG", N_("Rally point dialog"),
611 "rally_dlg", ACCL_MOD_KEY"<shift>r", MGROUP_SAFE,
612 NULL, FALSE },
613 { "INFRA_DLG", N_("Infra dialog"),
614 "infra_dlg", ACCL_MOD_KEY"<shift>f", MGROUP_SAFE,
615 NULL, FALSE },
616 { "EDIT_MODE", N_("_Editing Mode"),
617 "edit_mode", ACCL_MOD_KEY"e", MGROUP_SAFE,
619 { "TOGGLE_FOG", N_("Toggle Fog of _War"),
620 "toggle_fog", ACCL_MOD_KEY"<shift>w", MGROUP_EDIT,
622 { "SCENARIO_PROPERTIES", N_("Game/Scenario Properties"),
623 "scenario_props", NULL, MGROUP_EDIT,
624 NULL, FALSE },
625 { "SCENARIO_SAVE", N_("Save Scenario"),
626 "scenario_save", NULL, MGROUP_EDIT,
627 NULL, FALSE },
628 { "CLIENT_LUA_SCRIPT", N_("Client _Lua Script"),
629 "lua_script", NULL, MGROUP_SAFE,
630 NULL, FALSE },
631
632 /* View menu */
633 { "SHOW_CITY_OUTLINES", N_("Cit_y Outlines"),
634 "show_city_outlines", ACCL_MOD_KEY"y", MGROUP_SAFE,
636 { "SHOW_CITY_OUTPUT", N_("City Output"),
637 "show_city_output", ACCL_MOD_KEY"v", MGROUP_SAFE,
639 { "SHOW_MAP_GRID", N_("Map _Grid"),
640 "show_map_grid", ACCL_MOD_KEY"g", MGROUP_SAFE,
642 { "SHOW_NAT_BORDERS", N_("National _Borders"),
643 "show_nat_borders", ACCL_MOD_KEY"b", MGROUP_SAFE,
645 { "SHOW_NATIVE_TILES", N_("Native Tiles"),
646 "show_native_tiles", ACCL_MOD_KEY"<shift>n", MGROUP_SAFE,
648 { "SHOW_CITY_FULL_BAR", N_("City Full Bar"),
649 "show_city_full_bar", NULL, MGROUP_SAFE,
651 { "SHOW_CITY_NAMES", N_("City _Names"),
652 "show_city_names", ACCL_MOD_KEY"n", MGROUP_SAFE,
654 { "SHOW_CITY_GROWTH", N_("City G_rowth"),
655 "show_city_growth", ACCL_MOD_KEY"o", MGROUP_SAFE,
657 { "SHOW_CITY_PRODUCTIONS", N_("City _Production"),
658 "show_city_productions", ACCL_MOD_KEY"p", MGROUP_SAFE,
660 { "SHOW_CITY_BUY_COST", N_("City Buy Cost"),
661 "show_city_buy_cost", NULL, MGROUP_SAFE,
663 { "SHOW_CITY_TRADE_ROUTES", N_("City Tra_deroutes"),
664 "show_trade_routes", ACCL_MOD_KEY"d", MGROUP_SAFE,
666 { "SHOW_TERRAIN", N_("_Terrain"),
667 "show_terrain", NULL, MGROUP_SAFE,
669 { "SHOW_COASTLINE", N_("C_oastline"),
670 "show_coastline", NULL, MGROUP_SAFE,
672 { "SHOW_PATHS", N_("_Paths"),
673 "show_paths", NULL, MGROUP_SAFE,
675 { "SHOW_IRRIGATION", N_("_Irrigation"),
676 "show_irrigation", NULL, MGROUP_SAFE,
678 { "SHOW_MINES", N_("_Mines"),
679 "show_mines", NULL, MGROUP_SAFE,
681 { "SHOW_BASES", N_("_Bases"),
682 "show_bases", NULL, MGROUP_SAFE,
684 { "SHOW_RESOURCES", N_("_Resources"),
685 "show_resources", NULL, MGROUP_SAFE,
687 { "SHOW_HUTS", N_("_Huts"),
688 "show_huts", NULL, MGROUP_SAFE,
690 { "SHOW_POLLUTION", N_("Po_llution & Fallout"),
691 "show_pollution", NULL, MGROUP_SAFE,
693 { "SHOW_CITIES", N_("Citi_es"),
694 "show_cities", NULL, MGROUP_SAFE,
696 { "SHOW_UNITS", N_("_Units"),
697 "show_units", NULL, MGROUP_SAFE,
699 { "SHOW_UNIT_SOLID_BG", N_("Unit Solid Background"),
700 "show_unit_solid_bg", NULL, MGROUP_SAFE,
702 { "SHOW_UNIT_SHIELDS", N_("Unit shields"),
703 "show_unit_shields", NULL, MGROUP_SAFE,
705 { "SHOW_STACK_SIZE", N_("Unit Stack Size"),
706 "show_stack_size", ACCL_MOD_KEY"plus", MGROUP_SAFE,
708 { "SHOW_FOCUS_UNIT", N_("Focu_s Unit"),
709 "show_focus_unit", NULL, MGROUP_SAFE,
711 { "SHOW_FOG_OF_WAR", N_("Fog of _War"),
712 "show_fow", NULL, MGROUP_SAFE,
714
715 { "FULL_SCREEN", N_("_Fullscreen"),
716 "full_screen", ACCL_MOD_KEY"F11", MGROUP_SAFE,
718 { "CENTER_VIEW", N_("_Center View"),
719 "center_view", "c", MGROUP_PLAYER | MGROUP_CHAR,
720 NULL, FALSE },
721
722 /* Select menu */
723 { "SELECT_SINGLE", N_("_Single Unit (Unselect Others)"),
724 "select_single", "z", MGROUP_UNIT | MGROUP_CHAR,
725 NULL, FALSE },
726 { "SELECT_ALL_ON_TILE", N_("_All On Tile"),
727 "select_all_tile", "v", MGROUP_UNIT | MGROUP_CHAR,
728 NULL, FALSE },
729 { "SELECT_SAME_TYPE_TILE", N_("Same Type on _Tile"),
730 "select_same_type_tile", "<shift>v", MGROUP_UNIT | MGROUP_CHAR,
731 NULL, FALSE },
732 { "SELECT_SAME_TYPE_CONT", N_("Same Type on _Continent"),
733 "select_same_type_cont", "<shift>c", MGROUP_UNIT | MGROUP_CHAR,
734 NULL, FALSE },
735 { "SELECT_SAME_TYPE", N_("Same Type _Everywhere"),
736 "select_same_type", "<shift>x", MGROUP_UNIT | MGROUP_CHAR,
737 NULL, FALSE },
738 { "SELECT_DLG", N_("Unit Selection Dialog"),
739 "select_dlg", NULL, MGROUP_UNIT,
740 NULL, FALSE },
741
742 /* Unit menu */
743 { "UNIT_GOTO", N_("_Go to"),
744 "goto", "g", MGROUP_UNIT | MGROUP_CHAR,
745 NULL, FALSE },
746 { "UNIT_GOTO_CITY", N_("Go _to/Airlift to City..."),
747 "goto_city", "t", MGROUP_UNIT | MGROUP_CHAR,
748 NULL, FALSE },
749 { "UNIT_RETURN", N_("_Return to Nearest City"),
750 "return", "<shift>g", MGROUP_UNIT | MGROUP_CHAR,
751 NULL, FALSE },
752 { "UNIT_EXPLORE", N_("Auto E_xplore"),
753 "explore", "x", MGROUP_UNIT | MGROUP_CHAR,
754 NULL, FALSE },
755 { "UNIT_PATROL", N_("_Patrol"),
756 "patrol", "q", MGROUP_UNIT | MGROUP_CHAR,
757 NULL, FALSE },
758 { "UNIT_TELEPORT", N_("_Teleport"),
759 "teleport", NULL, MGROUP_UNIT,
760 NULL, FALSE },
761 { "UNIT_SENTRY", N_("_Sentry"),
762 "sentry", "s", MGROUP_UNIT | MGROUP_CHAR,
763 NULL, FALSE },
764 { "UNSENTRY_ALL", N_("Uns_entry All On Tile"),
765 "unsentry_all", "<shift>s", MGROUP_UNIT | MGROUP_CHAR,
766 NULL, FALSE },
767 { "UNIT_BOARD", N_("_Load"),
768 "board", "l", MGROUP_UNIT | MGROUP_CHAR,
769 NULL, FALSE },
770 { "UNIT_DEBOARD", N_("_Unload"),
771 "deboard", "u", MGROUP_UNIT | MGROUP_CHAR,
772 NULL, FALSE },
773 { "UNIT_UNLOAD_TRANSPORTER", N_("U_nload All From Transporter"),
774 "unload_transporter", "<shift>t", MGROUP_UNIT | MGROUP_CHAR,
775 NULL, FALSE },
776 { "UNIT_HOMECITY", N_("Set _Home City"),
777 "homecity", "h", MGROUP_UNIT | MGROUP_CHAR,
778 NULL, FALSE },
779 { "UNIT_UPGRADE", N_("Upgr_ade"),
780 "upgrade", "<shift>u", MGROUP_UNIT | MGROUP_CHAR,
781 NULL, FALSE },
782 { "UNIT_CONVERT", N_("C_onvert"),
783 "convert", "<shift>o", MGROUP_UNIT | MGROUP_CHAR,
784 NULL, FALSE },
785 { "UNIT_DISBAND", N_("_Disband"),
786 "disband", "<shift>d", MGROUP_UNIT | MGROUP_CHAR,
787 NULL, FALSE },
788 { "DO_ACTION", N_("_Do..."),
789 "do_action", "d", MGROUP_UNIT | MGROUP_CHAR,
790 NULL, FALSE },
791 { "UNIT_WAIT", N_("_Wait"),
792 "wait", "w", MGROUP_UNIT | MGROUP_CHAR,
793 NULL, FALSE },
794 { "UNIT_DONE", N_("_Done"),
795 "done", "space", MGROUP_UNIT | MGROUP_CHAR,
796 NULL, FALSE },
797
798 /* Work menu */
799 { "BUILD_CITY", N_("_Build City"),
800 "build_city", "b", MGROUP_UNIT | MGROUP_CHAR,
801 NULL, FALSE },
802 { "AUTO_WORKER", N_("_Auto Worker"),
803 "auto_work", "a", MGROUP_UNIT | MGROUP_CHAR,
804 NULL, FALSE },
805 { "BUILD_ROAD", N_("Build _Road"),
806 "build_road", "r", MGROUP_UNIT | MGROUP_CHAR,
807 NULL, FALSE },
808 { "BUILD_IRRIGATION", N_("Build _Irrigation"),
809 "build_irrigation", "i", MGROUP_UNIT | MGROUP_CHAR,
810 NULL, FALSE },
811 { "BUILD_MINE", N_("Build _Mine"),
812 "build_mine", "m", MGROUP_UNIT | MGROUP_CHAR,
813 NULL, FALSE },
814 { "CULTIVATE", N_("Cultivate"),
815 "cultivate", "<shift>i", MGROUP_UNIT | MGROUP_CHAR,
816 NULL, FALSE },
817 { "PLANT", N_("Plant"),
818 "plant", "<shift>m", MGROUP_UNIT | MGROUP_CHAR,
819 NULL, FALSE },
820 { "TRANSFORM_TERRAIN", N_("Transf_orm Terrain"),
821 "transform_terrain", "o", MGROUP_UNIT | MGROUP_CHAR,
822 NULL, FALSE },
823 { "CONNECT_ROAD", N_("Connect With Roa_d"),
824 "connect_road", ACCL_MOD_KEY"r", MGROUP_UNIT,
825 NULL, FALSE },
826 { "CONNECT_RAIL", N_("Connect With Rai_l"),
827 "connect_rail", ACCL_MOD_KEY"l", MGROUP_UNIT,
828 NULL, FALSE },
829 { "CONNECT_MAGLEV", N_("Connect With _Maglev"),
830 "connect_maglev", ACCL_MOD_KEY"m", MGROUP_UNIT,
831 NULL, FALSE },
832 { "CONNECT_IRRIGATION", N_("Connect With Irri_gation"),
833 "connect_irrigation", ACCL_MOD_KEY"i", MGROUP_UNIT,
834 NULL, FALSE },
835 { "CLEAN", N_("_Clean"),
836 "clean", "p", MGROUP_UNIT | MGROUP_CHAR,
837 NULL, FALSE },
838
839 /* Combat menu */
840 { "FORTIFY", N_("Fortify"),
841 "fortify", "f", MGROUP_UNIT | MGROUP_CHAR,
842 NULL, FALSE },
843 { "BUILD_FORTRESS", N_("Build Fortress"),
844 "build_base_fortress", "<shift>f", MGROUP_UNIT | MGROUP_CHAR,
845 NULL, FALSE },
846 { "BUILD_AIRBASE", N_("Build Airbase"),
847 "build_base_airbase", "<shift>e", MGROUP_UNIT | MGROUP_CHAR,
848 NULL, FALSE },
849 { "PARADROP", N_("P_aradrop"),
850 "paradrop", "j", MGROUP_UNIT | MGROUP_CHAR,
851 NULL, FALSE },
852 { "PILLAGE", N_("_Pillage"),
853 "pillage", "<shift>p", MGROUP_UNIT | MGROUP_CHAR,
854 NULL, FALSE },
855
856 /* Civilization */
857 { "MAP_VIEW", N_("?noun:_View"),
858 "map_view", "F1", MGROUP_SAFE,
859 NULL, FALSE },
860 { "REPORT_UNITS", N_("_Units"),
861 "report_units", "F2", MGROUP_SAFE,
862 NULL, FALSE },
863 { "REPORT_NATIONS", N_("_Nations"),
864 "report_nations", "F3", MGROUP_SAFE,
865 NULL, FALSE },
866 { "REPORT_CITIES", N_("_Cities"),
867 "report_cities", "F4", MGROUP_SAFE,
868 NULL, FALSE },
869 { "REPORT_ECONOMY", N_("_Economy"),
870 "report_economy", "F5", MGROUP_PLAYER,
871 NULL, FALSE },
872 { "REPORT_RESEARCH", N_("_Research"),
873 "report_research", "F6", MGROUP_PLAYER,
874 NULL, FALSE },
875
876 { "TAX_RATES", N_("_Tax Rates..."),
877 "tax_rates", ACCL_MOD_KEY"t", MGROUP_PLAYING,
878 NULL, FALSE },
879 { "POLICIES", N_("_Policies..."),
880 "policies", "<shift><ctrl>p", MGROUP_PLAYER,
881 NULL, FALSE },
882 { "START_REVOLUTION", N_("_Revolution..."),
883 "revolution", "<shift><ctrl>g", MGROUP_PLAYING,
884 NULL, FALSE },
885
886 { "REPORT_WOW", N_("_Wonders of the World"),
887 "report_wow", "F7", MGROUP_SAFE,
888 NULL, FALSE },
889 { "REPORT_TOP_CITIES", N_("Top Cities"),
890 "report_top_cities", "F8", MGROUP_SAFE,
891 NULL, FALSE },
892 { "REPORT_MESSAGES", N_("_Messages"),
893 "report_messages", "F9", MGROUP_SAFE,
894 NULL, FALSE },
895 { "REPORT_DEMOGRAPHIC", N_("_Demographics"),
896 "report_demographics", "F11", MGROUP_SAFE,
897 NULL, FALSE },
898 { "REPORT_SPACESHIP", N_("_Spaceship"),
899 "report_spaceship", "F12", MGROUP_SAFE,
900 NULL, FALSE },
901 { "REPORT_ACHIEVEMENTS", N_("_Achievements"),
902 "report_achievements", "asterisk", MGROUP_SAFE | MGROUP_CHAR,
903 NULL, FALSE },
904
905 /* Battle Groups menu */
906 /* Note that user view: 1 - 4, internal: 0 - 3 */
907 { "BG_SELECT_1", N_("Select Battle Group 1"),
908 "bg_select_0", "<shift>F1", MGROUP_PLAYING,
909 NULL, FALSE },
910 { "BG_ASSIGN_1", N_("Assign Battle Group 1"),
911 "bg_assign_0", ACCL_MOD_KEY"F1", MGROUP_PLAYING,
912 NULL, FALSE },
913 { "BG_APPEND_1", N_("Append to Battle Group 1"),
914 "bg_append_0", "<shift><ctrl>F1", MGROUP_PLAYING,
915 NULL, FALSE },
916 { "BG_SELECT_2", N_("Select Battle Group 2"),
917 "bg_select_1", "<shift>F2", MGROUP_PLAYING,
918 NULL, FALSE },
919 { "BG_ASSIGN_2", N_("Assign Battle Group 2"),
920 "bg_assign_1", ACCL_MOD_KEY"F2", MGROUP_PLAYING,
921 NULL, FALSE },
922 { "BG_APPEND_2", N_("Append to Battle Group 2"),
923 "bg_append_1", "<shift><ctrl>F2", MGROUP_PLAYING,
924 NULL, FALSE },
925 { "BG_SELECT_3", N_("Select Battle Group 3"),
926 "bg_select_2", "<shift>F3", MGROUP_PLAYING,
927 NULL, FALSE },
928 { "BG_ASSIGN_3", N_("Assign Battle Group 3"),
929 "bg_assign_2", ACCL_MOD_KEY"F3", MGROUP_PLAYING,
930 NULL, FALSE },
931 { "BG_APPEND_3", N_("Append to Battle Group 3"),
932 "bg_append_2", "<shift><ctrl>F3", MGROUP_PLAYING,
933 NULL, FALSE },
934 { "BG_SELECT_4", N_("Select Battle Group 4"),
935 "bg_select_3", "<shift>F4", MGROUP_PLAYING,
936 NULL, FALSE },
937 { "BG_ASSIGN_4", N_("Assign Battle Group 4"),
938 "bg_assign_3", ACCL_MOD_KEY"F4", MGROUP_PLAYING,
939 NULL, FALSE },
940 { "BG_APPEND_4", N_("Append to Battle Group 4"),
941 "bg_append_3", "<shift><ctrl>F4", MGROUP_PLAYING,
942 NULL, FALSE },
943
944 /* Help menu */
945 { "HELP_OVERVIEW", N_("?help:Overview"),
946 "help_overview", NULL, MGROUP_SAFE,
947 NULL, FALSE },
948 { "HELP_PLAYING", N_("Strategy and Tactics"),
949 "help_playing", NULL, MGROUP_SAFE,
950 NULL, FALSE },
951 { "HELP_POLICIES", N_("Policies"),
952 "help_policies", NULL, MGROUP_SAFE,
953 NULL, FALSE },
954 { "HELP_TERRAIN", N_("Terrain"),
955 "help_terrains", NULL, MGROUP_SAFE,
956 NULL, FALSE },
957 { "HELP_ECONOMY", N_("Economy"),
958 "help_economy", NULL, MGROUP_SAFE,
959 NULL, FALSE },
960 { "HELP_CITIES", N_("Cities"),
961 "help_cities", NULL, MGROUP_SAFE,
962 NULL, FALSE },
963 { "HELP_IMPROVEMENTS", N_("City Improvements"),
964 "help_improvements", NULL, MGROUP_SAFE,
965 NULL, FALSE },
966 { "HELP_WONDERS", N_("Wonders of the World"),
967 "help_wonders", NULL, MGROUP_SAFE,
968 NULL, FALSE },
969 { "HELP_UNITS", N_("Units"),
970 "help_units", NULL, MGROUP_SAFE,
971 NULL, FALSE },
972 { "HELP_COMBAT", N_("Combat"),
973 "help_combat", NULL, MGROUP_SAFE,
974 NULL, FALSE },
975 { "HELP_ZOC", N_("Zones of Control"),
976 "help_zoc", NULL, MGROUP_SAFE,
977 NULL, FALSE },
978 { "HELP_GOVERNMENT", N_("Government"),
979 "help_government", NULL, MGROUP_SAFE,
980 NULL, FALSE },
981 { "HELP_DIPLOMACY", N_("Diplomacy"),
982 "help_diplomacy", NULL, MGROUP_SAFE,
983 NULL, FALSE },
984 { "HELP_TECH", N_("Technology"),
985 "help_tech", NULL, MGROUP_SAFE,
986 NULL, FALSE },
987 { "HELP_SPACE_RACE", N_("Space Race"),
988 "help_space_race", NULL, MGROUP_SAFE,
989 NULL, FALSE },
990 { "HELP_RULESET", N_("About Current Ruleset"),
991 "help_ruleset", NULL, MGROUP_SAFE,
992 NULL, FALSE },
993 { "HELP_TILESET", N_("About Current Tileset"),
994 "help_tileset", NULL, MGROUP_SAFE,
995 NULL, FALSE },
996 { "HELP_MUSICSET", N_("About Current Musicset"),
997 "help_musicset", NULL, MGROUP_SAFE,
998 NULL, FALSE },
999 { "HELP_NATIONS", N_("About Nations"),
1000 "help_nations", NULL, MGROUP_SAFE,
1001 NULL, FALSE },
1002 { "HELP_CONNECTING", N_("Connecting"),
1003 "help_connecting", NULL, MGROUP_SAFE,
1004 NULL, FALSE },
1005 { "HELP_CONTROLS", N_("Controls"),
1006 "help_controls", NULL, MGROUP_SAFE,
1007 NULL, FALSE },
1008 { "HELP_GOVERNOR", N_("Citizen Governor"),
1009 "help_governor", NULL, MGROUP_SAFE,
1010 NULL, FALSE },
1011 { "HELP_CHATLINE", N_("Chatline"),
1012 "help_chatline", NULL, MGROUP_SAFE,
1013 NULL, FALSE },
1014 { "HELP_WORKLIST_EDITOR", N_("Worklist Editor"),
1015 "help_worklist_editor", NULL, MGROUP_SAFE,
1016 NULL, FALSE },
1017 { "HELP_LANGUAGES", N_("Languages"),
1018 "help_languages", NULL, MGROUP_SAFE,
1019 NULL, FALSE },
1020 { "HELP_COPYING", N_("Copying"),
1021 "help_copying", NULL, MGROUP_SAFE,
1022 NULL, FALSE },
1023 { "HELP_ABOUT", N_("About Freeciv"),
1024 "help_about", NULL, MGROUP_SAFE,
1025 NULL, FALSE },
1026 { NULL }
1027};
1028
1029enum {
1059
1061 { "clear_chat", clear_chat_logs_callback },
1062 { "save_chat", save_chat_logs_callback },
1063 { "local_options", local_options_callback },
1064 { "message_options", message_options_callback },
1065 { "server_options", server_options_callback },
1066 { "save_options", save_options_callback },
1067
1068#ifdef FREECIV_DEBUG
1069 { "reload_tileset", reload_tileset_callback },
1070#endif /* FREECIV_DEBUG */
1071
1072 { "game_save", save_game_callback },
1073 { "game_save_as", save_game_as_callback },
1074 { "save_mapimg", save_mapimg_callback },
1075 { "save_mapimg_as", save_mapimg_as_callback },
1076 { "volume_up", volume_up_callback },
1077 { "volume_down", volume_down_callback },
1078 { "leave", leave_callback },
1079 { "quit", quit_callback },
1080
1081 { "find_city", find_city_callback },
1082 { "worklists", worklists_callback },
1083 { "rally_dlg", rally_dialog_callback },
1084 { "infra_dlg", infra_dialog_callback },
1085 { "scenario_props", scenario_properties_callback },
1086 { "scenario_save", save_scenario_callback },
1087 { "lua_script", client_lua_script_callback },
1088
1089 { "center_view", center_view_callback },
1090
1091 { "select_single", select_single_callback },
1092 { "select_all_tile", select_all_on_tile_callback },
1093 { "select_same_type_tile", select_same_type_tile_callback },
1094 { "select_same_type_cont", select_same_type_cont_callback },
1095 { "select_same_type", select_same_type_callback },
1096 { "select_dlg", select_dialog_callback },
1097
1098 { "goto", unit_goto_callback },
1099 { "goto_city", unit_goto_city_callback },
1100 { "return", unit_return_callback },
1101 { "explore", unit_explore_callback },
1102 { "patrol", unit_patrol_callback },
1103 { "teleport", unit_teleport_callback },
1104 { "sentry", unit_sentry_callback },
1105 { "unsentry_all", unsentry_all_callback },
1106 { "board", unit_board_callback },
1107 { "deboard", unit_deboard_callback },
1108 { "unload_transporter", unit_unload_transporter_callback },
1109 { "homecity", unit_homecity_callback },
1110 { "upgrade", unit_upgrade_callback },
1111 { "convert", unit_convert_callback },
1112 { "disband", unit_disband_callback },
1113 { "do_action", do_action_callback },
1114 { "wait", unit_wait_callback },
1115 { "done", unit_done_callback },
1116
1117 { "build_city", build_city_callback },
1118 { "auto_work", auto_work_callback },
1119 { "build_road", build_road_callback },
1120 { "build_irrigation", build_irrigation_callback },
1121 { "build_mine", build_mine_callback },
1122 { "cultivate", cultivate_callback },
1123 { "plant", plant_callback },
1124 { "transform_terrain", transform_terrain_callback },
1125 { "connect_road", connect_road_callback },
1126 { "connect_rail", connect_rail_callback },
1127 { "connect_maglev", connect_maglev_callback },
1128 { "connect_irrigation", connect_irrigation_callback },
1129 { "clean", clean_callback },
1130
1131 { "fortify", fortify_callback },
1132 { "build_base_fortress", build_fortress_callback },
1133 { "build_base_airbase", build_airbase_callback },
1134 { "paradrop", paradrop_callback },
1135 { "pillage", pillage_callback },
1136
1137 { "revolution", revolution_callback },
1138
1139 { "map_view", map_view_callback },
1140 { "report_units", report_units_callback },
1141 { "report_nations", report_nations_callback },
1142 { "report_cities", report_cities_callback },
1143 { "report_economy", report_economy_callback },
1144 { "report_research", report_research_callback },
1145 { "tax_rates", tax_rate_callback },
1146 { "policies", multiplier_callback },
1147 { "report_wow", report_wow_callback },
1148 { "report_top_cities", report_top_cities_callback },
1149 { "report_messages", report_messages_callback },
1150 { "report_demographics", report_demographic_callback },
1151 { "report_spaceship", report_spaceship_callback },
1152 { "report_achievements", report_achievements_callback },
1153
1154 { "help_overview", help_overview_callback },
1155 { "help_playing", help_playing_callback },
1156 { "help_policies", help_policies_callback },
1157 { "help_terrains", help_terrain_callback },
1158 { "help_economy", help_economy_callback },
1159 { "help_cities", help_cities_callback },
1160 { "help_improvements", help_improvements_callback },
1161 { "help_wonders", help_wonders_callback },
1162 { "help_units", help_units_callback },
1163 { "help_combat", help_combat_callback },
1164 { "help_zoc", help_zoc_callback },
1165 { "help_government", help_government_callback },
1166 { "help_diplomacy", help_diplomacy_callback },
1167 { "help_tech", help_tech_callback },
1168 { "help_space_race", help_space_race_callback },
1169 { "help_ruleset", help_ruleset_callback },
1170 { "help_tileset", help_tileset_callback },
1171 { "help_musicset", help_musicset_callback },
1172 { "help_nations", help_nations_callback },
1173 { "help_connecting", help_connecting_callback },
1174 { "help_controls", help_controls_callback },
1175 { "help_governor", help_governor_callback },
1176 { "help_chatline", help_chatline_callback },
1177 { "help_worklist_editor", help_worklist_editor_callback },
1178 { "help_languages", help_language_callback },
1179 { "help_copying", help_copying_callback },
1180 { "help_about", help_about_callback }
1181};
1182
1183static struct menu_entry_info *menu_entry_info_find(const char *key);
1184
1185/************************************************************************/
1189 GVariant *parameter,
1190 gpointer data)
1191{
1193}
1194
1195/************************************************************************/
1199 GVariant *parameter,
1200 gpointer data)
1201{
1203}
1204
1205/************************************************************************/
1209 GVariant *parameter,
1210 gpointer data)
1211{
1212 option_dialog_popup(_("Set local options"), client_optset);
1213}
1214
1215/************************************************************************/
1219 GVariant *parameter,
1220 gpointer data)
1221{
1223}
1224
1225/************************************************************************/
1229 GVariant *parameter,
1230 gpointer data)
1231{
1232 option_dialog_popup(_("Game Settings"), server_optset);
1233}
1234
1235/************************************************************************/
1239 GVariant *parameter,
1240 gpointer data)
1241{
1243}
1244
1245/************************************************************************/
1249 GVariant *parameter,
1250 gpointer data)
1251{
1252 struct menu_entry_info *info = (struct menu_entry_info *)data;
1253
1254 info->state ^= 1;
1256
1258
1261}
1262
1263#ifdef FREECIV_DEBUG
1264/************************************************************************/
1268 GVariant *parameter,
1269 gpointer data)
1270{
1271 tilespec_reread(NULL, TRUE, 1.0);
1272}
1273#endif /* FREECIV_DEBUG */
1274
1275/************************************************************************/
1279 gpointer data)
1280{
1282}
1283
1284/************************************************************************/
1288 gpointer data)
1289{
1291}
1292
1293/************************************************************************/
1297 gpointer data)
1298{
1300}
1301
1302/************************************************************************/
1306 gpointer data)
1307{
1309}
1310
1311/************************************************************************/
1315static void leave_local_game_response(GtkWidget *dialog, gint response)
1316{
1318 if (response == GTK_RESPONSE_OK) {
1319 /* It might be killed already */
1320 if (client.conn.used) {
1321 /* It will also kill the server */
1323 }
1324 }
1325}
1326
1327/************************************************************************/
1331 GVariant *parameter,
1332 gpointer data)
1333{
1334 if (is_server_running()) {
1335 GtkWidget *dialog
1338 _("Leaving a local game will end it!"));
1339 setup_dialog(dialog, toplevel);
1340 g_signal_connect(dialog, "response",
1343 } else {
1345 }
1346}
1347
1348/************************************************************************/
1352 GVariant *parameter,
1353 gpointer data)
1354{
1355 struct option *poption = optset_option_by_name(client_optset, "sound_effects_volume");
1356
1360}
1361
1362/************************************************************************/
1366 GVariant *parameter,
1367 gpointer data)
1368{
1369 struct option *poption = optset_option_by_name(client_optset, "sound_effects_volume");
1370
1374}
1375
1376/************************************************************************/
1380 GVariant *parameter,
1381 gpointer data)
1382{
1384}
1385
1386/************************************************************************/
1390 GVariant *parameter,
1391 gpointer data)
1392{
1394}
1395
1396/************************************************************************/
1400 GVariant *parameter,
1401 gpointer data)
1402{
1404}
1405
1406/************************************************************************/
1410 GVariant *parameter, gpointer data)
1411{
1413}
1414
1415/************************************************************************/
1419 GVariant *parameter,
1420 gpointer data)
1421{
1423}
1424
1425/************************************************************************/
1438
1439/************************************************************************/
1443 GVariant *parameter,
1444 gpointer data)
1445{
1447}
1448
1449/************************************************************************/
1453 GVariant *parameter,
1454 gpointer data)
1455{
1457}
1458
1459/************************************************************************/
1463 GVariant *parameter,
1464 gpointer data)
1465{
1467}
1468
1469/************************************************************************/
1478
1479/************************************************************************/
1488
1489/************************************************************************/
1498
1499/************************************************************************/
1503 GVariant *parameter,
1504 gpointer data)
1505{
1507}
1508
1509/************************************************************************/
1518
1519/************************************************************************/
1523 GVariant *parameter,
1524 gpointer data)
1525{
1527}
1528
1529/************************************************************************/
1533 GVariant *parameter,
1534 gpointer data)
1535{
1537}
1538
1539/************************************************************************/
1543 GVariant *parameter,
1544 gpointer data)
1545{
1547}
1548
1549/************************************************************************/
1558
1559/************************************************************************/
1563 GVariant *parameter,
1564 gpointer data)
1565{
1567}
1568
1569/************************************************************************/
1573 GVariant *parameter,
1574 gpointer data)
1575{
1577}
1578
1579/************************************************************************/
1583 GVariant *parameter,
1584 gpointer data)
1585{
1587}
1588
1589/************************************************************************/
1593 GVariant *parameter,
1594 gpointer data)
1595{
1597}
1598
1599/************************************************************************/
1608
1609/************************************************************************/
1618
1619/************************************************************************/
1623 GVariant *parameter,
1624 gpointer data)
1625{
1627}
1628
1629/************************************************************************/
1638
1639/************************************************************************/
1643 GVariant *parameter,
1644 gpointer data)
1645{
1647}
1648
1649/************************************************************************/
1653 GVariant *parameter,
1654 gpointer data)
1655{
1657}
1658
1659/************************************************************************/
1668
1669/************************************************************************/
1673 GVariant *parameter,
1674 gpointer data)
1675{
1677}
1678
1679/************************************************************************/
1688
1689/************************************************************************/
1698
1699/************************************************************************/
1703 GVariant *parameter,
1704 gpointer data)
1705{
1707}
1708
1709/************************************************************************/
1718
1719/************************************************************************/
1728
1729/************************************************************************/
1738
1739/************************************************************************/
1743 GVariant *parameter,
1744 gpointer data)
1745{
1747}
1748
1749/************************************************************************/
1753 GVariant *parameter,
1754 gpointer data)
1755{
1757}
1758
1759/************************************************************************/
1763 GVariant *parameter,
1764 gpointer data)
1765{
1767
1768 /* Unreachable techs in reqtree on/off */
1770}
1771
1773 const char *menu_entry;
1774 bool *option;
1776};
1777
1779 { "SAVE_OPTIONS_ON_EXIT", &gui_options.save_options_on_exit, -1 },
1780 { "FULL_SCREEN", &(GUI_GTK_OPTION(fullscreen)), -1 },
1781 { "EDIT_MODE", &game.info.is_edit_mode, -1 },
1782 { "TOGGLE_FOG", &game.client.fog_of_war, -1 },
1783 { "SHOW_CITY_OUTLINES", &gui_options.draw_city_outlines, VMENU_CITY_OUTLINES },
1784 { "SHOW_CITY_OUTPUT", &gui_options.draw_city_output, VMENU_CITY_OUTPUT },
1785 { "SHOW_MAP_GRID", &gui_options.draw_map_grid, VMENU_MAP_GRID },
1786 { "SHOW_NAT_BORDERS", &gui_options.draw_borders, VMENU_NAT_BORDERS },
1787 { "SHOW_NATIVE_TILES", &gui_options.draw_native, VMENU_NATIVE_TILES },
1788 { "SHOW_CITY_FULL_BAR", &gui_options.draw_full_citybar, VMENU_CITY_FULL_BAR },
1789 { "SHOW_CITY_NAMES", &gui_options.draw_city_names, VMENU_CITY_NAMES },
1790 { "SHOW_CITY_GROWTH", &gui_options.draw_city_growth, VMENU_CITY_GROWTH },
1791 { "SHOW_CITY_PRODUCTIONS", &gui_options.draw_city_productions,
1793 { "SHOW_CITY_BUY_COST", &gui_options.draw_city_buycost, VMENU_CITY_BUY_COST },
1794 { "SHOW_CITY_TRADE_ROUTES", &gui_options.draw_city_trade_routes,
1796 { "SHOW_TERRAIN", &gui_options.draw_terrain, VMENU_TERRAIN },
1797 { "SHOW_COASTLINE", &gui_options.draw_coastline, VMENU_COASTLINE },
1798 { "SHOW_PATHS", &gui_options.draw_paths, VMENU_PATHS },
1799 { "SHOW_IRRIGATION", &gui_options.draw_irrigation, VMENU_IRRIGATION },
1800 { "SHOW_MINES", &gui_options.draw_mines, VMENU_MINES },
1801 { "SHOW_BASES", &gui_options.draw_fortress_airbase, VMENU_BASES },
1802 { "SHOW_RESOURCES", &gui_options.draw_specials, VMENU_RESOURCES },
1803 { "SHOW_HUTS", &gui_options.draw_huts, VMENU_HUTS },
1804 { "SHOW_POLLUTION", &gui_options.draw_pollution, VMENU_POLLUTION },
1805 { "SHOW_CITIES", &gui_options.draw_cities, VMENU_CITIES },
1806 { "SHOW_UNITS", &gui_options.draw_units, VMENU_UNITS },
1807 { "SHOW_UNIT_SOLID_BG", &gui_options.solid_color_behind_units, VMENU_UNIT_SOLID_BG },
1808 { "SHOW_UNIT_SHIELDS", &gui_options.draw_unit_shields , VMENU_UNIT_SHIELDS },
1809 { "SHOW_STACK_SIZE", &gui_options.draw_unit_stack_size, VMENU_STACK_SIZE },
1810 { "SHOW_FOCUS_UNIT", &gui_options.draw_focus_unit, VMENU_FOCUS_UNIT },
1811 { "SHOW_FOG_OF_WAR", &gui_options.draw_fog_of_war, VMENU_FOW },
1812
1813 { NULL, NULL, -1 }
1814};
1815
1816/************************************************************************/
1819static void view_menu_item_toggle(void (*cb)(void),
1820 bool updt_sensitivity,
1821 gpointer data)
1822{
1823 int i;
1824 struct menu_entry_info *info = (struct menu_entry_info *)data;
1825
1826 info->state ^= 1;
1827
1828 cb();
1829
1830 if (updt_sensitivity) {
1832 }
1833
1834 /* TODO: Make the information available directly from menu_entry_info,
1835 * se we don't need to do this search for it */
1836 for (i = 0; meoms[i].menu_entry != NULL; i++) {
1837 if (!strcmp(meoms[i].menu_entry, info->key)) {
1838 g_menu_remove(view_menu, meoms[i].menu_pos);
1841 return;
1842 }
1843 }
1844}
1845
1846/************************************************************************/
1855
1856/************************************************************************/
1860 GVariant *parameter,
1861 gpointer data)
1862{
1864}
1865
1866/************************************************************************/
1874
1875/************************************************************************/
1884
1885/************************************************************************/
1889 GVariant *parameter,
1890 gpointer data)
1891{
1893}
1894
1895/************************************************************************/
1904
1905/************************************************************************/
1909 GVariant *parameter,
1910 gpointer data)
1911{
1913}
1914
1915/************************************************************************/
1919 GVariant *parameter,
1920 gpointer data)
1921{
1923}
1924
1925/************************************************************************/
1934
1935/************************************************************************/
1944
1945/************************************************************************/
1954
1955/************************************************************************/
1959 GVariant *parameter,
1960 gpointer data)
1961{
1963}
1964
1965/************************************************************************/
1969 GVariant *parameter,
1970 gpointer data)
1971{
1973}
1974
1975/************************************************************************/
1979 GVariant *parameter,
1980 gpointer data)
1981{
1983}
1984
1985/************************************************************************/
1989 GVariant *parameter,
1990 gpointer data)
1991{
1993}
1994
1995/************************************************************************/
1999 GVariant *parameter,
2000 gpointer data)
2001{
2003}
2004
2005/************************************************************************/
2009 gpointer data)
2010{
2012}
2013
2014/************************************************************************/
2018 GVariant *parameter,
2019 gpointer data)
2020{
2022}
2023
2024/************************************************************************/
2028 gpointer data)
2029{
2031}
2032
2033/************************************************************************/
2041
2042/************************************************************************/
2046 gpointer data)
2047{
2049}
2050
2051/************************************************************************/
2055 gpointer data)
2056{
2058}
2059
2060/************************************************************************/
2069
2070/************************************************************************/
2079
2080/************************************************************************/
2089
2090/************************************************************************/
2094 GVariant *parameter,
2095 gpointer data)
2096{
2098}
2099
2100/************************************************************************/
2108
2109/************************************************************************/
2113 gpointer data)
2114{
2115 struct menu_entry_info *info = (struct menu_entry_info *)data;
2116
2117 info->state ^= 1;
2119
2121
2123
2126}
2127
2128/************************************************************************/
2132 GVariant *parameter,
2133 gpointer data)
2134{
2135 struct menu_entry_info *info = (struct menu_entry_info *)data;
2136
2137 info->state ^= 1;
2138
2140
2142
2145}
2146
2147/************************************************************************/
2160
2161/************************************************************************/
2165 gpointer data)
2166{
2168}
2169
2170/************************************************************************/
2178
2179/************************************************************************/
2188
2189/************************************************************************/
2198
2199/************************************************************************/
2208
2209/************************************************************************/
2218
2219/************************************************************************/
2223 GVariant *parameter,
2224 gpointer data)
2225{
2227}
2228
2229/************************************************************************/
2233 GVariant *parameter,
2234 gpointer data)
2235{
2237}
2238
2239/************************************************************************/
2243 GVariant *parameter,
2244 gpointer data)
2245{
2247}
2248
2249/************************************************************************/
2253 GVariant *parameter,
2254 gpointer data)
2255{
2256 key_unit_wait();
2257}
2258
2259/************************************************************************/
2263 GVariant *parameter,
2264 gpointer data)
2265{
2266 key_unit_done();
2267}
2268
2269/************************************************************************/
2273 gpointer data)
2274{
2275 key_unit_goto();
2276}
2277
2278/************************************************************************/
2282 GVariant *parameter,
2283 gpointer data)
2284{
2285 int sub_target = NO_TARGET;
2286 struct action *paction = (struct action *)data;
2287
2289
2291 case ASTK_BUILDING:
2292 {
2294 "end_building");
2296 sub_target = improvement_number(pbuilding);
2297 }
2298 break;
2299 case ASTK_TECH:
2300 {
2302 "end_tech");
2304 sub_target = advance_number(ptech);
2305 }
2306 break;
2307 case ASTK_EXTRA:
2309 {
2310 struct extra_type *pextra = g_object_get_data(G_OBJECT(action),
2311 "end_extra");
2312 fc_assert_ret(pextra != NULL);
2313 sub_target = extra_number(pextra);
2314 }
2315 break;
2316 case ASTK_NONE:
2317 sub_target = NO_TARGET;
2318 break;
2319 case ASTK_COUNT:
2320 /* Should not exits */
2322 break;
2323 }
2324
2326}
2327
2328/************************************************************************/
2332 GVariant *parameter,
2333 gpointer data)
2334{
2335 if (get_num_units_in_focus() > 0) {
2337 }
2338}
2339
2340/************************************************************************/
2351
2352/************************************************************************/
2356 GVariant *parameter,
2357 gpointer data)
2358{
2360}
2361
2362/************************************************************************/
2366 gpointer data)
2367{
2369}
2370
2371/************************************************************************/
2375 gpointer data)
2376{
2378}
2379
2380/************************************************************************/
2384 GVariant *parameter,
2385 gpointer data)
2386{
2388}
2389
2390/************************************************************************/
2394 GVariant *parameter,
2395 gpointer data)
2396{
2398}
2399
2400/************************************************************************/
2411
2412/************************************************************************/
2422
2423/************************************************************************/
2433
2434/************************************************************************/
2438 GVariant *parameter,
2439 gpointer data)
2440{
2442}
2443
2444/************************************************************************/
2448 GVariant *parameter,
2449 gpointer data)
2450{
2452}
2453
2454/************************************************************************/
2463
2464/************************************************************************/
2468 GVariant *parameter,
2469 gpointer data)
2470{
2472}
2473
2474/************************************************************************/
2483
2484/************************************************************************/
2488 GVariant *parameter,
2489 gpointer data)
2490{
2492 /* FIXME: this can provide different items for different units...
2493 * not good! */
2494 /* Enable the button for adding to a city in all cases, so we
2495 get an eventual error message from the server if we try. */
2501 }
2503}
2504
2505/************************************************************************/
2509 GVariant *parameter,
2510 gpointer data)
2511{
2513}
2514
2515/************************************************************************/
2519 GVariant *parameter,
2520 gpointer data)
2521{
2523 /* FIXME: this can provide different actions for different units...
2524 * not good! */
2526 EC_ROAD,
2528 punit);
2529 bool building_road = FALSE;
2530
2531 if (tgt != NULL
2535 }
2536
2539 }
2541}
2542
2543/************************************************************************/
2547 GVariant *parameter,
2548 gpointer data)
2549{
2551}
2552
2553/************************************************************************/
2557 GVariant *parameter,
2558 gpointer data)
2559{
2561}
2562
2563/************************************************************************/
2567 GVariant *parameter,
2568 gpointer data)
2569{
2571}
2572
2573/************************************************************************/
2577 GVariant *parameter,
2578 gpointer data)
2579{
2580 key_unit_mine();
2581}
2582
2583/************************************************************************/
2587 GVariant *parameter,
2588 gpointer data)
2589{
2591
2592 if (proad != NULL) {
2593 struct extra_type *tgt;
2594
2595 tgt = road_extra_get(proad);
2596
2598 }
2599}
2600
2601/************************************************************************/
2605 GVariant *parameter,
2606 gpointer data)
2607{
2609
2610 if (prail != NULL) {
2611 struct extra_type *tgt;
2612
2613 tgt = road_extra_get(prail);
2614
2616 }
2617}
2618
2619/************************************************************************/
2623 GVariant *parameter,
2624 gpointer data)
2625{
2627
2628 if (pmaglev != NULL) {
2629 struct extra_type *tgt;
2630
2631 tgt = road_extra_get(pmaglev);
2632
2634 }
2635}
2636
2637/************************************************************************/
2641 GVariant *parameter,
2642 gpointer data)
2643{
2645
2646 if (extra_type_list_size(extras) > 0) {
2647 struct extra_type *pextra;
2648
2650
2652 }
2653}
2654
2655/************************************************************************/
2659 GVariant *parameter,
2660 gpointer data)
2661{
2663}
2664
2665/************************************************************************/
2669 gpointer data)
2670{
2672}
2673
2674/************************************************************************/
2678 gpointer data)
2679{
2681}
2682
2683/************************************************************************/
2687 gpointer data)
2688{
2690}
2691
2692/************************************************************************/
2696 GVariant *parameter,
2697 gpointer data)
2698{
2700}
2701
2702/************************************************************************/
2706 GVariant *parameter,
2707 gpointer data)
2708{
2710}
2711
2712/************************************************************************/
2716 GVariant *parameter,
2717 gpointer data)
2718{
2720}
2721
2722/************************************************************************/
2726 gpointer data)
2727{
2729}
2730
2731/************************************************************************/
2735 gpointer data)
2736{
2738}
2739
2740/************************************************************************/
2744 GVariant *parameter,
2745 gpointer data)
2746{
2748}
2749
2750/************************************************************************/
2754 GVariant *parameter,
2755 gpointer data)
2756{
2758}
2759
2760/************************************************************************/
2764 GVariant *parameter,
2765 gpointer data)
2766{
2767 struct extra_type *pextra = data;
2768
2772}
2773
2774/************************************************************************/
2778 GVariant *parameter,
2779 gpointer data)
2780{
2781 struct extra_type *pextra = data;
2782
2785 pextra);
2787}
2788
2789/************************************************************************/
2793 GVariant *parameter,
2794 gpointer data)
2795{
2796 struct extra_type *pextra = data;
2797
2800 pextra);
2802}
2803
2804/************************************************************************/
2808 GVariant *parameter,
2809 gpointer data)
2810{
2811 struct extra_type *pextra = data;
2812
2815 pextra);
2817}
2818
2819/************************************************************************/
2823 GVariant *parameter,
2824 gpointer data)
2825{
2826 struct extra_type *pextra = data;
2827
2831 pextra);
2832 }
2834}
2835
2836/************************************************************************/
2840 GVariant *parameter,
2841 gpointer data)
2842{
2844}
2845
2846/************************************************************************/
2850 GVariant *parameter,
2851 gpointer data)
2852{
2854}
2855
2856/************************************************************************/
2860 GVariant *parameter,
2861 gpointer data)
2862
2863{
2865}
2866
2867/************************************************************************/
2876
2877/************************************************************************/
2886
2887/************************************************************************/
2891 GVariant *parameter,
2892 gpointer data)
2893{
2894 if (NULL != client.conn.playing) {
2896 }
2897}
2898
2899/************************************************************************/
2908
2909/************************************************************************/
2918
2919/************************************************************************/
2928
2929/************************************************************************/
2934{
2935 char actname[150];
2936 GMenuItem *item;
2937
2938 fc_snprintf(actname, sizeof(actname), "app.%s(%s)",
2939 info->action, info->state ? "true" : "false");
2940 item = g_menu_item_new(Q_(info->name), NULL);
2942
2943 if (info->accl != NULL) {
2944 const char *accls[2] = { info->accl, NULL };
2945
2947 }
2948
2949 return item;
2950}
2951
2952/************************************************************************/
2957{
2959}
2960
2961/************************************************************************/
2964static void menu_entry_init(GMenu *sub, const char *key)
2965{
2967
2968 if (info != NULL) {
2969 GMenuItem *item;
2970
2971 if (info->toggle != NULL) {
2973 } else {
2974 char actname[150];
2975
2976 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
2977 item = g_menu_item_new(Q_(info->name), actname);
2978 }
2979
2980 /* Should be menu_item_append_unref()? */
2983 }
2984}
2985
2986/************************************************************************/
2990{
2991 int i;
2992
2993 for (i = 0; meoms[i].menu_entry != NULL; i++) {
2994 struct menu_entry_info *info = menu_entry_info_find(meoms[i].menu_entry);
2995
2996 if (meoms[i].option != NULL) {
2997 info->state = *meoms[i].option;
2998 } else {
2999 info->state = FALSE; /* Best guess we have */
3000 }
3001 }
3002}
3003
3004/************************************************************************/
3008{
3009 int i;
3011
3012 /* Simple entries */
3015
3016 /* Toggles */
3017 for (i = 0; menu_entries[i].key != NULL; i++) {
3018 if (menu_entries[i].toggle != NULL) {
3019 GSimpleAction *act;
3020 GVariant *var = g_variant_new("b", TRUE);
3021
3024 g_signal_connect(act, "change-state",
3026 (gpointer)&(menu_entries[i]));
3027 }
3028 }
3029
3031
3032 for (i = 0; menu_entries[i].key != NULL; i++) {
3033 if (menu_entries[i].accl != NULL && menu_entries[i].toggle == NULL) {
3034 const char *accls[2] = { menu_entries[i].accl, NULL };
3035 char actname[150];
3036
3037 fc_snprintf(actname, sizeof(actname), "app.%s", menu_entries[i].action);
3038
3040 }
3041 }
3042}
3043
3044/************************************************************************/
3047static void register_bg_actions(GActionMap *map, int bg)
3048{
3049 GSimpleAction *act;
3050 char actname[256];
3051
3052 fc_snprintf(actname, sizeof(actname), "bg_select_%d", bg);
3055 g_signal_connect(act, "activate",
3057
3058 fc_snprintf(actname, sizeof(actname), "bg_assign_%d", bg);
3061 g_signal_connect(act, "activate",
3063
3064 fc_snprintf(actname, sizeof(actname), "bg_append_%d", bg);
3067 g_signal_connect(act, "activate",
3069}
3070
3071/************************************************************************/
3075{
3076 GMenu *menubar;
3077 GMenu *topmenu;
3078 GMenu *submenu;
3079 int i;
3080
3082
3083 menubar = g_menu_new();
3084
3085 topmenu = g_menu_new();
3086 menu_entry_init(topmenu, "CLEAR_CHAT_LOGS");
3087 menu_entry_init(topmenu, "SAVE_CHAT_LOGS");
3088
3090 menu_entry_init(options_menu, "LOCAL_OPTIONS");
3091 menu_entry_init(options_menu, "MESSAGE_OPTIONS");
3092 menu_entry_init(options_menu, "SERVER_OPTIONS");
3093 menu_entry_init(options_menu, "SAVE_OPTIONS");
3094 menu_entry_init(options_menu, "SAVE_OPTIONS_ON_EXIT");
3095
3097
3098#ifdef FREECIV_DEBUG
3099 menu_entry_init(topmenu, "RELOAD_TILESET");
3100#endif /* FREECIV_DEBUG */
3101
3102 menu_entry_init(topmenu, "GAME_SAVE");
3103 menu_entry_init(topmenu, "GAME_SAVE_AS");
3104 menu_entry_init(topmenu, "MAPIMG_SAVE");
3105 menu_entry_init(topmenu, "MAPIMG_SAVE_AS");
3106 menu_entry_init(topmenu, "VOLUME_UP");
3107 menu_entry_init(topmenu, "VOLUME_DOWN");
3108 menu_entry_init(topmenu, "LEAVE");
3109 menu_entry_init(topmenu, "QUIT");
3110
3112
3114
3115 menu_entry_init(edit_menu, "FIND_CITY");
3116 menu_entry_init(edit_menu, "WORKLISTS");
3117 menu_entry_init(edit_menu, "RALLY_DLG");
3118 menu_entry_init(edit_menu, "INFRA_DLG");
3119 menu_entry_init(edit_menu, "EDIT_MODE");
3120 menu_entry_init(edit_menu, "TOGGLE_FOG");
3121 menu_entry_init(edit_menu, "SCENARIO_PROPERTIES");
3122 menu_entry_init(edit_menu, "SCENARIO_SAVE");
3123 menu_entry_init(edit_menu, "CLIENT_LUA_SCRIPT");
3124
3126
3128
3129 menu_entry_init(view_menu, "SHOW_CITY_OUTLINES");
3130 menu_entry_init(view_menu, "SHOW_CITY_OUTPUT");
3131 menu_entry_init(view_menu, "SHOW_MAP_GRID");
3132 menu_entry_init(view_menu, "SHOW_NAT_BORDERS");
3133 menu_entry_init(view_menu, "SHOW_NATIVE_TILES");
3134 menu_entry_init(view_menu, "SHOW_CITY_FULL_BAR");
3135 menu_entry_init(view_menu, "SHOW_CITY_NAMES");
3136 menu_entry_init(view_menu, "SHOW_CITY_GROWTH");
3137 menu_entry_init(view_menu, "SHOW_CITY_PRODUCTIONS");
3138 menu_entry_init(view_menu, "SHOW_CITY_BUY_COST");
3139 menu_entry_init(view_menu, "SHOW_CITY_TRADE_ROUTES");
3140 menu_entry_init(view_menu, "SHOW_TERRAIN");
3141 menu_entry_init(view_menu, "SHOW_COASTLINE");
3142 menu_entry_init(view_menu, "SHOW_PATHS");
3143 menu_entry_init(view_menu, "SHOW_IRRIGATION");
3144 menu_entry_init(view_menu, "SHOW_MINES");
3145 menu_entry_init(view_menu, "SHOW_BASES");
3146 menu_entry_init(view_menu, "SHOW_RESOURCES");
3147 menu_entry_init(view_menu, "SHOW_HUTS");
3148 menu_entry_init(view_menu, "SHOW_POLLUTION");
3149 menu_entry_init(view_menu, "SHOW_CITIES");
3150 menu_entry_init(view_menu, "SHOW_UNITS");
3151 menu_entry_init(view_menu, "SHOW_UNIT_SOLID_BG");
3152 menu_entry_init(view_menu, "SHOW_UNIT_SHIELDS");
3153 menu_entry_init(view_menu, "SHOW_STACK_SIZE");
3154 menu_entry_init(view_menu, "SHOW_FOCUS_UNIT");
3155
3156 menu_entry_init(view_menu, "SHOW_FOG_OF_WAR");
3157
3158 menu_entry_init(view_menu, "FULL_SCREEN");
3159 menu_entry_init(view_menu, "CENTER_VIEW");
3160
3162
3163 topmenu = g_menu_new();
3164
3165 menu_entry_init(topmenu, "SELECT_SINGLE");
3166 menu_entry_init(topmenu, "SELECT_ALL_ON_TILE");
3167 menu_entry_init(topmenu, "SELECT_SAME_TYPE_TILE");
3168 menu_entry_init(topmenu, "SELECT_SAME_TYPE_CONT");
3169 menu_entry_init(topmenu, "SELECT_SAME_TYPE");
3170 menu_entry_init(topmenu, "SELECT_DLG");
3171
3173
3175
3176 menu_entry_init(unit_menu, "UNIT_GOTO");
3177
3178 /* Placeholder submenu (so that menu update has something to replace) */
3179 submenu = g_menu_new();
3181
3182 menu_entry_init(unit_menu, "UNIT_GOTO_CITY");
3183 menu_entry_init(unit_menu, "UNIT_RETURN");
3184 menu_entry_init(unit_menu, "UNIT_EXPLORE");
3185 menu_entry_init(unit_menu, "UNIT_PATROL");
3186 menu_entry_init(unit_menu, "UNIT_TELEPORT");
3187 menu_entry_init(unit_menu, "UNIT_SENTRY");
3188 menu_entry_init(unit_menu, "UNSENTRY_ALL");
3189 menu_entry_init(unit_menu, "UNIT_BOARD");
3190 menu_entry_init(unit_menu, "UNIT_DEBOARD");
3191 menu_entry_init(unit_menu, "UNIT_UNLOAD_TRANSPORTER");
3192 menu_entry_init(unit_menu, "UNIT_HOMECITY");
3193 menu_entry_init(unit_menu, "UNIT_UPGRADE");
3194 menu_entry_init(unit_menu, "UNIT_CONVERT");
3195 menu_entry_init(unit_menu, "UNIT_DISBAND");
3196 menu_entry_init(unit_menu, "DO_ACTION");
3197 menu_entry_init(unit_menu, "UNIT_WAIT");
3198 menu_entry_init(unit_menu, "UNIT_DONE");
3199
3201
3203 menu_entry_init(work_menu, "BUILD_CITY");
3204 menu_entry_init(work_menu, "AUTO_WORKER");
3205
3206 /* Placeholder submenus (so that menu update has something to replace) */
3207 submenu = g_menu_new();
3209 submenu = g_menu_new();
3210 submenu_append_unref(work_menu, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3211 submenu = g_menu_new();
3213 submenu = g_menu_new();
3214 submenu_append_unref(work_menu, _("_Clean Nuisance"), G_MENU_MODEL(submenu));
3215
3216 menu_entry_init(work_menu, "BUILD_ROAD");
3217 menu_entry_init(work_menu, "BUILD_IRRIGATION");
3218 menu_entry_init(work_menu, "BUILD_MINE");
3219 menu_entry_init(work_menu, "CULTIVATE");
3220 menu_entry_init(work_menu, "PLANT");
3221 menu_entry_init(work_menu, "TRANSFORM_TERRAIN");
3222 menu_entry_init(work_menu, "CONNECT_ROAD");
3223 menu_entry_init(work_menu, "CONNECT_RAIL");
3224 menu_entry_init(work_menu, "CONNECT_MAGLEV");
3225 menu_entry_init(work_menu, "CONNECT_IRRIGATION");
3226 menu_entry_init(work_menu, "CLEAN");
3227
3229
3231 menu_entry_init(combat_menu, "FORTIFY");
3232 menu_entry_init(combat_menu, "BUILD_FORTRESS");
3233 menu_entry_init(combat_menu, "BUILD_AIRBASE");
3234
3235 /* Placeholder submenu (so that menu update has something to replace) */
3236 submenu = g_menu_new();
3238
3240
3241 menu_entry_init(combat_menu, "PARADROP");
3242 menu_entry_init(combat_menu, "PILLAGE");
3243
3244 gov_menu = g_menu_new();
3245
3246 menu_entry_init(gov_menu, "MAP_VIEW");
3247 menu_entry_init(gov_menu, "REPORT_UNITS");
3248 menu_entry_init(gov_menu, "REPORT_NATIONS");
3249 menu_entry_init(gov_menu, "REPORT_CITIES");
3250 menu_entry_init(gov_menu, "REPORT_ECONOMY");
3251 menu_entry_init(gov_menu, "REPORT_RESEARCH");
3252 menu_entry_init(gov_menu, "TAX_RATES");
3253 menu_entry_init(gov_menu, "POLICIES");
3254
3255 /* Placeholder submenu (so that menu update has something to replace) */
3256 submenu = g_menu_new();
3258
3259 menu_entry_init(gov_menu, "REPORT_WOW");
3260 menu_entry_init(gov_menu, "REPORT_TOP_CITIES");
3261 menu_entry_init(gov_menu, "REPORT_MESSAGES");
3262 menu_entry_init(gov_menu, "REPORT_DEMOGRAPHIC");
3263 menu_entry_init(gov_menu, "REPORT_SPACESHIP");
3264 menu_entry_init(gov_menu, "REPORT_ACHIEVEMENTS");
3265
3266 submenu_append_unref(menubar, _("C_ivilization"), G_MENU_MODEL(gov_menu));
3267
3268 topmenu = g_menu_new();
3269
3270 /* Keys exist for 4 battle groups */
3272
3273 for (i = 0; i < MAX_NUM_BATTLEGROUPS; i++) {
3274 char key[128];
3275
3276 /* User side battle group numbers start from 1 */
3277 fc_snprintf(key, sizeof(key), "BG_SELECT_%d", i + 1);
3279 fc_snprintf(key, sizeof(key), "BG_ASSIGN_%d", i + 1);
3281 fc_snprintf(key, sizeof(key), "BG_APPEND_%d", i + 1);
3283
3285 }
3286
3287 submenu_append_unref(menubar, _("_Battle Groups"), G_MENU_MODEL(topmenu));
3288
3289 topmenu = g_menu_new();
3290
3291 menu_entry_init(topmenu, "HELP_OVERVIEW");
3292 menu_entry_init(topmenu, "HELP_PLAYING");
3293 menu_entry_init(topmenu, "HELP_POLICIES");
3294 menu_entry_init(topmenu, "HELP_TERRAIN");
3295 menu_entry_init(topmenu, "HELP_ECONOMY");
3296 menu_entry_init(topmenu, "HELP_CITIES");
3297 menu_entry_init(topmenu, "HELP_IMPROVEMENTS");
3298 menu_entry_init(topmenu, "HELP_WONDERS");
3299 menu_entry_init(topmenu, "HELP_UNITS");
3300 menu_entry_init(topmenu, "HELP_COMBAT");
3301 menu_entry_init(topmenu, "HELP_ZOC");
3302 menu_entry_init(topmenu, "HELP_GOVERNMENT");
3303 menu_entry_init(topmenu, "HELP_DIPLOMACY");
3304 menu_entry_init(topmenu, "HELP_TECH");
3305 menu_entry_init(topmenu, "HELP_SPACE_RACE");
3306 menu_entry_init(topmenu, "HELP_RULESET");
3307 menu_entry_init(topmenu, "HELP_TILESET");
3308 menu_entry_init(topmenu, "HELP_MUSICSET");
3309 menu_entry_init(topmenu, "HELP_NATIONS");
3310 menu_entry_init(topmenu, "HELP_CONNECTING");
3311 menu_entry_init(topmenu, "HELP_CONTROLS");
3312 menu_entry_init(topmenu, "HELP_GOVERNOR");
3313 menu_entry_init(topmenu, "HELP_CHATLINE");
3314 menu_entry_init(topmenu, "HELP_WORKLIST_EDITOR");
3315 menu_entry_init(topmenu, "HELP_LANGUAGES");
3316 menu_entry_init(topmenu, "HELP_COPYING");
3317 menu_entry_init(topmenu, "HELP_ABOUT");
3318
3320
3321 menus_built = TRUE;
3322
3324
3325 return menubar;
3326}
3327
3328/************************************************************************/
3331static struct menu_entry_info *menu_entry_info_find(const char *key)
3332{
3333 int i;
3334
3335 for (i = 0; menu_entries[i].key != NULL; i++) {
3336 if (!strcmp(key, menu_entries[i].key)) {
3337 return &(menu_entries[i]);
3338 }
3339 }
3340
3341 return NULL;
3342}
3343
3344/************************************************************************/
3348 struct menu_entry_info *info,
3350{
3351 GAction *act = g_action_map_lookup_action(map, info->action);
3352
3353 if (act != NULL) {
3355 }
3356}
3357
3358/************************************************************************/
3362 const char *key,
3364{
3366
3367 if (info != NULL) {
3369 }
3370}
3371
3372/************************************************************************/
3376 enum menu_entry_grouping group,
3378{
3379 int i;
3380
3381 for (i = 0; menu_entries[i].key != NULL; i++) {
3382 if (menu_entries[i].grouping & group) {
3384 }
3385 }
3386}
3387
3388/************************************************************************/
3391static void menus_rename(GMenu *parent, int index, const char *key,
3392 const char *new_name)
3393{
3395
3396 if (info != NULL) {
3397 char actname[150];
3398 GMenuItem *item;
3399
3400 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
3401 g_menu_remove(parent, index);
3402
3403 item = g_menu_item_new(new_name, actname);
3405 }
3406}
3407
3408/************************************************************************/
3412{
3413 /* The "full" city bar (i.e. the new way of drawing the
3414 * city name), can draw the city growth even without drawing
3415 * the city name. But the old method cannot. */
3417 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", TRUE);
3418 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES", TRUE);
3419 } else {
3420 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", gui_options.draw_city_names);
3421 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES",
3423 }
3424
3425 menu_entry_set_sensitive(map, "SHOW_CITY_BUY_COST",
3427 menu_entry_set_sensitive(map, "SHOW_COASTLINE", !gui_options.draw_terrain);
3428 menu_entry_set_sensitive(map, "SHOW_UNIT_SOLID_BG",
3430 menu_entry_set_sensitive(map, "SHOW_UNIT_SHIELDS",
3432 menu_entry_set_sensitive(map, "SHOW_FOCUS_UNIT", !gui_options.draw_units);
3433}
3434
3435/************************************************************************/
3441static const char *get_tile_change_menu_text(struct tile *ptile,
3442 enum unit_activity activity)
3443{
3444 struct tile *newtile = tile_virtual_new(ptile);
3445 const char *text;
3446
3447 tile_apply_activity(newtile, activity, NULL);
3448 text = tile_get_info_text(newtile, FALSE, 0);
3450
3451 return text;
3452}
3453
3454/************************************************************************/
3458{
3461 GMenu *submenu;
3462 int i, j;
3463 int tgt_kind_group;
3464 struct unit_list *punits;
3465 unsigned num_units;
3466 struct menu_entry_info *info;
3467 struct road_type *proad;
3468 struct extra_type_list *extras;
3469 bool conn_possible;
3470
3472 return;
3473 }
3474
3476
3477 submenu = g_menu_new();
3478
3479 i = 0;
3480 j = 0;
3481
3482 /* Add the new action entries grouped by target kind. */
3485 struct action *paction = action_by_number(act_id);
3486 GSimpleAction *act;
3487 char actname[256];
3488 char name[256];
3489
3490 if (action_id_get_actor_kind(act_id) != AAK_UNIT) {
3491 /* This action isn't performed by a unit. */
3492 continue;
3493 }
3494
3496 /* Wrong group. */
3497 continue;
3498 }
3499
3500 if (!units_can_do_action(punits, act_id, TRUE)) {
3501 continue;
3502 }
3503
3504 /* Create and add the menu item. */
3505 fc_snprintf(actname, sizeof(actname), "action_%d", i);
3508
3509 fc_snprintf(name, sizeof(name), "%s",
3510 action_get_ui_name_mnemonic(act_id, "_"));
3511 fc_snprintf(actname, sizeof(actname), "app.action_%d", i++);
3512
3513 if (action_id_has_complex_target(act_id)) {
3515 char subname[256];
3516
3517#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_) \
3518{ \
3519 fc_snprintf(actname, sizeof(actname), "subtgt_%d", j); \
3520 act = g_simple_action_new(actname, NULL); \
3521 g_action_map_add_action(map, G_ACTION(act)); \
3522 g_object_set_data(G_OBJECT(act), _sub_target_key_, _sub_target_); \
3523 g_signal_connect(act, "activate", G_CALLBACK(unit_goto_and_callback), \
3524 paction); \
3525 fc_snprintf(subname, sizeof(subname), "%s", _sub_target_name_); \
3526 fc_snprintf(actname, sizeof(actname), "app.subtgt_%d", j++); \
3527 menu_item_append_unref(sub_target_menu, \
3528 g_menu_item_new(subname, actname)); \
3529}
3530
3532 case ASTK_BUILDING:
3534 CREATE_SUB_ITEM(pimpr, "end_building",
3537 break;
3538 case ASTK_TECH:
3540 CREATE_SUB_ITEM(ptech, "end_tech",
3543 break;
3544 case ASTK_EXTRA:
3546 extra_type_iterate(pextra) {
3547 if (!actres_creates_extra(paction->result, pextra)
3548 && !actres_removes_extra(paction->result, pextra)) {
3549 /* Not relevant */
3550 continue;
3551 }
3552 CREATE_SUB_ITEM(pextra, "end_extra",
3553 extra_name_translation(pextra));
3555 break;
3556 case ASTK_NONE:
3557 /* Should not be here. */
3559 break;
3560 case ASTK_COUNT:
3561 /* Should not exits */
3563 break;
3564 }
3565
3566#undef CREATE_SUB_ITEM
3567
3569 } else {
3570 g_signal_connect(act, "activate",
3573 }
3575 }
3577 g_menu_insert_submenu(unit_menu, 1, _("Go to a_nd..."), G_MENU_MODEL(submenu));
3578
3579 submenu = g_menu_new();
3580
3582 menu_entry_init(submenu, "START_REVOLUTION");
3583 }
3584
3585 i = 0;
3588 char name[256];
3589 char actname[256];
3590 GSimpleAction *act;
3591
3592 fc_snprintf(actname, sizeof(actname), "government_%d", i);
3596 g_signal_connect(act, "activate", G_CALLBACK(government_callback), g);
3597
3598 /* TRANS: %s is a government name */
3599 fc_snprintf(name, sizeof(name), _("%s..."),
3601 fc_snprintf(actname, sizeof(actname), "app.government_%d", i++);
3603 }
3606 g_menu_insert_submenu(gov_menu, 8, _("_Government"), G_MENU_MODEL(submenu));
3607
3608 submenu = g_menu_new();
3609
3611 if (pextra->buildable) {
3612 char actname[256];
3613 GSimpleAction *act;
3614
3615 fc_snprintf(actname, sizeof(actname), "path_%d", i);
3620 pextra));
3622 g_signal_connect(act, "activate", G_CALLBACK(road_callback), pextra);
3623
3624 fc_snprintf(actname, sizeof(actname), "app.path_%d", i++);
3627 }
3629
3632
3633 submenu = g_menu_new();
3634
3636 if (pextra->buildable) {
3637 char actname[256];
3638 GSimpleAction *act;
3639
3640 fc_snprintf(actname, sizeof(actname), "irrig_%d", i);
3645 pextra));
3647 g_signal_connect(act, "activate", G_CALLBACK(irrigation_callback), pextra);
3648
3649 fc_snprintf(actname, sizeof(actname), "app.irrig_%d", i++);
3652 }
3654
3656 g_menu_insert_submenu(work_menu, 3, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3657
3658 submenu = g_menu_new();
3659
3661 if (pextra->buildable) {
3662 char actname[256];
3663 GSimpleAction *act;
3664
3665 fc_snprintf(actname, sizeof(actname), "mine_%d", i);
3670 pextra));
3672 g_signal_connect(act, "activate", G_CALLBACK(mine_callback), pextra);
3673
3674 fc_snprintf(actname, sizeof(actname), "app.mine_%d", i++);
3677 }
3679
3682
3683 submenu = g_menu_new();
3684
3686 char actname[256];
3687 GSimpleAction *act;
3688
3689 fc_snprintf(actname, sizeof(actname), "clean_%d", i);
3694 pextra));
3696 g_signal_connect(act, "activate", G_CALLBACK(clean_menu_callback), pextra);
3697
3698 fc_snprintf(actname, sizeof(actname), "app.clean_%d", i++);
3702
3704 g_menu_insert_submenu(work_menu, 5, _("_Clean Nuisance"),
3706
3707 submenu = g_menu_new();
3708
3710 if (pextra->buildable) {
3711 char actname[256];
3712 GSimpleAction *act;
3713
3714 fc_snprintf(actname, sizeof(actname), "base_%d", i);
3719 pextra));
3721 g_signal_connect(act, "activate", G_CALLBACK(base_callback), pextra);
3722
3723 fc_snprintf(actname, sizeof(actname), "app.base_%d", i++);
3726 }
3728
3731
3733 char acttext[128], irrtext[128], mintext[128], transtext[128];
3734 char cultext[128], plantext[128];
3735 struct terrain *pterrain;
3736
3737 if (!can_client_change_view()) {
3738 return;
3739 }
3740
3742
3743 if (num_units > 0) {
3744 const struct tile *ptile = NULL;
3745 const struct unit_type *ptype = NULL;
3746
3748 fc_assert((ptile == NULL) == (ptype == NULL));
3749
3750 if (ptile || ptype) {
3751 if (unit_tile(punit) != ptile) {
3753 }
3754 if (unit_type_get(punit) != ptype) {
3756 }
3757 } else {
3758 ptile = unit_tile(punit);
3760 }
3762 }
3763
3768 num_units > 0
3770 && !editor_is_active());
3771
3773 menu_entry_set_sensitive(map, "VOLUME_UP", !audio_is_dummy_plugin());
3774 menu_entry_set_sensitive(map, "VOLUME_DOWN", !audio_is_dummy_plugin());
3775
3776 menu_entry_set_sensitive(map, "GAME_SAVE_AS",
3778 menu_entry_set_sensitive(map, "GAME_SAVE",
3780
3781 menu_entry_set_sensitive(map, "SERVER_OPTIONS", client.conn.established);
3782
3783 menu_entry_set_sensitive(map, "LEAVE",
3785
3787 menu_entry_set_sensitive(map, "INFRA_DLG", terrain_control.infrapoints);
3788
3789 menu_entry_set_sensitive(map, "POLICIES", multiplier_count() > 0);
3790 menu_entry_set_sensitive(map, "REPORT_TOP_CITIES", game.info.top_cities_count > 0);
3791 menu_entry_set_sensitive(map, "REPORT_SPACESHIP",
3792 client_player() != NULL && client_player()->spaceship.state != SSHIP_NONE);
3793
3794 info = menu_entry_info_find("EDIT_MODE");
3795 if (info->state != game.info.is_edit_mode) {
3796 info->state = game.info.is_edit_mode;
3800
3801 menu_entry_set_sensitive(map, "EDIT_MODE",
3804 }
3805
3806 info = menu_entry_info_find("TOGGLE_FOG");
3807 if (info->state != game.client.fog_of_war) {
3808 info->state = game.client.fog_of_war;
3809
3813 }
3814
3815 {
3816 char road_buf[500];
3817
3819 if (proad != NULL) {
3820 /* TRANS: Connect with some road type (Road/Railroad) */
3821 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3823 menus_rename(work_menu, 12, "CONNECT_ROAD", road_buf);
3824 }
3825
3827 if (proad != NULL) {
3828 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3830 menus_rename(work_menu, 13, "CONNECT_RAIL", road_buf);
3831 }
3832 }
3833
3834 if (!can_client_issue_orders()) {
3835 return;
3836 }
3837
3838 if (!punits) {
3839 return;
3840 }
3841
3842 /* Remaining part of this function: Update Unit, Work, and Combat menus */
3843
3844 /* Enable the button for adding to a city in all cases, so we
3845 * get an eventual error message from the server if we try. */
3846 menu_entry_set_sensitive(map, "BUILD_CITY",
3851
3852 menu_entry_set_sensitive(map, "DO_ACTION",
3854
3855 menu_entry_set_sensitive(map, "UNIT_TELEPORT",
3857
3858 menu_entry_set_sensitive(map, "BUILD_ROAD",
3862 menu_entry_set_sensitive(map, "BUILD_IRRIGATION",
3864 menu_entry_set_sensitive(map, "BUILD_MINE",
3866 menu_entry_set_sensitive(map, "CULTIVATE",
3868 menu_entry_set_sensitive(map, "PLANT",
3870 menu_entry_set_sensitive(map, "TRANSFORM_TERRAIN",
3872 menu_entry_set_sensitive(map, "FORTIFY",
3875 menu_entry_set_sensitive(map, "PARADROP",
3877 menu_entry_set_sensitive(map, "PILLAGE",
3879 menu_entry_set_sensitive(map, "CLEAN",
3881 menu_entry_set_sensitive(map, "BUILD_FORTRESS",
3883 menu_entry_set_sensitive(map, "BUILD_AIRBASE",
3885 menu_entry_set_sensitive(map, "UNIT_SENTRY",
3887 menu_entry_set_sensitive(map, "UNSENTRY_ALL",
3890 menu_entry_set_sensitive(map, "UNIT_HOMECITY",
3892 menu_entry_set_sensitive(map, "UNIT_UPGRADE", units_can_upgrade(&(wld.map), punits));
3893 menu_entry_set_sensitive(map, "UNIT_CONVERT", units_can_convert(&(wld.map), punits));
3894 menu_entry_set_sensitive(map, "UNIT_DISBAND",
3896 TRUE));
3897
3898 menu_entry_set_sensitive(map, "AUTO_WORKER",
3900 menu_entry_set_sensitive(map, "UNIT_EXPLORE",
3902 menu_entry_set_sensitive(map, "UNIT_BOARD",
3904 menu_entry_set_sensitive(map, "UNIT_DEBOARD",
3906 menu_entry_set_sensitive(map, "UNIT_UNLOAD_TRANSPORTER",
3908
3910 if (proad != NULL) {
3911 struct extra_type *tgt;
3912
3913 tgt = road_extra_get(proad);
3914
3916 } else {
3918 }
3919 menu_entry_set_sensitive(map, "CONNECT_ROAD", conn_possible);
3920
3922 if (proad != NULL) {
3923 struct extra_type *tgt;
3924
3925 tgt = road_extra_get(proad);
3926
3928 } else {
3930 }
3931 menu_entry_set_sensitive(map, "CONNECT_RAIL", conn_possible);
3932
3934 if (proad != NULL) {
3935 struct extra_type *tgt;
3936
3937 tgt = road_extra_get(proad);
3938
3940 } else {
3942 }
3943 menu_entry_set_sensitive(map, "CONNECT_MAGLEV", conn_possible);
3944
3946
3947 if (extra_type_list_size(extras) > 0) {
3948 struct extra_type *tgt;
3949
3950 tgt = extra_type_list_get(extras, 0);
3952 } else {
3954 }
3955 menu_entry_set_sensitive(map, "CONNECT_IRRIGATION", conn_possible);
3956
3957 menu_entry_set_sensitive(map, "TAX_RATES",
3960
3962 menus_rename(work_menu, 0, "BUILD_CITY",
3964 } else {
3965 bool city_on_tile = FALSE;
3966
3967 /* FIXME: This overloading doesn't work well with multiple focus
3968 * units. */
3970 if (tile_city(unit_tile(punit))) {
3972 break;
3973 }
3975
3977 TRUE)) {
3978 menus_rename(work_menu, 0, "BUILD_CITY",
3980 } else {
3981 /* Refresh default order */
3982 menus_rename(work_menu, 0, "BUILD_CITY",
3984 }
3985 }
3986
3988 menus_rename(work_menu, 6, "BUILD_ROAD",
3991 char road_item[500];
3992 struct extra_type *pextra = NULL;
3993
3994 /* FIXME: This overloading doesn't work well with multiple focus
3995 * units. */
3999 if (pextra != NULL) {
4000 break;
4001 }
4003
4004 if (pextra != NULL) {
4005 /* TRANS: Build road of specific type (Road/Railroad) */
4006 snprintf(road_item, sizeof(road_item), _("Build %s"),
4007 extra_name_translation(pextra));
4008 menus_rename(work_menu, 6, "BUILD_ROAD", road_item);
4009 }
4010 } else {
4011 menus_rename(work_menu, 6, "BUILD_ROAD", _("Build _Road"));
4012 }
4013
4014 if (units_all_same_type && num_units > 0) {
4015 struct unit *punit = unit_list_get(punits, 0);
4016 const struct unit_type *to_unittype
4018
4019 if (to_unittype) {
4020 /* TRANS: %s is a unit type. */
4021 fc_snprintf(acttext, sizeof(acttext), _("Upgr_ade to %s"),
4024 unit_type_get(punit))));
4025 } else {
4026 acttext[0] = '\0';
4027 }
4028 } else {
4029 acttext[0] = '\0';
4030 }
4031 if ('\0' != acttext[0]) {
4032 menus_rename(unit_menu, 13, "UNIT_UPGRADE", acttext);
4033 } else {
4034 menus_rename(unit_menu, 13, "UNIT_UPGRADE", _("Upgr_ade"));
4035 }
4036
4037 if (units_can_convert(&(wld.map), punits)) {
4038 if (units_all_same_type && num_units > 0) {
4039 struct unit *punit = unit_list_get(punits, 0);
4040
4041 /* TRANS: %s is a unit type. */
4042 fc_snprintf(acttext, sizeof(acttext), _("C_onvert to %s"),
4044 } else {
4045 acttext[0] = '\0';
4046 }
4047 } else {
4048 menu_entry_set_sensitive(map, "UNIT_CONVERT", FALSE);
4049 acttext[0] = '\0';
4050 }
4051 if ('\0' != acttext[0]) {
4052 menus_rename(unit_menu, 14, "UNIT_CONVERT", acttext);
4053 } else {
4054 menus_rename(unit_menu, 14, "UNIT_CONVERT", _("C_onvert"));
4055 }
4056
4057 if (units_all_same_tile && num_units > 0) {
4058 struct unit *first = unit_list_get(punits, 0);
4059
4060 pterrain = tile_terrain(unit_tile(first));
4061
4063 struct extra_type *pextra = NULL;
4064
4065 /* FIXME: this overloading doesn't work well with multiple focus
4066 * units. */
4070 if (pextra != NULL) {
4071 break;
4072 }
4074
4075 if (pextra != NULL) {
4076 /* TRANS: Build irrigation of specific type */
4077 snprintf(irrtext, sizeof(irrtext), _("Build %s"),
4078 extra_name_translation(pextra));
4079 } else {
4080 sz_strlcpy(irrtext, _("Build _Irrigation"));
4081 }
4082 } else {
4083 sz_strlcpy(irrtext, _("Build _Irrigation"));
4084 }
4085
4086 if (pterrain->cultivate_result != T_NONE) {
4087 fc_snprintf(cultext, sizeof(cultext), _("Change to %s"),
4090 } else {
4091 sz_strlcpy(cultext, _("_Cultivate"));
4092 }
4093
4095 struct extra_type *pextra = NULL;
4096
4097 /* FIXME: this overloading doesn't work well with multiple focus
4098 * units. */
4102 if (pextra != NULL) {
4103 break;
4104 }
4106
4107 if (pextra != NULL) {
4108 /* TRANS: Build mine of specific type */
4109 snprintf(mintext, sizeof(mintext), _("Build %s"),
4110 extra_name_translation(pextra));
4111 } else {
4112 sz_strlcpy(mintext, _("Build _Mine"));
4113 }
4114 } else {
4115 sz_strlcpy(mintext, _("Build _Mine"));
4116 }
4117
4118 if (pterrain->plant_result != T_NONE) {
4119 fc_snprintf(plantext, sizeof(plantext), _("Change to %s"),
4121 } else {
4122 sz_strlcpy(plantext, _("_Plant"));
4123 }
4124
4125 if (pterrain->transform_result != T_NONE
4126 && pterrain->transform_result != pterrain) {
4127 fc_snprintf(transtext, sizeof(transtext), _("Transf_orm to %s"),
4130 } else {
4131 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4132 }
4133 } else {
4134 sz_strlcpy(irrtext, _("Build _Irrigation"));
4135 sz_strlcpy(cultext, _("_Cultivate"));
4136 sz_strlcpy(mintext, _("Build _Mine"));
4137 sz_strlcpy(plantext, _("_Plant"));
4138 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4139 }
4140
4141 menus_rename(work_menu, 7, "BUILD_IRRIGATION", irrtext);
4142 menus_rename(work_menu, 9, "CULTIVATE", cultext);
4143 menus_rename(work_menu, 8, "BUILD_MINE", mintext);
4144 menus_rename(work_menu, 10, "PLANT", plantext);
4145 menus_rename(work_menu, 11, "TRANSFORM_TERRAIN", transtext);
4146
4147 menus_rename(unit_menu, 12, "UNIT_HOMECITY",
4149
4150 menus_rename(combat_menu, 1, "BUILD_FORTRESS",
4151 Q_(terrain_control.gui_type_base0));
4152 menus_rename(combat_menu, 2, "BUILD_AIRBASE",
4153 Q_(terrain_control.gui_type_base1));
4154}
4155
4156/************************************************************************/
4161{
4162 if (!menus_built) {
4163 return;
4164 }
4165}
4166
4167/**********************************************************************/
4171{
4173
4174 if (enable) {
4175 if (main_menubar == NULL) {
4178 /* Ensure the menus are really created before performing any operations
4179 * on them. */
4180 while (g_main_context_pending(NULL)) {
4182 }
4183 }
4184
4187
4188 } else {
4191 }
4192
4193 /* Workaround for gtk bug that (re)setting the menubar after the window has
4194 * been already created is not noticed. */
4195 g_object_notify(G_OBJECT(gtk_settings_get_default()), "gtk-shell-shows-menubar");
4196}
4197
4198/**********************************************************************/
4205
4206/**********************************************************************/
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:2433
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:2349
#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:704
static void show_national_borders_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1238
static void show_focus_unit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1474
GtkWidget * setup_menus(GtkWidget *window)
Definition menu.c:2184
static void help_connecting_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:888
static void menus_rename(const char *key, const gchar *new_label)
Definition menu.c:2318
static void help_combat_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1096
static void menu_entry_group_set_sensitive(enum menu_entry_grouping group, gboolean is_sensitive)
Definition menu.c:2286
static void help_ruleset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1040
static void select_single_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1546
static void unit_unload_transporter_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1754
static void help_government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1136
static void report_achievements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:864
static void show_fog_of_war_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1485
static void help_zoc_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1104
static void show_city_productions_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1295
static void toggle_fog_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1516
static void client_lua_script_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:848
static void show_city_names_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1272
static void help_space_race_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1152
static void help_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1048
static void help_playing_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1032
static void plant_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1872
static struct menu_entry_info menu_entries[]
Definition menu.c:270
static void base_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2034
static void help_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1064
static void unit_sentry_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1718
static void center_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2074
static void unit_explore_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1702
static void build_mine_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1864
static void quit_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:780
static void unit_return_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1692
static void show_city_trade_routes_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1318
static void transform_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1944
static void help_wonders_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1128
static void show_terrain_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1329
static void show_city_growth_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1284
static void show_stack_size_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1463
static void multiplier_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2018
static void help_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1120
static void save_game_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:688
static void show_unit_solid_bg_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1441
static void show_coastline_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1340
static void show_city_full_bar_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1260
static void edit_mode_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1193
static void help_chatline_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:904
static void show_paths_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1350
static void connect_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1880
static void help_overview_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1024
static void save_game_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:696
static void help_diplomacy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1144
static void show_units_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1430
static void show_irrigation_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1360
static void show_map_grid_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1227
static void help_improvements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1080
static void find_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:788
static void report_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:812
static void report_demographic_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:856
static void help_worklist_editor_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:912
static void help_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1072
static void leave_local_game_response(GtkWidget *dialog, gint response)
Definition menu.c:721
static void help_language_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:872
static void server_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:664
static void leave_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:736
static void select_same_type_cont_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1570
static void unit_convert_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1779
static void select_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1586
static void show_huts_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1400
static void report_wow_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:820
static void unit_upgrade_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1771
static void help_tech_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1112
static void unit_goto_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1626
static void clean_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2059
static void build_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1795
static void unit_patrol_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1710
void real_menus_init(void)
Definition menu.c:2951
menu_entry_grouping
Definition menu.c:92
@ MGROUP_ALL
Definition menu.c:93
@ MGROUP_PLAYING
Definition menu.c:92
@ MGROUP_PLAYER
Definition menu.c:93
@ MGROUP_SAFE
Definition menu.c:92
@ MGROUP_EDIT
Definition menu.c:92
@ MGROUP_UNIT
Definition menu.c:93
static void rally_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1594
static void help_about_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1176
static void build_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1822
static void local_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:648
static void show_cities_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1420
static void unit_homecity_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1763
static void menu_entry_set_sensitive(const char *key, gboolean is_sensitive)
Definition menu.c:2273
static void show_pollution_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1410
static void save_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:672
static void save_mapimg_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:712
static void worklists_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:796
static void connect_maglev_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1912
static void full_screen_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1496
static void report_top_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:832
static void help_controls_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:896
static void select_same_type_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1578
static void connect_rail_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1896
static void unit_wait_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1610
static const char * get_tile_change_menu_text(struct tile *ptile, enum unit_activity activity)
Definition menu.c:2371
static void build_airbase_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1978
static void report_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2090
static void infra_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1602
static void message_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:656
static void tax_rate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2010
static void help_musicset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1056
static void unit_goto_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1682
static struct menu_entry_info * menu_entry_info_find(const char *key)
Definition menu.c:2244
static void auto_work_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1814
static void government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2026
static void report_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2098
static void report_messages_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:840
static void show_bases_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1380
static void select_same_type_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1562
static void save_options_on_exit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1184
static void volume_up_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:756
static void show_native_tiles_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1249
static void menu_entry_init(GtkBuildable *item)
Definition menu.c:2124
static void show_unit_shields_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1452
static void reload_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:680
static void scenario_properties_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1526
static void clear_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:632
static void unit_deboard_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1744
static void help_policies_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:880
static void unit_done_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1618
static void help_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1160
static void unit_goto_and_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1634
static void show_city_output_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1216
static void show_city_outlines_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1205
static void save_scenario_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1538
static void help_copying_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1168
static void cultivate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1856
static void save_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:640
void real_menus_update(void)
Definition menu.c:2386
static void report_spaceship_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2114
static void select_all_on_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1554
static void show_city_buy_cost_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1307
static void build_fortress_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1960
#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_)
static void view_menu_update_sensitivity(void)
Definition menu.c:2339
static void unit_board_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1734
static void fortify_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1968
static void show_resources_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1390
static void connect_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1928
static void build_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1848
static void report_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2082
static void road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2046
static void unit_disband_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1787
static void help_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1088
static void report_research_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2106
static void map_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:804
static void volume_down_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:768
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:2678
#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:1702
static void irrigation_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2792
static void bg_append_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2922
static void unsentry_all_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2393
static GMenu * combat_menu
Definition menu.c:95
static GMenuItem * create_toggle_menu_item_for_key(const char *key)
Definition menu.c:2956
static void pillage_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2705
void enable_menus(bool enable)
Definition menu.c:4170
static void setup_app_actions(GApplication *fc_app)
Definition menu.c:3007
static GMenu * options_menu
Definition menu.c:89
static void register_bg_actions(GActionMap *map, int bg)
Definition menu.c:3047
const GActionEntry acts[]
Definition menu.c:1060
static void revolution_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2753
static GMenu * view_menu
Definition menu.c:91
static GMenu * work_menu
Definition menu.c:94
menu_entry_grouping
Definition menu.c:81
@ MGROUP_CHAR
Definition menu.c:86
static void bg_assign_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2912
static void menu_entry_set_sensitive_info(GActionMap *map, struct menu_entry_info *info, gboolean is_enabled)
Definition menu.c:3347
static bool menus_built
Definition menu.c:75
void menus_disable_char_commands(void)
Definition menu.c:4209
static void show_mines_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:1998
static GMenu * edit_menu
Definition menu.c:90
void menus_disable_unit_commands(void)
Definition menu.c:4201
static void unit_teleport_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2374
static void paradrop_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2695
const struct menu_entry_option_map meoms[]
Definition menu.c:1778
static GMenu * unit_menu
Definition menu.c:93
static void do_action_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2715
static void bg_select_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2902
static void mine_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2807
static GMenu * main_menubar
Definition menu.c:74
static GMenuItem * create_toggle_menu_item(struct menu_entry_info *info)
Definition menu.c:2933
void menus_set_initial_toggle_values(void)
Definition menu.c:2989
static void clean_menu_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2822
@ VMENU_HUTS
Definition menu.c:1048
@ VMENU_MINES
Definition menu.c:1045
@ VMENU_COASTLINE
Definition menu.c:1042
@ VMENU_UNIT_SOLID_BG
Definition menu.c:1052
@ VMENU_CITY_NAMES
Definition menu.c:1036
@ VMENU_UNITS
Definition menu.c:1051
@ VMENU_CITY_FULL_BAR
Definition menu.c:1035
@ VMENU_CITY_OUTLINES
Definition menu.c:1030
@ VMENU_POLLUTION
Definition menu.c:1049
@ VMENU_FOCUS_UNIT
Definition menu.c:1055
@ VMENU_BASES
Definition menu.c:1046
@ VMENU_MAP_GRID
Definition menu.c:1032
@ VMENU_CITY_BUY_COST
Definition menu.c:1039
@ VMENU_TERRAIN
Definition menu.c:1041
@ VMENU_CITY_GROWTH
Definition menu.c:1037
@ VMENU_PATHS
Definition menu.c:1043
@ VMENU_CITIES
Definition menu.c:1050
@ VMENU_STACK_SIZE
Definition menu.c:1054
@ VMENU_UNIT_SHIELDS
Definition menu.c:1053
@ VMENU_IRRIGATION
Definition menu.c:1044
@ VMENU_NATIVE_TILES
Definition menu.c:1034
@ VMENU_CITY_OUTPUT
Definition menu.c:1031
@ VMENU_RESOURCES
Definition menu.c:1047
@ VMENU_CITY_PRODUCTIONS
Definition menu.c:1038
@ VMENU_CITY_TRADE_ROUTES
Definition menu.c:1040
@ VMENU_FULL_SCREEN
Definition menu.c:1057
@ VMENU_NAT_BORDERS
Definition menu.c:1033
@ VMENU_FOW
Definition menu.c:1056
static void view_menu_item_toggle(void(*cb)(void), bool updt_sensitivity, gpointer data)
Definition menu.c:1819
#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
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:98
const char * key
Definition menu.c:99
bool state
Definition menu.c:104
const char * accl
Definition menu.c:101
enum menu_entry_grouping grouping
Definition menu.c:104
GCallback cb
Definition menu.c:103
const char * name
Definition menu.c:100
const char * action
Definition menu.c:100
void(* toggle)(GSimpleAction *act, GVariant *value, gpointer data)
Definition menu.c:103
Definition menu.c:1772
const char * menu_entry
Definition menu.c:1773
bool * option
Definition menu.c:1774
int menu_pos
Definition menu.c:1775
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