Freeciv-3.4
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 "specialist.h"
33#include "unit.h"
34
35/* client */
36#include "audio.h"
37#include "client_main.h"
38#include "clinet.h"
39#include "connectdlg_common.h"
40#include "control.h"
41#include "mapview_common.h"
42#include "options.h"
43#include "tilespec.h"
44#include "zoom.h"
45
46/* client/gui-gtk-4.0 */
47#include "chatline.h"
48#include "cityrep.h"
49#include "dialogs.h"
50#include "editgui.h"
51#include "editprop.h"
52#include "finddlg.h"
53#include "gamedlgs.h"
54#include "gotodlg.h"
55#include "gui_main.h"
56#include "gui_stuff.h"
57#include "helpdlg.h"
58#include "infradlg.h"
59#include "luaconsole.h"
60#include "mapctrl.h" /* center_on_unit(). */
61#include "messagedlg.h"
62#include "messagewin.h"
63#include "optiondlg.h"
64#include "pages.h"
65#include "plrdlg.h"
66#include "rallypointdlg.h"
67#include "ratesdlg.h"
68#include "repodlgs.h"
69#include "sprite.h"
70#include "spaceshipdlg.h"
71#include "unitselect.h"
72#include "wldlg.h"
73
74#include "menu.h"
75
77static bool menus_built = FALSE;
78
80
82
83enum menu_entry_grouping { MGROUP_SAFE = 0B00000001,
84 MGROUP_EDIT = 0B00000010,
85 MGROUP_PLAYING = 0B00000100,
86 MGROUP_UNIT = 0B00001000,
87 MGROUP_PLAYER = 0B00010000,
88 MGROUP_CHAR = 0B00100000,
89 MGROUP_ALL = 0B11111111 };
90
98
99struct menu_entry_info {
100 const char *key;
101 const char *name;
102 const char *action;
103 const char *accl;
105 void (*toggle)(GSimpleAction *act, GVariant *value, gpointer data);
106 bool state; /* Only for toggle actions */
107};
108
111static GMenuItem *create_toggle_menu_item_for_key(const char *key);
112
113/* Menu entry callbacks */
115 GVariant *parameter,
116 gpointer data);
118 GVariant *parameter,
119 gpointer data);
121 GVariant *parameter,
122 gpointer data);
124 GVariant *parameter,
125 gpointer data);
127 GVariant *parameter,
128 gpointer data);
130 GVariant *parameter,
131 gpointer data);
133 GVariant *parameter,
134 gpointer data);
136 GVariant *parameter,
137 gpointer data);
139 GVariant *parameter,
140 gpointer data);
141
142#ifdef FREECIV_DEBUG
144 GVariant *parameter,
145 gpointer data);
146#endif /* FREECIV_DEBUG */
147
149 GVariant *parameter,
150 gpointer data);
152 GVariant *parameter,
153 gpointer data);
155 GVariant *parameter,
156 gpointer data);
158 GVariant *parameter,
159 gpointer data);
161 GVariant *parameter,
162 gpointer data);
164 GVariant *parameter,
165 gpointer data);
167 GVariant *parameter,
168 gpointer data);
170 GVariant *parameter,
171 gpointer data);
173 GVariant *parameter,
174 gpointer data);
176 GVariant *parameter,
177 gpointer data);
179 GVariant *parameter,
180 gpointer data);
182 GVariant *parameter,
183 gpointer data);
185 GVariant *parameter,
186 gpointer data);
188 GVariant *parameter,
189 gpointer data);
191 GVariant *parameter,
192 gpointer data);
194 GVariant *parameter,
195 gpointer data);
197 GVariant *parameter,
198 gpointer data);
200 GVariant *parameter,
201 gpointer data);
203 GVariant *parameter,
204 gpointer data);
206 GVariant *parameter,
207 gpointer data);
209 GVariant *parameter,
210 gpointer data);
212 GVariant *parameter,
213 gpointer data);
215 GVariant *parameter,
216 gpointer data);
218 GVariant *parameter,
219 gpointer data);
221 GVariant *parameter,
222 gpointer data);
224 GVariant *parameter,
225 gpointer data);
227 GVariant *parameter,
228 gpointer data);
230 GVariant *parameter,
231 gpointer data);
233 GVariant *parameter,
234 gpointer data);
236 GVariant *parameter,
237 gpointer data);
239 GVariant *parameter,
240 gpointer data);
242 GVariant *parameter,
243 gpointer data);
245 GVariant *parameter,
246 gpointer data);
248 GVariant *parameter,
249 gpointer data);
251 GVariant *parameter,
252 gpointer data);
254 GVariant *parameter,
255 gpointer data);
257 GVariant *parameter,
258 gpointer data);
260 GVariant *parameter,
261 gpointer data);
263 GVariant *parameter,
264 gpointer data);
266 GVariant *parameter,
267 gpointer data);
269 GVariant *parameter,
270 gpointer data);
272 GVariant *parameter,
273 gpointer data);
275 GVariant *parameter,
276 gpointer data);
278 GVariant *parameter,
279 gpointer data);
281 GVariant *parameter,
282 gpointer data);
284 GVariant *parameter,
285 gpointer data);
287 GVariant *parameter,
288 gpointer data);
290 GVariant *parameter,
291 gpointer data);
293 GVariant *parameter,
294 gpointer data);
296 GVariant *parameter,
297 gpointer data);
299 GVariant *parameter,
300 gpointer data);
302 GVariant *parameter,
303 gpointer data);
305 GVariant *parameter,
306 gpointer data);
308 GVariant *parameter,
309 gpointer data);
311 GVariant *parameter,
312 gpointer data);
314 GVariant *parameter,
315 gpointer data);
317 GVariant *parameter,
318 gpointer data);
320 GVariant *parameter,
321 gpointer data);
323 GVariant *parameter,
324 gpointer data);
326 GVariant *parameter,
327 gpointer data);
329 GVariant *parameter,
330 gpointer data);
332 GVariant *parameter,
333 gpointer data);
335 GVariant *parameter,
336 gpointer data);
338 GVariant *parameter,
339 gpointer data);
341 GVariant *parameter,
342 gpointer data);
344 GVariant *parameter,
345 gpointer data);
347 GVariant *parameter,
348 gpointer data);
350 GVariant *parameter,
351 gpointer data);
353 GVariant *parameter,
354 gpointer data);
356 GVariant *parameter,
357 gpointer data);
359 GVariant *parameter,
360 gpointer data);
362 GVariant *parameter,
363 gpointer data);
365 GVariant *parameter,
366 gpointer data);
368 GVariant *parameter,
369 gpointer data);
371 GVariant *parameter,
372 gpointer data);
374 GVariant *parameter,
375 gpointer data);
377 GVariant *parameter,
378 gpointer data);
380 GVariant *parameter,
381 gpointer data);
383 GVariant *parameter,
384 gpointer data);
386 GVariant *parameter,
387 gpointer data);
389 GVariant *parameter,
390 gpointer data);
392 GVariant *parameter,
393 gpointer data);
395 GVariant *parameter,
396 gpointer data);
398 GVariant *parameter,
399 gpointer data);
400
402 GVariant *parameter,
403 gpointer data);
405 GVariant *parameter,
406 gpointer data);
408 GVariant *parameter,
409 gpointer data);
411 GVariant *parameter,
412 gpointer data);
414 GVariant *parameter,
415 gpointer data);
417 GVariant *parameter,
418 gpointer data);
420 GVariant *parameter,
421 gpointer data);
423 GVariant *parameter,
424 gpointer data);
426 GVariant *parameter,
427 gpointer data);
429 GVariant *parameter,
430 gpointer data);
432 GVariant *parameter,
433 gpointer data);
435 GVariant *parameter,
436 gpointer data);
438 GVariant *parameter,
439 gpointer data);
441 GVariant *parameter,
442 gpointer data);
444 GVariant *parameter,
445 gpointer data);
447 GVariant *parameter,
448 gpointer data);
450 GVariant *parameter,
451 gpointer data);
453 GVariant *parameter,
454 gpointer data);
456 GVariant *parameter,
457 gpointer data);
459 GVariant *parameter,
460 gpointer data);
462 GVariant *parameter,
463 gpointer data);
465 GVariant *parameter,
466 gpointer data);
468 GVariant *parameter,
469 gpointer data);
471 GVariant *parameter,
472 gpointer data);
474 GVariant *parameter,
475 gpointer data);
477 GVariant *parameter,
478 gpointer data);
480 GVariant *parameter,
481 gpointer data);
483 GVariant *parameter,
484 gpointer data);
486 GVariant *parameter,
487 gpointer data);
489 GVariant *parameter,
490 gpointer data);
492 GVariant *parameter,
493 gpointer data);
495 GVariant *parameter,
496 gpointer data);
498 GVariant *parameter,
499 gpointer data);
500
502 GVariant *parameter,
503 gpointer data);
505 GVariant *parameter,
506 gpointer data);
508 GVariant *parameter,
509 gpointer data);
511 GVariant *parameter,
512 gpointer data);
514 GVariant *parameter,
515 gpointer data);
517 GVariant *parameter,
518 gpointer data);
520 GVariant *parameter,
521 gpointer data);
523 GVariant *parameter,
524 gpointer data);
526 GVariant *parameter,
527 gpointer data);
529 GVariant *parameter,
530 gpointer data);
532 GVariant *parameter,
533 gpointer data);
535 GVariant *parameter,
536 gpointer data);
538 GVariant *parameter,
539 gpointer data);
541 GVariant *parameter,
542 gpointer data);
543
545 GVariant *parameter,
546 gpointer data);
548 GVariant *parameter,
549 gpointer data);
551 GVariant *parameter,
552 gpointer data);
553
555{
556 /* Game menu */
557 { "CLEAR_CHAT_LOGS", N_("_Clear Chat Log"),
558 "clear_chat", NULL, MGROUP_SAFE,
559 NULL, FALSE },
560 { "SAVE_CHAT_LOGS", N_("Save Chat _Log"),
561 "save_chat", NULL, MGROUP_SAFE,
562 NULL, FALSE },
563
564 { "LOCAL_OPTIONS", N_("_Local Client"),
565 "local_options", NULL, MGROUP_SAFE,
566 NULL, FALSE },
567 { "MESSAGE_OPTIONS", N_("_Message"),
568 "message_options", NULL, MGROUP_SAFE,
569 NULL, FALSE },
570 { "SERVER_OPTIONS", N_("_Remote Server"),
571 "server_options", NULL, MGROUP_SAFE,
572 NULL, FALSE },
573 { "SAVE_OPTIONS", N_("Save Options _Now"),
574 "save_options", NULL, MGROUP_SAFE,
575 NULL, FALSE },
576 { "SAVE_OPTIONS_ON_EXIT", N_("Save Options on _Exit"),
577 "save_options_on_exit", NULL, MGROUP_SAFE,
579
580#ifdef FREECIV_DEBUG
581 { "RELOAD_TILESET", N_("_Reload Tileset"),
582 "reload_tileset", ACCL_MOD_KEY"<alt>r", MGROUP_SAFE,
583 NULL, FALSE },
584#endif /* FREECIV_DEBUG */
585
586 { "GAME_SAVE", N_("_Save Game"),
587 "game_save", ACCL_MOD_KEY"s", MGROUP_SAFE,
588 NULL, FALSE },
589 { "GAME_SAVE_AS", N_("Save Game _As..."),
590 "game_save_as", NULL, MGROUP_SAFE,
591 NULL, FALSE },
592 { "MAPIMG_SAVE", N_("Save Map _Image"),
593 "save_mapimg", NULL, MGROUP_SAFE,
594 NULL, FALSE },
595 { "MAPIMG_SAVE_AS", N_("Save _Map Image As..."),
596 "save_mapimg_as", NULL, MGROUP_SAFE,
597 NULL, FALSE },
598 { "VOLUME_UP", N_("Volume Up"),
599 "volume_up", "greater", MGROUP_SAFE | MGROUP_CHAR,
600 NULL, FALSE },
601 { "VOLUME_DOWN", N_("Volume Down"),
602 "volume_down", "less", MGROUP_SAFE | MGROUP_CHAR,
603 NULL, FALSE },
604 { "LEAVE", N_("_Leave"),
605 "leave", NULL, MGROUP_SAFE,
606 NULL, FALSE },
607 { "QUIT", N_("_Quit"),
608 "quit", ACCL_MOD_KEY"q", MGROUP_SAFE,
609 NULL, FALSE },
610
611 /* Edit menu */
612 { "FIND_CITY", N_("_Find City"),
613 "find_city", ACCL_MOD_KEY"f", MGROUP_SAFE,
614 NULL, FALSE },
615 { "WORKLISTS", N_("Work_lists"),
616 "worklists", ACCL_MOD_KEY"<shift>l", MGROUP_SAFE,
617 NULL, FALSE },
618 { "RALLY_DLG", N_("Rally point dialog"),
619 "rally_dlg", ACCL_MOD_KEY"<shift>r", MGROUP_SAFE,
620 NULL, FALSE },
621 { "INFRA_DLG", N_("Infra dialog"),
622 "infra_dlg", ACCL_MOD_KEY"<shift>f", MGROUP_SAFE,
623 NULL, FALSE },
624 { "EDIT_MODE", N_("_Editing Mode"),
625 "edit_mode", ACCL_MOD_KEY"e", MGROUP_SAFE,
627 { "TOGGLE_FOG", N_("Toggle Fog of _War"),
628 "toggle_fog", ACCL_MOD_KEY"<shift>w", MGROUP_EDIT,
630 { "SCENARIO_PROPERTIES", N_("Game/Scenario Properties"),
631 "scenario_props", NULL, MGROUP_EDIT,
632 NULL, FALSE },
633 { "SCENARIO_SAVE", N_("Save Scenario"),
634 "scenario_save", NULL, MGROUP_EDIT,
635 NULL, FALSE },
636 { "CLIENT_LUA_SCRIPT", N_("Client _Lua Script"),
637 "lua_script", NULL, MGROUP_SAFE,
638 NULL, FALSE },
639
640 /* View menu */
641 { "SHOW_CITY_OUTLINES", N_("Cit_y Outlines"),
642 "show_city_outlines", ACCL_MOD_KEY"y", MGROUP_SAFE,
644 { "SHOW_CITY_OUTPUT", N_("City Output"),
645 "show_city_output", ACCL_MOD_KEY"v", MGROUP_SAFE,
647 { "SHOW_MAP_GRID", N_("Map _Grid"),
648 "show_map_grid", ACCL_MOD_KEY"g", MGROUP_SAFE,
650 { "SHOW_NAT_BORDERS", N_("National _Borders"),
651 "show_nat_borders", ACCL_MOD_KEY"b", MGROUP_SAFE,
653 { "SHOW_NATIVE_TILES", N_("Native Tiles"),
654 "show_native_tiles", ACCL_MOD_KEY"<shift>n", MGROUP_SAFE,
656 { "SHOW_CITY_FULL_BAR", N_("City Full Bar"),
657 "show_city_full_bar", NULL, MGROUP_SAFE,
659 { "SHOW_CITY_NAMES", N_("City _Names"),
660 "show_city_names", ACCL_MOD_KEY"n", MGROUP_SAFE,
662 { "SHOW_CITY_GROWTH", N_("City G_rowth"),
663 "show_city_growth", ACCL_MOD_KEY"o", MGROUP_SAFE,
665 { "SHOW_CITY_PRODUCTIONS", N_("City _Production"),
666 "show_city_productions", ACCL_MOD_KEY"p", MGROUP_SAFE,
668 { "SHOW_CITY_BUY_COST", N_("City Buy Cost"),
669 "show_city_buy_cost", NULL, MGROUP_SAFE,
671 { "SHOW_CITY_TRADE_ROUTES", N_("City Tra_deroutes"),
672 "show_trade_routes", ACCL_MOD_KEY"d", MGROUP_SAFE,
674 { "SHOW_TERRAIN", N_("_Terrain"),
675 "show_terrain", NULL, MGROUP_SAFE,
677 { "SHOW_COASTLINE", N_("C_oastline"),
678 "show_coastline", NULL, MGROUP_SAFE,
680 { "SHOW_PATHS", N_("_Paths"),
681 "show_paths", NULL, MGROUP_SAFE,
683 { "SHOW_IRRIGATION", N_("_Irrigation"),
684 "show_irrigation", NULL, MGROUP_SAFE,
686 { "SHOW_MINES", N_("_Mines"),
687 "show_mines", NULL, MGROUP_SAFE,
689 { "SHOW_BASES", N_("_Bases"),
690 "show_bases", NULL, MGROUP_SAFE,
692 { "SHOW_RESOURCES", N_("_Resources"),
693 "show_resources", NULL, MGROUP_SAFE,
695 { "SHOW_HUTS", N_("_Huts"),
696 "show_huts", NULL, MGROUP_SAFE,
698 { "SHOW_POLLUTION", N_("Po_llution & Fallout"),
699 "show_pollution", NULL, MGROUP_SAFE,
701 { "SHOW_CITIES", N_("Citi_es"),
702 "show_cities", NULL, MGROUP_SAFE,
704 { "SHOW_UNITS", N_("_Units"),
705 "show_units", NULL, MGROUP_SAFE,
707 { "SHOW_UNIT_SOLID_BG", N_("Unit Solid Background"),
708 "show_unit_solid_bg", NULL, MGROUP_SAFE,
710 { "SHOW_UNIT_SHIELDS", N_("Unit shields"),
711 "show_unit_shields", NULL, MGROUP_SAFE,
713 { "SHOW_STACK_SIZE", N_("Unit Stack Size"),
714 "show_stack_size", ACCL_MOD_KEY"plus", MGROUP_SAFE,
716 { "SHOW_FOCUS_UNIT", N_("Focu_s Unit"),
717 "show_focus_unit", NULL, MGROUP_SAFE,
719 { "SHOW_FOG_OF_WAR", N_("Fog of _War"),
720 "show_fow", NULL, MGROUP_SAFE,
722
723 { "FULL_SCREEN", N_("_Fullscreen"),
724 "full_screen", ACCL_MOD_KEY"F11", MGROUP_SAFE,
726 { "CENTER_VIEW", N_("_Center View"),
727 "center_view", "c", MGROUP_PLAYER | MGROUP_CHAR,
728 NULL, FALSE },
729 { "ZOOM_IN", N_("_Zoom in"),
730 "zoom_in", "plus", MGROUP_PLAYER,
731 NULL, FALSE },
732 { "ZOOM_OUT", N_("_Zoom out"),
733 "zoom_out", "minus", MGROUP_PLAYER,
734 NULL, FALSE },
735
736 /* Select menu */
737 { "SELECT_SINGLE", N_("_Single Unit (Unselect Others)"),
738 "select_single", "z", MGROUP_UNIT | MGROUP_CHAR,
739 NULL, FALSE },
740 { "SELECT_ALL_ON_TILE", N_("_All On Tile"),
741 "select_all_tile", "v", MGROUP_UNIT | MGROUP_CHAR,
742 NULL, FALSE },
743 { "SELECT_SAME_TYPE_TILE", N_("Same Type on _Tile"),
744 "select_same_type_tile", "<shift>v", MGROUP_UNIT | MGROUP_CHAR,
745 NULL, FALSE },
746 { "SELECT_SAME_TYPE_CONT", N_("Same Type on _Continent"),
747 "select_same_type_cont", "<shift>c", MGROUP_UNIT | MGROUP_CHAR,
748 NULL, FALSE },
749 { "SELECT_SAME_TYPE", N_("Same Type _Everywhere"),
750 "select_same_type", "<shift>x", MGROUP_UNIT | MGROUP_CHAR,
751 NULL, FALSE },
752 { "SELECT_DLG", N_("Unit Selection Dialog"),
753 "select_dlg", NULL, MGROUP_UNIT,
754 NULL, FALSE },
755
756 /* Unit menu */
757 { "UNIT_GOTO", N_("_Go to"),
758 "goto", "g", MGROUP_UNIT | MGROUP_CHAR,
759 NULL, FALSE },
760 { "UNIT_GOTO_CITY", N_("Go _to/Airlift to City..."),
761 "goto_city", "t", MGROUP_UNIT | MGROUP_CHAR,
762 NULL, FALSE },
763 { "UNIT_RETURN", N_("_Return to Nearest City"),
764 "return", "<shift>g", MGROUP_UNIT | MGROUP_CHAR,
765 NULL, FALSE },
766 { "UNIT_EXPLORE", N_("Auto E_xplore"),
767 "explore", "x", MGROUP_UNIT | MGROUP_CHAR,
768 NULL, FALSE },
769 { "UNIT_PATROL", N_("_Patrol"),
770 "patrol", "q", MGROUP_UNIT | MGROUP_CHAR,
771 NULL, FALSE },
772 { "UNIT_TELEPORT", N_("_Teleport"),
773 "teleport", NULL, MGROUP_UNIT,
774 NULL, FALSE },
775 { "UNIT_SENTRY", N_("_Sentry"),
776 "sentry", "s", MGROUP_UNIT | MGROUP_CHAR,
777 NULL, FALSE },
778 { "UNSENTRY_ALL", N_("Uns_entry All On Tile"),
779 "unsentry_all", "<shift>s", MGROUP_UNIT | MGROUP_CHAR,
780 NULL, FALSE },
781 { "UNIT_BOARD", N_("_Load"),
782 "board", "l", MGROUP_UNIT | MGROUP_CHAR,
783 NULL, FALSE },
784 { "UNIT_DEBOARD", N_("_Unload"),
785 "deboard", "u", MGROUP_UNIT | MGROUP_CHAR,
786 NULL, FALSE },
787 { "UNIT_UNLOAD_TRANSPORTER", N_("U_nload All From Transporter"),
788 "unload_transporter", "<shift>t", MGROUP_UNIT | MGROUP_CHAR,
789 NULL, FALSE },
790 { "UNIT_HOMECITY", N_("Set _Home City"),
791 "homecity", "h", MGROUP_UNIT | MGROUP_CHAR,
792 NULL, FALSE },
793 { "UNIT_UPGRADE", N_("Upgr_ade"),
794 "upgrade", "<shift>u", MGROUP_UNIT | MGROUP_CHAR,
795 NULL, FALSE },
796 { "UNIT_CONVERT", N_("C_onvert"),
797 "convert", "<shift>o", MGROUP_UNIT | MGROUP_CHAR,
798 NULL, FALSE },
799 { "UNIT_DISBAND", N_("_Disband"),
800 "disband", "<shift>d", MGROUP_UNIT | MGROUP_CHAR,
801 NULL, FALSE },
802 { "DO_ACTION", N_("_Do..."),
803 "do_action", "d", MGROUP_UNIT | MGROUP_CHAR,
804 NULL, FALSE },
805 { "UNIT_WAIT", N_("_Wait"),
806 "wait", "w", MGROUP_UNIT | MGROUP_CHAR,
807 NULL, FALSE },
808 { "UNIT_DONE", N_("_Done"),
809 "done", "space", MGROUP_UNIT | MGROUP_CHAR,
810 NULL, FALSE },
811
812 /* Work menu */
813 { "BUILD_CITY", N_("_Build City"),
814 "build_city", "b", MGROUP_UNIT | MGROUP_CHAR,
815 NULL, FALSE },
816 { "AUTO_WORKER", N_("_Auto Worker"),
817 "auto_work", "a", MGROUP_UNIT | MGROUP_CHAR,
818 NULL, FALSE },
819 { "BUILD_ROAD", N_("Build _Road"),
820 "build_road", "r", MGROUP_UNIT | MGROUP_CHAR,
821 NULL, FALSE },
822 { "BUILD_IRRIGATION", N_("Build _Irrigation"),
823 "build_irrigation", "i", MGROUP_UNIT | MGROUP_CHAR,
824 NULL, FALSE },
825 { "BUILD_MINE", N_("Build _Mine"),
826 "build_mine", "m", MGROUP_UNIT | MGROUP_CHAR,
827 NULL, FALSE },
828 { "CULTIVATE", N_("Cultivate"),
829 "cultivate", "<shift>i", MGROUP_UNIT | MGROUP_CHAR,
830 NULL, FALSE },
831 { "PLANT", N_("Plant"),
832 "plant", "<shift>m", MGROUP_UNIT | MGROUP_CHAR,
833 NULL, FALSE },
834 { "TRANSFORM_TERRAIN", N_("Transf_orm Terrain"),
835 "transform_terrain", "o", MGROUP_UNIT | MGROUP_CHAR,
836 NULL, FALSE },
837 { "CONNECT_ROAD", N_("Connect With Roa_d"),
838 "connect_road", ACCL_MOD_KEY"r", MGROUP_UNIT,
839 NULL, FALSE },
840 { "CONNECT_RAIL", N_("Connect With Rai_l"),
841 "connect_rail", ACCL_MOD_KEY"l", MGROUP_UNIT,
842 NULL, FALSE },
843 { "CONNECT_MAGLEV", N_("Connect With _Maglev"),
844 "connect_maglev", ACCL_MOD_KEY"m", MGROUP_UNIT,
845 NULL, FALSE },
846 { "CONNECT_IRRIGATION", N_("Connect With Irri_gation"),
847 "connect_irrigation", ACCL_MOD_KEY"i", MGROUP_UNIT,
848 NULL, FALSE },
849 { "CLEAN", N_("_Clean"),
850 "clean", "p", MGROUP_UNIT | MGROUP_CHAR,
851 NULL, FALSE },
852
853 /* Combat menu */
854 { "FORTIFY", N_("Fortify"),
855 "fortify", "f", MGROUP_UNIT | MGROUP_CHAR,
856 NULL, FALSE },
857 { "BUILD_FORTRESS", N_("Build Fortress"),
858 "build_base_fortress", "<shift>f", MGROUP_UNIT | MGROUP_CHAR,
859 NULL, FALSE },
860 { "BUILD_AIRBASE", N_("Build Airbase"),
861 "build_base_airbase", "<shift>e", MGROUP_UNIT | MGROUP_CHAR,
862 NULL, FALSE },
863 { "PARADROP", N_("P_aradrop"),
864 "paradrop", "j", MGROUP_UNIT | MGROUP_CHAR,
865 NULL, FALSE },
866 { "PILLAGE", N_("_Pillage"),
867 "pillage", "<shift>p", MGROUP_UNIT | MGROUP_CHAR,
868 NULL, FALSE },
869
870 /* Civilization */
871 { "MAP_VIEW", N_("?noun:_View"),
872 "map_view", "F1", MGROUP_SAFE,
873 NULL, FALSE },
874 { "REPORT_UNITS", N_("_Units"),
875 "report_units", "F2", MGROUP_SAFE,
876 NULL, FALSE },
877 { "REPORT_NATIONS", N_("_Nations"),
878 "report_nations", "F3", MGROUP_SAFE,
879 NULL, FALSE },
880 { "REPORT_CITIES", N_("_Cities"),
881 "report_cities", "F4", MGROUP_SAFE,
882 NULL, FALSE },
883 { "REPORT_ECONOMY", N_("_Economy"),
884 "report_economy", "F5", MGROUP_PLAYER,
885 NULL, FALSE },
886 { "REPORT_RESEARCH", N_("_Research"),
887 "report_research", "F6", MGROUP_PLAYER,
888 NULL, FALSE },
889
890 { "TAX_RATES", N_("_Tax Rates..."),
891 "tax_rates", ACCL_MOD_KEY"t", MGROUP_PLAYING,
892 NULL, FALSE },
893 { "POLICIES", N_("_Policies..."),
894 "policies", "<shift><ctrl>p", MGROUP_PLAYER,
895 NULL, FALSE },
896 { "START_REVOLUTION", N_("_Revolution..."),
897 "revolution", "<shift><ctrl>g", MGROUP_PLAYING,
898 NULL, FALSE },
899
900 { "REPORT_WOW", N_("_Wonders of the World"),
901 "report_wow", "F7", MGROUP_SAFE,
902 NULL, FALSE },
903 { "REPORT_TOP_CITIES", N_("Top Cities"),
904 "report_top_cities", "F8", MGROUP_SAFE,
905 NULL, FALSE },
906 { "REPORT_MESSAGES", N_("_Messages"),
907 "report_messages", "F9", MGROUP_SAFE,
908 NULL, FALSE },
909 { "REPORT_DEMOGRAPHIC", N_("_Demographics"),
910 "report_demographics", "F11", MGROUP_SAFE,
911 NULL, FALSE },
912 { "REPORT_SPACESHIP", N_("_Spaceship"),
913 "report_spaceship", "F12", MGROUP_SAFE,
914 NULL, FALSE },
915 { "REPORT_ACHIEVEMENTS", N_("_Achievements"),
916 "report_achievements", "asterisk", MGROUP_SAFE | MGROUP_CHAR,
917 NULL, FALSE },
918
919 /* Battle Groups menu */
920 /* Note that user view: 1 - 4, internal: 0 - 3 */
921 { "BG_SELECT_1", N_("Select Battle Group 1"),
922 "bg_select_0", "<shift>F1", MGROUP_PLAYING,
923 NULL, FALSE },
924 { "BG_ASSIGN_1", N_("Assign Battle Group 1"),
925 "bg_assign_0", ACCL_MOD_KEY"F1", MGROUP_PLAYING,
926 NULL, FALSE },
927 { "BG_APPEND_1", N_("Append to Battle Group 1"),
928 "bg_append_0", "<shift><ctrl>F1", MGROUP_PLAYING,
929 NULL, FALSE },
930 { "BG_SELECT_2", N_("Select Battle Group 2"),
931 "bg_select_1", "<shift>F2", MGROUP_PLAYING,
932 NULL, FALSE },
933 { "BG_ASSIGN_2", N_("Assign Battle Group 2"),
934 "bg_assign_1", ACCL_MOD_KEY"F2", MGROUP_PLAYING,
935 NULL, FALSE },
936 { "BG_APPEND_2", N_("Append to Battle Group 2"),
937 "bg_append_1", "<shift><ctrl>F2", MGROUP_PLAYING,
938 NULL, FALSE },
939 { "BG_SELECT_3", N_("Select Battle Group 3"),
940 "bg_select_2", "<shift>F3", MGROUP_PLAYING,
941 NULL, FALSE },
942 { "BG_ASSIGN_3", N_("Assign Battle Group 3"),
943 "bg_assign_2", ACCL_MOD_KEY"F3", MGROUP_PLAYING,
944 NULL, FALSE },
945 { "BG_APPEND_3", N_("Append to Battle Group 3"),
946 "bg_append_2", "<shift><ctrl>F3", MGROUP_PLAYING,
947 NULL, FALSE },
948 { "BG_SELECT_4", N_("Select Battle Group 4"),
949 "bg_select_3", "<shift>F4", MGROUP_PLAYING,
950 NULL, FALSE },
951 { "BG_ASSIGN_4", N_("Assign Battle Group 4"),
952 "bg_assign_3", ACCL_MOD_KEY"F4", MGROUP_PLAYING,
953 NULL, FALSE },
954 { "BG_APPEND_4", N_("Append to Battle Group 4"),
955 "bg_append_3", "<shift><ctrl>F4", MGROUP_PLAYING,
956 NULL, FALSE },
957
958 /* Help menu */
959 { "HELP_OVERVIEW", N_("?help:Overview"),
960 "help_overview", NULL, MGROUP_SAFE,
961 NULL, FALSE },
962 { "HELP_PLAYING", N_("Strategy and Tactics"),
963 "help_playing", NULL, MGROUP_SAFE,
964 NULL, FALSE },
965 { "HELP_POLICIES", N_("Policies"),
966 "help_policies", NULL, MGROUP_SAFE,
967 NULL, FALSE },
968 { "HELP_TERRAIN", N_("Terrain"),
969 "help_terrains", NULL, MGROUP_SAFE,
970 NULL, FALSE },
971 { "HELP_ECONOMY", N_("Economy"),
972 "help_economy", NULL, MGROUP_SAFE,
973 NULL, FALSE },
974 { "HELP_CITIES", N_("Cities"),
975 "help_cities", NULL, MGROUP_SAFE,
976 NULL, FALSE },
977 { "HELP_IMPROVEMENTS", N_("City Improvements"),
978 "help_improvements", NULL, MGROUP_SAFE,
979 NULL, FALSE },
980 { "HELP_WONDERS", N_("Wonders of the World"),
981 "help_wonders", NULL, MGROUP_SAFE,
982 NULL, FALSE },
983 { "HELP_UNITS", N_("Units"),
984 "help_units", NULL, MGROUP_SAFE,
985 NULL, FALSE },
986 { "HELP_COMBAT", N_("Combat"),
987 "help_combat", NULL, MGROUP_SAFE,
988 NULL, FALSE },
989 { "HELP_ZOC", N_("Zones of Control"),
990 "help_zoc", NULL, MGROUP_SAFE,
991 NULL, FALSE },
992 { "HELP_GOVERNMENT", N_("Government"),
993 "help_government", NULL, MGROUP_SAFE,
994 NULL, FALSE },
995 { "HELP_DIPLOMACY", N_("Diplomacy"),
996 "help_diplomacy", NULL, MGROUP_SAFE,
997 NULL, FALSE },
998 { "HELP_TECH", N_("Technology"),
999 "help_tech", NULL, MGROUP_SAFE,
1000 NULL, FALSE },
1001 { "HELP_SPACE_RACE", N_("Space Race"),
1002 "help_space_race", NULL, MGROUP_SAFE,
1003 NULL, FALSE },
1004 { "HELP_RULESET", N_("About Current Ruleset"),
1005 "help_ruleset", NULL, MGROUP_SAFE,
1006 NULL, FALSE },
1007 { "HELP_TILESET", N_("About Current Tileset"),
1008 "help_tileset", NULL, MGROUP_SAFE,
1009 NULL, FALSE },
1010 { "HELP_MUSICSET", N_("About Current Musicset"),
1011 "help_musicset", NULL, MGROUP_SAFE,
1012 NULL, FALSE },
1013 { "HELP_NATIONS", N_("About Nations"),
1014 "help_nations", NULL, MGROUP_SAFE,
1015 NULL, FALSE },
1016 { "HELP_CONNECTING", N_("Connecting"),
1017 "help_connecting", NULL, MGROUP_SAFE,
1018 NULL, FALSE },
1019 { "HELP_CONTROLS", N_("Controls"),
1020 "help_controls", NULL, MGROUP_SAFE,
1021 NULL, FALSE },
1022 { "HELP_GOVERNOR", N_("Citizen Governor"),
1023 "help_governor", NULL, MGROUP_SAFE,
1024 NULL, FALSE },
1025 { "HELP_CHATLINE", N_("Chatline"),
1026 "help_chatline", NULL, MGROUP_SAFE,
1027 NULL, FALSE },
1028 { "HELP_WORKLIST_EDITOR", N_("Worklist Editor"),
1029 "help_worklist_editor", NULL, MGROUP_SAFE,
1030 NULL, FALSE },
1031 { "HELP_LANGUAGES", N_("Languages"),
1032 "help_languages", NULL, MGROUP_SAFE,
1033 NULL, FALSE },
1034 { "HELP_COPYING", N_("Copying"),
1035 "help_copying", NULL, MGROUP_SAFE,
1036 NULL, FALSE },
1037 { "HELP_ABOUT", N_("About Freeciv"),
1038 "help_about", NULL, MGROUP_SAFE,
1039 NULL, FALSE },
1040 { NULL }
1041};
1042
1043enum {
1073
1075 { "clear_chat", clear_chat_logs_callback },
1076 { "save_chat", save_chat_logs_callback },
1077 { "local_options", local_options_callback },
1078 { "message_options", message_options_callback },
1079 { "server_options", server_options_callback },
1080 { "save_options", save_options_callback },
1081
1082#ifdef FREECIV_DEBUG
1083 { "reload_tileset", reload_tileset_callback },
1084#endif /* FREECIV_DEBUG */
1085
1086 { "game_save", save_game_callback },
1087 { "game_save_as", save_game_as_callback },
1088 { "save_mapimg", save_mapimg_callback },
1089 { "save_mapimg_as", save_mapimg_as_callback },
1090 { "volume_up", volume_up_callback },
1091 { "volume_down", volume_down_callback },
1092 { "leave", leave_callback },
1093 { "quit", quit_callback },
1094
1095 { "find_city", find_city_callback },
1096 { "worklists", worklists_callback },
1097 { "rally_dlg", rally_dialog_callback },
1098 { "infra_dlg", infra_dialog_callback },
1099 { "scenario_props", scenario_properties_callback },
1100 { "scenario_save", save_scenario_callback },
1101 { "lua_script", client_lua_script_callback },
1102
1103 { "center_view", center_view_callback },
1104 { "zoom_in", zoom_in_callback },
1105 { "zoom_out", zoom_out_callback },
1106
1107 { "select_single", select_single_callback },
1108 { "select_all_tile", select_all_on_tile_callback },
1109 { "select_same_type_tile", select_same_type_tile_callback },
1110 { "select_same_type_cont", select_same_type_cont_callback },
1111 { "select_same_type", select_same_type_callback },
1112 { "select_dlg", select_dialog_callback },
1113
1114 { "goto", unit_goto_callback },
1115 { "goto_city", unit_goto_city_callback },
1116 { "return", unit_return_callback },
1117 { "explore", unit_explore_callback },
1118 { "patrol", unit_patrol_callback },
1119 { "teleport", unit_teleport_callback },
1120 { "sentry", unit_sentry_callback },
1121 { "unsentry_all", unsentry_all_callback },
1122 { "board", unit_board_callback },
1123 { "deboard", unit_deboard_callback },
1124 { "unload_transporter", unit_unload_transporter_callback },
1125 { "homecity", unit_homecity_callback },
1126 { "upgrade", unit_upgrade_callback },
1127 { "convert", unit_convert_callback },
1128 { "disband", unit_disband_callback },
1129 { "do_action", do_action_callback },
1130 { "wait", unit_wait_callback },
1131 { "done", unit_done_callback },
1132
1133 { "build_city", build_city_callback },
1134 { "auto_work", auto_work_callback },
1135 { "build_road", build_road_callback },
1136 { "build_irrigation", build_irrigation_callback },
1137 { "build_mine", build_mine_callback },
1138 { "cultivate", cultivate_callback },
1139 { "plant", plant_callback },
1140 { "transform_terrain", transform_terrain_callback },
1141 { "connect_road", connect_road_callback },
1142 { "connect_rail", connect_rail_callback },
1143 { "connect_maglev", connect_maglev_callback },
1144 { "connect_irrigation", connect_irrigation_callback },
1145 { "clean", clean_callback },
1146
1147 { "fortify", fortify_callback },
1148 { "build_base_fortress", build_fortress_callback },
1149 { "build_base_airbase", build_airbase_callback },
1150 { "paradrop", paradrop_callback },
1151 { "pillage", pillage_callback },
1152
1153 { "revolution", revolution_callback },
1154
1155 { "map_view", map_view_callback },
1156 { "report_units", report_units_callback },
1157 { "report_nations", report_nations_callback },
1158 { "report_cities", report_cities_callback },
1159 { "report_economy", report_economy_callback },
1160 { "report_research", report_research_callback },
1161 { "tax_rates", tax_rate_callback },
1162 { "policies", multiplier_callback },
1163 { "report_wow", report_wow_callback },
1164 { "report_top_cities", report_top_cities_callback },
1165 { "report_messages", report_messages_callback },
1166 { "report_demographics", report_demographic_callback },
1167 { "report_spaceship", report_spaceship_callback },
1168 { "report_achievements", report_achievements_callback },
1169
1170 { "help_overview", help_overview_callback },
1171 { "help_playing", help_playing_callback },
1172 { "help_policies", help_policies_callback },
1173 { "help_terrains", help_terrain_callback },
1174 { "help_economy", help_economy_callback },
1175 { "help_cities", help_cities_callback },
1176 { "help_improvements", help_improvements_callback },
1177 { "help_wonders", help_wonders_callback },
1178 { "help_units", help_units_callback },
1179 { "help_combat", help_combat_callback },
1180 { "help_zoc", help_zoc_callback },
1181 { "help_government", help_government_callback },
1182 { "help_diplomacy", help_diplomacy_callback },
1183 { "help_tech", help_tech_callback },
1184 { "help_space_race", help_space_race_callback },
1185 { "help_ruleset", help_ruleset_callback },
1186 { "help_tileset", help_tileset_callback },
1187 { "help_musicset", help_musicset_callback },
1188 { "help_nations", help_nations_callback },
1189 { "help_connecting", help_connecting_callback },
1190 { "help_controls", help_controls_callback },
1191 { "help_governor", help_governor_callback },
1192 { "help_chatline", help_chatline_callback },
1193 { "help_worklist_editor", help_worklist_editor_callback },
1194 { "help_languages", help_language_callback },
1195 { "help_copying", help_copying_callback },
1196 { "help_about", help_about_callback }
1197};
1198
1199static struct menu_entry_info *menu_entry_info_find(const char *key);
1200
1201/************************************************************************/
1205 GVariant *parameter,
1206 gpointer data)
1207{
1209}
1210
1211/************************************************************************/
1215 GVariant *parameter,
1216 gpointer data)
1217{
1219}
1220
1221/************************************************************************/
1225 GVariant *parameter,
1226 gpointer data)
1227{
1228 option_dialog_popup(_("Set local options"), client_optset);
1229}
1230
1231/************************************************************************/
1235 GVariant *parameter,
1236 gpointer data)
1237{
1239}
1240
1241/************************************************************************/
1245 GVariant *parameter,
1246 gpointer data)
1247{
1248 option_dialog_popup(_("Game Settings"), server_optset);
1249}
1250
1251/************************************************************************/
1255 GVariant *parameter,
1256 gpointer data)
1257{
1259}
1260
1261/************************************************************************/
1265 GVariant *parameter,
1266 gpointer data)
1267{
1268 struct menu_entry_info *info = (struct menu_entry_info *)data;
1269
1270 info->state ^= 1;
1272
1274
1277}
1278
1279#ifdef FREECIV_DEBUG
1280/************************************************************************/
1284 GVariant *parameter,
1285 gpointer data)
1286{
1287 tilespec_reread(NULL, TRUE, 1.0);
1288}
1289#endif /* FREECIV_DEBUG */
1290
1291/************************************************************************/
1295 gpointer data)
1296{
1298}
1299
1300/************************************************************************/
1304 gpointer data)
1305{
1307}
1308
1309/************************************************************************/
1313 gpointer data)
1314{
1316}
1317
1318/************************************************************************/
1322 gpointer data)
1323{
1325}
1326
1327/************************************************************************/
1331static void leave_local_game_response(GtkWidget *dialog, gint response)
1332{
1334 if (response == GTK_RESPONSE_OK) {
1335 /* It might be killed already */
1336 if (client.conn.used) {
1337 /* It will also kill the server */
1339 }
1340 }
1341}
1342
1343/************************************************************************/
1347 GVariant *parameter,
1348 gpointer data)
1349{
1350 if (is_server_running()) {
1351 GtkWidget *dialog
1354 _("Leaving a local game will end it!"));
1355 setup_dialog(dialog, toplevel);
1356 g_signal_connect(dialog, "response",
1359 } else {
1361 }
1362}
1363
1364/************************************************************************/
1368 GVariant *parameter,
1369 gpointer data)
1370{
1371 struct option *poption = optset_option_by_name(client_optset, "sound_effects_volume");
1372
1376}
1377
1378/************************************************************************/
1382 GVariant *parameter,
1383 gpointer data)
1384{
1385 struct option *poption = optset_option_by_name(client_optset, "sound_effects_volume");
1386
1390}
1391
1392/************************************************************************/
1396 GVariant *parameter,
1397 gpointer data)
1398{
1400}
1401
1402/************************************************************************/
1406 GVariant *parameter,
1407 gpointer data)
1408{
1410}
1411
1412/************************************************************************/
1416 GVariant *parameter,
1417 gpointer data)
1418{
1420}
1421
1422/************************************************************************/
1426 GVariant *parameter, gpointer data)
1427{
1429}
1430
1431/************************************************************************/
1435 GVariant *parameter,
1436 gpointer data)
1437{
1439}
1440
1441/************************************************************************/
1454
1455/************************************************************************/
1459 GVariant *parameter,
1460 gpointer data)
1461{
1463}
1464
1465/************************************************************************/
1469 GVariant *parameter,
1470 gpointer data)
1471{
1473}
1474
1475/************************************************************************/
1479 GVariant *parameter,
1480 gpointer data)
1481{
1483}
1484
1485/************************************************************************/
1494
1495/************************************************************************/
1504
1505/************************************************************************/
1514
1515/************************************************************************/
1519 GVariant *parameter,
1520 gpointer data)
1521{
1523}
1524
1525/************************************************************************/
1534
1535/************************************************************************/
1539 GVariant *parameter,
1540 gpointer data)
1541{
1543}
1544
1545/************************************************************************/
1549 GVariant *parameter,
1550 gpointer data)
1551{
1553}
1554
1555/************************************************************************/
1559 GVariant *parameter,
1560 gpointer data)
1561{
1563}
1564
1565/************************************************************************/
1574
1575/************************************************************************/
1579 GVariant *parameter,
1580 gpointer data)
1581{
1583}
1584
1585/************************************************************************/
1589 GVariant *parameter,
1590 gpointer data)
1591{
1593}
1594
1595/************************************************************************/
1599 GVariant *parameter,
1600 gpointer data)
1601{
1603}
1604
1605/************************************************************************/
1609 GVariant *parameter,
1610 gpointer data)
1611{
1613}
1614
1615/************************************************************************/
1624
1625/************************************************************************/
1634
1635/************************************************************************/
1639 GVariant *parameter,
1640 gpointer data)
1641{
1643}
1644
1645/************************************************************************/
1654
1655/************************************************************************/
1659 GVariant *parameter,
1660 gpointer data)
1661{
1663}
1664
1665/************************************************************************/
1669 GVariant *parameter,
1670 gpointer data)
1671{
1673}
1674
1675/************************************************************************/
1684
1685/************************************************************************/
1689 GVariant *parameter,
1690 gpointer data)
1691{
1693}
1694
1695/************************************************************************/
1704
1705/************************************************************************/
1714
1715/************************************************************************/
1719 GVariant *parameter,
1720 gpointer data)
1721{
1723}
1724
1725/************************************************************************/
1734
1735/************************************************************************/
1744
1745/************************************************************************/
1754
1755/************************************************************************/
1759 GVariant *parameter,
1760 gpointer data)
1761{
1763}
1764
1765/************************************************************************/
1769 GVariant *parameter,
1770 gpointer data)
1771{
1773}
1774
1775/************************************************************************/
1779 GVariant *parameter,
1780 gpointer data)
1781{
1783
1784 /* Unreachable techs in reqtree on/off */
1786}
1787
1789 const char *menu_entry;
1790 bool *option;
1792};
1793
1795 { "SAVE_OPTIONS_ON_EXIT", &gui_options.save_options_on_exit, -1 },
1796 { "FULL_SCREEN", &(GUI_GTK_OPTION(fullscreen)), -1 },
1797 { "EDIT_MODE", &game.info.is_edit_mode, -1 },
1798 { "TOGGLE_FOG", &game.client.fog_of_war, -1 },
1799 { "SHOW_CITY_OUTLINES", &gui_options.draw_city_outlines, VMENU_CITY_OUTLINES },
1800 { "SHOW_CITY_OUTPUT", &gui_options.draw_city_output, VMENU_CITY_OUTPUT },
1801 { "SHOW_MAP_GRID", &gui_options.draw_map_grid, VMENU_MAP_GRID },
1802 { "SHOW_NAT_BORDERS", &gui_options.draw_borders, VMENU_NAT_BORDERS },
1803 { "SHOW_NATIVE_TILES", &gui_options.draw_native, VMENU_NATIVE_TILES },
1804 { "SHOW_CITY_FULL_BAR", &gui_options.draw_full_citybar, VMENU_CITY_FULL_BAR },
1805 { "SHOW_CITY_NAMES", &gui_options.draw_city_names, VMENU_CITY_NAMES },
1806 { "SHOW_CITY_GROWTH", &gui_options.draw_city_growth, VMENU_CITY_GROWTH },
1807 { "SHOW_CITY_PRODUCTIONS", &gui_options.draw_city_productions,
1809 { "SHOW_CITY_BUY_COST", &gui_options.draw_city_buycost, VMENU_CITY_BUY_COST },
1810 { "SHOW_CITY_TRADE_ROUTES", &gui_options.draw_city_trade_routes,
1812 { "SHOW_TERRAIN", &gui_options.draw_terrain, VMENU_TERRAIN },
1813 { "SHOW_COASTLINE", &gui_options.draw_coastline, VMENU_COASTLINE },
1814 { "SHOW_PATHS", &gui_options.draw_paths, VMENU_PATHS },
1815 { "SHOW_IRRIGATION", &gui_options.draw_irrigation, VMENU_IRRIGATION },
1816 { "SHOW_MINES", &gui_options.draw_mines, VMENU_MINES },
1817 { "SHOW_BASES", &gui_options.draw_fortress_airbase, VMENU_BASES },
1818 { "SHOW_RESOURCES", &gui_options.draw_specials, VMENU_RESOURCES },
1819 { "SHOW_HUTS", &gui_options.draw_huts, VMENU_HUTS },
1820 { "SHOW_POLLUTION", &gui_options.draw_pollution, VMENU_POLLUTION },
1821 { "SHOW_CITIES", &gui_options.draw_cities, VMENU_CITIES },
1822 { "SHOW_UNITS", &gui_options.draw_units, VMENU_UNITS },
1823 { "SHOW_UNIT_SOLID_BG", &gui_options.solid_color_behind_units, VMENU_UNIT_SOLID_BG },
1824 { "SHOW_UNIT_SHIELDS", &gui_options.draw_unit_shields , VMENU_UNIT_SHIELDS },
1825 { "SHOW_STACK_SIZE", &gui_options.draw_unit_stack_size, VMENU_STACK_SIZE },
1826 { "SHOW_FOCUS_UNIT", &gui_options.draw_focus_unit, VMENU_FOCUS_UNIT },
1827 { "SHOW_FOG_OF_WAR", &gui_options.draw_fog_of_war, VMENU_FOW },
1828
1829 { NULL, NULL, -1 }
1830};
1831
1832/************************************************************************/
1835static void view_menu_item_toggle(void (*cb)(void),
1836 bool updt_sensitivity,
1837 gpointer data)
1838{
1839 int i;
1840 struct menu_entry_info *info = (struct menu_entry_info *)data;
1841
1842 info->state ^= 1;
1843
1844 cb();
1845
1846 if (updt_sensitivity) {
1848 }
1849
1850 /* TODO: Make the information available directly from menu_entry_info,
1851 * se we don't need to do this search for it */
1852 for (i = 0; meoms[i].menu_entry != NULL; i++) {
1853 if (!strcmp(meoms[i].menu_entry, info->key)) {
1854 g_menu_remove(view_menu, meoms[i].menu_pos);
1857 return;
1858 }
1859 }
1860}
1861
1862/************************************************************************/
1871
1872/************************************************************************/
1876 GVariant *parameter,
1877 gpointer data)
1878{
1880}
1881
1882/************************************************************************/
1890
1891/************************************************************************/
1900
1901/************************************************************************/
1905 GVariant *parameter,
1906 gpointer data)
1907{
1909}
1910
1911/************************************************************************/
1920
1921/************************************************************************/
1925 GVariant *parameter,
1926 gpointer data)
1927{
1929}
1930
1931/************************************************************************/
1935 GVariant *parameter,
1936 gpointer data)
1937{
1939}
1940
1941/************************************************************************/
1950
1951/************************************************************************/
1960
1961/************************************************************************/
1970
1971/************************************************************************/
1975 GVariant *parameter,
1976 gpointer data)
1977{
1979}
1980
1981/************************************************************************/
1985 GVariant *parameter,
1986 gpointer data)
1987{
1989}
1990
1991/************************************************************************/
1995 GVariant *parameter,
1996 gpointer data)
1997{
1999}
2000
2001/************************************************************************/
2005 GVariant *parameter,
2006 gpointer data)
2007{
2009}
2010
2011/************************************************************************/
2015 GVariant *parameter,
2016 gpointer data)
2017{
2019}
2020
2021/************************************************************************/
2025 gpointer data)
2026{
2028}
2029
2030/************************************************************************/
2034 GVariant *parameter,
2035 gpointer data)
2036{
2038}
2039
2040/************************************************************************/
2044 gpointer data)
2045{
2047}
2048
2049/************************************************************************/
2057
2058/************************************************************************/
2062 gpointer data)
2063{
2065}
2066
2067/************************************************************************/
2071 gpointer data)
2072{
2074}
2075
2076/************************************************************************/
2085
2086/************************************************************************/
2095
2096/************************************************************************/
2105
2106/************************************************************************/
2110 GVariant *parameter,
2111 gpointer data)
2112{
2114}
2115
2116/************************************************************************/
2124
2125/************************************************************************/
2129 gpointer data)
2130{
2131 struct menu_entry_info *info = (struct menu_entry_info *)data;
2132
2133 info->state ^= 1;
2135
2137
2139
2142}
2143
2144/************************************************************************/
2148 GVariant *parameter,
2149 gpointer data)
2150{
2151 struct menu_entry_info *info = (struct menu_entry_info *)data;
2152
2153 info->state ^= 1;
2154
2156
2158
2161}
2162
2163/************************************************************************/
2176
2177/************************************************************************/
2181 gpointer data)
2182{
2184}
2185
2186/************************************************************************/
2194
2195/************************************************************************/
2204
2205/************************************************************************/
2214
2215/************************************************************************/
2224
2225/************************************************************************/
2234
2235/************************************************************************/
2239 GVariant *parameter,
2240 gpointer data)
2241{
2243}
2244
2245/************************************************************************/
2249 GVariant *parameter,
2250 gpointer data)
2251{
2253}
2254
2255/************************************************************************/
2259 GVariant *parameter,
2260 gpointer data)
2261{
2263}
2264
2265/************************************************************************/
2269 GVariant *parameter,
2270 gpointer data)
2271{
2272 key_unit_wait();
2273}
2274
2275/************************************************************************/
2279 GVariant *parameter,
2280 gpointer data)
2281{
2282 key_unit_done();
2283}
2284
2285/************************************************************************/
2289 gpointer data)
2290{
2291 key_unit_goto();
2292}
2293
2294/************************************************************************/
2298 GVariant *parameter,
2299 gpointer data)
2300{
2301 int sub_target = NO_TARGET;
2302 struct action *paction = (struct action *)data;
2303
2305
2307 case ASTK_BUILDING:
2308 {
2310 "end_building");
2312 sub_target = improvement_number(pbuilding);
2313 }
2314 break;
2315 case ASTK_TECH:
2316 {
2318 "end_tech");
2320 sub_target = advance_number(ptech);
2321 }
2322 break;
2323 case ASTK_EXTRA:
2325 {
2326 struct extra_type *pextra = g_object_get_data(G_OBJECT(action),
2327 "end_extra");
2328 fc_assert_ret(pextra != NULL);
2329 sub_target = extra_number(pextra);
2330 }
2331 break;
2332 case ASTK_SPECIALIST:
2333 {
2335 "end_specialist");
2336 fc_assert_ret(nullptr != pspec);
2337 sub_target = specialist_number(pspec);
2338 }
2339 break;
2340 case ASTK_NONE:
2341 sub_target = NO_TARGET;
2342 break;
2343 case ASTK_COUNT:
2344 /* Should not exits */
2346 break;
2347 }
2348
2350}
2351
2352/************************************************************************/
2356 GVariant *parameter,
2357 gpointer data)
2358{
2359 if (get_num_units_in_focus() > 0) {
2361 }
2362}
2363
2364/************************************************************************/
2375
2376/************************************************************************/
2380 GVariant *parameter,
2381 gpointer data)
2382{
2384}
2385
2386/************************************************************************/
2390 gpointer data)
2391{
2393}
2394
2395/************************************************************************/
2399 gpointer data)
2400{
2402}
2403
2404/************************************************************************/
2408 GVariant *parameter,
2409 gpointer data)
2410{
2412}
2413
2414/************************************************************************/
2418 GVariant *parameter,
2419 gpointer data)
2420{
2422}
2423
2424/************************************************************************/
2435
2436/************************************************************************/
2446
2447/************************************************************************/
2457
2458/************************************************************************/
2462 GVariant *parameter,
2463 gpointer data)
2464{
2466}
2467
2468/************************************************************************/
2472 GVariant *parameter,
2473 gpointer data)
2474{
2476}
2477
2478/************************************************************************/
2482 GVariant *parameter,
2483 gpointer data)
2484{
2486}
2487
2488/************************************************************************/
2492 GVariant *parameter,
2493 gpointer data)
2494{
2496}
2497
2498/************************************************************************/
2502 GVariant *parameter,
2503 gpointer data)
2504{
2506}
2507
2508/************************************************************************/
2512 GVariant *parameter,
2513 gpointer data)
2514{
2516 /* FIXME: this can provide different items for different units...
2517 * not good! */
2518 /* Enable the button for adding to a city in all cases, so we
2519 get an eventual error message from the server if we try. */
2525 }
2527}
2528
2529/************************************************************************/
2533 GVariant *parameter,
2534 gpointer data)
2535{
2537}
2538
2539/************************************************************************/
2543 GVariant *parameter,
2544 gpointer data)
2545{
2547 /* FIXME: this can provide different actions for different units...
2548 * not good! */
2550 EC_ROAD,
2552 punit);
2553 bool building_road = FALSE;
2554
2555 if (tgt != NULL
2559 }
2560
2563 }
2565}
2566
2567/************************************************************************/
2571 GVariant *parameter,
2572 gpointer data)
2573{
2575}
2576
2577/************************************************************************/
2581 GVariant *parameter,
2582 gpointer data)
2583{
2585}
2586
2587/************************************************************************/
2591 GVariant *parameter,
2592 gpointer data)
2593{
2595}
2596
2597/************************************************************************/
2601 GVariant *parameter,
2602 gpointer data)
2603{
2604 key_unit_mine();
2605}
2606
2607/************************************************************************/
2611 GVariant *parameter,
2612 gpointer data)
2613{
2615
2616 if (proad != NULL) {
2617 struct extra_type *tgt;
2618
2619 tgt = road_extra_get(proad);
2620
2622 }
2623}
2624
2625/************************************************************************/
2629 GVariant *parameter,
2630 gpointer data)
2631{
2633
2634 if (prail != NULL) {
2635 struct extra_type *tgt;
2636
2637 tgt = road_extra_get(prail);
2638
2640 }
2641}
2642
2643/************************************************************************/
2647 GVariant *parameter,
2648 gpointer data)
2649{
2651
2652 if (pmaglev != NULL) {
2653 struct extra_type *tgt;
2654
2655 tgt = road_extra_get(pmaglev);
2656
2658 }
2659}
2660
2661/************************************************************************/
2665 GVariant *parameter,
2666 gpointer data)
2667{
2669
2670 if (extra_type_list_size(extras) > 0) {
2671 struct extra_type *pextra;
2672
2674
2676 }
2677}
2678
2679/************************************************************************/
2683 GVariant *parameter,
2684 gpointer data)
2685{
2687}
2688
2689/************************************************************************/
2693 gpointer data)
2694{
2696}
2697
2698/************************************************************************/
2702 gpointer data)
2703{
2705}
2706
2707/************************************************************************/
2711 gpointer data)
2712{
2714}
2715
2716/************************************************************************/
2720 GVariant *parameter,
2721 gpointer data)
2722{
2724}
2725
2726/************************************************************************/
2730 GVariant *parameter,
2731 gpointer data)
2732{
2734}
2735
2736/************************************************************************/
2740 GVariant *parameter,
2741 gpointer data)
2742{
2744}
2745
2746/************************************************************************/
2750 gpointer data)
2751{
2753}
2754
2755/************************************************************************/
2759 gpointer data)
2760{
2762}
2763
2764/************************************************************************/
2768 GVariant *parameter,
2769 gpointer data)
2770{
2772}
2773
2774/************************************************************************/
2778 GVariant *parameter,
2779 gpointer data)
2780{
2782}
2783
2784/************************************************************************/
2788 GVariant *parameter,
2789 gpointer data)
2790{
2791 struct extra_type *pextra = data;
2792
2796}
2797
2798/************************************************************************/
2802 GVariant *parameter,
2803 gpointer data)
2804{
2805 struct extra_type *pextra = data;
2806
2809 pextra);
2811}
2812
2813/************************************************************************/
2817 GVariant *parameter,
2818 gpointer data)
2819{
2820 struct extra_type *pextra = data;
2821
2824 pextra);
2826}
2827
2828/************************************************************************/
2832 GVariant *parameter,
2833 gpointer data)
2834{
2835 struct extra_type *pextra = data;
2836
2839 pextra);
2841}
2842
2843/************************************************************************/
2847 GVariant *parameter,
2848 gpointer data)
2849{
2850 struct extra_type *pextra = data;
2851
2855 pextra);
2856 }
2858}
2859
2860/************************************************************************/
2864 GVariant *parameter,
2865 gpointer data)
2866{
2868}
2869
2870/************************************************************************/
2874 GVariant *parameter,
2875 gpointer data)
2876{
2877 zoom_step_up();
2878}
2879
2880/************************************************************************/
2884 GVariant *parameter,
2885 gpointer data)
2886{
2888}
2889
2890/************************************************************************/
2894 GVariant *parameter,
2895 gpointer data)
2896{
2898}
2899
2900/************************************************************************/
2904 GVariant *parameter,
2905 gpointer data)
2906
2907{
2909}
2910
2911/************************************************************************/
2920
2921/************************************************************************/
2930
2931/************************************************************************/
2935 GVariant *parameter,
2936 gpointer data)
2937{
2938 if (NULL != client.conn.playing) {
2940 }
2941}
2942
2943/************************************************************************/
2952
2953/************************************************************************/
2962
2963/************************************************************************/
2972
2973/************************************************************************/
2978{
2979 char actname[150];
2980 GMenuItem *item;
2981
2982 fc_snprintf(actname, sizeof(actname), "app.%s(%s)",
2983 info->action, info->state ? "true" : "false");
2984 item = g_menu_item_new(Q_(info->name), NULL);
2986
2987 if (info->accl != NULL) {
2988 const char *accls[2] = { info->accl, NULL };
2989
2991 }
2992
2993 return item;
2994}
2995
2996/************************************************************************/
3001{
3003}
3004
3005/************************************************************************/
3008static void menu_entry_init(GMenu *sub, const char *key)
3009{
3011
3012 if (info != NULL) {
3013 GMenuItem *item;
3014
3015 if (info->toggle != NULL) {
3017 } else {
3018 char actname[150];
3019
3020 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
3021 item = g_menu_item_new(Q_(info->name), actname);
3022 }
3023
3024 /* Should be menu_item_append_unref()? */
3027 }
3028}
3029
3030/************************************************************************/
3034{
3035 int i;
3036
3037 for (i = 0; meoms[i].menu_entry != NULL; i++) {
3038 struct menu_entry_info *info = menu_entry_info_find(meoms[i].menu_entry);
3039
3040 if (meoms[i].option != NULL) {
3041 info->state = *meoms[i].option;
3042 } else {
3043 info->state = FALSE; /* Best guess we have */
3044 }
3045 }
3046}
3047
3048/************************************************************************/
3052{
3053 int i;
3055
3056 /* Simple entries */
3059
3060 /* Toggles */
3061 for (i = 0; menu_entries[i].key != NULL; i++) {
3062 if (menu_entries[i].toggle != NULL) {
3063 GSimpleAction *act;
3064 GVariant *var = g_variant_new("b", TRUE);
3065
3068 g_signal_connect(act, "change-state",
3070 (gpointer)&(menu_entries[i]));
3071 }
3072 }
3073
3075
3076 for (i = 0; menu_entries[i].key != NULL; i++) {
3077 if (menu_entries[i].accl != NULL && menu_entries[i].toggle == NULL) {
3078 const char *accls[2] = { menu_entries[i].accl, NULL };
3079 char actname[150];
3080
3081 fc_snprintf(actname, sizeof(actname), "app.%s", menu_entries[i].action);
3082
3084 }
3085 }
3086}
3087
3088/************************************************************************/
3091static void register_bg_actions(GActionMap *map, int bg)
3092{
3093 GSimpleAction *act;
3094 char actname[256];
3095
3096 fc_snprintf(actname, sizeof(actname), "bg_select_%d", bg);
3099 g_signal_connect(act, "activate",
3101
3102 fc_snprintf(actname, sizeof(actname), "bg_assign_%d", bg);
3105 g_signal_connect(act, "activate",
3107
3108 fc_snprintf(actname, sizeof(actname), "bg_append_%d", bg);
3111 g_signal_connect(act, "activate",
3113}
3114
3115/************************************************************************/
3119{
3120 GMenu *menubar;
3121 GMenu *topmenu;
3122 GMenu *submenu;
3123 int i;
3124
3126
3127 menubar = g_menu_new();
3128
3129 topmenu = g_menu_new();
3130 menu_entry_init(topmenu, "CLEAR_CHAT_LOGS");
3131 menu_entry_init(topmenu, "SAVE_CHAT_LOGS");
3132
3134 menu_entry_init(options_menu, "LOCAL_OPTIONS");
3135 menu_entry_init(options_menu, "MESSAGE_OPTIONS");
3136 menu_entry_init(options_menu, "SERVER_OPTIONS");
3137 menu_entry_init(options_menu, "SAVE_OPTIONS");
3138 menu_entry_init(options_menu, "SAVE_OPTIONS_ON_EXIT");
3139
3141
3142#ifdef FREECIV_DEBUG
3143 menu_entry_init(topmenu, "RELOAD_TILESET");
3144#endif /* FREECIV_DEBUG */
3145
3146 menu_entry_init(topmenu, "GAME_SAVE");
3147 menu_entry_init(topmenu, "GAME_SAVE_AS");
3148 menu_entry_init(topmenu, "MAPIMG_SAVE");
3149 menu_entry_init(topmenu, "MAPIMG_SAVE_AS");
3150 menu_entry_init(topmenu, "VOLUME_UP");
3151 menu_entry_init(topmenu, "VOLUME_DOWN");
3152 menu_entry_init(topmenu, "LEAVE");
3153 menu_entry_init(topmenu, "QUIT");
3154
3156
3158
3159 menu_entry_init(edit_menu, "FIND_CITY");
3160 menu_entry_init(edit_menu, "WORKLISTS");
3161 menu_entry_init(edit_menu, "RALLY_DLG");
3162 menu_entry_init(edit_menu, "INFRA_DLG");
3163 menu_entry_init(edit_menu, "EDIT_MODE");
3164 menu_entry_init(edit_menu, "TOGGLE_FOG");
3165 menu_entry_init(edit_menu, "SCENARIO_PROPERTIES");
3166 menu_entry_init(edit_menu, "SCENARIO_SAVE");
3167 menu_entry_init(edit_menu, "CLIENT_LUA_SCRIPT");
3168
3170
3172
3173 menu_entry_init(view_menu, "SHOW_CITY_OUTLINES");
3174 menu_entry_init(view_menu, "SHOW_CITY_OUTPUT");
3175 menu_entry_init(view_menu, "SHOW_MAP_GRID");
3176 menu_entry_init(view_menu, "SHOW_NAT_BORDERS");
3177 menu_entry_init(view_menu, "SHOW_NATIVE_TILES");
3178 menu_entry_init(view_menu, "SHOW_CITY_FULL_BAR");
3179 menu_entry_init(view_menu, "SHOW_CITY_NAMES");
3180 menu_entry_init(view_menu, "SHOW_CITY_GROWTH");
3181 menu_entry_init(view_menu, "SHOW_CITY_PRODUCTIONS");
3182 menu_entry_init(view_menu, "SHOW_CITY_BUY_COST");
3183 menu_entry_init(view_menu, "SHOW_CITY_TRADE_ROUTES");
3184 menu_entry_init(view_menu, "SHOW_TERRAIN");
3185 menu_entry_init(view_menu, "SHOW_COASTLINE");
3186 menu_entry_init(view_menu, "SHOW_PATHS");
3187 menu_entry_init(view_menu, "SHOW_IRRIGATION");
3188 menu_entry_init(view_menu, "SHOW_MINES");
3189 menu_entry_init(view_menu, "SHOW_BASES");
3190 menu_entry_init(view_menu, "SHOW_RESOURCES");
3191 menu_entry_init(view_menu, "SHOW_HUTS");
3192 menu_entry_init(view_menu, "SHOW_POLLUTION");
3193 menu_entry_init(view_menu, "SHOW_CITIES");
3194 menu_entry_init(view_menu, "SHOW_UNITS");
3195 menu_entry_init(view_menu, "SHOW_UNIT_SOLID_BG");
3196 menu_entry_init(view_menu, "SHOW_UNIT_SHIELDS");
3197 menu_entry_init(view_menu, "SHOW_STACK_SIZE");
3198 menu_entry_init(view_menu, "SHOW_FOCUS_UNIT");
3199
3200 menu_entry_init(view_menu, "SHOW_FOG_OF_WAR");
3201
3202 menu_entry_init(view_menu, "FULL_SCREEN");
3203 menu_entry_init(view_menu, "CENTER_VIEW");
3204 menu_entry_init(view_menu, "ZOOM_IN");
3205 menu_entry_init(view_menu, "ZOOM_OUT");
3206
3208
3209 topmenu = g_menu_new();
3210
3211 menu_entry_init(topmenu, "SELECT_SINGLE");
3212 menu_entry_init(topmenu, "SELECT_ALL_ON_TILE");
3213 menu_entry_init(topmenu, "SELECT_SAME_TYPE_TILE");
3214 menu_entry_init(topmenu, "SELECT_SAME_TYPE_CONT");
3215 menu_entry_init(topmenu, "SELECT_SAME_TYPE");
3216 menu_entry_init(topmenu, "SELECT_DLG");
3217
3219
3221
3222 menu_entry_init(unit_menu, "UNIT_GOTO");
3223
3224 /* Placeholder submenu (so that menu update has something to replace) */
3225 submenu = g_menu_new();
3227
3228 menu_entry_init(unit_menu, "UNIT_GOTO_CITY");
3229 menu_entry_init(unit_menu, "UNIT_RETURN");
3230 menu_entry_init(unit_menu, "UNIT_EXPLORE");
3231 menu_entry_init(unit_menu, "UNIT_PATROL");
3232 menu_entry_init(unit_menu, "UNIT_TELEPORT");
3233 menu_entry_init(unit_menu, "UNIT_SENTRY");
3234 menu_entry_init(unit_menu, "UNSENTRY_ALL");
3235 menu_entry_init(unit_menu, "UNIT_BOARD");
3236 menu_entry_init(unit_menu, "UNIT_DEBOARD");
3237 menu_entry_init(unit_menu, "UNIT_UNLOAD_TRANSPORTER");
3238 menu_entry_init(unit_menu, "UNIT_HOMECITY");
3239 menu_entry_init(unit_menu, "UNIT_UPGRADE");
3240 menu_entry_init(unit_menu, "UNIT_CONVERT");
3241 menu_entry_init(unit_menu, "UNIT_DISBAND");
3242 menu_entry_init(unit_menu, "DO_ACTION");
3243 menu_entry_init(unit_menu, "UNIT_WAIT");
3244 menu_entry_init(unit_menu, "UNIT_DONE");
3245
3247
3249 menu_entry_init(work_menu, "BUILD_CITY");
3250 menu_entry_init(work_menu, "AUTO_WORKER");
3251
3252 /* Placeholder submenus (so that menu update has something to replace) */
3253 submenu = g_menu_new();
3255 submenu = g_menu_new();
3256 submenu_append_unref(work_menu, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3257 submenu = g_menu_new();
3259 submenu = g_menu_new();
3260 submenu_append_unref(work_menu, _("_Clean Nuisance"), G_MENU_MODEL(submenu));
3261
3262 menu_entry_init(work_menu, "BUILD_ROAD");
3263 menu_entry_init(work_menu, "BUILD_IRRIGATION");
3264 menu_entry_init(work_menu, "BUILD_MINE");
3265 menu_entry_init(work_menu, "CULTIVATE");
3266 menu_entry_init(work_menu, "PLANT");
3267 menu_entry_init(work_menu, "TRANSFORM_TERRAIN");
3268 menu_entry_init(work_menu, "CONNECT_ROAD");
3269 menu_entry_init(work_menu, "CONNECT_RAIL");
3270 menu_entry_init(work_menu, "CONNECT_MAGLEV");
3271 menu_entry_init(work_menu, "CONNECT_IRRIGATION");
3272 menu_entry_init(work_menu, "CLEAN");
3273
3275
3277 menu_entry_init(combat_menu, "FORTIFY");
3278 menu_entry_init(combat_menu, "BUILD_FORTRESS");
3279 menu_entry_init(combat_menu, "BUILD_AIRBASE");
3280
3281 /* Placeholder submenu (so that menu update has something to replace) */
3282 submenu = g_menu_new();
3284
3286
3287 menu_entry_init(combat_menu, "PARADROP");
3288 menu_entry_init(combat_menu, "PILLAGE");
3289
3290 gov_menu = g_menu_new();
3291
3292 menu_entry_init(gov_menu, "MAP_VIEW");
3293 menu_entry_init(gov_menu, "REPORT_UNITS");
3294 menu_entry_init(gov_menu, "REPORT_NATIONS");
3295 menu_entry_init(gov_menu, "REPORT_CITIES");
3296 menu_entry_init(gov_menu, "REPORT_ECONOMY");
3297 menu_entry_init(gov_menu, "REPORT_RESEARCH");
3298 menu_entry_init(gov_menu, "TAX_RATES");
3299 menu_entry_init(gov_menu, "POLICIES");
3300
3301 /* Placeholder submenu (so that menu update has something to replace) */
3302 submenu = g_menu_new();
3304
3305 menu_entry_init(gov_menu, "REPORT_WOW");
3306 menu_entry_init(gov_menu, "REPORT_TOP_CITIES");
3307 menu_entry_init(gov_menu, "REPORT_MESSAGES");
3308 menu_entry_init(gov_menu, "REPORT_DEMOGRAPHIC");
3309 menu_entry_init(gov_menu, "REPORT_SPACESHIP");
3310 menu_entry_init(gov_menu, "REPORT_ACHIEVEMENTS");
3311
3312 submenu_append_unref(menubar, _("C_ivilization"), G_MENU_MODEL(gov_menu));
3313
3314 topmenu = g_menu_new();
3315
3316 /* Keys exist for 4 battle groups */
3318
3319 for (i = 0; i < MAX_NUM_BATTLEGROUPS; i++) {
3320 char key[128];
3321
3322 /* User side battle group numbers start from 1 */
3323 fc_snprintf(key, sizeof(key), "BG_SELECT_%d", i + 1);
3325 fc_snprintf(key, sizeof(key), "BG_ASSIGN_%d", i + 1);
3327 fc_snprintf(key, sizeof(key), "BG_APPEND_%d", i + 1);
3329
3331 }
3332
3333 submenu_append_unref(menubar, _("_Battle Groups"), G_MENU_MODEL(topmenu));
3334
3335 topmenu = g_menu_new();
3336
3337 menu_entry_init(topmenu, "HELP_OVERVIEW");
3338 menu_entry_init(topmenu, "HELP_PLAYING");
3339 menu_entry_init(topmenu, "HELP_POLICIES");
3340 menu_entry_init(topmenu, "HELP_TERRAIN");
3341 menu_entry_init(topmenu, "HELP_ECONOMY");
3342 menu_entry_init(topmenu, "HELP_CITIES");
3343 menu_entry_init(topmenu, "HELP_IMPROVEMENTS");
3344 menu_entry_init(topmenu, "HELP_WONDERS");
3345 menu_entry_init(topmenu, "HELP_UNITS");
3346 menu_entry_init(topmenu, "HELP_COMBAT");
3347 menu_entry_init(topmenu, "HELP_ZOC");
3348 menu_entry_init(topmenu, "HELP_GOVERNMENT");
3349 menu_entry_init(topmenu, "HELP_DIPLOMACY");
3350 menu_entry_init(topmenu, "HELP_TECH");
3351 menu_entry_init(topmenu, "HELP_SPACE_RACE");
3352 menu_entry_init(topmenu, "HELP_RULESET");
3353 menu_entry_init(topmenu, "HELP_TILESET");
3354 menu_entry_init(topmenu, "HELP_MUSICSET");
3355 menu_entry_init(topmenu, "HELP_NATIONS");
3356 menu_entry_init(topmenu, "HELP_CONNECTING");
3357 menu_entry_init(topmenu, "HELP_CONTROLS");
3358 menu_entry_init(topmenu, "HELP_GOVERNOR");
3359 menu_entry_init(topmenu, "HELP_CHATLINE");
3360 menu_entry_init(topmenu, "HELP_WORKLIST_EDITOR");
3361 menu_entry_init(topmenu, "HELP_LANGUAGES");
3362 menu_entry_init(topmenu, "HELP_COPYING");
3363 menu_entry_init(topmenu, "HELP_ABOUT");
3364
3366
3367 menus_built = TRUE;
3368
3370
3371 return menubar;
3372}
3373
3374/************************************************************************/
3377static struct menu_entry_info *menu_entry_info_find(const char *key)
3378{
3379 int i;
3380
3381 for (i = 0; menu_entries[i].key != NULL; i++) {
3382 if (!strcmp(key, menu_entries[i].key)) {
3383 return &(menu_entries[i]);
3384 }
3385 }
3386
3387 return NULL;
3388}
3389
3390/************************************************************************/
3394 struct menu_entry_info *info,
3396{
3397 GAction *act = g_action_map_lookup_action(map, info->action);
3398
3399 if (act != NULL) {
3401 }
3402}
3403
3404/************************************************************************/
3408 const char *key,
3410{
3412
3413 if (info != NULL) {
3415 }
3416}
3417
3418/************************************************************************/
3422 enum menu_entry_grouping group,
3424{
3425 int i;
3426
3427 for (i = 0; menu_entries[i].key != NULL; i++) {
3428 if (menu_entries[i].grouping & group) {
3430 }
3431 }
3432}
3433
3434/************************************************************************/
3437static void menus_rename(GMenu *parent, int index, const char *key,
3438 const char *new_name)
3439{
3441
3442 if (info != NULL) {
3443 char actname[150];
3444 GMenuItem *item;
3445
3446 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
3447 g_menu_remove(parent, index);
3448
3449 item = g_menu_item_new(new_name, actname);
3451 }
3452}
3453
3454/************************************************************************/
3458{
3459 /* The "full" city bar (i.e. the new way of drawing the
3460 * city name), can draw the city growth even without drawing
3461 * the city name. But the old method cannot. */
3463 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", TRUE);
3464 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES", TRUE);
3465 } else {
3466 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", gui_options.draw_city_names);
3467 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES",
3469 }
3470
3471 menu_entry_set_sensitive(map, "SHOW_CITY_BUY_COST",
3473 menu_entry_set_sensitive(map, "SHOW_COASTLINE", !gui_options.draw_terrain);
3474 menu_entry_set_sensitive(map, "SHOW_UNIT_SOLID_BG",
3476 menu_entry_set_sensitive(map, "SHOW_UNIT_SHIELDS",
3478 menu_entry_set_sensitive(map, "SHOW_FOCUS_UNIT", !gui_options.draw_units);
3479}
3480
3481/************************************************************************/
3487static const char *get_tile_change_menu_text(struct tile *ptile,
3488 enum unit_activity activity)
3489{
3490 struct tile *newtile = tile_virtual_new(ptile);
3491 const char *text;
3492
3493 tile_apply_activity(newtile, activity, NULL);
3494 text = tile_get_info_text(newtile, FALSE, 0);
3496
3497 return text;
3498}
3499
3500/************************************************************************/
3504{
3507 GMenu *submenu;
3508 int i, j;
3509 int tgt_kind_group;
3510 struct unit_list *punits;
3511 unsigned num_units;
3512 struct menu_entry_info *info;
3513 struct road_type *proad;
3514 struct extra_type_list *extras;
3515 bool conn_possible;
3516
3518 return;
3519 }
3520
3522
3523 submenu = g_menu_new();
3524
3525 i = 0;
3526 j = 0;
3527
3528 /* Add the new action entries grouped by target kind. */
3531 struct action *paction = action_by_number(act_id);
3532 GSimpleAction *act;
3533 char actname[256];
3534 char name[256];
3535
3536 if (action_id_get_actor_kind(act_id) != AAK_UNIT) {
3537 /* This action isn't performed by a unit. */
3538 continue;
3539 }
3540
3542 /* Wrong group. */
3543 continue;
3544 }
3545
3546 if (!units_can_do_action(punits, act_id, TRUE)) {
3547 continue;
3548 }
3549
3550 /* Create and add the menu item. */
3551 fc_snprintf(actname, sizeof(actname), "action_%d", i);
3554
3555 fc_snprintf(name, sizeof(name), "%s",
3556 action_get_ui_name_mnemonic(act_id, "_"));
3557 fc_snprintf(actname, sizeof(actname), "app.action_%d", i++);
3558
3559 if (action_id_has_complex_target(act_id)) {
3561 char subname[256];
3562
3563#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_) \
3564{ \
3565 fc_snprintf(actname, sizeof(actname), "subtgt_%d", j); \
3566 act = g_simple_action_new(actname, NULL); \
3567 g_action_map_add_action(map, G_ACTION(act)); \
3568 g_object_set_data(G_OBJECT(act), _sub_target_key_, _sub_target_); \
3569 g_signal_connect(act, "activate", G_CALLBACK(unit_goto_and_callback), \
3570 paction); \
3571 fc_snprintf(subname, sizeof(subname), "%s", _sub_target_name_); \
3572 fc_snprintf(actname, sizeof(actname), "app.subtgt_%d", j++); \
3573 menu_item_append_unref(sub_target_menu, \
3574 g_menu_item_new(subname, actname)); \
3575}
3576
3578 case ASTK_BUILDING:
3580 CREATE_SUB_ITEM(pimpr, "end_building",
3583 break;
3584 case ASTK_TECH:
3586 CREATE_SUB_ITEM(ptech, "end_tech",
3589 break;
3590 case ASTK_EXTRA:
3592 extra_type_iterate(pextra) {
3593 if (!actres_creates_extra(paction->result, pextra)
3594 && !actres_removes_extra(paction->result, pextra)) {
3595 /* Not relevant */
3596 continue;
3597 }
3598 CREATE_SUB_ITEM(pextra, "end_extra",
3599 extra_name_translation(pextra));
3601 break;
3602 case ASTK_SPECIALIST:
3605
3606 CREATE_SUB_ITEM(pspec, "end_specialist",
3609 break;
3610 case ASTK_NONE:
3611 /* Should not be here. */
3613 break;
3614 case ASTK_COUNT:
3615 /* Should not exits */
3617 break;
3618 }
3619
3620#undef CREATE_SUB_ITEM
3621
3623 } else {
3624 g_signal_connect(act, "activate",
3627 }
3629 }
3631 g_menu_insert_submenu(unit_menu, 1, _("Go to a_nd..."), G_MENU_MODEL(submenu));
3632
3633 submenu = g_menu_new();
3634
3636 menu_entry_init(submenu, "START_REVOLUTION");
3637 }
3638
3639 i = 0;
3642 char name[256];
3643 char actname[256];
3644 GSimpleAction *act;
3645
3646 fc_snprintf(actname, sizeof(actname), "government_%d", i);
3650 g_signal_connect(act, "activate", G_CALLBACK(government_callback), g);
3651
3652 /* TRANS: %s is a government name */
3653 fc_snprintf(name, sizeof(name), _("%s..."),
3655 fc_snprintf(actname, sizeof(actname), "app.government_%d", i++);
3657 }
3660 g_menu_insert_submenu(gov_menu, 8, _("_Government"), G_MENU_MODEL(submenu));
3661
3662 submenu = g_menu_new();
3663
3665 if (pextra->buildable) {
3666 char actname[256];
3667 GSimpleAction *act;
3668
3669 fc_snprintf(actname, sizeof(actname), "path_%d", i);
3674 pextra));
3676 g_signal_connect(act, "activate", G_CALLBACK(road_callback), pextra);
3677
3678 fc_snprintf(actname, sizeof(actname), "app.path_%d", i++);
3681 }
3683
3686
3687 submenu = g_menu_new();
3688
3690 if (pextra->buildable) {
3691 char actname[256];
3692 GSimpleAction *act;
3693
3694 fc_snprintf(actname, sizeof(actname), "irrig_%d", i);
3699 pextra));
3701 g_signal_connect(act, "activate", G_CALLBACK(irrigation_callback), pextra);
3702
3703 fc_snprintf(actname, sizeof(actname), "app.irrig_%d", i++);
3706 }
3708
3710 g_menu_insert_submenu(work_menu, 3, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3711
3712 submenu = g_menu_new();
3713
3715 if (pextra->buildable) {
3716 char actname[256];
3717 GSimpleAction *act;
3718
3719 fc_snprintf(actname, sizeof(actname), "mine_%d", i);
3724 pextra));
3726 g_signal_connect(act, "activate", G_CALLBACK(mine_callback), pextra);
3727
3728 fc_snprintf(actname, sizeof(actname), "app.mine_%d", i++);
3731 }
3733
3736
3737 submenu = g_menu_new();
3738
3740 char actname[256];
3741 GSimpleAction *act;
3742
3743 fc_snprintf(actname, sizeof(actname), "clean_%d", i);
3748 pextra));
3750 g_signal_connect(act, "activate", G_CALLBACK(clean_menu_callback), pextra);
3751
3752 fc_snprintf(actname, sizeof(actname), "app.clean_%d", i++);
3756
3758 g_menu_insert_submenu(work_menu, 5, _("_Clean Nuisance"),
3760
3761 submenu = g_menu_new();
3762
3764 if (pextra->buildable) {
3765 char actname[256];
3766 GSimpleAction *act;
3767
3768 fc_snprintf(actname, sizeof(actname), "base_%d", i);
3773 pextra));
3775 g_signal_connect(act, "activate", G_CALLBACK(base_callback), pextra);
3776
3777 fc_snprintf(actname, sizeof(actname), "app.base_%d", i++);
3780 }
3782
3785
3787 char acttext[128], irrtext[128], mintext[128], transtext[128];
3788 char cultext[128], plantext[128];
3789 struct terrain *pterrain;
3790
3791 if (!can_client_change_view()) {
3792 return;
3793 }
3794
3796
3797 if (num_units > 0) {
3798 const struct tile *ptile = NULL;
3799 const struct unit_type *ptype = NULL;
3800
3802 fc_assert((ptile == NULL) == (ptype == NULL));
3803
3804 if (ptile || ptype) {
3805 if (unit_tile(punit) != ptile) {
3807 }
3808 if (unit_type_get(punit) != ptype) {
3810 }
3811 } else {
3812 ptile = unit_tile(punit);
3814 }
3816 }
3817
3822 num_units > 0
3824 && !editor_is_active());
3825
3827 menu_entry_set_sensitive(map, "VOLUME_UP", !audio_is_dummy_plugin());
3828 menu_entry_set_sensitive(map, "VOLUME_DOWN", !audio_is_dummy_plugin());
3829
3830 menu_entry_set_sensitive(map, "GAME_SAVE_AS",
3832 menu_entry_set_sensitive(map, "GAME_SAVE",
3834
3835 menu_entry_set_sensitive(map, "SERVER_OPTIONS", client.conn.established);
3836
3837 menu_entry_set_sensitive(map, "LEAVE",
3839
3841 menu_entry_set_sensitive(map, "INFRA_DLG", terrain_control.infrapoints);
3842
3843 menu_entry_set_sensitive(map, "POLICIES", multiplier_count() > 0);
3844 menu_entry_set_sensitive(map, "REPORT_TOP_CITIES", game.info.top_cities_count > 0);
3845 menu_entry_set_sensitive(map, "REPORT_SPACESHIP",
3846 client_player() != NULL && client_player()->spaceship.state != SSHIP_NONE);
3847
3848 info = menu_entry_info_find("EDIT_MODE");
3849 if (info->state != game.info.is_edit_mode) {
3850 info->state = game.info.is_edit_mode;
3854
3855 menu_entry_set_sensitive(map, "EDIT_MODE",
3858 }
3859
3860 info = menu_entry_info_find("TOGGLE_FOG");
3861 if (info->state != game.client.fog_of_war) {
3862 info->state = game.client.fog_of_war;
3863
3867 }
3868
3869 {
3870 char road_buf[500];
3871
3873 if (proad != NULL) {
3874 /* TRANS: Connect with some road type (Road/Railroad) */
3875 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3877 menus_rename(work_menu, 12, "CONNECT_ROAD", road_buf);
3878 }
3879
3881 if (proad != NULL) {
3882 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3884 menus_rename(work_menu, 13, "CONNECT_RAIL", road_buf);
3885 }
3886 }
3887
3888 if (!can_client_issue_orders()) {
3889 return;
3890 }
3891
3892 if (!punits) {
3893 return;
3894 }
3895
3896 /* Remaining part of this function: Update Unit, Work, and Combat menus */
3897
3898 /* Enable the button for adding to a city in all cases, so we
3899 * get an eventual error message from the server if we try. */
3900 menu_entry_set_sensitive(map, "BUILD_CITY",
3905
3906 menu_entry_set_sensitive(map, "DO_ACTION",
3908
3909 menu_entry_set_sensitive(map, "UNIT_TELEPORT",
3911
3912 menu_entry_set_sensitive(map, "BUILD_ROAD",
3916 menu_entry_set_sensitive(map, "BUILD_IRRIGATION",
3918 menu_entry_set_sensitive(map, "BUILD_MINE",
3920 menu_entry_set_sensitive(map, "CULTIVATE",
3922 menu_entry_set_sensitive(map, "PLANT",
3924 menu_entry_set_sensitive(map, "TRANSFORM_TERRAIN",
3926 menu_entry_set_sensitive(map, "FORTIFY",
3929 menu_entry_set_sensitive(map, "PARADROP",
3931 menu_entry_set_sensitive(map, "PILLAGE",
3933 menu_entry_set_sensitive(map, "CLEAN",
3935 menu_entry_set_sensitive(map, "BUILD_FORTRESS",
3937 menu_entry_set_sensitive(map, "BUILD_AIRBASE",
3939 menu_entry_set_sensitive(map, "UNIT_SENTRY",
3941 menu_entry_set_sensitive(map, "UNSENTRY_ALL",
3944 menu_entry_set_sensitive(map, "UNIT_HOMECITY",
3946 menu_entry_set_sensitive(map, "UNIT_UPGRADE", units_can_upgrade(&(wld.map), punits));
3947 menu_entry_set_sensitive(map, "UNIT_CONVERT", units_can_convert(&(wld.map), punits));
3948 menu_entry_set_sensitive(map, "UNIT_DISBAND",
3950 TRUE));
3951
3952 menu_entry_set_sensitive(map, "AUTO_WORKER",
3954 menu_entry_set_sensitive(map, "UNIT_EXPLORE",
3956 menu_entry_set_sensitive(map, "UNIT_BOARD",
3958 menu_entry_set_sensitive(map, "UNIT_DEBOARD",
3960 menu_entry_set_sensitive(map, "UNIT_UNLOAD_TRANSPORTER",
3962
3964 if (proad != NULL) {
3965 struct extra_type *tgt;
3966
3967 tgt = road_extra_get(proad);
3968
3970 } else {
3972 }
3973 menu_entry_set_sensitive(map, "CONNECT_ROAD", conn_possible);
3974
3976 if (proad != NULL) {
3977 struct extra_type *tgt;
3978
3979 tgt = road_extra_get(proad);
3980
3982 } else {
3984 }
3985 menu_entry_set_sensitive(map, "CONNECT_RAIL", conn_possible);
3986
3988 if (proad != NULL) {
3989 struct extra_type *tgt;
3990
3991 tgt = road_extra_get(proad);
3992
3994 } else {
3996 }
3997 menu_entry_set_sensitive(map, "CONNECT_MAGLEV", conn_possible);
3998
4000
4001 if (extra_type_list_size(extras) > 0) {
4002 struct extra_type *tgt;
4003
4004 tgt = extra_type_list_get(extras, 0);
4006 } else {
4008 }
4009 menu_entry_set_sensitive(map, "CONNECT_IRRIGATION", conn_possible);
4010
4011 menu_entry_set_sensitive(map, "TAX_RATES",
4014
4016 menus_rename(work_menu, 0, "BUILD_CITY",
4018 } else {
4019 bool city_on_tile = FALSE;
4020
4021 /* FIXME: This overloading doesn't work well with multiple focus
4022 * units. */
4024 if (tile_city(unit_tile(punit))) {
4026 break;
4027 }
4029
4031 TRUE)) {
4032 menus_rename(work_menu, 0, "BUILD_CITY",
4034 } else {
4035 /* Refresh default order */
4036 menus_rename(work_menu, 0, "BUILD_CITY",
4038 }
4039 }
4040
4042 menus_rename(work_menu, 6, "BUILD_ROAD",
4045 char road_item[500];
4046 struct extra_type *pextra = NULL;
4047
4048 /* FIXME: This overloading doesn't work well with multiple focus
4049 * units. */
4053 if (pextra != NULL) {
4054 break;
4055 }
4057
4058 if (pextra != NULL) {
4059 /* TRANS: Build road of specific type (Road/Railroad) */
4060 snprintf(road_item, sizeof(road_item), _("Build %s"),
4061 extra_name_translation(pextra));
4062 menus_rename(work_menu, 6, "BUILD_ROAD", road_item);
4063 }
4064 } else {
4065 menus_rename(work_menu, 6, "BUILD_ROAD", _("Build _Road"));
4066 }
4067
4068 if (units_all_same_type && num_units > 0) {
4069 struct unit *punit = unit_list_get(punits, 0);
4070 const struct unit_type *to_unittype
4072
4073 if (to_unittype) {
4074 /* TRANS: %s is a unit type. */
4075 fc_snprintf(acttext, sizeof(acttext), _("Upgr_ade to %s"),
4078 unit_type_get(punit))));
4079 } else {
4080 acttext[0] = '\0';
4081 }
4082 } else {
4083 acttext[0] = '\0';
4084 }
4085 if ('\0' != acttext[0]) {
4086 menus_rename(unit_menu, 13, "UNIT_UPGRADE", acttext);
4087 } else {
4088 menus_rename(unit_menu, 13, "UNIT_UPGRADE", _("Upgr_ade"));
4089 }
4090
4091 if (units_can_convert(&(wld.map), punits)) {
4092 if (units_all_same_type && num_units > 0) {
4093 struct unit *punit = unit_list_get(punits, 0);
4094
4095 /* TRANS: %s is a unit type. */
4096 fc_snprintf(acttext, sizeof(acttext), _("C_onvert to %s"),
4098 } else {
4099 acttext[0] = '\0';
4100 }
4101 } else {
4102 menu_entry_set_sensitive(map, "UNIT_CONVERT", FALSE);
4103 acttext[0] = '\0';
4104 }
4105 if ('\0' != acttext[0]) {
4106 menus_rename(unit_menu, 14, "UNIT_CONVERT", acttext);
4107 } else {
4108 menus_rename(unit_menu, 14, "UNIT_CONVERT", _("C_onvert"));
4109 }
4110
4111 if (units_all_same_tile && num_units > 0) {
4112 struct unit *first = unit_list_get(punits, 0);
4113
4114 pterrain = tile_terrain(unit_tile(first));
4115
4117 struct extra_type *pextra = NULL;
4118
4119 /* FIXME: this overloading doesn't work well with multiple focus
4120 * units. */
4124 if (pextra != NULL) {
4125 break;
4126 }
4128
4129 if (pextra != NULL) {
4130 /* TRANS: Build irrigation of specific type */
4131 snprintf(irrtext, sizeof(irrtext), _("Build %s"),
4132 extra_name_translation(pextra));
4133 } else {
4134 sz_strlcpy(irrtext, _("Build _Irrigation"));
4135 }
4136 } else {
4137 sz_strlcpy(irrtext, _("Build _Irrigation"));
4138 }
4139
4140 if (pterrain->cultivate_result != T_NONE) {
4141 fc_snprintf(cultext, sizeof(cultext), _("Change to %s"),
4144 } else {
4145 sz_strlcpy(cultext, _("_Cultivate"));
4146 }
4147
4149 struct extra_type *pextra = NULL;
4150
4151 /* FIXME: this overloading doesn't work well with multiple focus
4152 * units. */
4156 if (pextra != NULL) {
4157 break;
4158 }
4160
4161 if (pextra != NULL) {
4162 /* TRANS: Build mine of specific type */
4163 snprintf(mintext, sizeof(mintext), _("Build %s"),
4164 extra_name_translation(pextra));
4165 } else {
4166 sz_strlcpy(mintext, _("Build _Mine"));
4167 }
4168 } else {
4169 sz_strlcpy(mintext, _("Build _Mine"));
4170 }
4171
4172 if (pterrain->plant_result != T_NONE) {
4173 fc_snprintf(plantext, sizeof(plantext), _("Change to %s"),
4175 } else {
4176 sz_strlcpy(plantext, _("_Plant"));
4177 }
4178
4179 if (pterrain->transform_result != T_NONE
4180 && pterrain->transform_result != pterrain) {
4181 fc_snprintf(transtext, sizeof(transtext), _("Transf_orm to %s"),
4184 } else {
4185 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4186 }
4187 } else {
4188 sz_strlcpy(irrtext, _("Build _Irrigation"));
4189 sz_strlcpy(cultext, _("_Cultivate"));
4190 sz_strlcpy(mintext, _("Build _Mine"));
4191 sz_strlcpy(plantext, _("_Plant"));
4192 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4193 }
4194
4195 menus_rename(work_menu, 7, "BUILD_IRRIGATION", irrtext);
4196 menus_rename(work_menu, 9, "CULTIVATE", cultext);
4197 menus_rename(work_menu, 8, "BUILD_MINE", mintext);
4198 menus_rename(work_menu, 10, "PLANT", plantext);
4199 menus_rename(work_menu, 11, "TRANSFORM_TERRAIN", transtext);
4200
4201 menus_rename(unit_menu, 12, "UNIT_HOMECITY",
4203
4204 menus_rename(combat_menu, 1, "BUILD_FORTRESS",
4205 Q_(terrain_control.gui_type_base0));
4206 menus_rename(combat_menu, 2, "BUILD_AIRBASE",
4207 Q_(terrain_control.gui_type_base1));
4208}
4209
4210/************************************************************************/
4215{
4216 if (!menus_built) {
4217 return;
4218 }
4219}
4220
4221/**********************************************************************/
4225{
4227
4228 if (enable) {
4229 if (main_menubar == NULL) {
4232 /* Ensure the menus are really created before performing any operations
4233 * on them. */
4234 while (g_main_context_pending(NULL)) {
4236 }
4237 }
4238
4241
4242 } else {
4245 }
4246
4247 /* Workaround for gtk bug that (re)setting the menubar after the window has
4248 * been already created is not noticed. */
4249 g_object_notify(G_OBJECT(gtk_settings_get_default()), "gtk-shell-shows-menubar");
4250}
4251
4252/**********************************************************************/
4259
4260/**********************************************************************/
enum action_sub_target_kind action_get_sub_target_kind(const struct action *paction)
Definition actions.c:1140
const char * action_get_ui_name_mnemonic(action_id act_id, const char *mnemonic)
Definition actions.c:1279
#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:811
bool actres_creates_extra(enum action_result result, const struct extra_type *pextra)
Definition actres.c:790
bool audio_is_dummy_plugin(void)
Definition audio.c:717
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:1247
void disconnect_from_server(bool leaving_sound)
Definition clinet.c:306
char * incite_cost
Definition comments.c:77
@ 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:523
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:215
#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:62
struct world wld
Definition game.c:63
const char * government_name_translation(const struct government *pgovern)
Definition government.c:151
bool untargeted_revolution_allowed(void)
Definition government.c:580
bool can_change_to_government(struct player *pplayer, const struct government *gov)
Definition government.c:178
#define governments_iterate(NAME_pgov)
Definition government.h:127
#define governments_iterate_end
Definition government.h:130
void log_output_window(void)
Definition chatline.c:929
void clear_output_window(void)
Definition chatline.c:944
void city_report_dialog_popup(bool raise)
Definition cityrep.c:292
void unit_select_dialog_popup(struct tile *ptile)
Definition dialogs.c:377
void popup_upgrade_dialog(struct unit_list *punits)
Definition dialogs.c:1435
void popup_disband_dialog(struct unit_list *punits)
Definition dialogs.c:1473
void editgui_refresh(void)
Definition editgui.c:1798
void property_editor_popup(struct property_editor *pe, enum editor_object_type objtype)
Definition editprop.c:6292
struct property_editor * editprop_get_property_editor(void)
Definition editprop.c:6245
void property_editor_reload(struct property_editor *pe, enum editor_object_type objtype)
Definition editprop.c:6382
void popup_find_dialog(void)
Definition finddlg.c:58
void popup_multiplier_dialog(void)
Definition gamedlgs.c:383
void popup_rates_dialog(void)
Definition gamedlgs.c:533
void popup_goto_dialog(void)
Definition gotodlg.c:258
void fullscreen_opt_refresh(struct option *poption)
Definition gui_main.c:2431
gboolean map_canvas_focus(void)
Definition gui_main.c:360
GtkWidget * toplevel
Definition gui_main.c:126
void popup_quit_dialog(void)
Definition gui_main.c:2347
#define ACCL_MOD_KEY
Definition gui_main.h:26
#define GUI_GTK_OPTION(optname)
Definition gui_main.h:32
void setup_dialog(GtkWidget *shell, GtkWidget *parent)
Definition gui_stuff.c:287
void popup_help_dialog_string(const char *item)
Definition helpdlg.c:212
void infra_dialog_popup(void)
Definition infradlg.c:85
void luaconsole_dialog_popup(bool raise)
Definition luaconsole.c:126
void center_on_unit(void)
Definition mapctrl.c:496
static void save_mapimg_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:712
static void show_national_borders_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1246
static void show_focus_unit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1482
GtkWidget * setup_menus(GtkWidget *window)
Definition menu.c:2216
static void help_connecting_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:896
static void menus_rename(const char *key, const gchar *new_label)
Definition menu.c:2350
static void help_combat_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1104
static void menu_entry_group_set_sensitive(enum menu_entry_grouping group, gboolean is_sensitive)
Definition menu.c:2318
static void help_ruleset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1048
static void select_single_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1554
static void unit_unload_transporter_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1770
static void help_government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1144
static void report_achievements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:872
static void show_fog_of_war_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1493
static void help_zoc_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1112
static void show_city_productions_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1303
static void toggle_fog_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1524
static void client_lua_script_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:856
static void show_city_names_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1280
static void help_space_race_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1160
static void help_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1056
static void help_playing_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1040
static void plant_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1888
static struct menu_entry_info menu_entries[]
Definition menu.c:274
static void base_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2050
static void help_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1072
static void unit_sentry_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1734
static void center_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2090
static void unit_explore_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1718
static void build_mine_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1880
static void quit_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:788
static void unit_return_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1708
static void show_city_trade_routes_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1326
static void transform_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1960
static void help_wonders_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1136
static void show_terrain_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1337
static void show_city_growth_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1292
static void show_stack_size_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1471
static void multiplier_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2034
static void help_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1128
static void zoom_out_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2106
static void save_game_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:696
static void show_unit_solid_bg_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1449
static void show_coastline_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1348
static void show_city_full_bar_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1268
static void edit_mode_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1201
static void help_chatline_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:912
static void show_paths_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1358
static void connect_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1896
static void help_overview_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1032
static void save_game_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:704
static void help_diplomacy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1152
static void show_units_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1438
static void show_irrigation_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1368
static void show_map_grid_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1235
static void help_improvements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1088
static void find_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:796
static void report_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:820
static void report_demographic_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:864
static void help_worklist_editor_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:920
static void help_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1080
static void leave_local_game_response(GtkWidget *dialog, gint response)
Definition menu.c:729
static void help_language_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:880
static void server_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:672
static void leave_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:744
static void select_same_type_cont_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1578
static void unit_convert_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1795
static void select_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1594
static void show_huts_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1408
static void report_wow_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:828
static void unit_upgrade_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1787
static void help_tech_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1120
static void unit_goto_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1634
static void clean_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2075
static void build_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1811
static void unit_patrol_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1726
void real_menus_init(void)
Definition menu.c:2983
menu_entry_grouping
Definition menu.c:94
@ MGROUP_ALL
Definition menu.c:95
@ MGROUP_PLAYING
Definition menu.c:94
@ MGROUP_PLAYER
Definition menu.c:95
@ MGROUP_SAFE
Definition menu.c:94
@ MGROUP_EDIT
Definition menu.c:94
@ MGROUP_UNIT
Definition menu.c:95
static void rally_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1602
static void help_about_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1184
static void build_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1838
static void local_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:656
static void show_cities_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1428
static void unit_homecity_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1779
static void menu_entry_set_sensitive(const char *key, gboolean is_sensitive)
Definition menu.c:2305
static void show_pollution_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1418
static void save_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:680
static void save_mapimg_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:720
static void worklists_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:804
static void connect_maglev_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1928
static void full_screen_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1504
static void report_top_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:840
static void help_controls_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:904
static void select_same_type_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1586
static void connect_rail_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1912
static void unit_wait_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1618
static const char * get_tile_change_menu_text(struct tile *ptile, enum unit_activity activity)
Definition menu.c:2403
static void build_airbase_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1994
static void report_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2122
static void infra_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1610
static void message_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:664
static void tax_rate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2026
static void help_musicset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1064
static void unit_goto_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1698
static struct menu_entry_info * menu_entry_info_find(const char *key)
Definition menu.c:2276
static void auto_work_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1830
static void government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2042
static void report_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2130
static void report_messages_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:848
static void show_bases_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1388
static void select_same_type_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1570
static void save_options_on_exit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1192
static void volume_up_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:764
static void show_native_tiles_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1257
static void menu_entry_init(GtkBuildable *item)
Definition menu.c:2156
static void show_unit_shields_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1460
static void reload_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:688
static void scenario_properties_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1534
static void clear_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:640
static void unit_deboard_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1760
static void help_policies_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:888
static void unit_done_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1626
static void help_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1168
static void zoom_in_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2098
static void unit_goto_and_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1642
static void show_city_output_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1224
static void show_city_outlines_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1213
static void save_scenario_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1546
static void help_copying_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1176
static void cultivate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1872
static void save_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:648
void real_menus_update(void)
Definition menu.c:2418
static void report_spaceship_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2146
static void select_all_on_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1562
static void show_city_buy_cost_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1315
static void build_fortress_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1976
#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_)
static void view_menu_update_sensitivity(void)
Definition menu.c:2371
static void unit_board_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1750
static void fortify_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1984
static void show_resources_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1398
static void connect_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1944
static void build_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1864
static void report_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2114
static void road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2062
static void unit_disband_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1803
static void help_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1096
static void report_research_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2138
static void map_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:812
static void volume_down_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:776
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:2676
#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:1718
static void irrigation_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2816
static void bg_append_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2966
static void unsentry_all_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2417
static GMenu * combat_menu
Definition menu.c:97
static GMenuItem * create_toggle_menu_item_for_key(const char *key)
Definition menu.c:3000
static void pillage_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2729
void enable_menus(bool enable)
Definition menu.c:4224
static void setup_app_actions(GApplication *fc_app)
Definition menu.c:3051
static GMenu * options_menu
Definition menu.c:91
static void register_bg_actions(GActionMap *map, int bg)
Definition menu.c:3091
const GActionEntry acts[]
Definition menu.c:1074
static void revolution_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2777
static GMenu * view_menu
Definition menu.c:93
static GMenu * work_menu
Definition menu.c:96
@ MGROUP_CHAR
Definition menu.c:88
static void bg_assign_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2956
static void menu_entry_set_sensitive_info(GActionMap *map, struct menu_entry_info *info, gboolean is_enabled)
Definition menu.c:3393
static bool menus_built
Definition menu.c:77
void menus_disable_char_commands(void)
Definition menu.c:4263
static void show_mines_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2014
static GMenu * edit_menu
Definition menu.c:92
void menus_disable_unit_commands(void)
Definition menu.c:4255
static void unit_teleport_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2398
static void paradrop_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2719
const struct menu_entry_option_map meoms[]
Definition menu.c:1794
static GMenu * unit_menu
Definition menu.c:95
static void do_action_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2739
static void bg_select_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2946
static void mine_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2831
static GMenu * main_menubar
Definition menu.c:76
static GMenuItem * create_toggle_menu_item(struct menu_entry_info *info)
Definition menu.c:2977
void menus_set_initial_toggle_values(void)
Definition menu.c:3033
static void clean_menu_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2846
@ VMENU_HUTS
Definition menu.c:1062
@ VMENU_MINES
Definition menu.c:1059
@ VMENU_COASTLINE
Definition menu.c:1056
@ VMENU_UNIT_SOLID_BG
Definition menu.c:1066
@ VMENU_CITY_NAMES
Definition menu.c:1050
@ VMENU_UNITS
Definition menu.c:1065
@ VMENU_CITY_FULL_BAR
Definition menu.c:1049
@ VMENU_CITY_OUTLINES
Definition menu.c:1044
@ VMENU_POLLUTION
Definition menu.c:1063
@ VMENU_FOCUS_UNIT
Definition menu.c:1069
@ VMENU_BASES
Definition menu.c:1060
@ VMENU_MAP_GRID
Definition menu.c:1046
@ VMENU_CITY_BUY_COST
Definition menu.c:1053
@ VMENU_TERRAIN
Definition menu.c:1055
@ VMENU_CITY_GROWTH
Definition menu.c:1051
@ VMENU_PATHS
Definition menu.c:1057
@ VMENU_CITIES
Definition menu.c:1064
@ VMENU_STACK_SIZE
Definition menu.c:1068
@ VMENU_UNIT_SHIELDS
Definition menu.c:1067
@ VMENU_IRRIGATION
Definition menu.c:1058
@ VMENU_NATIVE_TILES
Definition menu.c:1048
@ VMENU_CITY_OUTPUT
Definition menu.c:1045
@ VMENU_RESOURCES
Definition menu.c:1061
@ VMENU_CITY_PRODUCTIONS
Definition menu.c:1052
@ VMENU_CITY_TRADE_ROUTES
Definition menu.c:1054
@ VMENU_FULL_SCREEN
Definition menu.c:1071
@ VMENU_NAT_BORDERS
Definition menu.c:1047
@ VMENU_FOW
Definition menu.c:1070
static void view_menu_item_toggle(void(*cb)(void), bool updt_sensitivity, gpointer data)
Definition menu.c:1835
menu_entry_grouping
Definition menu.c:83
#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:799
const struct option_set * server_optset
Definition options.c:4369
const struct option_set * client_optset
Definition options.c:1331
void options_save(option_save_log_callback log_cb)
Definition options.c:6472
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:482
@ 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 specialist * specialist_by_number(const Specialist_type_id id)
Definition specialist.c:110
Specialist_type_id specialist_number(const struct specialist *sp)
Definition specialist.c:100
const char * specialist_plural_translation(const struct specialist *sp)
Definition specialist.c:166
#define specialist_type_iterate_end
Definition specialist.h:85
#define specialist_type_iterate(sp)
Definition specialist.h:79
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:216
bool draw_specials
Definition options.h:208
bool draw_city_output
Definition options.h:195
bool draw_city_names
Definition options.h:197
bool draw_city_productions
Definition options.h:199
bool draw_mines
Definition options.h:206
bool draw_borders
Definition options.h:215
bool draw_fortress_airbase
Definition options.h:207
bool draw_city_buycost
Definition options.h:200
bool draw_unit_stack_size
Definition options.h:219
bool draw_irrigation
Definition options.h:205
bool draw_terrain
Definition options.h:202
bool draw_units
Definition options.h:212
bool draw_fog_of_war
Definition options.h:214
bool draw_city_trade_routes
Definition options.h:201
bool draw_unit_shields
Definition options.h:218
bool draw_cities
Definition options.h:211
bool save_options_on_exit
Definition options.h:125
int sound_effects_volume
Definition options.h:191
bool draw_map_grid
Definition options.h:196
bool draw_city_growth
Definition options.h:198
bool draw_focus_unit
Definition options.h:213
bool draw_paths
Definition options.h:204
bool draw_city_outlines
Definition options.h:194
bool draw_coastline
Definition options.h:203
bool draw_full_citybar
Definition options.h:217
bool draw_pollution
Definition options.h:210
bool solid_color_behind_units
Definition options.h:150
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:100
const char * accl
Definition menu.c:103
const char * key
Definition menu.c:101
bool state
Definition menu.c:106
enum menu_entry_grouping grouping
Definition menu.c:106
void(* toggle)(GSimpleAction *act, GVariant *value, gpointer data)
Definition menu.c:105
GCallback cb
Definition menu.c:105
const char * name
Definition menu.c:102
const char * action
Definition menu.c:102
Definition menu.c:1788
bool * option
Definition menu.c:1790
const char * menu_entry
Definition menu.c:1789
int menu_pos
Definition menu.c:1791
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:305
Tech_type_id advance_number(const struct advance *padvance)
Definition tech.c:100
#define advance_iterate(_p)
Definition tech.h:273
#define advance_iterate_end
Definition tech.h:274
#define T_NONE
Definition terrain.h:61
void tile_virtual_destroy(struct tile *vtile)
Definition tile.c:1036
bool tile_apply_activity(struct tile *ptile, Activity_type_id act, struct extra_type *tgt)
Definition tile.c:682
struct tile * tile_virtual_new(const struct tile *ptile)
Definition tile.c:982
const char * tile_get_info_text(const struct tile *ptile, bool include_nuisances, int linebreaks)
Definition tile.c:772
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:303
bool unit_can_add_or_build_city(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:491
bool can_unit_change_homecity(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:524
bool can_unit_do_autoworker(const struct unit *punit)
Definition unit.c:647
bool can_unit_teleport(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:847
bool can_unit_paradrop(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:863
bool unit_can_help_build_wonder_here(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:277
#define unit_tile(_pu)
Definition unit.h:408
@ ORDER_PERFORM_ACTION
Definition unit.h:48
#define unit_owner(_pu)
Definition unit.h:407
#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:126
const struct unit_type * can_upgrade_unittype(const struct player *pplayer, const struct unit_type *punittype)
Definition unittype.c:1729
const char * utype_name_translation(const struct unit_type *punittype)
Definition unittype.c:1586
bool utype_can_do_action(const struct unit_type *putype, const action_id act_id)
Definition unittype.c:396
void zoom_step_down(void)
Definition zoom.c:130
void zoom_step_up(void)
Definition zoom.c:106