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);
401 GVariant *parameter,
402 gpointer data);
403
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);
501 GVariant *parameter,
502 gpointer data);
503
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);
544 GVariant *parameter,
545 gpointer data);
546
548 GVariant *parameter,
549 gpointer data);
551 GVariant *parameter,
552 gpointer data);
554 GVariant *parameter,
555 gpointer data);
556
558{
559 /* Game menu */
560 { "CLEAR_CHAT_LOGS", N_("_Clear Chat Log"),
561 "clear_chat", NULL, MGROUP_SAFE,
562 NULL, FALSE },
563 { "SAVE_CHAT_LOGS", N_("Save Chat _Log"),
564 "save_chat", NULL, MGROUP_SAFE,
565 NULL, FALSE },
566
567 { "LOCAL_OPTIONS", N_("_Local Client"),
568 "local_options", NULL, MGROUP_SAFE,
569 NULL, FALSE },
570 { "MESSAGE_OPTIONS", N_("_Message"),
571 "message_options", NULL, MGROUP_SAFE,
572 NULL, FALSE },
573 { "SERVER_OPTIONS", N_("_Remote Server"),
574 "server_options", NULL, MGROUP_SAFE,
575 NULL, FALSE },
576 { "SAVE_OPTIONS", N_("Save Options _Now"),
577 "save_options", NULL, MGROUP_SAFE,
578 NULL, FALSE },
579 { "SAVE_OPTIONS_ON_EXIT", N_("Save Options on _Exit"),
580 "save_options_on_exit", NULL, MGROUP_SAFE,
582
583#ifdef FREECIV_DEBUG
584 { "RELOAD_TILESET", N_("_Reload Tileset"),
585 "reload_tileset", ACCL_MOD_KEY"<alt>r", MGROUP_SAFE,
586 NULL, FALSE },
587#endif /* FREECIV_DEBUG */
588
589 { "GAME_SAVE", N_("_Save Game"),
590 "game_save", ACCL_MOD_KEY"s", MGROUP_SAFE,
591 NULL, FALSE },
592 { "GAME_SAVE_AS", N_("Save Game _As..."),
593 "game_save_as", NULL, MGROUP_SAFE,
594 NULL, FALSE },
595 { "MAPIMG_SAVE", N_("Save Map _Image"),
596 "save_mapimg", NULL, MGROUP_SAFE,
597 NULL, FALSE },
598 { "MAPIMG_SAVE_AS", N_("Save _Map Image As..."),
599 "save_mapimg_as", NULL, MGROUP_SAFE,
600 NULL, FALSE },
601 { "VOLUME_UP", N_("Volume Up"),
602 "volume_up", "greater", MGROUP_SAFE | MGROUP_CHAR,
603 NULL, FALSE },
604 { "VOLUME_DOWN", N_("Volume Down"),
605 "volume_down", "less", MGROUP_SAFE | MGROUP_CHAR,
606 NULL, FALSE },
607 { "LEAVE", N_("_Leave"),
608 "leave", NULL, MGROUP_SAFE,
609 NULL, FALSE },
610 { "QUIT", N_("_Quit"),
611 "quit", ACCL_MOD_KEY"q", MGROUP_SAFE,
612 NULL, FALSE },
613
614 /* Edit menu */
615 { "FIND_CITY", N_("_Find City"),
616 "find_city", ACCL_MOD_KEY"f", MGROUP_SAFE,
617 NULL, FALSE },
618 { "WORKLISTS", N_("Work_lists"),
619 "worklists", ACCL_MOD_KEY"<shift>l", MGROUP_SAFE,
620 NULL, FALSE },
621 { "RALLY_DLG", N_("Rally point dialog"),
622 "rally_dlg", ACCL_MOD_KEY"<shift>r", MGROUP_SAFE,
623 NULL, FALSE },
624 { "INFRA_DLG", N_("Infra dialog"),
625 "infra_dlg", ACCL_MOD_KEY"<shift>f", MGROUP_SAFE,
626 NULL, FALSE },
627 { "EDIT_MODE", N_("_Editing Mode"),
628 "edit_mode", ACCL_MOD_KEY"e", MGROUP_SAFE,
630 { "TOGGLE_FOG", N_("Toggle Fog of _War"),
631 "toggle_fog", ACCL_MOD_KEY"<shift>w", MGROUP_EDIT,
633 { "SCENARIO_PROPERTIES", N_("Game/Scenario Properties"),
634 "scenario_props", NULL, MGROUP_EDIT,
635 NULL, FALSE },
636 { "SCENARIO_SAVE", N_("Save Scenario"),
637 "scenario_save", NULL, MGROUP_EDIT,
638 NULL, FALSE },
639 { "CLIENT_LUA_SCRIPT", N_("Client _Lua Script"),
640 "lua_script", NULL, MGROUP_SAFE,
641 NULL, FALSE },
642
643 /* View menu */
644 { "SHOW_CITY_OUTLINES", N_("Cit_y Outlines"),
645 "show_city_outlines", ACCL_MOD_KEY"y", MGROUP_SAFE,
647 { "SHOW_CITY_OUTPUT", N_("City Output"),
648 "show_city_output", ACCL_MOD_KEY"v", MGROUP_SAFE,
650 { "SHOW_MAP_GRID", N_("Map _Grid"),
651 "show_map_grid", ACCL_MOD_KEY"g", MGROUP_SAFE,
653 { "SHOW_NAT_BORDERS", N_("National _Borders"),
654 "show_nat_borders", ACCL_MOD_KEY"b", MGROUP_SAFE,
656 { "SHOW_NATIVE_TILES", N_("Native Tiles"),
657 "show_native_tiles", ACCL_MOD_KEY"<shift>n", MGROUP_SAFE,
659 { "SHOW_CITY_FULL_BAR", N_("City Full Bar"),
660 "show_city_full_bar", NULL, MGROUP_SAFE,
662 { "SHOW_CITY_NAMES", N_("City _Names"),
663 "show_city_names", ACCL_MOD_KEY"n", MGROUP_SAFE,
665 { "SHOW_CITY_GROWTH", N_("City G_rowth"),
666 "show_city_growth", ACCL_MOD_KEY"o", MGROUP_SAFE,
668 { "SHOW_CITY_PRODUCTIONS", N_("City _Production"),
669 "show_city_productions", ACCL_MOD_KEY"p", MGROUP_SAFE,
671 { "SHOW_CITY_BUY_COST", N_("City Buy Cost"),
672 "show_city_buy_cost", NULL, MGROUP_SAFE,
674 { "SHOW_CITY_TRADE_ROUTES", N_("City Tra_deroutes"),
675 "show_trade_routes", ACCL_MOD_KEY"d", MGROUP_SAFE,
677 { "SHOW_TERRAIN", N_("_Terrain"),
678 "show_terrain", NULL, MGROUP_SAFE,
680 { "SHOW_COASTLINE", N_("C_oastline"),
681 "show_coastline", NULL, MGROUP_SAFE,
683 { "SHOW_PATHS", N_("_Paths"),
684 "show_paths", NULL, MGROUP_SAFE,
686 { "SHOW_IRRIGATION", N_("_Irrigation"),
687 "show_irrigation", NULL, MGROUP_SAFE,
689 { "SHOW_MINES", N_("_Mines"),
690 "show_mines", NULL, MGROUP_SAFE,
692 { "SHOW_BASES", N_("_Bases"),
693 "show_bases", NULL, MGROUP_SAFE,
695 { "SHOW_RESOURCES", N_("_Resources"),
696 "show_resources", NULL, MGROUP_SAFE,
698 { "SHOW_HUTS", N_("_Huts"),
699 "show_huts", NULL, MGROUP_SAFE,
701 { "SHOW_POLLUTION", N_("Po_llution & Fallout"),
702 "show_pollution", NULL, MGROUP_SAFE,
704 { "SHOW_CITIES", N_("Citi_es"),
705 "show_cities", NULL, MGROUP_SAFE,
707 { "SHOW_UNITS", N_("_Units"),
708 "show_units", NULL, MGROUP_SAFE,
710 { "SHOW_UNIT_SOLID_BG", N_("Unit Solid Background"),
711 "show_unit_solid_bg", NULL, MGROUP_SAFE,
713 { "SHOW_UNIT_SHIELDS", N_("Unit shields"),
714 "show_unit_shields", NULL, MGROUP_SAFE,
716 { "SHOW_STACK_SIZE", N_("Unit Stack Size"),
717 "show_stack_size", ACCL_MOD_KEY"plus", MGROUP_SAFE,
719 { "SHOW_FOCUS_UNIT", N_("Focu_s Unit"),
720 "show_focus_unit", NULL, MGROUP_SAFE,
722 { "SHOW_FOG_OF_WAR", N_("Fog of _War"),
723 "show_fow", NULL, MGROUP_SAFE,
725
726 { "FULL_SCREEN", N_("_Fullscreen"),
727 "full_screen", ACCL_MOD_KEY"F11", MGROUP_SAFE,
729 { "CENTER_VIEW", N_("_Center View"),
730 "center_view", "c", MGROUP_PLAYER | MGROUP_CHAR,
731 NULL, FALSE },
732 { "ZOOM_IN", N_("_Zoom in"),
733 "zoom_in", "plus", MGROUP_PLAYER,
734 NULL, FALSE },
735 { "ZOOM_OUT", N_("_Zoom out"),
736 "zoom_out", "minus", MGROUP_PLAYER,
737 NULL, FALSE },
738
739 /* Select menu */
740 { "SELECT_SINGLE", N_("_Single Unit (Unselect Others)"),
741 "select_single", "z", MGROUP_UNIT | MGROUP_CHAR,
742 NULL, FALSE },
743 { "SELECT_ALL_ON_TILE", N_("_All On Tile"),
744 "select_all_tile", "v", MGROUP_UNIT | MGROUP_CHAR,
745 NULL, FALSE },
746 { "SELECT_SAME_TYPE_TILE", N_("Same Type on _Tile"),
747 "select_same_type_tile", "<shift>v", MGROUP_UNIT | MGROUP_CHAR,
748 NULL, FALSE },
749 { "SELECT_SAME_TYPE_CONT", N_("Same Type on _Continent"),
750 "select_same_type_cont", "<shift>c", MGROUP_UNIT | MGROUP_CHAR,
751 NULL, FALSE },
752 { "SELECT_SAME_TYPE", N_("Same Type _Everywhere"),
753 "select_same_type", "<shift>x", MGROUP_UNIT | MGROUP_CHAR,
754 NULL, FALSE },
755 { "SELECT_DLG", N_("Unit Selection Dialog"),
756 "select_dlg", NULL, MGROUP_UNIT,
757 NULL, FALSE },
758
759 /* Unit menu */
760 { "UNIT_GOTO", N_("_Go to"),
761 "goto", "g", MGROUP_UNIT | MGROUP_CHAR,
762 NULL, FALSE },
763 { "UNIT_GOTO_CITY", N_("Go _to/Airlift to City..."),
764 "goto_city", "t", MGROUP_UNIT | MGROUP_CHAR,
765 NULL, FALSE },
766 { "UNIT_RETURN", N_("_Return to Nearest City"),
767 "return", "<shift>g", MGROUP_UNIT | MGROUP_CHAR,
768 NULL, FALSE },
769 { "UNIT_EXPLORE", N_("Auto E_xplore"),
770 "explore", "x", MGROUP_UNIT | MGROUP_CHAR,
771 NULL, FALSE },
772 { "UNIT_PATROL", N_("_Patrol"),
773 "patrol", "q", MGROUP_UNIT | MGROUP_CHAR,
774 NULL, FALSE },
775 { "UNIT_TELEPORT", N_("_Teleport"),
776 "teleport", NULL, MGROUP_UNIT,
777 NULL, FALSE },
778 { "UNIT_SENTRY", N_("_Sentry"),
779 "sentry", "s", MGROUP_UNIT | MGROUP_CHAR,
780 NULL, FALSE },
781 { "UNSENTRY_ALL", N_("Uns_entry All On Tile"),
782 "unsentry_all", "<shift>s", MGROUP_UNIT | MGROUP_CHAR,
783 NULL, FALSE },
784 { "UNIT_BOARD", N_("_Load"),
785 "board", "l", MGROUP_UNIT | MGROUP_CHAR,
786 NULL, FALSE },
787 { "UNIT_DEBOARD", N_("_Unload"),
788 "deboard", "u", MGROUP_UNIT | MGROUP_CHAR,
789 NULL, FALSE },
790 { "UNIT_UNLOAD_TRANSPORTER", N_("U_nload All From Transporter"),
791 "unload_transporter", "<shift>t", MGROUP_UNIT | MGROUP_CHAR,
792 NULL, FALSE },
793 { "UNIT_HOMECITY", N_("Set _Home City"),
794 "homecity", "h", MGROUP_UNIT | MGROUP_CHAR,
795 NULL, FALSE },
796 { "UNIT_UPGRADE", N_("Upgr_ade"),
797 "upgrade", "<shift>u", MGROUP_UNIT | MGROUP_CHAR,
798 NULL, FALSE },
799 { "UNIT_CONVERT", N_("C_onvert"),
800 "convert", "<shift>o", MGROUP_UNIT | MGROUP_CHAR,
801 NULL, FALSE },
802 { "UNIT_DISBAND", N_("_Disband"),
803 "disband", "<shift>d", MGROUP_UNIT | MGROUP_CHAR,
804 NULL, FALSE },
805 { "DO_ACTION", N_("_Do..."),
806 "do_action", "d", MGROUP_UNIT | MGROUP_CHAR,
807 NULL, FALSE },
808 { "UNIT_WAIT", N_("_Wait"),
809 "wait", "w", MGROUP_UNIT | MGROUP_CHAR,
810 NULL, FALSE },
811 { "UNIT_DONE", N_("_Done"),
812 "done", "space", MGROUP_UNIT | MGROUP_CHAR,
813 NULL, FALSE },
814
815 /* Work menu */
816 { "BUILD_CITY", N_("_Build City"),
817 "build_city", "b", MGROUP_UNIT | MGROUP_CHAR,
818 NULL, FALSE },
819 { "AUTO_WORKER", N_("_Auto Worker"),
820 "auto_work", "a", MGROUP_UNIT | MGROUP_CHAR,
821 NULL, FALSE },
822 { "BUILD_ROAD", N_("Build _Road"),
823 "build_road", "r", MGROUP_UNIT | MGROUP_CHAR,
824 NULL, FALSE },
825 { "BUILD_IRRIGATION", N_("Build _Irrigation"),
826 "build_irrigation", "i", MGROUP_UNIT | MGROUP_CHAR,
827 NULL, FALSE },
828 { "BUILD_MINE", N_("Build _Mine"),
829 "build_mine", "m", MGROUP_UNIT | MGROUP_CHAR,
830 NULL, FALSE },
831 { "CULTIVATE", N_("Cultivate"),
832 "cultivate", "<shift>i", MGROUP_UNIT | MGROUP_CHAR,
833 NULL, FALSE },
834 { "PLANT", N_("Plant"),
835 "plant", "<shift>m", MGROUP_UNIT | MGROUP_CHAR,
836 NULL, FALSE },
837 { "TRANSFORM_TERRAIN", N_("Transf_orm Terrain"),
838 "transform_terrain", "o", MGROUP_UNIT | MGROUP_CHAR,
839 NULL, FALSE },
840 { "CONNECT_ROAD", N_("Connect With Roa_d"),
841 "connect_road", ACCL_MOD_KEY"r", MGROUP_UNIT,
842 NULL, FALSE },
843 { "CONNECT_RAIL", N_("Connect With Rai_l"),
844 "connect_rail", ACCL_MOD_KEY"l", MGROUP_UNIT,
845 NULL, FALSE },
846 { "CONNECT_MAGLEV", N_("Connect With _Maglev"),
847 "connect_maglev", ACCL_MOD_KEY"m", MGROUP_UNIT,
848 NULL, FALSE },
849 { "CONNECT_IRRIGATION", N_("Connect With Irri_gation"),
850 "connect_irrigation", ACCL_MOD_KEY"i", MGROUP_UNIT,
851 NULL, FALSE },
852 { "CLEAN", N_("_Clean"),
853 "clean", "p", MGROUP_UNIT | MGROUP_CHAR,
854 NULL, FALSE },
855
856 /* Combat menu */
857 { "FORTIFY", N_("Fortify"),
858 "fortify", "f", MGROUP_UNIT | MGROUP_CHAR,
859 NULL, FALSE },
860 { "BUILD_FORTRESS", N_("Build Fortress"),
861 "build_base_fortress", "<shift>f", MGROUP_UNIT | MGROUP_CHAR,
862 NULL, FALSE },
863 { "BUILD_AIRBASE", N_("Build Airbase"),
864 "build_base_airbase", "<shift>e", MGROUP_UNIT | MGROUP_CHAR,
865 NULL, FALSE },
866 { "PARADROP", N_("P_aradrop"),
867 "paradrop", "j", MGROUP_UNIT | MGROUP_CHAR,
868 NULL, FALSE },
869 { "PILLAGE", N_("_Pillage"),
870 "pillage", "<shift>p", MGROUP_UNIT | MGROUP_CHAR,
871 NULL, FALSE },
872
873 /* Civilization */
874 { "MAP_VIEW", N_("?noun:_View"),
875 "map_view", "F1", MGROUP_SAFE,
876 NULL, FALSE },
877 { "REPORT_UNITS", N_("_Units"),
878 "report_units", "F2", MGROUP_SAFE,
879 NULL, FALSE },
880 { "REPORT_NATIONS", N_("_Nations"),
881 "report_nations", "F3", MGROUP_SAFE,
882 NULL, FALSE },
883 { "REPORT_CITIES", N_("_Cities"),
884 "report_cities", "F4", MGROUP_SAFE,
885 NULL, FALSE },
886 { "REPORT_ECONOMY", N_("_Economy"),
887 "report_economy", "F5", MGROUP_PLAYER,
888 NULL, FALSE },
889 { "REPORT_RESEARCH", N_("_Research"),
890 "report_research", "F6", MGROUP_PLAYER,
891 NULL, FALSE },
892
893 { "TAX_RATES", N_("_Tax Rates..."),
894 "tax_rates", ACCL_MOD_KEY"t", MGROUP_PLAYING,
895 NULL, FALSE },
896 { "POLICIES", N_("_Policies..."),
897 "policies", "<shift><ctrl>p", MGROUP_PLAYER,
898 NULL, FALSE },
899 { "START_REVOLUTION", N_("_Revolution..."),
900 "revolution", "<shift><ctrl>g", MGROUP_PLAYING,
901 NULL, FALSE },
902
903 { "REPORT_WOW", N_("_Wonders of the World"),
904 "report_wow", "F7", MGROUP_SAFE,
905 NULL, FALSE },
906 { "REPORT_TOP_CITIES", N_("Top Cities"),
907 "report_top_cities", "F8", MGROUP_SAFE,
908 NULL, FALSE },
909 { "REPORT_MESSAGES", N_("_Messages"),
910 "report_messages", "F9", MGROUP_SAFE,
911 NULL, FALSE },
912 { "REPORT_DEMOGRAPHIC", N_("_Demographics"),
913 "report_demographics", "F11", MGROUP_SAFE,
914 NULL, FALSE },
915 { "REPORT_SPACESHIP", N_("_Spaceship"),
916 "report_spaceship", "F12", MGROUP_SAFE,
917 NULL, FALSE },
918 { "REPORT_ACHIEVEMENTS", N_("_Achievements"),
919 "report_achievements", "asterisk", MGROUP_SAFE | MGROUP_CHAR,
920 NULL, FALSE },
921
922 /* Battle Groups menu */
923 /* Note that user view: 1 - 4, internal: 0 - 3 */
924 { "BG_SELECT_1", N_("Select Battle Group 1"),
925 "bg_select_0", "<shift>F1", MGROUP_PLAYING,
926 NULL, FALSE },
927 { "BG_ASSIGN_1", N_("Assign Battle Group 1"),
928 "bg_assign_0", ACCL_MOD_KEY"F1", MGROUP_PLAYING,
929 NULL, FALSE },
930 { "BG_APPEND_1", N_("Append to Battle Group 1"),
931 "bg_append_0", "<shift><ctrl>F1", MGROUP_PLAYING,
932 NULL, FALSE },
933 { "BG_SELECT_2", N_("Select Battle Group 2"),
934 "bg_select_1", "<shift>F2", MGROUP_PLAYING,
935 NULL, FALSE },
936 { "BG_ASSIGN_2", N_("Assign Battle Group 2"),
937 "bg_assign_1", ACCL_MOD_KEY"F2", MGROUP_PLAYING,
938 NULL, FALSE },
939 { "BG_APPEND_2", N_("Append to Battle Group 2"),
940 "bg_append_1", "<shift><ctrl>F2", MGROUP_PLAYING,
941 NULL, FALSE },
942 { "BG_SELECT_3", N_("Select Battle Group 3"),
943 "bg_select_2", "<shift>F3", MGROUP_PLAYING,
944 NULL, FALSE },
945 { "BG_ASSIGN_3", N_("Assign Battle Group 3"),
946 "bg_assign_2", ACCL_MOD_KEY"F3", MGROUP_PLAYING,
947 NULL, FALSE },
948 { "BG_APPEND_3", N_("Append to Battle Group 3"),
949 "bg_append_2", "<shift><ctrl>F3", MGROUP_PLAYING,
950 NULL, FALSE },
951 { "BG_SELECT_4", N_("Select Battle Group 4"),
952 "bg_select_3", "<shift>F4", MGROUP_PLAYING,
953 NULL, FALSE },
954 { "BG_ASSIGN_4", N_("Assign Battle Group 4"),
955 "bg_assign_3", ACCL_MOD_KEY"F4", MGROUP_PLAYING,
956 NULL, FALSE },
957 { "BG_APPEND_4", N_("Append to Battle Group 4"),
958 "bg_append_3", "<shift><ctrl>F4", MGROUP_PLAYING,
959 NULL, FALSE },
960
961 /* Help menu */
962 { "HELP_OVERVIEW", N_("?help:Overview"),
963 "help_overview", NULL, MGROUP_SAFE,
964 NULL, FALSE },
965 { "HELP_PLAYING", N_("Strategy and Tactics"),
966 "help_playing", NULL, MGROUP_SAFE,
967 NULL, FALSE },
968 { "HELP_POLICIES", N_("Policies"),
969 "help_policies", NULL, MGROUP_SAFE,
970 NULL, FALSE },
971 { "HELP_TERRAIN", N_("Terrain"),
972 "help_terrains", NULL, MGROUP_SAFE,
973 NULL, FALSE },
974 { "HELP_ECONOMY", N_("Economy"),
975 "help_economy", NULL, MGROUP_SAFE,
976 NULL, FALSE },
977 { "HELP_CITIES", N_("Cities"),
978 "help_cities", NULL, MGROUP_SAFE,
979 NULL, FALSE },
980 { "HELP_IMPROVEMENTS", N_("City Improvements"),
981 "help_improvements", NULL, MGROUP_SAFE,
982 NULL, FALSE },
983 { "HELP_WONDERS", N_("Wonders of the World"),
984 "help_wonders", NULL, MGROUP_SAFE,
985 NULL, FALSE },
986 { "HELP_UNITS", N_("Units"),
987 "help_units", NULL, MGROUP_SAFE,
988 NULL, FALSE },
989 { "HELP_COMBAT", N_("Combat"),
990 "help_combat", NULL, MGROUP_SAFE,
991 NULL, FALSE },
992 { "HELP_COUNTERS", N_("Counters"),
993 "help_counters", NULL, MGROUP_SAFE,
994 NULL, FALSE },
995 { "HELP_ZOC", N_("Zones of Control"),
996 "help_zoc", NULL, MGROUP_SAFE,
997 NULL, FALSE },
998 { "HELP_GOVERNMENT", N_("Government"),
999 "help_government", NULL, MGROUP_SAFE,
1000 NULL, FALSE },
1001 { "HELP_DIPLOMACY", N_("Diplomacy"),
1002 "help_diplomacy", NULL, MGROUP_SAFE,
1003 NULL, FALSE },
1004 { "HELP_TECH", N_("Technology"),
1005 "help_tech", NULL, MGROUP_SAFE,
1006 NULL, FALSE },
1007 { "HELP_SPACE_RACE", N_("Space Race"),
1008 "help_space_race", NULL, MGROUP_SAFE,
1009 NULL, FALSE },
1010 { "HELP_RULESET", N_("About Current Ruleset"),
1011 "help_ruleset", NULL, MGROUP_SAFE,
1012 NULL, FALSE },
1013 { "HELP_TILESET", N_("About Current Tileset"),
1014 "help_tileset", NULL, MGROUP_SAFE,
1015 NULL, FALSE },
1016 { "HELP_MUSICSET", N_("About Current Musicset"),
1017 "help_musicset", NULL, MGROUP_SAFE,
1018 NULL, FALSE },
1019 { "HELP_NATIONS", N_("About Nations"),
1020 "help_nations", NULL, MGROUP_SAFE,
1021 NULL, FALSE },
1022 { "HELP_CONNECTING", N_("Connecting"),
1023 "help_connecting", NULL, MGROUP_SAFE,
1024 NULL, FALSE },
1025 { "HELP_CONTROLS", N_("Controls"),
1026 "help_controls", NULL, MGROUP_SAFE,
1027 NULL, FALSE },
1028 { "HELP_GOVERNOR", N_("Citizen Governor"),
1029 "help_governor", NULL, MGROUP_SAFE,
1030 NULL, FALSE },
1031 { "HELP_CHATLINE", N_("Chatline"),
1032 "help_chatline", NULL, MGROUP_SAFE,
1033 NULL, FALSE },
1034 { "HELP_WORKLIST_EDITOR", N_("Worklist Editor"),
1035 "help_worklist_editor", NULL, MGROUP_SAFE,
1036 NULL, FALSE },
1037 { "HELP_LANGUAGES", N_("Languages"),
1038 "help_languages", NULL, MGROUP_SAFE,
1039 NULL, FALSE },
1040 { "HELP_COPYING", N_("Copying"),
1041 "help_copying", NULL, MGROUP_SAFE,
1042 NULL, FALSE },
1043 { "HELP_ABOUT", N_("About Freeciv"),
1044 "help_about", NULL, MGROUP_SAFE,
1045 NULL, FALSE },
1046 { NULL }
1047};
1048
1049enum {
1079
1081 { "clear_chat", clear_chat_logs_callback },
1082 { "save_chat", save_chat_logs_callback },
1083 { "local_options", local_options_callback },
1084 { "message_options", message_options_callback },
1085 { "server_options", server_options_callback },
1086 { "save_options", save_options_callback },
1087
1088#ifdef FREECIV_DEBUG
1089 { "reload_tileset", reload_tileset_callback },
1090#endif /* FREECIV_DEBUG */
1091
1092 { "game_save", save_game_callback },
1093 { "game_save_as", save_game_as_callback },
1094 { "save_mapimg", save_mapimg_callback },
1095 { "save_mapimg_as", save_mapimg_as_callback },
1096 { "volume_up", volume_up_callback },
1097 { "volume_down", volume_down_callback },
1098 { "leave", leave_callback },
1099 { "quit", quit_callback },
1100
1101 { "find_city", find_city_callback },
1102 { "worklists", worklists_callback },
1103 { "rally_dlg", rally_dialog_callback },
1104 { "infra_dlg", infra_dialog_callback },
1105 { "scenario_props", scenario_properties_callback },
1106 { "scenario_save", save_scenario_callback },
1107 { "lua_script", client_lua_script_callback },
1108
1109 { "center_view", center_view_callback },
1110 { "zoom_in", zoom_in_callback },
1111 { "zoom_out", zoom_out_callback },
1112
1113 { "select_single", select_single_callback },
1114 { "select_all_tile", select_all_on_tile_callback },
1115 { "select_same_type_tile", select_same_type_tile_callback },
1116 { "select_same_type_cont", select_same_type_cont_callback },
1117 { "select_same_type", select_same_type_callback },
1118 { "select_dlg", select_dialog_callback },
1119
1120 { "goto", unit_goto_callback },
1121 { "goto_city", unit_goto_city_callback },
1122 { "return", unit_return_callback },
1123 { "explore", unit_explore_callback },
1124 { "patrol", unit_patrol_callback },
1125 { "teleport", unit_teleport_callback },
1126 { "sentry", unit_sentry_callback },
1127 { "unsentry_all", unsentry_all_callback },
1128 { "board", unit_board_callback },
1129 { "deboard", unit_deboard_callback },
1130 { "unload_transporter", unit_unload_transporter_callback },
1131 { "homecity", unit_homecity_callback },
1132 { "upgrade", unit_upgrade_callback },
1133 { "convert", unit_convert_callback },
1134 { "disband", unit_disband_callback },
1135 { "do_action", do_action_callback },
1136 { "wait", unit_wait_callback },
1137 { "done", unit_done_callback },
1138
1139 { "build_city", build_city_callback },
1140 { "auto_work", auto_work_callback },
1141 { "build_road", build_road_callback },
1142 { "build_irrigation", build_irrigation_callback },
1143 { "build_mine", build_mine_callback },
1144 { "cultivate", cultivate_callback },
1145 { "plant", plant_callback },
1146 { "transform_terrain", transform_terrain_callback },
1147 { "connect_road", connect_road_callback },
1148 { "connect_rail", connect_rail_callback },
1149 { "connect_maglev", connect_maglev_callback },
1150 { "connect_irrigation", connect_irrigation_callback },
1151 { "clean", clean_callback },
1152
1153 { "fortify", fortify_callback },
1154 { "build_base_fortress", build_fortress_callback },
1155 { "build_base_airbase", build_airbase_callback },
1156 { "paradrop", paradrop_callback },
1157 { "pillage", pillage_callback },
1158
1159 { "revolution", revolution_callback },
1160
1161 { "map_view", map_view_callback },
1162 { "report_units", report_units_callback },
1163 { "report_nations", report_nations_callback },
1164 { "report_cities", report_cities_callback },
1165 { "report_economy", report_economy_callback },
1166 { "report_research", report_research_callback },
1167 { "tax_rates", tax_rate_callback },
1168 { "policies", multiplier_callback },
1169 { "report_wow", report_wow_callback },
1170 { "report_top_cities", report_top_cities_callback },
1171 { "report_messages", report_messages_callback },
1172 { "report_demographics", report_demographic_callback },
1173 { "report_spaceship", report_spaceship_callback },
1174 { "report_achievements", report_achievements_callback },
1175
1176 { "help_overview", help_overview_callback },
1177 { "help_playing", help_playing_callback },
1178 { "help_policies", help_policies_callback },
1179 { "help_counters", help_counters_callback },
1180 { "help_terrains", help_terrain_callback },
1181 { "help_economy", help_economy_callback },
1182 { "help_cities", help_cities_callback },
1183 { "help_improvements", help_improvements_callback },
1184 { "help_wonders", help_wonders_callback },
1185 { "help_units", help_units_callback },
1186 { "help_combat", help_combat_callback },
1187 { "help_zoc", help_zoc_callback },
1188 { "help_government", help_government_callback },
1189 { "help_diplomacy", help_diplomacy_callback },
1190 { "help_tech", help_tech_callback },
1191 { "help_space_race", help_space_race_callback },
1192 { "help_ruleset", help_ruleset_callback },
1193 { "help_tileset", help_tileset_callback },
1194 { "help_musicset", help_musicset_callback },
1195 { "help_nations", help_nations_callback },
1196 { "help_connecting", help_connecting_callback },
1197 { "help_controls", help_controls_callback },
1198 { "help_governor", help_governor_callback },
1199 { "help_chatline", help_chatline_callback },
1200 { "help_worklist_editor", help_worklist_editor_callback },
1201 { "help_languages", help_language_callback },
1202 { "help_copying", help_copying_callback },
1203 { "help_about", help_about_callback }
1204};
1205
1206static struct menu_entry_info *menu_entry_info_find(const char *key);
1207
1208/************************************************************************/
1212 GVariant *parameter,
1213 gpointer data)
1214{
1216}
1217
1218/************************************************************************/
1222 GVariant *parameter,
1223 gpointer data)
1224{
1226}
1227
1228/************************************************************************/
1232 GVariant *parameter,
1233 gpointer data)
1234{
1235 option_dialog_popup(_("Set local options"), client_optset);
1236}
1237
1238/************************************************************************/
1242 GVariant *parameter,
1243 gpointer data)
1244{
1246}
1247
1248/************************************************************************/
1252 GVariant *parameter,
1253 gpointer data)
1254{
1255 option_dialog_popup(_("Game Settings"), server_optset);
1256}
1257
1258/************************************************************************/
1262 GVariant *parameter,
1263 gpointer data)
1264{
1266}
1267
1268/************************************************************************/
1272 GVariant *parameter,
1273 gpointer data)
1274{
1275 struct menu_entry_info *info = (struct menu_entry_info *)data;
1276
1277 info->state ^= 1;
1279
1281
1284}
1285
1286#ifdef FREECIV_DEBUG
1287/************************************************************************/
1291 GVariant *parameter,
1292 gpointer data)
1293{
1294 tilespec_reread(NULL, TRUE, 1.0);
1295}
1296#endif /* FREECIV_DEBUG */
1297
1298/************************************************************************/
1302 gpointer data)
1303{
1305}
1306
1307/************************************************************************/
1311 gpointer data)
1312{
1314}
1315
1316/************************************************************************/
1320 gpointer data)
1321{
1323}
1324
1325/************************************************************************/
1329 gpointer data)
1330{
1332}
1333
1334/************************************************************************/
1339 gpointer data)
1340{
1342 result, NULL);
1343
1344 if (button == 0) {
1345 /* It might be killed already */
1346 if (client.conn.used) {
1347 /* It will also kill the server */
1349 }
1350 }
1351}
1352
1353/************************************************************************/
1357 GVariant *parameter,
1358 gpointer data)
1359{
1360 if (is_server_running()) {
1361 const char *buttons[] = { _("Leave"), _("Cancel"), NULL };
1362 GtkAlertDialog *dialog
1363 = gtk_alert_dialog_new(_("Leaving a local game will end it!"));
1364
1370 } else {
1372 }
1373}
1374
1375/************************************************************************/
1379 GVariant *parameter,
1380 gpointer data)
1381{
1382 struct option *poption = optset_option_by_name(client_optset, "sound_effects_volume");
1383
1387}
1388
1389/************************************************************************/
1393 GVariant *parameter,
1394 gpointer data)
1395{
1396 struct option *poption = optset_option_by_name(client_optset, "sound_effects_volume");
1397
1401}
1402
1403/************************************************************************/
1407 GVariant *parameter,
1408 gpointer data)
1409{
1411}
1412
1413/************************************************************************/
1417 GVariant *parameter,
1418 gpointer data)
1419{
1421}
1422
1423/************************************************************************/
1427 GVariant *parameter,
1428 gpointer data)
1429{
1431}
1432
1433/************************************************************************/
1437 GVariant *parameter, gpointer data)
1438{
1440}
1441
1442/************************************************************************/
1446 GVariant *parameter,
1447 gpointer data)
1448{
1450}
1451
1452/************************************************************************/
1465
1466/************************************************************************/
1470 GVariant *parameter,
1471 gpointer data)
1472{
1474}
1475
1476/************************************************************************/
1480 GVariant *parameter,
1481 gpointer data)
1482{
1484}
1485
1486/************************************************************************/
1490 GVariant *parameter,
1491 gpointer data)
1492{
1494}
1495
1496/************************************************************************/
1505
1506/************************************************************************/
1515
1516/************************************************************************/
1525
1526/************************************************************************/
1530 GVariant *parameter,
1531 gpointer data)
1532{
1534}
1535
1536/************************************************************************/
1546
1547/************************************************************************/
1556
1557/************************************************************************/
1561 GVariant *parameter,
1562 gpointer data)
1563{
1565}
1566
1567/************************************************************************/
1571 GVariant *parameter,
1572 gpointer data)
1573{
1575}
1576
1577/************************************************************************/
1581 GVariant *parameter,
1582 gpointer data)
1583{
1585}
1586
1587/************************************************************************/
1596
1597/************************************************************************/
1601 GVariant *parameter,
1602 gpointer data)
1603{
1605}
1606
1607/************************************************************************/
1611 GVariant *parameter,
1612 gpointer data)
1613{
1615}
1616
1617/************************************************************************/
1621 GVariant *parameter,
1622 gpointer data)
1623{
1625}
1626
1627/************************************************************************/
1631 GVariant *parameter,
1632 gpointer data)
1633{
1635}
1636
1637/************************************************************************/
1646
1647/************************************************************************/
1656
1657/************************************************************************/
1661 GVariant *parameter,
1662 gpointer data)
1663{
1665}
1666
1667/************************************************************************/
1676
1677/************************************************************************/
1681 GVariant *parameter,
1682 gpointer data)
1683{
1685}
1686
1687/************************************************************************/
1691 GVariant *parameter,
1692 gpointer data)
1693{
1695}
1696
1697/************************************************************************/
1706
1707/************************************************************************/
1711 GVariant *parameter,
1712 gpointer data)
1713{
1715}
1716
1717/************************************************************************/
1726
1727/************************************************************************/
1736
1737/************************************************************************/
1741 GVariant *parameter,
1742 gpointer data)
1743{
1745}
1746
1747/************************************************************************/
1756
1757/************************************************************************/
1766
1767/************************************************************************/
1776
1777/************************************************************************/
1781 GVariant *parameter,
1782 gpointer data)
1783{
1785}
1786
1787/************************************************************************/
1791 GVariant *parameter,
1792 gpointer data)
1793{
1795}
1796
1797/************************************************************************/
1801 GVariant *parameter,
1802 gpointer data)
1803{
1805
1806 /* Unreachable techs in reqtree on/off */
1808}
1809
1810struct menu_entry_option_map {
1811 const char *menu_entry;
1812 bool *option;
1813 int menu_pos;
1814};
1815
1817 { "SAVE_OPTIONS_ON_EXIT", &gui_options.save_options_on_exit, -1 },
1818 { "FULL_SCREEN", &(GUI_GTK_OPTION(fullscreen)), -1 },
1819 { "EDIT_MODE", &game.info.is_edit_mode, -1 },
1820 { "TOGGLE_FOG", &game.client.fog_of_war, -1 },
1821 { "SHOW_CITY_OUTLINES", &gui_options.draw_city_outlines, VMENU_CITY_OUTLINES },
1822 { "SHOW_CITY_OUTPUT", &gui_options.draw_city_output, VMENU_CITY_OUTPUT },
1823 { "SHOW_MAP_GRID", &gui_options.draw_map_grid, VMENU_MAP_GRID },
1824 { "SHOW_NAT_BORDERS", &gui_options.draw_borders, VMENU_NAT_BORDERS },
1825 { "SHOW_NATIVE_TILES", &gui_options.draw_native, VMENU_NATIVE_TILES },
1826 { "SHOW_CITY_FULL_BAR", &gui_options.draw_full_citybar, VMENU_CITY_FULL_BAR },
1827 { "SHOW_CITY_NAMES", &gui_options.draw_city_names, VMENU_CITY_NAMES },
1828 { "SHOW_CITY_GROWTH", &gui_options.draw_city_growth, VMENU_CITY_GROWTH },
1829 { "SHOW_CITY_PRODUCTIONS", &gui_options.draw_city_productions,
1831 { "SHOW_CITY_BUY_COST", &gui_options.draw_city_buycost, VMENU_CITY_BUY_COST },
1832 { "SHOW_CITY_TRADE_ROUTES", &gui_options.draw_city_trade_routes,
1834 { "SHOW_TERRAIN", &gui_options.draw_terrain, VMENU_TERRAIN },
1835 { "SHOW_COASTLINE", &gui_options.draw_coastline, VMENU_COASTLINE },
1836 { "SHOW_PATHS", &gui_options.draw_paths, VMENU_PATHS },
1837 { "SHOW_IRRIGATION", &gui_options.draw_irrigation, VMENU_IRRIGATION },
1838 { "SHOW_MINES", &gui_options.draw_mines, VMENU_MINES },
1839 { "SHOW_BASES", &gui_options.draw_fortress_airbase, VMENU_BASES },
1840 { "SHOW_RESOURCES", &gui_options.draw_specials, VMENU_RESOURCES },
1841 { "SHOW_HUTS", &gui_options.draw_huts, VMENU_HUTS },
1842 { "SHOW_POLLUTION", &gui_options.draw_pollution, VMENU_POLLUTION },
1843 { "SHOW_CITIES", &gui_options.draw_cities, VMENU_CITIES },
1844 { "SHOW_UNITS", &gui_options.draw_units, VMENU_UNITS },
1845 { "SHOW_UNIT_SOLID_BG", &gui_options.solid_color_behind_units, VMENU_UNIT_SOLID_BG },
1846 { "SHOW_UNIT_SHIELDS", &gui_options.draw_unit_shields , VMENU_UNIT_SHIELDS },
1847 { "SHOW_STACK_SIZE", &gui_options.draw_unit_stack_size, VMENU_STACK_SIZE },
1848 { "SHOW_FOCUS_UNIT", &gui_options.draw_focus_unit, VMENU_FOCUS_UNIT },
1849 { "SHOW_FOG_OF_WAR", &gui_options.draw_fog_of_war, VMENU_FOW },
1850
1851 { NULL, NULL, -1 }
1852};
1853
1854/************************************************************************/
1857static void view_menu_item_toggle(void (*cb)(void),
1858 bool updt_sensitivity,
1859 gpointer data)
1860{
1861 int i;
1862 struct menu_entry_info *info = (struct menu_entry_info *)data;
1863
1864 info->state ^= 1;
1865
1866 cb();
1867
1868 if (updt_sensitivity) {
1870 }
1871
1872 /* TODO: Make the information available directly from menu_entry_info,
1873 * se we don't need to do this search for it */
1874 for (i = 0; meoms[i].menu_entry != NULL; i++) {
1875 if (!strcmp(meoms[i].menu_entry, info->key)) {
1876 g_menu_remove(view_menu, meoms[i].menu_pos);
1879 return;
1880 }
1881 }
1882}
1883
1884/************************************************************************/
1893
1894/************************************************************************/
1898 GVariant *parameter,
1899 gpointer data)
1900{
1902}
1903
1904/************************************************************************/
1912
1913/************************************************************************/
1922
1923/************************************************************************/
1927 GVariant *parameter,
1928 gpointer data)
1929{
1931}
1932
1933/************************************************************************/
1942
1943/************************************************************************/
1947 GVariant *parameter,
1948 gpointer data)
1949{
1951}
1952
1953/************************************************************************/
1957 GVariant *parameter,
1958 gpointer data)
1959{
1961}
1962
1963/************************************************************************/
1972
1973/************************************************************************/
1982
1983/************************************************************************/
1992
1993/************************************************************************/
1997 GVariant *parameter,
1998 gpointer data)
1999{
2001}
2002
2003/************************************************************************/
2007 GVariant *parameter,
2008 gpointer data)
2009{
2011}
2012
2013/************************************************************************/
2017 GVariant *parameter,
2018 gpointer data)
2019{
2021}
2022
2023/************************************************************************/
2027 GVariant *parameter,
2028 gpointer data)
2029{
2031}
2032
2033/************************************************************************/
2037 GVariant *parameter,
2038 gpointer data)
2039{
2041}
2042
2043/************************************************************************/
2047 gpointer data)
2048{
2050}
2051
2052/************************************************************************/
2056 GVariant *parameter,
2057 gpointer data)
2058{
2060}
2061
2062/************************************************************************/
2066 gpointer data)
2067{
2069}
2070
2071/************************************************************************/
2079
2080/************************************************************************/
2084 gpointer data)
2085{
2087}
2088
2089/************************************************************************/
2093 gpointer data)
2094{
2096}
2097
2098/************************************************************************/
2107
2108/************************************************************************/
2117
2118/************************************************************************/
2127
2128/************************************************************************/
2132 GVariant *parameter,
2133 gpointer data)
2134{
2136}
2137
2138/************************************************************************/
2146
2147/************************************************************************/
2151 gpointer data)
2152{
2153 struct menu_entry_info *info = (struct menu_entry_info *)data;
2154
2155 info->state ^= 1;
2157
2159
2161
2164}
2165
2166/************************************************************************/
2170 GVariant *parameter,
2171 gpointer data)
2172{
2173 struct menu_entry_info *info = (struct menu_entry_info *)data;
2174
2175 info->state ^= 1;
2176
2178
2180
2183}
2184
2185/************************************************************************/
2198
2199/************************************************************************/
2203 gpointer data)
2204{
2206}
2207
2208/************************************************************************/
2216
2217/************************************************************************/
2226
2227/************************************************************************/
2236
2237/************************************************************************/
2246
2247/************************************************************************/
2256
2257/************************************************************************/
2261 GVariant *parameter,
2262 gpointer data)
2263{
2265}
2266
2267/************************************************************************/
2271 GVariant *parameter,
2272 gpointer data)
2273{
2275}
2276
2277/************************************************************************/
2281 GVariant *parameter,
2282 gpointer data)
2283{
2285}
2286
2287/************************************************************************/
2291 GVariant *parameter,
2292 gpointer data)
2293{
2294 key_unit_wait();
2295}
2296
2297/************************************************************************/
2301 GVariant *parameter,
2302 gpointer data)
2303{
2304 key_unit_done();
2305}
2306
2307/************************************************************************/
2311 gpointer data)
2312{
2313 key_unit_goto();
2314}
2315
2316/************************************************************************/
2320 GVariant *parameter,
2321 gpointer data)
2322{
2323 int sub_target = NO_TARGET;
2324 struct action *paction = (struct action *)data;
2325
2327
2329 case ASTK_BUILDING:
2330 {
2332 "end_building");
2334 sub_target = improvement_number(pbuilding);
2335 }
2336 break;
2337 case ASTK_TECH:
2338 {
2340 "end_tech");
2342 sub_target = advance_number(ptech);
2343 }
2344 break;
2345 case ASTK_EXTRA:
2347 {
2348 struct extra_type *pextra = g_object_get_data(G_OBJECT(action),
2349 "end_extra");
2350 fc_assert_ret(pextra != NULL);
2351 sub_target = extra_number(pextra);
2352 }
2353 break;
2354 case ASTK_SPECIALIST:
2355 {
2357 "end_specialist");
2358 fc_assert_ret(nullptr != pspec);
2359 sub_target = specialist_number(pspec);
2360 }
2361 break;
2362 case ASTK_NONE:
2363 sub_target = NO_TARGET;
2364 break;
2365 case ASTK_COUNT:
2366 /* Should not exits */
2368 break;
2369 }
2370
2372}
2373
2374/************************************************************************/
2378 GVariant *parameter,
2379 gpointer data)
2380{
2381 if (get_num_units_in_focus() > 0) {
2383 }
2384}
2385
2386/************************************************************************/
2397
2398/************************************************************************/
2402 GVariant *parameter,
2403 gpointer data)
2404{
2406}
2407
2408/************************************************************************/
2412 gpointer data)
2413{
2415}
2416
2417/************************************************************************/
2421 gpointer data)
2422{
2424}
2425
2426/************************************************************************/
2430 GVariant *parameter,
2431 gpointer data)
2432{
2434}
2435
2436/************************************************************************/
2440 GVariant *parameter,
2441 gpointer data)
2442{
2444}
2445
2446/************************************************************************/
2457
2458/************************************************************************/
2468
2469/************************************************************************/
2479
2480/************************************************************************/
2484 GVariant *parameter,
2485 gpointer data)
2486{
2488}
2489
2490/************************************************************************/
2494 GVariant *parameter,
2495 gpointer data)
2496{
2498}
2499
2500/************************************************************************/
2504 GVariant *parameter,
2505 gpointer data)
2506{
2508}
2509
2510/************************************************************************/
2514 GVariant *parameter,
2515 gpointer data)
2516{
2518}
2519
2520/************************************************************************/
2524 GVariant *parameter,
2525 gpointer data)
2526{
2528}
2529
2530/************************************************************************/
2534 GVariant *parameter,
2535 gpointer data)
2536{
2538 /* FIXME: this can provide different items for different units...
2539 * not good! */
2540 /* Enable the button for adding to a city in all cases, so we
2541 get an eventual error message from the server if we try. */
2547 }
2549}
2550
2551/************************************************************************/
2555 GVariant *parameter,
2556 gpointer data)
2557{
2559}
2560
2561/************************************************************************/
2565 GVariant *parameter,
2566 gpointer data)
2567{
2569 /* FIXME: this can provide different actions for different units...
2570 * not good! */
2572 EC_ROAD,
2574 punit);
2575 bool building_road = FALSE;
2576
2577 if (tgt != NULL
2581 }
2582
2585 }
2587}
2588
2589/************************************************************************/
2593 GVariant *parameter,
2594 gpointer data)
2595{
2597}
2598
2599/************************************************************************/
2603 GVariant *parameter,
2604 gpointer data)
2605{
2607}
2608
2609/************************************************************************/
2613 GVariant *parameter,
2614 gpointer data)
2615{
2617}
2618
2619/************************************************************************/
2623 GVariant *parameter,
2624 gpointer data)
2625{
2626 key_unit_mine();
2627}
2628
2629/************************************************************************/
2633 GVariant *parameter,
2634 gpointer data)
2635{
2637
2638 if (proad != NULL) {
2639 struct extra_type *tgt;
2640
2641 tgt = road_extra_get(proad);
2642
2644 }
2645}
2646
2647/************************************************************************/
2651 GVariant *parameter,
2652 gpointer data)
2653{
2655
2656 if (prail != NULL) {
2657 struct extra_type *tgt;
2658
2659 tgt = road_extra_get(prail);
2660
2662 }
2663}
2664
2665/************************************************************************/
2669 GVariant *parameter,
2670 gpointer data)
2671{
2673
2674 if (pmaglev != NULL) {
2675 struct extra_type *tgt;
2676
2677 tgt = road_extra_get(pmaglev);
2678
2680 }
2681}
2682
2683/************************************************************************/
2687 GVariant *parameter,
2688 gpointer data)
2689{
2691
2692 if (extra_type_list_size(extras) > 0) {
2693 struct extra_type *pextra;
2694
2696
2698 }
2699}
2700
2701/************************************************************************/
2705 GVariant *parameter,
2706 gpointer data)
2707{
2709}
2710
2711/************************************************************************/
2715 gpointer data)
2716{
2718}
2719
2720/************************************************************************/
2724 gpointer data)
2725{
2727}
2728
2729/************************************************************************/
2733 gpointer data)
2734{
2736}
2737
2738/************************************************************************/
2742 GVariant *parameter,
2743 gpointer data)
2744{
2746}
2747
2748/************************************************************************/
2752 GVariant *parameter,
2753 gpointer data)
2754{
2756}
2757
2758/************************************************************************/
2762 GVariant *parameter,
2763 gpointer data)
2764{
2766}
2767
2768/************************************************************************/
2772 gpointer data)
2773{
2775}
2776
2777/************************************************************************/
2781 gpointer data)
2782{
2784}
2785
2786/************************************************************************/
2790 GVariant *parameter,
2791 gpointer data)
2792{
2794}
2795
2796/************************************************************************/
2800 GVariant *parameter,
2801 gpointer data)
2802{
2804}
2805
2806/************************************************************************/
2810 GVariant *parameter,
2811 gpointer data)
2812{
2813 struct extra_type *pextra = data;
2814
2818}
2819
2820/************************************************************************/
2824 GVariant *parameter,
2825 gpointer data)
2826{
2827 struct extra_type *pextra = data;
2828
2831 pextra);
2833}
2834
2835/************************************************************************/
2839 GVariant *parameter,
2840 gpointer data)
2841{
2842 struct extra_type *pextra = data;
2843
2846 pextra);
2848}
2849
2850/************************************************************************/
2854 GVariant *parameter,
2855 gpointer data)
2856{
2857 struct extra_type *pextra = data;
2858
2861 pextra);
2863}
2864
2865/************************************************************************/
2869 GVariant *parameter,
2870 gpointer data)
2871{
2872 struct extra_type *pextra = data;
2873
2877 pextra);
2878 }
2880}
2881
2882/************************************************************************/
2886 GVariant *parameter,
2887 gpointer data)
2888{
2890}
2891
2892/************************************************************************/
2896 GVariant *parameter,
2897 gpointer data)
2898{
2899 zoom_step_up();
2900}
2901
2902/************************************************************************/
2906 GVariant *parameter,
2907 gpointer data)
2908{
2910}
2911
2912/************************************************************************/
2916 GVariant *parameter,
2917 gpointer data)
2918{
2920}
2921
2922/************************************************************************/
2926 GVariant *parameter,
2927 gpointer data)
2928
2929{
2931}
2932
2933/************************************************************************/
2942
2943/************************************************************************/
2952
2953/************************************************************************/
2957 GVariant *parameter,
2958 gpointer data)
2959{
2960 if (NULL != client.conn.playing) {
2962 }
2963}
2964
2965/************************************************************************/
2974
2975/************************************************************************/
2984
2985/************************************************************************/
2994
2995/************************************************************************/
3000{
3001 char actname[150];
3002 GMenuItem *item;
3003
3004 fc_snprintf(actname, sizeof(actname), "app.%s(%s)",
3005 info->action, info->state ? "true" : "false");
3006 item = g_menu_item_new(Q_(info->name), NULL);
3008
3009 if (info->accl != NULL) {
3010 const char *accls[2] = { info->accl, NULL };
3011
3013 }
3014
3015 return item;
3016}
3017
3018/************************************************************************/
3023{
3025}
3026
3027/************************************************************************/
3030static void menu_entry_init(GMenu *sub, const char *key)
3031{
3033
3034 if (info != NULL) {
3035 GMenuItem *item;
3036
3037 if (info->toggle != NULL) {
3039 } else {
3040 char actname[150];
3041
3042 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
3043 item = g_menu_item_new(Q_(info->name), actname);
3044 }
3045
3046 /* Should be menu_item_append_unref()? */
3049 }
3050}
3051
3052/************************************************************************/
3056{
3057 int i;
3058
3059 for (i = 0; meoms[i].menu_entry != NULL; i++) {
3060 struct menu_entry_info *info = menu_entry_info_find(meoms[i].menu_entry);
3061
3062 if (meoms[i].option != NULL) {
3063 info->state = *meoms[i].option;
3064 } else {
3065 info->state = FALSE; /* Best guess we have */
3066 }
3067 }
3068}
3069
3070/************************************************************************/
3074{
3075 int i;
3077
3078 /* Simple entries */
3081
3082 /* Toggles */
3083 for (i = 0; menu_entries[i].key != NULL; i++) {
3084 if (menu_entries[i].toggle != NULL) {
3085 GSimpleAction *act;
3086 GVariant *var = g_variant_new("b", TRUE);
3087
3090 g_signal_connect(act, "change-state",
3092 (gpointer)&(menu_entries[i]));
3093 }
3094 }
3095
3097
3098 for (i = 0; menu_entries[i].key != NULL; i++) {
3099 if (menu_entries[i].accl != NULL && menu_entries[i].toggle == NULL) {
3100 const char *accls[2] = { menu_entries[i].accl, NULL };
3101 char actname[150];
3102
3103 fc_snprintf(actname, sizeof(actname), "app.%s", menu_entries[i].action);
3104
3106 }
3107 }
3108}
3109
3110/************************************************************************/
3113static void register_bg_actions(GActionMap *map, int bg)
3114{
3115 GSimpleAction *act;
3116 char actname[256];
3117
3118 fc_snprintf(actname, sizeof(actname), "bg_select_%d", bg);
3121 g_signal_connect(act, "activate",
3123
3124 fc_snprintf(actname, sizeof(actname), "bg_assign_%d", bg);
3127 g_signal_connect(act, "activate",
3129
3130 fc_snprintf(actname, sizeof(actname), "bg_append_%d", bg);
3133 g_signal_connect(act, "activate",
3135}
3136
3137/************************************************************************/
3141{
3142 GMenu *menubar;
3143 GMenu *topmenu;
3144 GMenu *submenu;
3145 int i;
3146
3148
3149 menubar = g_menu_new();
3150
3151 topmenu = g_menu_new();
3152 menu_entry_init(topmenu, "CLEAR_CHAT_LOGS");
3153 menu_entry_init(topmenu, "SAVE_CHAT_LOGS");
3154
3156 menu_entry_init(options_menu, "LOCAL_OPTIONS");
3157 menu_entry_init(options_menu, "MESSAGE_OPTIONS");
3158 menu_entry_init(options_menu, "SERVER_OPTIONS");
3159 menu_entry_init(options_menu, "SAVE_OPTIONS");
3160 menu_entry_init(options_menu, "SAVE_OPTIONS_ON_EXIT");
3161
3163
3164#ifdef FREECIV_DEBUG
3165 menu_entry_init(topmenu, "RELOAD_TILESET");
3166#endif /* FREECIV_DEBUG */
3167
3168 menu_entry_init(topmenu, "GAME_SAVE");
3169 menu_entry_init(topmenu, "GAME_SAVE_AS");
3170 menu_entry_init(topmenu, "MAPIMG_SAVE");
3171 menu_entry_init(topmenu, "MAPIMG_SAVE_AS");
3172 menu_entry_init(topmenu, "VOLUME_UP");
3173 menu_entry_init(topmenu, "VOLUME_DOWN");
3174 menu_entry_init(topmenu, "LEAVE");
3175 menu_entry_init(topmenu, "QUIT");
3176
3178
3180
3181 menu_entry_init(edit_menu, "FIND_CITY");
3182 menu_entry_init(edit_menu, "WORKLISTS");
3183 menu_entry_init(edit_menu, "RALLY_DLG");
3184 menu_entry_init(edit_menu, "INFRA_DLG");
3185 menu_entry_init(edit_menu, "EDIT_MODE");
3186 menu_entry_init(edit_menu, "TOGGLE_FOG");
3187 menu_entry_init(edit_menu, "SCENARIO_PROPERTIES");
3188 menu_entry_init(edit_menu, "SCENARIO_SAVE");
3189 menu_entry_init(edit_menu, "CLIENT_LUA_SCRIPT");
3190
3192
3194
3195 menu_entry_init(view_menu, "SHOW_CITY_OUTLINES");
3196 menu_entry_init(view_menu, "SHOW_CITY_OUTPUT");
3197 menu_entry_init(view_menu, "SHOW_MAP_GRID");
3198 menu_entry_init(view_menu, "SHOW_NAT_BORDERS");
3199 menu_entry_init(view_menu, "SHOW_NATIVE_TILES");
3200 menu_entry_init(view_menu, "SHOW_CITY_FULL_BAR");
3201 menu_entry_init(view_menu, "SHOW_CITY_NAMES");
3202 menu_entry_init(view_menu, "SHOW_CITY_GROWTH");
3203 menu_entry_init(view_menu, "SHOW_CITY_PRODUCTIONS");
3204 menu_entry_init(view_menu, "SHOW_CITY_BUY_COST");
3205 menu_entry_init(view_menu, "SHOW_CITY_TRADE_ROUTES");
3206 menu_entry_init(view_menu, "SHOW_TERRAIN");
3207 menu_entry_init(view_menu, "SHOW_COASTLINE");
3208 menu_entry_init(view_menu, "SHOW_PATHS");
3209 menu_entry_init(view_menu, "SHOW_IRRIGATION");
3210 menu_entry_init(view_menu, "SHOW_MINES");
3211 menu_entry_init(view_menu, "SHOW_BASES");
3212 menu_entry_init(view_menu, "SHOW_RESOURCES");
3213 menu_entry_init(view_menu, "SHOW_HUTS");
3214 menu_entry_init(view_menu, "SHOW_POLLUTION");
3215 menu_entry_init(view_menu, "SHOW_CITIES");
3216 menu_entry_init(view_menu, "SHOW_UNITS");
3217 menu_entry_init(view_menu, "SHOW_UNIT_SOLID_BG");
3218 menu_entry_init(view_menu, "SHOW_UNIT_SHIELDS");
3219 menu_entry_init(view_menu, "SHOW_STACK_SIZE");
3220 menu_entry_init(view_menu, "SHOW_FOCUS_UNIT");
3221
3222 menu_entry_init(view_menu, "SHOW_FOG_OF_WAR");
3223
3224 menu_entry_init(view_menu, "FULL_SCREEN");
3225 menu_entry_init(view_menu, "CENTER_VIEW");
3226 menu_entry_init(view_menu, "ZOOM_IN");
3227 menu_entry_init(view_menu, "ZOOM_OUT");
3228
3230
3231 topmenu = g_menu_new();
3232
3233 menu_entry_init(topmenu, "SELECT_SINGLE");
3234 menu_entry_init(topmenu, "SELECT_ALL_ON_TILE");
3235 menu_entry_init(topmenu, "SELECT_SAME_TYPE_TILE");
3236 menu_entry_init(topmenu, "SELECT_SAME_TYPE_CONT");
3237 menu_entry_init(topmenu, "SELECT_SAME_TYPE");
3238 menu_entry_init(topmenu, "SELECT_DLG");
3239
3241
3243
3244 menu_entry_init(unit_menu, "UNIT_GOTO");
3245
3246 /* Placeholder submenu (so that menu update has something to replace) */
3247 submenu = g_menu_new();
3249
3250 menu_entry_init(unit_menu, "UNIT_GOTO_CITY");
3251 menu_entry_init(unit_menu, "UNIT_RETURN");
3252 menu_entry_init(unit_menu, "UNIT_EXPLORE");
3253 menu_entry_init(unit_menu, "UNIT_PATROL");
3254 menu_entry_init(unit_menu, "UNIT_TELEPORT");
3255 menu_entry_init(unit_menu, "UNIT_SENTRY");
3256 menu_entry_init(unit_menu, "UNSENTRY_ALL");
3257 menu_entry_init(unit_menu, "UNIT_BOARD");
3258 menu_entry_init(unit_menu, "UNIT_DEBOARD");
3259 menu_entry_init(unit_menu, "UNIT_UNLOAD_TRANSPORTER");
3260 menu_entry_init(unit_menu, "UNIT_HOMECITY");
3261 menu_entry_init(unit_menu, "UNIT_UPGRADE");
3262 menu_entry_init(unit_menu, "UNIT_CONVERT");
3263 menu_entry_init(unit_menu, "UNIT_DISBAND");
3264 menu_entry_init(unit_menu, "DO_ACTION");
3265 menu_entry_init(unit_menu, "UNIT_WAIT");
3266 menu_entry_init(unit_menu, "UNIT_DONE");
3267
3269
3271 menu_entry_init(work_menu, "BUILD_CITY");
3272 menu_entry_init(work_menu, "AUTO_WORKER");
3273
3274 /* Placeholder submenus (so that menu update has something to replace) */
3275 submenu = g_menu_new();
3277 submenu = g_menu_new();
3278 submenu_append_unref(work_menu, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3279 submenu = g_menu_new();
3281 submenu = g_menu_new();
3282 submenu_append_unref(work_menu, _("_Clean Nuisance"), G_MENU_MODEL(submenu));
3283
3284 menu_entry_init(work_menu, "BUILD_ROAD");
3285 menu_entry_init(work_menu, "BUILD_IRRIGATION");
3286 menu_entry_init(work_menu, "BUILD_MINE");
3287 menu_entry_init(work_menu, "CULTIVATE");
3288 menu_entry_init(work_menu, "PLANT");
3289 menu_entry_init(work_menu, "TRANSFORM_TERRAIN");
3290 menu_entry_init(work_menu, "CONNECT_ROAD");
3291 menu_entry_init(work_menu, "CONNECT_RAIL");
3292 menu_entry_init(work_menu, "CONNECT_MAGLEV");
3293 menu_entry_init(work_menu, "CONNECT_IRRIGATION");
3294 menu_entry_init(work_menu, "CLEAN");
3295
3297
3299 menu_entry_init(combat_menu, "FORTIFY");
3300 menu_entry_init(combat_menu, "BUILD_FORTRESS");
3301 menu_entry_init(combat_menu, "BUILD_AIRBASE");
3302
3303 /* Placeholder submenu (so that menu update has something to replace) */
3304 submenu = g_menu_new();
3306
3308
3309 menu_entry_init(combat_menu, "PARADROP");
3310 menu_entry_init(combat_menu, "PILLAGE");
3311
3312 gov_menu = g_menu_new();
3313
3314 menu_entry_init(gov_menu, "MAP_VIEW");
3315 menu_entry_init(gov_menu, "REPORT_UNITS");
3316 menu_entry_init(gov_menu, "REPORT_NATIONS");
3317 menu_entry_init(gov_menu, "REPORT_CITIES");
3318 menu_entry_init(gov_menu, "REPORT_ECONOMY");
3319 menu_entry_init(gov_menu, "REPORT_RESEARCH");
3320 menu_entry_init(gov_menu, "TAX_RATES");
3321 menu_entry_init(gov_menu, "POLICIES");
3322
3323 /* Placeholder submenu (so that menu update has something to replace) */
3324 submenu = g_menu_new();
3326
3327 menu_entry_init(gov_menu, "REPORT_WOW");
3328 menu_entry_init(gov_menu, "REPORT_TOP_CITIES");
3329 menu_entry_init(gov_menu, "REPORT_MESSAGES");
3330 menu_entry_init(gov_menu, "REPORT_DEMOGRAPHIC");
3331 menu_entry_init(gov_menu, "REPORT_SPACESHIP");
3332 menu_entry_init(gov_menu, "REPORT_ACHIEVEMENTS");
3333
3334 submenu_append_unref(menubar, _("C_ivilization"), G_MENU_MODEL(gov_menu));
3335
3336 topmenu = g_menu_new();
3337
3338 /* Keys exist for 4 battle groups */
3340
3341 for (i = 0; i < MAX_NUM_BATTLEGROUPS; i++) {
3342 char key[128];
3343
3344 /* User side battle group numbers start from 1 */
3345 fc_snprintf(key, sizeof(key), "BG_SELECT_%d", i + 1);
3347 fc_snprintf(key, sizeof(key), "BG_ASSIGN_%d", i + 1);
3349 fc_snprintf(key, sizeof(key), "BG_APPEND_%d", i + 1);
3351
3353 }
3354
3355 submenu_append_unref(menubar, _("_Battle Groups"), G_MENU_MODEL(topmenu));
3356
3357 topmenu = g_menu_new();
3358
3359 menu_entry_init(topmenu, "HELP_OVERVIEW");
3360 menu_entry_init(topmenu, "HELP_PLAYING");
3361 menu_entry_init(topmenu, "HELP_POLICIES");
3362 menu_entry_init(topmenu, "HELP_TERRAIN");
3363 menu_entry_init(topmenu, "HELP_ECONOMY");
3364 menu_entry_init(topmenu, "HELP_CITIES");
3365 menu_entry_init(topmenu, "HELP_IMPROVEMENTS");
3366 menu_entry_init(topmenu, "HELP_WONDERS");
3367 menu_entry_init(topmenu, "HELP_UNITS");
3368 menu_entry_init(topmenu, "HELP_COMBAT");
3369 menu_entry_init(topmenu, "HELP_COUNTERS");
3370 menu_entry_init(topmenu, "HELP_ZOC");
3371 menu_entry_init(topmenu, "HELP_GOVERNMENT");
3372 menu_entry_init(topmenu, "HELP_DIPLOMACY");
3373 menu_entry_init(topmenu, "HELP_TECH");
3374 menu_entry_init(topmenu, "HELP_SPACE_RACE");
3375 menu_entry_init(topmenu, "HELP_RULESET");
3376 menu_entry_init(topmenu, "HELP_TILESET");
3377 menu_entry_init(topmenu, "HELP_MUSICSET");
3378 menu_entry_init(topmenu, "HELP_NATIONS");
3379 menu_entry_init(topmenu, "HELP_CONNECTING");
3380 menu_entry_init(topmenu, "HELP_CONTROLS");
3381 menu_entry_init(topmenu, "HELP_GOVERNOR");
3382 menu_entry_init(topmenu, "HELP_CHATLINE");
3383 menu_entry_init(topmenu, "HELP_WORKLIST_EDITOR");
3384 menu_entry_init(topmenu, "HELP_LANGUAGES");
3385 menu_entry_init(topmenu, "HELP_COPYING");
3386 menu_entry_init(topmenu, "HELP_ABOUT");
3387
3389
3390 menus_built = TRUE;
3391
3393
3394 return menubar;
3395}
3396
3397/************************************************************************/
3400static struct menu_entry_info *menu_entry_info_find(const char *key)
3401{
3402 int i;
3403
3404 for (i = 0; menu_entries[i].key != NULL; i++) {
3405 if (!strcmp(key, menu_entries[i].key)) {
3406 return &(menu_entries[i]);
3407 }
3408 }
3409
3410 return NULL;
3411}
3412
3413/************************************************************************/
3417 struct menu_entry_info *info,
3419{
3420 GAction *act = g_action_map_lookup_action(map, info->action);
3421
3422 if (act != NULL) {
3424 }
3425}
3426
3427/************************************************************************/
3431 const char *key,
3433{
3435
3436 if (info != NULL) {
3438 }
3439}
3440
3441/************************************************************************/
3445 enum menu_entry_grouping group,
3447{
3448 int i;
3449
3450 for (i = 0; menu_entries[i].key != NULL; i++) {
3451 if (menu_entries[i].grouping & group) {
3453 }
3454 }
3455}
3456
3457/************************************************************************/
3460static void menus_rename(GMenu *parent, int index, const char *key,
3461 const char *new_name)
3462{
3464
3465 if (info != NULL) {
3466 char actname[150];
3467 GMenuItem *item;
3468
3469 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
3470 g_menu_remove(parent, index);
3471
3472 item = g_menu_item_new(new_name, actname);
3474 }
3475}
3476
3477/************************************************************************/
3481{
3482 /* The "full" city bar (i.e. the new way of drawing the
3483 * city name), can draw the city growth even without drawing
3484 * the city name. But the old method cannot. */
3486 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", TRUE);
3487 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES", TRUE);
3488 } else {
3489 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", gui_options.draw_city_names);
3490 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES",
3492 }
3493
3494 menu_entry_set_sensitive(map, "SHOW_CITY_BUY_COST",
3496 menu_entry_set_sensitive(map, "SHOW_COASTLINE", !gui_options.draw_terrain);
3497 menu_entry_set_sensitive(map, "SHOW_UNIT_SOLID_BG",
3499 menu_entry_set_sensitive(map, "SHOW_UNIT_SHIELDS",
3501 menu_entry_set_sensitive(map, "SHOW_FOCUS_UNIT", !gui_options.draw_units);
3502}
3503
3504/************************************************************************/
3510static const char *get_tile_change_menu_text(struct tile *ptile,
3511 enum unit_activity activity)
3512{
3513 struct tile *newtile = tile_virtual_new(ptile);
3514 const char *text;
3515
3516 tile_apply_activity(newtile, activity, NULL);
3517 text = tile_get_info_text(newtile, FALSE, 0);
3519
3520 return text;
3521}
3522
3523/************************************************************************/
3527{
3530 GMenu *submenu;
3531 int i, j;
3532 int tgt_kind_group;
3533 struct unit_list *punits;
3534 unsigned num_units;
3535 struct menu_entry_info *info;
3536 struct road_type *proad;
3537 struct extra_type_list *extras;
3538 bool conn_possible;
3539
3541 return;
3542 }
3543
3545
3546 submenu = g_menu_new();
3547
3548 i = 0;
3549 j = 0;
3550
3551 /* Add the new action entries grouped by target kind. */
3554 struct action *paction = action_by_number(act_id);
3555 GSimpleAction *act;
3556 char actname[256];
3557 char name[256];
3558
3559 if (action_id_get_actor_kind(act_id) != AAK_UNIT) {
3560 /* This action isn't performed by a unit. */
3561 continue;
3562 }
3563
3565 /* Wrong group. */
3566 continue;
3567 }
3568
3569 if (!units_can_do_action(punits, act_id, TRUE)) {
3570 continue;
3571 }
3572
3573 /* Create and add the menu item. */
3574 fc_snprintf(actname, sizeof(actname), "action_%d", i);
3577
3578 fc_snprintf(name, sizeof(name), "%s",
3579 action_get_ui_name_mnemonic(act_id, "_"));
3580 fc_snprintf(actname, sizeof(actname), "app.action_%d", i++);
3581
3582 if (action_id_has_complex_target(act_id)) {
3584 char subname[256];
3585
3586#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_) \
3587{ \
3588 fc_snprintf(actname, sizeof(actname), "subtgt_%d", j); \
3589 act = g_simple_action_new(actname, NULL); \
3590 g_action_map_add_action(map, G_ACTION(act)); \
3591 g_object_set_data(G_OBJECT(act), _sub_target_key_, _sub_target_); \
3592 g_signal_connect(act, "activate", G_CALLBACK(unit_goto_and_callback), \
3593 paction); \
3594 fc_snprintf(subname, sizeof(subname), "%s", _sub_target_name_); \
3595 fc_snprintf(actname, sizeof(actname), "app.subtgt_%d", j++); \
3596 menu_item_append_unref(sub_target_menu, \
3597 g_menu_item_new(subname, actname)); \
3598}
3599
3601 case ASTK_BUILDING:
3603 CREATE_SUB_ITEM(pimpr, "end_building",
3606 break;
3607 case ASTK_TECH:
3609 CREATE_SUB_ITEM(ptech, "end_tech",
3612 break;
3613 case ASTK_EXTRA:
3615 extra_type_iterate(pextra) {
3616 if (!actres_creates_extra(paction->result, pextra)
3617 && !actres_removes_extra(paction->result, pextra)) {
3618 /* Not relevant */
3619 continue;
3620 }
3621 CREATE_SUB_ITEM(pextra, "end_extra",
3622 extra_name_translation(pextra));
3624 break;
3625 case ASTK_SPECIALIST:
3628
3629 CREATE_SUB_ITEM(pspec, "end_specialist",
3632 break;
3633 case ASTK_NONE:
3634 /* Should not be here. */
3636 break;
3637 case ASTK_COUNT:
3638 /* Should not exits */
3640 break;
3641 }
3642
3643#undef CREATE_SUB_ITEM
3644
3646 } else {
3647 g_signal_connect(act, "activate",
3650 }
3652 }
3654 g_menu_insert_submenu(unit_menu, 1, _("Go to a_nd..."), G_MENU_MODEL(submenu));
3655
3656 submenu = g_menu_new();
3657
3659 menu_entry_init(submenu, "START_REVOLUTION");
3660 }
3661
3662 i = 0;
3665 char name[256];
3666 char actname[256];
3667 GSimpleAction *act;
3668
3669 fc_snprintf(actname, sizeof(actname), "government_%d", i);
3673 g_signal_connect(act, "activate", G_CALLBACK(government_callback), g);
3674
3675 /* TRANS: %s is a government name */
3676 fc_snprintf(name, sizeof(name), _("%s..."),
3678 fc_snprintf(actname, sizeof(actname), "app.government_%d", i++);
3680 }
3683 g_menu_insert_submenu(gov_menu, 8, _("_Government"), G_MENU_MODEL(submenu));
3684
3685 submenu = g_menu_new();
3686
3688 if (pextra->buildable) {
3689 char actname[256];
3690 GSimpleAction *act;
3691
3692 fc_snprintf(actname, sizeof(actname), "path_%d", i);
3697 pextra));
3699 g_signal_connect(act, "activate", G_CALLBACK(road_callback), pextra);
3700
3701 fc_snprintf(actname, sizeof(actname), "app.path_%d", i++);
3704 }
3706
3709
3710 submenu = g_menu_new();
3711
3713 if (pextra->buildable) {
3714 char actname[256];
3715 GSimpleAction *act;
3716
3717 fc_snprintf(actname, sizeof(actname), "irrig_%d", i);
3722 pextra));
3724 g_signal_connect(act, "activate", G_CALLBACK(irrigation_callback), pextra);
3725
3726 fc_snprintf(actname, sizeof(actname), "app.irrig_%d", i++);
3729 }
3731
3733 g_menu_insert_submenu(work_menu, 3, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3734
3735 submenu = g_menu_new();
3736
3738 if (pextra->buildable) {
3739 char actname[256];
3740 GSimpleAction *act;
3741
3742 fc_snprintf(actname, sizeof(actname), "mine_%d", i);
3747 pextra));
3749 g_signal_connect(act, "activate", G_CALLBACK(mine_callback), pextra);
3750
3751 fc_snprintf(actname, sizeof(actname), "app.mine_%d", i++);
3754 }
3756
3759
3760 submenu = g_menu_new();
3761
3763 char actname[256];
3764 GSimpleAction *act;
3765
3766 fc_snprintf(actname, sizeof(actname), "clean_%d", i);
3771 pextra));
3773 g_signal_connect(act, "activate", G_CALLBACK(clean_menu_callback), pextra);
3774
3775 fc_snprintf(actname, sizeof(actname), "app.clean_%d", i++);
3779
3781 g_menu_insert_submenu(work_menu, 5, _("_Clean Nuisance"),
3783
3784 submenu = g_menu_new();
3785
3787 if (pextra->buildable) {
3788 char actname[256];
3789 GSimpleAction *act;
3790
3791 fc_snprintf(actname, sizeof(actname), "base_%d", i);
3796 pextra));
3798 g_signal_connect(act, "activate", G_CALLBACK(base_callback), pextra);
3799
3800 fc_snprintf(actname, sizeof(actname), "app.base_%d", i++);
3803 }
3805
3808
3810 char acttext[128], irrtext[128], mintext[128], transtext[128];
3811 char cultext[128], plantext[128];
3812 struct terrain *pterrain;
3813
3814 if (!can_client_change_view()) {
3815 return;
3816 }
3817
3819
3820 if (num_units > 0) {
3821 const struct tile *ptile = NULL;
3822 const struct unit_type *ptype = NULL;
3823
3825 fc_assert((ptile == NULL) == (ptype == NULL));
3826
3827 if (ptile || ptype) {
3828 if (unit_tile(punit) != ptile) {
3830 }
3831 if (unit_type_get(punit) != ptype) {
3833 }
3834 } else {
3835 ptile = unit_tile(punit);
3837 }
3839 }
3840
3845 num_units > 0
3847 && !editor_is_active());
3848
3850 menu_entry_set_sensitive(map, "VOLUME_UP", !audio_is_dummy_plugin());
3851 menu_entry_set_sensitive(map, "VOLUME_DOWN", !audio_is_dummy_plugin());
3852
3853 menu_entry_set_sensitive(map, "GAME_SAVE_AS",
3855 menu_entry_set_sensitive(map, "GAME_SAVE",
3857
3858 menu_entry_set_sensitive(map, "SERVER_OPTIONS", client.conn.established);
3859
3860 menu_entry_set_sensitive(map, "LEAVE",
3862
3864 menu_entry_set_sensitive(map, "INFRA_DLG", terrain_control.infrapoints);
3865
3866 menu_entry_set_sensitive(map, "POLICIES", multiplier_count() > 0);
3867 menu_entry_set_sensitive(map, "REPORT_TOP_CITIES", game.info.top_cities_count > 0);
3868 menu_entry_set_sensitive(map, "REPORT_SPACESHIP",
3869 client_player() != NULL && client_player()->spaceship.state != SSHIP_NONE);
3870
3871 info = menu_entry_info_find("EDIT_MODE");
3872 if (info->state != game.info.is_edit_mode) {
3873 info->state = game.info.is_edit_mode;
3877
3878 menu_entry_set_sensitive(map, "EDIT_MODE",
3881 }
3882
3883 info = menu_entry_info_find("TOGGLE_FOG");
3884 if (info->state != game.client.fog_of_war) {
3885 info->state = game.client.fog_of_war;
3886
3890 }
3891
3892 {
3893 char road_buf[500];
3894
3896 if (proad != NULL) {
3897 /* TRANS: Connect with some road type (Road/Railroad) */
3898 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3900 menus_rename(work_menu, 12, "CONNECT_ROAD", road_buf);
3901 }
3902
3904 if (proad != NULL) {
3905 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3907 menus_rename(work_menu, 13, "CONNECT_RAIL", road_buf);
3908 }
3909 }
3910
3911 if (!can_client_issue_orders()) {
3912 return;
3913 }
3914
3915 if (!punits) {
3916 return;
3917 }
3918
3919 /* Remaining part of this function: Update Unit, Work, and Combat menus */
3920
3921 /* Enable the button for adding to a city in all cases, so we
3922 * get an eventual error message from the server if we try. */
3923 menu_entry_set_sensitive(map, "BUILD_CITY",
3928
3929 menu_entry_set_sensitive(map, "DO_ACTION",
3931
3932 menu_entry_set_sensitive(map, "UNIT_TELEPORT",
3934
3935 menu_entry_set_sensitive(map, "BUILD_ROAD",
3939 menu_entry_set_sensitive(map, "BUILD_IRRIGATION",
3941 menu_entry_set_sensitive(map, "BUILD_MINE",
3943 menu_entry_set_sensitive(map, "CULTIVATE",
3945 menu_entry_set_sensitive(map, "PLANT",
3947 menu_entry_set_sensitive(map, "TRANSFORM_TERRAIN",
3949 menu_entry_set_sensitive(map, "FORTIFY",
3952 menu_entry_set_sensitive(map, "PARADROP",
3954 menu_entry_set_sensitive(map, "PILLAGE",
3956 menu_entry_set_sensitive(map, "CLEAN",
3958 menu_entry_set_sensitive(map, "BUILD_FORTRESS",
3960 menu_entry_set_sensitive(map, "BUILD_AIRBASE",
3962 menu_entry_set_sensitive(map, "UNIT_SENTRY",
3964 menu_entry_set_sensitive(map, "UNSENTRY_ALL",
3967 menu_entry_set_sensitive(map, "UNIT_HOMECITY",
3969 menu_entry_set_sensitive(map, "UNIT_UPGRADE", units_can_upgrade(&(wld.map), punits));
3970 menu_entry_set_sensitive(map, "UNIT_CONVERT", units_can_convert(&(wld.map), punits));
3971 menu_entry_set_sensitive(map, "UNIT_DISBAND",
3973 TRUE));
3974
3975 menu_entry_set_sensitive(map, "AUTO_WORKER",
3977 menu_entry_set_sensitive(map, "UNIT_EXPLORE",
3979 menu_entry_set_sensitive(map, "UNIT_BOARD",
3981 menu_entry_set_sensitive(map, "UNIT_DEBOARD",
3983 menu_entry_set_sensitive(map, "UNIT_UNLOAD_TRANSPORTER",
3985
3987 if (proad != NULL) {
3988 struct extra_type *tgt;
3989
3990 tgt = road_extra_get(proad);
3991
3993 } else {
3995 }
3996 menu_entry_set_sensitive(map, "CONNECT_ROAD", conn_possible);
3997
3999 if (proad != NULL) {
4000 struct extra_type *tgt;
4001
4002 tgt = road_extra_get(proad);
4003
4005 } else {
4007 }
4008 menu_entry_set_sensitive(map, "CONNECT_RAIL", conn_possible);
4009
4011 if (proad != NULL) {
4012 struct extra_type *tgt;
4013
4014 tgt = road_extra_get(proad);
4015
4017 } else {
4019 }
4020 menu_entry_set_sensitive(map, "CONNECT_MAGLEV", conn_possible);
4021
4023
4024 if (extra_type_list_size(extras) > 0) {
4025 struct extra_type *tgt;
4026
4027 tgt = extra_type_list_get(extras, 0);
4029 } else {
4031 }
4032 menu_entry_set_sensitive(map, "CONNECT_IRRIGATION", conn_possible);
4033
4034 menu_entry_set_sensitive(map, "TAX_RATES",
4037
4039 menus_rename(work_menu, 0, "BUILD_CITY",
4041 } else {
4042 bool city_on_tile = FALSE;
4043
4044 /* FIXME: This overloading doesn't work well with multiple focus
4045 * units. */
4047 if (tile_city(unit_tile(punit))) {
4049 break;
4050 }
4052
4054 TRUE)) {
4055 menus_rename(work_menu, 0, "BUILD_CITY",
4057 } else {
4058 /* Refresh default order */
4059 menus_rename(work_menu, 0, "BUILD_CITY",
4061 }
4062 }
4063
4065 menus_rename(work_menu, 6, "BUILD_ROAD",
4068 char road_item[500];
4069 struct extra_type *pextra = NULL;
4070
4071 /* FIXME: This overloading doesn't work well with multiple focus
4072 * units. */
4076 if (pextra != NULL) {
4077 break;
4078 }
4080
4081 if (pextra != NULL) {
4082 /* TRANS: Build road of specific type (Road/Railroad) */
4083 snprintf(road_item, sizeof(road_item), _("Build %s"),
4084 extra_name_translation(pextra));
4085 menus_rename(work_menu, 6, "BUILD_ROAD", road_item);
4086 }
4087 } else {
4088 menus_rename(work_menu, 6, "BUILD_ROAD", _("Build _Road"));
4089 }
4090
4091 if (units_all_same_type && num_units > 0) {
4092 struct unit *punit = unit_list_get(punits, 0);
4093 const struct unit_type *to_unittype
4095
4096 if (to_unittype) {
4097 /* TRANS: %s is a unit type. */
4098 fc_snprintf(acttext, sizeof(acttext), _("Upgr_ade to %s"),
4101 unit_type_get(punit))));
4102 } else {
4103 acttext[0] = '\0';
4104 }
4105 } else {
4106 acttext[0] = '\0';
4107 }
4108 if ('\0' != acttext[0]) {
4109 menus_rename(unit_menu, 13, "UNIT_UPGRADE", acttext);
4110 } else {
4111 menus_rename(unit_menu, 13, "UNIT_UPGRADE", _("Upgr_ade"));
4112 }
4113
4114 if (units_can_convert(&(wld.map), punits)) {
4115 if (units_all_same_type && num_units > 0) {
4116 struct unit *punit = unit_list_get(punits, 0);
4117
4118 /* TRANS: %s is a unit type. */
4119 fc_snprintf(acttext, sizeof(acttext), _("C_onvert to %s"),
4121 } else {
4122 acttext[0] = '\0';
4123 }
4124 } else {
4125 menu_entry_set_sensitive(map, "UNIT_CONVERT", FALSE);
4126 acttext[0] = '\0';
4127 }
4128 if ('\0' != acttext[0]) {
4129 menus_rename(unit_menu, 14, "UNIT_CONVERT", acttext);
4130 } else {
4131 menus_rename(unit_menu, 14, "UNIT_CONVERT", _("C_onvert"));
4132 }
4133
4134 if (units_all_same_tile && num_units > 0) {
4135 struct unit *first = unit_list_get(punits, 0);
4136
4137 pterrain = tile_terrain(unit_tile(first));
4138
4140 struct extra_type *pextra = NULL;
4141
4142 /* FIXME: this overloading doesn't work well with multiple focus
4143 * units. */
4147 if (pextra != NULL) {
4148 break;
4149 }
4151
4152 if (pextra != NULL) {
4153 /* TRANS: Build irrigation of specific type */
4154 snprintf(irrtext, sizeof(irrtext), _("Build %s"),
4155 extra_name_translation(pextra));
4156 } else {
4157 sz_strlcpy(irrtext, _("Build _Irrigation"));
4158 }
4159 } else {
4160 sz_strlcpy(irrtext, _("Build _Irrigation"));
4161 }
4162
4163 if (pterrain->cultivate_result != T_NONE) {
4164 fc_snprintf(cultext, sizeof(cultext), _("Change to %s"),
4167 } else {
4168 sz_strlcpy(cultext, _("_Cultivate"));
4169 }
4170
4172 struct extra_type *pextra = NULL;
4173
4174 /* FIXME: this overloading doesn't work well with multiple focus
4175 * units. */
4179 if (pextra != NULL) {
4180 break;
4181 }
4183
4184 if (pextra != NULL) {
4185 /* TRANS: Build mine of specific type */
4186 snprintf(mintext, sizeof(mintext), _("Build %s"),
4187 extra_name_translation(pextra));
4188 } else {
4189 sz_strlcpy(mintext, _("Build _Mine"));
4190 }
4191 } else {
4192 sz_strlcpy(mintext, _("Build _Mine"));
4193 }
4194
4195 if (pterrain->plant_result != T_NONE) {
4196 fc_snprintf(plantext, sizeof(plantext), _("Change to %s"),
4198 } else {
4199 sz_strlcpy(plantext, _("_Plant"));
4200 }
4201
4202 if (pterrain->transform_result != T_NONE
4203 && pterrain->transform_result != pterrain) {
4204 fc_snprintf(transtext, sizeof(transtext), _("Transf_orm to %s"),
4207 } else {
4208 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4209 }
4210 } else {
4211 sz_strlcpy(irrtext, _("Build _Irrigation"));
4212 sz_strlcpy(cultext, _("_Cultivate"));
4213 sz_strlcpy(mintext, _("Build _Mine"));
4214 sz_strlcpy(plantext, _("_Plant"));
4215 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4216 }
4217
4218 menus_rename(work_menu, 7, "BUILD_IRRIGATION", irrtext);
4219 menus_rename(work_menu, 9, "CULTIVATE", cultext);
4220 menus_rename(work_menu, 8, "BUILD_MINE", mintext);
4221 menus_rename(work_menu, 10, "PLANT", plantext);
4222 menus_rename(work_menu, 11, "TRANSFORM_TERRAIN", transtext);
4223
4224 menus_rename(unit_menu, 12, "UNIT_HOMECITY",
4226
4227 menus_rename(combat_menu, 1, "BUILD_FORTRESS",
4228 Q_(terrain_control.gui_type_base0));
4229 menus_rename(combat_menu, 2, "BUILD_AIRBASE",
4230 Q_(terrain_control.gui_type_base1));
4231}
4232
4233/************************************************************************/
4238{
4239 if (!menus_built) {
4240 return;
4241 }
4242}
4243
4244/**********************************************************************/
4248{
4250
4251 if (enable) {
4252 if (main_menubar == NULL) {
4255 /* Ensure the menus are really created before performing any operations
4256 * on them. */
4257 while (g_main_context_pending(NULL)) {
4259 }
4260 }
4261
4264
4265 } else {
4268 }
4269
4270 /* Workaround for gtk bug that (re)setting the menubar after the window has
4271 * been already created is not noticed. */
4272 g_object_notify(G_OBJECT(gtk_settings_get_default()), "gtk-shell-shows-menubar");
4273}
4274
4275/**********************************************************************/
4282
4283/**********************************************************************/
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:141
bool untargeted_revolution_allowed(void)
Definition government.c:563
bool can_change_to_government(struct player *pplayer, const struct government *gov)
Definition government.c:166
#define governments_iterate(NAME_pgov)
Definition government.h:136
#define governments_iterate_end
Definition government.h:139
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:715
static void show_national_borders_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1258
static void show_focus_unit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1494
GtkWidget * setup_menus(GtkWidget *window)
Definition menu.c:2228
static void help_connecting_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:908
static void menus_rename(const char *key, const gchar *new_label)
Definition menu.c:2362
static void help_combat_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1116
static void menu_entry_group_set_sensitive(enum menu_entry_grouping group, gboolean is_sensitive)
Definition menu.c:2330
static void help_ruleset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1060
static void select_single_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1566
static void unit_unload_transporter_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1782
static void help_government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1156
static void report_achievements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:875
static void show_fog_of_war_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1505
static void help_zoc_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1124
static void show_city_productions_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1315
static void toggle_fog_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1536
static void client_lua_script_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:859
static void show_city_names_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1292
static void help_space_race_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1172
static void help_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1068
static void help_playing_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1052
static void plant_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1900
static struct menu_entry_info menu_entries[]
Definition menu.c:275
static void base_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2062
static void help_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1084
static void unit_sentry_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1746
static void center_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2102
static void unit_explore_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1730
static void build_mine_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1892
static void quit_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:791
static void unit_return_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1720
static void show_city_trade_routes_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1338
static void transform_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1972
static void help_wonders_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1148
static void show_terrain_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1349
static void show_city_growth_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1304
static void show_stack_size_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1483
static void multiplier_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2046
static void help_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1140
static void zoom_out_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2118
static void save_game_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:699
static void show_unit_solid_bg_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1461
static void show_coastline_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1360
static void show_city_full_bar_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1280
static void edit_mode_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1213
static void help_chatline_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:924
static void show_paths_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1370
static void connect_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1908
static void help_overview_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1044
static void save_game_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:707
static void help_diplomacy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1164
static void show_units_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1450
static void show_irrigation_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1380
static void show_map_grid_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1247
static void help_improvements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1100
static void find_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:799
static void report_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:823
static void report_demographic_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:867
static void help_worklist_editor_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:932
static void help_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1092
static void leave_local_game_response(GtkWidget *dialog, gint response)
Definition menu.c:732
static void help_language_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:883
static void server_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:675
static void leave_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:747
static void select_same_type_cont_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1590
static void unit_convert_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1807
static void select_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1606
static void show_huts_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1420
static void report_wow_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:831
static void unit_upgrade_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1799
static void help_tech_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1132
static void unit_goto_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1646
static void clean_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2087
static void build_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1823
static void unit_patrol_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1738
void real_menus_init(void)
Definition menu.c:2995
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:1614
static void help_about_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1196
static void build_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1850
static void local_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:659
static void show_cities_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1440
static void unit_homecity_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1791
static void menu_entry_set_sensitive(const char *key, gboolean is_sensitive)
Definition menu.c:2317
static void show_pollution_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1430
static void save_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:683
static void save_mapimg_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:723
static void worklists_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:807
static void connect_maglev_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1940
static void full_screen_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1516
static void report_top_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:843
static void help_controls_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:916
static void select_same_type_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1598
static void connect_rail_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1924
static void unit_wait_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1630
static const char * get_tile_change_menu_text(struct tile *ptile, enum unit_activity activity)
Definition menu.c:2415
static void build_airbase_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2006
static void report_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2134
static void infra_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1622
static void message_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:667
static void tax_rate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2038
static void help_counters_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:900
static void help_musicset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1076
static void unit_goto_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1710
static struct menu_entry_info * menu_entry_info_find(const char *key)
Definition menu.c:2288
static void auto_work_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1842
static void government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2054
static void report_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2142
static void report_messages_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:851
static void show_bases_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1400
static void select_same_type_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1582
static void save_options_on_exit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1204
static void volume_up_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:767
static void show_native_tiles_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1269
static void menu_entry_init(GtkBuildable *item)
Definition menu.c:2168
static void show_unit_shields_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1472
static void reload_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:691
static void scenario_properties_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1546
static void clear_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:643
static void unit_deboard_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1772
static void help_policies_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:892
static void unit_done_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1638
static void help_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1180
static void zoom_in_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2110
static void unit_goto_and_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1654
static void show_city_output_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1236
static void show_city_outlines_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1225
static void save_scenario_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1558
static void help_copying_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1188
static void cultivate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1884
static void save_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:651
void real_menus_update(void)
Definition menu.c:2430
static void report_spaceship_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2158
static void select_all_on_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1574
static void show_city_buy_cost_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1327
static void build_fortress_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1988
#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_)
static void view_menu_update_sensitivity(void)
Definition menu.c:2383
static void unit_board_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1762
static void fortify_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1996
static void show_resources_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1410
static void connect_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1956
static void build_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1876
static void report_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2126
static void road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2074
static void unit_disband_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1815
static void help_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1108
static void report_research_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2150
static void map_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:815
static void volume_down_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:779
void popup_messageopt_dialog(void)
Definition messagedlg.c:51
void meswin_dialog_popup(bool raise)
Definition messagewin.c:417
void option_dialog_popup(const char *name, const struct option_set *poptset)
Definition optiondlg.c:984
void save_mapimg_dialog_popup(void)
Definition pages.c:3551
void mapimg_client_save(const char *filename)
Definition pages.c:3570
void save_game_dialog_popup(void)
Definition pages.c:3487
void save_scenario_dialog_popup(void)
Definition pages.c:3522
void popup_players_dialog(bool raise)
Definition plrdlg.c:91
void rally_dialog_popup(void)
void science_report_dialog_popup(bool raise)
Definition repodlgs.c:716
void economy_report_dialog_popup(bool raise)
Definition repodlgs.c:1243
void units_report_dialog_popup(bool raise)
Definition repodlgs.c:1768
void science_report_dialog_popdown(void)
Definition repodlgs.c:740
void popup_spaceship_dialog(struct player *pplayer)
bool request_transport(struct unit *cargo, struct tile *ptile)
void popup_worklists_report(void)
Definition wldlg.c:287
static GtkApplication * fc_app
Definition gui_main.c:184
GtkApplication * gui_app(void)
Definition gui_main.c:2680
#define submenu_append_unref(menu, name, submenu)
Definition gui_stuff.h:165
#define menu_item_insert_unref(menu, index, item)
Definition gui_stuff.h:142
#define menu_item_append_unref(menu, item)
Definition gui_stuff.h:149
static void help_governor_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:1736
static void irrigation_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2834
static void bg_append_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2984
static void unsentry_all_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2435
static GMenu * combat_menu
Definition menu.c:97
static GMenuItem * create_toggle_menu_item_for_key(const char *key)
Definition menu.c:3018
static void pillage_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2747
void enable_menus(bool enable)
Definition menu.c:4243
static void setup_app_actions(GApplication *fc_app)
Definition menu.c:3069
static GMenu * options_menu
Definition menu.c:91
static void register_bg_actions(GActionMap *map, int bg)
Definition menu.c:3109
const GActionEntry acts[]
Definition menu.c:1080
static void revolution_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2795
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:2974
static void menu_entry_set_sensitive_info(GActionMap *map, struct menu_entry_info *info, gboolean is_enabled)
Definition menu.c:3412
static bool menus_built
Definition menu.c:77
void menus_disable_char_commands(void)
Definition menu.c:4282
static void show_mines_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2032
static GMenu * edit_menu
Definition menu.c:92
void menus_disable_unit_commands(void)
Definition menu.c:4274
static void unit_teleport_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2416
static void paradrop_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2737
const struct menu_entry_option_map meoms[]
Definition menu.c:1812
static GMenu * unit_menu
Definition menu.c:95
static void do_action_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2757
static void bg_select_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2964
static void mine_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2849
static GMenu * main_menubar
Definition menu.c:76
static GMenuItem * create_toggle_menu_item(struct menu_entry_info *info)
Definition menu.c:2995
void menus_set_initial_toggle_values(void)
Definition menu.c:3051
static void clean_menu_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2864
@ VMENU_HUTS
Definition menu.c:1068
@ VMENU_MINES
Definition menu.c:1065
@ VMENU_COASTLINE
Definition menu.c:1062
@ VMENU_UNIT_SOLID_BG
Definition menu.c:1072
@ VMENU_CITY_NAMES
Definition menu.c:1056
@ VMENU_UNITS
Definition menu.c:1071
@ VMENU_CITY_FULL_BAR
Definition menu.c:1055
@ VMENU_CITY_OUTLINES
Definition menu.c:1050
@ VMENU_POLLUTION
Definition menu.c:1069
@ VMENU_FOCUS_UNIT
Definition menu.c:1075
@ VMENU_BASES
Definition menu.c:1066
@ VMENU_MAP_GRID
Definition menu.c:1052
@ VMENU_CITY_BUY_COST
Definition menu.c:1059
@ VMENU_TERRAIN
Definition menu.c:1061
@ VMENU_CITY_GROWTH
Definition menu.c:1057
@ VMENU_PATHS
Definition menu.c:1063
@ VMENU_CITIES
Definition menu.c:1070
@ VMENU_STACK_SIZE
Definition menu.c:1074
@ VMENU_UNIT_SHIELDS
Definition menu.c:1073
@ VMENU_IRRIGATION
Definition menu.c:1064
@ VMENU_NATIVE_TILES
Definition menu.c:1054
@ VMENU_CITY_OUTPUT
Definition menu.c:1051
@ VMENU_RESOURCES
Definition menu.c:1067
@ VMENU_CITY_PRODUCTIONS
Definition menu.c:1058
@ VMENU_CITY_TRADE_ROUTES
Definition menu.c:1060
@ VMENU_FULL_SCREEN
Definition menu.c:1077
@ VMENU_NAT_BORDERS
Definition menu.c:1053
@ VMENU_FOW
Definition menu.c:1076
static void view_menu_item_toggle(void(*cb)(void), bool updt_sensitivity, gpointer data)
Definition menu.c:1853
#define enable(id)
Definition widget.h:223
void popup_revolution_dialog(void)
Definition dialogs.c:112
#define HELP_MUSICSET_ITEM
#define HELP_CITIES_ITEM
#define HELP_TERRAIN_ITEM
#define HELP_LANGUAGES_ITEM
#define HELP_CONNECTING_ITEM
#define HELP_TILESET_ITEM
#define HELP_CHATLINE_ITEM
#define HELP_RULESET_ITEM
#define HELP_GOVERNMENT_ITEM
#define HELP_ABOUT_ITEM
#define HELP_MULTIPLIER_ITEM
#define HELP_PLAYING_ITEM
#define HELP_IMPROVEMENTS_ITEM
#define HELP_UNITS_ITEM
#define HELP_ZOC_ITEM
#define HELP_WORKLIST_EDITOR_ITEM
#define HELP_WONDERS_ITEM
#define HELP_COMBAT_ITEM
#define HELP_SPACE_RACE_ITEM
#define HELP_COPYING_ITEM
#define HELP_OVERVIEW_ITEM
#define HELP_NATIONS_ITEM
#define HELP_TECHS_ITEM
#define HELP_DIPLOMACY_ITEM
#define HELP_ECONOMY_ITEM
#define HELP_CMA_ITEM
#define HELP_CONTROLS_ITEM
#define HELP_COUNTER_ITEM
Impr_type_id improvement_number(const struct impr_type *pimprove)
const char * improvement_name_translation(const struct impr_type *pimprove)
#define improvement_iterate_end
#define improvement_iterate(_p)
const char * name
Definition inputfile.c:127
#define fc_assert_ret(condition)
Definition log.h:192
#define fc_assert(condition)
Definition log.h:177
#define FC_STATIC_ASSERT(cond, tag)
Definition log.h:238
struct terrain_misc terrain_control
Definition map.c:68
Multiplier_type_id multiplier_count(void)
Definition multipliers.c:88
void option_changed(struct option *poption)
Definition options.c: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:181
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:1806
bool * option
Definition menu.c:1808
const char * menu_entry
Definition menu.c:1807
int menu_pos
Definition menu.c:1809
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