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 "client_main.h"
37#include "clinet.h"
38#include "connectdlg_common.h"
39#include "control.h"
40#include "mapview_common.h"
41#include "options.h"
42#include "tilespec.h"
43
44/* client/gui-gtk-5.0 */
45#include "chatline.h"
46#include "cityrep.h"
47#include "dialogs.h"
48#include "editgui.h"
49#include "editprop.h"
50#include "finddlg.h"
51#include "gamedlgs.h"
52#include "gotodlg.h"
53#include "gui_main.h"
54#include "gui_stuff.h"
55#include "helpdlg.h"
56#include "infradlg.h"
57#include "luaconsole.h"
58#include "mapctrl.h" /* center_on_unit(). */
59#include "messagedlg.h"
60#include "messagewin.h"
61#include "optiondlg.h"
62#include "pages.h"
63#include "plrdlg.h"
64#include "rallypointdlg.h"
65#include "ratesdlg.h"
66#include "repodlgs.h"
67#include "sprite.h"
68#include "spaceshipdlg.h"
69#include "unitselect.h"
70#include "wldlg.h"
71
72#include "menu.h"
73
75static bool menus_built = FALSE;
76
78
80
83
91
92struct menu_entry_info {
93 const char *key;
94 const char *name;
95 const char *action;
96 const char *accl;
98 void (*toggle)(GSimpleAction *act, GVariant *value, gpointer data);
99 bool state; /* Only for toggle actions */
100};
101
104static GMenuItem *create_toggle_menu_item_for_key(const char *key);
105
106/* Menu entry callbacks */
108 GVariant *parameter,
109 gpointer data);
111 GVariant *parameter,
112 gpointer data);
114 GVariant *parameter,
115 gpointer data);
117 GVariant *parameter,
118 gpointer data);
120 GVariant *parameter,
121 gpointer data);
123 GVariant *parameter,
124 gpointer data);
126 GVariant *parameter,
127 gpointer data);
129 GVariant *parameter,
130 gpointer data);
132 GVariant *parameter,
133 gpointer data);
134
135#ifdef FREECIV_DEBUG
137 GVariant *parameter,
138 gpointer data);
139#endif /* FREECIV_DEBUG */
140
142 GVariant *parameter,
143 gpointer data);
145 GVariant *parameter,
146 gpointer data);
148 GVariant *parameter,
149 gpointer data);
151 GVariant *parameter,
152 gpointer data);
154 GVariant *parameter,
155 gpointer data);
157 GVariant *parameter,
158 gpointer data);
160 GVariant *parameter,
161 gpointer data);
163 GVariant *parameter,
164 gpointer data);
166 GVariant *parameter,
167 gpointer data);
169 GVariant *parameter,
170 gpointer data);
172 GVariant *parameter,
173 gpointer data);
175 GVariant *parameter,
176 gpointer data);
178 GVariant *parameter,
179 gpointer data);
181 GVariant *parameter,
182 gpointer data);
184 GVariant *parameter,
185 gpointer data);
187 GVariant *parameter,
188 gpointer data);
190 GVariant *parameter,
191 gpointer data);
193 GVariant *parameter,
194 gpointer data);
196 GVariant *parameter,
197 gpointer data);
199 GVariant *parameter,
200 gpointer data);
202 GVariant *parameter,
203 gpointer data);
205 GVariant *parameter,
206 gpointer data);
208 GVariant *parameter,
209 gpointer data);
211 GVariant *parameter,
212 gpointer data);
214 GVariant *parameter,
215 gpointer data);
217 GVariant *parameter,
218 gpointer data);
220 GVariant *parameter,
221 gpointer data);
223 GVariant *parameter,
224 gpointer data);
226 GVariant *parameter,
227 gpointer data);
229 GVariant *parameter,
230 gpointer data);
232 GVariant *parameter,
233 gpointer data);
235 GVariant *parameter,
236 gpointer data);
238 GVariant *parameter,
239 gpointer data);
241 GVariant *parameter,
242 gpointer data);
244 GVariant *parameter,
245 gpointer data);
247 GVariant *parameter,
248 gpointer data);
250 GVariant *parameter,
251 gpointer data);
253 GVariant *parameter,
254 gpointer data);
256 GVariant *parameter,
257 gpointer data);
259 GVariant *parameter,
260 gpointer data);
262 GVariant *parameter,
263 gpointer data);
265 GVariant *parameter,
266 gpointer data);
268 GVariant *parameter,
269 gpointer data);
271 GVariant *parameter,
272 gpointer data);
274 GVariant *parameter,
275 gpointer data);
277 GVariant *parameter,
278 gpointer data);
280 GVariant *parameter,
281 gpointer data);
283 GVariant *parameter,
284 gpointer data);
286 GVariant *parameter,
287 gpointer data);
289 GVariant *parameter,
290 gpointer data);
292 GVariant *parameter,
293 gpointer data);
295 GVariant *parameter,
296 gpointer data);
298 GVariant *parameter,
299 gpointer data);
301 GVariant *parameter,
302 gpointer data);
304 GVariant *parameter,
305 gpointer data);
307 GVariant *parameter,
308 gpointer data);
310 GVariant *parameter,
311 gpointer data);
313 GVariant *parameter,
314 gpointer data);
316 GVariant *parameter,
317 gpointer data);
319 GVariant *parameter,
320 gpointer data);
322 GVariant *parameter,
323 gpointer data);
325 GVariant *parameter,
326 gpointer data);
328 GVariant *parameter,
329 gpointer data);
331 GVariant *parameter,
332 gpointer data);
334 GVariant *parameter,
335 gpointer data);
337 GVariant *parameter,
338 gpointer data);
340 GVariant *parameter,
341 gpointer data);
343 GVariant *parameter,
344 gpointer data);
346 GVariant *parameter,
347 gpointer data);
349 GVariant *parameter,
350 gpointer data);
352 GVariant *parameter,
353 gpointer data);
355 GVariant *parameter,
356 gpointer data);
358 GVariant *parameter,
359 gpointer data);
361 GVariant *parameter,
362 gpointer data);
364 GVariant *parameter,
365 gpointer data);
367 GVariant *parameter,
368 gpointer data);
370 GVariant *parameter,
371 gpointer data);
373 GVariant *parameter,
374 gpointer data);
376 GVariant *parameter,
377 gpointer data);
379 GVariant *parameter,
380 gpointer data);
381
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);
404 GVariant *parameter,
405 gpointer data);
407 GVariant *parameter,
408 gpointer data);
410 GVariant *parameter,
411 gpointer data);
413 GVariant *parameter,
414 gpointer data);
416 GVariant *parameter,
417 gpointer data);
419 GVariant *parameter,
420 gpointer data);
422 GVariant *parameter,
423 gpointer data);
425 GVariant *parameter,
426 gpointer data);
428 GVariant *parameter,
429 gpointer data);
431 GVariant *parameter,
432 gpointer data);
434 GVariant *parameter,
435 gpointer data);
437 GVariant *parameter,
438 gpointer data);
440 GVariant *parameter,
441 gpointer data);
443 GVariant *parameter,
444 gpointer data);
446 GVariant *parameter,
447 gpointer data);
449 GVariant *parameter,
450 gpointer data);
452 GVariant *parameter,
453 gpointer data);
455 GVariant *parameter,
456 gpointer data);
458 GVariant *parameter,
459 gpointer data);
461 GVariant *parameter,
462 gpointer data);
464 GVariant *parameter,
465 gpointer data);
467 GVariant *parameter,
468 gpointer data);
470 GVariant *parameter,
471 gpointer data);
473 GVariant *parameter,
474 gpointer data);
476 GVariant *parameter,
477 gpointer data);
479 GVariant *parameter,
480 gpointer data);
481
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);
504 GVariant *parameter,
505 gpointer data);
507 GVariant *parameter,
508 gpointer data);
510 GVariant *parameter,
511 gpointer data);
513 GVariant *parameter,
514 gpointer data);
516 GVariant *parameter,
517 gpointer data);
519 GVariant *parameter,
520 gpointer data);
522 GVariant *parameter,
523 gpointer data);
524
526 GVariant *parameter,
527 gpointer data);
529 GVariant *parameter,
530 gpointer data);
532 GVariant *parameter,
533 gpointer data);
534
536{
537 /* Game menu */
538 { "CLEAR_CHAT_LOGS", N_("_Clear Chat Log"),
539 "clear_chat", NULL, MGROUP_SAFE,
540 NULL, FALSE },
541 { "SAVE_CHAT_LOGS", N_("Save Chat _Log"),
542 "save_chat", NULL, MGROUP_SAFE,
543 NULL, FALSE },
544
545 { "LOCAL_OPTIONS", N_("_Local Client"),
546 "local_options", NULL, MGROUP_SAFE,
547 NULL, FALSE },
548 { "MESSAGE_OPTIONS", N_("_Message"),
549 "message_options", NULL, MGROUP_SAFE,
550 NULL, FALSE },
551 { "SERVER_OPTIONS", N_("_Remote Server"),
552 "server_options", NULL, MGROUP_SAFE,
553 NULL, FALSE },
554 { "SAVE_OPTIONS", N_("Save Options _Now"),
555 "save_options", NULL, MGROUP_SAFE,
556 NULL, FALSE },
557 { "SAVE_OPTIONS_ON_EXIT", N_("Save Options on _Exit"),
558 "save_options_on_exit", NULL, MGROUP_SAFE,
560
561#ifdef FREECIV_DEBUG
562 { "RELOAD_TILESET", N_("_Reload Tileset"),
563 "reload_tileset", ACCL_MOD_KEY"<alt>r", MGROUP_SAFE,
564 NULL, FALSE },
565#endif /* FREECIV_DEBUG */
566
567 { "GAME_SAVE", N_("_Save Game"),
568 "game_save", ACCL_MOD_KEY"s", MGROUP_SAFE,
569 NULL, FALSE },
570 { "GAME_SAVE_AS", N_("Save Game _As..."),
571 "game_save_as", NULL, MGROUP_SAFE,
572 NULL, FALSE },
573 { "MAPIMG_SAVE", N_("Save Map _Image"),
574 "save_mapimg", NULL, MGROUP_SAFE,
575 NULL, FALSE },
576 { "MAPIMG_SAVE_AS", N_("Save _Map Image As..."),
577 "save_mapimg_as", NULL, MGROUP_SAFE,
578 NULL, FALSE },
579 { "LEAVE", N_("_Leave"),
580 "leave", NULL, MGROUP_SAFE,
581 NULL, FALSE },
582 { "QUIT", N_("_Quit"),
583 "quit", ACCL_MOD_KEY"q", MGROUP_SAFE,
584 NULL, FALSE },
585
586 /* Edit menu */
587 { "FIND_CITY", N_("_Find City"),
588 "find_city", ACCL_MOD_KEY"f", MGROUP_SAFE,
589 NULL, FALSE },
590 { "WORKLISTS", N_("Work_lists"),
591 "worklists", ACCL_MOD_KEY"<shift>l", MGROUP_SAFE,
592 NULL, FALSE },
593 { "RALLY_DLG", N_("Rally point dialog"),
594 "rally_dlg", ACCL_MOD_KEY"<shift>r", MGROUP_SAFE,
595 NULL, FALSE },
596 { "INFRA_DLG", N_("Infra dialog"),
597 "infra_dlg", ACCL_MOD_KEY"<shift>f", MGROUP_SAFE,
598 NULL, FALSE },
599 { "EDIT_MODE", N_("_Editing Mode"),
600 "edit_mode", ACCL_MOD_KEY"e", MGROUP_SAFE,
602 { "TOGGLE_FOG", N_("Toggle Fog of _War"),
603 "toggle_fog", ACCL_MOD_KEY"<shift>w", MGROUP_EDIT,
605 { "SCENARIO_PROPERTIES", N_("Game/Scenario Properties"),
606 "scenario_props", NULL, MGROUP_EDIT,
607 NULL, FALSE },
608 { "SCENARIO_SAVE", N_("Save Scenario"),
609 "scenario_save", NULL, MGROUP_EDIT,
610 NULL, FALSE },
611 { "CLIENT_LUA_SCRIPT", N_("Client _Lua Script"),
612 "lua_script", NULL, MGROUP_SAFE,
613 NULL, FALSE },
614
615 /* View menu */
616 { "SHOW_CITY_OUTLINES", N_("Cit_y Outlines"),
617 "show_city_outlines", ACCL_MOD_KEY"y", MGROUP_SAFE,
619 { "SHOW_CITY_OUTPUT", N_("City Output"),
620 "show_city_output", ACCL_MOD_KEY"v", MGROUP_SAFE,
622 { "SHOW_MAP_GRID", N_("Map _Grid"),
623 "show_map_grid", ACCL_MOD_KEY"g", MGROUP_SAFE,
625 { "SHOW_NAT_BORDERS", N_("National _Borders"),
626 "show_nat_borders", ACCL_MOD_KEY"b", MGROUP_SAFE,
628 { "SHOW_NATIVE_TILES", N_("Native Tiles"),
629 "show_native_tiles", ACCL_MOD_KEY"<shift>n", MGROUP_SAFE,
631 { "SHOW_CITY_FULL_BAR", N_("City Full Bar"),
632 "show_city_full_bar", NULL, MGROUP_SAFE,
634 { "SHOW_CITY_NAMES", N_("City _Names"),
635 "show_city_names", ACCL_MOD_KEY"n", MGROUP_SAFE,
637 { "SHOW_CITY_GROWTH", N_("City G_rowth"),
638 "show_city_growth", ACCL_MOD_KEY"o", MGROUP_SAFE,
640 { "SHOW_CITY_PRODUCTIONS", N_("City _Production"),
641 "show_city_productions", ACCL_MOD_KEY"p", MGROUP_SAFE,
643 { "SHOW_CITY_BUY_COST", N_("City Buy Cost"),
644 "show_city_buy_cost", NULL, MGROUP_SAFE,
646 { "SHOW_CITY_TRADE_ROUTES", N_("City Tra_deroutes"),
647 "show_trade_routes", ACCL_MOD_KEY"d", MGROUP_SAFE,
649 { "SHOW_TERRAIN", N_("_Terrain"),
650 "show_terrain", NULL, MGROUP_SAFE,
652 { "SHOW_COASTLINE", N_("C_oastline"),
653 "show_coastline", NULL, MGROUP_SAFE,
655 { "SHOW_PATHS", N_("_Paths"),
656 "show_paths", NULL, MGROUP_SAFE,
658 { "SHOW_IRRIGATION", N_("_Irrigation"),
659 "show_irrigation", NULL, MGROUP_SAFE,
661 { "SHOW_MINES", N_("_Mines"),
662 "show_mines", NULL, MGROUP_SAFE,
664 { "SHOW_BASES", N_("_Bases"),
665 "show_bases", NULL, MGROUP_SAFE,
667 { "SHOW_RESOURCES", N_("_Resources"),
668 "show_resources", NULL, MGROUP_SAFE,
670 { "SHOW_HUTS", N_("_Huts"),
671 "show_huts", NULL, MGROUP_SAFE,
673 { "SHOW_POLLUTION", N_("Po_llution & Fallout"),
674 "show_pollution", NULL, MGROUP_SAFE,
676 { "SHOW_CITIES", N_("Citi_es"),
677 "show_cities", NULL, MGROUP_SAFE,
679 { "SHOW_UNITS", N_("_Units"),
680 "show_units", NULL, MGROUP_SAFE,
682 { "SHOW_UNIT_SOLID_BG", N_("Unit Solid Background"),
683 "show_unit_solid_bg", NULL, MGROUP_SAFE,
685 { "SHOW_UNIT_SHIELDS", N_("Unit shields"),
686 "show_unit_shields", NULL, MGROUP_SAFE,
688 { "SHOW_STACK_SIZE", N_("Unit Stack Size"),
689 "show_stack_size", ACCL_MOD_KEY"plus", MGROUP_SAFE,
691 { "SHOW_FOCUS_UNIT", N_("Focu_s Unit"),
692 "show_focus_unit", NULL, MGROUP_SAFE,
694 { "SHOW_FOG_OF_WAR", N_("Fog of _War"),
695 "show_fow", NULL, MGROUP_SAFE,
697
698 { "FULL_SCREEN", N_("_Fullscreen"),
699 "full_screen", ACCL_MOD_KEY"F11", MGROUP_SAFE,
701 { "CENTER_VIEW", N_("_Center View"),
702 "center_view", "c", MGROUP_PLAYER,
703 NULL, FALSE },
704
705 /* Select menu */
706 { "SELECT_SINGLE", N_("_Single Unit (Unselect Others)"),
707 "select_single", "z", MGROUP_UNIT,
708 NULL, FALSE },
709 { "SELECT_ALL_ON_TILE", N_("_All On Tile"),
710 "select_all_tile", "v", MGROUP_UNIT,
711 NULL, FALSE },
712 { "SELECT_SAME_TYPE_TILE", N_("Same Type on _Tile"),
713 "select_same_type_tile", "<shift>v", MGROUP_UNIT,
714 NULL, FALSE },
715 { "SELECT_SAME_TYPE_CONT", N_("Same Type on _Continent"),
716 "select_same_type_cont", "<shift>c", MGROUP_UNIT,
717 NULL, FALSE },
718 { "SELECT_SAME_TYPE", N_("Same Type _Everywhere"),
719 "select_same_type", "<shift>x", MGROUP_UNIT,
720 NULL, FALSE },
721 { "SELECT_DLG", N_("Unit Selection Dialog"),
722 "select_dlg", NULL, MGROUP_UNIT,
723 NULL, FALSE },
724
725 /* Unit menu */
726 { "UNIT_GOTO", N_("_Go to"),
727 "goto", "g", MGROUP_UNIT,
728 NULL, FALSE },
729 { "UNIT_GOTO_CITY", N_("Go _to/Airlift to City..."),
730 "goto_city", "t", MGROUP_UNIT,
731 NULL, FALSE },
732 { "UNIT_RETURN", N_("_Return to Nearest City"),
733 "return", "<shift>g", MGROUP_UNIT,
734 NULL, FALSE },
735 { "UNIT_EXPLORE", N_("Auto E_xplore"),
736 "explore", "x", MGROUP_UNIT,
737 NULL, FALSE },
738 { "UNIT_PATROL", N_("_Patrol"),
739 "patrol", "q", MGROUP_UNIT,
740 NULL, FALSE },
741 { "UNIT_TELEPORT", N_("_Teleport"),
742 "teleport", NULL, MGROUP_UNIT,
743 NULL, FALSE },
744 { "UNIT_SENTRY", N_("_Sentry"),
745 "sentry", "s", MGROUP_UNIT,
746 NULL, FALSE },
747 { "UNSENTRY_ALL", N_("Uns_entry All On Tile"),
748 "unsentry_all", "<shift>s", MGROUP_UNIT,
749 NULL, FALSE },
750 { "UNIT_BOARD", N_("_Load"),
751 "board", "l", MGROUP_UNIT,
752 NULL, FALSE },
753 { "UNIT_DEBOARD", N_("_Unload"),
754 "deboard", "u", MGROUP_UNIT,
755 NULL, FALSE },
756 { "UNIT_UNLOAD_TRANSPORTER", N_("U_nload All From Transporter"),
757 "unload_transporter", "<shift>t", MGROUP_UNIT,
758 NULL, FALSE },
759 { "UNIT_HOMECITY", N_("Set _Home City"),
760 "homecity", "h", MGROUP_UNIT,
761 NULL, FALSE },
762 { "UNIT_UPGRADE", N_("Upgr_ade"),
763 "upgrade", "<shift>u", MGROUP_UNIT,
764 NULL, FALSE },
765 { "UNIT_CONVERT", N_("C_onvert"),
766 "convert", "<shift>o", MGROUP_UNIT,
767 NULL, FALSE },
768 { "UNIT_DISBAND", N_("_Disband"),
769 "disband", "<shift>d", MGROUP_UNIT,
770 NULL, FALSE },
771 { "DO_ACTION", N_("_Do..."),
772 "do_action", "d", MGROUP_UNIT,
773 NULL, FALSE },
774 { "UNIT_WAIT", N_("_Wait"),
775 "wait", "w", MGROUP_UNIT,
776 NULL, FALSE },
777 { "UNIT_DONE", N_("_Done"),
778 "done", "space", MGROUP_UNIT,
779 NULL, FALSE },
780
781 /* Work menu */
782 { "BUILD_CITY", N_("_Build City"),
783 "build_city", "b", MGROUP_UNIT,
784 NULL, FALSE },
785 { "AUTO_WORKER", N_("_Auto Worker"),
786 "auto_work", "a", MGROUP_UNIT,
787 NULL, FALSE },
788 { "BUILD_ROAD", N_("Build _Road"),
789 "build_road", "r", MGROUP_UNIT,
790 NULL, FALSE },
791 { "BUILD_IRRIGATION", N_("Build _Irrigation"),
792 "build_irrigation", "i", MGROUP_UNIT,
793 NULL, FALSE },
794 { "BUILD_MINE", N_("Build _Mine"),
795 "build_mine", "m", MGROUP_UNIT,
796 NULL, FALSE },
797 { "CULTIVATE", N_("Cultivate"),
798 "cultivate", "<shift>i", MGROUP_UNIT,
799 NULL, FALSE },
800 { "PLANT", N_("Plant"),
801 "plant", "<shift>m", MGROUP_UNIT,
802 NULL, FALSE },
803 { "TRANSFORM_TERRAIN", N_("Transf_orm Terrain"),
804 "transform_terrain", "o", MGROUP_UNIT,
805 NULL, FALSE },
806 { "CONNECT_ROAD", N_("Connect With Roa_d"),
807 "connect_road", ACCL_MOD_KEY"r", MGROUP_UNIT,
808 NULL, FALSE },
809 { "CONNECT_RAIL", N_("Connect With Rai_l"),
810 "connect_rail", ACCL_MOD_KEY"l", MGROUP_UNIT,
811 NULL, FALSE },
812 { "CONNECT_MAGLEV", N_("Connect With _Maglev"),
813 "connect_maglev", ACCL_MOD_KEY"m", MGROUP_UNIT,
814 NULL, FALSE },
815 { "CONNECT_IRRIGATION", N_("Connect With Irri_gation"),
816 "connect_irrigation", ACCL_MOD_KEY"i", MGROUP_UNIT,
817 NULL, FALSE },
818 { "CLEAN", N_("_Clean"),
819 "clean", "p", MGROUP_UNIT,
820 NULL, FALSE },
821
822 /* Combat menu */
823 { "FORTIFY", N_("Fortify"),
824 "fortify", "f", MGROUP_UNIT,
825 NULL, FALSE },
826 { "BUILD_FORTRESS", N_("Build Fortress"),
827 "build_base_fortress", "<shift>f", MGROUP_UNIT,
828 NULL, FALSE },
829 { "BUILD_AIRBASE", N_("Build Airbase"),
830 "build_base_airbase", "<shift>e", MGROUP_UNIT,
831 NULL, FALSE },
832 { "PARADROP", N_("P_aradrop"),
833 "paradrop", "j", MGROUP_UNIT,
834 NULL, FALSE },
835 { "PILLAGE", N_("_Pillage"),
836 "pillage", "<shift>p", MGROUP_UNIT,
837 NULL, FALSE },
838
839 /* Civilization */
840 { "MAP_VIEW", N_("?noun:_View"),
841 "map_view", "F1", MGROUP_SAFE,
842 NULL, FALSE },
843 { "REPORT_UNITS", N_("_Units"),
844 "report_units", "F2", MGROUP_SAFE,
845 NULL, FALSE },
846 { "REPORT_NATIONS", N_("_Nations"),
847 "report_nations", "F3", MGROUP_SAFE,
848 NULL, FALSE },
849 { "REPORT_CITIES", N_("_Cities"),
850 "report_cities", "F4", MGROUP_SAFE,
851 NULL, FALSE },
852 { "REPORT_ECONOMY", N_("_Economy"),
853 "report_economy", "F5", MGROUP_PLAYER,
854 NULL, FALSE },
855 { "REPORT_RESEARCH", N_("_Research"),
856 "report_research", "F6", MGROUP_PLAYER,
857 NULL, FALSE },
858
859 { "TAX_RATES", N_("_Tax Rates..."),
860 "tax_rates", ACCL_MOD_KEY"t", MGROUP_PLAYING,
861 NULL, FALSE },
862 { "POLICIES", N_("_Policies..."),
863 "policies", "<shift><ctrl>p", MGROUP_PLAYER,
864 NULL, FALSE },
865 { "START_REVOLUTION", N_("_Revolution..."),
866 "revolution", "<shift><ctrl>g", MGROUP_PLAYING,
867 NULL, FALSE },
868
869 { "REPORT_WOW", N_("_Wonders of the World"),
870 "report_wow", "F7", MGROUP_SAFE,
871 NULL, FALSE },
872 { "REPORT_TOP_CITIES", N_("Top Cities"),
873 "report_top_cities", "F8", MGROUP_SAFE,
874 NULL, FALSE },
875 { "REPORT_MESSAGES", N_("_Messages"),
876 "report_messages", "F9", MGROUP_SAFE,
877 NULL, FALSE },
878 { "REPORT_DEMOGRAPHIC", N_("_Demographics"),
879 "report_demographics", "F11", MGROUP_SAFE,
880 NULL, FALSE },
881 { "REPORT_SPACESHIP", N_("_Spaceship"),
882 "report_spaceship", "F12", MGROUP_SAFE,
883 NULL, FALSE },
884 { "REPORT_ACHIEVEMENTS", N_("_Achievements"),
885 "report_achievements", "asterisk", MGROUP_SAFE,
886 NULL, FALSE },
887
888 /* Battle Groups menu */
889 /* Note that user view: 1 - 4, internal: 0 - 3 */
890 { "BG_SELECT_1", N_("Select Battle Group 1"),
891 "bg_select_0", "<shift>F1", MGROUP_PLAYING,
892 NULL, FALSE },
893 { "BG_ASSIGN_1", N_("Assign Battle Group 1"),
894 "bg_assign_0", ACCL_MOD_KEY"F1", MGROUP_PLAYING,
895 NULL, FALSE },
896 { "BG_APPEND_1", N_("Append to Battle Group 1"),
897 "bg_append_0", "<shift><ctrl>F1", MGROUP_PLAYING,
898 NULL, FALSE },
899 { "BG_SELECT_2", N_("Select Battle Group 2"),
900 "bg_select_1", "<shift>F2", MGROUP_PLAYING,
901 NULL, FALSE },
902 { "BG_ASSIGN_2", N_("Assign Battle Group 2"),
903 "bg_assign_1", ACCL_MOD_KEY"F2", MGROUP_PLAYING,
904 NULL, FALSE },
905 { "BG_APPEND_2", N_("Append to Battle Group 2"),
906 "bg_append_1", "<shift><ctrl>F2", MGROUP_PLAYING,
907 NULL, FALSE },
908 { "BG_SELECT_3", N_("Select Battle Group 3"),
909 "bg_select_2", "<shift>F3", MGROUP_PLAYING,
910 NULL, FALSE },
911 { "BG_ASSIGN_3", N_("Assign Battle Group 3"),
912 "bg_assign_2", ACCL_MOD_KEY"F3", MGROUP_PLAYING,
913 NULL, FALSE },
914 { "BG_APPEND_3", N_("Append to Battle Group 3"),
915 "bg_append_2", "<shift><ctrl>F3", MGROUP_PLAYING,
916 NULL, FALSE },
917 { "BG_SELECT_4", N_("Select Battle Group 4"),
918 "bg_select_3", "<shift>F4", MGROUP_PLAYING,
919 NULL, FALSE },
920 { "BG_ASSIGN_4", N_("Assign Battle Group 4"),
921 "bg_assign_3", ACCL_MOD_KEY"F4", MGROUP_PLAYING,
922 NULL, FALSE },
923 { "BG_APPEND_4", N_("Append to Battle Group 4"),
924 "bg_append_3", "<shift><ctrl>F4", MGROUP_PLAYING,
925 NULL, FALSE },
926
927 /* Help menu */
928 { "HELP_OVERVIEW", N_("?help:Overview"),
929 "help_overview", NULL, MGROUP_SAFE,
930 NULL, FALSE },
931 { "HELP_PLAYING", N_("Strategy and Tactics"),
932 "help_playing", NULL, MGROUP_SAFE,
933 NULL, FALSE },
934 { "HELP_POLICIES", N_("Policies"),
935 "help_policies", NULL, MGROUP_SAFE,
936 NULL, FALSE },
937 { "HELP_TERRAIN", N_("Terrain"),
938 "help_terrains", NULL, MGROUP_SAFE,
939 NULL, FALSE },
940 { "HELP_ECONOMY", N_("Economy"),
941 "help_economy", NULL, MGROUP_SAFE,
942 NULL, FALSE },
943 { "HELP_CITIES", N_("Cities"),
944 "help_cities", NULL, MGROUP_SAFE,
945 NULL, FALSE },
946 { "HELP_IMPROVEMENTS", N_("City Improvements"),
947 "help_improvements", NULL, MGROUP_SAFE,
948 NULL, FALSE },
949 { "HELP_WONDERS", N_("Wonders of the World"),
950 "help_wonders", NULL, MGROUP_SAFE,
951 NULL, FALSE },
952 { "HELP_UNITS", N_("Units"),
953 "help_units", NULL, MGROUP_SAFE,
954 NULL, FALSE },
955 { "HELP_COMBAT", N_("Combat"),
956 "help_combat", NULL, MGROUP_SAFE,
957 NULL, FALSE },
958 { "HELP_ZOC", N_("Zones of Control"),
959 "help_zoc", NULL, MGROUP_SAFE,
960 NULL, FALSE },
961 { "HELP_GOVERNMENT", N_("Government"),
962 "help_government", NULL, MGROUP_SAFE,
963 NULL, FALSE },
964 { "HELP_DIPLOMACY", N_("Diplomacy"),
965 "help_diplomacy", NULL, MGROUP_SAFE,
966 NULL, FALSE },
967 { "HELP_TECH", N_("Technology"),
968 "help_tech", NULL, MGROUP_SAFE,
969 NULL, FALSE },
970 { "HELP_SPACE_RACE", N_("Space Race"),
971 "help_space_race", NULL, MGROUP_SAFE,
972 NULL, FALSE },
973 { "HELP_RULESET", N_("About Current Ruleset"),
974 "help_ruleset", NULL, MGROUP_SAFE,
975 NULL, FALSE },
976 { "HELP_TILESET", N_("About Current Tileset"),
977 "help_tileset", NULL, MGROUP_SAFE,
978 NULL, FALSE },
979 { "HELP_MUSICSET", N_("About Current Musicset"),
980 "help_musicset", NULL, MGROUP_SAFE,
981 NULL, FALSE },
982 { "HELP_NATIONS", N_("About Nations"),
983 "help_nations", NULL, MGROUP_SAFE,
984 NULL, FALSE },
985 { "HELP_CONNECTING", N_("Connecting"),
986 "help_connecting", NULL, MGROUP_SAFE,
987 NULL, FALSE },
988 { "HELP_CONTROLS", N_("Controls"),
989 "help_controls", NULL, MGROUP_SAFE,
990 NULL, FALSE },
991 { "HELP_GOVERNOR", N_("Citizen Governor"),
992 "help_governor", NULL, MGROUP_SAFE,
993 NULL, FALSE },
994 { "HELP_CHATLINE", N_("Chatline"),
995 "help_chatline", NULL, MGROUP_SAFE,
996 NULL, FALSE },
997 { "HELP_WORKLIST_EDITOR", N_("Worklist Editor"),
998 "help_worklist_editor", NULL, MGROUP_SAFE,
999 NULL, FALSE },
1000 { "HELP_LANGUAGES", N_("Languages"),
1001 "help_languages", NULL, MGROUP_SAFE,
1002 NULL, FALSE },
1003 { "HELP_COPYING", N_("Copying"),
1004 "help_copying", NULL, MGROUP_SAFE,
1005 NULL, FALSE },
1006 { "HELP_ABOUT", N_("About Freeciv"),
1007 "help_about", NULL, MGROUP_SAFE,
1008 NULL, FALSE },
1009 { NULL }
1010};
1011
1012enum {
1042
1044 { "clear_chat", clear_chat_logs_callback },
1045 { "save_chat", save_chat_logs_callback },
1046 { "local_options", local_options_callback },
1047 { "message_options", message_options_callback },
1048 { "server_options", server_options_callback },
1049 { "save_options", save_options_callback },
1050
1051#ifdef FREECIV_DEBUG
1052 { "reload_tileset", reload_tileset_callback },
1053#endif /* FREECIV_DEBUG */
1054
1055 { "game_save", save_game_callback },
1056 { "game_save_as", save_game_as_callback },
1057 { "save_mapimg", save_mapimg_callback },
1058 { "save_mapimg_as", save_mapimg_as_callback },
1059 { "leave", leave_callback },
1060 { "quit", quit_callback },
1061
1062 { "find_city", find_city_callback },
1063 { "worklists", worklists_callback },
1064 { "rally_dlg", rally_dialog_callback },
1065 { "infra_dlg", infra_dialog_callback },
1066 { "scenario_props", scenario_properties_callback },
1067 { "scenario_save", save_scenario_callback },
1068 { "lua_script", client_lua_script_callback },
1069
1070 { "center_view", center_view_callback },
1071
1072 { "select_single", select_single_callback },
1073 { "select_all_tile", select_all_on_tile_callback },
1074 { "select_same_type_tile", select_same_type_tile_callback },
1075 { "select_same_type_cont", select_same_type_cont_callback },
1076 { "select_same_type", select_same_type_callback },
1077 { "select_dlg", select_dialog_callback },
1078
1079 { "goto", unit_goto_callback },
1080 { "goto_city", unit_goto_city_callback },
1081 { "return", unit_return_callback },
1082 { "explore", unit_explore_callback },
1083 { "patrol", unit_patrol_callback },
1084 { "teleport", unit_teleport_callback },
1085 { "sentry", unit_sentry_callback },
1086 { "unsentry_all", unsentry_all_callback },
1087 { "board", unit_board_callback },
1088 { "deboard", unit_deboard_callback },
1089 { "unload_transporter", unit_unload_transporter_callback },
1090 { "homecity", unit_homecity_callback },
1091 { "upgrade", unit_upgrade_callback },
1092 { "convert", unit_convert_callback },
1093 { "disband", unit_disband_callback },
1094 { "do_action", do_action_callback },
1095 { "wait", unit_wait_callback },
1096 { "done", unit_done_callback },
1097
1098 { "build_city", build_city_callback },
1099 { "auto_work", auto_work_callback },
1100 { "build_road", build_road_callback },
1101 { "build_irrigation", build_irrigation_callback },
1102 { "build_mine", build_mine_callback },
1103 { "cultivate", cultivate_callback },
1104 { "plant", plant_callback },
1105 { "transform_terrain", transform_terrain_callback },
1106 { "connect_road", connect_road_callback },
1107 { "connect_rail", connect_rail_callback },
1108 { "connect_maglev", connect_maglev_callback },
1109 { "connect_irrigation", connect_irrigation_callback },
1110 { "clean", clean_callback },
1111
1112 { "fortify", fortify_callback },
1113 { "build_base_fortress", build_fortress_callback },
1114 { "build_base_airbase", build_airbase_callback },
1115 { "paradrop", paradrop_callback },
1116 { "pillage", pillage_callback },
1117
1118 { "revolution", revolution_callback },
1119
1120 { "map_view", map_view_callback },
1121 { "report_units", report_units_callback },
1122 { "report_nations", report_nations_callback },
1123 { "report_cities", report_cities_callback },
1124 { "report_economy", report_economy_callback },
1125 { "report_research", report_research_callback },
1126 { "tax_rates", tax_rate_callback },
1127 { "policies", multiplier_callback },
1128 { "report_wow", report_wow_callback },
1129 { "report_top_cities", report_top_cities_callback },
1130 { "report_messages", report_messages_callback },
1131 { "report_demographics", report_demographic_callback },
1132 { "report_spaceship", report_spaceship_callback },
1133 { "report_achievements", report_achievements_callback },
1134
1135 { "help_overview", help_overview_callback },
1136 { "help_playing", help_playing_callback },
1137 { "help_policies", help_policies_callback },
1138 { "help_terrains", help_terrain_callback },
1139 { "help_economy", help_economy_callback },
1140 { "help_cities", help_cities_callback },
1141 { "help_improvements", help_improvements_callback },
1142 { "help_wonders", help_wonders_callback },
1143 { "help_units", help_units_callback },
1144 { "help_combat", help_combat_callback },
1145 { "help_zoc", help_zoc_callback },
1146 { "help_government", help_government_callback },
1147 { "help_diplomacy", help_diplomacy_callback },
1148 { "help_tech", help_tech_callback },
1149 { "help_space_race", help_space_race_callback },
1150 { "help_ruleset", help_ruleset_callback },
1151 { "help_tileset", help_tileset_callback },
1152 { "help_musicset", help_musicset_callback },
1153 { "help_nations", help_nations_callback },
1154 { "help_connecting", help_connecting_callback },
1155 { "help_controls", help_controls_callback },
1156 { "help_governor", help_governor_callback },
1157 { "help_chatline", help_chatline_callback },
1158 { "help_worklist_editor", help_worklist_editor_callback },
1159 { "help_languages", help_language_callback },
1160 { "help_copying", help_copying_callback },
1161 { "help_about", help_about_callback }
1162};
1163
1164static struct menu_entry_info *menu_entry_info_find(const char *key);
1165
1166/************************************************************************/
1170 GVariant *parameter,
1171 gpointer data)
1172{
1174}
1175
1176/************************************************************************/
1180 GVariant *parameter,
1181 gpointer data)
1182{
1184}
1185
1186/************************************************************************/
1190 GVariant *parameter,
1191 gpointer data)
1192{
1193 option_dialog_popup(_("Set local options"), client_optset);
1194}
1195
1196/************************************************************************/
1200 GVariant *parameter,
1201 gpointer data)
1202{
1204}
1205
1206/************************************************************************/
1210 GVariant *parameter,
1211 gpointer data)
1212{
1213 option_dialog_popup(_("Game Settings"), server_optset);
1214}
1215
1216/************************************************************************/
1220 GVariant *parameter,
1221 gpointer data)
1222{
1224}
1225
1226/************************************************************************/
1230 GVariant *parameter,
1231 gpointer data)
1232{
1233 struct menu_entry_info *info = (struct menu_entry_info *)data;
1234
1235 info->state ^= 1;
1237
1239
1242}
1243
1244#ifdef FREECIV_DEBUG
1245/************************************************************************/
1249 GVariant *parameter,
1250 gpointer data)
1251{
1252 tilespec_reread(NULL, TRUE, 1.0);
1253}
1254#endif /* FREECIV_DEBUG */
1255
1256/************************************************************************/
1260 gpointer data)
1261{
1263}
1264
1265/************************************************************************/
1269 gpointer data)
1270{
1272}
1273
1274/************************************************************************/
1278 gpointer data)
1279{
1281}
1282
1283/************************************************************************/
1287 gpointer data)
1288{
1290}
1291
1292/************************************************************************/
1297 gpointer data)
1298{
1300 result, NULL);
1301
1302 if (button == 0) {
1303 /* It might be killed already */
1304 if (client.conn.used) {
1305 /* It will also kill the server */
1307 }
1308 }
1309}
1310
1311/************************************************************************/
1315 GVariant *parameter,
1316 gpointer data)
1317{
1318 if (is_server_running()) {
1319 const char *buttons[] = { _("Leave"), _("Cancel"), NULL };
1320 GtkAlertDialog *dialog
1321 = gtk_alert_dialog_new(_("Leaving a local game will end it!"));
1322
1328 } else {
1330 }
1331}
1332
1333/************************************************************************/
1337 GVariant *parameter,
1338 gpointer data)
1339{
1341}
1342
1343/************************************************************************/
1347 GVariant *parameter,
1348 gpointer data)
1349{
1351}
1352
1353/************************************************************************/
1357 GVariant *parameter,
1358 gpointer data)
1359{
1361}
1362
1363/************************************************************************/
1367 GVariant *parameter, gpointer data)
1368{
1370}
1371
1372/************************************************************************/
1376 GVariant *parameter,
1377 gpointer data)
1378{
1380}
1381
1382/************************************************************************/
1395
1396/************************************************************************/
1400 GVariant *parameter,
1401 gpointer data)
1402{
1404}
1405
1406/************************************************************************/
1410 GVariant *parameter,
1411 gpointer data)
1412{
1414}
1415
1416/************************************************************************/
1420 GVariant *parameter,
1421 gpointer data)
1422{
1424}
1425
1426/************************************************************************/
1435
1436/************************************************************************/
1445
1446/************************************************************************/
1455
1456/************************************************************************/
1460 GVariant *parameter,
1461 gpointer data)
1462{
1464}
1465
1466/************************************************************************/
1475
1476/************************************************************************/
1480 GVariant *parameter,
1481 gpointer data)
1482{
1484}
1485
1486/************************************************************************/
1490 GVariant *parameter,
1491 gpointer data)
1492{
1494}
1495
1496/************************************************************************/
1500 GVariant *parameter,
1501 gpointer data)
1502{
1504}
1505
1506/************************************************************************/
1515
1516/************************************************************************/
1520 GVariant *parameter,
1521 gpointer data)
1522{
1524}
1525
1526/************************************************************************/
1530 GVariant *parameter,
1531 gpointer data)
1532{
1534}
1535
1536/************************************************************************/
1540 GVariant *parameter,
1541 gpointer data)
1542{
1544}
1545
1546/************************************************************************/
1550 GVariant *parameter,
1551 gpointer data)
1552{
1554}
1555
1556/************************************************************************/
1565
1566/************************************************************************/
1575
1576/************************************************************************/
1580 GVariant *parameter,
1581 gpointer data)
1582{
1584}
1585
1586/************************************************************************/
1595
1596/************************************************************************/
1600 GVariant *parameter,
1601 gpointer data)
1602{
1604}
1605
1606/************************************************************************/
1610 GVariant *parameter,
1611 gpointer data)
1612{
1614}
1615
1616/************************************************************************/
1625
1626/************************************************************************/
1630 GVariant *parameter,
1631 gpointer data)
1632{
1634}
1635
1636/************************************************************************/
1645
1646/************************************************************************/
1655
1656/************************************************************************/
1660 GVariant *parameter,
1661 gpointer data)
1662{
1664}
1665
1666/************************************************************************/
1675
1676/************************************************************************/
1685
1686/************************************************************************/
1695
1696/************************************************************************/
1700 GVariant *parameter,
1701 gpointer data)
1702{
1704}
1705
1706/************************************************************************/
1710 GVariant *parameter,
1711 gpointer data)
1712{
1714}
1715
1716/************************************************************************/
1720 GVariant *parameter,
1721 gpointer data)
1722{
1724
1725 /* Unreachable techs in reqtree on/off */
1727}
1728
1729struct menu_entry_option_map {
1730 const char *menu_entry;
1731 bool *option;
1732 int menu_pos;
1733};
1734
1736 { "SAVE_OPTIONS_ON_EXIT", &gui_options.save_options_on_exit, -1 },
1737 { "FULL_SCREEN", &(GUI_GTK_OPTION(fullscreen)), -1 },
1738 { "EDIT_MODE", &game.info.is_edit_mode, -1 },
1739 { "TOGGLE_FOG", &game.client.fog_of_war, -1 },
1740 { "SHOW_CITY_OUTLINES", &gui_options.draw_city_outlines, VMENU_CITY_OUTLINES },
1741 { "SHOW_CITY_OUTPUT", &gui_options.draw_city_output, VMENU_CITY_OUTPUT },
1742 { "SHOW_MAP_GRID", &gui_options.draw_map_grid, VMENU_MAP_GRID },
1743 { "SHOW_NAT_BORDERS", &gui_options.draw_borders, VMENU_NAT_BORDERS },
1744 { "SHOW_NATIVE_TILES", &gui_options.draw_native, VMENU_NATIVE_TILES },
1745 { "SHOW_CITY_FULL_BAR", &gui_options.draw_full_citybar, VMENU_CITY_FULL_BAR },
1746 { "SHOW_CITY_NAMES", &gui_options.draw_city_names, VMENU_CITY_NAMES },
1747 { "SHOW_CITY_GROWTH", &gui_options.draw_city_growth, VMENU_CITY_GROWTH },
1748 { "SHOW_CITY_PRODUCTIONS", &gui_options.draw_city_productions,
1750 { "SHOW_CITY_BUY_COST", &gui_options.draw_city_buycost, VMENU_CITY_BUY_COST },
1751 { "SHOW_CITY_TRADE_ROUTES", &gui_options.draw_city_trade_routes,
1753 { "SHOW_TERRAIN", &gui_options.draw_terrain, VMENU_TERRAIN },
1754 { "SHOW_COASTLINE", &gui_options.draw_coastline, VMENU_COASTLINE },
1755 { "SHOW_PATHS", &gui_options.draw_paths, VMENU_PATHS },
1756 { "SHOW_IRRIGATION", &gui_options.draw_irrigation, VMENU_IRRIGATION },
1757 { "SHOW_MINES", &gui_options.draw_mines, VMENU_MINES },
1758 { "SHOW_BASES", &gui_options.draw_fortress_airbase, VMENU_BASES },
1759 { "SHOW_RESOURCES", &gui_options.draw_specials, VMENU_RESOURCES },
1760 { "SHOW_HUTS", &gui_options.draw_huts, VMENU_HUTS },
1761 { "SHOW_POLLUTION", &gui_options.draw_pollution, VMENU_POLLUTION },
1762 { "SHOW_CITIES", &gui_options.draw_cities, VMENU_CITIES },
1763 { "SHOW_UNITS", &gui_options.draw_units, VMENU_UNITS },
1764 { "SHOW_UNIT_SOLID_BG", &gui_options.solid_color_behind_units, VMENU_UNIT_SOLID_BG },
1765 { "SHOW_UNIT_SHIELDS", &gui_options.draw_unit_shields , VMENU_UNIT_SHIELDS },
1766 { "SHOW_STACK_SIZE", &gui_options.draw_unit_stack_size, VMENU_STACK_SIZE },
1767 { "SHOW_FOCUS_UNIT", &gui_options.draw_focus_unit, VMENU_FOCUS_UNIT },
1768 { "SHOW_FOG_OF_WAR", &gui_options.draw_fog_of_war, VMENU_FOW },
1769
1770 { NULL, NULL, -1 }
1771};
1772
1773/************************************************************************/
1776static void view_menu_item_toggle(void (*cb)(void),
1777 bool updt_sensitivity,
1778 gpointer data)
1779{
1780 int i;
1781 struct menu_entry_info *info = (struct menu_entry_info *)data;
1782
1783 info->state ^= 1;
1784
1785 cb();
1786
1787 if (updt_sensitivity) {
1789 }
1790
1791 /* TODO: Make the information available directly from menu_entry_info,
1792 * se we don't need to do this search for it */
1793 for (i = 0; meoms[i].menu_entry != NULL; i++) {
1794 if (!strcmp(meoms[i].menu_entry, info->key)) {
1795 g_menu_remove(view_menu, meoms[i].menu_pos);
1798 return;
1799 }
1800 }
1801}
1802
1803/************************************************************************/
1812
1813/************************************************************************/
1817 GVariant *parameter,
1818 gpointer data)
1819{
1821}
1822
1823/************************************************************************/
1831
1832/************************************************************************/
1841
1842/************************************************************************/
1846 GVariant *parameter,
1847 gpointer data)
1848{
1850}
1851
1852/************************************************************************/
1861
1862/************************************************************************/
1866 GVariant *parameter,
1867 gpointer data)
1868{
1870}
1871
1872/************************************************************************/
1876 GVariant *parameter,
1877 gpointer data)
1878{
1880}
1881
1882/************************************************************************/
1891
1892/************************************************************************/
1901
1902/************************************************************************/
1911
1912/************************************************************************/
1916 GVariant *parameter,
1917 gpointer data)
1918{
1920}
1921
1922/************************************************************************/
1926 GVariant *parameter,
1927 gpointer data)
1928{
1930}
1931
1932/************************************************************************/
1936 GVariant *parameter,
1937 gpointer data)
1938{
1940}
1941
1942/************************************************************************/
1946 GVariant *parameter,
1947 gpointer data)
1948{
1950}
1951
1952/************************************************************************/
1956 GVariant *parameter,
1957 gpointer data)
1958{
1960}
1961
1962/************************************************************************/
1966 gpointer data)
1967{
1969}
1970
1971/************************************************************************/
1975 GVariant *parameter,
1976 gpointer data)
1977{
1979}
1980
1981/************************************************************************/
1985 gpointer data)
1986{
1988}
1989
1990/************************************************************************/
1998
1999/************************************************************************/
2003 gpointer data)
2004{
2006}
2007
2008/************************************************************************/
2012 gpointer data)
2013{
2015}
2016
2017/************************************************************************/
2026
2027/************************************************************************/
2036
2037/************************************************************************/
2046
2047/************************************************************************/
2051 GVariant *parameter,
2052 gpointer data)
2053{
2055}
2056
2057/************************************************************************/
2065
2066/************************************************************************/
2070 gpointer data)
2071{
2072 struct menu_entry_info *info = (struct menu_entry_info *)data;
2073
2074 info->state ^= 1;
2076
2078
2080
2083}
2084
2085/************************************************************************/
2089 GVariant *parameter,
2090 gpointer data)
2091{
2092 struct menu_entry_info *info = (struct menu_entry_info *)data;
2093
2094 info->state ^= 1;
2095
2097
2099
2102}
2103
2104/************************************************************************/
2117
2118/************************************************************************/
2122 gpointer data)
2123{
2125}
2126
2127/************************************************************************/
2135
2136/************************************************************************/
2145
2146/************************************************************************/
2155
2156/************************************************************************/
2165
2166/************************************************************************/
2175
2176/************************************************************************/
2180 GVariant *parameter,
2181 gpointer data)
2182{
2184}
2185
2186/************************************************************************/
2190 GVariant *parameter,
2191 gpointer data)
2192{
2194}
2195
2196/************************************************************************/
2200 GVariant *parameter,
2201 gpointer data)
2202{
2204}
2205
2206/************************************************************************/
2210 GVariant *parameter,
2211 gpointer data)
2212{
2213 key_unit_wait();
2214}
2215
2216/************************************************************************/
2220 GVariant *parameter,
2221 gpointer data)
2222{
2223 key_unit_done();
2224}
2225
2226/************************************************************************/
2230 gpointer data)
2231{
2232 key_unit_goto();
2233}
2234
2235/************************************************************************/
2239 GVariant *parameter,
2240 gpointer data)
2241{
2242 int sub_target = NO_TARGET;
2243 struct action *paction = (struct action *)data;
2244
2246
2248 case ASTK_BUILDING:
2249 {
2251 "end_building");
2253 sub_target = improvement_number(pbuilding);
2254 }
2255 break;
2256 case ASTK_TECH:
2257 {
2259 "end_tech");
2261 sub_target = advance_number(ptech);
2262 }
2263 break;
2264 case ASTK_EXTRA:
2266 {
2267 struct extra_type *pextra = g_object_get_data(G_OBJECT(action),
2268 "end_extra");
2269 fc_assert_ret(pextra != NULL);
2270 sub_target = extra_number(pextra);
2271 }
2272 break;
2273 case ASTK_SPECIALIST:
2274 {
2276 "end_specialist");
2277 fc_assert_ret(nullptr != pspec);
2278 sub_target = specialist_number(pspec);
2279 }
2280 break;
2281 case ASTK_NONE:
2282 sub_target = NO_TARGET;
2283 break;
2284 case ASTK_COUNT:
2285 /* Should not exits */
2287 break;
2288 }
2289
2291}
2292
2293/************************************************************************/
2297 GVariant *parameter,
2298 gpointer data)
2299{
2300 if (get_num_units_in_focus() > 0) {
2302 }
2303}
2304
2305/************************************************************************/
2316
2317/************************************************************************/
2321 GVariant *parameter,
2322 gpointer data)
2323{
2325}
2326
2327/************************************************************************/
2331 gpointer data)
2332{
2334}
2335
2336/************************************************************************/
2340 gpointer data)
2341{
2343}
2344
2345/************************************************************************/
2349 GVariant *parameter,
2350 gpointer data)
2351{
2353}
2354
2355/************************************************************************/
2359 GVariant *parameter,
2360 gpointer data)
2361{
2363}
2364
2365/************************************************************************/
2376
2377/************************************************************************/
2387
2388/************************************************************************/
2398
2399/************************************************************************/
2403 GVariant *parameter,
2404 gpointer data)
2405{
2407}
2408
2409/************************************************************************/
2413 GVariant *parameter,
2414 gpointer data)
2415{
2417}
2418
2419/************************************************************************/
2423 GVariant *parameter,
2424 gpointer data)
2425{
2427}
2428
2429/************************************************************************/
2433 GVariant *parameter,
2434 gpointer data)
2435{
2437}
2438
2439/************************************************************************/
2443 GVariant *parameter,
2444 gpointer data)
2445{
2447}
2448
2449/************************************************************************/
2453 GVariant *parameter,
2454 gpointer data)
2455{
2457 /* FIXME: this can provide different items for different units...
2458 * not good! */
2459 /* Enable the button for adding to a city in all cases, so we
2460 get an eventual error message from the server if we try. */
2466 }
2468}
2469
2470/************************************************************************/
2474 GVariant *parameter,
2475 gpointer data)
2476{
2478}
2479
2480/************************************************************************/
2484 GVariant *parameter,
2485 gpointer data)
2486{
2488 /* FIXME: this can provide different actions for different units...
2489 * not good! */
2491 EC_ROAD,
2493 punit);
2494 bool building_road = FALSE;
2495
2496 if (tgt != NULL
2500 }
2501
2504 }
2506}
2507
2508/************************************************************************/
2512 GVariant *parameter,
2513 gpointer data)
2514{
2516}
2517
2518/************************************************************************/
2522 GVariant *parameter,
2523 gpointer data)
2524{
2526}
2527
2528/************************************************************************/
2532 GVariant *parameter,
2533 gpointer data)
2534{
2536}
2537
2538/************************************************************************/
2542 GVariant *parameter,
2543 gpointer data)
2544{
2545 key_unit_mine();
2546}
2547
2548/************************************************************************/
2552 GVariant *parameter,
2553 gpointer data)
2554{
2556
2557 if (proad != NULL) {
2558 struct extra_type *tgt;
2559
2560 tgt = road_extra_get(proad);
2561
2563 }
2564}
2565
2566/************************************************************************/
2570 GVariant *parameter,
2571 gpointer data)
2572{
2574
2575 if (prail != NULL) {
2576 struct extra_type *tgt;
2577
2578 tgt = road_extra_get(prail);
2579
2581 }
2582}
2583
2584/************************************************************************/
2588 GVariant *parameter,
2589 gpointer data)
2590{
2592
2593 if (pmaglev != NULL) {
2594 struct extra_type *tgt;
2595
2596 tgt = road_extra_get(pmaglev);
2597
2599 }
2600}
2601
2602/************************************************************************/
2606 GVariant *parameter,
2607 gpointer data)
2608{
2610
2611 if (extra_type_list_size(extras) > 0) {
2612 struct extra_type *pextra;
2613
2615
2617 }
2618}
2619
2620/************************************************************************/
2624 GVariant *parameter,
2625 gpointer data)
2626{
2628}
2629
2630/************************************************************************/
2634 gpointer data)
2635{
2637}
2638
2639/************************************************************************/
2643 gpointer data)
2644{
2646}
2647
2648/************************************************************************/
2652 gpointer data)
2653{
2655}
2656
2657/************************************************************************/
2661 GVariant *parameter,
2662 gpointer data)
2663{
2665}
2666
2667/************************************************************************/
2671 GVariant *parameter,
2672 gpointer data)
2673{
2675}
2676
2677/************************************************************************/
2681 GVariant *parameter,
2682 gpointer data)
2683{
2685}
2686
2687/************************************************************************/
2691 gpointer data)
2692{
2694}
2695
2696/************************************************************************/
2700 gpointer data)
2701{
2703}
2704
2705/************************************************************************/
2709 GVariant *parameter,
2710 gpointer data)
2711{
2713}
2714
2715/************************************************************************/
2719 GVariant *parameter,
2720 gpointer data)
2721{
2723}
2724
2725/************************************************************************/
2729 GVariant *parameter,
2730 gpointer data)
2731{
2732 struct extra_type *pextra = data;
2733
2737}
2738
2739/************************************************************************/
2743 GVariant *parameter,
2744 gpointer data)
2745{
2746 struct extra_type *pextra = data;
2747
2750 pextra);
2752}
2753
2754/************************************************************************/
2758 GVariant *parameter,
2759 gpointer data)
2760{
2761 struct extra_type *pextra = data;
2762
2765 pextra);
2767}
2768
2769/************************************************************************/
2773 GVariant *parameter,
2774 gpointer data)
2775{
2776 struct extra_type *pextra = data;
2777
2780 pextra);
2782}
2783
2784/************************************************************************/
2788 GVariant *parameter,
2789 gpointer data)
2790{
2791 struct extra_type *pextra = data;
2792
2796 pextra);
2797 }
2799}
2800
2801/************************************************************************/
2805 GVariant *parameter,
2806 gpointer data)
2807{
2809}
2810
2811/************************************************************************/
2815 GVariant *parameter,
2816 gpointer data)
2817{
2819}
2820
2821/************************************************************************/
2825 GVariant *parameter,
2826 gpointer data)
2827
2828{
2830}
2831
2832/************************************************************************/
2841
2842/************************************************************************/
2851
2852/************************************************************************/
2856 GVariant *parameter,
2857 gpointer data)
2858{
2859 if (NULL != client.conn.playing) {
2861 }
2862}
2863
2864/************************************************************************/
2873
2874/************************************************************************/
2883
2884/************************************************************************/
2893
2894/************************************************************************/
2899{
2900 char actname[150];
2901 GMenuItem *item;
2902
2903 fc_snprintf(actname, sizeof(actname), "app.%s(%s)",
2904 info->action, info->state ? "true" : "false");
2905 item = g_menu_item_new(Q_(info->name), NULL);
2907
2908 if (info->accl != NULL) {
2909 const char *accls[2] = { info->accl, NULL };
2910
2912 }
2913
2914 return item;
2915}
2916
2917/************************************************************************/
2922{
2924}
2925
2926/************************************************************************/
2929static void menu_entry_init(GMenu *sub, const char *key)
2930{
2932
2933 if (info != NULL) {
2934 GMenuItem *item;
2935
2936 if (info->toggle != NULL) {
2938 } else {
2939 char actname[150];
2940
2941 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
2942 item = g_menu_item_new(Q_(info->name), actname);
2943 }
2944
2945 /* Should be menu_item_append_unref()? */
2948 }
2949}
2950
2951/************************************************************************/
2955{
2956 int i;
2957
2958 for (i = 0; meoms[i].menu_entry != NULL; i++) {
2959 struct menu_entry_info *info = menu_entry_info_find(meoms[i].menu_entry);
2960
2961 if (meoms[i].option != NULL) {
2962 info->state = *meoms[i].option;
2963 } else {
2964 info->state = FALSE; /* Best guess we have */
2965 }
2966 }
2967}
2968
2969/************************************************************************/
2973{
2974 int i;
2976
2977 /* Simple entries */
2980
2981 /* Toggles */
2982 for (i = 0; menu_entries[i].key != NULL; i++) {
2983 if (menu_entries[i].toggle != NULL) {
2984 GSimpleAction *act;
2985 GVariant *var = g_variant_new("b", TRUE);
2986
2989 g_signal_connect(act, "change-state",
2991 (gpointer)&(menu_entries[i]));
2992 }
2993 }
2994
2996
2997 for (i = 0; menu_entries[i].key != NULL; i++) {
2998 if (menu_entries[i].accl != NULL && menu_entries[i].toggle == NULL) {
2999 const char *accls[2] = { menu_entries[i].accl, NULL };
3000 char actname[150];
3001
3002 fc_snprintf(actname, sizeof(actname), "app.%s", menu_entries[i].action);
3003
3005 }
3006 }
3007}
3008
3009/************************************************************************/
3012static void register_bg_actions(GActionMap *map, int bg)
3013{
3014 GSimpleAction *act;
3015 char actname[256];
3016
3017 fc_snprintf(actname, sizeof(actname), "bg_select_%d", bg);
3020 g_signal_connect(act, "activate",
3022
3023 fc_snprintf(actname, sizeof(actname), "bg_assign_%d", bg);
3026 g_signal_connect(act, "activate",
3028
3029 fc_snprintf(actname, sizeof(actname), "bg_append_%d", bg);
3032 g_signal_connect(act, "activate",
3034}
3035
3036/************************************************************************/
3040{
3041 GMenu *menubar;
3042 GMenu *topmenu;
3043 GMenu *submenu;
3044 int i;
3045
3047
3048 menubar = g_menu_new();
3049
3050 topmenu = g_menu_new();
3051 menu_entry_init(topmenu, "CLEAR_CHAT_LOGS");
3052 menu_entry_init(topmenu, "SAVE_CHAT_LOGS");
3053
3055 menu_entry_init(options_menu, "LOCAL_OPTIONS");
3056 menu_entry_init(options_menu, "MESSAGE_OPTIONS");
3057 menu_entry_init(options_menu, "SERVER_OPTIONS");
3058 menu_entry_init(options_menu, "SAVE_OPTIONS");
3059 menu_entry_init(options_menu, "SAVE_OPTIONS_ON_EXIT");
3060
3062
3063#ifdef FREECIV_DEBUG
3064 menu_entry_init(topmenu, "RELOAD_TILESET");
3065#endif /* FREECIV_DEBUG */
3066
3067 menu_entry_init(topmenu, "GAME_SAVE");
3068 menu_entry_init(topmenu, "GAME_SAVE_AS");
3069 menu_entry_init(topmenu, "MAPIMG_SAVE");
3070 menu_entry_init(topmenu, "MAPIMG_SAVE_AS");
3071 menu_entry_init(topmenu, "LEAVE");
3072 menu_entry_init(topmenu, "QUIT");
3073
3075
3077
3078 menu_entry_init(edit_menu, "FIND_CITY");
3079 menu_entry_init(edit_menu, "WORKLISTS");
3080 menu_entry_init(edit_menu, "RALLY_DLG");
3081 menu_entry_init(edit_menu, "INFRA_DLG");
3082 menu_entry_init(edit_menu, "EDIT_MODE");
3083 menu_entry_init(edit_menu, "TOGGLE_FOG");
3084 menu_entry_init(edit_menu, "SCENARIO_PROPERTIES");
3085 menu_entry_init(edit_menu, "SCENARIO_SAVE");
3086 menu_entry_init(edit_menu, "CLIENT_LUA_SCRIPT");
3087
3089
3091
3092 menu_entry_init(view_menu, "SHOW_CITY_OUTLINES");
3093 menu_entry_init(view_menu, "SHOW_CITY_OUTPUT");
3094 menu_entry_init(view_menu, "SHOW_MAP_GRID");
3095 menu_entry_init(view_menu, "SHOW_NAT_BORDERS");
3096 menu_entry_init(view_menu, "SHOW_NATIVE_TILES");
3097 menu_entry_init(view_menu, "SHOW_CITY_FULL_BAR");
3098 menu_entry_init(view_menu, "SHOW_CITY_NAMES");
3099 menu_entry_init(view_menu, "SHOW_CITY_GROWTH");
3100 menu_entry_init(view_menu, "SHOW_CITY_PRODUCTIONS");
3101 menu_entry_init(view_menu, "SHOW_CITY_BUY_COST");
3102 menu_entry_init(view_menu, "SHOW_CITY_TRADE_ROUTES");
3103 menu_entry_init(view_menu, "SHOW_TERRAIN");
3104 menu_entry_init(view_menu, "SHOW_COASTLINE");
3105 menu_entry_init(view_menu, "SHOW_PATHS");
3106 menu_entry_init(view_menu, "SHOW_IRRIGATION");
3107 menu_entry_init(view_menu, "SHOW_MINES");
3108 menu_entry_init(view_menu, "SHOW_BASES");
3109 menu_entry_init(view_menu, "SHOW_RESOURCES");
3110 menu_entry_init(view_menu, "SHOW_HUTS");
3111 menu_entry_init(view_menu, "SHOW_POLLUTION");
3112 menu_entry_init(view_menu, "SHOW_CITIES");
3113 menu_entry_init(view_menu, "SHOW_UNITS");
3114 menu_entry_init(view_menu, "SHOW_UNIT_SOLID_BG");
3115 menu_entry_init(view_menu, "SHOW_UNIT_SHIELDS");
3116 menu_entry_init(view_menu, "SHOW_STACK_SIZE");
3117 menu_entry_init(view_menu, "SHOW_FOCUS_UNIT");
3118
3119 menu_entry_init(view_menu, "SHOW_FOG_OF_WAR");
3120
3121 menu_entry_init(view_menu, "FULL_SCREEN");
3122 menu_entry_init(view_menu, "CENTER_VIEW");
3123
3125
3126 topmenu = g_menu_new();
3127
3128 menu_entry_init(topmenu, "SELECT_SINGLE");
3129 menu_entry_init(topmenu, "SELECT_ALL_ON_TILE");
3130 menu_entry_init(topmenu, "SELECT_SAME_TYPE_TILE");
3131 menu_entry_init(topmenu, "SELECT_SAME_TYPE_CONT");
3132 menu_entry_init(topmenu, "SELECT_SAME_TYPE");
3133 menu_entry_init(topmenu, "SELECT_DLG");
3134
3136
3138
3139 menu_entry_init(unit_menu, "UNIT_GOTO");
3140
3141 /* Placeholder submenu (so that menu update has something to replace) */
3142 submenu = g_menu_new();
3144
3145 menu_entry_init(unit_menu, "UNIT_GOTO_CITY");
3146 menu_entry_init(unit_menu, "UNIT_RETURN");
3147 menu_entry_init(unit_menu, "UNIT_EXPLORE");
3148 menu_entry_init(unit_menu, "UNIT_PATROL");
3149 menu_entry_init(unit_menu, "UNIT_TELEPORT");
3150 menu_entry_init(unit_menu, "UNIT_SENTRY");
3151 menu_entry_init(unit_menu, "UNSENTRY_ALL");
3152 menu_entry_init(unit_menu, "UNIT_BOARD");
3153 menu_entry_init(unit_menu, "UNIT_DEBOARD");
3154 menu_entry_init(unit_menu, "UNIT_UNLOAD_TRANSPORTER");
3155 menu_entry_init(unit_menu, "UNIT_HOMECITY");
3156 menu_entry_init(unit_menu, "UNIT_UPGRADE");
3157 menu_entry_init(unit_menu, "UNIT_CONVERT");
3158 menu_entry_init(unit_menu, "UNIT_DISBAND");
3159 menu_entry_init(unit_menu, "DO_ACTION");
3160 menu_entry_init(unit_menu, "UNIT_WAIT");
3161 menu_entry_init(unit_menu, "UNIT_DONE");
3162
3164
3166 menu_entry_init(work_menu, "BUILD_CITY");
3167 menu_entry_init(work_menu, "AUTO_WORKER");
3168
3169 /* Placeholder submenus (so that menu update has something to replace) */
3170 submenu = g_menu_new();
3172 submenu = g_menu_new();
3173 submenu_append_unref(work_menu, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3174 submenu = g_menu_new();
3176 submenu = g_menu_new();
3177 submenu_append_unref(work_menu, _("_Clean Nuisance"), G_MENU_MODEL(submenu));
3178
3179 menu_entry_init(work_menu, "BUILD_ROAD");
3180 menu_entry_init(work_menu, "BUILD_IRRIGATION");
3181 menu_entry_init(work_menu, "BUILD_MINE");
3182 menu_entry_init(work_menu, "CULTIVATE");
3183 menu_entry_init(work_menu, "PLANT");
3184 menu_entry_init(work_menu, "TRANSFORM_TERRAIN");
3185 menu_entry_init(work_menu, "CONNECT_ROAD");
3186 menu_entry_init(work_menu, "CONNECT_RAIL");
3187 menu_entry_init(work_menu, "CONNECT_MAGLEV");
3188 menu_entry_init(work_menu, "CONNECT_IRRIGATION");
3189 menu_entry_init(work_menu, "CLEAN");
3190
3192
3194 menu_entry_init(combat_menu, "FORTIFY");
3195 menu_entry_init(combat_menu, "BUILD_FORTRESS");
3196 menu_entry_init(combat_menu, "BUILD_AIRBASE");
3197
3198 /* Placeholder submenu (so that menu update has something to replace) */
3199 submenu = g_menu_new();
3201
3203
3204 menu_entry_init(combat_menu, "PARADROP");
3205 menu_entry_init(combat_menu, "PILLAGE");
3206
3207 gov_menu = g_menu_new();
3208
3209 menu_entry_init(gov_menu, "MAP_VIEW");
3210 menu_entry_init(gov_menu, "REPORT_UNITS");
3211 menu_entry_init(gov_menu, "REPORT_NATIONS");
3212 menu_entry_init(gov_menu, "REPORT_CITIES");
3213 menu_entry_init(gov_menu, "REPORT_ECONOMY");
3214 menu_entry_init(gov_menu, "REPORT_RESEARCH");
3215 menu_entry_init(gov_menu, "TAX_RATES");
3216 menu_entry_init(gov_menu, "POLICIES");
3217
3218 /* Placeholder submenu (so that menu update has something to replace) */
3219 submenu = g_menu_new();
3221
3222 menu_entry_init(gov_menu, "REPORT_WOW");
3223 menu_entry_init(gov_menu, "REPORT_TOP_CITIES");
3224 menu_entry_init(gov_menu, "REPORT_MESSAGES");
3225 menu_entry_init(gov_menu, "REPORT_DEMOGRAPHIC");
3226 menu_entry_init(gov_menu, "REPORT_SPACESHIP");
3227 menu_entry_init(gov_menu, "REPORT_ACHIEVEMENTS");
3228
3229 submenu_append_unref(menubar, _("C_ivilization"), G_MENU_MODEL(gov_menu));
3230
3231 topmenu = g_menu_new();
3232
3233 /* Keys exist for 4 battle groups */
3235
3236 for (i = 0; i < MAX_NUM_BATTLEGROUPS; i++) {
3237 char key[128];
3238
3239 /* User side battle group numbers start from 1 */
3240 fc_snprintf(key, sizeof(key), "BG_SELECT_%d", i + 1);
3242 fc_snprintf(key, sizeof(key), "BG_ASSIGN_%d", i + 1);
3244 fc_snprintf(key, sizeof(key), "BG_APPEND_%d", i + 1);
3246
3248 }
3249
3250 submenu_append_unref(menubar, _("_Battle Groups"), G_MENU_MODEL(topmenu));
3251
3252 topmenu = g_menu_new();
3253
3254 menu_entry_init(topmenu, "HELP_OVERVIEW");
3255 menu_entry_init(topmenu, "HELP_PLAYING");
3256 menu_entry_init(topmenu, "HELP_POLICIES");
3257 menu_entry_init(topmenu, "HELP_TERRAIN");
3258 menu_entry_init(topmenu, "HELP_ECONOMY");
3259 menu_entry_init(topmenu, "HELP_CITIES");
3260 menu_entry_init(topmenu, "HELP_IMPROVEMENTS");
3261 menu_entry_init(topmenu, "HELP_WONDERS");
3262 menu_entry_init(topmenu, "HELP_UNITS");
3263 menu_entry_init(topmenu, "HELP_COMBAT");
3264 menu_entry_init(topmenu, "HELP_ZOC");
3265 menu_entry_init(topmenu, "HELP_GOVERNMENT");
3266 menu_entry_init(topmenu, "HELP_DIPLOMACY");
3267 menu_entry_init(topmenu, "HELP_TECH");
3268 menu_entry_init(topmenu, "HELP_SPACE_RACE");
3269 menu_entry_init(topmenu, "HELP_RULESET");
3270 menu_entry_init(topmenu, "HELP_TILESET");
3271 menu_entry_init(topmenu, "HELP_MUSICSET");
3272 menu_entry_init(topmenu, "HELP_NATIONS");
3273 menu_entry_init(topmenu, "HELP_CONNECTING");
3274 menu_entry_init(topmenu, "HELP_CONTROLS");
3275 menu_entry_init(topmenu, "HELP_GOVERNOR");
3276 menu_entry_init(topmenu, "HELP_CHATLINE");
3277 menu_entry_init(topmenu, "HELP_WORKLIST_EDITOR");
3278 menu_entry_init(topmenu, "HELP_LANGUAGES");
3279 menu_entry_init(topmenu, "HELP_COPYING");
3280 menu_entry_init(topmenu, "HELP_ABOUT");
3281
3283
3284 menus_built = TRUE;
3285
3287
3288 return menubar;
3289}
3290
3291/************************************************************************/
3294static struct menu_entry_info *menu_entry_info_find(const char *key)
3295{
3296 int i;
3297
3298 for (i = 0; menu_entries[i].key != NULL; i++) {
3299 if (!strcmp(key, menu_entries[i].key)) {
3300 return &(menu_entries[i]);
3301 }
3302 }
3303
3304 return NULL;
3305}
3306
3307/************************************************************************/
3311 struct menu_entry_info *info,
3313{
3314 GAction *act = g_action_map_lookup_action(map, info->action);
3315
3316 if (act != NULL) {
3318 }
3319}
3320
3321/************************************************************************/
3325 const char *key,
3327{
3329
3330 if (info != NULL) {
3332 }
3333}
3334
3335/************************************************************************/
3339 enum menu_entry_grouping group,
3341{
3342 int i;
3343
3344 for (i = 0; menu_entries[i].key != NULL; i++) {
3345 if (menu_entries[i].grouping == group || group == MGROUP_ALL) {
3347 }
3348 }
3349}
3350
3351/************************************************************************/
3354static void menus_rename(GMenu *parent, int index, const char *key,
3355 const char *new_name)
3356{
3358
3359 if (info != NULL) {
3360 char actname[150];
3361 GMenuItem *item;
3362
3363 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
3364 g_menu_remove(parent, index);
3365
3366 item = g_menu_item_new(new_name, actname);
3368 }
3369}
3370
3371/************************************************************************/
3375{
3376 /* The "full" city bar (i.e. the new way of drawing the
3377 * city name), can draw the city growth even without drawing
3378 * the city name. But the old method cannot. */
3380 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", TRUE);
3381 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES", TRUE);
3382 } else {
3383 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", gui_options.draw_city_names);
3384 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES",
3386 }
3387
3388 menu_entry_set_sensitive(map, "SHOW_CITY_BUY_COST",
3390 menu_entry_set_sensitive(map, "SHOW_COASTLINE", !gui_options.draw_terrain);
3391 menu_entry_set_sensitive(map, "SHOW_UNIT_SOLID_BG",
3393 menu_entry_set_sensitive(map, "SHOW_UNIT_SHIELDS",
3395 menu_entry_set_sensitive(map, "SHOW_FOCUS_UNIT", !gui_options.draw_units);
3396}
3397
3398/************************************************************************/
3404static const char *get_tile_change_menu_text(struct tile *ptile,
3405 enum unit_activity activity)
3406{
3407 struct tile *newtile = tile_virtual_new(ptile);
3408 const char *text;
3409
3410 tile_apply_activity(newtile, activity, NULL);
3411 text = tile_get_info_text(newtile, FALSE, 0);
3413
3414 return text;
3415}
3416
3417/************************************************************************/
3421{
3424 GMenu *submenu;
3425 int i, j;
3426 int tgt_kind_group;
3427 struct unit_list *punits;
3428 unsigned num_units;
3429 struct menu_entry_info *info;
3430 struct road_type *proad;
3431 struct extra_type_list *extras;
3432 bool conn_possible;
3433
3435 return;
3436 }
3437
3439
3440 submenu = g_menu_new();
3441
3442 i = 0;
3443 j = 0;
3444
3445 /* Add the new action entries grouped by target kind. */
3448 struct action *paction = action_by_number(act_id);
3449 GSimpleAction *act;
3450 char actname[256];
3451 char name[256];
3452
3453 if (action_id_get_actor_kind(act_id) != AAK_UNIT) {
3454 /* This action isn't performed by a unit. */
3455 continue;
3456 }
3457
3459 /* Wrong group. */
3460 continue;
3461 }
3462
3463 if (!units_can_do_action(punits, act_id, TRUE)) {
3464 continue;
3465 }
3466
3467 /* Create and add the menu item. */
3468 fc_snprintf(actname, sizeof(actname), "action_%d", i);
3471
3472 fc_snprintf(name, sizeof(name), "%s",
3473 action_get_ui_name_mnemonic(act_id, "_"));
3474 fc_snprintf(actname, sizeof(actname), "app.action_%d", i++);
3475
3476 if (action_id_has_complex_target(act_id)) {
3478 char subname[256];
3479
3480#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_) \
3481{ \
3482 fc_snprintf(actname, sizeof(actname), "subtgt_%d", j); \
3483 act = g_simple_action_new(actname, NULL); \
3484 g_action_map_add_action(map, G_ACTION(act)); \
3485 g_object_set_data(G_OBJECT(act), _sub_target_key_, _sub_target_); \
3486 g_signal_connect(act, "activate", G_CALLBACK(unit_goto_and_callback), \
3487 paction); \
3488 fc_snprintf(subname, sizeof(subname), "%s", _sub_target_name_); \
3489 fc_snprintf(actname, sizeof(actname), "app.subtgt_%d", j++); \
3490 menu_item_append_unref(sub_target_menu, \
3491 g_menu_item_new(subname, actname)); \
3492}
3493
3495 case ASTK_BUILDING:
3497 CREATE_SUB_ITEM(pimpr, "end_building",
3500 break;
3501 case ASTK_TECH:
3503 CREATE_SUB_ITEM(ptech, "end_tech",
3506 break;
3507 case ASTK_EXTRA:
3509 extra_type_iterate(pextra) {
3510 if (!actres_creates_extra(paction->result, pextra)
3511 && !actres_removes_extra(paction->result, pextra)) {
3512 /* Not relevant */
3513 continue;
3514 }
3515 CREATE_SUB_ITEM(pextra, "end_extra",
3516 extra_name_translation(pextra));
3518 break;
3519 case ASTK_SPECIALIST:
3522
3523 CREATE_SUB_ITEM(pspec, "end_specialist",
3526 break;
3527 case ASTK_NONE:
3528 /* Should not be here. */
3530 break;
3531 case ASTK_COUNT:
3532 /* Should not exits */
3534 break;
3535 }
3536
3537#undef CREATE_SUB_ITEM
3538
3540 } else {
3541 g_signal_connect(act, "activate",
3544 }
3546 }
3548 g_menu_insert_submenu(unit_menu, 1, _("Go to a_nd..."), G_MENU_MODEL(submenu));
3549
3550 submenu = g_menu_new();
3551
3553 menu_entry_init(submenu, "START_REVOLUTION");
3554 }
3555
3556 i = 0;
3559 char name[256];
3560 char actname[256];
3561 GSimpleAction *act;
3562
3563 fc_snprintf(actname, sizeof(actname), "government_%d", i);
3567 g_signal_connect(act, "activate", G_CALLBACK(government_callback), g);
3568
3569 /* TRANS: %s is a government name */
3570 fc_snprintf(name, sizeof(name), _("%s..."),
3572 fc_snprintf(actname, sizeof(actname), "app.government_%d", i++);
3574 }
3577 g_menu_insert_submenu(gov_menu, 8, _("_Government"), G_MENU_MODEL(submenu));
3578
3579 submenu = g_menu_new();
3580
3582 if (pextra->buildable) {
3583 char actname[256];
3584 GSimpleAction *act;
3585
3586 fc_snprintf(actname, sizeof(actname), "path_%d", i);
3591 pextra));
3593 g_signal_connect(act, "activate", G_CALLBACK(road_callback), pextra);
3594
3595 fc_snprintf(actname, sizeof(actname), "app.path_%d", i++);
3598 }
3600
3603
3604 submenu = g_menu_new();
3605
3607 if (pextra->buildable) {
3608 char actname[256];
3609 GSimpleAction *act;
3610
3611 fc_snprintf(actname, sizeof(actname), "irrig_%d", i);
3616 pextra));
3618 g_signal_connect(act, "activate", G_CALLBACK(irrigation_callback), pextra);
3619
3620 fc_snprintf(actname, sizeof(actname), "app.irrig_%d", i++);
3623 }
3625
3627 g_menu_insert_submenu(work_menu, 3, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3628
3629 submenu = g_menu_new();
3630
3632 if (pextra->buildable) {
3633 char actname[256];
3634 GSimpleAction *act;
3635
3636 fc_snprintf(actname, sizeof(actname), "mine_%d", i);
3641 pextra));
3643 g_signal_connect(act, "activate", G_CALLBACK(mine_callback), pextra);
3644
3645 fc_snprintf(actname, sizeof(actname), "app.mine_%d", i++);
3648 }
3650
3653
3654 submenu = g_menu_new();
3655
3657 char actname[256];
3658 GSimpleAction *act;
3659
3660 fc_snprintf(actname, sizeof(actname), "clean_%d", i);
3665 pextra));
3667 g_signal_connect(act, "activate", G_CALLBACK(clean_menu_callback), pextra);
3668
3669 fc_snprintf(actname, sizeof(actname), "app.clean_%d", i++);
3673
3675 g_menu_insert_submenu(work_menu, 5, _("_Clean Nuisance"),
3677
3678 submenu = g_menu_new();
3679
3681 if (pextra->buildable) {
3682 char actname[256];
3683 GSimpleAction *act;
3684
3685 fc_snprintf(actname, sizeof(actname), "base_%d", i);
3690 pextra));
3692 g_signal_connect(act, "activate", G_CALLBACK(base_callback), pextra);
3693
3694 fc_snprintf(actname, sizeof(actname), "app.base_%d", i++);
3697 }
3699
3702
3704 char acttext[128], irrtext[128], mintext[128], transtext[128];
3705 char cultext[128], plantext[128];
3706 struct terrain *pterrain;
3707
3708 if (!can_client_change_view()) {
3709 return;
3710 }
3711
3713
3714 if (num_units > 0) {
3715 const struct tile *ptile = NULL;
3716 const struct unit_type *ptype = NULL;
3717
3719 fc_assert((ptile == NULL) == (ptype == NULL));
3720
3721 if (ptile || ptype) {
3722 if (unit_tile(punit) != ptile) {
3724 }
3725 if (unit_type_get(punit) != ptype) {
3727 }
3728 } else {
3729 ptile = unit_tile(punit);
3731 }
3733 }
3734
3739 num_units > 0
3741 && !editor_is_active());
3742
3743 menu_entry_set_sensitive(map, "GAME_SAVE_AS",
3745 menu_entry_set_sensitive(map, "GAME_SAVE",
3747
3748 menu_entry_set_sensitive(map, "SERVER_OPTIONS", client.conn.established);
3749
3750 menu_entry_set_sensitive(map, "LEAVE",
3752
3754 menu_entry_set_sensitive(map, "INFRA_DLG", terrain_control.infrapoints);
3755
3756 menu_entry_set_sensitive(map, "POLICIES", multiplier_count() > 0);
3757 menu_entry_set_sensitive(map, "REPORT_TOP_CITIES", game.info.top_cities_count > 0);
3758 menu_entry_set_sensitive(map, "REPORT_SPACESHIP",
3759 client_player() != NULL && client_player()->spaceship.state != SSHIP_NONE);
3760
3761 info = menu_entry_info_find("EDIT_MODE");
3762 if (info->state != game.info.is_edit_mode) {
3763 info->state = game.info.is_edit_mode;
3767
3768 menu_entry_set_sensitive(map, "EDIT_MODE",
3771 }
3772
3773 info = menu_entry_info_find("TOGGLE_FOG");
3774 if (info->state != game.client.fog_of_war) {
3775 info->state = game.client.fog_of_war;
3776
3780 }
3781
3782 {
3783 char road_buf[500];
3784
3786 if (proad != NULL) {
3787 /* TRANS: Connect with some road type (Road/Railroad) */
3788 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3790 menus_rename(work_menu, 12, "CONNECT_ROAD", road_buf);
3791 }
3792
3794 if (proad != NULL) {
3795 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3797 menus_rename(work_menu, 13, "CONNECT_RAIL", road_buf);
3798 }
3799 }
3800
3801 if (!can_client_issue_orders()) {
3802 return;
3803 }
3804
3805 if (!punits) {
3806 return;
3807 }
3808
3809 /* Remaining part of this function: Update Unit, Work, and Combat menus */
3810
3811 /* Enable the button for adding to a city in all cases, so we
3812 * get an eventual error message from the server if we try. */
3813 menu_entry_set_sensitive(map, "BUILD_CITY",
3818
3819 menu_entry_set_sensitive(map, "DO_ACTION",
3821
3822 menu_entry_set_sensitive(map, "UNIT_TELEPORT",
3824
3825 menu_entry_set_sensitive(map, "BUILD_ROAD",
3829 menu_entry_set_sensitive(map, "BUILD_IRRIGATION",
3831 menu_entry_set_sensitive(map, "BUILD_MINE",
3833 menu_entry_set_sensitive(map, "CULTIVATE",
3835 menu_entry_set_sensitive(map, "PLANT",
3837 menu_entry_set_sensitive(map, "TRANSFORM_TERRAIN",
3839 menu_entry_set_sensitive(map, "FORTIFY",
3842 menu_entry_set_sensitive(map, "PARADROP",
3844 menu_entry_set_sensitive(map, "PILLAGE",
3846 menu_entry_set_sensitive(map, "CLEAN",
3848 menu_entry_set_sensitive(map, "BUILD_FORTRESS",
3850 menu_entry_set_sensitive(map, "BUILD_AIRBASE",
3852 menu_entry_set_sensitive(map, "UNIT_SENTRY",
3854 menu_entry_set_sensitive(map, "UNSENTRY_ALL",
3857 menu_entry_set_sensitive(map, "UNIT_HOMECITY",
3859 menu_entry_set_sensitive(map, "UNIT_UPGRADE", units_can_upgrade(&(wld.map), punits));
3860 menu_entry_set_sensitive(map, "UNIT_CONVERT", units_can_convert(&(wld.map), punits));
3861 menu_entry_set_sensitive(map, "UNIT_DISBAND",
3863 TRUE));
3864
3865 menu_entry_set_sensitive(map, "AUTO_WORKER",
3867 menu_entry_set_sensitive(map, "UNIT_EXPLORE",
3869 menu_entry_set_sensitive(map, "UNIT_BOARD",
3871 menu_entry_set_sensitive(map, "UNIT_DEBOARD",
3873 menu_entry_set_sensitive(map, "UNIT_UNLOAD_TRANSPORTER",
3875
3877 if (proad != NULL) {
3878 struct extra_type *tgt;
3879
3880 tgt = road_extra_get(proad);
3881
3883 } else {
3885 }
3886 menu_entry_set_sensitive(map, "CONNECT_ROAD", conn_possible);
3887
3889 if (proad != NULL) {
3890 struct extra_type *tgt;
3891
3892 tgt = road_extra_get(proad);
3893
3895 } else {
3897 }
3898 menu_entry_set_sensitive(map, "CONNECT_RAIL", conn_possible);
3899
3901 if (proad != NULL) {
3902 struct extra_type *tgt;
3903
3904 tgt = road_extra_get(proad);
3905
3907 } else {
3909 }
3910 menu_entry_set_sensitive(map, "CONNECT_MAGLEV", conn_possible);
3911
3913
3914 if (extra_type_list_size(extras) > 0) {
3915 struct extra_type *tgt;
3916
3917 tgt = extra_type_list_get(extras, 0);
3919 } else {
3921 }
3922 menu_entry_set_sensitive(map, "CONNECT_IRRIGATION", conn_possible);
3923
3924 menu_entry_set_sensitive(map, "TAX_RATES",
3927
3929 menus_rename(work_menu, 0, "BUILD_CITY",
3931 } else {
3932 bool city_on_tile = FALSE;
3933
3934 /* FIXME: This overloading doesn't work well with multiple focus
3935 * units. */
3937 if (tile_city(unit_tile(punit))) {
3939 break;
3940 }
3942
3944 TRUE)) {
3945 menus_rename(work_menu, 0, "BUILD_CITY",
3947 } else {
3948 /* Refresh default order */
3949 menus_rename(work_menu, 0, "BUILD_CITY",
3951 }
3952 }
3953
3955 menus_rename(work_menu, 6, "BUILD_ROAD",
3958 char road_item[500];
3959 struct extra_type *pextra = NULL;
3960
3961 /* FIXME: This overloading doesn't work well with multiple focus
3962 * units. */
3966 if (pextra != NULL) {
3967 break;
3968 }
3970
3971 if (pextra != NULL) {
3972 /* TRANS: Build road of specific type (Road/Railroad) */
3973 snprintf(road_item, sizeof(road_item), _("Build %s"),
3974 extra_name_translation(pextra));
3975 menus_rename(work_menu, 6, "BUILD_ROAD", road_item);
3976 }
3977 } else {
3978 menus_rename(work_menu, 6, "BUILD_ROAD", _("Build _Road"));
3979 }
3980
3981 if (units_all_same_type && num_units > 0) {
3982 struct unit *punit = unit_list_get(punits, 0);
3983 const struct unit_type *to_unittype
3985
3986 if (to_unittype) {
3987 /* TRANS: %s is a unit type. */
3988 fc_snprintf(acttext, sizeof(acttext), _("Upgr_ade to %s"),
3991 unit_type_get(punit))));
3992 } else {
3993 acttext[0] = '\0';
3994 }
3995 } else {
3996 acttext[0] = '\0';
3997 }
3998 if ('\0' != acttext[0]) {
3999 menus_rename(unit_menu, 13, "UNIT_UPGRADE", acttext);
4000 } else {
4001 menus_rename(unit_menu, 13, "UNIT_UPGRADE", _("Upgr_ade"));
4002 }
4003
4004 if (units_can_convert(&(wld.map), punits)) {
4005 if (units_all_same_type && num_units > 0) {
4006 struct unit *punit = unit_list_get(punits, 0);
4007
4008 /* TRANS: %s is a unit type. */
4009 fc_snprintf(acttext, sizeof(acttext), _("C_onvert to %s"),
4011 } else {
4012 acttext[0] = '\0';
4013 }
4014 } else {
4015 menu_entry_set_sensitive(map, "UNIT_CONVERT", FALSE);
4016 acttext[0] = '\0';
4017 }
4018 if ('\0' != acttext[0]) {
4019 menus_rename(unit_menu, 14, "UNIT_CONVERT", acttext);
4020 } else {
4021 menus_rename(unit_menu, 14, "UNIT_CONVERT", _("C_onvert"));
4022 }
4023
4024 if (units_all_same_tile && num_units > 0) {
4025 struct unit *first = unit_list_get(punits, 0);
4026
4027 pterrain = tile_terrain(unit_tile(first));
4028
4030 struct extra_type *pextra = NULL;
4031
4032 /* FIXME: this overloading doesn't work well with multiple focus
4033 * units. */
4037 if (pextra != NULL) {
4038 break;
4039 }
4041
4042 if (pextra != NULL) {
4043 /* TRANS: Build irrigation of specific type */
4044 snprintf(irrtext, sizeof(irrtext), _("Build %s"),
4045 extra_name_translation(pextra));
4046 } else {
4047 sz_strlcpy(irrtext, _("Build _Irrigation"));
4048 }
4049 } else {
4050 sz_strlcpy(irrtext, _("Build _Irrigation"));
4051 }
4052
4053 if (pterrain->cultivate_result != T_NONE) {
4054 fc_snprintf(cultext, sizeof(cultext), _("Change to %s"),
4057 } else {
4058 sz_strlcpy(cultext, _("_Cultivate"));
4059 }
4060
4062 struct extra_type *pextra = NULL;
4063
4064 /* FIXME: this overloading doesn't work well with multiple focus
4065 * units. */
4069 if (pextra != NULL) {
4070 break;
4071 }
4073
4074 if (pextra != NULL) {
4075 /* TRANS: Build mine of specific type */
4076 snprintf(mintext, sizeof(mintext), _("Build %s"),
4077 extra_name_translation(pextra));
4078 } else {
4079 sz_strlcpy(mintext, _("Build _Mine"));
4080 }
4081 } else {
4082 sz_strlcpy(mintext, _("Build _Mine"));
4083 }
4084
4085 if (pterrain->plant_result != T_NONE) {
4086 fc_snprintf(plantext, sizeof(plantext), _("Change to %s"),
4088 } else {
4089 sz_strlcpy(plantext, _("_Plant"));
4090 }
4091
4092 if (pterrain->transform_result != T_NONE
4093 && pterrain->transform_result != pterrain) {
4094 fc_snprintf(transtext, sizeof(transtext), _("Transf_orm to %s"),
4097 } else {
4098 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4099 }
4100 } else {
4101 sz_strlcpy(irrtext, _("Build _Irrigation"));
4102 sz_strlcpy(cultext, _("_Cultivate"));
4103 sz_strlcpy(mintext, _("Build _Mine"));
4104 sz_strlcpy(plantext, _("_Plant"));
4105 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4106 }
4107
4108 menus_rename(work_menu, 7, "BUILD_IRRIGATION", irrtext);
4109 menus_rename(work_menu, 9, "CULTIVATE", cultext);
4110 menus_rename(work_menu, 8, "BUILD_MINE", mintext);
4111 menus_rename(work_menu, 10, "PLANT", plantext);
4112 menus_rename(work_menu, 11, "TRANSFORM_TERRAIN", transtext);
4113
4114 menus_rename(unit_menu, 12, "UNIT_HOMECITY",
4116
4117 menus_rename(combat_menu, 1, "BUILD_FORTRESS",
4118 Q_(terrain_control.gui_type_base0));
4119 menus_rename(combat_menu, 2, "BUILD_AIRBASE",
4120 Q_(terrain_control.gui_type_base1));
4121}
4122
4123/************************************************************************/
4128{
4129 if (!menus_built) {
4130 return;
4131 }
4132
4133#ifdef MENUS_GTK3
4134
4135 if (!can_client_change_view()) {
4137
4138 return;
4139 }
4140
4143
4144 menu_entry_set_sensitive("SHOW_NATIONAL_BORDERS",
4146
4148#endif /* MENUS_GTK3 */
4149}
4150
4151/**********************************************************************/
4155{
4157
4158 if (enable) {
4159 if (main_menubar == NULL) {
4162 /* Ensure the menus are really created before performing any operations
4163 * on them. */
4164 while (g_main_context_pending(NULL)) {
4166 }
4167 }
4168
4171
4172 } else {
4175 }
4176
4177 /* Workaround for gtk bug that (re)setting the menubar after the window has
4178 * been already created is not noticed. */
4179 g_object_notify(G_OBJECT(gtk_settings_get_default()), "gtk-shell-shows-menubar");
4180}
4181
4182/**********************************************************************/
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
struct civclient client
enum client_states client_state(void)
void send_report_request(enum report_type type)
bool can_client_issue_orders(void)
bool client_has_player(void)
bool can_client_change_view(void)
#define client_player()
@ C_S_DISCONNECTED
Definition client_main.h:45
@ C_S_RUNNING
Definition client_main.h:47
bool can_units_do_connect(struct unit_list *punits, enum unit_activity activity, struct extra_type *tgt)
Definition climisc.c:1242
void disconnect_from_server(bool leaving_sound)
Definition clinet.c:306
char * incite_cost
Definition comments.c:76
@ REPORT_WONDERS_OF_THE_WORLD
Definition conn_types.h:50
@ REPORT_DEMOGRAPHIC
Definition conn_types.h:53
@ REPORT_WONDERS_OF_THE_WORLD_LONG
Definition conn_types.h:51
@ REPORT_ACHIEVEMENTS
Definition conn_types.h:54
@ REPORT_TOP_CITIES
Definition conn_types.h:52
void send_save_game(const char *filename)
bool is_server_running(void)
bool can_client_access_hack(void)
bool can_conn_enable_editing(const struct connection *pconn)
Definition connection.c:523
void key_coastline_toggle(void)
Definition control.c:3952
void key_irrigation_toggle(void)
Definition control.c:3968
void key_unit_sentry(void)
Definition control.c:3756
void key_city_output_toggle(void)
Definition control.c:3853
void request_unit_return(struct unit *punit)
Definition control.c:1552
void request_unit_fortify(struct unit *punit)
Definition control.c:2353
void request_unit_caravan_action(struct unit *punit, action_id action)
Definition control.c:2223
void key_focus_unit_toggle(void)
Definition control.c:4048
void key_unit_auto_explore(void)
Definition control.c:3577
void key_unit_connect(enum unit_activity activity, struct extra_type *tgt)
Definition control.c:3375
void key_city_full_bar_toggle(void)
Definition control.c:3885
void key_bases_toggle(void)
Definition control.c:3984
void key_map_native_toggle(void)
Definition control.c:3877
void key_resources_toggle(void)
Definition control.c:3992
void request_unit_goto(enum unit_orders last_order, action_id act_id, int sub_tgt_id)
Definition control.c:1130
void key_unit_paradrop(void)
Definition control.c:3479
struct unit_list * get_units_in_focus(void)
Definition control.c:177
void key_unit_teleport(void)
Definition control.c:3495
void key_unit_shields_toggle(void)
Definition control.c:4040
void key_city_productions_toggle(void)
Definition control.c:3919
void key_unit_plant(void)
Definition control.c:3696
void key_unit_fortress(void)
Definition control.c:3624
void key_unit_mine(void)
Definition control.c:3688
void key_unit_pillage(void)
Definition control.c:3708
void request_unit_unload(struct unit *pcargo)
Definition control.c:2194
void key_editor_toggle_fogofwar(void)
Definition control.c:4081
void request_new_unit_activity_targeted(struct unit *punit, enum unit_activity act, struct extra_type *tgt)
Definition control.c:1938
void key_unit_irrigate(void)
Definition control.c:3668
void request_unit_build_city(struct unit *punit)
Definition control.c:1817
void key_unit_unload_all(void)
Definition control.c:3517
void key_cities_toggle(void)
Definition control.c:4016
void key_city_outlines_toggle(void)
Definition control.c:3845
void key_unit_homecity(void)
Definition control.c:3641
void key_unit_patrol(void)
Definition control.c:3487
void key_unit_solid_bg_toggle(void)
Definition control.c:4032
void key_terrain_toggle(void)
Definition control.c:3944
void key_paths_toggle(void)
Definition control.c:3960
void key_unit_wakeup_others(void)
Definition control.c:3550
void key_unit_stack_size_toggle(void)
Definition control.c:3936
void key_huts_toggle(void)
Definition control.c:4000
void key_fog_of_war_toggle(void)
Definition control.c:4056
void key_unit_wait(void)
Definition control.c:3542
void key_units_toggle(void)
Definition control.c:4024
void key_unit_select_battlegroup(int battlegroup, bool append)
Definition control.c:3819
void key_map_grid_toggle(void)
Definition control.c:3861
void key_pollution_toggle(void)
Definition control.c:4008
void key_city_growth_toggle(void)
Definition control.c:3902
void key_unit_action_select_tgt(void)
Definition control.c:3406
void key_city_buycost_toggle(void)
Definition control.c:3911
int get_num_units_in_focus(void)
Definition control.c:185
void key_unit_transform(void)
Definition control.c:3768
void key_unit_done(void)
Definition control.c:3463
void key_city_trade_routes_toggle(void)
Definition control.c:3928
void key_city_names_toggle(void)
Definition control.c:3893
void request_unit_select(struct unit_list *punits, enum unit_select_type_mode seltype, enum unit_select_location_mode selloc)
Definition control.c:1621
void key_unit_auto_work(void)
Definition control.c:3590
void key_unit_airbase(void)
Definition control.c:3560
void key_unit_goto(void)
Definition control.c:3471
void key_unit_convert(void)
Definition control.c:3602
void key_unit_clean(void)
Definition control.c:3720
void key_editor_toggle(void)
Definition control.c:4064
void key_unit_assign_battlegroup(int battlegroup, bool append)
Definition control.c:3780
void key_unit_cultivate(void)
Definition control.c:3676
void key_mines_toggle(void)
Definition control.c:3976
void key_map_borders_toggle(void)
Definition control.c:3869
#define can_unit_do_activity_targeted_client(_punit_, _act_, _tgt_)
Definition control.h:43
#define can_units_do_activity_targeted_client(_punits_, _act_, _tgt_)
Definition control.h:47
#define can_units_do_activity_client(_punits_, _act_)
Definition control.h:45
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit * punit
Definition dialogs_g.h:74
bool editor_is_active(void)
Definition editor.c:346
@ OBJTYPE_GAME
Definition editor.h:31
struct extra_type * next_extra_for_tile(const struct tile *ptile, enum extra_cause cause, const struct player *pplayer, const struct unit *punit)
Definition extras.c:779
int extra_number(const struct extra_type *pextra)
Definition extras.c:161
struct extra_type_list * extra_type_list_by_cause(enum extra_cause cause)
Definition extras.c:249
static struct extra_type extras[MAX_EXTRA_TYPES]
Definition extras.c:31
const char * extra_name_translation(const struct extra_type *pextra)
Definition extras.c:194
#define extra_type_iterate(_p)
Definition extras.h:315
#define extra_type_iterate_end
Definition extras.h:321
#define extra_type_by_rmcause_iterate_end
Definition extras.h:358
#define extra_type_by_rmcause_iterate(_rmcause, _extra)
Definition extras.h:353
#define extra_type_by_cause_iterate_end
Definition extras.h:339
#define extra_type_by_cause_iterate(_cause, _extra)
Definition extras.h:333
#define NO_TARGET
Definition fc_types.h:214
@ BORDERS_DISABLED
Definition fc_types.h:730
#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:145
bool untargeted_revolution_allowed(void)
Definition government.c:568
bool can_change_to_government(struct player *pplayer, const struct government *gov)
Definition government.c:168
#define governments_iterate(NAME_pgov)
Definition government.h:127
#define governments_iterate_end
Definition government.h:130
void log_output_window(void)
Definition chatline.c:929
void clear_output_window(void)
Definition chatline.c:944
void city_report_dialog_popup(bool raise)
Definition cityrep.c:292
void unit_select_dialog_popup(struct tile *ptile)
Definition dialogs.c:377
void popup_upgrade_dialog(struct unit_list *punits)
Definition dialogs.c:1435
void popup_disband_dialog(struct unit_list *punits)
Definition dialogs.c:1473
void editgui_refresh(void)
Definition editgui.c:1798
void property_editor_popup(struct property_editor *pe, enum editor_object_type objtype)
Definition editprop.c:6292
struct property_editor * editprop_get_property_editor(void)
Definition editprop.c:6245
void property_editor_reload(struct property_editor *pe, enum editor_object_type objtype)
Definition editprop.c:6382
void popup_find_dialog(void)
Definition finddlg.c:58
void popup_multiplier_dialog(void)
Definition gamedlgs.c:383
void popup_rates_dialog(void)
Definition gamedlgs.c:533
void popup_goto_dialog(void)
Definition gotodlg.c:258
void fullscreen_opt_refresh(struct option *poption)
Definition gui_main.c:2434
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:2350
#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:698
static void show_national_borders_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1208
static void show_focus_unit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1444
GtkWidget * setup_menus(GtkWidget *window)
Definition menu.c:2162
static void help_connecting_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:858
static void menus_rename(const char *key, const gchar *new_label)
Definition menu.c:2296
static void help_combat_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1066
static void menu_entry_group_set_sensitive(enum menu_entry_grouping group, gboolean is_sensitive)
Definition menu.c:2264
static void help_ruleset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1010
static void select_single_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1516
static void unit_unload_transporter_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1732
static void help_government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1106
static void report_achievements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:834
static void show_fog_of_war_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1455
static void help_zoc_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1074
static void show_city_productions_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1265
static void toggle_fog_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1486
static void client_lua_script_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:818
static void show_city_names_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1242
static void help_space_race_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1122
static void help_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1018
static void help_playing_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1002
static void plant_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1850
static struct menu_entry_info menu_entries[]
Definition menu.c:268
static void base_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2012
static void help_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1034
static void unit_sentry_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1696
static void center_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2052
static void unit_explore_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1680
static void build_mine_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1842
static void quit_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:750
static void unit_return_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1670
static void show_city_trade_routes_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1288
static void transform_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1922
static void help_wonders_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1098
static void show_terrain_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1299
static void show_city_growth_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1254
static void show_stack_size_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1433
static void multiplier_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1996
static void help_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1090
static void save_game_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:682
static void show_unit_solid_bg_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1411
static void show_coastline_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1310
static void show_city_full_bar_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1230
static void edit_mode_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1163
static void help_chatline_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:874
static void show_paths_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1320
static void connect_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1858
static void help_overview_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:994
static void save_game_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:690
static void help_diplomacy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1114
static void show_units_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1400
static void show_irrigation_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1330
static void show_map_grid_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1197
static void help_improvements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1050
static void find_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:758
static void report_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:782
static void report_demographic_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:826
static void help_worklist_editor_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:882
static void help_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1042
static void leave_local_game_response(GtkWidget *dialog, gint response)
Definition menu.c:715
static void help_language_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:842
static void server_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:658
static void leave_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:730
static void select_same_type_cont_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1540
static void unit_convert_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1757
static void select_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1556
static void show_huts_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1370
static void report_wow_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:790
static void unit_upgrade_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1749
static void help_tech_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1082
static void unit_goto_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1596
static void clean_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2037
static void build_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1773
static void unit_patrol_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1688
void real_menus_init(void)
Definition menu.c:2926
menu_entry_grouping
Definition menu.c:92
@ MGROUP_ALL
Definition menu.c:93
@ MGROUP_PLAYING
Definition menu.c:92
@ MGROUP_PLAYER
Definition menu.c:93
@ MGROUP_SAFE
Definition menu.c:92
@ MGROUP_EDIT
Definition menu.c:92
@ MGROUP_UNIT
Definition menu.c:93
static void rally_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1564
static void help_about_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1146
static void build_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1800
static void local_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:642
static void show_cities_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1390
static void unit_homecity_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1741
static void menu_entry_set_sensitive(const char *key, gboolean is_sensitive)
Definition menu.c:2251
static void show_pollution_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1380
static void save_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:666
static void save_mapimg_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:706
static void worklists_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:766
static void connect_maglev_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1890
static void full_screen_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1466
static void report_top_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:802
static void help_controls_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:866
static void select_same_type_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1548
static void connect_rail_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1874
static void unit_wait_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1580
static const char * get_tile_change_menu_text(struct tile *ptile, enum unit_activity activity)
Definition menu.c:2349
static void build_airbase_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1956
static void report_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2068
static void infra_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1572
static void message_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:650
static void tax_rate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1988
static void help_musicset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1026
static void unit_goto_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1660
static struct menu_entry_info * menu_entry_info_find(const char *key)
Definition menu.c:2222
static void auto_work_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1792
static void government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2004
static void report_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2076
static void report_messages_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:810
static void show_bases_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1350
static void select_same_type_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1532
static void save_options_on_exit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1154
static void show_native_tiles_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1219
static void menu_entry_init(GtkBuildable *item)
Definition menu.c:2102
static void show_unit_shields_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1422
static void reload_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:674
static void scenario_properties_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1496
static void clear_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:626
static void unit_deboard_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1722
static void help_policies_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:850
static void unit_done_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1588
static void help_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1130
static void unit_goto_and_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1604
static void show_city_output_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1186
static void show_city_outlines_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1175
static void save_scenario_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1508
static void help_copying_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1138
static void cultivate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1834
static void save_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:634
void real_menus_update(void)
Definition menu.c:2364
static void report_spaceship_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2092
static void select_all_on_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1524
static void show_city_buy_cost_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1277
static void build_fortress_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1938
#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_)
static void view_menu_update_sensitivity(void)
Definition menu.c:2317
static void unit_board_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1712
static void fortify_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1946
static void show_resources_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1360
static void connect_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1906
static void build_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1826
static void report_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2060
static void road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2024
static void unit_disband_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1765
static void help_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1058
static void report_research_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2084
static void map_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:774
void popup_messageopt_dialog(void)
Definition messagedlg.c:51
void meswin_dialog_popup(bool raise)
Definition messagewin.c:417
void option_dialog_popup(const char *name, const struct option_set *poptset)
Definition optiondlg.c:984
void save_mapimg_dialog_popup(void)
Definition pages.c:3551
void mapimg_client_save(const char *filename)
Definition pages.c:3570
void save_game_dialog_popup(void)
Definition pages.c:3487
void save_scenario_dialog_popup(void)
Definition pages.c:3522
void popup_players_dialog(bool raise)
Definition plrdlg.c:91
void rally_dialog_popup(void)
void science_report_dialog_popup(bool raise)
Definition repodlgs.c:716
void economy_report_dialog_popup(bool raise)
Definition repodlgs.c:1243
void units_report_dialog_popup(bool raise)
Definition repodlgs.c:1768
void science_report_dialog_popdown(void)
Definition repodlgs.c:740
void popup_spaceship_dialog(struct player *pplayer)
bool request_transport(struct unit *cargo, struct tile *ptile)
void popup_worklists_report(void)
Definition wldlg.c:287
static GtkApplication * fc_app
Definition gui_main.c:184
GtkApplication * gui_app(void)
Definition gui_main.c:2678
#define submenu_append_unref(menu, name, submenu)
Definition gui_stuff.h:165
#define menu_item_insert_unref(menu, index, item)
Definition gui_stuff.h:142
#define menu_item_append_unref(menu, item)
Definition gui_stuff.h:149
static void help_governor_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:1655
static void irrigation_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2753
static void bg_append_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2883
static void unsentry_all_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2354
static GMenu * combat_menu
Definition menu.c:90
static GMenuItem * create_toggle_menu_item_for_key(const char *key)
Definition menu.c:2917
static void pillage_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2666
void enable_menus(bool enable)
Definition menu.c:4150
static void setup_app_actions(GApplication *fc_app)
Definition menu.c:2968
static GMenu * options_menu
Definition menu.c:84
static void register_bg_actions(GActionMap *map, int bg)
Definition menu.c:3008
const GActionEntry acts[]
Definition menu.c:1043
static void revolution_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2714
static GMenu * view_menu
Definition menu.c:86
@ VMENU_HUTS
Definition menu.c:1031
@ VMENU_MINES
Definition menu.c:1028
@ VMENU_COASTLINE
Definition menu.c:1025
@ VMENU_UNIT_SOLID_BG
Definition menu.c:1035
@ VMENU_CITY_NAMES
Definition menu.c:1019
@ VMENU_UNITS
Definition menu.c:1034
@ VMENU_CITY_FULL_BAR
Definition menu.c:1018
@ VMENU_CITY_OUTLINES
Definition menu.c:1013
@ VMENU_POLLUTION
Definition menu.c:1032
@ VMENU_FOCUS_UNIT
Definition menu.c:1038
@ VMENU_BASES
Definition menu.c:1029
@ VMENU_MAP_GRID
Definition menu.c:1015
@ VMENU_CITY_BUY_COST
Definition menu.c:1022
@ VMENU_TERRAIN
Definition menu.c:1024
@ VMENU_CITY_GROWTH
Definition menu.c:1020
@ VMENU_PATHS
Definition menu.c:1026
@ VMENU_CITIES
Definition menu.c:1033
@ VMENU_STACK_SIZE
Definition menu.c:1037
@ VMENU_UNIT_SHIELDS
Definition menu.c:1036
@ VMENU_IRRIGATION
Definition menu.c:1027
@ VMENU_NATIVE_TILES
Definition menu.c:1017
@ VMENU_CITY_OUTPUT
Definition menu.c:1014
@ VMENU_RESOURCES
Definition menu.c:1030
@ VMENU_CITY_PRODUCTIONS
Definition menu.c:1021
@ VMENU_CITY_TRADE_ROUTES
Definition menu.c:1023
@ VMENU_FULL_SCREEN
Definition menu.c:1040
@ VMENU_NAT_BORDERS
Definition menu.c:1016
@ VMENU_FOW
Definition menu.c:1039
static GMenu * work_menu
Definition menu.c:89
static void bg_assign_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2873
static void menu_entry_set_sensitive_info(GActionMap *map, struct menu_entry_info *info, gboolean is_enabled)
Definition menu.c:3306
static bool menus_built
Definition menu.c:75
static void show_mines_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:1951
static GMenu * edit_menu
Definition menu.c:85
void menus_disable_unit_commands(void)
Definition menu.c:4181
static void unit_teleport_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2335
static void paradrop_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2656
const struct menu_entry_option_map meoms[]
Definition menu.c:1731
static GMenu * unit_menu
Definition menu.c:88
static void do_action_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2676
static void bg_select_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2863
static void mine_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2768
static GMenu * main_menubar
Definition menu.c:74
static GMenuItem * create_toggle_menu_item(struct menu_entry_info *info)
Definition menu.c:2894
void menus_set_initial_toggle_values(void)
Definition menu.c:2950
static void clean_menu_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2783
static void view_menu_item_toggle(void(*cb)(void), bool updt_sensitivity, gpointer data)
Definition menu.c:1772
#define enable(id)
Definition widget.h:223
void popup_revolution_dialog(void)
Definition dialogs.c:112
#define HELP_MUSICSET_ITEM
#define HELP_CITIES_ITEM
#define HELP_TERRAIN_ITEM
#define HELP_LANGUAGES_ITEM
#define HELP_CONNECTING_ITEM
#define HELP_TILESET_ITEM
#define HELP_CHATLINE_ITEM
#define HELP_RULESET_ITEM
#define HELP_GOVERNMENT_ITEM
#define HELP_ABOUT_ITEM
#define HELP_MULTIPLIER_ITEM
#define HELP_PLAYING_ITEM
#define HELP_IMPROVEMENTS_ITEM
#define HELP_UNITS_ITEM
#define HELP_ZOC_ITEM
#define HELP_WORKLIST_EDITOR_ITEM
#define HELP_WONDERS_ITEM
#define HELP_COMBAT_ITEM
#define HELP_SPACE_RACE_ITEM
#define HELP_COPYING_ITEM
#define HELP_OVERVIEW_ITEM
#define HELP_NATIONS_ITEM
#define HELP_TECHS_ITEM
#define HELP_DIPLOMACY_ITEM
#define HELP_ECONOMY_ITEM
#define HELP_CMA_ITEM
#define HELP_CONTROLS_ITEM
Impr_type_id improvement_number(const struct impr_type *pimprove)
const char * improvement_name_translation(const struct impr_type *pimprove)
#define improvement_iterate_end
#define improvement_iterate(_p)
const char * name
Definition inputfile.c:127
#define fc_assert_ret(condition)
Definition log.h:192
#define fc_assert(condition)
Definition log.h:177
#define FC_STATIC_ASSERT(cond, tag)
Definition log.h:238
struct terrain_misc terrain_control
Definition map.c:68
Multiplier_type_id multiplier_count(void)
Definition multipliers.c:88
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
@ GUI_GTK_MSGCHAT_MERGED
Definition options.h:69
struct extra_type * road_extra_get(const struct road_type *proad)
Definition road.c:42
struct road_type * road_by_gui_type(enum road_gui_type gui_type)
Definition road.c:180
static char * grouping
Definition shared.c:98
@ 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
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:98
const char * accl
Definition menu.c:96
const char * key
Definition menu.c:99
bool state
Definition menu.c:99
enum menu_entry_grouping grouping
Definition menu.c:104
void(* toggle)(GSimpleAction *act, GVariant *value, gpointer data)
Definition menu.c:98
GCallback cb
Definition menu.c:103
const char * name
Definition menu.c:100
const char * action
Definition menu.c:95
Definition menu.c:1725
bool * option
Definition menu.c:1727
const char * menu_entry
Definition menu.c:1726
int menu_pos
Definition menu.c:1728
enum borders_mode borders
struct terrain * cultivate_result
Definition terrain.h:108
struct terrain * plant_result
Definition terrain.h:111
struct terrain * transform_result
Definition terrain.h:122
Definition tile.h:50
Definition unit.h:140
struct civ_map map
int fc_snprintf(char *str, size_t n, const char *format,...)
Definition support.c:960
#define sz_strlcpy(dest, src)
Definition support.h:195
#define TRUE
Definition support.h:46
#define FALSE
Definition support.h:47
const char * advance_name_translation(const struct advance *padvance)
Definition tech.c:300
Tech_type_id advance_number(const struct advance *padvance)
Definition tech.c:98
#define advance_iterate(_p)
Definition tech.h: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:649
bool can_unit_teleport(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:849
bool can_unit_paradrop(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:865
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:407
@ ORDER_PERFORM_ACTION
Definition unit.h:48
#define unit_owner(_pu)
Definition unit.h:406
#define MAX_NUM_BATTLEGROUPS
Definition unit.h:192
bool units_can_convert(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:352
bool units_are_occupied(const struct unit_list *punits)
Definition unitlist.c:275
bool units_can_unload(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:303
bool can_units_do_base_gui(const struct unit_list *punits, enum base_gui_type base_gui)
Definition unitlist.c:182
bool can_units_do_any_road(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:163
bool units_can_upgrade(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:337
bool units_have_activity_on_tile(const struct unit_list *punits, enum unit_activity activity)
Definition unitlist.c:321
bool units_have_type_flag(const struct unit_list *punits, enum unit_type_flag_id flag, bool has_flag)
Definition unitlist.c:204
bool can_units_do(const struct unit_list *punits, bool(can_fn)(const struct unit *punit))
Definition unitlist.c:95
bool units_can_do_action(const struct unit_list *punits, action_id act_id, bool can_do)
Definition unitlist.c:241
bool units_can_load(const struct unit_list *punits)
Definition unitlist.c:289
bool can_units_do_on_map(const struct civ_map *nmap, const struct unit_list *punits, bool(can_fn)(const struct civ_map *nmap, const struct unit *punit))
Definition unitlist.c:111
#define unit_list_iterate(unitlist, punit)
Definition unitlist.h:31
#define unit_list_iterate_end
Definition unitlist.h:33
const struct unit_type * unit_type_get(const struct unit *punit)
Definition unittype.c: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