Freeciv-3.4
Loading...
Searching...
No Matches
menu.c
Go to the documentation of this file.
1/***********************************************************************
2 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12***********************************************************************/
13
14#ifdef HAVE_CONFIG_H
15#include <fc_config.h>
16#endif
17
18#include <stdlib.h>
19
20#include <gtk/gtk.h>
21
22/* utility */
23#include "fcintl.h"
24#include "log.h"
25#include "shared.h"
26#include "support.h"
27
28/* common */
29#include "game.h"
30#include "government.h"
31#include "road.h"
32#include "specialist.h"
33#include "unit.h"
34
35/* client */
36#include "audio.h"
37#include "client_main.h"
38#include "clinet.h"
39#include "connectdlg_common.h"
40#include "control.h"
41#include "mapview_common.h"
42#include "options.h"
43#include "tilespec.h"
44#include "zoom.h"
45
46/* client/gui-gtk-3.22 */
47#include "chatline.h"
48#include "cityrep.h"
49#include "dialogs.h"
50#include "editgui.h"
51#include "editprop.h"
52#include "finddlg.h"
53#include "gamedlgs.h"
54#include "gotodlg.h"
55#include "gui_main.h"
56#include "gui_stuff.h"
57#include "helpdlg.h"
58#include "infradlg.h"
59#include "luaconsole.h"
60#include "mapctrl.h" /* center_on_unit(). */
61#include "messagedlg.h"
62#include "messagewin.h"
63#include "optiondlg.h"
64#include "pages.h"
65#include "plrdlg.h"
66#include "rallypointdlg.h"
67#include "ratesdlg.h"
68#include "repodlgs.h"
69#include "sprite.h"
70#include "spaceshipdlg.h"
71#include "unitselect.h"
72#include "wldlg.h"
73
74#include "menu.h"
75
76#ifndef GTK_STOCK_EDIT
77#define GTK_STOCK_EDIT NULL
78#endif
79
81
82static void menu_entry_set_active(const char *key,
84static void menu_entry_set_sensitive(const char *key,
86#ifndef FREECIV_DEBUG
87static void menu_entry_set_visible(const char *key,
88 gboolean is_visible,
90#endif /* FREECIV_DEBUG */
91
92static void view_menu_update_sensitivity(void);
93
96
99
108
116static void save_game_callback(GtkMenuItem *item, gpointer data);
120static void find_city_callback(GtkMenuItem *item, gpointer data);
121static void worklists_callback(GtkMenuItem *item, gpointer data);
123static void volume_up_callback(GtkMenuItem *item, gpointer data);
125static void leave_callback(GtkMenuItem *item, gpointer data);
126static void quit_callback(GtkMenuItem *item, gpointer data);
127static void map_view_callback(GtkMenuItem *item, gpointer data);
131static void report_wow_callback(GtkMenuItem *item, gpointer data);
135static void bg_select0_callback(GtkMenuItem *item, gpointer data);
136static void bg_assign0_callback(GtkMenuItem *item, gpointer data);
137static void bg_append0_callback(GtkMenuItem *item, gpointer data);
138static void bg_select1_callback(GtkMenuItem *item, gpointer data);
139static void bg_assign1_callback(GtkMenuItem *item, gpointer data);
140static void bg_append1_callback(GtkMenuItem *item, gpointer data);
141static void bg_select2_callback(GtkMenuItem *item, gpointer data);
142static void bg_assign2_callback(GtkMenuItem *item, gpointer data);
143static void bg_append2_callback(GtkMenuItem *item, gpointer data);
144static void bg_select3_callback(GtkMenuItem *item, gpointer data);
145static void bg_assign3_callback(GtkMenuItem *item, gpointer data);
146static void bg_append3_callback(GtkMenuItem *item, gpointer data);
155static void help_units_callback(GtkMenuItem *item, gpointer data);
157static void help_zoc_callback(GtkMenuItem *item, gpointer data);
160static void help_tech_callback(GtkMenuItem *item, gpointer data);
168static void help_cma_callback(GtkMenuItem *item, gpointer data);
173static void help_about_callback(GtkMenuItem *item, gpointer data);
175 gpointer data);
178 gpointer data);
182 gpointer data);
184 gpointer data);
186 gpointer data);
190 gpointer data);
192 gpointer data);
194 gpointer data);
207 gpointer data);
209 gpointer data);
211 gpointer data);
220static void zoom_in_callback(GtkMenuItem *item, gpointer data);
221static void zoom_out_callback(GtkMenuItem *item, gpointer data);
224static void multiplier_callback(GtkMenuItem *item, gpointer data);
227static void government_callback(GtkMenuItem *item, gpointer data);
228static void tax_rate_callback(GtkMenuItem *item, gpointer data);
237static void unit_wait_callback(GtkMenuItem *item, gpointer data);
238static void unit_done_callback(GtkMenuItem *item, gpointer data);
239static void unit_goto_callback(GtkMenuItem *item, gpointer data);
246static void unit_board_callback(GtkMenuItem *item, gpointer data);
249 gpointer data);
254static void build_city_callback(GtkMenuItem *item, gpointer data);
255static void auto_work_callback(GtkMenuItem *item, gpointer data);
256static void build_road_callback(GtkMenuItem *item, gpointer data);
258static void cultivate_callback(GtkMenuItem *item, gpointer data);
259static void build_mine_callback(GtkMenuItem *item, gpointer data);
260static void plant_callback(GtkMenuItem *item, gpointer data);
267static void fortify_callback(GtkMenuItem *item, gpointer data);
271static void do_pillage_callback(GtkMenuItem *item, gpointer data);
273
275{
276 { "MENU_GAME", N_("_Game"), 0, 0, NULL, MGROUP_SAFE },
277 { "MENU_OPTIONS", N_("_Options"), 0, 0, NULL, MGROUP_SAFE },
278 { "MENU_EDIT", N_("_Edit"), 0, 0, NULL, MGROUP_SAFE },
279 { "MENU_VIEW", N_("?verb:_View"), 0, 0, NULL, MGROUP_SAFE },
280 { "MENU_IMPROVEMENTS", N_("_Improvements"), 0, 0,
281 NULL, MGROUP_SAFE },
282 { "MENU_CIVILIZATION", N_("C_ivilization"), 0, 0,
283 NULL, MGROUP_SAFE },
284 { "MENU_BATTLE_GROUPS", N_("_Battle Groups"), 0, 0,
286 { "MENU_HELP", N_("_Help"), 0, 0, NULL, MGROUP_SAFE },
287 { "CLEAR_CHAT_LOGS", N_("_Clear Chat Log"), 0, 0,
289 { "SAVE_CHAT_LOGS", N_("Save Chat _Log"), 0, 0,
291 { "LOCAL_OPTIONS", N_("_Local Client"), 0, 0,
293 { "MESSAGE_OPTIONS", N_("_Message"), 0, 0,
295 { "SERVER_OPTIONS", N_("_Remote Server"), 0, 0,
297 { "SAVE_OPTIONS", N_("Save Options _Now"), 0, 0,
299 { "RELOAD_TILESET", N_("_Reload Tileset"),
302 { "GAME_SAVE", N_("_Save Game"), GDK_KEY_s, ACCL_MOD_KEY,
304 { "GAME_SAVE_AS", N_("Save Game _As..."), 0, 0,
306 { "MAPIMG_SAVE", N_("Save Map _Image"), 0, 0,
308 { "MAPIMG_SAVE_AS", N_("Save _Map Image As..."), 0, 0,
310 { "VOLUME_UP", N_("Volume Up"), GDK_KEY_greater, 0,
312 { "VOLUME_DOWN", N_("Volume Down"), GDK_KEY_less, 0,
314 { "LEAVE", N_("_Leave"), 0, 0, G_CALLBACK(leave_callback), MGROUP_SAFE },
315 { "QUIT", N_("_Quit"), GDK_KEY_q, ACCL_MOD_KEY,
317 { "FIND_CITY", N_("_Find City"), GDK_KEY_f, ACCL_MOD_KEY,
319 { "WORKLISTS", N_("Work_lists"),
322 { "RALLY_DLG", N_("Rally point dialog"),
325 { "INFRA_DLG", N_("Infra dialog"),
328 { "CLIENT_LUA_SCRIPT", N_("Client _Lua Script"), 0, 0,
330 { "MAP_VIEW", N_("?noun:_View"), GDK_KEY_F1, 0,
332 { "REPORT_UNITS", N_("_Units"), GDK_KEY_F2, 0,
334 { "REPORT_NATIONS", N_("_Nations"), GDK_KEY_F3, 0,
336 { "REPORT_CITIES", N_("_Cities"), GDK_KEY_F4, 0,
338 { "REPORT_WOW", N_("_Wonders of the World"), GDK_KEY_F7, 0,
340 { "REPORT_TOP_CITIES", N_("Top Cities"), GDK_KEY_F8, 0,
342 { "REPORT_MESSAGES", N_("_Messages"), GDK_KEY_F9, 0,
344 { "REPORT_DEMOGRAPHIC", N_("_Demographics"), GDK_KEY_F11, 0,
346
347 /* Battle Groups menu */
348 /* Note that user view: 1 - 4, internal: 0 - 3 */
349 { "BATTLE_GROUP_SELECT_0", N_("Select Battle Group 1"),
352 { "BATTLE_GROUP_ASSIGN_0", N_("Assign Battle Group 1"),
355 { "BATTLE_GROUP_APPEND_0", N_("Append to Battle Group 1"),
358 { "BATTLE_GROUP_SELECT_1", N_("Select Battle Group 2"),
361 { "BATTLE_GROUP_ASSIGN_1", N_("Assign Battle Group 2"),
364 { "BATTLE_GROUP_APPEND_1", N_("Append to Battle Group 2"),
367 { "BATTLE_GROUP_SELECT_2", N_("Select Battle Group 3"),
370 { "BATTLE_GROUP_ASSIGN_2", N_("Assign Battle Group 3"),
373 { "BATTLE_GROUP_APPEND_2", N_("Append to Battle Group 3"),
376 { "BATTLE_GROUP_SELECT_3", N_("Select Battle Group 4"),
379 { "BATTLE_GROUP_ASSIGN_3", N_("Assign Battle Group 4"),
382 { "BATTLE_GROUP_APPEND_3", N_("Append to Battle Group 4"),
385
386 { "HELP_OVERVIEW", N_("?help:Overview"), 0, 0,
388 { "HELP_PLAYING", N_("Strategy and Tactics"), 0, 0,
390 { "HELP_POLICIES", N_("Policies"), 0, 0,
392 { "HELP_TERRAIN", N_("Terrain"), 0, 0,
394 { "HELP_ECONOMY", N_("Economy"), 0, 0,
396 { "HELP_CITIES", N_("Cities"), 0, 0,
398 { "HELP_IMPROVEMENTS", N_("City Improvements"), 0, 0,
400 { "HELP_WONDERS", N_("Wonders of the World"), 0, 0,
402 { "HELP_UNITS", N_("Units"), 0, 0,
404 { "HELP_COMBAT", N_("Combat"), 0, 0,
406 { "HELP_ZOC", N_("Zones of Control"), 0, 0,
408 { "HELP_GOVERNMENT", N_("Government"), 0, 0,
410 { "HELP_DIPLOMACY", N_("Diplomacy"), 0, 0,
412 { "HELP_TECH", N_("Technology"), 0, 0,
414 { "HELP_SPACE_RACE", N_("Space Race"), 0, 0,
416 { "HELP_RULESET", N_("About Current Ruleset"), 0, 0,
418 { "HELP_TILESET", N_("About Current Tileset"), 0, 0,
420 { "HELP_MUSICSET", N_("About Current Musicset"), 0, 0,
422 { "HELP_NATIONS", N_("About Nations"), 0, 0,
424 { "HELP_CONNECTING", N_("Connecting"), 0, 0,
426 { "HELP_CONTROLS", N_("Controls"), 0, 0,
428 { "HELP_CMA", N_("Citizen Governor"), 0, 0,
430 { "HELP_CHATLINE", N_("Chatline"), 0, 0,
432 { "HELP_WORKLIST_EDITOR", N_("Worklist Editor"), 0, 0,
434 { "HELP_LANGUAGES", N_("Languages"), 0, 0,
436 { "HELP_COPYING", N_("Copying"), 0, 0,
438 { "HELP_ABOUT", N_("About Freeciv"), 0, 0,
440 { "SAVE_OPTIONS_ON_EXIT", N_("Save Options on _Exit"), 0, 0,
442 { "EDIT_MODE", N_("_Editing Mode"), GDK_KEY_e, ACCL_MOD_KEY,
444 { "SHOW_CITY_OUTLINES", N_("Cit_y Outlines"), GDK_KEY_y, ACCL_MOD_KEY,
446 { "SHOW_CITY_OUTPUT", N_("City Output"), GDK_KEY_v, ACCL_MOD_KEY,
448 { "SHOW_MAP_GRID", N_("Map _Grid"), GDK_KEY_g, ACCL_MOD_KEY,
450 { "SHOW_NATIONAL_BORDERS", N_("National _Borders"), GDK_KEY_b, ACCL_MOD_KEY,
452 { "SHOW_NATIVE_TILES", N_("Native Tiles"), GDK_KEY_n, ACCL_MOD_KEY | GDK_SHIFT_MASK,
454 { "SHOW_CITY_FULL_BAR", N_("City Full Bar"), 0, 0,
456 { "SHOW_CITY_NAMES", N_("City _Names"), GDK_KEY_n, ACCL_MOD_KEY,
458 { "SHOW_CITY_GROWTH", N_("City G_rowth"), GDK_KEY_o, ACCL_MOD_KEY,
460 { "SHOW_CITY_PRODUCTIONS", N_("City _Production"), GDK_KEY_p, ACCL_MOD_KEY,
462 { "SHOW_CITY_BUY_COST", N_("City Buy Cost"), 0, 0,
464 { "SHOW_CITY_TRADE_ROUTES", N_("City Tra_deroutes"), GDK_KEY_d, ACCL_MOD_KEY,
466 { "SHOW_TERRAIN", N_("_Terrain"), 0, 0,
468 { "SHOW_COASTLINE", N_("C_oastline"), 0, 0,
470 { "SHOW_PATHS", N_("_Paths"), 0, 0,
472 { "SHOW_IRRIGATION", N_("_Irrigation"), 0, 0,
474 { "SHOW_MINES", N_("_Mines"), 0, 0,
476 { "SHOW_BASES", N_("_Bases"), 0, 0,
478 { "SHOW_RESOURCES", N_("_Resources"), 0, 0,
480 { "SHOW_HUTS", N_("_Huts"), 0, 0,
482 { "SHOW_POLLUTION", N_("Po_llution & Fallout"), 0, 0,
484 { "SHOW_CITIES", N_("Citi_es"), 0, 0,
486 { "SHOW_UNITS", N_("_Units"), 0, 0,
488 { "SHOW_UNIT_SOLID_BG", N_("Unit Solid Background"), 0, 0,
490 { "SHOW_UNIT_SHIELDS", N_("Unit shields"), 0, 0,
492 { "SHOW_STACK_SIZE", N_("Unit Stack Size"),
495 { "SHOW_FOCUS_UNIT", N_("Focu_s Unit"), 0, 0,
497 { "SHOW_FOG_OF_WAR", N_("Fog of _War"), 0, 0,
499 { "FULL_SCREEN", N_("_Fullscreen"), GDK_KEY_Return, GDK_MOD1_MASK,
501
502 { "RECALC_BORDERS", N_("Recalculate _Borders"), 0, 0,
504 { "TOGGLE_FOG", N_("Toggle Fog of _War"), GDK_KEY_w,
507 { "SCENARIO_PROPERTIES", N_("Game/Scenario Properties"), 0, 0,
509 { "SAVE_SCENARIO", N_("Save Scenario"), 0, 0,
511
512 { "CENTER_VIEW", N_("_Center View"), GDK_KEY_c, 0,
514 { "ZOOM_IN", N_("_Zoom in"), GDK_KEY_plus, 0,
516 { "ZOOM_OUT", N_("_Zoom out"), GDK_KEY_minus, 0,
518 { "REPORT_ECONOMY", N_("_Economy"), GDK_KEY_F5, 0,
520 { "REPORT_RESEARCH", N_("_Research"), GDK_KEY_F6, 0,
522 { "POLICIES", N_("_Policies..."),
525 { "REPORT_SPACESHIP", N_("_Spaceship"), GDK_KEY_F12, 0,
527 { "REPORT_ACHIEVEMENTS", N_("_Achievements"), GDK_KEY_asterisk, 0,
529
530 { "MENU_SELECT", N_("_Select"), 0, 0, NULL, MGROUP_UNIT },
531 { "MENU_UNIT", N_("_Unit"), 0, 0, NULL, MGROUP_UNIT },
532 { "MENU_WORK", N_("_Work"), 0, 0, NULL, MGROUP_UNIT },
533 { "MENU_COMBAT", N_("_Combat"), 0, 0, NULL, MGROUP_UNIT },
534 { "MENU_BUILD_BASE", N_("Build _Base"), 0, 0, NULL, MGROUP_UNIT },
535 { "MENU_BUILD_PATH", N_("Build _Path"), 0, 0, NULL, MGROUP_UNIT },
536 { "MENU_CLEAN", N_("_Clean Nuisance"), 0, 0, NULL, MGROUP_UNIT },
537 { "SELECT_SINGLE", N_("_Single Unit (Unselect Others)"), GDK_KEY_z, 0,
539 { "SELECT_ALL_ON_TILE", N_("_All On Tile"), GDK_KEY_v, 0,
541 { "SELECT_SAME_TYPE_TILE", N_("Same Type on _Tile"),
544 { "SELECT_SAME_TYPE_CONT", N_("Same Type on _Continent"),
547 { "SELECT_SAME_TYPE", N_("Same Type _Everywhere"), GDK_KEY_x, GDK_SHIFT_MASK,
549 { "SELECT_DLG", N_("Unit Selection Dialog"), 0, 0,
551 { "UNIT_WAIT", N_("_Wait"), GDK_KEY_w, 0,
553 { "UNIT_DONE", N_("_Done"), GDK_KEY_space, 0,
555 { "UNIT_GOTO", N_("_Go to"), GDK_KEY_g, 0,
557 { "MENU_GOTO_AND", N_("Go to a_nd..."), 0, 0, NULL, MGROUP_UNIT },
558 { "UNIT_GOTO_CITY", N_("Go _to/Airlift to City..."), GDK_KEY_t, 0,
560 { "UNIT_RETURN", N_("_Return to Nearest City"), GDK_KEY_g, GDK_SHIFT_MASK,
562 { "UNIT_EXPLORE", N_("Auto E_xplore"), GDK_KEY_x, 0,
564 { "UNIT_PATROL", N_("_Patrol"), GDK_KEY_q, 0,
566 { "UNIT_SENTRY", N_("_Sentry"), GDK_KEY_s, 0,
568 { "UNIT_UNSENTRY", N_("Uns_entry All On Tile"), GDK_KEY_s, GDK_SHIFT_MASK,
570 { "UNIT_BOARD", N_("_Load"), GDK_KEY_l, 0,
572 { "UNIT_DEBOARD", N_("_Unload"), GDK_KEY_u, 0,
574 { "UNIT_UNLOAD_TRANSPORTER", N_("U_nload All From Transporter"),
577 { "UNIT_HOMECITY", N_("Set _Home City"), GDK_KEY_h, 0,
579 { "UNIT_UPGRADE", N_("Upgr_ade"), GDK_KEY_u, GDK_SHIFT_MASK,
581 { "UNIT_CONVERT", N_("C_onvert"), GDK_KEY_o, GDK_SHIFT_MASK,
583 { "UNIT_DISBAND", N_("_Disband"), GDK_KEY_d, GDK_SHIFT_MASK,
585 { "BUILD_CITY", N_("_Build City"), GDK_KEY_b, 0,
587 { "AUTO_WORKER", N_("_Auto Worker"), GDK_KEY_a, 0,
589 { "BUILD_ROAD", N_("Build _Road"), GDK_KEY_r, 0,
591 { "BUILD_IRRIGATION", N_("Build _Irrigation"), GDK_KEY_i, 0,
593 { "CULTIVATE", N_("Cultivate"), GDK_KEY_i, GDK_SHIFT_MASK,
595 { "BUILD_MINE", N_("Build _Mine"), GDK_KEY_m, 0,
597 { "PLANT", N_("Plant"), GDK_KEY_m, GDK_SHIFT_MASK,
599 { "CONNECT_ROAD", N_("Connect With Roa_d"), GDK_KEY_r, ACCL_MOD_KEY,
601 { "CONNECT_RAIL", N_("Connect With Rai_l"), GDK_KEY_l, ACCL_MOD_KEY,
603 { "CONNECT_MAGLEV", N_("Connect With _Maglev"), GDK_KEY_m, ACCL_MOD_KEY,
605 { "CONNECT_IRRIGATION", N_("Connect With Irri_gation"),
608 { "TRANSFORM_TERRAIN", N_("Transf_orm Terrain"), GDK_KEY_o, 0,
610 { "CLEAN", N_("_Clean"), GDK_KEY_p, 0,
612 { "FORTIFY", N_("Fortify"), GDK_KEY_f, 0,
614 { "BUILD_FORTRESS", N_("Build Fortress"), GDK_KEY_f, GDK_SHIFT_MASK,
616 { "BUILD_AIRBASE", N_("Build Airbase"), GDK_KEY_e, GDK_SHIFT_MASK,
618 { "DO_PARADROP", N_("P_aradrop"), GDK_KEY_j, 0,
620 { "DO_PILLAGE", N_("_Pillage"), GDK_KEY_p, GDK_SHIFT_MASK,
622 { "DIPLOMAT_ACTION", N_("_Do..."), GDK_KEY_d, 0,
624
625 { "MENU_GOVERNMENT", N_("_Government"), 0, 0,
627 { "TAX_RATE", N_("_Tax Rates..."), GDK_KEY_t, ACCL_MOD_KEY,
629 { "START_REVOLUTION", N_("_Revolution..."),
632 { NULL }
633};
634
635static struct menu_entry_info *menu_entry_info_find(const char *key);
636
637/************************************************************************/
644
645/************************************************************************/
652
653/************************************************************************/
657{
658 option_dialog_popup(_("Set local options"), client_optset);
659}
660
661/************************************************************************/
668
669/************************************************************************/
673{
674 option_dialog_popup(_("Game Settings"), server_optset);
675}
676
677/************************************************************************/
684
685/************************************************************************/
689{
691}
692
693/************************************************************************/
697{
699}
700
701/************************************************************************/
708
709/************************************************************************/
716
717/************************************************************************/
724
725/************************************************************************/
729static void leave_local_game_response(GtkWidget *dialog, gint response)
730{
731 gtk_widget_destroy(dialog);
732 if (response == GTK_RESPONSE_OK) {
733 /* It might be killed already */
734 if (client.conn.used) {
735 /* It will also kill the server */
737 }
738 }
739}
740
741/************************************************************************/
745{
746 if (is_server_running()) {
747 GtkWidget* dialog =
750 _("Leaving a local game will end it!"));
751 setup_dialog(dialog, toplevel);
753 g_signal_connect(dialog, "response",
756 } else {
758 }
759}
760
761/************************************************************************/
772
773/************************************************************************/
784
785/************************************************************************/
789{
791}
792
793/************************************************************************/
797{
799}
800
801/************************************************************************/
808
809/************************************************************************/
813{
815}
816
817/************************************************************************/
824
825/************************************************************************/
836
837/************************************************************************/
844
845/************************************************************************/
852
853/************************************************************************/
860
861/************************************************************************/
868
869/************************************************************************/
876
877/************************************************************************/
884
885/************************************************************************/
892
893/************************************************************************/
900
901/************************************************************************/
908
909/************************************************************************/
916
917/************************************************************************/
924
925/************************************************************************/
932
933/************************************************************************/
940
941/************************************************************************/
948
949/************************************************************************/
956
957/************************************************************************/
964
965/************************************************************************/
972
973/************************************************************************/
980
981/************************************************************************/
988
989/************************************************************************/
996
997/************************************************************************/
1004
1005/************************************************************************/
1012
1013/************************************************************************/
1020
1021/************************************************************************/
1028
1029/************************************************************************/
1036
1037/************************************************************************/
1044
1045/************************************************************************/
1052
1053/************************************************************************/
1060
1061/************************************************************************/
1068
1069/************************************************************************/
1076
1077/************************************************************************/
1084
1085/************************************************************************/
1092
1093/************************************************************************/
1100
1101/************************************************************************/
1108
1109/************************************************************************/
1116
1117/************************************************************************/
1124
1125/************************************************************************/
1132
1133/************************************************************************/
1140
1141/************************************************************************/
1148
1149/************************************************************************/
1156
1157/************************************************************************/
1164
1165/************************************************************************/
1172
1173/************************************************************************/
1180
1181/************************************************************************/
1188
1189/************************************************************************/
1197
1198/************************************************************************/
1202{
1205 /* Unreachable techs in reqtree on/off */
1207 }
1208}
1209
1210/************************************************************************/
1220
1221/************************************************************************/
1231
1232/************************************************************************/
1242
1243/************************************************************************/
1253
1254/************************************************************************/
1264
1265/************************************************************************/
1276
1277/************************************************************************/
1288
1289/************************************************************************/
1299
1300/************************************************************************/
1311
1312/************************************************************************/
1322
1323/************************************************************************/
1333
1334/************************************************************************/
1344
1345/************************************************************************/
1354
1355/************************************************************************/
1364
1365/************************************************************************/
1374
1375/************************************************************************/
1384
1385/************************************************************************/
1394
1395/************************************************************************/
1404
1405/************************************************************************/
1414
1415/************************************************************************/
1424
1425/************************************************************************/
1434
1435/************************************************************************/
1445
1446/************************************************************************/
1456
1457/************************************************************************/
1467
1468/************************************************************************/
1478
1479/************************************************************************/
1489
1490/************************************************************************/
1500
1501/************************************************************************/
1512
1513/************************************************************************/
1520
1521/************************************************************************/
1530
1531/************************************************************************/
1542
1543/************************************************************************/
1550
1551/************************************************************************/
1558
1559/************************************************************************/
1566
1567/************************************************************************/
1574
1575/************************************************************************/
1582
1583/************************************************************************/
1590
1591/************************************************************************/
1598
1599/************************************************************************/
1603{
1605}
1606
1607/************************************************************************/
1611{
1613}
1614
1615/************************************************************************/
1619{
1620 key_unit_wait();
1621}
1622
1623/************************************************************************/
1627{
1628 key_unit_done();
1629}
1630
1631/************************************************************************/
1635{
1636 key_unit_goto();
1637}
1638
1639/************************************************************************/
1643{
1644 int sub_target = NO_TARGET;
1645 struct action *paction = g_object_get_data(G_OBJECT(item), "end_action");
1646
1648
1650 case ASTK_BUILDING:
1651 {
1653 "end_building");
1655 sub_target = improvement_number(pbuilding);
1656 }
1657 break;
1658 case ASTK_TECH:
1659 {
1661 "end_tech");
1663 sub_target = advance_number(ptech);
1664 }
1665 break;
1666 case ASTK_EXTRA:
1668 {
1669 struct extra_type *pextra = g_object_get_data(G_OBJECT(item),
1670 "end_extra");
1671 fc_assert_ret(pextra != NULL);
1672 sub_target = extra_number(pextra);
1673 }
1674 break;
1675 case ASTK_SPECIALIST:
1676 {
1678 "end_specialist");
1679 fc_assert_ret(nullptr != pspec);
1680 sub_target = specialist_number(pspec);
1681 }
1682 break;
1683 case ASTK_NONE:
1684 sub_target = NO_TARGET;
1685 break;
1686 case ASTK_COUNT:
1687 /* Should not exits */
1689 break;
1690 }
1691
1693}
1694
1695/************************************************************************/
1699{
1700 if (get_num_units_in_focus() > 0) {
1702 }
1703}
1704
1705/************************************************************************/
1714
1715/************************************************************************/
1722
1723/************************************************************************/
1727{
1729}
1730
1731/************************************************************************/
1735{
1737}
1738
1739/************************************************************************/
1746
1747/************************************************************************/
1756
1757/************************************************************************/
1766
1767/************************************************************************/
1775
1776/************************************************************************/
1780{
1782}
1783
1784/************************************************************************/
1791
1792/************************************************************************/
1796{
1798}
1799
1800/************************************************************************/
1807
1808/************************************************************************/
1812{
1814 /* FIXME: this can provide different items for different units...
1815 * not good! */
1816 /* Enable the button for adding to a city in all cases, so we
1817 get an eventual error message from the server if we try. */
1823 }
1825}
1826
1827/************************************************************************/
1831{
1833}
1834
1835/************************************************************************/
1839{
1841 /* FIXME: this can provide different actions for different units...
1842 * not good! */
1844 EC_ROAD,
1846 punit);
1847 bool building_road = FALSE;
1848
1849 if (tgt != NULL
1853 }
1854
1857 }
1859}
1860
1861/************************************************************************/
1868
1869/************************************************************************/
1876
1877/************************************************************************/
1884
1885/************************************************************************/
1892
1893/************************************************************************/
1897{
1899
1900 if (proad != NULL) {
1901 struct extra_type *tgt;
1902
1903 tgt = road_extra_get(proad);
1904
1906 }
1907}
1908
1909/************************************************************************/
1913{
1915
1916 if (prail != NULL) {
1917 struct extra_type *tgt;
1918
1919 tgt = road_extra_get(prail);
1920
1922 }
1923}
1924
1925/************************************************************************/
1929{
1931
1932 if (pmaglev != NULL) {
1933 struct extra_type *tgt;
1934
1935 tgt = road_extra_get(pmaglev);
1936
1938 }
1939}
1940
1941/************************************************************************/
1956
1957/************************************************************************/
1964
1965/************************************************************************/
1972
1973/************************************************************************/
1980
1981/************************************************************************/
1990
1991/************************************************************************/
1998
1999/************************************************************************/
2006
2007/************************************************************************/
2014
2015/************************************************************************/
2022
2023/************************************************************************/
2030
2031/************************************************************************/
2038
2039/************************************************************************/
2046
2047/************************************************************************/
2058
2059/************************************************************************/
2071
2072/************************************************************************/
2086
2087/************************************************************************/
2094
2095/************************************************************************/
2102
2103/************************************************************************/
2110
2111/************************************************************************/
2118
2119/************************************************************************/
2126
2127/************************************************************************/
2134
2135/************************************************************************/
2142
2143/************************************************************************/
2152
2153/************************************************************************/
2157{
2158 const char *key = gtk_buildable_get_name(item);
2160
2161 if (info != NULL) {
2163 Q_(info->name));
2165 if (info->cb != NULL) {
2166 g_signal_connect(item, "activate", info->cb, NULL);
2167 }
2168
2169 if (info->accel != 0) {
2170 const char *path = gtk_menu_item_get_accel_path(GTK_MENU_ITEM(item));
2171
2172 if (path == NULL) {
2173 char buf[512];
2174
2175 fc_snprintf(buf, sizeof(buf), "<MENU>/%s", key);
2177 path = buf; /* Not NULL, but not usable either outside this block */
2178 }
2179
2180 if (path != NULL) {
2182 info->accel, info->accel_mod);
2183 }
2184 }
2185
2186 return;
2187 }
2188
2189 /* temporary naming solution */
2191}
2192
2193/************************************************************************/
2196static const gchar *get_ui_filename(void)
2197{
2198 static char filename[256];
2199 const char *name;
2200
2201 if ((name = getenv("FREECIV_MENUS"))
2202 || (name = fileinfoname(get_data_dirs(), "gtk3.22_menus.xml"))) {
2203 sz_strlcpy(filename, name);
2204 } else {
2205 log_error("Gtk menus: file definition not found");
2206 filename[0] = '\0';
2207 }
2208
2209 log_verbose("ui menu file is \"%s\".", filename);
2210 return filename;
2211}
2212
2213/************************************************************************/
2217{
2219 GError *error = NULL;
2220
2223 log_error("Gtk menus: %s", error->message);
2224 g_error_free(error);
2225 } else {
2226 GSList *entries;
2227 GSList *next;
2228
2230 next = entries;
2231
2232 while (next != NULL) {
2233 GObject *obj = next->data;
2234
2235 if (GTK_IS_MENU_ITEM(obj)) {
2238 }
2239 } else if (GTK_IS_MENU(obj)) {
2241
2242 if (key[0] == '<') {
2244
2245 if (ac_group == NULL) {
2248 }
2249
2251
2253 }
2254 }
2255
2256 next = next->next;
2257 }
2258
2260
2264 }
2265
2266#ifndef FREECIV_DEBUG
2267 menu_entry_set_visible("RELOAD_TILESET", FALSE, FALSE);
2268#endif /* FREECIV_DEBUG */
2269
2270 return menubar;
2271}
2272
2273/************************************************************************/
2276static struct menu_entry_info *menu_entry_info_find(const char *key)
2277{
2278 int i;
2279
2280 for (i = 0; menu_entries[i].key != NULL; i++) {
2281 if (!strcmp(key, menu_entries[i].key)) {
2282 return &(menu_entries[i]);
2283 }
2284 }
2285
2286 return NULL;
2287}
2288
2289/************************************************************************/
2301
2302/************************************************************************/
2314
2315/************************************************************************/
2320{
2321 int i;
2322
2323 for (i = 0; menu_entries[i].key != NULL; i++) {
2324 if (menu_entries[i].grouping == group || group == MGROUP_ALL) {
2326 }
2327 }
2328}
2329
2330/************************************************************************/
2333#ifndef FREECIV_DEBUG
2334static void menu_entry_set_visible(const char *key,
2335 gboolean is_visible,
2337{
2339
2340 if (item != NULL) {
2341 gtk_widget_set_visible(item, is_visible);
2343 }
2344}
2345#endif /* FREECIV_DEBUG */
2346
2347/************************************************************************/
2350static void menus_rename(const char *key,
2351 const gchar *new_label)
2352{
2354
2355 if (item != NULL) {
2357 }
2358}
2359
2360/************************************************************************/
2363static GtkMenu *find_menu(const char *key)
2364{
2366}
2367
2368/************************************************************************/
2372{
2373 /* The "full" city bar (i.e. the new way of drawing the
2374 * city name), can draw the city growth even without drawing
2375 * the city name. But the old method cannot. */
2377 menu_entry_set_sensitive("SHOW_CITY_GROWTH", TRUE);
2378 menu_entry_set_sensitive("SHOW_CITY_TRADE_ROUTES", TRUE);
2379 } else {
2381 menu_entry_set_sensitive("SHOW_CITY_TRADE_ROUTES",
2383 }
2384
2385 menu_entry_set_sensitive("SHOW_CITY_BUY_COST",
2388 menu_entry_set_sensitive("SHOW_UNIT_SOLID_BG",
2390 menu_entry_set_sensitive("SHOW_UNIT_SHIELDS",
2392 menu_entry_set_sensitive("SHOW_STACK_SIZE",
2394 menu_entry_set_sensitive("SHOW_FOCUS_UNIT", !gui_options.draw_units);
2395}
2396
2397/************************************************************************/
2403static const char *get_tile_change_menu_text(struct tile *ptile,
2404 enum unit_activity activity)
2405{
2406 struct tile *newtile = tile_virtual_new(ptile);
2407 const char *text;
2408
2409 tile_apply_activity(newtile, activity, NULL);
2410 text = tile_get_info_text(newtile, FALSE, 0);
2412 return text;
2413}
2414
2415/************************************************************************/
2419{
2420 struct unit_list *punits = NULL;
2422 GtkMenu *menu;
2423 char acttext[128], irrtext[128], mintext[128], transtext[128];
2424 char cultext[128], plantext[128];
2425 struct terrain *pterrain;
2426 bool conn_possible;
2427 struct road_type *proad;
2428 struct extra_type_list *extras;
2429
2430 if (ui_builder == NULL || !can_client_change_view()) {
2431 return;
2432 }
2433
2434 if (get_num_units_in_focus() > 0) {
2435 const struct tile *ptile = NULL;
2436 const struct unit_type *ptype = NULL;
2437
2440 fc_assert((ptile == NULL) == (ptype == NULL));
2441
2442 if (ptile || ptype) {
2443 if (unit_tile(punit) != ptile) {
2445 }
2446 if (unit_type_get(punit) != ptype) {
2448 }
2449 } else {
2450 ptile = unit_tile(punit);
2452 }
2454 }
2455
2458
2461 && !editor_is_active());
2463 && !editor_is_active() && punits != NULL);
2464
2466 menu_entry_set_sensitive("EDIT_MODE",
2471 menu_entry_set_sensitive("INFRA_DLG", terrain_control.infrapoints);
2472
2473 {
2474 char road_buf[500];
2475
2477 if (proad != NULL) {
2478 /* TRANS: Connect with some road type (Road/Railroad) */
2479 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
2481 menus_rename("CONNECT_ROAD", road_buf);
2482 }
2483
2485 if (proad != NULL) {
2486 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
2488 menus_rename("CONNECT_RAIL", road_buf);
2489 }
2490
2492 if (proad != NULL) {
2493 snprintf(road_buf, sizeof(road_buf), _("Connect With %s"),
2495 menus_rename("CONNECT_MAGLEV", road_buf);
2496 }
2497 }
2498
2499 {
2500 char top_cities_buf[128];
2501
2502 if (game.info.top_cities_count > 0) {
2504 PL_("Top %d City", "Top %d Cities",
2507 menus_rename("REPORT_TOP_CITIES", top_cities_buf);
2508 } else {
2509 menus_rename("REPORT_TOP_CITIES", _("Top Cities"));
2510 }
2511
2512 menu_entry_set_sensitive("REPORT_TOP_CITIES", game.info.top_cities_count > 0);
2513 }
2514
2515 menu_entry_set_sensitive("REPORT_SPACESHIP",
2516 client_player() != NULL && client_player()->spaceship.state != SSHIP_NONE);
2517
2518 if (!can_client_issue_orders()) {
2519 return;
2520 }
2521
2522 /* Set government sensitivity. */
2523 if ((menu = find_menu("<MENU>/GOVERNMENT"))) {
2524 GList *list, *iter;
2525 struct government *pgov;
2526
2528 for (iter = list; NULL != iter; iter = g_list_next(iter)) {
2529 pgov = g_object_get_data(G_OBJECT(iter->data), "government");
2530 if (NULL != pgov) {
2533 pgov));
2534 } else {
2535 /* Revolution without target government */
2538 }
2539 }
2541 }
2542
2543 if (!punits) {
2544 return;
2545 }
2546
2547 /* Remaining part of this function: Update Unit, Work, and Combat menus */
2548
2549 /* Set base sensitivity. */
2550 if ((menu = find_menu("<MENU>/BUILD_BASE"))) {
2551 GList *list, *iter;
2552 struct extra_type *pextra;
2553
2555 for (iter = list; NULL != iter; iter = g_list_next(iter)) {
2556 pextra = g_object_get_data(G_OBJECT(iter->data), "base");
2557 if (NULL != pextra) {
2561 pextra));
2562 }
2563 }
2565 }
2566
2567 /* Set road sensitivity. */
2568 if ((menu = find_menu("<MENU>/BUILD_PATH"))) {
2569 GList *list, *iter;
2570 struct extra_type *pextra;
2571
2573 for (iter = list; NULL != iter; iter = g_list_next(iter)) {
2574 pextra = g_object_get_data(G_OBJECT(iter->data), "road");
2575 if (NULL != pextra) {
2579 pextra));
2580 }
2581 }
2583 }
2584
2585 /* Set cleaning menu sensitivity. */
2586 if ((menu = find_menu("<MENU>/CLEAN"))) {
2587 GList *list, *iter;
2588 struct extra_type *pextra;
2589
2591 for (iter = list; NULL != iter; iter = g_list_next(iter)) {
2592 pextra = g_object_get_data(G_OBJECT(iter->data), "nuisance");
2593 if (NULL != pextra) {
2597 pextra));
2598 }
2599 }
2601 }
2602
2603 /* Set Go to and... action visibility. */
2604 if ((menu = find_menu("<MENU>/GOTO_AND"))) {
2605 GList *list, *iter;
2606 struct action *paction;
2607
2608 bool can_do_something = FALSE;
2609
2610 /* Enable a menu item if it is theoretically possible that one of the
2611 * selected units can perform it. Checking if the action can be performed
2612 * at the current tile is pointless since it should be performed at the
2613 * target tile. */
2615 for (iter = list; NULL != iter; iter = g_list_next(iter)) {
2616 paction = g_object_get_data(G_OBJECT(iter->data), "end_action");
2617 if (NULL != paction) {
2619 paction->id, TRUE)) {
2623 } else {
2626 }
2627 }
2628 }
2630
2631 /* Only sensitive if an action may be possible. */
2633 }
2634
2635 /* Enable the button for adding to a city in all cases, so we
2636 * get an eventual error message from the server if we try. */
2637 menu_entry_set_sensitive("BUILD_CITY",
2641 menu_entry_set_sensitive("BUILD_ROAD",
2645 menu_entry_set_sensitive("BUILD_IRRIGATION",
2647 menu_entry_set_sensitive("CULTIVATE",
2649 menu_entry_set_sensitive("BUILD_MINE",
2653 menu_entry_set_sensitive("TRANSFORM_TERRAIN",
2655 menu_entry_set_sensitive("FORTIFY",
2658 menu_entry_set_sensitive("BUILD_FORTRESS",
2660 menu_entry_set_sensitive("BUILD_AIRBASE",
2664 menu_entry_set_sensitive("UNIT_SENTRY",
2666 menu_entry_set_sensitive("DO_PARADROP",
2668 /* FIXME: should conditionally rename "Pillage" to "Pillage..." in cases
2669 * where selecting the command results in a dialog box listing options of
2670 * what to pillage */
2671 menu_entry_set_sensitive("DO_PILLAGE",
2673 menu_entry_set_sensitive("UNIT_DISBAND",
2675 TRUE));
2676 menu_entry_set_sensitive("UNIT_UPGRADE",
2678 /* "UNIT_CONVERT" dealt with below */
2679 menu_entry_set_sensitive("UNIT_HOMECITY",
2681 menu_entry_set_sensitive("UNIT_UNLOAD_TRANSPORTER",
2683 menu_entry_set_sensitive("UNIT_BOARD",
2685 menu_entry_set_sensitive("UNIT_DEBOARD",
2687 menu_entry_set_sensitive("UNIT_UNSENTRY",
2690 menu_entry_set_sensitive("AUTO_WORKER",
2692 menu_entry_set_sensitive("UNIT_EXPLORE",
2694
2696 if (proad != NULL) {
2697 struct extra_type *tgt;
2698
2699 tgt = road_extra_get(proad);
2700
2702 } else {
2704 }
2705 menu_entry_set_sensitive("CONNECT_ROAD", conn_possible);
2706
2708 if (proad != NULL) {
2709 struct extra_type *tgt;
2710
2711 tgt = road_extra_get(proad);
2712
2714 } else {
2716 }
2717 menu_entry_set_sensitive("CONNECT_RAIL", conn_possible);
2718
2720 if (proad != NULL) {
2721 struct extra_type *tgt;
2722
2723 tgt = road_extra_get(proad);
2724
2726 } else {
2728 }
2729 menu_entry_set_sensitive("CONNECT_MAGLEV", conn_possible);
2730
2732
2733 if (extra_type_list_size(extras) > 0) {
2734 struct extra_type *tgt;
2735
2736 tgt = extra_type_list_get(extras, 0);
2738 } else {
2740 }
2741 menu_entry_set_sensitive("CONNECT_IRRIGATION", conn_possible);
2742
2743 menu_entry_set_sensitive("DIPLOMAT_ACTION",
2745
2747 menus_rename("BUILD_CITY",
2749 } else {
2750 bool city_on_tile = FALSE;
2751
2752 /* FIXME: this overloading doesn't work well with multiple focus
2753 * units. */
2755 if (tile_city(unit_tile(punit))) {
2757 break;
2758 }
2760
2762 TRUE)) {
2763 menus_rename("BUILD_CITY",
2765 } else {
2766 /* refresh default order */
2767 menus_rename("BUILD_CITY",
2769 }
2770 }
2771
2773 menus_rename("BUILD_ROAD",
2776 char road_item[500];
2777 struct extra_type *pextra = NULL;
2778
2779 /* FIXME: this overloading doesn't work well with multiple focus
2780 * units. */
2784 if (pextra != NULL) {
2785 break;
2786 }
2788
2789 if (pextra != NULL) {
2790 /* TRANS: Build road of specific type (Road/Railroad/Maglev) */
2791 snprintf(road_item, sizeof(road_item), _("Build %s"),
2792 extra_name_translation(pextra));
2793 menus_rename("BUILD_ROAD", road_item);
2794 }
2795 } else {
2796 menus_rename("BUILD_ROAD", _("Build _Road"));
2797 }
2798
2799 if (units_all_same_type) {
2800 struct unit *punit = unit_list_get(punits, 0);
2801 const struct unit_type *to_unittype =
2803 if (to_unittype) {
2804 /* TRANS: %s is a unit type. */
2805 fc_snprintf(acttext, sizeof(acttext), _("Upgr_ade to %s"),
2808 unit_type_get(punit))));
2809 } else {
2810 acttext[0] = '\0';
2811 }
2812 } else {
2813 acttext[0] = '\0';
2814 }
2815 if ('\0' != acttext[0]) {
2816 menus_rename("UNIT_UPGRADE", acttext);
2817 } else {
2818 menus_rename("UNIT_UPGRADE", _("Upgr_ade"));
2819 }
2820
2821 if (units_can_convert(&(wld.map), punits)) {
2822 menu_entry_set_sensitive("UNIT_CONVERT", TRUE);
2823 if (units_all_same_type) {
2824 struct unit *punit = unit_list_get(punits, 0);
2825
2826 /* TRANS: %s is a unit type. */
2827 fc_snprintf(acttext, sizeof(acttext), _("C_onvert to %s"),
2829 } else {
2830 acttext[0] = '\0';
2831 }
2832 } else {
2833 menu_entry_set_sensitive("UNIT_CONVERT", FALSE);
2834 acttext[0] = '\0';
2835 }
2836 if ('\0' != acttext[0]) {
2837 menus_rename("UNIT_CONVERT", acttext);
2838 } else {
2839 menus_rename("UNIT_CONVERT", _("C_onvert"));
2840 }
2841
2842 if (units_all_same_tile) {
2843 struct unit *first = unit_list_get(punits, 0);
2844
2845 pterrain = tile_terrain(unit_tile(first));
2846
2848 struct extra_type *pextra = NULL;
2849
2850 /* FIXME: this overloading doesn't work well with multiple focus
2851 * units. */
2855 if (pextra != NULL) {
2856 break;
2857 }
2859
2860 if (pextra != NULL) {
2861 /* TRANS: Build irrigation of specific type */
2862 snprintf(irrtext, sizeof(irrtext), _("Build %s"),
2863 extra_name_translation(pextra));
2864 } else {
2865 sz_strlcpy(irrtext, _("Build _Irrigation"));
2866 }
2867 } else {
2868 sz_strlcpy(irrtext, _("Build _Irrigation"));
2869 }
2870
2871 if (pterrain->cultivate_result != T_NONE) {
2872 fc_snprintf(cultext, sizeof(cultext), _("Change to %s"),
2875 } else {
2876 sz_strlcpy(cultext, _("_Cultivate"));
2877 }
2878
2880 struct extra_type *pextra = NULL;
2881
2882 /* FIXME: this overloading doesn't work well with multiple focus
2883 * units. */
2887 if (pextra != NULL) {
2888 break;
2889 }
2891
2892 if (pextra != NULL) {
2893 /* TRANS: Build mine of specific type */
2894 snprintf(mintext, sizeof(mintext), _("Build %s"),
2895 extra_name_translation(pextra));
2896 } else {
2897 sz_strlcpy(mintext, _("Build _Mine"));
2898 }
2899 } else {
2900 sz_strlcpy(mintext, _("Build _Mine"));
2901 }
2902
2903 if (pterrain->plant_result != T_NONE) {
2904 fc_snprintf(plantext, sizeof(plantext), _("Change to %s"),
2906 } else {
2907 sz_strlcpy(plantext, _("_Plant"));
2908 }
2909
2910 if (pterrain->transform_result != T_NONE
2911 && pterrain->transform_result != pterrain) {
2912 fc_snprintf(transtext, sizeof(transtext), _("Transf_orm to %s"),
2915 } else {
2916 sz_strlcpy(transtext, _("Transf_orm Terrain"));
2917 }
2918 } else {
2919 sz_strlcpy(irrtext, _("Build _Irrigation"));
2920 sz_strlcpy(cultext, _("_Cultivate"));
2921 sz_strlcpy(mintext, _("Build _Mine"));
2922 sz_strlcpy(plantext, _("_Plant"));
2923 sz_strlcpy(transtext, _("Transf_orm Terrain"));
2924 }
2925
2926 menus_rename("BUILD_IRRIGATION", irrtext);
2927 menus_rename("CULTIVATE", cultext);
2928 menus_rename("BUILD_MINE", mintext);
2929 menus_rename("PLANT", plantext);
2930 menus_rename("TRANSFORM_TERRAIN", transtext);
2931
2932 menus_rename("UNIT_HOMECITY",
2934}
2935
2936/************************************************************************/
2940 const guint accel_key,
2942{
2943 const char *path = gtk_menu_item_get_accel_path(GTK_MENU_ITEM(item));
2944
2945 if (path == NULL) {
2946 char buf[MAX_LEN_NAME + sizeof("<MENU>/GOTO_AND/")];
2947
2948 fc_snprintf(buf, sizeof(buf), "<MENU>/GOTO_AND/%s",
2949 action_id_rule_name(act_id));
2951 path = buf; /* Not NULL, but not usable either outside this block */
2952 }
2953
2954 if (path != NULL) {
2957 }
2958}
2959
2960/************************************************************************/
2978
2979/************************************************************************/
2984{
2985 GtkMenu *menu;
2986
2987 if (ui_builder == NULL) {
2988 return;
2989 }
2990
2991 menu_entry_set_sensitive("GAME_SAVE_AS",
2993 && C_S_RUNNING <= client_state());
2994 menu_entry_set_sensitive("GAME_SAVE",
2996 && C_S_RUNNING <= client_state());
2997
2998 menu_entry_set_active("SAVE_OPTIONS_ON_EXIT",
3001
3004
3005 if (!can_client_change_view()) {
3007
3008 return;
3009 }
3010
3011 menus_rename("BUILD_FORTRESS", Q_(terrain_control.gui_type_base0));
3012 menus_rename("BUILD_AIRBASE", Q_(terrain_control.gui_type_base1));
3013
3014 if ((menu = find_menu("<MENU>/GOVERNMENT"))) {
3015 GList *list, *iter;
3016 GtkWidget *item;
3017 char buf[256];
3018
3019 /* Remove previous government entries. */
3021 for (iter = list; NULL != iter; iter = g_list_next(iter)) {
3022 if (g_object_get_data(G_OBJECT(iter->data), "government") != NULL
3023 || GTK_IS_SEPARATOR_MENU_ITEM(iter->data)) {
3025 }
3026 }
3028
3029 /* Add new government entries. */
3033
3036 /* TRANS: %s is a government name */
3037 fc_snprintf(buf, sizeof(buf), _("%s..."),
3040 g_object_set_data(G_OBJECT(item), "government", g);
3041 g_signal_connect(item, "activate",
3045 }
3047 }
3048
3049 if ((menu = find_menu("<MENU>/BUILD_BASE"))) {
3050 GList *list, *iter;
3051 GtkWidget *item;
3052
3053 /* Remove previous base entries. */
3055 for (iter = list; NULL != iter; iter = g_list_next(iter)) {
3057 }
3059
3060 /* Add new base entries. */
3062 if (pextra->buildable) {
3064 g_object_set_data(G_OBJECT(item), "base", pextra);
3065 g_signal_connect(item, "activate", G_CALLBACK(base_callback), pextra);
3068 }
3070 }
3071
3072 if ((menu = find_menu("<MENU>/BUILD_PATH"))) {
3073 GList *list, *iter;
3074 GtkWidget *item;
3075
3076 /* Remove previous road entries. */
3078 for (iter = list; NULL != iter; iter = g_list_next(iter)) {
3080 }
3082
3083 /* Add new road entries. */
3085 if (pextra->buildable) {
3087 g_object_set_data(G_OBJECT(item), "road", pextra);
3088 g_signal_connect(item, "activate", G_CALLBACK(road_callback), pextra);
3091 }
3093 }
3094
3095 if ((menu = find_menu("<MENU>/CLEAN"))) {
3096 GList *list, *iter;
3097 GtkWidget *item;
3098
3099 /* Remove previous cleaning entries. */
3101 for (iter = list; NULL != iter; iter = g_list_next(iter)) {
3103 }
3105
3106 /* Add new cleaning entries. */
3109 g_object_set_data(G_OBJECT(item), "nuisance", pextra);
3110 g_signal_connect(item, "activate", G_CALLBACK(clean_callback), pextra);
3114 }
3115
3116 /* Initialize the Go to and... actions. */
3117 if ((menu = find_menu("<MENU>/GOTO_AND"))) {
3118 GtkWidget *item;
3119 int tgt_kind_group;
3120
3121 /* Remove previous action entries. */
3123
3124 /* Add the new action entries grouped by target kind. */
3127 struct action *paction = action_by_number(act_id);
3128
3129 if (action_id_get_actor_kind(act_id) != AAK_UNIT) {
3130 /* This action isn't performed by a unit. */
3131 continue;
3132 }
3133
3135 /* Wrong group. */
3136 continue;
3137 }
3138
3139 /* Create and add the menu item. It will be hidden or shown based on
3140 * unit type. */
3142 action_get_ui_name_mnemonic(act_id, "_"));
3143 g_object_set_data(G_OBJECT(item), "end_action", paction);
3144
3145 if (action_id_has_complex_target(act_id)) {
3147
3148#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_) \
3149 GtkWidget *sub_item = gtk_menu_item_new_with_label(_sub_target_name_); \
3150 g_object_set_data(G_OBJECT(sub_item), "end_action", paction); \
3151 g_object_set_data(G_OBJECT(sub_item), _sub_target_key_, _sub_target_); \
3152 g_signal_connect(sub_item, "activate", \
3153 G_CALLBACK(unit_goto_and_callback), paction); \
3154 gtk_menu_shell_append(GTK_MENU_SHELL(sub_target_menu), sub_item); \
3155 gtk_widget_show(sub_item);
3156
3158 case ASTK_BUILDING:
3160 CREATE_SUB_ITEM(pimpr, "end_building",
3163 break;
3164 case ASTK_TECH:
3166 CREATE_SUB_ITEM(ptech, "end_tech",
3169 break;
3170 case ASTK_EXTRA:
3172 extra_type_iterate(pextra) {
3173 if (!actres_creates_extra(paction->result, pextra)
3174 && !actres_removes_extra(paction->result, pextra)) {
3175 /* Not relevant */
3176 continue;
3177 }
3178 CREATE_SUB_ITEM(pextra, "end_extra",
3179 extra_name_translation(pextra));
3181 break;
3182 case ASTK_SPECIALIST:
3185
3186 CREATE_SUB_ITEM(pspec, "end_specialist",
3189 break;
3190 case ASTK_NONE:
3191 /* Should not be here. */
3193 break;
3194 case ASTK_COUNT:
3195 /* Should not exits */
3197 break;
3198 }
3199
3200#undef CREATE_SUB_ITEM
3201
3203 } else {
3204 g_signal_connect(item, "activate",
3206
3207#define ADD_OLD_ACCELERATOR(wanted_action_id, accel_key, accel_mods) \
3208 if (act_id == wanted_action_id) { \
3209 menu_unit_goto_and_add_accel(item, act_id, accel_key, accel_mods); \
3210 }
3211
3212 /* Add the keyboard shortcuts for "Go to and..." menu items that
3213 * existed independently before the "Go to and..." menu arrived.
3214 */
3218 }
3219
3223 }
3224 }
3225
3228
3229 menu_entry_set_sensitive("TAX_RATE",
3232 menu_entry_set_sensitive("POLICIES",
3233 multiplier_count() > 0);
3234
3235 menu_entry_set_active("SHOW_CITY_OUTLINES",
3237 menu_entry_set_active("SHOW_CITY_OUTPUT",
3239 menu_entry_set_active("SHOW_MAP_GRID",
3241 menu_entry_set_active("SHOW_NATIONAL_BORDERS",
3243 menu_entry_set_sensitive("SHOW_NATIONAL_BORDERS",
3245 menu_entry_set_active("SHOW_NATIVE_TILES",
3247 menu_entry_set_active("SHOW_CITY_FULL_BAR",
3249 menu_entry_set_active("SHOW_CITY_NAMES",
3251 menu_entry_set_active("SHOW_CITY_GROWTH",
3253 menu_entry_set_active("SHOW_CITY_PRODUCTIONS",
3255 menu_entry_set_active("SHOW_CITY_BUY_COST",
3257 menu_entry_set_active("SHOW_CITY_TRADE_ROUTES",
3259 menu_entry_set_active("SHOW_TERRAIN",
3261 menu_entry_set_active("SHOW_COASTLINE",
3263 menu_entry_set_active("SHOW_PATHS",
3265 menu_entry_set_active("SHOW_IRRIGATION",
3267 menu_entry_set_active("SHOW_MINES",
3269 menu_entry_set_active("SHOW_BASES",
3271 menu_entry_set_active("SHOW_RESOURCES",
3273 menu_entry_set_active("SHOW_HUTS",
3275 menu_entry_set_active("SHOW_POLLUTION",
3277 menu_entry_set_active("SHOW_CITIES",
3279 menu_entry_set_active("SHOW_UNITS",
3281 menu_entry_set_active("SHOW_UNIT_SOLID_BG",
3283 menu_entry_set_active("SHOW_UNIT_SHIELDS",
3285 menu_entry_set_active("SHOW_STACK_SIZE",
3287 menu_entry_set_active("SHOW_FOCUS_UNIT",
3289 menu_entry_set_active("SHOW_FOG_OF_WAR",
3291
3293
3295}
3296
3297/**************************************************************************
3298 Free resources allocated by the menu system.
3299**************************************************************************/
3300void menus_free(void)
3301{
3302 if (ui_builder != NULL) {
3304 ui_builder = NULL;
3305 }
3306}
const char * action_id_rule_name(action_id act_id)
Definition actions.c:1260
enum action_sub_target_kind action_get_sub_target_kind(const struct action *paction)
Definition actions.c:1140
const char * action_get_ui_name_mnemonic(action_id act_id, const char *mnemonic)
Definition actions.c:1279
#define action_noninternal_iterate_end
Definition actions.h:240
static struct action * action_by_number(action_id act_id)
Definition actions.h:400
#define action_id_get_actor_kind(act_id)
Definition actions.h:413
#define ACTION_ANY
Definition actions.h:56
#define action_noninternal_iterate(_act_)
Definition actions.h:235
#define action_id_get_target_kind(act_id)
Definition actions.h:417
#define action_id_has_complex_target(act_id)
Definition actions.h:435
bool actres_removes_extra(enum action_result result, const struct extra_type *pextra)
Definition actres.c:811
bool actres_creates_extra(enum action_result result, const struct extra_type *pextra)
Definition actres.c:790
struct @130::my_agent entries[MAX_AGENTS]
bool audio_is_dummy_plugin(void)
Definition audio.c:717
struct civclient client
enum client_states client_state(void)
void send_report_request(enum report_type type)
bool can_client_issue_orders(void)
bool client_has_player(void)
bool can_client_change_view(void)
#define client_player()
@ C_S_RUNNING
Definition client_main.h:47
bool can_units_do_connect(struct unit_list *punits, enum unit_activity activity, struct extra_type *tgt)
Definition climisc.c:1247
static struct fc_sockaddr_list * list
Definition clinet.c:102
void disconnect_from_server(bool leaving_sound)
Definition clinet.c:306
char * incite_cost
Definition comments.c:77
@ REPORT_WONDERS_OF_THE_WORLD
Definition conn_types.h:50
@ REPORT_DEMOGRAPHIC
Definition conn_types.h:53
@ REPORT_WONDERS_OF_THE_WORLD_LONG
Definition conn_types.h:51
@ REPORT_ACHIEVEMENTS
Definition conn_types.h:54
@ REPORT_TOP_CITIES
Definition conn_types.h:52
void send_save_game(const char *filename)
bool is_server_running(void)
bool can_client_access_hack(void)
bool can_conn_enable_editing(const struct connection *pconn)
Definition connection.c:523
void key_coastline_toggle(void)
Definition control.c:3964
void key_irrigation_toggle(void)
Definition control.c:3980
void key_unit_sentry(void)
Definition control.c:3768
void key_city_output_toggle(void)
Definition control.c:3865
void request_unit_return(struct unit *punit)
Definition control.c:1564
void request_unit_fortify(struct unit *punit)
Definition control.c:2365
void key_editor_recalculate_borders(void)
Definition control.c:4084
void request_unit_caravan_action(struct unit *punit, action_id action)
Definition control.c:2235
void key_focus_unit_toggle(void)
Definition control.c:4060
void key_unit_auto_explore(void)
Definition control.c:3589
void key_unit_connect(enum unit_activity activity, struct extra_type *tgt)
Definition control.c:3387
void key_city_full_bar_toggle(void)
Definition control.c:3897
void key_bases_toggle(void)
Definition control.c:3996
void key_map_native_toggle(void)
Definition control.c:3889
void key_resources_toggle(void)
Definition control.c:4004
void request_unit_goto(enum unit_orders last_order, action_id act_id, int sub_tgt_id)
Definition control.c:1142
void key_unit_paradrop(void)
Definition control.c:3491
struct unit_list * get_units_in_focus(void)
Definition control.c:177
void key_unit_shields_toggle(void)
Definition control.c:4052
void key_city_productions_toggle(void)
Definition control.c:3931
void key_unit_plant(void)
Definition control.c:3708
void key_unit_fortress(void)
Definition control.c:3636
void key_unit_mine(void)
Definition control.c:3700
void key_unit_pillage(void)
Definition control.c:3720
void request_unit_unload(struct unit *pcargo)
Definition control.c:2206
void key_editor_toggle_fogofwar(void)
Definition control.c:4093
void request_new_unit_activity_targeted(struct unit *punit, enum unit_activity act, struct extra_type *tgt)
Definition control.c:1950
void key_unit_irrigate(void)
Definition control.c:3680
void request_unit_build_city(struct unit *punit)
Definition control.c:1829
void key_unit_unload_all(void)
Definition control.c:3529
void key_cities_toggle(void)
Definition control.c:4028
void key_city_outlines_toggle(void)
Definition control.c:3857
void key_unit_homecity(void)
Definition control.c:3653
void key_unit_patrol(void)
Definition control.c:3499
void key_unit_solid_bg_toggle(void)
Definition control.c:4044
void key_terrain_toggle(void)
Definition control.c:3956
void key_paths_toggle(void)
Definition control.c:3972
void key_unit_wakeup_others(void)
Definition control.c:3562
void key_unit_stack_size_toggle(void)
Definition control.c:3948
void key_huts_toggle(void)
Definition control.c:4012
void key_fog_of_war_toggle(void)
Definition control.c:4068
void key_unit_wait(void)
Definition control.c:3554
void key_units_toggle(void)
Definition control.c:4036
void key_unit_select_battlegroup(int battlegroup, bool append)
Definition control.c:3831
void key_map_grid_toggle(void)
Definition control.c:3873
void key_pollution_toggle(void)
Definition control.c:4020
void key_city_growth_toggle(void)
Definition control.c:3914
void key_unit_action_select_tgt(void)
Definition control.c:3418
void key_city_buycost_toggle(void)
Definition control.c:3923
int get_num_units_in_focus(void)
Definition control.c:185
void key_unit_transform(void)
Definition control.c:3780
void key_unit_done(void)
Definition control.c:3475
void key_city_trade_routes_toggle(void)
Definition control.c:3940
void key_city_names_toggle(void)
Definition control.c:3905
void request_unit_select(struct unit_list *punits, enum unit_select_type_mode seltype, enum unit_select_location_mode selloc)
Definition control.c:1633
void key_unit_auto_work(void)
Definition control.c:3602
void key_unit_airbase(void)
Definition control.c:3572
void key_unit_goto(void)
Definition control.c:3483
void key_unit_convert(void)
Definition control.c:3614
void key_unit_clean(void)
Definition control.c:3732
void key_editor_toggle(void)
Definition control.c:4076
void key_unit_assign_battlegroup(int battlegroup, bool append)
Definition control.c:3792
void key_unit_cultivate(void)
Definition control.c:3688
void key_mines_toggle(void)
Definition control.c:3988
void key_map_borders_toggle(void)
Definition control.c:3881
#define can_unit_do_activity_targeted_client(_punit_, _act_, _tgt_)
Definition control.h:43
#define can_units_do_activity_targeted_client(_punits_, _act_, _tgt_)
Definition control.h:47
#define can_units_do_activity_client(_punits_, _act_)
Definition control.h:45
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit * punit
Definition dialogs_g.h:74
bool editor_is_active(void)
Definition editor.c:346
@ OBJTYPE_GAME
Definition editor.h:31
struct extra_type * next_extra_for_tile(const struct tile *ptile, enum extra_cause cause, const struct player *pplayer, const struct unit *punit)
Definition extras.c:779
int extra_number(const struct extra_type *pextra)
Definition extras.c:161
struct extra_type_list * extra_type_list_by_cause(enum extra_cause cause)
Definition extras.c:249
static struct extra_type extras[MAX_EXTRA_TYPES]
Definition extras.c:31
const char * extra_name_translation(const struct extra_type *pextra)
Definition extras.c:194
#define extra_type_iterate(_p)
Definition extras.h:315
#define extra_type_iterate_end
Definition extras.h:321
#define extra_type_by_rmcause_iterate_end
Definition extras.h:358
#define extra_type_by_rmcause_iterate(_rmcause, _extra)
Definition extras.h:353
#define extra_type_by_cause_iterate_end
Definition extras.h:339
#define extra_type_by_cause_iterate(_cause, _extra)
Definition extras.h:333
#define NO_TARGET
Definition fc_types.h:215
int action_id
Definition fc_types.h:250
#define MAX_LEN_NAME
Definition fc_types.h:68
@ BORDERS_DISABLED
Definition fc_types.h:732
#define Q_(String)
Definition fcintl.h:70
#define PL_(String1, String2, n)
Definition fcintl.h:71
#define _(String)
Definition fcintl.h:67
#define N_(String)
Definition fcintl.h:69
struct civ_game game
Definition game.c:62
struct world wld
Definition game.c:63
const char * government_name_translation(const struct government *pgovern)
Definition government.c:151
bool untargeted_revolution_allowed(void)
Definition government.c:580
bool can_change_to_government(struct player *pplayer, const struct government *gov)
Definition government.c:178
#define governments_iterate(NAME_pgov)
Definition government.h:127
#define governments_iterate_end
Definition government.h:130
void log_output_window(void)
Definition chatline.c:929
void clear_output_window(void)
Definition chatline.c:944
void city_report_dialog_popup(bool raise)
Definition cityrep.c:292
void unit_select_dialog_popup(struct tile *ptile)
Definition dialogs.c:377
void popup_upgrade_dialog(struct unit_list *punits)
Definition dialogs.c:1435
void popup_disband_dialog(struct unit_list *punits)
Definition dialogs.c:1473
void editgui_refresh(void)
Definition editgui.c:1798
void property_editor_popup(struct property_editor *pe, enum editor_object_type objtype)
Definition editprop.c:6292
struct property_editor * editprop_get_property_editor(void)
Definition editprop.c:6245
void property_editor_reload(struct property_editor *pe, enum editor_object_type objtype)
Definition editprop.c:6382
void popup_find_dialog(void)
Definition finddlg.c:58
void popup_multiplier_dialog(void)
Definition gamedlgs.c:383
void popup_rates_dialog(void)
Definition gamedlgs.c:533
void popup_goto_dialog(void)
Definition gotodlg.c:258
void fullscreen_opt_refresh(struct option *poption)
Definition gui_main.c:2431
gboolean map_canvas_focus(void)
Definition gui_main.c:360
GtkWidget * toplevel
Definition gui_main.c:126
void popup_quit_dialog(void)
Definition gui_main.c:2347
#define ACCL_MOD_KEY
Definition gui_main.h:26
#define GUI_GTK_OPTION(optname)
Definition gui_main.h:32
void setup_dialog(GtkWidget *shell, GtkWidget *parent)
Definition gui_stuff.c:287
void popup_help_dialog_string(const char *item)
Definition helpdlg.c:212
void infra_dialog_popup(void)
Definition infradlg.c:85
void luaconsole_dialog_popup(bool raise)
Definition luaconsole.c:126
void center_on_unit(void)
Definition mapctrl.c:496
static void save_mapimg_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:712
static void show_national_borders_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1246
static void show_focus_unit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1482
GtkWidget * setup_menus(GtkWidget *window)
Definition menu.c:2216
static void help_connecting_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:896
static void menus_rename(const char *key, const gchar *new_label)
Definition menu.c:2350
static void help_combat_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1104
static void menu_entry_group_set_sensitive(enum menu_entry_grouping group, gboolean is_sensitive)
Definition menu.c:2318
static void help_ruleset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1048
static void select_single_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1554
static void unit_unload_transporter_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1770
static void bg_assign1_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:968
static void bg_append3_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1024
static void help_government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1144
static void report_achievements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:872
static void show_fog_of_war_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1493
static void help_zoc_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1112
static void show_city_productions_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1303
static void do_pillage_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2010
static void toggle_fog_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1524
static void bg_select0_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:936
static void menu_remove_previous_entries(GtkMenu *menu)
Definition menu.c:2963
static void client_lua_script_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:856
static void bg_select2_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:984
static void show_city_names_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1280
static void help_space_race_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1160
static void help_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1056
static void help_playing_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1040
static void plant_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1888
static struct menu_entry_info menu_entries[]
Definition menu.c:274
static void base_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2050
static void help_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1072
static void clean_nuisance_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1968
static void unit_sentry_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1734
static void center_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2090
static void unit_explore_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1718
static void build_mine_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1880
static void quit_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:788
static void unit_return_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1708
static GtkBuilder * ui_builder
Definition menu.c:80
static void show_city_trade_routes_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1326
static void transform_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1960
static void help_wonders_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1136
static GtkMenu * find_menu(const char *key)
Definition menu.c:2363
static void show_terrain_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1337
static void show_city_growth_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1292
static void show_stack_size_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1471
static const gchar * get_ui_filename(void)
Definition menu.c:2196
static void multiplier_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2034
static void help_terrain_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1128
static void zoom_out_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2106
static void save_game_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:696
static void show_unit_solid_bg_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1449
static void show_coastline_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1348
static void show_city_full_bar_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1268
static void edit_mode_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1201
static void help_chatline_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:912
static void show_paths_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1358
void menus_free(void)
Definition menu.c:3300
static void connect_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1896
static void bg_append2_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1000
static void help_overview_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1032
static void save_game_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:704
static void help_diplomacy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1152
static void show_units_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1438
static void show_irrigation_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1368
static void show_map_grid_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1235
static void help_improvements_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1088
static void bg_append1_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:976
static void recalc_borders_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1516
static void find_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:796
static void report_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:820
static void report_demographic_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:864
static void help_worklist_editor_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:920
static void help_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1080
static void leave_local_game_response(GtkWidget *dialog, gint response)
Definition menu.c:729
static void help_language_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:880
static void show_mine_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1378
static void server_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:672
static void bg_append0_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:952
static void leave_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:744
static void select_same_type_cont_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1578
static void unit_convert_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1795
static void select_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1594
static void show_huts_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1408
static void report_wow_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:828
static void menu_entry_set_active(const char *key, gboolean is_active)
Definition menu.c:2292
static void unit_upgrade_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1787
static void menu_unit_goto_and_add_accel(GtkWidget *item, action_id act_id, const guint accel_key, const GdkModifierType accel_mods)
Definition menu.c:2939
static void help_tech_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1120
static void unit_goto_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1634
static void clean_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2075
static void build_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1811
static void bg_select3_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1008
static void unit_patrol_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1726
void real_menus_init(void)
Definition menu.c:2983
menu_entry_grouping
Definition menu.c:94
@ MGROUP_ALL
Definition menu.c:95
@ MGROUP_PLAYING
Definition menu.c:94
@ MGROUP_PLAYER
Definition menu.c:95
@ MGROUP_SAFE
Definition menu.c:94
@ MGROUP_EDIT
Definition menu.c:94
@ MGROUP_UNIT
Definition menu.c:95
static void rally_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1602
static void help_about_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1184
static void bg_assign0_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:944
static void build_road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1838
static void local_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:656
static void show_cities_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1428
static void unit_homecity_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1779
static void menu_entry_set_sensitive(const char *key, gboolean is_sensitive)
Definition menu.c:2305
static void show_pollution_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1418
static void save_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:680
static void save_mapimg_as_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:720
static void worklists_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:804
static void connect_maglev_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1928
static void full_screen_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1504
static void report_top_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:840
static void help_controls_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:904
static void select_same_type_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1586
static void connect_rail_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1912
static void unit_wait_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1618
static const char * get_tile_change_menu_text(struct tile *ptile, enum unit_activity activity)
Definition menu.c:2403
static void build_airbase_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1994
static void report_cities_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2122
static void help_cma_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:928
static void infra_dialog_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1610
static void message_options_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:664
static void tax_rate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2026
static void help_musicset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1064
static void unit_goto_city_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1698
static struct menu_entry_info * menu_entry_info_find(const char *key)
Definition menu.c:2276
static void bg_select1_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:960
static void auto_work_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1830
static void government_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2042
static void report_economy_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2130
static void report_messages_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:848
static void do_paradrop_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2002
static void show_bases_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1388
static void select_same_type_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1570
static void unit_unsentry_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1742
static void save_options_on_exit_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1192
static void volume_up_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:764
static void show_native_tiles_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1257
static void menu_entry_init(GtkBuildable *item)
Definition menu.c:2156
static void show_unit_shields_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1460
static void reload_tileset_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:688
static void scenario_properties_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1534
static void clear_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:640
static void unit_deboard_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1760
static void help_policies_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:888
static void unit_done_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1626
static void help_nations_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1168
static void zoom_in_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2098
static void unit_goto_and_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1642
static void show_city_output_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1224
static void show_city_outlines_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1213
static void save_scenario_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1546
#define ADD_OLD_ACCELERATOR(wanted_action_id, accel_key, accel_mods)
static void help_copying_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1176
static void cultivate_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1872
static void save_chat_logs_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:648
void real_menus_update(void)
Definition menu.c:2418
static void report_spaceship_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2146
static void select_all_on_tile_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1562
static void show_city_buy_cost_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1315
static void build_fortress_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1976
#define CREATE_SUB_ITEM(_sub_target_, _sub_target_key_, _sub_target_name_)
static void view_menu_update_sensitivity(void)
Definition menu.c:2371
static void unit_board_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1750
static void menu_entry_set_visible(const char *key, gboolean is_visible, gboolean is_sensitive)
Definition menu.c:2334
static void fortify_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1984
static void bg_assign3_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1016
static void show_resources_callback(GtkCheckMenuItem *item, gpointer data)
Definition menu.c:1398
static void connect_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1944
static void build_irrigation_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1864
static void bg_assign2_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:992
static void report_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2114
static void road_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2062
static void unit_disband_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1803
static void help_units_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:1096
static void report_research_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2138
static void diplomat_action_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:2018
static void map_view_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:812
static void volume_down_callback(GtkMenuItem *item, gpointer data)
Definition menu.c:776
void popup_messageopt_dialog(void)
Definition messagedlg.c:51
void meswin_dialog_popup(bool raise)
Definition messagewin.c:417
void option_dialog_popup(const char *name, const struct option_set *poptset)
Definition optiondlg.c:984
void save_mapimg_dialog_popup(void)
Definition pages.c:3551
void mapimg_client_save(const char *filename)
Definition pages.c:3570
void save_game_dialog_popup(void)
Definition pages.c:3487
void save_scenario_dialog_popup(void)
Definition pages.c:3522
void popup_players_dialog(bool raise)
Definition plrdlg.c:91
void rally_dialog_popup(void)
void science_report_dialog_popup(bool raise)
Definition repodlgs.c:716
void economy_report_dialog_popup(bool raise)
Definition repodlgs.c:1243
void units_report_dialog_popup(bool raise)
Definition repodlgs.c:1768
void science_report_dialog_popdown(void)
Definition repodlgs.c:740
void popup_spaceship_dialog(struct player *pplayer)
bool request_transport(struct unit *cargo, struct tile *ptile)
void popup_worklists_report(void)
Definition wldlg.c:287
menu_entry_grouping
Definition menu.c:83
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 log_verbose(message,...)
Definition log.h:110
#define fc_assert(condition)
Definition log.h:177
#define log_error(message,...)
Definition log.h:104
struct terrain_misc terrain_control
Definition map.c:68
Multiplier_type_id multiplier_count(void)
Definition multipliers.c:88
void option_changed(struct option *poption)
Definition options.c:799
const struct option_set * server_optset
Definition options.c:4369
const struct option_set * client_optset
Definition options.c:1331
void options_save(option_save_log_callback log_cb)
Definition options.c:6472
struct client_options gui_options
Definition options.c:71
struct option * optset_option_by_name(const struct option_set *poptset, const char *name)
Definition options.c:482
@ GUI_GTK_MSGCHAT_MERGED
Definition options.h:69
struct extra_type * road_extra_get(const struct road_type *proad)
Definition road.c:42
struct road_type * road_by_gui_type(enum road_gui_type gui_type)
Definition road.c:180
static char * grouping
Definition shared.c:98
const char * fileinfoname(const struct strvec *dirs, const char *filename)
Definition shared.c:1094
const struct strvec * get_data_dirs(void)
Definition shared.c:886
#define CLIP(lower, current, upper)
Definition shared.h:57
@ SSHIP_NONE
Definition spaceship.h:84
struct specialist * specialist_by_number(const Specialist_type_id id)
Definition specialist.c:110
Specialist_type_id specialist_number(const struct specialist *sp)
Definition specialist.c:100
const char * specialist_plural_translation(const struct specialist *sp)
Definition specialist.c:166
#define specialist_type_iterate_end
Definition specialist.h:85
#define specialist_type_iterate(sp)
Definition specialist.h:79
struct civ_game::@32::@35 client
bool fog_of_war
Definition game.h:121
struct packet_game_info info
Definition game.h:89
struct government * government_during_revolution
Definition game.h:94
struct connection conn
Definition client_main.h:96
bool draw_native
Definition options.h:216
bool draw_specials
Definition options.h:208
bool draw_city_output
Definition options.h:195
bool draw_city_names
Definition options.h:197
bool draw_city_productions
Definition options.h:199
bool draw_mines
Definition options.h:206
bool draw_borders
Definition options.h:215
bool draw_fortress_airbase
Definition options.h:207
bool draw_city_buycost
Definition options.h:200
bool draw_unit_stack_size
Definition options.h:219
bool draw_irrigation
Definition options.h:205
bool draw_terrain
Definition options.h:202
bool draw_units
Definition options.h:212
bool draw_fog_of_war
Definition options.h:214
bool draw_city_trade_routes
Definition options.h:201
bool draw_unit_shields
Definition options.h:218
bool draw_cities
Definition options.h:211
bool save_options_on_exit
Definition options.h:125
int sound_effects_volume
Definition options.h:191
bool draw_map_grid
Definition options.h:196
bool draw_city_growth
Definition options.h:198
bool draw_focus_unit
Definition options.h:213
bool draw_paths
Definition options.h:204
bool draw_city_outlines
Definition options.h:194
bool draw_coastline
Definition options.h:203
bool draw_full_citybar
Definition options.h:217
bool draw_pollution
Definition options.h:210
bool solid_color_behind_units
Definition options.h:150
bool established
Definition connection.h:140
struct player * playing
Definition connection.h:151
struct extra_type::@26 data
Definition climisc.h:82
Definition menu.c:100
GdkModifierType accel_mod
Definition menu.c:104
guint accel
Definition menu.c:103
const char * key
Definition menu.c:101
enum menu_entry_grouping grouping
Definition menu.c:106
GCallback cb
Definition menu.c:105
const char * name
Definition menu.c:102
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:305
Tech_type_id advance_number(const struct advance *padvance)
Definition tech.c:100
#define advance_iterate(_p)
Definition tech.h:273
#define advance_iterate_end
Definition tech.h:274
#define T_NONE
Definition terrain.h:61
void tile_virtual_destroy(struct tile *vtile)
Definition tile.c:1036
bool tile_apply_activity(struct tile *ptile, Activity_type_id act, struct extra_type *tgt)
Definition tile.c:682
struct tile * tile_virtual_new(const struct tile *ptile)
Definition tile.c:982
const char * tile_get_info_text(const struct tile *ptile, bool include_nuisances, int linebreaks)
Definition tile.c:772
struct city * tile_city(const struct tile *ptile)
Definition tile.c:83
#define tile_terrain(_tile)
Definition tile.h:115
bool tilespec_reread(const char *new_tileset_name, bool game_fully_initialized, float scale)
Definition tilespec.c:1401
bool unit_can_est_trade_route_here(const struct unit *punit)
Definition unit.c:303
bool unit_can_add_or_build_city(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:491
bool can_unit_change_homecity(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:524
bool can_unit_do_autoworker(const struct unit *punit)
Definition unit.c:647
bool can_unit_paradrop(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:863
bool unit_can_help_build_wonder_here(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:277
#define unit_tile(_pu)
Definition unit.h:408
@ ORDER_PERFORM_ACTION
Definition unit.h:48
#define unit_owner(_pu)
Definition unit.h:407
bool units_can_convert(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:352
bool units_are_occupied(const struct unit_list *punits)
Definition unitlist.c:275
bool units_can_unload(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:303
bool can_units_do_base_gui(const struct unit_list *punits, enum base_gui_type base_gui)
Definition unitlist.c:182
bool can_units_do_any_road(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:163
bool units_can_upgrade(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:337
bool units_have_activity_on_tile(const struct unit_list *punits, enum unit_activity activity)
Definition unitlist.c:321
bool units_have_type_flag(const struct unit_list *punits, enum unit_type_flag_id flag, bool has_flag)
Definition unitlist.c:204
bool can_units_do(const struct unit_list *punits, bool(can_fn)(const struct unit *punit))
Definition unitlist.c:95
bool units_can_do_action(const struct unit_list *punits, action_id act_id, bool can_do)
Definition unitlist.c:241
bool units_can_load(const struct unit_list *punits)
Definition unitlist.c:289
bool can_units_do_on_map(const struct civ_map *nmap, const struct unit_list *punits, bool(can_fn)(const struct civ_map *nmap, const struct unit *punit))
Definition unitlist.c:111
#define unit_list_iterate(unitlist, punit)
Definition unitlist.h:31
#define unit_list_iterate_end
Definition unitlist.h:33
const struct unit_type * unit_type_get(const struct unit *punit)
Definition unittype.c:126
const struct unit_type * can_upgrade_unittype(const struct player *pplayer, const struct unit_type *punittype)
Definition unittype.c:1729
const char * utype_name_translation(const struct unit_type *punittype)
Definition unittype.c:1586
bool utype_can_do_action(const struct unit_type *putype, const action_id act_id)
Definition unittype.c:396
void zoom_step_down(void)
Definition zoom.c:130
void zoom_step_up(void)
Definition zoom.c:106