Freeciv-3.3
Loading...
Searching...
No Matches
menu.c
Go to the documentation of this file.
1/***********************************************************************
2 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12***********************************************************************/
13
14#ifdef HAVE_CONFIG_H
15#include <fc_config.h>
16#endif
17
18#include <stdlib.h>
19
20#include <gtk/gtk.h>
21
22/* utility */
23#include "fcintl.h"
24#include "log.h"
25#include "shared.h"
26#include "support.h"
27
28/* common */
29#include "game.h"
30#include "government.h"
31#include "road.h"
32#include "unit.h"
33
34/* client */
35#include "client_main.h"
36#include "clinet.h"
37#include "connectdlg_common.h"
38#include "control.h"
39#include "mapview_common.h"
40#include "options.h"
41#include "tilespec.h"
42
43/* client/gui-gtk-4.0 */
44#include "chatline.h"
45#include "cityrep.h"
46#include "dialogs.h"
47#include "editgui.h"
48#include "editprop.h"
49#include "finddlg.h"
50#include "gamedlgs.h"
51#include "gotodlg.h"
52#include "gui_main.h"
53#include "gui_stuff.h"
54#include "helpdlg.h"
55#include "infradlg.h"
56#include "luaconsole.h"
57#include "mapctrl.h" /* center_on_unit(). */
58#include "messagedlg.h"
59#include "messagewin.h"
60#include "optiondlg.h"
61#include "pages.h"
62#include "plrdlg.h"
63#include "rallypointdlg.h"
64#include "ratesdlg.h"
65#include "repodlgs.h"
66#include "sprite.h"
67#include "spaceshipdlg.h"
68#include "unitselect.h"
69#include "wldlg.h"
70
71#include "menu.h"
72
74static bool menus_built = FALSE;
75
77
79
80enum menu_entry_grouping { MGROUP_SAFE = 0B00000001,
81 MGROUP_EDIT = 0B00000010,
82 MGROUP_PLAYING = 0B00000100,
83 MGROUP_UNIT = 0B00001000,
84 MGROUP_PLAYER = 0B00010000,
85 MGROUP_CHAR = 0B00100000,
86 MGROUP_ALL = 0B11111111 };
87
95
96struct menu_entry_info {
97 const char *key;
98 const char *name;
99 const char *action;
100 const char *accl;
102 void (*toggle)(GSimpleAction *act, GVariant *value, gpointer data);
103 bool state; /* Only for toggle actions */
104};
105
108static GMenuItem *create_toggle_menu_item_for_key(const char *key);
109
110/* Menu entry callbacks */
112 GVariant *parameter,
113 gpointer data);
115 GVariant *parameter,
116 gpointer data);
118 GVariant *parameter,
119 gpointer data);
121 GVariant *parameter,
122 gpointer data);
124 GVariant *parameter,
125 gpointer data);
127 GVariant *parameter,
128 gpointer data);
130 GVariant *parameter,
131 gpointer data);
133 GVariant *parameter,
134 gpointer data);
136 GVariant *parameter,
137 gpointer data);
138
139#ifdef FREECIV_DEBUG
141 GVariant *parameter,
142 gpointer data);
143#endif /* FREECIV_DEBUG */
144
146 GVariant *parameter,
147 gpointer data);
149 GVariant *parameter,
150 gpointer data);
152 GVariant *parameter,
153 gpointer data);
155 GVariant *parameter,
156 gpointer data);
158 GVariant *parameter,
159 gpointer data);
161 GVariant *parameter,
162 gpointer data);
164 GVariant *parameter,
165 gpointer data);
167 GVariant *parameter,
168 gpointer data);
170 GVariant *parameter,
171 gpointer data);
173 GVariant *parameter,
174 gpointer data);
176 GVariant *parameter,
177 gpointer data);
179 GVariant *parameter,
180 gpointer data);
182 GVariant *parameter,
183 gpointer data);
185 GVariant *parameter,
186 gpointer data);
188 GVariant *parameter,
189 gpointer data);
191 GVariant *parameter,
192 gpointer data);
194 GVariant *parameter,
195 gpointer data);
197 GVariant *parameter,
198 gpointer data);
200 GVariant *parameter,
201 gpointer data);
203 GVariant *parameter,
204 gpointer data);
206 GVariant *parameter,
207 gpointer data);
209 GVariant *parameter,
210 gpointer data);
212 GVariant *parameter,
213 gpointer data);
215 GVariant *parameter,
216 gpointer data);
218 GVariant *parameter,
219 gpointer data);
221 GVariant *parameter,
222 gpointer data);
224 GVariant *parameter,
225 gpointer data);
227 GVariant *parameter,
228 gpointer data);
230 GVariant *parameter,
231 gpointer data);
233 GVariant *parameter,
234 gpointer data);
236 GVariant *parameter,
237 gpointer data);
239 GVariant *parameter,
240 gpointer data);
242 GVariant *parameter,
243 gpointer data);
245 GVariant *parameter,
246 gpointer data);
248 GVariant *parameter,
249 gpointer data);
251 GVariant *parameter,
252 gpointer data);
254 GVariant *parameter,
255 gpointer data);
257 GVariant *parameter,
258 gpointer data);
260 GVariant *parameter,
261 gpointer data);
263 GVariant *parameter,
264 gpointer data);
266 GVariant *parameter,
267 gpointer data);
269 GVariant *parameter,
270 gpointer data);
272 GVariant *parameter,
273 gpointer data);
275 GVariant *parameter,
276 gpointer data);
278 GVariant *parameter,
279 gpointer data);
281 GVariant *parameter,
282 gpointer data);
284 GVariant *parameter,
285 gpointer data);
287 GVariant *parameter,
288 gpointer data);
290 GVariant *parameter,
291 gpointer data);
293 GVariant *parameter,
294 gpointer data);
296 GVariant *parameter,
297 gpointer data);
299 GVariant *parameter,
300 gpointer data);
302 GVariant *parameter,
303 gpointer data);
305 GVariant *parameter,
306 gpointer data);
308 GVariant *parameter,
309 gpointer data);
311 GVariant *parameter,
312 gpointer data);
314 GVariant *parameter,
315 gpointer data);
317 GVariant *parameter,
318 gpointer data);
320 GVariant *parameter,
321 gpointer data);
323 GVariant *parameter,
324 gpointer data);
326 GVariant *parameter,
327 gpointer data);
329 GVariant *parameter,
330 gpointer data);
332 GVariant *parameter,
333 gpointer data);
335 GVariant *parameter,
336 gpointer data);
338 GVariant *parameter,
339 gpointer data);
341 GVariant *parameter,
342 gpointer data);
344 GVariant *parameter,
345 gpointer data);
347 GVariant *parameter,
348 gpointer data);
350 GVariant *parameter,
351 gpointer data);
353 GVariant *parameter,
354 gpointer data);
356 GVariant *parameter,
357 gpointer data);
359 GVariant *parameter,
360 gpointer data);
362 GVariant *parameter,
363 gpointer data);
365 GVariant *parameter,
366 gpointer data);
368 GVariant *parameter,
369 gpointer data);
371 GVariant *parameter,
372 gpointer data);
374 GVariant *parameter,
375 gpointer data);
377 GVariant *parameter,
378 gpointer data);
380 GVariant *parameter,
381 gpointer data);
383 GVariant *parameter,
384 gpointer data);
386 GVariant *parameter,
387 gpointer data);
389 GVariant *parameter,
390 gpointer data);
391
393 GVariant *parameter,
394 gpointer data);
396 GVariant *parameter,
397 gpointer data);
399 GVariant *parameter,
400 gpointer data);
402 GVariant *parameter,
403 gpointer data);
405 GVariant *parameter,
406 gpointer data);
408 GVariant *parameter,
409 gpointer data);
411 GVariant *parameter,
412 gpointer data);
414 GVariant *parameter,
415 gpointer data);
417 GVariant *parameter,
418 gpointer data);
420 GVariant *parameter,
421 gpointer data);
423 GVariant *parameter,
424 gpointer data);
426 GVariant *parameter,
427 gpointer data);
429 GVariant *parameter,
430 gpointer data);
432 GVariant *parameter,
433 gpointer data);
435 GVariant *parameter,
436 gpointer data);
438 GVariant *parameter,
439 gpointer data);
441 GVariant *parameter,
442 gpointer data);
444 GVariant *parameter,
445 gpointer data);
447 GVariant *parameter,
448 gpointer data);
450 GVariant *parameter,
451 gpointer data);
453 GVariant *parameter,
454 gpointer data);
456 GVariant *parameter,
457 gpointer data);
459 GVariant *parameter,
460 gpointer data);
462 GVariant *parameter,
463 gpointer data);
465 GVariant *parameter,
466 gpointer data);
468 GVariant *parameter,
469 gpointer data);
471 GVariant *parameter,
472 gpointer data);
474 GVariant *parameter,
475 gpointer data);
477 GVariant *parameter,
478 gpointer data);
480 GVariant *parameter,
481 gpointer data);
483 GVariant *parameter,
484 gpointer data);
486 GVariant *parameter,
487 gpointer data);
489 GVariant *parameter,
490 gpointer data);
491
493 GVariant *parameter,
494 gpointer data);
496 GVariant *parameter,
497 gpointer data);
499 GVariant *parameter,
500 gpointer data);
502 GVariant *parameter,
503 gpointer data);
505 GVariant *parameter,
506 gpointer data);
508 GVariant *parameter,
509 gpointer data);
511 GVariant *parameter,
512 gpointer data);
514 GVariant *parameter,
515 gpointer data);
517 GVariant *parameter,
518 gpointer data);
520 GVariant *parameter,
521 gpointer data);
523 GVariant *parameter,
524 gpointer data);
526 GVariant *parameter,
527 gpointer data);
529 GVariant *parameter,
530 gpointer data);
532 GVariant *parameter,
533 gpointer data);
534
536 GVariant *parameter,
537 gpointer data);
539 GVariant *parameter,
540 gpointer data);
542 GVariant *parameter,
543 gpointer data);
544
546{
547 /* Game menu */
548 { "CLEAR_CHAT_LOGS", N_("_Clear Chat Log"),
549 "clear_chat", NULL, MGROUP_SAFE,
550 NULL, FALSE },
551 { "SAVE_CHAT_LOGS", N_("Save Chat _Log"),
552 "save_chat", NULL, MGROUP_SAFE,
553 NULL, FALSE },
554
555 { "LOCAL_OPTIONS", N_("_Local Client"),
556 "local_options", NULL, MGROUP_SAFE,
557 NULL, FALSE },
558 { "MESSAGE_OPTIONS", N_("_Message"),
559 "message_options", NULL, MGROUP_SAFE,
560 NULL, FALSE },
561 { "SERVER_OPTIONS", N_("_Remote Server"),
562 "server_options", NULL, MGROUP_SAFE,
563 NULL, FALSE },
564 { "SAVE_OPTIONS", N_("Save Options _Now"),
565 "save_options", NULL, MGROUP_SAFE,
566 NULL, FALSE },
567 { "SAVE_OPTIONS_ON_EXIT", N_("Save Options on _Exit"),
568 "save_options_on_exit", NULL, MGROUP_SAFE,
570
571#ifdef FREECIV_DEBUG
572 { "RELOAD_TILESET", N_("_Reload Tileset"),
573 "reload_tileset", ACCL_MOD_KEY"<alt>r", MGROUP_SAFE,
574 NULL, FALSE },
575#endif /* FREECIV_DEBUG */
576
577 { "GAME_SAVE", N_("_Save Game"),
578 "game_save", ACCL_MOD_KEY"s", MGROUP_SAFE,
579 NULL, FALSE },
580 { "GAME_SAVE_AS", N_("Save Game _As..."),
581 "game_save_as", NULL, MGROUP_SAFE,
582 NULL, FALSE },
583 { "MAPIMG_SAVE", N_("Save Map _Image"),
584 "save_mapimg", NULL, MGROUP_SAFE,
585 NULL, FALSE },
586 { "MAPIMG_SAVE_AS", N_("Save _Map Image As..."),
587 "save_mapimg_as", NULL, MGROUP_SAFE,
588 NULL, FALSE },
589 { "VOLUME_UP", N_("Volume Up"),
590 "volume_up", "greater", MGROUP_SAFE | MGROUP_CHAR,
591 NULL, FALSE },
592 { "VOLUME_DOWN", N_("Volume Down"),
593 "volume_down", "less", MGROUP_SAFE | MGROUP_CHAR,
594 NULL, FALSE },
595 { "LEAVE", N_("_Leave"),
596 "leave", NULL, MGROUP_SAFE,
597 NULL, FALSE },
598 { "QUIT", N_("_Quit"),
599 "quit", ACCL_MOD_KEY"q", MGROUP_SAFE,
600 NULL, FALSE },
601
602 /* Edit menu */
603 { "FIND_CITY", N_("_Find City"),
604 "find_city", ACCL_MOD_KEY"f", MGROUP_SAFE,
605 NULL, FALSE },
606 { "WORKLISTS", N_("Work_lists"),
607 "worklists", ACCL_MOD_KEY"<shift>l", MGROUP_SAFE,
608 NULL, FALSE },
609 { "RALLY_DLG", N_("Rally point dialog"),
610 "rally_dlg", ACCL_MOD_KEY"<shift>r", MGROUP_SAFE,
611 NULL, FALSE },
612 { "INFRA_DLG", N_("Infra dialog"),
613 "infra_dlg", ACCL_MOD_KEY"<shift>f", MGROUP_SAFE,
614 NULL, FALSE },
615 { "EDIT_MODE", N_("_Editing Mode"),
616 "edit_mode", ACCL_MOD_KEY"e", MGROUP_SAFE,
618 { "TOGGLE_FOG", N_("Toggle Fog of _War"),
619 "toggle_fog", ACCL_MOD_KEY"<shift>w", MGROUP_EDIT,
621 { "SCENARIO_PROPERTIES", N_("Game/Scenario Properties"),
622 "scenario_props", NULL, MGROUP_EDIT,
623 NULL, FALSE },
624 { "SCENARIO_SAVE", N_("Save Scenario"),
625 "scenario_save", NULL, MGROUP_EDIT,
626 NULL, FALSE },
627 { "CLIENT_LUA_SCRIPT", N_("Client _Lua Script"),
628 "lua_script", NULL, MGROUP_SAFE,
629 NULL, FALSE },
630
631 /* View menu */
632 { "SHOW_CITY_OUTLINES", N_("Cit_y Outlines"),
633 "show_city_outlines", ACCL_MOD_KEY"y", MGROUP_SAFE,
635 { "SHOW_CITY_OUTPUT", N_("City Output"),
636 "show_city_output", ACCL_MOD_KEY"v", MGROUP_SAFE,
638 { "SHOW_MAP_GRID", N_("Map _Grid"),
639 "show_map_grid", ACCL_MOD_KEY"g", MGROUP_SAFE,
641 { "SHOW_NAT_BORDERS", N_("National _Borders"),
642 "show_nat_borders", ACCL_MOD_KEY"b", MGROUP_SAFE,
644 { "SHOW_NATIVE_TILES", N_("Native Tiles"),
645 "show_native_tiles", ACCL_MOD_KEY"<shift>n", MGROUP_SAFE,
647 { "SHOW_CITY_FULL_BAR", N_("City Full Bar"),
648 "show_city_full_bar", NULL, MGROUP_SAFE,
650 { "SHOW_CITY_NAMES", N_("City _Names"),
651 "show_city_names", ACCL_MOD_KEY"n", MGROUP_SAFE,
653 { "SHOW_CITY_GROWTH", N_("City G_rowth"),
654 "show_city_growth", ACCL_MOD_KEY"o", MGROUP_SAFE,
656 { "SHOW_CITY_PRODUCTIONS", N_("City _Production"),
657 "show_city_productions", ACCL_MOD_KEY"p", MGROUP_SAFE,
659 { "SHOW_CITY_BUY_COST", N_("City Buy Cost"),
660 "show_city_buy_cost", NULL, MGROUP_SAFE,
662 { "SHOW_CITY_TRADE_ROUTES", N_("City Tra_deroutes"),
663 "show_trade_routes", ACCL_MOD_KEY"d", MGROUP_SAFE,
665 { "SHOW_TERRAIN", N_("_Terrain"),
666 "show_terrain", NULL, MGROUP_SAFE,
668 { "SHOW_COASTLINE", N_("C_oastline"),
669 "show_coastline", NULL, MGROUP_SAFE,
671 { "SHOW_PATHS", N_("_Paths"),
672 "show_paths", NULL, MGROUP_SAFE,
674 { "SHOW_IRRIGATION", N_("_Irrigation"),
675 "show_irrigation", NULL, MGROUP_SAFE,
677 { "SHOW_MINES", N_("_Mines"),
678 "show_mines", NULL, MGROUP_SAFE,
680 { "SHOW_BASES", N_("_Bases"),
681 "show_bases", NULL, MGROUP_SAFE,
683 { "SHOW_RESOURCES", N_("_Resources"),
684 "show_resources", NULL, MGROUP_SAFE,
686 { "SHOW_HUTS", N_("_Huts"),
687 "show_huts", NULL, MGROUP_SAFE,
689 { "SHOW_POLLUTION", N_("Po_llution & Fallout"),
690 "show_pollution", NULL, MGROUP_SAFE,
692 { "SHOW_CITIES", N_("Citi_es"),
693 "show_cities", NULL, MGROUP_SAFE,
695 { "SHOW_UNITS", N_("_Units"),
696 "show_units", NULL, MGROUP_SAFE,
698 { "SHOW_UNIT_SOLID_BG", N_("Unit Solid Background"),
699 "show_unit_solid_bg", NULL, MGROUP_SAFE,
701 { "SHOW_UNIT_SHIELDS", N_("Unit shields"),
702 "show_unit_shields", NULL, MGROUP_SAFE,
704 { "SHOW_STACK_SIZE", N_("Unit Stack Size"),
705 "show_stack_size", ACCL_MOD_KEY"plus", MGROUP_SAFE,
707 { "SHOW_FOCUS_UNIT", N_("Focu_s Unit"),
708 "show_focus_unit", NULL, MGROUP_SAFE,
710 { "SHOW_FOG_OF_WAR", N_("Fog of _War"),
711 "show_fow", NULL, MGROUP_SAFE,
713
714 { "FULL_SCREEN", N_("_Fullscreen"),
715 "full_screen", ACCL_MOD_KEY"F11", MGROUP_SAFE,
717 { "CENTER_VIEW", N_("_Center View"),
718 "center_view", "c", MGROUP_PLAYER | MGROUP_CHAR,
719 NULL, FALSE },
720
721 /* Select menu */
722 { "SELECT_SINGLE", N_("_Single Unit (Unselect Others)"),
723 "select_single", "z", MGROUP_UNIT | MGROUP_CHAR,
724 NULL, FALSE },
725 { "SELECT_ALL_ON_TILE", N_("_All On Tile"),
726 "select_all_tile", "v", MGROUP_UNIT | MGROUP_CHAR,
727 NULL, FALSE },
728 { "SELECT_SAME_TYPE_TILE", N_("Same Type on _Tile"),
729 "select_same_type_tile", "<shift>v", MGROUP_UNIT | MGROUP_CHAR,
730 NULL, FALSE },
731 { "SELECT_SAME_TYPE_CONT", N_("Same Type on _Continent"),
732 "select_same_type_cont", "<shift>c", MGROUP_UNIT | MGROUP_CHAR,
733 NULL, FALSE },
734 { "SELECT_SAME_TYPE", N_("Same Type _Everywhere"),
735 "select_same_type", "<shift>x", MGROUP_UNIT | MGROUP_CHAR,
736 NULL, FALSE },
737 { "SELECT_DLG", N_("Unit Selection Dialog"),
738 "select_dlg", NULL, MGROUP_UNIT,
739 NULL, FALSE },
740
741 /* Unit menu */
742 { "UNIT_GOTO", N_("_Go to"),
743 "goto", "g", MGROUP_UNIT | MGROUP_CHAR,
744 NULL, FALSE },
745 { "UNIT_GOTO_CITY", N_("Go _to/Airlift to City..."),
746 "goto_city", "t", MGROUP_UNIT | MGROUP_CHAR,
747 NULL, FALSE },
748 { "UNIT_RETURN", N_("_Return to Nearest City"),
749 "return", "<shift>g", MGROUP_UNIT | MGROUP_CHAR,
750 NULL, FALSE },
751 { "UNIT_EXPLORE", N_("Auto E_xplore"),
752 "explore", "x", MGROUP_UNIT | MGROUP_CHAR,
753 NULL, FALSE },
754 { "UNIT_PATROL", N_("_Patrol"),
755 "patrol", "q", MGROUP_UNIT | MGROUP_CHAR,
756 NULL, FALSE },
757 { "UNIT_TELEPORT", N_("_Teleport"),
758 "teleport", NULL, MGROUP_UNIT,
759 NULL, FALSE },
760 { "UNIT_SENTRY", N_("_Sentry"),
761 "sentry", "s", MGROUP_UNIT | MGROUP_CHAR,
762 NULL, FALSE },
763 { "UNSENTRY_ALL", N_("Uns_entry All On Tile"),
764 "unsentry_all", "<shift>s", MGROUP_UNIT | MGROUP_CHAR,
765 NULL, FALSE },
766 { "UNIT_BOARD", N_("_Load"),
767 "board", "l", MGROUP_UNIT | MGROUP_CHAR,
768 NULL, FALSE },
769 { "UNIT_DEBOARD", N_("_Unload"),
770 "deboard", "u", MGROUP_UNIT | MGROUP_CHAR,
771 NULL, FALSE },
772 { "UNIT_UNLOAD_TRANSPORTER", N_("U_nload All From Transporter"),
773 "unload_transporter", "<shift>t", MGROUP_UNIT | MGROUP_CHAR,
774 NULL, FALSE },
775 { "UNIT_HOMECITY", N_("Set _Home City"),
776 "homecity", "h", MGROUP_UNIT | MGROUP_CHAR,
777 NULL, FALSE },
778 { "UNIT_UPGRADE", N_("Upgr_ade"),
779 "upgrade", "<shift>u", MGROUP_UNIT | MGROUP_CHAR,
780 NULL, FALSE },
781 { "UNIT_CONVERT", N_("C_onvert"),
782 "convert", "<shift>o", MGROUP_UNIT | MGROUP_CHAR,
783 NULL, FALSE },
784 { "UNIT_DISBAND", N_("_Disband"),
785 "disband", "<shift>d", MGROUP_UNIT | MGROUP_CHAR,
786 NULL, FALSE },
787 { "DO_ACTION", N_("_Do..."),
788 "do_action", "d", MGROUP_UNIT | MGROUP_CHAR,
789 NULL, FALSE },
790 { "UNIT_WAIT", N_("_Wait"),
791 "wait", "w", MGROUP_UNIT | MGROUP_CHAR,
792 NULL, FALSE },
793 { "UNIT_DONE", N_("_Done"),
794 "done", "space", MGROUP_UNIT | MGROUP_CHAR,
795 NULL, FALSE },
796
797 /* Work menu */
798 { "BUILD_CITY", N_("_Build City"),
799 "build_city", "b", MGROUP_UNIT | MGROUP_CHAR,
800 NULL, FALSE },
801 { "AUTO_WORKER", N_("_Auto Worker"),
802 "auto_work", "a", MGROUP_UNIT | MGROUP_CHAR,
803 NULL, FALSE },
804 { "BUILD_ROAD", N_("Build _Road"),
805 "build_road", "r", MGROUP_UNIT | MGROUP_CHAR,
806 NULL, FALSE },
807 { "BUILD_IRRIGATION", N_("Build _Irrigation"),
808 "build_irrigation", "i", MGROUP_UNIT | MGROUP_CHAR,
809 NULL, FALSE },
810 { "BUILD_MINE", N_("Build _Mine"),
811 "build_mine", "m", MGROUP_UNIT | MGROUP_CHAR,
812 NULL, FALSE },
813 { "CULTIVATE", N_("Cultivate"),
814 "cultivate", "<shift>i", MGROUP_UNIT | MGROUP_CHAR,
815 NULL, FALSE },
816 { "PLANT", N_("Plant"),
817 "plant", "<shift>m", MGROUP_UNIT | MGROUP_CHAR,
818 NULL, FALSE },
819 { "TRANSFORM_TERRAIN", N_("Transf_orm Terrain"),
820 "transform_terrain", "o", MGROUP_UNIT | MGROUP_CHAR,
821 NULL, FALSE },
822 { "CONNECT_ROAD", N_("Connect With Roa_d"),
823 "connect_road", ACCL_MOD_KEY"r", MGROUP_UNIT,
824 NULL, FALSE },
825 { "CONNECT_RAIL", N_("Connect With Rai_l"),
826 "connect_rail", ACCL_MOD_KEY"l", MGROUP_UNIT,
827 NULL, FALSE },
828 { "CONNECT_MAGLEV", N_("Connect With _Maglev"),
829 "connect_maglev", ACCL_MOD_KEY"m", MGROUP_UNIT,
830 NULL, FALSE },
831 { "CONNECT_IRRIGATION", N_("Connect With Irri_gation"),
832 "connect_irrigation", ACCL_MOD_KEY"i", MGROUP_UNIT,
833 NULL, FALSE },
834 { "CLEAN", N_("_Clean"),
835 "clean", "p", MGROUP_UNIT | MGROUP_CHAR,
836 NULL, FALSE },
837
838 /* Combat menu */
839 { "FORTIFY", N_("Fortify"),
840 "fortify", "f", MGROUP_UNIT | MGROUP_CHAR,
841 NULL, FALSE },
842 { "BUILD_FORTRESS", N_("Build Fortress"),
843 "build_base_fortress", "<shift>f", MGROUP_UNIT | MGROUP_CHAR,
844 NULL, FALSE },
845 { "BUILD_AIRBASE", N_("Build Airbase"),
846 "build_base_airbase", "<shift>e", MGROUP_UNIT | MGROUP_CHAR,
847 NULL, FALSE },
848 { "PARADROP", N_("P_aradrop"),
849 "paradrop", "j", MGROUP_UNIT | MGROUP_CHAR,
850 NULL, FALSE },
851 { "PILLAGE", N_("_Pillage"),
852 "pillage", "<shift>p", MGROUP_UNIT | MGROUP_CHAR,
853 NULL, FALSE },
854
855 /* Civilization */
856 { "MAP_VIEW", N_("?noun:_View"),
857 "map_view", "F1", MGROUP_SAFE,
858 NULL, FALSE },
859 { "REPORT_UNITS", N_("_Units"),
860 "report_units", "F2", MGROUP_SAFE,
861 NULL, FALSE },
862 { "REPORT_NATIONS", N_("_Nations"),
863 "report_nations", "F3", MGROUP_SAFE,
864 NULL, FALSE },
865 { "REPORT_CITIES", N_("_Cities"),
866 "report_cities", "F4", MGROUP_SAFE,
867 NULL, FALSE },
868 { "REPORT_ECONOMY", N_("_Economy"),
869 "report_economy", "F5", MGROUP_PLAYER,
870 NULL, FALSE },
871 { "REPORT_RESEARCH", N_("_Research"),
872 "report_research", "F6", MGROUP_PLAYER,
873 NULL, FALSE },
874
875 { "TAX_RATES", N_("_Tax Rates..."),
876 "tax_rates", ACCL_MOD_KEY"t", MGROUP_PLAYING,
877 NULL, FALSE },
878 { "POLICIES", N_("_Policies..."),
879 "policies", "<shift><ctrl>p", MGROUP_PLAYER,
880 NULL, FALSE },
881 { "START_REVOLUTION", N_("_Revolution..."),
882 "revolution", "<shift><ctrl>g", MGROUP_PLAYING,
883 NULL, FALSE },
884
885 { "REPORT_WOW", N_("_Wonders of the World"),
886 "report_wow", "F7", MGROUP_SAFE,
887 NULL, FALSE },
888 { "REPORT_TOP_CITIES", N_("Top Cities"),
889 "report_top_cities", "F8", MGROUP_SAFE,
890 NULL, FALSE },
891 { "REPORT_MESSAGES", N_("_Messages"),
892 "report_messages", "F9", MGROUP_SAFE,
893 NULL, FALSE },
894 { "REPORT_DEMOGRAPHIC", N_("_Demographics"),
895 "report_demographics", "F11", MGROUP_SAFE,
896 NULL, FALSE },
897 { "REPORT_SPACESHIP", N_("_Spaceship"),
898 "report_spaceship", "F12", MGROUP_SAFE,
899 NULL, FALSE },
900 { "REPORT_ACHIEVEMENTS", N_("_Achievements"),
901 "report_achievements", "asterisk", MGROUP_SAFE | MGROUP_CHAR,
902 NULL, FALSE },
903
904 /* Battle Groups menu */
905 /* Note that user view: 1 - 4, internal: 0 - 3 */
906 { "BG_SELECT_1", N_("Select Battle Group 1"),
907 "bg_select_0", "<shift>F1", MGROUP_PLAYING,
908 NULL, FALSE },
909 { "BG_ASSIGN_1", N_("Assign Battle Group 1"),
910 "bg_assign_0", ACCL_MOD_KEY"F1", MGROUP_PLAYING,
911 NULL, FALSE },
912 { "BG_APPEND_1", N_("Append to Battle Group 1"),
913 "bg_append_0", "<shift><ctrl>F1", MGROUP_PLAYING,
914 NULL, FALSE },
915 { "BG_SELECT_2", N_("Select Battle Group 2"),
916 "bg_select_1", "<shift>F2", MGROUP_PLAYING,
917 NULL, FALSE },
918 { "BG_ASSIGN_2", N_("Assign Battle Group 2"),
919 "bg_assign_1", ACCL_MOD_KEY"F2", MGROUP_PLAYING,
920 NULL, FALSE },
921 { "BG_APPEND_2", N_("Append to Battle Group 2"),
922 "bg_append_1", "<shift><ctrl>F2", MGROUP_PLAYING,
923 NULL, FALSE },
924 { "BG_SELECT_3", N_("Select Battle Group 3"),
925 "bg_select_2", "<shift>F3", MGROUP_PLAYING,
926 NULL, FALSE },
927 { "BG_ASSIGN_3", N_("Assign Battle Group 3"),
928 "bg_assign_2", ACCL_MOD_KEY"F3", MGROUP_PLAYING,
929 NULL, FALSE },
930 { "BG_APPEND_3", N_("Append to Battle Group 3"),
931 "bg_append_2", "<shift><ctrl>F3", MGROUP_PLAYING,
932 NULL, FALSE },
933 { "BG_SELECT_4", N_("Select Battle Group 4"),
934 "bg_select_3", "<shift>F4", MGROUP_PLAYING,
935 NULL, FALSE },
936 { "BG_ASSIGN_4", N_("Assign Battle Group 4"),
937 "bg_assign_3", ACCL_MOD_KEY"F4", MGROUP_PLAYING,
938 NULL, FALSE },
939 { "BG_APPEND_4", N_("Append to Battle Group 4"),
940 "bg_append_3", "<shift><ctrl>F4", MGROUP_PLAYING,
941 NULL, FALSE },
942
943 /* Help menu */
944 { "HELP_OVERVIEW", N_("?help:Overview"),
945 "help_overview", NULL, MGROUP_SAFE,
946 NULL, FALSE },
947 { "HELP_PLAYING", N_("Strategy and Tactics"),
948 "help_playing", NULL, MGROUP_SAFE,
949 NULL, FALSE },
950 { "HELP_POLICIES", N_("Policies"),
951 "help_policies", NULL, MGROUP_SAFE,
952 NULL, FALSE },
953 { "HELP_TERRAIN", N_("Terrain"),
954 "help_terrains", NULL, MGROUP_SAFE,
955 NULL, FALSE },
956 { "HELP_ECONOMY", N_("Economy"),
957 "help_economy", NULL, MGROUP_SAFE,
958 NULL, FALSE },
959 { "HELP_CITIES", N_("Cities"),
960 "help_cities", NULL, MGROUP_SAFE,
961 NULL, FALSE },
962 { "HELP_IMPROVEMENTS", N_("City Improvements"),
963 "help_improvements", NULL, MGROUP_SAFE,
964 NULL, FALSE },
965 { "HELP_WONDERS", N_("Wonders of the World"),
966 "help_wonders", NULL, MGROUP_SAFE,
967 NULL, FALSE },
968 { "HELP_UNITS", N_("Units"),
969 "help_units", NULL, MGROUP_SAFE,
970 NULL, FALSE },
971 { "HELP_COMBAT", N_("Combat"),
972 "help_combat", NULL, MGROUP_SAFE,
973 NULL, FALSE },
974 { "HELP_ZOC", N_("Zones of Control"),
975 "help_zoc", NULL, MGROUP_SAFE,
976 NULL, FALSE },
977 { "HELP_GOVERNMENT", N_("Government"),
978 "help_government", NULL, MGROUP_SAFE,
979 NULL, FALSE },
980 { "HELP_DIPLOMACY", N_("Diplomacy"),
981 "help_diplomacy", NULL, MGROUP_SAFE,
982 NULL, FALSE },
983 { "HELP_TECH", N_("Technology"),
984 "help_tech", NULL, MGROUP_SAFE,
985 NULL, FALSE },
986 { "HELP_SPACE_RACE", N_("Space Race"),
987 "help_space_race", NULL, MGROUP_SAFE,
988 NULL, FALSE },
989 { "HELP_RULESET", N_("About Current Ruleset"),
990 "help_ruleset", NULL, MGROUP_SAFE,
991 NULL, FALSE },
992 { "HELP_TILESET", N_("About Current Tileset"),
993 "help_tileset", NULL, MGROUP_SAFE,
994 NULL, FALSE },
995 { "HELP_MUSICSET", N_("About Current Musicset"),
996 "help_musicset", NULL, MGROUP_SAFE,
997 NULL, FALSE },
998 { "HELP_NATIONS", N_("About Nations"),
999 "help_nations", NULL, MGROUP_SAFE,
1000 NULL, FALSE },
1001 { "HELP_CONNECTING", N_("Connecting"),
1002 "help_connecting", NULL, MGROUP_SAFE,
1003 NULL, FALSE },
1004 { "HELP_CONTROLS", N_("Controls"),
1005 "help_controls", NULL, MGROUP_SAFE,
1006 NULL, FALSE },
1007 { "HELP_GOVERNOR", N_("Citizen Governor"),
1008 "help_governor", NULL, MGROUP_SAFE,
1009 NULL, FALSE },
1010 { "HELP_CHATLINE", N_("Chatline"),
1011 "help_chatline", NULL, MGROUP_SAFE,
1012 NULL, FALSE },
1013 { "HELP_WORKLIST_EDITOR", N_("Worklist Editor"),
1014 "help_worklist_editor", NULL, MGROUP_SAFE,
1015 NULL, FALSE },
1016 { "HELP_LANGUAGES", N_("Languages"),
1017 "help_languages", NULL, MGROUP_SAFE,
1018 NULL, FALSE },
1019 { "HELP_COPYING", N_("Copying"),
1020 "help_copying", NULL, MGROUP_SAFE,
1021 NULL, FALSE },
1022 { "HELP_ABOUT", N_("About Freeciv"),
1023 "help_about", NULL, MGROUP_SAFE,
1024 NULL, FALSE },
1025 { NULL }
1026};
1027
1028enum {
1058
1060 { "clear_chat", clear_chat_logs_callback },
1061 { "save_chat", save_chat_logs_callback },
1062 { "local_options", local_options_callback },
1063 { "message_options", message_options_callback },
1064 { "server_options", server_options_callback },
1065 { "save_options", save_options_callback },
1066
1067#ifdef FREECIV_DEBUG
1068 { "reload_tileset", reload_tileset_callback },
1069#endif /* FREECIV_DEBUG */
1070
1071 { "game_save", save_game_callback },
1072 { "game_save_as", save_game_as_callback },
1073 { "save_mapimg", save_mapimg_callback },
1074 { "save_mapimg_as", save_mapimg_as_callback },
1075 { "volume_up", volume_up_callback },
1076 { "volume_down", volume_down_callback },
1077 { "leave", leave_callback },
1078 { "quit", quit_callback },
1079
1080 { "find_city", find_city_callback },
1081 { "worklists", worklists_callback },
1082 { "rally_dlg", rally_dialog_callback },
1083 { "infra_dlg", infra_dialog_callback },
1084 { "scenario_props", scenario_properties_callback },
1085 { "scenario_save", save_scenario_callback },
1086 { "lua_script", client_lua_script_callback },
1087
1088 { "center_view", center_view_callback },
1089
1090 { "select_single", select_single_callback },
1091 { "select_all_tile", select_all_on_tile_callback },
1092 { "select_same_type_tile", select_same_type_tile_callback },
1093 { "select_same_type_cont", select_same_type_cont_callback },
1094 { "select_same_type", select_same_type_callback },
1095 { "select_dlg", select_dialog_callback },
1096
1097 { "goto", unit_goto_callback },
1098 { "goto_city", unit_goto_city_callback },
1099 { "return", unit_return_callback },
1100 { "explore", unit_explore_callback },
1101 { "patrol", unit_patrol_callback },
1102 { "teleport", unit_teleport_callback },
1103 { "sentry", unit_sentry_callback },
1104 { "unsentry_all", unsentry_all_callback },
1105 { "board", unit_board_callback },
1106 { "deboard", unit_deboard_callback },
1107 { "unload_transporter", unit_unload_transporter_callback },
1108 { "homecity", unit_homecity_callback },
1109 { "upgrade", unit_upgrade_callback },
1110 { "convert", unit_convert_callback },
1111 { "disband", unit_disband_callback },
1112 { "do_action", do_action_callback },
1113 { "wait", unit_wait_callback },
1114 { "done", unit_done_callback },
1115
1116 { "build_city", build_city_callback },
1117 { "auto_work", auto_work_callback },
1118 { "build_road", build_road_callback },
1119 { "build_irrigation", build_irrigation_callback },
1120 { "build_mine", build_mine_callback },
1121 { "cultivate", cultivate_callback },
1122 { "plant", plant_callback },
1123 { "transform_terrain", transform_terrain_callback },
1124 { "connect_road", connect_road_callback },
1125 { "connect_rail", connect_rail_callback },
1126 { "connect_maglev", connect_maglev_callback },
1127 { "connect_irrigation", connect_irrigation_callback },
1128 { "clean", clean_callback },
1129
1130 { "fortify", fortify_callback },
1131 { "build_base_fortress", build_fortress_callback },
1132 { "build_base_airbase", build_airbase_callback },
1133 { "paradrop", paradrop_callback },
1134 { "pillage", pillage_callback },
1135
1136 { "revolution", revolution_callback },
1137
1138 { "map_view", map_view_callback },
1139 { "report_units", report_units_callback },
1140 { "report_nations", report_nations_callback },
1141 { "report_cities", report_cities_callback },
1142 { "report_economy", report_economy_callback },
1143 { "report_research", report_research_callback },
1144 { "tax_rates", tax_rate_callback },
1145 { "policies", multiplier_callback },
1146 { "report_wow", report_wow_callback },
1147 { "report_top_cities", report_top_cities_callback },
1148 { "report_messages", report_messages_callback },
1149 { "report_demographics", report_demographic_callback },
1150 { "report_spaceship", report_spaceship_callback },
1151 { "report_achievements", report_achievements_callback },
1152
1153 { "help_overview", help_overview_callback },
1154 { "help_playing", help_playing_callback },
1155 { "help_policies", help_policies_callback },
1156 { "help_terrains", help_terrain_callback },
1157 { "help_economy", help_economy_callback },
1158 { "help_cities", help_cities_callback },
1159 { "help_improvements", help_improvements_callback },
1160 { "help_wonders", help_wonders_callback },
1161 { "help_units", help_units_callback },
1162 { "help_combat", help_combat_callback },
1163 { "help_zoc", help_zoc_callback },
1164 { "help_government", help_government_callback },
1165 { "help_diplomacy", help_diplomacy_callback },
1166 { "help_tech", help_tech_callback },
1167 { "help_space_race", help_space_race_callback },
1168 { "help_ruleset", help_ruleset_callback },
1169 { "help_tileset", help_tileset_callback },
1170 { "help_musicset", help_musicset_callback },
1171 { "help_nations", help_nations_callback },
1172 { "help_connecting", help_connecting_callback },
1173 { "help_controls", help_controls_callback },
1174 { "help_governor", help_governor_callback },
1175 { "help_chatline", help_chatline_callback },
1176 { "help_worklist_editor", help_worklist_editor_callback },
1177 { "help_languages", help_language_callback },
1178 { "help_copying", help_copying_callback },
1179 { "help_about", help_about_callback }
1180};
1181
1182static struct menu_entry_info *menu_entry_info_find(const char *key);
1183
1184/************************************************************************/
1188 GVariant *parameter,
1189 gpointer data)
1190{
1192}
1193
1194/************************************************************************/
1198 GVariant *parameter,
1199 gpointer data)
1200{
1202}
1203
1204/************************************************************************/
1208 GVariant *parameter,
1209 gpointer data)
1210{
1211 option_dialog_popup(_("Set local options"), client_optset);
1212}
1213
1214/************************************************************************/
1218 GVariant *parameter,
1219 gpointer data)
1220{
1222}
1223
1224/************************************************************************/
1228 GVariant *parameter,
1229 gpointer data)
1230{
1231 option_dialog_popup(_("Game Settings"), server_optset);
1232}
1233
1234/************************************************************************/
1238 GVariant *parameter,
1239 gpointer data)
1240{
1242}
1243
1244/************************************************************************/
1248 GVariant *parameter,
1249 gpointer data)
1250{
1251 struct menu_entry_info *info = (struct menu_entry_info *)data;
1252
1253 info->state ^= 1;
1255
1257
1260}
1261
1262#ifdef FREECIV_DEBUG
1263/************************************************************************/
1267 GVariant *parameter,
1268 gpointer data)
1269{
1270 tilespec_reread(NULL, TRUE, 1.0);
1271}
1272#endif /* FREECIV_DEBUG */
1273
1274/************************************************************************/
1278 gpointer data)
1279{
1281}
1282
1283/************************************************************************/
1287 gpointer data)
1288{
1290}
1291
1292/************************************************************************/
1296 gpointer data)
1297{
1299}
1300
1301/************************************************************************/
1305 gpointer data)
1306{
1308}
1309
1310/************************************************************************/
1314static void leave_local_game_response(GtkWidget *dialog, gint response)
1315{
1317 if (response == GTK_RESPONSE_OK) {
1318 /* It might be killed already */
1319 if (client.conn.used) {
1320 /* It will also kill the server */
1322 }
1323 }
1324}
1325
1326/************************************************************************/
1330 GVariant *parameter,
1331 gpointer data)
1332{
1333 if (is_server_running()) {
1334 GtkWidget *dialog
1337 _("Leaving a local game will end it!"));
1338 setup_dialog(dialog, toplevel);
1339 g_signal_connect(dialog, "response",
1342 } else {
1344 }
1345}
1346
1347/************************************************************************/
1351 GVariant *parameter,
1352 gpointer data)
1353{
1354 struct option *poption = optset_option_by_name(client_optset, "sound_effects_volume");
1355
1359}
1360
1361/************************************************************************/
1365 GVariant *parameter,
1366 gpointer data)
1367{
1368 struct option *poption = optset_option_by_name(client_optset, "sound_effects_volume");
1369
1373}
1374
1375/************************************************************************/
1379 GVariant *parameter,
1380 gpointer data)
1381{
1383}
1384
1385/************************************************************************/
1389 GVariant *parameter,
1390 gpointer data)
1391{
1393}
1394
1395/************************************************************************/
1399 GVariant *parameter,
1400 gpointer data)
1401{
1403}
1404
1405/************************************************************************/
1409 GVariant *parameter, gpointer data)
1410{
1412}
1413
1414/************************************************************************/
1418 GVariant *parameter,
1419 gpointer data)
1420{
1422}
1423
1424/************************************************************************/
1437
1438/************************************************************************/
1442 GVariant *parameter,
1443 gpointer data)
1444{
1446}
1447
1448/************************************************************************/
1452 GVariant *parameter,
1453 gpointer data)
1454{
1456}
1457
1458/************************************************************************/
1462 GVariant *parameter,
1463 gpointer data)
1464{
1466}
1467
1468/************************************************************************/
1477
1478/************************************************************************/
1487
1488/************************************************************************/
1497
1498/************************************************************************/
1502 GVariant *parameter,
1503 gpointer data)
1504{
1506}
1507
1508/************************************************************************/
1517
1518/************************************************************************/
1522 GVariant *parameter,
1523 gpointer data)
1524{
1526}
1527
1528/************************************************************************/
1532 GVariant *parameter,
1533 gpointer data)
1534{
1536}
1537
1538/************************************************************************/
1542 GVariant *parameter,
1543 gpointer data)
1544{
1546}
1547
1548/************************************************************************/
1557
1558/************************************************************************/
1562 GVariant *parameter,
1563 gpointer data)
1564{
1566}
1567
1568/************************************************************************/
1572 GVariant *parameter,
1573 gpointer data)
1574{
1576}
1577
1578/************************************************************************/
1582 GVariant *parameter,
1583 gpointer data)
1584{
1586}
1587
1588/************************************************************************/
1592 GVariant *parameter,
1593 gpointer data)
1594{
1596}
1597
1598/************************************************************************/
1607
1608/************************************************************************/
1617
1618/************************************************************************/
1622 GVariant *parameter,
1623 gpointer data)
1624{
1626}
1627
1628/************************************************************************/
1637
1638/************************************************************************/
1642 GVariant *parameter,
1643 gpointer data)
1644{
1646}
1647
1648/************************************************************************/
1652 GVariant *parameter,
1653 gpointer data)
1654{
1656}
1657
1658/************************************************************************/
1667
1668/************************************************************************/
1672 GVariant *parameter,
1673 gpointer data)
1674{
1676}
1677
1678/************************************************************************/
1687
1688/************************************************************************/
1697
1698/************************************************************************/
1702 GVariant *parameter,
1703 gpointer data)
1704{
1706}
1707
1708/************************************************************************/
1717
1718/************************************************************************/
1727
1728/************************************************************************/
1737
1738/************************************************************************/
1742 GVariant *parameter,
1743 gpointer data)
1744{
1746}
1747
1748/************************************************************************/
1752 GVariant *parameter,
1753 gpointer data)
1754{
1756}
1757
1758/************************************************************************/
1762 GVariant *parameter,
1763 gpointer data)
1764{
1766
1767 /* Unreachable techs in reqtree on/off */
1769}
1770
1772 const char *menu_entry;
1773 bool *option;
1775};
1776
1778 { "SAVE_OPTIONS_ON_EXIT", &gui_options.save_options_on_exit, -1 },
1779 { "FULL_SCREEN", &(GUI_GTK_OPTION(fullscreen)), -1 },
1780 { "EDIT_MODE", &game.info.is_edit_mode, -1 },
1781 { "TOGGLE_FOG", &game.client.fog_of_war, -1 },
1782 { "SHOW_CITY_OUTLINES", &gui_options.draw_city_outlines, VMENU_CITY_OUTLINES },
1783 { "SHOW_CITY_OUTPUT", &gui_options.draw_city_output, VMENU_CITY_OUTPUT },
1784 { "SHOW_MAP_GRID", &gui_options.draw_map_grid, VMENU_MAP_GRID },
1785 { "SHOW_NAT_BORDERS", &gui_options.draw_borders, VMENU_NAT_BORDERS },
1786 { "SHOW_NATIVE_TILES", &gui_options.draw_native, VMENU_NATIVE_TILES },
1787 { "SHOW_CITY_FULL_BAR", &gui_options.draw_full_citybar, VMENU_CITY_FULL_BAR },
1788 { "SHOW_CITY_NAMES", &gui_options.draw_city_names, VMENU_CITY_NAMES },
1789 { "SHOW_CITY_GROWTH", &gui_options.draw_city_growth, VMENU_CITY_GROWTH },
1790 { "SHOW_CITY_PRODUCTIONS", &gui_options.draw_city_productions,
1792 { "SHOW_CITY_BUY_COST", &gui_options.draw_city_buycost, VMENU_CITY_BUY_COST },
1793 { "SHOW_CITY_TRADE_ROUTES", &gui_options.draw_city_trade_routes,
1795 { "SHOW_TERRAIN", &gui_options.draw_terrain, VMENU_TERRAIN },
1796 { "SHOW_COASTLINE", &gui_options.draw_coastline, VMENU_COASTLINE },
1797 { "SHOW_PATHS", &gui_options.draw_paths, VMENU_PATHS },
1798 { "SHOW_IRRIGATION", &gui_options.draw_irrigation, VMENU_IRRIGATION },
1799 { "SHOW_MINES", &gui_options.draw_mines, VMENU_MINES },
1800 { "SHOW_BASES", &gui_options.draw_fortress_airbase, VMENU_BASES },
1801 { "SHOW_RESOURCES", &gui_options.draw_specials, VMENU_RESOURCES },
1802 { "SHOW_HUTS", &gui_options.draw_huts, VMENU_HUTS },
1803 { "SHOW_POLLUTION", &gui_options.draw_pollution, VMENU_POLLUTION },
1804 { "SHOW_CITIES", &gui_options.draw_cities, VMENU_CITIES },
1805 { "SHOW_UNITS", &gui_options.draw_units, VMENU_UNITS },
1806 { "SHOW_UNIT_SOLID_BG", &gui_options.solid_color_behind_units, VMENU_UNIT_SOLID_BG },
1807 { "SHOW_UNIT_SHIELDS", &gui_options.draw_unit_shields , VMENU_UNIT_SHIELDS },
1808 { "SHOW_STACK_SIZE", &gui_options.draw_unit_stack_size, VMENU_STACK_SIZE },
1809 { "SHOW_FOCUS_UNIT", &gui_options.draw_focus_unit, VMENU_FOCUS_UNIT },
1810 { "SHOW_FOG_OF_WAR", &gui_options.draw_fog_of_war, VMENU_FOW },
1811
1812 { NULL, NULL, -1 }
1813};
1814
1815/************************************************************************/
1818static void view_menu_item_toggle(void (*cb)(void),
1819 bool updt_sensitivity,
1820 gpointer data)
1821{
1822 int i;
1823 struct menu_entry_info *info = (struct menu_entry_info *)data;
1824
1825 info->state ^= 1;
1826
1827 cb();
1828
1829 if (updt_sensitivity) {
1831 }
1832
1833 /* TODO: Make the information available directly from menu_entry_info,
1834 * se we don't need to do this search for it */
1835 for (i = 0; meoms[i].menu_entry != NULL; i++) {
1836 if (!strcmp(meoms[i].menu_entry, info->key)) {
1837 g_menu_remove(view_menu, meoms[i].menu_pos);
1840 return;
1841 }
1842 }
1843}
1844
1845/************************************************************************/
1854
1855/************************************************************************/
1859 GVariant *parameter,
1860 gpointer data)
1861{
1863}
1864
1865/************************************************************************/
1873
1874/************************************************************************/
1883
1884/************************************************************************/
1888 GVariant *parameter,
1889 gpointer data)
1890{
1892}
1893
1894/************************************************************************/
1903
1904/************************************************************************/
1908 GVariant *parameter,
1909 gpointer data)
1910{
1912}
1913
1914/************************************************************************/
1918 GVariant *parameter,
1919 gpointer data)
1920{
1922}
1923
1924/************************************************************************/
1933
1934/************************************************************************/
1943
1944/************************************************************************/
1953
1954/************************************************************************/
1958 GVariant *parameter,
1959 gpointer data)
1960{
1962}
1963
1964/************************************************************************/
1968 GVariant *parameter,
1969 gpointer data)
1970{
1972}
1973
1974/************************************************************************/
1978 GVariant *parameter,
1979 gpointer data)
1980{
1982}
1983
1984/************************************************************************/
1988 GVariant *parameter,
1989 gpointer data)
1990{
1992}
1993
1994/************************************************************************/
1998 GVariant *parameter,
1999 gpointer data)
2000{
2002}
2003
2004/************************************************************************/
2008 gpointer data)
2009{
2011}
2012
2013/************************************************************************/
2017 GVariant *parameter,
2018 gpointer data)
2019{
2021}
2022
2023/************************************************************************/
2027 gpointer data)
2028{
2030}
2031
2032/************************************************************************/
2040
2041/************************************************************************/
2045 gpointer data)
2046{
2048}
2049
2050/************************************************************************/
2054 gpointer data)
2055{
2057}
2058
2059/************************************************************************/
2068
2069/************************************************************************/
2078
2079/************************************************************************/
2088
2089/************************************************************************/
2093 GVariant *parameter,
2094 gpointer data)
2095{
2097}
2098
2099/************************************************************************/
2107
2108/************************************************************************/
2112 gpointer data)
2113{
2114 struct menu_entry_info *info = (struct menu_entry_info *)data;
2115
2116 info->state ^= 1;
2118
2120
2122
2125}
2126
2127/************************************************************************/
2131 GVariant *parameter,
2132 gpointer data)
2133{
2134 struct menu_entry_info *info = (struct menu_entry_info *)data;
2135
2136 info->state ^= 1;
2137
2139
2141
2144}
2145
2146/************************************************************************/
2159
2160/************************************************************************/
2164 gpointer data)
2165{
2167}
2168
2169/************************************************************************/
2177
2178/************************************************************************/
2187
2188/************************************************************************/
2197
2198/************************************************************************/
2207
2208/************************************************************************/
2217
2218/************************************************************************/
2222 GVariant *parameter,
2223 gpointer data)
2224{
2226}
2227
2228/************************************************************************/
2232 GVariant *parameter,
2233 gpointer data)
2234{
2236}
2237
2238/************************************************************************/
2242 GVariant *parameter,
2243 gpointer data)
2244{
2246}
2247
2248/************************************************************************/
2252 GVariant *parameter,
2253 gpointer data)
2254{
2255 key_unit_wait();
2256}
2257
2258/************************************************************************/
2262 GVariant *parameter,
2263 gpointer data)
2264{
2265 key_unit_done();
2266}
2267
2268/************************************************************************/
2272 gpointer data)
2273{
2274 key_unit_goto();
2275}
2276
2277/************************************************************************/
2281 GVariant *parameter,
2282 gpointer data)
2283{
2284 int sub_target = NO_TARGET;
2285 struct action *paction = (struct action *)data;
2286
2288
2290 case ASTK_BUILDING:
2291 {
2293 "end_building");
2295 sub_target = improvement_number(pbuilding);
2296 }
2297 break;
2298 case ASTK_TECH:
2299 {
2301 "end_tech");
2303 sub_target = advance_number(ptech);
2304 }
2305 break;
2306 case ASTK_EXTRA:
2308 {
2309 struct extra_type *pextra = g_object_get_data(G_OBJECT(action),
2310 "end_extra");
2311 fc_assert_ret(pextra != NULL);
2312 sub_target = extra_number(pextra);
2313 }
2314 break;
2315 case ASTK_NONE:
2316 sub_target = NO_TARGET;
2317 break;
2318 case ASTK_COUNT:
2319 /* Should not exits */
2321 break;
2322 }
2323
2325}
2326
2327/************************************************************************/
2331 GVariant *parameter,
2332 gpointer data)
2333{
2334 if (get_num_units_in_focus() > 0) {
2336 }
2337}
2338
2339/************************************************************************/
2350
2351/************************************************************************/
2355 GVariant *parameter,
2356 gpointer data)
2357{
2359}
2360
2361/************************************************************************/
2365 gpointer data)
2366{
2368}
2369
2370/************************************************************************/
2374 gpointer data)
2375{
2377}
2378
2379/************************************************************************/
2383 GVariant *parameter,
2384 gpointer data)
2385{
2387}
2388
2389/************************************************************************/
2393 GVariant *parameter,
2394 gpointer data)
2395{
2397}
2398
2399/************************************************************************/
2410
2411/************************************************************************/
2421
2422/************************************************************************/
2432
2433/************************************************************************/
2437 GVariant *parameter,
2438 gpointer data)
2439{
2441}
2442
2443/************************************************************************/
2447 GVariant *parameter,
2448 gpointer data)
2449{
2451}
2452
2453/************************************************************************/
2462
2463/************************************************************************/
2467 GVariant *parameter,
2468 gpointer data)
2469{
2471}
2472
2473/************************************************************************/
2482
2483/************************************************************************/
2487 GVariant *parameter,
2488 gpointer data)
2489{
2491 /* FIXME: this can provide different items for different units...
2492 * not good! */
2493 /* Enable the button for adding to a city in all cases, so we
2494 get an eventual error message from the server if we try. */
2500 }
2502}
2503
2504/************************************************************************/
2508 GVariant *parameter,
2509 gpointer data)
2510{
2512}
2513
2514/************************************************************************/
2518 GVariant *parameter,
2519 gpointer data)
2520{
2522 /* FIXME: this can provide different actions for different units...
2523 * not good! */
2525 EC_ROAD,
2527 punit);
2528 bool building_road = FALSE;
2529
2530 if (tgt != NULL
2534 }
2535
2538 }
2540}
2541
2542/************************************************************************/
2546 GVariant *parameter,
2547 gpointer data)
2548{
2550}
2551
2552/************************************************************************/
2556 GVariant *parameter,
2557 gpointer data)
2558{
2560}
2561
2562/************************************************************************/
2566 GVariant *parameter,
2567 gpointer data)
2568{
2570}
2571
2572/************************************************************************/
2576 GVariant *parameter,
2577 gpointer data)
2578{
2579 key_unit_mine();
2580}
2581
2582/************************************************************************/
2586 GVariant *parameter,
2587 gpointer data)
2588{
2590
2591 if (proad != NULL) {
2592 struct extra_type *tgt;
2593
2594 tgt = road_extra_get(proad);
2595
2597 }
2598}
2599
2600/************************************************************************/
2604 GVariant *parameter,
2605 gpointer data)
2606{
2608
2609 if (prail != NULL) {
2610 struct extra_type *tgt;
2611
2612 tgt = road_extra_get(prail);
2613
2615 }
2616}
2617
2618/************************************************************************/
2622 GVariant *parameter,
2623 gpointer data)
2624{
2626
2627 if (pmaglev != NULL) {
2628 struct extra_type *tgt;
2629
2630 tgt = road_extra_get(pmaglev);
2631
2633 }
2634}
2635
2636/************************************************************************/
2640 GVariant *parameter,
2641 gpointer data)
2642{
2644
2645 if (extra_type_list_size(extras) > 0) {
2646 struct extra_type *pextra;
2647
2649
2651 }
2652}
2653
2654/************************************************************************/
2658 GVariant *parameter,
2659 gpointer data)
2660{
2662}
2663
2664/************************************************************************/
2668 gpointer data)
2669{
2671}
2672
2673/************************************************************************/
2677 gpointer data)
2678{
2680}
2681
2682/************************************************************************/
2686 gpointer data)
2687{
2689}
2690
2691/************************************************************************/
2695 GVariant *parameter,
2696 gpointer data)
2697{
2699}
2700
2701/************************************************************************/
2705 GVariant *parameter,
2706 gpointer data)
2707{
2709}
2710
2711/************************************************************************/
2715 GVariant *parameter,
2716 gpointer data)
2717{
2719}
2720
2721/************************************************************************/
2725 gpointer data)
2726{
2728}
2729
2730/************************************************************************/
2734 gpointer data)
2735{
2737}
2738
2739/************************************************************************/
2743 GVariant *parameter,
2744 gpointer data)
2745{
2747}
2748
2749/************************************************************************/
2753 GVariant *parameter,
2754 gpointer data)
2755{
2757}
2758
2759/************************************************************************/
2763 GVariant *parameter,
2764 gpointer data)
2765{
2766 struct extra_type *pextra = data;
2767
2771}
2772
2773/************************************************************************/
2777 GVariant *parameter,
2778 gpointer data)
2779{
2780 struct extra_type *pextra = data;
2781
2784 pextra);
2786}
2787
2788/************************************************************************/
2792 GVariant *parameter,
2793 gpointer data)
2794{
2795 struct extra_type *pextra = data;
2796
2799 pextra);
2801}
2802
2803/************************************************************************/
2807 GVariant *parameter,
2808 gpointer data)
2809{
2810 struct extra_type *pextra = data;
2811
2814 pextra);
2816}
2817
2818/************************************************************************/
2822 GVariant *parameter,
2823 gpointer data)
2824{
2825 struct extra_type *pextra = data;
2826
2830 pextra);
2831 }
2833}
2834
2835/************************************************************************/
2839 GVariant *parameter,
2840 gpointer data)
2841{
2843}
2844
2845/************************************************************************/
2849 GVariant *parameter,
2850 gpointer data)
2851{
2853}
2854
2855/************************************************************************/
2859 GVariant *parameter,
2860 gpointer data)
2861
2862{
2864}
2865
2866/************************************************************************/
2875
2876/************************************************************************/
2885
2886/************************************************************************/
2890 GVariant *parameter,
2891 gpointer data)
2892{
2893 if (NULL != client.conn.playing) {
2895 }
2896}
2897
2898/************************************************************************/
2907
2908/************************************************************************/
2917
2918/************************************************************************/
2927
2928/************************************************************************/
2933{
2934 char actname[150];
2935 GMenuItem *item;
2936
2937 fc_snprintf(actname, sizeof(actname), "app.%s(%s)",
2938 info->action, info->state ? "true" : "false");
2939 item = g_menu_item_new(Q_(info->name), NULL);
2941
2942 if (info->accl != NULL) {
2943 const char *accls[2] = { info->accl, NULL };
2944
2946 }
2947
2948 return item;
2949}
2950
2951/************************************************************************/
2956{
2958}
2959
2960/************************************************************************/
2963static void menu_entry_init(GMenu *sub, const char *key)
2964{
2966
2967 if (info != NULL) {
2968 GMenuItem *item;
2969
2970 if (info->toggle != NULL) {
2972 } else {
2973 char actname[150];
2974
2975 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
2976 item = g_menu_item_new(Q_(info->name), actname);
2977 }
2978
2979 /* Should be menu_item_append_unref()? */
2982 }
2983}
2984
2985/************************************************************************/
2989{
2990 int i;
2991
2992 for (i = 0; meoms[i].menu_entry != NULL; i++) {
2993 struct menu_entry_info *info = menu_entry_info_find(meoms[i].menu_entry);
2994
2995 if (meoms[i].option != NULL) {
2996 info->state = *meoms[i].option;
2997 } else {
2998 info->state = FALSE; /* Best guess we have */
2999 }
3000 }
3001}
3002
3003/************************************************************************/
3007{
3008 int i;
3010
3011 /* Simple entries */
3014
3015 /* Toggles */
3016 for (i = 0; menu_entries[i].key != NULL; i++) {
3017 if (menu_entries[i].toggle != NULL) {
3018 GSimpleAction *act;
3019 GVariant *var = g_variant_new("b", TRUE);
3020
3023 g_signal_connect(act, "change-state",
3025 (gpointer)&(menu_entries[i]));
3026 }
3027 }
3028
3030
3031 for (i = 0; menu_entries[i].key != NULL; i++) {
3032 if (menu_entries[i].accl != NULL && menu_entries[i].toggle == NULL) {
3033 const char *accls[2] = { menu_entries[i].accl, NULL };
3034 char actname[150];
3035
3036 fc_snprintf(actname, sizeof(actname), "app.%s", menu_entries[i].action);
3037
3039 }
3040 }
3041}
3042
3043/************************************************************************/
3046static void register_bg_actions(GActionMap *map, int bg)
3047{
3048 GSimpleAction *act;
3049 char actname[256];
3050
3051 fc_snprintf(actname, sizeof(actname), "bg_select_%d", bg);
3054 g_signal_connect(act, "activate",
3056
3057 fc_snprintf(actname, sizeof(actname), "bg_assign_%d", bg);
3060 g_signal_connect(act, "activate",
3062
3063 fc_snprintf(actname, sizeof(actname), "bg_append_%d", bg);
3066 g_signal_connect(act, "activate",
3068}
3069
3070/************************************************************************/
3074{
3075 GMenu *menubar;
3076 GMenu *topmenu;
3077 GMenu *submenu;
3078 int i;
3079
3081
3082 menubar = g_menu_new();
3083
3084 topmenu = g_menu_new();
3085 menu_entry_init(topmenu, "CLEAR_CHAT_LOGS");
3086 menu_entry_init(topmenu, "SAVE_CHAT_LOGS");
3087
3089 menu_entry_init(options_menu, "LOCAL_OPTIONS");
3090 menu_entry_init(options_menu, "MESSAGE_OPTIONS");
3091 menu_entry_init(options_menu, "SERVER_OPTIONS");
3092 menu_entry_init(options_menu, "SAVE_OPTIONS");
3093 menu_entry_init(options_menu, "SAVE_OPTIONS_ON_EXIT");
3094
3096
3097#ifdef FREECIV_DEBUG
3098 menu_entry_init(topmenu, "RELOAD_TILESET");
3099#endif /* FREECIV_DEBUG */
3100
3101 menu_entry_init(topmenu, "GAME_SAVE");
3102 menu_entry_init(topmenu, "GAME_SAVE_AS");
3103 menu_entry_init(topmenu, "MAPIMG_SAVE");
3104 menu_entry_init(topmenu, "MAPIMG_SAVE_AS");
3105 menu_entry_init(topmenu, "VOLUME_UP");
3106 menu_entry_init(topmenu, "VOLUME_DOWN");
3107 menu_entry_init(topmenu, "LEAVE");
3108 menu_entry_init(topmenu, "QUIT");
3109
3111
3113
3114 menu_entry_init(edit_menu, "FIND_CITY");
3115 menu_entry_init(edit_menu, "WORKLISTS");
3116 menu_entry_init(edit_menu, "RALLY_DLG");
3117 menu_entry_init(edit_menu, "INFRA_DLG");
3118 menu_entry_init(edit_menu, "EDIT_MODE");
3119 menu_entry_init(edit_menu, "TOGGLE_FOG");
3120 menu_entry_init(edit_menu, "SCENARIO_PROPERTIES");
3121 menu_entry_init(edit_menu, "SCENARIO_SAVE");
3122 menu_entry_init(edit_menu, "CLIENT_LUA_SCRIPT");
3123
3125
3127
3128 menu_entry_init(view_menu, "SHOW_CITY_OUTLINES");
3129 menu_entry_init(view_menu, "SHOW_CITY_OUTPUT");
3130 menu_entry_init(view_menu, "SHOW_MAP_GRID");
3131 menu_entry_init(view_menu, "SHOW_NAT_BORDERS");
3132 menu_entry_init(view_menu, "SHOW_NATIVE_TILES");
3133 menu_entry_init(view_menu, "SHOW_CITY_FULL_BAR");
3134 menu_entry_init(view_menu, "SHOW_CITY_NAMES");
3135 menu_entry_init(view_menu, "SHOW_CITY_GROWTH");
3136 menu_entry_init(view_menu, "SHOW_CITY_PRODUCTIONS");
3137 menu_entry_init(view_menu, "SHOW_CITY_BUY_COST");
3138 menu_entry_init(view_menu, "SHOW_CITY_TRADE_ROUTES");
3139 menu_entry_init(view_menu, "SHOW_TERRAIN");
3140 menu_entry_init(view_menu, "SHOW_COASTLINE");
3141 menu_entry_init(view_menu, "SHOW_PATHS");
3142 menu_entry_init(view_menu, "SHOW_IRRIGATION");
3143 menu_entry_init(view_menu, "SHOW_MINES");
3144 menu_entry_init(view_menu, "SHOW_BASES");
3145 menu_entry_init(view_menu, "SHOW_RESOURCES");
3146 menu_entry_init(view_menu, "SHOW_HUTS");
3147 menu_entry_init(view_menu, "SHOW_POLLUTION");
3148 menu_entry_init(view_menu, "SHOW_CITIES");
3149 menu_entry_init(view_menu, "SHOW_UNITS");
3150 menu_entry_init(view_menu, "SHOW_UNIT_SOLID_BG");
3151 menu_entry_init(view_menu, "SHOW_UNIT_SHIELDS");
3152 menu_entry_init(view_menu, "SHOW_STACK_SIZE");
3153 menu_entry_init(view_menu, "SHOW_FOCUS_UNIT");
3154
3155 menu_entry_init(view_menu, "SHOW_FOG_OF_WAR");
3156
3157 menu_entry_init(view_menu, "FULL_SCREEN");
3158 menu_entry_init(view_menu, "CENTER_VIEW");
3159
3161
3162 topmenu = g_menu_new();
3163
3164 menu_entry_init(topmenu, "SELECT_SINGLE");
3165 menu_entry_init(topmenu, "SELECT_ALL_ON_TILE");
3166 menu_entry_init(topmenu, "SELECT_SAME_TYPE_TILE");
3167 menu_entry_init(topmenu, "SELECT_SAME_TYPE_CONT");
3168 menu_entry_init(topmenu, "SELECT_SAME_TYPE");
3169 menu_entry_init(topmenu, "SELECT_DLG");
3170
3172
3174
3175 menu_entry_init(unit_menu, "UNIT_GOTO");
3176
3177 /* Placeholder submenu (so that menu update has something to replace) */
3178 submenu = g_menu_new();
3180
3181 menu_entry_init(unit_menu, "UNIT_GOTO_CITY");
3182 menu_entry_init(unit_menu, "UNIT_RETURN");
3183 menu_entry_init(unit_menu, "UNIT_EXPLORE");
3184 menu_entry_init(unit_menu, "UNIT_PATROL");
3185 menu_entry_init(unit_menu, "UNIT_TELEPORT");
3186 menu_entry_init(unit_menu, "UNIT_SENTRY");
3187 menu_entry_init(unit_menu, "UNSENTRY_ALL");
3188 menu_entry_init(unit_menu, "UNIT_BOARD");
3189 menu_entry_init(unit_menu, "UNIT_DEBOARD");
3190 menu_entry_init(unit_menu, "UNIT_UNLOAD_TRANSPORTER");
3191 menu_entry_init(unit_menu, "UNIT_HOMECITY");
3192 menu_entry_init(unit_menu, "UNIT_UPGRADE");
3193 menu_entry_init(unit_menu, "UNIT_CONVERT");
3194 menu_entry_init(unit_menu, "UNIT_DISBAND");
3195 menu_entry_init(unit_menu, "DO_ACTION");
3196 menu_entry_init(unit_menu, "UNIT_WAIT");
3197 menu_entry_init(unit_menu, "UNIT_DONE");
3198
3200
3202 menu_entry_init(work_menu, "BUILD_CITY");
3203 menu_entry_init(work_menu, "AUTO_WORKER");
3204
3205 /* Placeholder submenus (so that menu update has something to replace) */
3206 submenu = g_menu_new();
3208 submenu = g_menu_new();
3209 submenu_append_unref(work_menu, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3210 submenu = g_menu_new();
3212 submenu = g_menu_new();
3213 submenu_append_unref(work_menu, _("_Clean Nuisance"), G_MENU_MODEL(submenu));
3214
3215 menu_entry_init(work_menu, "BUILD_ROAD");
3216 menu_entry_init(work_menu, "BUILD_IRRIGATION");
3217 menu_entry_init(work_menu, "BUILD_MINE");
3218 menu_entry_init(work_menu, "CULTIVATE");
3219 menu_entry_init(work_menu, "PLANT");
3220 menu_entry_init(work_menu, "TRANSFORM_TERRAIN");
3221 menu_entry_init(work_menu, "CONNECT_ROAD");
3222 menu_entry_init(work_menu, "CONNECT_RAIL");
3223 menu_entry_init(work_menu, "CONNECT_MAGLEV");
3224 menu_entry_init(work_menu, "CONNECT_IRRIGATION");
3225 menu_entry_init(work_menu, "CLEAN");
3226
3228
3230 menu_entry_init(combat_menu, "FORTIFY");
3231 menu_entry_init(combat_menu, "BUILD_FORTRESS");
3232 menu_entry_init(combat_menu, "BUILD_AIRBASE");
3233
3234 /* Placeholder submenu (so that menu update has something to replace) */
3235 submenu = g_menu_new();
3237
3239
3240 menu_entry_init(combat_menu, "PARADROP");
3241 menu_entry_init(combat_menu, "PILLAGE");
3242
3243 gov_menu = g_menu_new();
3244
3245 menu_entry_init(gov_menu, "MAP_VIEW");
3246 menu_entry_init(gov_menu, "REPORT_UNITS");
3247 menu_entry_init(gov_menu, "REPORT_NATIONS");
3248 menu_entry_init(gov_menu, "REPORT_CITIES");
3249 menu_entry_init(gov_menu, "REPORT_ECONOMY");
3250 menu_entry_init(gov_menu, "REPORT_RESEARCH");
3251 menu_entry_init(gov_menu, "TAX_RATES");
3252 menu_entry_init(gov_menu, "POLICIES");
3253
3254 /* Placeholder submenu (so that menu update has something to replace) */
3255 submenu = g_menu_new();
3257
3258 menu_entry_init(gov_menu, "REPORT_WOW");
3259 menu_entry_init(gov_menu, "REPORT_TOP_CITIES");
3260 menu_entry_init(gov_menu, "REPORT_MESSAGES");
3261 menu_entry_init(gov_menu, "REPORT_DEMOGRAPHIC");
3262 menu_entry_init(gov_menu, "REPORT_SPACESHIP");
3263 menu_entry_init(gov_menu, "REPORT_ACHIEVEMENTS");
3264
3265 submenu_append_unref(menubar, _("C_ivilization"), G_MENU_MODEL(gov_menu));
3266
3267 topmenu = g_menu_new();
3268
3269 /* Keys exist for 4 battle groups */
3271
3272 for (i = 0; i < MAX_NUM_BATTLEGROUPS; i++) {
3273 char key[128];
3274
3275 /* User side battle group numbers start from 1 */
3276 fc_snprintf(key, sizeof(key), "BG_SELECT_%d", i + 1);
3278 fc_snprintf(key, sizeof(key), "BG_ASSIGN_%d", i + 1);
3280 fc_snprintf(key, sizeof(key), "BG_APPEND_%d", i + 1);
3282
3284 }
3285
3286 submenu_append_unref(menubar, _("_Battle Groups"), G_MENU_MODEL(topmenu));
3287
3288 topmenu = g_menu_new();
3289
3290 menu_entry_init(topmenu, "HELP_OVERVIEW");
3291 menu_entry_init(topmenu, "HELP_PLAYING");
3292 menu_entry_init(topmenu, "HELP_POLICIES");
3293 menu_entry_init(topmenu, "HELP_TERRAIN");
3294 menu_entry_init(topmenu, "HELP_ECONOMY");
3295 menu_entry_init(topmenu, "HELP_CITIES");
3296 menu_entry_init(topmenu, "HELP_IMPROVEMENTS");
3297 menu_entry_init(topmenu, "HELP_WONDERS");
3298 menu_entry_init(topmenu, "HELP_UNITS");
3299 menu_entry_init(topmenu, "HELP_COMBAT");
3300 menu_entry_init(topmenu, "HELP_ZOC");
3301 menu_entry_init(topmenu, "HELP_GOVERNMENT");
3302 menu_entry_init(topmenu, "HELP_DIPLOMACY");
3303 menu_entry_init(topmenu, "HELP_TECH");
3304 menu_entry_init(topmenu, "HELP_SPACE_RACE");
3305 menu_entry_init(topmenu, "HELP_RULESET");
3306 menu_entry_init(topmenu, "HELP_TILESET");
3307 menu_entry_init(topmenu, "HELP_MUSICSET");
3308 menu_entry_init(topmenu, "HELP_NATIONS");
3309 menu_entry_init(topmenu, "HELP_CONNECTING");
3310 menu_entry_init(topmenu, "HELP_CONTROLS");
3311 menu_entry_init(topmenu, "HELP_GOVERNOR");
3312 menu_entry_init(topmenu, "HELP_CHATLINE");
3313 menu_entry_init(topmenu, "HELP_WORKLIST_EDITOR");
3314 menu_entry_init(topmenu, "HELP_LANGUAGES");
3315 menu_entry_init(topmenu, "HELP_COPYING");
3316 menu_entry_init(topmenu, "HELP_ABOUT");
3317
3319
3320 menus_built = TRUE;
3321
3323
3324 return menubar;
3325}
3326
3327/************************************************************************/
3330static struct menu_entry_info *menu_entry_info_find(const char *key)
3331{
3332 int i;
3333
3334 for (i = 0; menu_entries[i].key != NULL; i++) {
3335 if (!strcmp(key, menu_entries[i].key)) {
3336 return &(menu_entries[i]);
3337 }
3338 }
3339
3340 return NULL;
3341}
3342
3343/************************************************************************/
3347 struct menu_entry_info *info,
3349{
3350 GAction *act = g_action_map_lookup_action(map, info->action);
3351
3352 if (act != NULL) {
3354 }
3355}
3356
3357/************************************************************************/
3361 const char *key,
3363{
3365
3366 if (info != NULL) {
3368 }
3369}
3370
3371/************************************************************************/
3375 enum menu_entry_grouping group,
3377{
3378 int i;
3379
3380 for (i = 0; menu_entries[i].key != NULL; i++) {
3381 if (menu_entries[i].grouping & group) {
3383 }
3384 }
3385}
3386
3387/************************************************************************/
3390static void menus_rename(GMenu *parent, int index, const char *key,
3391 const char *new_name)
3392{
3394
3395 if (info != NULL) {
3396 char actname[150];
3397 GMenuItem *item;
3398
3399 fc_snprintf(actname, sizeof(actname), "app.%s", info->action);
3400 g_menu_remove(parent, index);
3401
3402 item = g_menu_item_new(new_name, actname);
3404 }
3405}
3406
3407/************************************************************************/
3411{
3412 /* The "full" city bar (i.e. the new way of drawing the
3413 * city name), can draw the city growth even without drawing
3414 * the city name. But the old method cannot. */
3416 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", TRUE);
3417 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES", TRUE);
3418 } else {
3419 menu_entry_set_sensitive(map, "SHOW_CITY_GROWTH", gui_options.draw_city_names);
3420 menu_entry_set_sensitive(map, "SHOW_CITY_TRADE_ROUTES",
3422 }
3423
3424 menu_entry_set_sensitive(map, "SHOW_CITY_BUY_COST",
3426 menu_entry_set_sensitive(map, "SHOW_COASTLINE", !gui_options.draw_terrain);
3427 menu_entry_set_sensitive(map, "SHOW_UNIT_SOLID_BG",
3429 menu_entry_set_sensitive(map, "SHOW_UNIT_SHIELDS",
3431 menu_entry_set_sensitive(map, "SHOW_FOCUS_UNIT", !gui_options.draw_units);
3432}
3433
3434/************************************************************************/
3440static const char *get_tile_change_menu_text(struct tile *ptile,
3441 enum unit_activity activity)
3442{
3443 struct tile *newtile = tile_virtual_new(ptile);
3444 const char *text;
3445
3446 tile_apply_activity(newtile, activity, NULL);
3447 text = tile_get_info_text(newtile, FALSE, 0);
3449
3450 return text;
3451}
3452
3453/************************************************************************/
3457{
3460 GMenu *submenu;
3461 int i, j;
3462 int tgt_kind_group;
3463 struct unit_list *punits;
3464 unsigned num_units;
3465 struct menu_entry_info *info;
3466 struct road_type *proad;
3467 struct extra_type_list *extras;
3468 bool conn_possible;
3469
3471 return;
3472 }
3473
3475
3476 submenu = g_menu_new();
3477
3478 i = 0;
3479 j = 0;
3480
3481 /* Add the new action entries grouped by target kind. */
3484 struct action *paction = action_by_number(act_id);
3485 GSimpleAction *act;
3486 char actname[256];
3487 char name[256];
3488
3489 if (action_id_get_actor_kind(act_id) != AAK_UNIT) {
3490 /* This action isn't performed by a unit. */
3491 continue;
3492 }
3493
3495 /* Wrong group. */
3496 continue;
3497 }
3498
3499 if (!units_can_do_action(punits, act_id, TRUE)) {
3500 continue;
3501 }
3502
3503 /* Create and add the menu item. */
3504 fc_snprintf(actname, sizeof(actname), "action_%d", i);
3507
3508 fc_snprintf(name, sizeof(name), "%s",
3509 action_get_ui_name_mnemonic(act_id, "_"));
3510 fc_snprintf(actname, sizeof(actname), "app.action_%d", i++);
3511
3512 if (action_id_has_complex_target(act_id)) {
3514 char subname[256];
3515
3516#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_) \
3517{ \
3518 fc_snprintf(actname, sizeof(actname), "subtgt_%d", j); \
3519 act = g_simple_action_new(actname, NULL); \
3520 g_action_map_add_action(map, G_ACTION(act)); \
3521 g_object_set_data(G_OBJECT(act), _sub_target_key_, _sub_target_); \
3522 g_signal_connect(act, "activate", G_CALLBACK(unit_goto_and_callback), \
3523 paction); \
3524 fc_snprintf(subname, sizeof(subname), "%s", _sub_target_name_); \
3525 fc_snprintf(actname, sizeof(actname), "app.subtgt_%d", j++); \
3526 menu_item_append_unref(sub_target_menu, \
3527 g_menu_item_new(subname, actname)); \
3528}
3529
3531 case ASTK_BUILDING:
3533 CREATE_SUB_ITEM(pimpr, "end_building",
3536 break;
3537 case ASTK_TECH:
3539 CREATE_SUB_ITEM(ptech, "end_tech",
3542 break;
3543 case ASTK_EXTRA:
3545 extra_type_iterate(pextra) {
3546 if (!actres_creates_extra(paction->result, pextra)
3547 && !actres_removes_extra(paction->result, pextra)) {
3548 /* Not relevant */
3549 continue;
3550 }
3551 CREATE_SUB_ITEM(pextra, "end_extra",
3552 extra_name_translation(pextra));
3554 break;
3555 case ASTK_NONE:
3556 /* Should not be here. */
3558 break;
3559 case ASTK_COUNT:
3560 /* Should not exits */
3562 break;
3563 }
3564
3565#undef CREATE_SUB_ITEM
3566
3568 } else {
3569 g_signal_connect(act, "activate",
3572 }
3574 }
3576 g_menu_insert_submenu(unit_menu, 1, _("Go to a_nd..."), G_MENU_MODEL(submenu));
3577
3578 submenu = g_menu_new();
3579
3581 menu_entry_init(submenu, "START_REVOLUTION");
3582 }
3583
3584 i = 0;
3587 char name[256];
3588 char actname[256];
3589 GSimpleAction *act;
3590
3591 fc_snprintf(actname, sizeof(actname), "government_%d", i);
3595 g_signal_connect(act, "activate", G_CALLBACK(government_callback), g);
3596
3597 /* TRANS: %s is a government name */
3598 fc_snprintf(name, sizeof(name), _("%s..."),
3600 fc_snprintf(actname, sizeof(actname), "app.government_%d", i++);
3602 }
3605 g_menu_insert_submenu(gov_menu, 8, _("_Government"), G_MENU_MODEL(submenu));
3606
3607 submenu = g_menu_new();
3608
3610 if (pextra->buildable) {
3611 char actname[256];
3612 GSimpleAction *act;
3613
3614 fc_snprintf(actname, sizeof(actname), "path_%d", i);
3619 pextra));
3621 g_signal_connect(act, "activate", G_CALLBACK(road_callback), pextra);
3622
3623 fc_snprintf(actname, sizeof(actname), "app.path_%d", i++);
3626 }
3628
3631
3632 submenu = g_menu_new();
3633
3635 if (pextra->buildable) {
3636 char actname[256];
3637 GSimpleAction *act;
3638
3639 fc_snprintf(actname, sizeof(actname), "irrig_%d", i);
3644 pextra));
3646 g_signal_connect(act, "activate", G_CALLBACK(irrigation_callback), pextra);
3647
3648 fc_snprintf(actname, sizeof(actname), "app.irrig_%d", i++);
3651 }
3653
3655 g_menu_insert_submenu(work_menu, 3, _("Build _Irrigation"), G_MENU_MODEL(submenu));
3656
3657 submenu = g_menu_new();
3658
3660 if (pextra->buildable) {
3661 char actname[256];
3662 GSimpleAction *act;
3663
3664 fc_snprintf(actname, sizeof(actname), "mine_%d", i);
3669 pextra));
3671 g_signal_connect(act, "activate", G_CALLBACK(mine_callback), pextra);
3672
3673 fc_snprintf(actname, sizeof(actname), "app.mine_%d", i++);
3676 }
3678
3681
3682 submenu = g_menu_new();
3683
3685 char actname[256];
3686 GSimpleAction *act;
3687
3688 fc_snprintf(actname, sizeof(actname), "clean_%d", i);
3693 pextra));
3695 g_signal_connect(act, "activate", G_CALLBACK(clean_menu_callback), pextra);
3696
3697 fc_snprintf(actname, sizeof(actname), "app.clean_%d", i++);
3701
3703 g_menu_insert_submenu(work_menu, 5, _("_Clean Nuisance"),
3705
3706 submenu = g_menu_new();
3707
3709 if (pextra->buildable) {
3710 char actname[256];
3711 GSimpleAction *act;
3712
3713 fc_snprintf(actname, sizeof(actname), "base_%d", i);
3718 pextra));
3720 g_signal_connect(act, "activate", G_CALLBACK(base_callback), pextra);
3721
3722 fc_snprintf(actname, sizeof(actname), "app.base_%d", i++);
3725 }
3727
3730
3732 char acttext[128], irrtext[128], mintext[128], transtext[128];
3733 char cultext[128], plantext[128];
3734 struct terrain *pterrain;
3735
3736 if (!can_client_change_view()) {
3737 return;
3738 }
3739
3741
3742 if (num_units > 0) {
3743 const struct tile *ptile = NULL;
3744 const struct unit_type *ptype = NULL;
3745
3747 fc_assert((ptile == NULL) == (ptype == NULL));
3748
3749 if (ptile || ptype) {
3750 if (unit_tile(punit) != ptile) {
3752 }
3753 if (unit_type_get(punit) != ptype) {
3755 }
3756 } else {
3757 ptile = unit_tile(punit);
3759 }
3761 }
3762
3767 num_units > 0
3769 && !editor_is_active());
3770
3772 menu_entry_set_sensitive(map, "VOLUME_UP", TRUE);
3773 menu_entry_set_sensitive(map, "VOLUME_DOWN", TRUE);
3774
3775 menu_entry_set_sensitive(map, "GAME_SAVE_AS",
3777 menu_entry_set_sensitive(map, "GAME_SAVE",
3779
3780 menu_entry_set_sensitive(map, "SERVER_OPTIONS", client.conn.established);
3781
3782 menu_entry_set_sensitive(map, "LEAVE",
3784
3786 menu_entry_set_sensitive(map, "INFRA_DLG", terrain_control.infrapoints);
3787
3788 menu_entry_set_sensitive(map, "POLICIES", multiplier_count() > 0);
3789 menu_entry_set_sensitive(map, "REPORT_TOP_CITIES", game.info.top_cities_count > 0);
3790 menu_entry_set_sensitive(map, "REPORT_SPACESHIP",
3791 client_player() != NULL && client_player()->spaceship.state != SSHIP_NONE);
3792
3793 info = menu_entry_info_find("EDIT_MODE");
3794 if (info->state != game.info.is_edit_mode) {
3795 info->state = game.info.is_edit_mode;
3799
3800 menu_entry_set_sensitive(map, "EDIT_MODE",
3803 }
3804
3805 info = menu_entry_info_find("TOGGLE_FOG");
3806 if (info->state != game.client.fog_of_war) {
3807 info->state = game.client.fog_of_war;
3808
3812 }
3813
3814 {
3815 char road_buf[500];
3816
3818 if (proad != NULL) {
3819 /* TRANS: Connect with some road type (Road/Railroad) */
3820 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3822 menus_rename(work_menu, 12, "CONNECT_ROAD", road_buf);
3823 }
3824
3826 if (proad != NULL) {
3827 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
3829 menus_rename(work_menu, 13, "CONNECT_RAIL", road_buf);
3830 }
3831 }
3832
3833 if (!can_client_issue_orders()) {
3834 return;
3835 }
3836
3837 if (!punits) {
3838 return;
3839 }
3840
3841 /* Remaining part of this function: Update Unit, Work, and Combat menus */
3842
3843 /* Enable the button for adding to a city in all cases, so we
3844 * get an eventual error message from the server if we try. */
3845 menu_entry_set_sensitive(map, "BUILD_CITY",
3850
3851 menu_entry_set_sensitive(map, "DO_ACTION",
3853
3854 menu_entry_set_sensitive(map, "UNIT_TELEPORT",
3856
3857 menu_entry_set_sensitive(map, "BUILD_ROAD",
3861 menu_entry_set_sensitive(map, "BUILD_IRRIGATION",
3863 menu_entry_set_sensitive(map, "BUILD_MINE",
3865 menu_entry_set_sensitive(map, "CULTIVATE",
3867 menu_entry_set_sensitive(map, "PLANT",
3869 menu_entry_set_sensitive(map, "TRANSFORM_TERRAIN",
3871 menu_entry_set_sensitive(map, "FORTIFY",
3874 menu_entry_set_sensitive(map, "PARADROP",
3876 menu_entry_set_sensitive(map, "PILLAGE",
3878 menu_entry_set_sensitive(map, "CLEAN",
3880 menu_entry_set_sensitive(map, "BUILD_FORTRESS",
3882 menu_entry_set_sensitive(map, "BUILD_AIRBASE",
3884 menu_entry_set_sensitive(map, "UNIT_SENTRY",
3886 menu_entry_set_sensitive(map, "UNSENTRY_ALL",
3889 menu_entry_set_sensitive(map, "UNIT_HOMECITY",
3891 menu_entry_set_sensitive(map, "UNIT_UPGRADE", units_can_upgrade(&(wld.map), punits));
3892 menu_entry_set_sensitive(map, "UNIT_CONVERT", units_can_convert(&(wld.map), punits));
3893 menu_entry_set_sensitive(map, "UNIT_DISBAND",
3895 TRUE));
3896
3897 menu_entry_set_sensitive(map, "AUTO_WORKER",
3899 menu_entry_set_sensitive(map, "UNIT_EXPLORE",
3901 menu_entry_set_sensitive(map, "UNIT_BOARD",
3903 menu_entry_set_sensitive(map, "UNIT_DEBOARD",
3905 menu_entry_set_sensitive(map, "UNIT_UNLOAD_TRANSPORTER",
3907
3909 if (proad != NULL) {
3910 struct extra_type *tgt;
3911
3912 tgt = road_extra_get(proad);
3913
3915 } else {
3917 }
3918 menu_entry_set_sensitive(map, "CONNECT_ROAD", conn_possible);
3919
3921 if (proad != NULL) {
3922 struct extra_type *tgt;
3923
3924 tgt = road_extra_get(proad);
3925
3927 } else {
3929 }
3930 menu_entry_set_sensitive(map, "CONNECT_RAIL", conn_possible);
3931
3933 if (proad != NULL) {
3934 struct extra_type *tgt;
3935
3936 tgt = road_extra_get(proad);
3937
3939 } else {
3941 }
3942 menu_entry_set_sensitive(map, "CONNECT_MAGLEV", conn_possible);
3943
3945
3946 if (extra_type_list_size(extras) > 0) {
3947 struct extra_type *tgt;
3948
3949 tgt = extra_type_list_get(extras, 0);
3951 } else {
3953 }
3954 menu_entry_set_sensitive(map, "CONNECT_IRRIGATION", conn_possible);
3955
3956 menu_entry_set_sensitive(map, "TAX_RATES",
3959
3961 menus_rename(work_menu, 0, "BUILD_CITY",
3963 } else {
3964 bool city_on_tile = FALSE;
3965
3966 /* FIXME: This overloading doesn't work well with multiple focus
3967 * units. */
3969 if (tile_city(unit_tile(punit))) {
3971 break;
3972 }
3974
3976 TRUE)) {
3977 menus_rename(work_menu, 0, "BUILD_CITY",
3979 } else {
3980 /* Refresh default order */
3981 menus_rename(work_menu, 0, "BUILD_CITY",
3983 }
3984 }
3985
3987 menus_rename(work_menu, 6, "BUILD_ROAD",
3990 char road_item[500];
3991 struct extra_type *pextra = NULL;
3992
3993 /* FIXME: This overloading doesn't work well with multiple focus
3994 * units. */
3998 if (pextra != NULL) {
3999 break;
4000 }
4002
4003 if (pextra != NULL) {
4004 /* TRANS: Build road of specific type (Road/Railroad) */
4005 snprintf(road_item, sizeof(road_item), _("Build %s"),
4006 extra_name_translation(pextra));
4007 menus_rename(work_menu, 6, "BUILD_ROAD", road_item);
4008 }
4009 } else {
4010 menus_rename(work_menu, 6, "BUILD_ROAD", _("Build _Road"));
4011 }
4012
4013 if (units_all_same_type && num_units > 0) {
4014 struct unit *punit = unit_list_get(punits, 0);
4015 const struct unit_type *to_unittype
4017
4018 if (to_unittype) {
4019 /* TRANS: %s is a unit type. */
4020 fc_snprintf(acttext, sizeof(acttext), _("Upgr_ade to %s"),
4023 unit_type_get(punit))));
4024 } else {
4025 acttext[0] = '\0';
4026 }
4027 } else {
4028 acttext[0] = '\0';
4029 }
4030 if ('\0' != acttext[0]) {
4031 menus_rename(unit_menu, 13, "UNIT_UPGRADE", acttext);
4032 } else {
4033 menus_rename(unit_menu, 13, "UNIT_UPGRADE", _("Upgr_ade"));
4034 }
4035
4036 if (units_can_convert(&(wld.map), punits)) {
4037 if (units_all_same_type && num_units > 0) {
4038 struct unit *punit = unit_list_get(punits, 0);
4039
4040 /* TRANS: %s is a unit type. */
4041 fc_snprintf(acttext, sizeof(acttext), _("C_onvert to %s"),
4043 } else {
4044 acttext[0] = '\0';
4045 }
4046 } else {
4047 menu_entry_set_sensitive(map, "UNIT_CONVERT", FALSE);
4048 acttext[0] = '\0';
4049 }
4050 if ('\0' != acttext[0]) {
4051 menus_rename(unit_menu, 14, "UNIT_CONVERT", acttext);
4052 } else {
4053 menus_rename(unit_menu, 14, "UNIT_CONVERT", _("C_onvert"));
4054 }
4055
4056 if (units_all_same_tile && num_units > 0) {
4057 struct unit *first = unit_list_get(punits, 0);
4058
4059 pterrain = tile_terrain(unit_tile(first));
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 irrigation of specific type */
4076 snprintf(irrtext, sizeof(irrtext), _("Build %s"),
4077 extra_name_translation(pextra));
4078 } else {
4079 sz_strlcpy(irrtext, _("Build _Irrigation"));
4080 }
4081 } else {
4082 sz_strlcpy(irrtext, _("Build _Irrigation"));
4083 }
4084
4085 if (pterrain->cultivate_result != T_NONE) {
4086 fc_snprintf(cultext, sizeof(cultext), _("Change to %s"),
4089 } else {
4090 sz_strlcpy(cultext, _("_Cultivate"));
4091 }
4092
4094 struct extra_type *pextra = NULL;
4095
4096 /* FIXME: this overloading doesn't work well with multiple focus
4097 * units. */
4101 if (pextra != NULL) {
4102 break;
4103 }
4105
4106 if (pextra != NULL) {
4107 /* TRANS: Build mine of specific type */
4108 snprintf(mintext, sizeof(mintext), _("Build %s"),
4109 extra_name_translation(pextra));
4110 } else {
4111 sz_strlcpy(mintext, _("Build _Mine"));
4112 }
4113 } else {
4114 sz_strlcpy(mintext, _("Build _Mine"));
4115 }
4116
4117 if (pterrain->plant_result != T_NONE) {
4118 fc_snprintf(plantext, sizeof(plantext), _("Change to %s"),
4120 } else {
4121 sz_strlcpy(plantext, _("_Plant"));
4122 }
4123
4124 if (pterrain->transform_result != T_NONE
4125 && pterrain->transform_result != pterrain) {
4126 fc_snprintf(transtext, sizeof(transtext), _("Transf_orm to %s"),
4129 } else {
4130 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4131 }
4132 } else {
4133 sz_strlcpy(irrtext, _("Build _Irrigation"));
4134 sz_strlcpy(cultext, _("_Cultivate"));
4135 sz_strlcpy(mintext, _("Build _Mine"));
4136 sz_strlcpy(plantext, _("_Plant"));
4137 sz_strlcpy(transtext, _("Transf_orm Terrain"));
4138 }
4139
4140 menus_rename(work_menu, 7, "BUILD_IRRIGATION", irrtext);
4141 menus_rename(work_menu, 9, "CULTIVATE", cultext);
4142 menus_rename(work_menu, 8, "BUILD_MINE", mintext);
4143 menus_rename(work_menu, 10, "PLANT", plantext);
4144 menus_rename(work_menu, 11, "TRANSFORM_TERRAIN", transtext);
4145
4146 menus_rename(unit_menu, 12, "UNIT_HOMECITY",
4148
4149 menus_rename(combat_menu, 1, "BUILD_FORTRESS",
4150 Q_(terrain_control.gui_type_base0));
4151 menus_rename(combat_menu, 2, "BUILD_AIRBASE",
4152 Q_(terrain_control.gui_type_base1));
4153}
4154
4155/************************************************************************/
4160{
4161 if (!menus_built) {
4162 return;
4163 }
4164
4165#ifdef MENUS_GTK3
4166
4167 if (!can_client_change_view()) {
4169
4170 return;
4171 }
4172
4175
4176 menu_entry_set_sensitive("SHOW_NATIONAL_BORDERS",
4178
4180#endif /* MENUS_GTK3 */
4181}
4182
4183/**********************************************************************/
4187{
4189
4190 if (enable) {
4191 if (main_menubar == NULL) {
4194 /* Ensure the menus are really created before performing any operations
4195 * on them. */
4196 while (g_main_context_pending(NULL)) {
4198 }
4199 }
4200
4203
4204 } else {
4207 }
4208
4209 /* Workaround for gtk bug that (re)setting the menubar after the window has
4210 * been already created is not noticed. */
4211 g_object_notify(G_OBJECT(gtk_settings_get_default()), "gtk-shell-shows-menubar");
4212}
4213
4214/**********************************************************************/
4221
4222/**********************************************************************/
enum action_sub_target_kind action_get_sub_target_kind(const struct action *paction)
Definition actions.c:1119
const char * action_get_ui_name_mnemonic(action_id act_id, const char *mnemonic)
Definition actions.c:1258
#define action_noninternal_iterate_end
Definition actions.h:240
static struct action * action_by_number(action_id act_id)
Definition actions.h:400
#define action_id_get_actor_kind(act_id)
Definition actions.h:413
#define ACTION_ANY
Definition actions.h:56
#define action_noninternal_iterate(_act_)
Definition actions.h:235
#define action_id_get_target_kind(act_id)
Definition actions.h:417
#define action_id_has_complex_target(act_id)
Definition actions.h:435
bool actres_removes_extra(enum action_result result, const struct extra_type *pextra)
Definition actres.c:810
bool actres_creates_extra(enum action_result result, const struct extra_type *pextra)
Definition actres.c:789
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:521
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:744
#define Q_(String)
Definition fcintl.h:70
#define _(String)
Definition fcintl.h:67
#define N_(String)
Definition fcintl.h:69
struct civ_game game
Definition game.c:61
struct world wld
Definition game.c:62
const char * government_name_translation(const struct government *pgovern)
Definition government.c:143
bool untargeted_revolution_allowed(void)
Definition government.c:570
bool can_change_to_government(struct player *pplayer, const struct government *gov)
Definition government.c:170
#define governments_iterate(NAME_pgov)
Definition government.h:124
#define governments_iterate_end
Definition government.h:127
void log_output_window(void)
Definition chatline.c:929
void clear_output_window(void)
Definition chatline.c:944
void city_report_dialog_popup(bool raise)
Definition cityrep.c:292
void unit_select_dialog_popup(struct tile *ptile)
Definition dialogs.c:377
void popup_upgrade_dialog(struct unit_list *punits)
Definition dialogs.c:1435
void popup_disband_dialog(struct unit_list *punits)
Definition dialogs.c:1473
void editgui_refresh(void)
Definition editgui.c:1798
void property_editor_popup(struct property_editor *pe, enum editor_object_type objtype)
Definition editprop.c:6292
struct property_editor * editprop_get_property_editor(void)
Definition editprop.c:6245
void property_editor_reload(struct property_editor *pe, enum editor_object_type objtype)
Definition editprop.c:6382
void popup_find_dialog(void)
Definition finddlg.c:58
void popup_multiplier_dialog(void)
Definition gamedlgs.c:383
void popup_rates_dialog(void)
Definition gamedlgs.c:533
void popup_goto_dialog(void)
Definition gotodlg.c:258
void fullscreen_opt_refresh(struct option *poption)
Definition gui_main.c:2433
gboolean map_canvas_focus(void)
Definition gui_main.c:360
GtkWidget * toplevel
Definition gui_main.c:126
void popup_quit_dialog(void)
Definition gui_main.c:2349
#define ACCL_MOD_KEY
Definition gui_main.h:26
#define GUI_GTK_OPTION(optname)
Definition gui_main.h:32
void setup_dialog(GtkWidget *shell, GtkWidget *parent)
Definition gui_stuff.c:287
void popup_help_dialog_string(const char *item)
Definition helpdlg.c:212
void infra_dialog_popup(void)
Definition infradlg.c:85
void luaconsole_dialog_popup(bool raise)
Definition luaconsole.c:126
void center_on_unit(void)
Definition mapctrl.c:496
static void save_mapimg_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:703
static void show_national_borders_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1237
static void show_focus_unit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1473
GtkWidget * setup_menus(GtkWidget *window)
Definition menu.c:2183
static void help_connecting_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:887
static void menus_rename(const char *key, const gchar *new_label)
Definition menu.c:2317
static void help_combat_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1095
static void menu_entry_group_set_sensitive(enum menu_entry_grouping group, gboolean is_sensitive)
Definition menu.c:2285
static void help_ruleset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1039
static void select_single_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1545
static void unit_unload_transporter_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1753
static void help_government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1135
static void report_achievements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:863
static void show_fog_of_war_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1484
static void help_zoc_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1103
static void show_city_productions_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1294
static void toggle_fog_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1515
static void client_lua_script_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:847
static void show_city_names_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1271
static void help_space_race_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1151
static void help_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1047
static void help_playing_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1031
static void plant_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1871
static struct menu_entry_info menu_entries[]
Definition menu.c:269
static void base_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2033
static void help_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1063
static void unit_sentry_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1717
static void center_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2073
static void unit_explore_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1701
static void build_mine_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1863
static void quit_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:779
static void unit_return_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1691
static void show_city_trade_routes_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1317
static void transform_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1943
static void help_wonders_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1127
static void show_terrain_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1328
static void show_city_growth_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1283
static void show_stack_size_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1462
static void multiplier_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2017
static void help_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1119
static void save_game_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:687
static void show_unit_solid_bg_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1440
static void show_coastline_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1339
static void show_city_full_bar_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1259
static void edit_mode_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1192
static void help_chatline_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:903
static void show_paths_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1349
static void connect_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1879
static void help_overview_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1023
static void save_game_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:695
static void help_diplomacy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1143
static void show_units_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1429
static void show_irrigation_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1359
static void show_map_grid_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1226
static void help_improvements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1079
static void find_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:787
static void report_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:811
static void report_demographic_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:855
static void help_worklist_editor_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:911
static void help_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1071
static void leave_local_game_response(GtkWidget *dialog, gint response)
Definition menu.c:720
static void help_language_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:871
static void server_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:663
static void leave_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:735
static void select_same_type_cont_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1569
static void unit_convert_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1778
static void select_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1585
static void show_huts_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1399
static void report_wow_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:819
static void unit_upgrade_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1770
static void help_tech_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1111
static void unit_goto_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1625
static void clean_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2058
static void build_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1794
static void unit_patrol_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1709
void real_menus_init(void)
Definition menu.c:2947
menu_entry_grouping
Definition menu.c:91
@ MGROUP_ALL
Definition menu.c:92
@ MGROUP_PLAYING
Definition menu.c:91
@ MGROUP_PLAYER
Definition menu.c:92
@ MGROUP_SAFE
Definition menu.c:91
@ MGROUP_EDIT
Definition menu.c:91
@ MGROUP_UNIT
Definition menu.c:92
static void rally_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1593
static void help_about_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1175
static void build_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1821
static void local_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:647
static void show_cities_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1419
static void unit_homecity_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1762
static void menu_entry_set_sensitive(const char *key, gboolean is_sensitive)
Definition menu.c:2272
static void show_pollution_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1409
static void save_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:671
static void save_mapimg_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:711
static void worklists_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:795
static void connect_maglev_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1911
static void full_screen_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1495
static void report_top_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:831
static void help_controls_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:895
static void select_same_type_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1577
static void connect_rail_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1895
static void unit_wait_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1609
static const char * get_tile_change_menu_text(struct tile *ptile, enum unit_activity activity)
Definition menu.c:2370
static void build_airbase_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1977
static void report_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2089
static void infra_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1601
static void message_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:655
static void tax_rate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2009
static void help_musicset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1055
static void unit_goto_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1681
static struct menu_entry_info * menu_entry_info_find(const char *key)
Definition menu.c:2243
static void auto_work_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1813
static void government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2025
static void report_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2097
static void report_messages_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:839
static void show_bases_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1379
static void select_same_type_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1561
static void save_options_on_exit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1183
static void volume_up_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:755
static void show_native_tiles_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1248
static void menu_entry_init(GtkBuildable *item)
Definition menu.c:2123
static void show_unit_shields_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1451
static void reload_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:679
static void scenario_properties_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1525
static void clear_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:631
static void unit_deboard_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1743
static void help_policies_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:879
static void unit_done_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1617
static void help_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1159
static void unit_goto_and_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1633
static void show_city_output_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1215
static void show_city_outlines_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1204
static void save_scenario_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1537
static void help_copying_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1167
static void cultivate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1855
static void save_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:639
void real_menus_update(void)
Definition menu.c:2385
static void report_spaceship_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2113
static void select_all_on_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1553
static void show_city_buy_cost_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1306
static void build_fortress_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1959
#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_)
static void view_menu_update_sensitivity(void)
Definition menu.c:2338
static void unit_board_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1733
static void fortify_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1967
static void show_resources_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1389
static void connect_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1927
static void build_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1847
static void report_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2081
static void road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2045
static void unit_disband_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1786
static void help_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1087
static void report_research_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2105
static void map_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:803
static void volume_down_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:767
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:1701
static void irrigation_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2791
static void bg_append_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2921
static void unsentry_all_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2392
static GMenu * combat_menu
Definition menu.c:94
static GMenuItem * create_toggle_menu_item_for_key(const char *key)
Definition menu.c:2955
static void pillage_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2704
void enable_menus(bool enable)
Definition menu.c:4186
static void setup_app_actions(GApplication *fc_app)
Definition menu.c:3006
static GMenu * options_menu
Definition menu.c:88
static void register_bg_actions(GActionMap *map, int bg)
Definition menu.c:3046
const GActionEntry acts[]
Definition menu.c:1059
static void revolution_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2752
static GMenu * view_menu
Definition menu.c:90
@ VMENU_HUTS
Definition menu.c:1047
@ VMENU_MINES
Definition menu.c:1044
@ VMENU_COASTLINE
Definition menu.c:1041
@ VMENU_UNIT_SOLID_BG
Definition menu.c:1051
@ VMENU_CITY_NAMES
Definition menu.c:1035
@ VMENU_UNITS
Definition menu.c:1050
@ VMENU_CITY_FULL_BAR
Definition menu.c:1034
@ VMENU_CITY_OUTLINES
Definition menu.c:1029
@ VMENU_POLLUTION
Definition menu.c:1048
@ VMENU_FOCUS_UNIT
Definition menu.c:1054
@ VMENU_BASES
Definition menu.c:1045
@ VMENU_MAP_GRID
Definition menu.c:1031
@ VMENU_CITY_BUY_COST
Definition menu.c:1038
@ VMENU_TERRAIN
Definition menu.c:1040
@ VMENU_CITY_GROWTH
Definition menu.c:1036
@ VMENU_PATHS
Definition menu.c:1042
@ VMENU_CITIES
Definition menu.c:1049
@ VMENU_STACK_SIZE
Definition menu.c:1053
@ VMENU_UNIT_SHIELDS
Definition menu.c:1052
@ VMENU_IRRIGATION
Definition menu.c:1043
@ VMENU_NATIVE_TILES
Definition menu.c:1033
@ VMENU_CITY_OUTPUT
Definition menu.c:1030
@ VMENU_RESOURCES
Definition menu.c:1046
@ VMENU_CITY_PRODUCTIONS
Definition menu.c:1037
@ VMENU_CITY_TRADE_ROUTES
Definition menu.c:1039
@ VMENU_FULL_SCREEN
Definition menu.c:1056
@ VMENU_NAT_BORDERS
Definition menu.c:1032
@ VMENU_FOW
Definition menu.c:1055
static GMenu * work_menu
Definition menu.c:93
menu_entry_grouping
Definition menu.c:80
@ MGROUP_CHAR
Definition menu.c:85
static void bg_assign_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2911
static void menu_entry_set_sensitive_info(GActionMap *map, struct menu_entry_info *info, gboolean is_enabled)
Definition menu.c:3346
static bool menus_built
Definition menu.c:74
void menus_disable_char_commands(void)
Definition menu.c:4225
static void show_mines_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:1997
static GMenu * edit_menu
Definition menu.c:89
void menus_disable_unit_commands(void)
Definition menu.c:4217
static void unit_teleport_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2373
static void paradrop_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2694
const struct menu_entry_option_map meoms[]
Definition menu.c:1777
static GMenu * unit_menu
Definition menu.c:92
static void do_action_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2714
static void bg_select_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2901
static void mine_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2806
static GMenu * main_menubar
Definition menu.c:73
static GMenuItem * create_toggle_menu_item(struct menu_entry_info *info)
Definition menu.c:2932
void menus_set_initial_toggle_values(void)
Definition menu.c:2988
static void clean_menu_callback(GSimpleAction *action, GVariant *parameter, gpointer data)
Definition menu.c:2821
static void view_menu_item_toggle(void(*cb)(void), bool updt_sensitivity, gpointer data)
Definition menu.c:1818
#define enable(id)
Definition widget.h:223
void popup_revolution_dialog(void)
Definition dialogs.c:112
#define HELP_MUSICSET_ITEM
#define HELP_CITIES_ITEM
#define HELP_TERRAIN_ITEM
#define HELP_LANGUAGES_ITEM
#define HELP_CONNECTING_ITEM
#define HELP_TILESET_ITEM
#define HELP_CHATLINE_ITEM
#define HELP_RULESET_ITEM
#define HELP_GOVERNMENT_ITEM
#define HELP_ABOUT_ITEM
#define HELP_MULTIPLIER_ITEM
#define HELP_PLAYING_ITEM
#define HELP_IMPROVEMENTS_ITEM
#define HELP_UNITS_ITEM
#define HELP_ZOC_ITEM
#define HELP_WORKLIST_EDITOR_ITEM
#define HELP_WONDERS_ITEM
#define HELP_COMBAT_ITEM
#define HELP_SPACE_RACE_ITEM
#define HELP_COPYING_ITEM
#define HELP_OVERVIEW_ITEM
#define HELP_NATIONS_ITEM
#define HELP_TECHS_ITEM
#define HELP_DIPLOMACY_ITEM
#define HELP_ECONOMY_ITEM
#define HELP_CMA_ITEM
#define HELP_CONTROLS_ITEM
Impr_type_id improvement_number(const struct impr_type *pimprove)
const char * improvement_name_translation(const struct impr_type *pimprove)
#define improvement_iterate_end
#define improvement_iterate(_p)
const char * name
Definition inputfile.c:127
#define fc_assert_ret(condition)
Definition log.h:192
#define fc_assert(condition)
Definition log.h:177
#define FC_STATIC_ASSERT(cond, tag)
Definition log.h:238
struct terrain_misc terrain_control
Definition map.c:68
Multiplier_type_id multiplier_count(void)
Definition multipliers.c:88
void option_changed(struct option *poption)
Definition options.c:759
const struct option_set * server_optset
Definition options.c:4077
const struct option_set * client_optset
Definition options.c:1291
void options_save(option_save_log_callback log_cb)
Definition options.c:6177
struct client_options gui_options
Definition options.c:71
struct option * optset_option_by_name(const struct option_set *poptset, const char *name)
Definition options.c:442
@ GUI_GTK_MSGCHAT_MERGED
Definition options.h:69
struct extra_type * road_extra_get(const struct road_type *proad)
Definition road.c:42
struct road_type * road_by_gui_type(enum road_gui_type gui_type)
Definition road.c:180
static char * grouping
Definition shared.c:98
#define CLIP(lower, current, upper)
Definition shared.h:57
@ SSHIP_NONE
Definition spaceship.h:84
struct civ_game::@32::@35 client
bool fog_of_war
Definition game.h:121
struct packet_game_info info
Definition game.h:89
struct government * government_during_revolution
Definition game.h:94
struct connection conn
Definition client_main.h:96
bool draw_native
Definition options.h:215
bool draw_specials
Definition options.h:207
bool draw_city_output
Definition options.h:194
bool draw_city_names
Definition options.h:196
bool draw_city_productions
Definition options.h:198
bool draw_mines
Definition options.h:205
bool draw_borders
Definition options.h:214
bool draw_fortress_airbase
Definition options.h:206
bool draw_city_buycost
Definition options.h:199
bool draw_unit_stack_size
Definition options.h:218
bool draw_irrigation
Definition options.h:204
bool draw_terrain
Definition options.h:201
bool draw_units
Definition options.h:211
bool draw_fog_of_war
Definition options.h:213
bool draw_city_trade_routes
Definition options.h:200
bool draw_unit_shields
Definition options.h:217
bool draw_cities
Definition options.h:210
bool save_options_on_exit
Definition options.h:125
int sound_effects_volume
Definition options.h:190
bool draw_map_grid
Definition options.h:195
bool draw_city_growth
Definition options.h:197
bool draw_focus_unit
Definition options.h:212
bool draw_paths
Definition options.h:203
bool draw_city_outlines
Definition options.h:193
bool draw_coastline
Definition options.h:202
bool draw_full_citybar
Definition options.h:216
bool draw_pollution
Definition options.h:209
bool solid_color_behind_units
Definition options.h:149
bool established
Definition connection.h:140
struct player * playing
Definition connection.h:151
struct extra_type::@26 data
Definition climisc.h:82
Definition menu.c:97
const char * key
Definition menu.c:98
bool state
Definition menu.c:103
const char * accl
Definition menu.c:100
enum menu_entry_grouping grouping
Definition menu.c:103
GCallback cb
Definition menu.c:102
const char * name
Definition menu.c:99
const char * action
Definition menu.c:99
void(* toggle)(GSimpleAction *act, GVariant *value, gpointer data)
Definition menu.c:102
Definition menu.c:1771
const char * menu_entry
Definition menu.c:1772
bool * option
Definition menu.c:1773
int menu_pos
Definition menu.c:1774
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:271
#define advance_iterate_end
Definition tech.h:272
#define T_NONE
Definition terrain.h:61
void tile_virtual_destroy(struct tile *vtile)
Definition tile.c:1035
bool tile_apply_activity(struct tile *ptile, Activity_type_id act, struct extra_type *tgt)
Definition tile.c:681
struct tile * tile_virtual_new(const struct tile *ptile)
Definition tile.c:981
const char * tile_get_info_text(const struct tile *ptile, bool include_nuisances, int linebreaks)
Definition tile.c:771
struct city * tile_city(const struct tile *ptile)
Definition tile.c:83
#define tile_terrain(_tile)
Definition tile.h:115
bool tilespec_reread(const char *new_tileset_name, bool game_fully_initialized, float scale)
Definition tilespec.c:1401
bool unit_can_est_trade_route_here(const struct unit *punit)
Definition unit.c:302
bool unit_can_add_or_build_city(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:490
bool can_unit_change_homecity(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:523
bool can_unit_do_autoworker(const struct unit *punit)
Definition unit.c:648
bool can_unit_teleport(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:848
bool can_unit_paradrop(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:864
bool unit_can_help_build_wonder_here(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:276
#define unit_tile(_pu)
Definition unit.h:407
@ ORDER_PERFORM_ACTION
Definition unit.h:48
#define unit_owner(_pu)
Definition unit.h:406
#define MAX_NUM_BATTLEGROUPS
Definition unit.h:192
bool units_can_convert(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:352
bool units_are_occupied(const struct unit_list *punits)
Definition unitlist.c:275
bool units_can_unload(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:303
bool can_units_do_base_gui(const struct unit_list *punits, enum base_gui_type base_gui)
Definition unitlist.c:182
bool can_units_do_any_road(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:163
bool units_can_upgrade(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:337
bool units_have_activity_on_tile(const struct unit_list *punits, enum unit_activity activity)
Definition unitlist.c:321
bool units_have_type_flag(const struct unit_list *punits, enum unit_type_flag_id flag, bool has_flag)
Definition unitlist.c:204
bool can_units_do(const struct unit_list *punits, bool(can_fn)(const struct unit *punit))
Definition unitlist.c:95
bool units_can_do_action(const struct unit_list *punits, action_id act_id, bool can_do)
Definition unitlist.c:241
bool units_can_load(const struct unit_list *punits)
Definition unitlist.c:289
bool can_units_do_on_map(const struct civ_map *nmap, const struct unit_list *punits, bool(can_fn)(const struct civ_map *nmap, const struct unit *punit))
Definition unitlist.c:111
#define unit_list_iterate(unitlist, punit)
Definition unitlist.h:31
#define unit_list_iterate_end
Definition unitlist.h:33
const struct unit_type * unit_type_get(const struct unit *punit)
Definition unittype.c:123
const struct unit_type * can_upgrade_unittype(const struct player *pplayer, const struct unit_type *punittype)
Definition unittype.c:1707
const char * utype_name_translation(const struct unit_type *punittype)
Definition unittype.c:1564
bool utype_can_do_action(const struct unit_type *putype, const action_id act_id)
Definition unittype.c:375