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-5.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/************************************************************************/
1332 gpointer data)
1333{
1335 result, NULL);
1336
1337 if (button == 0) {
1338 /* It might be killed already */
1339 if (client.conn.used) {
1340 /* It will also kill the server */
1342 }
1343 }
1344}
1345
1346/************************************************************************/
1350 GVariant *parameter,
1351 gpointer data)
1352{
1353 if (is_server_running()) {
1354 const char *buttons[] = { _("Leave"), _("Cancel"), NULL };
1355 GtkAlertDialog *dialog
1356 = gtk_alert_dialog_new(_("Leaving a local game will end it!"));
1357
1363 } else {
1365 }
1366}
1367
1368/************************************************************************/
1372 GVariant *parameter,
1373 gpointer data)
1374{
1375 struct option *poption = optset_option_by_name(client_optset, "sound_effects_volume");
1376
1380}
1381
1382/************************************************************************/
1386 GVariant *parameter,
1387 gpointer data)
1388{
1389 struct option *poption = optset_option_by_name(client_optset, "sound_effects_volume");
1390
1394}
1395
1396/************************************************************************/
1400 GVariant *parameter,
1401 gpointer data)
1402{
1404}
1405
1406/************************************************************************/
1410 GVariant *parameter,
1411 gpointer data)
1412{
1414}
1415
1416/************************************************************************/
1420 GVariant *parameter,
1421 gpointer data)
1422{
1424}
1425
1426/************************************************************************/
1430 GVariant *parameter, gpointer data)
1431{
1433}
1434
1435/************************************************************************/
1439 GVariant *parameter,
1440 gpointer data)
1441{
1443}
1444
1445/************************************************************************/
1458
1459/************************************************************************/
1463 GVariant *parameter,
1464 gpointer data)
1465{
1467}
1468
1469/************************************************************************/
1473 GVariant *parameter,
1474 gpointer data)
1475{
1477}
1478
1479/************************************************************************/
1483 GVariant *parameter,
1484 gpointer data)
1485{
1487}
1488
1489/************************************************************************/
1498
1499/************************************************************************/
1508
1509/************************************************************************/
1518
1519/************************************************************************/
1523 GVariant *parameter,
1524 gpointer data)
1525{
1527}
1528
1529/************************************************************************/
1538
1539/************************************************************************/
1543 GVariant *parameter,
1544 gpointer data)
1545{
1547}
1548
1549/************************************************************************/
1553 GVariant *parameter,
1554 gpointer data)
1555{
1557}
1558
1559/************************************************************************/
1563 GVariant *parameter,
1564 gpointer data)
1565{
1567}
1568
1569/************************************************************************/
1578
1579/************************************************************************/
1583 GVariant *parameter,
1584 gpointer data)
1585{
1587}
1588
1589/************************************************************************/
1593 GVariant *parameter,
1594 gpointer data)
1595{
1597}
1598
1599/************************************************************************/
1603 GVariant *parameter,
1604 gpointer data)
1605{
1607}
1608
1609/************************************************************************/
1613 GVariant *parameter,
1614 gpointer data)
1615{
1617}
1618
1619/************************************************************************/
1628
1629/************************************************************************/
1638
1639/************************************************************************/
1643 GVariant *parameter,
1644 gpointer data)
1645{
1647}
1648
1649/************************************************************************/
1658
1659/************************************************************************/
1663 GVariant *parameter,
1664 gpointer data)
1665{
1667}
1668
1669/************************************************************************/
1673 GVariant *parameter,
1674 gpointer data)
1675{
1677}
1678
1679/************************************************************************/
1688
1689/************************************************************************/
1693 GVariant *parameter,
1694 gpointer data)
1695{
1697}
1698
1699/************************************************************************/
1708
1709/************************************************************************/
1718
1719/************************************************************************/
1723 GVariant *parameter,
1724 gpointer data)
1725{
1727}
1728
1729/************************************************************************/
1738
1739/************************************************************************/
1748
1749/************************************************************************/
1758
1759/************************************************************************/
1763 GVariant *parameter,
1764 gpointer data)
1765{
1767}
1768
1769/************************************************************************/
1773 GVariant *parameter,
1774 gpointer data)
1775{
1777}
1778
1779/************************************************************************/
1783 GVariant *parameter,
1784 gpointer data)
1785{
1787
1788 /* Unreachable techs in reqtree on/off */
1790}
1791
1792struct menu_entry_option_map {
1793 const char *menu_entry;
1794 bool *option;
1795 int menu_pos;
1796};
1797
1799 { "SAVE_OPTIONS_ON_EXIT", &gui_options.save_options_on_exit, -1 },
1800 { "FULL_SCREEN", &(GUI_GTK_OPTION(fullscreen)), -1 },
1801 { "EDIT_MODE", &game.info.is_edit_mode, -1 },
1802 { "TOGGLE_FOG", &game.client.fog_of_war, -1 },
1803 { "SHOW_CITY_OUTLINES", &gui_options.draw_city_outlines, VMENU_CITY_OUTLINES },
1804 { "SHOW_CITY_OUTPUT", &gui_options.draw_city_output, VMENU_CITY_OUTPUT },
1805 { "SHOW_MAP_GRID", &gui_options.draw_map_grid, VMENU_MAP_GRID },
1806 { "SHOW_NAT_BORDERS", &gui_options.draw_borders, VMENU_NAT_BORDERS },
1807 { "SHOW_NATIVE_TILES", &gui_options.draw_native, VMENU_NATIVE_TILES },
1808 { "SHOW_CITY_FULL_BAR", &gui_options.draw_full_citybar, VMENU_CITY_FULL_BAR },
1809 { "SHOW_CITY_NAMES", &gui_options.draw_city_names, VMENU_CITY_NAMES },
1810 { "SHOW_CITY_GROWTH", &gui_options.draw_city_growth, VMENU_CITY_GROWTH },
1811 { "SHOW_CITY_PRODUCTIONS", &gui_options.draw_city_productions,
1813 { "SHOW_CITY_BUY_COST", &gui_options.draw_city_buycost, VMENU_CITY_BUY_COST },
1814 { "SHOW_CITY_TRADE_ROUTES", &gui_options.draw_city_trade_routes,
1816 { "SHOW_TERRAIN", &gui_options.draw_terrain, VMENU_TERRAIN },
1817 { "SHOW_COASTLINE", &gui_options.draw_coastline, VMENU_COASTLINE },
1818 { "SHOW_PATHS", &gui_options.draw_paths, VMENU_PATHS },
1819 { "SHOW_IRRIGATION", &gui_options.draw_irrigation, VMENU_IRRIGATION },
1820 { "SHOW_MINES", &gui_options.draw_mines, VMENU_MINES },
1821 { "SHOW_BASES", &gui_options.draw_fortress_airbase, VMENU_BASES },
1822 { "SHOW_RESOURCES", &gui_options.draw_specials, VMENU_RESOURCES },
1823 { "SHOW_HUTS", &gui_options.draw_huts, VMENU_HUTS },
1824 { "SHOW_POLLUTION", &gui_options.draw_pollution, VMENU_POLLUTION },
1825 { "SHOW_CITIES", &gui_options.draw_cities, VMENU_CITIES },
1826 { "SHOW_UNITS", &gui_options.draw_units, VMENU_UNITS },
1827 { "SHOW_UNIT_SOLID_BG", &gui_options.solid_color_behind_units, VMENU_UNIT_SOLID_BG },
1828 { "SHOW_UNIT_SHIELDS", &gui_options.draw_unit_shields , VMENU_UNIT_SHIELDS },
1829 { "SHOW_STACK_SIZE", &gui_options.draw_unit_stack_size, VMENU_STACK_SIZE },
1830 { "SHOW_FOCUS_UNIT", &gui_options.draw_focus_unit, VMENU_FOCUS_UNIT },
1831 { "SHOW_FOG_OF_WAR", &gui_options.draw_fog_of_war, VMENU_FOW },
1832
1833 { NULL, NULL, -1 }
1834};
1835
1836/************************************************************************/
1839static void view_menu_item_toggle(void (*cb)(void),
1840 bool updt_sensitivity,
1841 gpointer data)
1842{
1843 int i;
1844 struct menu_entry_info *info = (struct menu_entry_info *)data;
1845
1846 info->state ^= 1;
1847
1848 cb();
1849
1850 if (updt_sensitivity) {
1852 }
1853
1854 /* TODO: Make the information available directly from menu_entry_info,
1855 * se we don't need to do this search for it */
1856 for (i = 0; meoms[i].menu_entry != NULL; i++) {
1857 if (!strcmp(meoms[i].menu_entry, info->key)) {
1858 g_menu_remove(view_menu, meoms[i].menu_pos);
1861 return;
1862 }
1863 }
1864}
1865
1866/************************************************************************/
1875
1876/************************************************************************/
1880 GVariant *parameter,
1881 gpointer data)
1882{
1884}
1885
1886/************************************************************************/
1894
1895/************************************************************************/
1904
1905/************************************************************************/
1909 GVariant *parameter,
1910 gpointer data)
1911{
1913}
1914
1915/************************************************************************/
1924
1925/************************************************************************/
1929 GVariant *parameter,
1930 gpointer data)
1931{
1933}
1934
1935/************************************************************************/
1939 GVariant *parameter,
1940 gpointer data)
1941{
1943}
1944
1945/************************************************************************/
1954
1955/************************************************************************/
1964
1965/************************************************************************/
1974
1975/************************************************************************/
1979 GVariant *parameter,
1980 gpointer data)
1981{
1983}
1984
1985/************************************************************************/
1989 GVariant *parameter,
1990 gpointer data)
1991{
1993}
1994
1995/************************************************************************/
1999 GVariant *parameter,
2000 gpointer data)
2001{
2003}
2004
2005/************************************************************************/
2009 GVariant *parameter,
2010 gpointer data)
2011{
2013}
2014
2015/************************************************************************/
2019 GVariant *parameter,
2020 gpointer data)
2021{
2023}
2024
2025/************************************************************************/
2029 gpointer data)
2030{
2032}
2033
2034/************************************************************************/
2038 GVariant *parameter,
2039 gpointer data)
2040{
2042}
2043
2044/************************************************************************/
2048 gpointer data)
2049{
2051}
2052
2053/************************************************************************/
2061
2062/************************************************************************/
2066 gpointer data)
2067{
2069}
2070
2071/************************************************************************/
2075 gpointer data)
2076{
2078}
2079
2080/************************************************************************/
2089
2090/************************************************************************/
2099
2100/************************************************************************/
2109
2110/************************************************************************/
2114 GVariant *parameter,
2115 gpointer data)
2116{
2118}
2119
2120/************************************************************************/
2128
2129/************************************************************************/
2133 gpointer data)
2134{
2135 struct menu_entry_info *info = (struct menu_entry_info *)data;
2136
2137 info->state ^= 1;
2139
2141
2143
2146}
2147
2148/************************************************************************/
2152 GVariant *parameter,
2153 gpointer data)
2154{
2155 struct menu_entry_info *info = (struct menu_entry_info *)data;
2156
2157 info->state ^= 1;
2158
2160
2162
2165}
2166
2167/************************************************************************/
2180
2181/************************************************************************/
2185 gpointer data)
2186{
2188}
2189
2190/************************************************************************/
2198
2199/************************************************************************/
2208
2209/************************************************************************/
2218
2219/************************************************************************/
2228
2229/************************************************************************/
2238
2239/************************************************************************/
2243 GVariant *parameter,
2244 gpointer data)
2245{
2247}
2248
2249/************************************************************************/
2253 GVariant *parameter,
2254 gpointer data)
2255{
2257}
2258
2259/************************************************************************/
2263 GVariant *parameter,
2264 gpointer data)
2265{
2267}
2268
2269/************************************************************************/
2273 GVariant *parameter,
2274 gpointer data)
2275{
2276 key_unit_wait();
2277}
2278
2279/************************************************************************/
2283 GVariant *parameter,
2284 gpointer data)
2285{
2286 key_unit_done();
2287}
2288
2289/************************************************************************/
2293 gpointer data)
2294{
2295 key_unit_goto();
2296}
2297
2298/************************************************************************/
2302 GVariant *parameter,
2303 gpointer data)
2304{
2305 int sub_target = NO_TARGET;
2306 struct action *paction = (struct action *)data;
2307
2309
2311 case ASTK_BUILDING:
2312 {
2314 "end_building");
2316 sub_target = improvement_number(pbuilding);
2317 }
2318 break;
2319 case ASTK_TECH:
2320 {
2322 "end_tech");
2324 sub_target = advance_number(ptech);
2325 }
2326 break;
2327 case ASTK_EXTRA:
2329 {
2330 struct extra_type *pextra = g_object_get_data(G_OBJECT(action),
2331 "end_extra");
2332 fc_assert_ret(pextra != NULL);
2333 sub_target = extra_number(pextra);
2334 }
2335 break;
2336 case ASTK_SPECIALIST:
2337 {
2339 "end_specialist");
2340 fc_assert_ret(nullptr != pspec);
2341 sub_target = specialist_number(pspec);
2342 }
2343 break;
2344 case ASTK_NONE:
2345 sub_target = NO_TARGET;
2346 break;
2347 case ASTK_COUNT:
2348 /* Should not exits */
2350 break;
2351 }
2352
2354}
2355
2356/************************************************************************/
2360 GVariant *parameter,
2361 gpointer data)
2362{
2363 if (get_num_units_in_focus() > 0) {
2365 }
2366}
2367
2368/************************************************************************/
2379
2380/************************************************************************/
2384 GVariant *parameter,
2385 gpointer data)
2386{
2388}
2389
2390/************************************************************************/
2394 gpointer data)
2395{
2397}
2398
2399/************************************************************************/
2403 gpointer data)
2404{
2406}
2407
2408/************************************************************************/
2412 GVariant *parameter,
2413 gpointer data)
2414{
2416}
2417
2418/************************************************************************/
2422 GVariant *parameter,
2423 gpointer data)
2424{
2426}
2427
2428/************************************************************************/
2439
2440/************************************************************************/
2450
2451/************************************************************************/
2461
2462/************************************************************************/
2466 GVariant *parameter,
2467 gpointer data)
2468{
2470}
2471
2472/************************************************************************/
2476 GVariant *parameter,
2477 gpointer data)
2478{
2480}
2481
2482/************************************************************************/
2486 GVariant *parameter,
2487 gpointer data)
2488{
2490}
2491
2492/************************************************************************/
2496 GVariant *parameter,
2497 gpointer data)
2498{
2500}
2501
2502/************************************************************************/
2506 GVariant *parameter,
2507 gpointer data)
2508{
2510}
2511
2512/************************************************************************/
2516 GVariant *parameter,
2517 gpointer data)
2518{
2520 /* FIXME: this can provide different items for different units...
2521 * not good! */
2522 /* Enable the button for adding to a city in all cases, so we
2523 get an eventual error message from the server if we try. */
2529 }
2531}
2532
2533/************************************************************************/
2537 GVariant *parameter,
2538 gpointer data)
2539{
2541}
2542
2543/************************************************************************/
2547 GVariant *parameter,
2548 gpointer data)
2549{
2551 /* FIXME: this can provide different actions for different units...
2552 * not good! */
2554 EC_ROAD,
2556 punit);
2557 bool building_road = FALSE;
2558
2559 if (tgt != NULL
2563 }
2564
2567 }
2569}
2570
2571/************************************************************************/
2575 GVariant *parameter,
2576 gpointer data)
2577{
2579}
2580
2581/************************************************************************/
2585 GVariant *parameter,
2586 gpointer data)
2587{
2589}
2590
2591/************************************************************************/
2595 GVariant *parameter,
2596 gpointer data)
2597{
2599}
2600
2601/************************************************************************/
2605 GVariant *parameter,
2606 gpointer data)
2607{
2608 key_unit_mine();
2609}
2610
2611/************************************************************************/
2615 GVariant *parameter,
2616 gpointer data)
2617{
2619
2620 if (proad != NULL) {
2621 struct extra_type *tgt;
2622
2623 tgt = road_extra_get(proad);
2624
2626 }
2627}
2628
2629/************************************************************************/
2633 GVariant *parameter,
2634 gpointer data)
2635{
2637
2638 if (prail != NULL) {
2639 struct extra_type *tgt;
2640
2641 tgt = road_extra_get(prail);
2642
2644 }
2645}
2646
2647/************************************************************************/
2651 GVariant *parameter,
2652 gpointer data)
2653{
2655
2656 if (pmaglev != NULL) {
2657 struct extra_type *tgt;
2658
2659 tgt = road_extra_get(pmaglev);
2660
2662 }
2663}
2664
2665/************************************************************************/
2669 GVariant *parameter,
2670 gpointer data)
2671{
2673
2674 if (extra_type_list_size(extras) > 0) {
2675 struct extra_type *pextra;
2676
2678
2680 }
2681}
2682
2683/************************************************************************/
2687 GVariant *parameter,
2688 gpointer data)
2689{
2691}
2692
2693/************************************************************************/
2697 gpointer data)
2698{
2700}
2701
2702/************************************************************************/
2706 gpointer data)
2707{
2709}
2710
2711/************************************************************************/
2715 gpointer data)
2716{
2718}
2719
2720/************************************************************************/
2724 GVariant *parameter,
2725 gpointer data)
2726{
2728}
2729
2730/************************************************************************/
2734 GVariant *parameter,
2735 gpointer data)
2736{
2738}
2739
2740/************************************************************************/
2744 GVariant *parameter,
2745 gpointer data)
2746{
2748}
2749
2750/************************************************************************/
2754 gpointer data)
2755{
2757}
2758
2759/************************************************************************/
2763 gpointer data)
2764{
2766}
2767
2768/************************************************************************/
2772 GVariant *parameter,
2773 gpointer data)
2774{
2776}
2777
2778/************************************************************************/
2782 GVariant *parameter,
2783 gpointer data)
2784{
2786}
2787
2788/************************************************************************/
2792 GVariant *parameter,
2793 gpointer data)
2794{
2795 struct extra_type *pextra = data;
2796
2800}
2801
2802/************************************************************************/
2806 GVariant *parameter,
2807 gpointer data)
2808{
2809 struct extra_type *pextra = data;
2810
2813 pextra);
2815}
2816
2817/************************************************************************/
2821 GVariant *parameter,
2822 gpointer data)
2823{
2824 struct extra_type *pextra = data;
2825
2828 pextra);
2830}
2831
2832/************************************************************************/
2836 GVariant *parameter,
2837 gpointer data)
2838{
2839 struct extra_type *pextra = data;
2840
2843 pextra);
2845}
2846
2847/************************************************************************/
2851 GVariant *parameter,
2852 gpointer data)
2853{
2854 struct extra_type *pextra = data;
2855
2859 pextra);
2860 }
2862}
2863
2864/************************************************************************/
2868 GVariant *parameter,
2869 gpointer data)
2870{
2872}
2873
2874/************************************************************************/
2878 GVariant *parameter,
2879 gpointer data)
2880{
2881 zoom_step_up();
2882}
2883
2884/************************************************************************/
2888 GVariant *parameter,
2889 gpointer data)
2890{
2892}
2893
2894/************************************************************************/
2898 GVariant *parameter,
2899 gpointer data)
2900{
2902}
2903
2904/************************************************************************/
2908 GVariant *parameter,
2909 gpointer data)
2910
2911{
2913}
2914
2915/************************************************************************/
2924
2925/************************************************************************/
2934
2935/************************************************************************/
2939 GVariant *parameter,
2940 gpointer data)
2941{
2942 if (NULL != client.conn.playing) {
2944 }
2945}
2946
2947/************************************************************************/
2956
2957/************************************************************************/
2966
2967/************************************************************************/
2976
2977/************************************************************************/
2982{
2983 char actname[150];
2984 GMenuItem *item;
2985
2986 fc_snprintf(actname, sizeof(actname), "app.%s(%s)",
2987 info->action, info->state ? "true" : "false");
2988 item = g_menu_item_new(Q_(info->name), NULL);
2990
2991 if (info->accl != NULL) {
2992 const char *accls[2] = { info->accl, NULL };
2993
2995 }
2996
2997 return item;
2998}
2999
3000/************************************************************************/
3005{
3007}
3008
3009/************************************************************************/
3012static void menu_entry_init(GMenu *sub, const char *key)
3013{
3015
3016 if (info != NULL) {
3017 GMenuItem *item;
3018
3019 if (info->toggle != NULL) {
3021 } else {
3022 char actname[150];
3023
3024 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
3025 item = g_menu_item_new(Q_(info->name), actname);
3026 }
3027
3028 /* Should be menu_item_append_unref()? */
3031 }
3032}
3033
3034/************************************************************************/
3038{
3039 int i;
3040
3041 for (i = 0; meoms[i].menu_entry != NULL; i++) {
3042 struct menu_entry_info *info = menu_entry_info_find(meoms[i].menu_entry);
3043
3044 if (meoms[i].option != NULL) {
3045 info->state = *meoms[i].option;
3046 } else {
3047 info->state = FALSE; /* Best guess we have */
3048 }
3049 }
3050}
3051
3052/************************************************************************/
3056{
3057 int i;
3059
3060 /* Simple entries */
3063
3064 /* Toggles */
3065 for (i = 0; menu_entries[i].key != NULL; i++) {
3066 if (menu_entries[i].toggle != NULL) {
3067 GSimpleAction *act;
3068 GVariant *var = g_variant_new("b", TRUE);
3069
3072 g_signal_connect(act, "change-state",
3074 (gpointer)&(menu_entries[i]));
3075 }
3076 }
3077
3079
3080 for (i = 0; menu_entries[i].key != NULL; i++) {
3081 if (menu_entries[i].accl != NULL && menu_entries[i].toggle == NULL) {
3082 const char *accls[2] = { menu_entries[i].accl, NULL };
3083 char actname[150];
3084
3085 fc_snprintf(actname, sizeof(actname), "app.%s", menu_entries[i].action);
3086
3088 }
3089 }
3090}
3091
3092/************************************************************************/
3095static void register_bg_actions(GActionMap *map, int bg)
3096{
3097 GSimpleAction *act;
3098 char actname[256];
3099
3100 fc_snprintf(actname, sizeof(actname), "bg_select_%d", bg);
3103 g_signal_connect(act, "activate",
3105
3106 fc_snprintf(actname, sizeof(actname), "bg_assign_%d", bg);
3109 g_signal_connect(act, "activate",
3111
3112 fc_snprintf(actname, sizeof(actname), "bg_append_%d", bg);
3115 g_signal_connect(act, "activate",
3117}
3118
3119/************************************************************************/
3123{
3124 GMenu *menubar;
3125 GMenu *topmenu;
3126 GMenu *submenu;
3127 int i;
3128
3130
3131 menubar = g_menu_new();
3132
3133 topmenu = g_menu_new();
3134 menu_entry_init(topmenu, "CLEAR_CHAT_LOGS");
3135 menu_entry_init(topmenu, "SAVE_CHAT_LOGS");
3136
3138 menu_entry_init(options_menu, "LOCAL_OPTIONS");
3139 menu_entry_init(options_menu, "MESSAGE_OPTIONS");
3140 menu_entry_init(options_menu, "SERVER_OPTIONS");
3141 menu_entry_init(options_menu, "SAVE_OPTIONS");
3142 menu_entry_init(options_menu, "SAVE_OPTIONS_ON_EXIT");
3143
3145
3146#ifdef FREECIV_DEBUG
3147 menu_entry_init(topmenu, "RELOAD_TILESET");
3148#endif /* FREECIV_DEBUG */
3149
3150 menu_entry_init(topmenu, "GAME_SAVE");
3151 menu_entry_init(topmenu, "GAME_SAVE_AS");
3152 menu_entry_init(topmenu, "MAPIMG_SAVE");
3153 menu_entry_init(topmenu, "MAPIMG_SAVE_AS");
3154 menu_entry_init(topmenu, "VOLUME_UP");
3155 menu_entry_init(topmenu, "VOLUME_DOWN");
3156 menu_entry_init(topmenu, "LEAVE");
3157 menu_entry_init(topmenu, "QUIT");
3158
3160
3162
3163 menu_entry_init(edit_menu, "FIND_CITY");
3164 menu_entry_init(edit_menu, "WORKLISTS");
3165 menu_entry_init(edit_menu, "RALLY_DLG");
3166 menu_entry_init(edit_menu, "INFRA_DLG");
3167 menu_entry_init(edit_menu, "EDIT_MODE");
3168 menu_entry_init(edit_menu, "TOGGLE_FOG");
3169 menu_entry_init(edit_menu, "SCENARIO_PROPERTIES");
3170 menu_entry_init(edit_menu, "SCENARIO_SAVE");
3171 menu_entry_init(edit_menu, "CLIENT_LUA_SCRIPT");
3172
3174
3176
3177 menu_entry_init(view_menu, "SHOW_CITY_OUTLINES");
3178 menu_entry_init(view_menu, "SHOW_CITY_OUTPUT");
3179 menu_entry_init(view_menu, "SHOW_MAP_GRID");
3180 menu_entry_init(view_menu, "SHOW_NAT_BORDERS");
3181 menu_entry_init(view_menu, "SHOW_NATIVE_TILES");
3182 menu_entry_init(view_menu, "SHOW_CITY_FULL_BAR");
3183 menu_entry_init(view_menu, "SHOW_CITY_NAMES");
3184 menu_entry_init(view_menu, "SHOW_CITY_GROWTH");
3185 menu_entry_init(view_menu, "SHOW_CITY_PRODUCTIONS");
3186 menu_entry_init(view_menu, "SHOW_CITY_BUY_COST");
3187 menu_entry_init(view_menu, "SHOW_CITY_TRADE_ROUTES");
3188 menu_entry_init(view_menu, "SHOW_TERRAIN");
3189 menu_entry_init(view_menu, "SHOW_COASTLINE");
3190 menu_entry_init(view_menu, "SHOW_PATHS");
3191 menu_entry_init(view_menu, "SHOW_IRRIGATION");
3192 menu_entry_init(view_menu, "SHOW_MINES");
3193 menu_entry_init(view_menu, "SHOW_BASES");
3194 menu_entry_init(view_menu, "SHOW_RESOURCES");
3195 menu_entry_init(view_menu, "SHOW_HUTS");
3196 menu_entry_init(view_menu, "SHOW_POLLUTION");
3197 menu_entry_init(view_menu, "SHOW_CITIES");
3198 menu_entry_init(view_menu, "SHOW_UNITS");
3199 menu_entry_init(view_menu, "SHOW_UNIT_SOLID_BG");
3200 menu_entry_init(view_menu, "SHOW_UNIT_SHIELDS");
3201 menu_entry_init(view_menu, "SHOW_STACK_SIZE");
3202 menu_entry_init(view_menu, "SHOW_FOCUS_UNIT");
3203
3204 menu_entry_init(view_menu, "SHOW_FOG_OF_WAR");
3205
3206 menu_entry_init(view_menu, "FULL_SCREEN");
3207 menu_entry_init(view_menu, "CENTER_VIEW");
3208 menu_entry_init(view_menu, "ZOOM_IN");
3209 menu_entry_init(view_menu, "ZOOM_OUT");
3210
3212
3213 topmenu = g_menu_new();
3214
3215 menu_entry_init(topmenu, "SELECT_SINGLE");
3216 menu_entry_init(topmenu, "SELECT_ALL_ON_TILE");
3217 menu_entry_init(topmenu, "SELECT_SAME_TYPE_TILE");
3218 menu_entry_init(topmenu, "SELECT_SAME_TYPE_CONT");
3219 menu_entry_init(topmenu, "SELECT_SAME_TYPE");
3220 menu_entry_init(topmenu, "SELECT_DLG");
3221
3223
3225
3226 menu_entry_init(unit_menu, "UNIT_GOTO");
3227
3228 /* Placeholder submenu (so that menu update has something to replace) */
3229 submenu = g_menu_new();
3231
3232 menu_entry_init(unit_menu, "UNIT_GOTO_CITY");
3233 menu_entry_init(unit_menu, "UNIT_RETURN");
3234 menu_entry_init(unit_menu, "UNIT_EXPLORE");
3235 menu_entry_init(unit_menu, "UNIT_PATROL");
3236 menu_entry_init(unit_menu, "UNIT_TELEPORT");
3237 menu_entry_init(unit_menu, "UNIT_SENTRY");
3238 menu_entry_init(unit_menu, "UNSENTRY_ALL");
3239 menu_entry_init(unit_menu, "UNIT_BOARD");
3240 menu_entry_init(unit_menu, "UNIT_DEBOARD");
3241 menu_entry_init(unit_menu, "UNIT_UNLOAD_TRANSPORTER");
3242 menu_entry_init(unit_menu, "UNIT_HOMECITY");
3243 menu_entry_init(unit_menu, "UNIT_UPGRADE");
3244 menu_entry_init(unit_menu, "UNIT_CONVERT");
3245 menu_entry_init(unit_menu, "UNIT_DISBAND");
3246 menu_entry_init(unit_menu, "DO_ACTION");
3247 menu_entry_init(unit_menu, "UNIT_WAIT");
3248 menu_entry_init(unit_menu, "UNIT_DONE");
3249
3251
3253 menu_entry_init(work_menu, "BUILD_CITY");
3254 menu_entry_init(work_menu, "AUTO_WORKER");
3255
3256 /* Placeholder submenus (so that menu update has something to replace) */
3257 submenu = g_menu_new();
3259 submenu = g_menu_new();
3260 submenu_append_unref(work_menu, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3261 submenu = g_menu_new();
3263 submenu = g_menu_new();
3264 submenu_append_unref(work_menu, _("_Clean Nuisance"), G_MENU_MODEL(submenu));
3265
3266 menu_entry_init(work_menu, "BUILD_ROAD");
3267 menu_entry_init(work_menu, "BUILD_IRRIGATION");
3268 menu_entry_init(work_menu, "BUILD_MINE");
3269 menu_entry_init(work_menu, "CULTIVATE");
3270 menu_entry_init(work_menu, "PLANT");
3271 menu_entry_init(work_menu, "TRANSFORM_TERRAIN");
3272 menu_entry_init(work_menu, "CONNECT_ROAD");
3273 menu_entry_init(work_menu, "CONNECT_RAIL");
3274 menu_entry_init(work_menu, "CONNECT_MAGLEV");
3275 menu_entry_init(work_menu, "CONNECT_IRRIGATION");
3276 menu_entry_init(work_menu, "CLEAN");
3277
3279
3281 menu_entry_init(combat_menu, "FORTIFY");
3282 menu_entry_init(combat_menu, "BUILD_FORTRESS");
3283 menu_entry_init(combat_menu, "BUILD_AIRBASE");
3284
3285 /* Placeholder submenu (so that menu update has something to replace) */
3286 submenu = g_menu_new();
3288
3290
3291 menu_entry_init(combat_menu, "PARADROP");
3292 menu_entry_init(combat_menu, "PILLAGE");
3293
3294 gov_menu = g_menu_new();
3295
3296 menu_entry_init(gov_menu, "MAP_VIEW");
3297 menu_entry_init(gov_menu, "REPORT_UNITS");
3298 menu_entry_init(gov_menu, "REPORT_NATIONS");
3299 menu_entry_init(gov_menu, "REPORT_CITIES");
3300 menu_entry_init(gov_menu, "REPORT_ECONOMY");
3301 menu_entry_init(gov_menu, "REPORT_RESEARCH");
3302 menu_entry_init(gov_menu, "TAX_RATES");
3303 menu_entry_init(gov_menu, "POLICIES");
3304
3305 /* Placeholder submenu (so that menu update has something to replace) */
3306 submenu = g_menu_new();
3308
3309 menu_entry_init(gov_menu, "REPORT_WOW");
3310 menu_entry_init(gov_menu, "REPORT_TOP_CITIES");
3311 menu_entry_init(gov_menu, "REPORT_MESSAGES");
3312 menu_entry_init(gov_menu, "REPORT_DEMOGRAPHIC");
3313 menu_entry_init(gov_menu, "REPORT_SPACESHIP");
3314 menu_entry_init(gov_menu, "REPORT_ACHIEVEMENTS");
3315
3316 submenu_append_unref(menubar, _("C_ivilization"), G_MENU_MODEL(gov_menu));
3317
3318 topmenu = g_menu_new();
3319
3320 /* Keys exist for 4 battle groups */
3322
3323 for (i = 0; i < MAX_NUM_BATTLEGROUPS; i++) {
3324 char key[128];
3325
3326 /* User side battle group numbers start from 1 */
3327 fc_snprintf(key, sizeof(key), "BG_SELECT_%d", i + 1);
3329 fc_snprintf(key, sizeof(key), "BG_ASSIGN_%d", i + 1);
3331 fc_snprintf(key, sizeof(key), "BG_APPEND_%d", i + 1);
3333
3335 }
3336
3337 submenu_append_unref(menubar, _("_Battle Groups"), G_MENU_MODEL(topmenu));
3338
3339 topmenu = g_menu_new();
3340
3341 menu_entry_init(topmenu, "HELP_OVERVIEW");
3342 menu_entry_init(topmenu, "HELP_PLAYING");
3343 menu_entry_init(topmenu, "HELP_POLICIES");
3344 menu_entry_init(topmenu, "HELP_TERRAIN");
3345 menu_entry_init(topmenu, "HELP_ECONOMY");
3346 menu_entry_init(topmenu, "HELP_CITIES");
3347 menu_entry_init(topmenu, "HELP_IMPROVEMENTS");
3348 menu_entry_init(topmenu, "HELP_WONDERS");
3349 menu_entry_init(topmenu, "HELP_UNITS");
3350 menu_entry_init(topmenu, "HELP_COMBAT");
3351 menu_entry_init(topmenu, "HELP_ZOC");
3352 menu_entry_init(topmenu, "HELP_GOVERNMENT");
3353 menu_entry_init(topmenu, "HELP_DIPLOMACY");
3354 menu_entry_init(topmenu, "HELP_TECH");
3355 menu_entry_init(topmenu, "HELP_SPACE_RACE");
3356 menu_entry_init(topmenu, "HELP_RULESET");
3357 menu_entry_init(topmenu, "HELP_TILESET");
3358 menu_entry_init(topmenu, "HELP_MUSICSET");
3359 menu_entry_init(topmenu, "HELP_NATIONS");
3360 menu_entry_init(topmenu, "HELP_CONNECTING");
3361 menu_entry_init(topmenu, "HELP_CONTROLS");
3362 menu_entry_init(topmenu, "HELP_GOVERNOR");
3363 menu_entry_init(topmenu, "HELP_CHATLINE");
3364 menu_entry_init(topmenu, "HELP_WORKLIST_EDITOR");
3365 menu_entry_init(topmenu, "HELP_LANGUAGES");
3366 menu_entry_init(topmenu, "HELP_COPYING");
3367 menu_entry_init(topmenu, "HELP_ABOUT");
3368
3370
3371 menus_built = TRUE;
3372
3374
3375 return menubar;
3376}
3377
3378/************************************************************************/
3381static struct menu_entry_info *menu_entry_info_find(const char *key)
3382{
3383 int i;
3384
3385 for (i = 0; menu_entries[i].key != NULL; i++) {
3386 if (!strcmp(key, menu_entries[i].key)) {
3387 return &(menu_entries[i]);
3388 }
3389 }
3390
3391 return NULL;
3392}
3393
3394/************************************************************************/
3398 struct menu_entry_info *info,
3400{
3401 GAction *act = g_action_map_lookup_action(map, info->action);
3402
3403 if (act != NULL) {
3405 }
3406}
3407
3408/************************************************************************/
3412 const char *key,
3414{
3416
3417 if (info != NULL) {
3419 }
3420}
3421
3422/************************************************************************/
3426 enum menu_entry_grouping group,
3428{
3429 int i;
3430
3431 for (i = 0; menu_entries[i].key != NULL; i++) {
3432 if (menu_entries[i].grouping & group) {
3434 }
3435 }
3436}
3437
3438/************************************************************************/
3441static void menus_rename(GMenu *parent, int index, const char *key,
3442 const char *new_name)
3443{
3445
3446 if (info != NULL) {
3447 char actname[150];
3448 GMenuItem *item;
3449
3450 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
3451 g_menu_remove(parent, index);
3452
3453 item = g_menu_item_new(new_name, actname);
3455 }
3456}
3457
3458/************************************************************************/
3462{
3463 /* The "full" city bar (i.e. the new way of drawing the
3464 * city name), can draw the city growth even without drawing
3465 * the city name. But the old method cannot. */
3467 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", TRUE);
3468 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES", TRUE);
3469 } else {
3470 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", gui_options.draw_city_names);
3471 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES",
3473 }
3474
3475 menu_entry_set_sensitive(map, "SHOW_CITY_BUY_COST",
3477 menu_entry_set_sensitive(map, "SHOW_COASTLINE", !gui_options.draw_terrain);
3478 menu_entry_set_sensitive(map, "SHOW_UNIT_SOLID_BG",
3480 menu_entry_set_sensitive(map, "SHOW_UNIT_SHIELDS",
3482 menu_entry_set_sensitive(map, "SHOW_FOCUS_UNIT", !gui_options.draw_units);
3483}
3484
3485/************************************************************************/
3491static const char *get_tile_change_menu_text(struct tile *ptile,
3492 enum unit_activity activity)
3493{
3494 struct tile *newtile = tile_virtual_new(ptile);
3495 const char *text;
3496
3497 tile_apply_activity(newtile, activity, NULL);
3498 text = tile_get_info_text(newtile, FALSE, 0);
3500
3501 return text;
3502}
3503
3504/************************************************************************/
3508{
3511 GMenu *submenu;
3512 int i, j;
3513 int tgt_kind_group;
3514 struct unit_list *punits;
3515 unsigned num_units;
3516 struct menu_entry_info *info;
3517 struct road_type *proad;
3518 struct extra_type_list *extras;
3519 bool conn_possible;
3520
3522 return;
3523 }
3524
3526
3527 submenu = g_menu_new();
3528
3529 i = 0;
3530 j = 0;
3531
3532 /* Add the new action entries grouped by target kind. */
3535 struct action *paction = action_by_number(act_id);
3536 GSimpleAction *act;
3537 char actname[256];
3538 char name[256];
3539
3540 if (action_id_get_actor_kind(act_id) != AAK_UNIT) {
3541 /* This action isn't performed by a unit. */
3542 continue;
3543 }
3544
3546 /* Wrong group. */
3547 continue;
3548 }
3549
3550 if (!units_can_do_action(punits, act_id, TRUE)) {
3551 continue;
3552 }
3553
3554 /* Create and add the menu item. */
3555 fc_snprintf(actname, sizeof(actname), "action_%d", i);
3558
3559 fc_snprintf(name, sizeof(name), "%s",
3560 action_get_ui_name_mnemonic(act_id, "_"));
3561 fc_snprintf(actname, sizeof(actname), "app.action_%d", i++);
3562
3563 if (action_id_has_complex_target(act_id)) {
3565 char subname[256];
3566
3567#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_) \
3568{ \
3569 fc_snprintf(actname, sizeof(actname), "subtgt_%d", j); \
3570 act = g_simple_action_new(actname, NULL); \
3571 g_action_map_add_action(map, G_ACTION(act)); \
3572 g_object_set_data(G_OBJECT(act), _sub_target_key_, _sub_target_); \
3573 g_signal_connect(act, "activate", G_CALLBACK(unit_goto_and_callback), \
3574 paction); \
3575 fc_snprintf(subname, sizeof(subname), "%s", _sub_target_name_); \
3576 fc_snprintf(actname, sizeof(actname), "app.subtgt_%d", j++); \
3577 menu_item_append_unref(sub_target_menu, \
3578 g_menu_item_new(subname, actname)); \
3579}
3580
3582 case ASTK_BUILDING:
3584 CREATE_SUB_ITEM(pimpr, "end_building",
3587 break;
3588 case ASTK_TECH:
3590 CREATE_SUB_ITEM(ptech, "end_tech",
3593 break;
3594 case ASTK_EXTRA:
3596 extra_type_iterate(pextra) {
3597 if (!actres_creates_extra(paction->result, pextra)
3598 && !actres_removes_extra(paction->result, pextra)) {
3599 /* Not relevant */
3600 continue;
3601 }
3602 CREATE_SUB_ITEM(pextra, "end_extra",
3603 extra_name_translation(pextra));
3605 break;
3606 case ASTK_SPECIALIST:
3609
3610 CREATE_SUB_ITEM(pspec, "end_specialist",
3613 break;
3614 case ASTK_NONE:
3615 /* Should not be here. */
3617 break;
3618 case ASTK_COUNT:
3619 /* Should not exits */
3621 break;
3622 }
3623
3624#undef CREATE_SUB_ITEM
3625
3627 } else {
3628 g_signal_connect(act, "activate",
3631 }
3633 }
3635 g_menu_insert_submenu(unit_menu, 1, _("Go to a_nd..."), G_MENU_MODEL(submenu));
3636
3637 submenu = g_menu_new();
3638
3640 menu_entry_init(submenu, "START_REVOLUTION");
3641 }
3642
3643 i = 0;
3646 char name[256];
3647 char actname[256];
3648 GSimpleAction *act;
3649
3650 fc_snprintf(actname, sizeof(actname), "government_%d", i);
3654 g_signal_connect(act, "activate", G_CALLBACK(government_callback), g);
3655
3656 /* TRANS: %s is a government name */
3657 fc_snprintf(name, sizeof(name), _("%s..."),
3659 fc_snprintf(actname, sizeof(actname), "app.government_%d", i++);
3661 }
3664 g_menu_insert_submenu(gov_menu, 8, _("_Government"), G_MENU_MODEL(submenu));
3665
3666 submenu = g_menu_new();
3667
3669 if (pextra->buildable) {
3670 char actname[256];
3671 GSimpleAction *act;
3672
3673 fc_snprintf(actname, sizeof(actname), "path_%d", i);
3678 pextra));
3680 g_signal_connect(act, "activate", G_CALLBACK(road_callback), pextra);
3681
3682 fc_snprintf(actname, sizeof(actname), "app.path_%d", i++);
3685 }
3687
3690
3691 submenu = g_menu_new();
3692
3694 if (pextra->buildable) {
3695 char actname[256];
3696 GSimpleAction *act;
3697
3698 fc_snprintf(actname, sizeof(actname), "irrig_%d", i);
3703 pextra));
3705 g_signal_connect(act, "activate", G_CALLBACK(irrigation_callback), pextra);
3706
3707 fc_snprintf(actname, sizeof(actname), "app.irrig_%d", i++);
3710 }
3712
3714 g_menu_insert_submenu(work_menu, 3, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3715
3716 submenu = g_menu_new();
3717
3719 if (pextra->buildable) {
3720 char actname[256];
3721 GSimpleAction *act;
3722
3723 fc_snprintf(actname, sizeof(actname), "mine_%d", i);
3728 pextra));
3730 g_signal_connect(act, "activate", G_CALLBACK(mine_callback), pextra);
3731
3732 fc_snprintf(actname, sizeof(actname), "app.mine_%d", i++);
3735 }
3737
3740
3741 submenu = g_menu_new();
3742
3744 char actname[256];
3745 GSimpleAction *act;
3746
3747 fc_snprintf(actname, sizeof(actname), "clean_%d", i);
3752 pextra));
3754 g_signal_connect(act, "activate", G_CALLBACK(clean_menu_callback), pextra);
3755
3756 fc_snprintf(actname, sizeof(actname), "app.clean_%d", i++);
3760
3762 g_menu_insert_submenu(work_menu, 5, _("_Clean Nuisance"),
3764
3765 submenu = g_menu_new();
3766
3768 if (pextra->buildable) {
3769 char actname[256];
3770 GSimpleAction *act;
3771
3772 fc_snprintf(actname, sizeof(actname), "base_%d", i);
3777 pextra));
3779 g_signal_connect(act, "activate", G_CALLBACK(base_callback), pextra);
3780
3781 fc_snprintf(actname, sizeof(actname), "app.base_%d", i++);
3784 }
3786
3789
3791 char acttext[128], irrtext[128], mintext[128], transtext[128];
3792 char cultext[128], plantext[128];
3793 struct terrain *pterrain;
3794
3795 if (!can_client_change_view()) {
3796 return;
3797 }
3798
3800
3801 if (num_units > 0) {
3802 const struct tile *ptile = NULL;
3803 const struct unit_type *ptype = NULL;
3804
3806 fc_assert((ptile == NULL) == (ptype == NULL));
3807
3808 if (ptile || ptype) {
3809 if (unit_tile(punit) != ptile) {
3811 }
3812 if (unit_type_get(punit) != ptype) {
3814 }
3815 } else {
3816 ptile = unit_tile(punit);
3818 }
3820 }
3821
3826 num_units > 0
3828 && !editor_is_active());
3829
3831 menu_entry_set_sensitive(map, "VOLUME_UP", !audio_is_dummy_plugin());
3832 menu_entry_set_sensitive(map, "VOLUME_DOWN", !audio_is_dummy_plugin());
3833
3834 menu_entry_set_sensitive(map, "GAME_SAVE_AS",
3836 menu_entry_set_sensitive(map, "GAME_SAVE",
3838
3839 menu_entry_set_sensitive(map, "SERVER_OPTIONS", client.conn.established);
3840
3841 menu_entry_set_sensitive(map, "LEAVE",
3843
3845 menu_entry_set_sensitive(map, "INFRA_DLG", terrain_control.infrapoints);
3846
3847 menu_entry_set_sensitive(map, "POLICIES", multiplier_count() > 0);
3848 menu_entry_set_sensitive(map, "REPORT_TOP_CITIES", game.info.top_cities_count > 0);
3849 menu_entry_set_sensitive(map, "REPORT_SPACESHIP",
3850 client_player() != NULL && client_player()->spaceship.state != SSHIP_NONE);
3851
3852 info = menu_entry_info_find("EDIT_MODE");
3853 if (info->state != game.info.is_edit_mode) {
3854 info->state = game.info.is_edit_mode;
3858
3859 menu_entry_set_sensitive(map, "EDIT_MODE",
3862 }
3863
3864 info = menu_entry_info_find("TOGGLE_FOG");
3865 if (info->state != game.client.fog_of_war) {
3866 info->state = game.client.fog_of_war;
3867
3871 }
3872
3873 {
3874 char road_buf[500];
3875
3877 if (proad != NULL) {
3878 /* TRANS: Connect with some road type (Road/Railroad) */
3879 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3881 menus_rename(work_menu, 12, "CONNECT_ROAD", road_buf);
3882 }
3883
3885 if (proad != NULL) {
3886 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3888 menus_rename(work_menu, 13, "CONNECT_RAIL", road_buf);
3889 }
3890 }
3891
3892 if (!can_client_issue_orders()) {
3893 return;
3894 }
3895
3896 if (!punits) {
3897 return;
3898 }
3899
3900 /* Remaining part of this function: Update Unit, Work, and Combat menus */
3901
3902 /* Enable the button for adding to a city in all cases, so we
3903 * get an eventual error message from the server if we try. */
3904 menu_entry_set_sensitive(map, "BUILD_CITY",
3909
3910 menu_entry_set_sensitive(map, "DO_ACTION",
3912
3913 menu_entry_set_sensitive(map, "UNIT_TELEPORT",
3915
3916 menu_entry_set_sensitive(map, "BUILD_ROAD",
3920 menu_entry_set_sensitive(map, "BUILD_IRRIGATION",
3922 menu_entry_set_sensitive(map, "BUILD_MINE",
3924 menu_entry_set_sensitive(map, "CULTIVATE",
3926 menu_entry_set_sensitive(map, "PLANT",
3928 menu_entry_set_sensitive(map, "TRANSFORM_TERRAIN",
3930 menu_entry_set_sensitive(map, "FORTIFY",
3933 menu_entry_set_sensitive(map, "PARADROP",
3935 menu_entry_set_sensitive(map, "PILLAGE",
3937 menu_entry_set_sensitive(map, "CLEAN",
3939 menu_entry_set_sensitive(map, "BUILD_FORTRESS",
3941 menu_entry_set_sensitive(map, "BUILD_AIRBASE",
3943 menu_entry_set_sensitive(map, "UNIT_SENTRY",
3945 menu_entry_set_sensitive(map, "UNSENTRY_ALL",
3948 menu_entry_set_sensitive(map, "UNIT_HOMECITY",
3950 menu_entry_set_sensitive(map, "UNIT_UPGRADE", units_can_upgrade(&(wld.map), punits));
3951 menu_entry_set_sensitive(map, "UNIT_CONVERT", units_can_convert(&(wld.map), punits));
3952 menu_entry_set_sensitive(map, "UNIT_DISBAND",
3954 TRUE));
3955
3956 menu_entry_set_sensitive(map, "AUTO_WORKER",
3958 menu_entry_set_sensitive(map, "UNIT_EXPLORE",
3960 menu_entry_set_sensitive(map, "UNIT_BOARD",
3962 menu_entry_set_sensitive(map, "UNIT_DEBOARD",
3964 menu_entry_set_sensitive(map, "UNIT_UNLOAD_TRANSPORTER",
3966
3968 if (proad != NULL) {
3969 struct extra_type *tgt;
3970
3971 tgt = road_extra_get(proad);
3972
3974 } else {
3976 }
3977 menu_entry_set_sensitive(map, "CONNECT_ROAD", conn_possible);
3978
3980 if (proad != NULL) {
3981 struct extra_type *tgt;
3982
3983 tgt = road_extra_get(proad);
3984
3986 } else {
3988 }
3989 menu_entry_set_sensitive(map, "CONNECT_RAIL", conn_possible);
3990
3992 if (proad != NULL) {
3993 struct extra_type *tgt;
3994
3995 tgt = road_extra_get(proad);
3996
3998 } else {
4000 }
4001 menu_entry_set_sensitive(map, "CONNECT_MAGLEV", conn_possible);
4002
4004
4005 if (extra_type_list_size(extras) > 0) {
4006 struct extra_type *tgt;
4007
4008 tgt = extra_type_list_get(extras, 0);
4010 } else {
4012 }
4013 menu_entry_set_sensitive(map, "CONNECT_IRRIGATION", conn_possible);
4014
4015 menu_entry_set_sensitive(map, "TAX_RATES",
4018
4020 menus_rename(work_menu, 0, "BUILD_CITY",
4022 } else {
4023 bool city_on_tile = FALSE;
4024
4025 /* FIXME: This overloading doesn't work well with multiple focus
4026 * units. */
4028 if (tile_city(unit_tile(punit))) {
4030 break;
4031 }
4033
4035 TRUE)) {
4036 menus_rename(work_menu, 0, "BUILD_CITY",
4038 } else {
4039 /* Refresh default order */
4040 menus_rename(work_menu, 0, "BUILD_CITY",
4042 }
4043 }
4044
4046 menus_rename(work_menu, 6, "BUILD_ROAD",
4049 char road_item[500];
4050 struct extra_type *pextra = NULL;
4051
4052 /* FIXME: This overloading doesn't work well with multiple focus
4053 * units. */
4057 if (pextra != NULL) {
4058 break;
4059 }
4061
4062 if (pextra != NULL) {
4063 /* TRANS: Build road of specific type (Road/Railroad) */
4064 snprintf(road_item, sizeof(road_item), _("Build %s"),
4065 extra_name_translation(pextra));
4066 menus_rename(work_menu, 6, "BUILD_ROAD", road_item);
4067 }
4068 } else {
4069 menus_rename(work_menu, 6, "BUILD_ROAD", _("Build _Road"));
4070 }
4071
4072 if (units_all_same_type && num_units > 0) {
4073 struct unit *punit = unit_list_get(punits, 0);
4074 const struct unit_type *to_unittype
4076
4077 if (to_unittype) {
4078 /* TRANS: %s is a unit type. */
4079 fc_snprintf(acttext, sizeof(acttext), _("Upgr_ade to %s"),
4082 unit_type_get(punit))));
4083 } else {
4084 acttext[0] = '\0';
4085 }
4086 } else {
4087 acttext[0] = '\0';
4088 }
4089 if ('\0' != acttext[0]) {
4090 menus_rename(unit_menu, 13, "UNIT_UPGRADE", acttext);
4091 } else {
4092 menus_rename(unit_menu, 13, "UNIT_UPGRADE", _("Upgr_ade"));
4093 }
4094
4095 if (units_can_convert(&(wld.map), punits)) {
4096 if (units_all_same_type && num_units > 0) {
4097 struct unit *punit = unit_list_get(punits, 0);
4098
4099 /* TRANS: %s is a unit type. */
4100 fc_snprintf(acttext, sizeof(acttext), _("C_onvert to %s"),
4102 } else {
4103 acttext[0] = '\0';
4104 }
4105 } else {
4106 menu_entry_set_sensitive(map, "UNIT_CONVERT", FALSE);
4107 acttext[0] = '\0';
4108 }
4109 if ('\0' != acttext[0]) {
4110 menus_rename(unit_menu, 14, "UNIT_CONVERT", acttext);
4111 } else {
4112 menus_rename(unit_menu, 14, "UNIT_CONVERT", _("C_onvert"));
4113 }
4114
4115 if (units_all_same_tile && num_units > 0) {
4116 struct unit *first = unit_list_get(punits, 0);
4117
4118 pterrain = tile_terrain(unit_tile(first));
4119
4121 struct extra_type *pextra = NULL;
4122
4123 /* FIXME: this overloading doesn't work well with multiple focus
4124 * units. */
4128 if (pextra != NULL) {
4129 break;
4130 }
4132
4133 if (pextra != NULL) {
4134 /* TRANS: Build irrigation of specific type */
4135 snprintf(irrtext, sizeof(irrtext), _("Build %s"),
4136 extra_name_translation(pextra));
4137 } else {
4138 sz_strlcpy(irrtext, _("Build _Irrigation"));
4139 }
4140 } else {
4141 sz_strlcpy(irrtext, _("Build _Irrigation"));
4142 }
4143
4144 if (pterrain->cultivate_result != T_NONE) {
4145 fc_snprintf(cultext, sizeof(cultext), _("Change to %s"),
4148 } else {
4149 sz_strlcpy(cultext, _("_Cultivate"));
4150 }
4151
4153 struct extra_type *pextra = NULL;
4154
4155 /* FIXME: this overloading doesn't work well with multiple focus
4156 * units. */
4160 if (pextra != NULL) {
4161 break;
4162 }
4164
4165 if (pextra != NULL) {
4166 /* TRANS: Build mine of specific type */
4167 snprintf(mintext, sizeof(mintext), _("Build %s"),
4168 extra_name_translation(pextra));
4169 } else {
4170 sz_strlcpy(mintext, _("Build _Mine"));
4171 }
4172 } else {
4173 sz_strlcpy(mintext, _("Build _Mine"));
4174 }
4175
4176 if (pterrain->plant_result != T_NONE) {
4177 fc_snprintf(plantext, sizeof(plantext), _("Change to %s"),
4179 } else {
4180 sz_strlcpy(plantext, _("_Plant"));
4181 }
4182
4183 if (pterrain->transform_result != T_NONE
4184 && pterrain->transform_result != pterrain) {
4185 fc_snprintf(transtext, sizeof(transtext), _("Transf_orm to %s"),
4188 } else {
4189 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4190 }
4191 } else {
4192 sz_strlcpy(irrtext, _("Build _Irrigation"));
4193 sz_strlcpy(cultext, _("_Cultivate"));
4194 sz_strlcpy(mintext, _("Build _Mine"));
4195 sz_strlcpy(plantext, _("_Plant"));
4196 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4197 }
4198
4199 menus_rename(work_menu, 7, "BUILD_IRRIGATION", irrtext);
4200 menus_rename(work_menu, 9, "CULTIVATE", cultext);
4201 menus_rename(work_menu, 8, "BUILD_MINE", mintext);
4202 menus_rename(work_menu, 10, "PLANT", plantext);
4203 menus_rename(work_menu, 11, "TRANSFORM_TERRAIN", transtext);
4204
4205 menus_rename(unit_menu, 12, "UNIT_HOMECITY",
4207
4208 menus_rename(combat_menu, 1, "BUILD_FORTRESS",
4209 Q_(terrain_control.gui_type_base0));
4210 menus_rename(combat_menu, 2, "BUILD_AIRBASE",
4211 Q_(terrain_control.gui_type_base1));
4212}
4213
4214/************************************************************************/
4219{
4220 if (!menus_built) {
4221 return;
4222 }
4223}
4224
4225/**********************************************************************/
4229{
4231
4232 if (enable) {
4233 if (main_menubar == NULL) {
4236 /* Ensure the menus are really created before performing any operations
4237 * on them. */
4238 while (g_main_context_pending(NULL)) {
4240 }
4241 }
4242
4245
4246 } else {
4249 }
4250
4251 /* Workaround for gtk bug that (re)setting the menubar after the window has
4252 * been already created is not noticed. */
4253 g_object_notify(G_OBJECT(gtk_settings_get_default()), "gtk-shell-shows-menubar");
4254}
4255
4256/**********************************************************************/
4263
4264/**********************************************************************/
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
#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