Freeciv21
Develop your civilization from humble roots to a global empire
menu.h
Go to the documentation of this file.
1 /**************************************************************************
2  Copyright (c) 1996-2020 Freeciv21 and Freeciv contributors. This file is
3  part of Freeciv21. Freeciv21 is free software: you can redistribute it
4  and/or modify it under the terms of the GNU General Public License as
5  published by the Free Software Foundation, either version 3 of the
6  License, or (at your option) any later version. You should have received
7  a copy of the GNU General Public License along with Freeciv21. If not,
8  see https://www.gnu.org/licenses/.
9 **************************************************************************/
10 #pragma once
11 
12 #include <fc_config.h>
13 
14 // Qt
15 #include <QDialog>
16 #include <QMenuBar>
17 // client
18 #include "control.h"
19 #include "menu_g.h"
20 
21 class QLabel;
22 class QPushButton;
23 class QScrollArea;
24 struct fc_shortcut;
25 
28 enum munit {
67  SAVE
68 };
69 
71 
72 /**************************************************************************
73  Class holding city list for rally points
74 **************************************************************************/
76 public:
78  {
79  rally_city = nullptr;
80  hover_tile = false;
81  hover_city = false;
82  }
83  bool hover_tile;
84  bool hover_city;
85  struct city *rally_city;
86 };
87 
88 void multiairlift(struct city *acity, Unit_type_id ut);
89 
90 /**************************************************************************
91  Class representing one unit for delayed goto
92 **************************************************************************/
94 public:
96  {
97  order = dg;
98  id = i;
99  ptile = nullptr;
100  }
102  int id;
103  struct tile *ptile;
104 };
105 
106 /****************************************************************************
107  Instantiable government menu.
108 ****************************************************************************/
109 class gov_menu : public QMenu {
110  Q_OBJECT
111  static QSet<gov_menu *> instances;
112 
114 
115 public:
116  gov_menu(QWidget *parent = 0);
117  ~gov_menu() override;
118 
119  static void create_all();
120  static void update_all();
121 
122 public slots:
123  void revolution();
124  void change_gov(int target_gov);
125 
126  void create();
127  void update();
128 };
129 
130 /****************************************************************************
131  Go to and... menu.
132 ****************************************************************************/
133 class go_act_menu : public QMenu {
134  Q_OBJECT
135  static QSet<go_act_menu *> instances;
136 
138 
139 public:
140  go_act_menu(QWidget *parent = 0);
141  ~go_act_menu() override;
142 
143  static void reset_all();
144  static void update_all();
145 
146 public slots:
147  void start_go_act(int act_id, int sub_tgt_id);
148 
149  void reset();
150  void create();
151  void update();
152 };
153 
154 /**************************************************************************
155  Class representing global menus in gameview
156 **************************************************************************/
157 class mr_menu : public QMenuBar {
158  Q_OBJECT
159  QMenu *airlift_menu = nullptr;
160  QMenu *bases_menu = nullptr;
161  QMenu *menu = nullptr;
162  QMenu *multiplayer_menu = nullptr;
163  QMenu *roads_menu = nullptr;
164  QMenu *citybar_submenu = nullptr;
165  QActionGroup *airlift_type = nullptr;
166  QActionGroup *action_vs_city = nullptr;
167  QActionGroup *action_vs_unit = nullptr;
168  QActionGroup *action_citybar = nullptr;
169  QMenu *action_unit_menu = nullptr;
170  QMenu *action_city_menu = nullptr;
172  std::vector<qfc_delayed_unit_item> units_list;
173  bool initialized = false;
174 
175 public:
176  mr_menu();
177  void setup_menus();
178  void menus_sensitive();
179  void update_airlift_menu();
180  void update_roads_menu();
181  void update_bases_menu();
182  void set_tile_for_order(struct tile *ptile);
183  bool shortcut_exists(const fc_shortcut &fcs, QString &where);
184  QAction *tileset_options = nullptr;
185  QAction *minimap_status = nullptr;
186  QAction *scale_fonts_status = nullptr;
187  QAction *lock_status = nullptr;
188  QAction *osd_status = nullptr;
189  QAction *btlog_status = nullptr;
190  QAction *chat_status = nullptr;
191  QAction *messages_status = nullptr;
192  bool delayed_order = false;
193  bool quick_airlifting = false;
195 
196 protected:
197  bool event(QEvent *event) override;
198 
199 private slots:
200  // game menu
201  void local_options();
202  void shortcut_options();
203  void server_options();
204  void messages_options();
205  void save_options_now();
206  void save_game();
207  void save_game_as();
208  void save_image();
209  void tileset_custom_load();
210  void load_new_tileset();
211  void add_modpacks();
212  void show_tileset_options();
213  void back_to_menu();
214  void quit_game();
215 
216  // help menu
217  void slot_help(const QString &topic);
218 
219  /*used by work menu*/
220  void slot_build_path(int id);
221  void slot_build_base(int id);
222  void slot_build_city();
223  void slot_auto_settler();
224  void slot_build_road();
225  void slot_build_irrigation();
226  void slot_cultivate();
227  void slot_build_mine();
228  void slot_plant();
229  void slot_conn_road();
230  void slot_conn_rail();
231  void slot_conn_irrigation();
232  void slot_transform();
233  void slot_clean_pollution();
234  void slot_clean_fallout();
235 
236  /*used by unit menu */
237  void slot_unit_sentry();
238  void slot_unit_explore();
239  void slot_unit_goto();
240  void slot_airlift();
241  void slot_patrol();
242  void slot_unsentry();
243  void slot_load();
244  void slot_unload();
245  void slot_unload_all();
246  void slot_set_home();
247  void slot_upgrade();
248  void slot_convert();
249  void slot_disband();
250  void slot_rename();
251 
252  /*used by combat menu*/
253  void slot_unit_fortify();
254  void slot_unit_fortress();
255  void slot_unit_airbase();
256  void slot_pillage();
257  void slot_action();
258 
259  /*used by view menu*/
260  void slot_set_citybar();
261  void slot_center_view();
263  void slot_battlelog();
264  void slot_fullscreen();
265  void slot_lock();
266  void slot_city_outlines();
267  void slot_city_output();
268  void slot_map_grid();
269  void slot_borders();
270  void slot_native_tiles();
271  void slot_city_growth();
272  void slot_city_production();
273  void slot_city_buycost();
274  void slot_city_traderoutes();
275  void slot_city_names();
276  void zoom_scale_fonts();
277 
278  /*used by select menu */
279  void slot_select_one();
280  void slot_select_all_tile();
281  void slot_select_same_tile();
284  void slot_done_moving();
285  void slot_wait();
286  void slot_unit_filter();
287 
288  // used by multiplayer menu
289  void slot_orders_clear();
290  void slot_execute_orders();
291  void slot_delayed_goto();
292  void slot_trade_add_all();
293  void slot_trade_city();
294  void slot_calculate();
295  void slot_clear_trade();
296  void slot_autocaravan();
297  void slot_rally();
298  void slot_quickairlift_set();
299  void slot_quickairlift();
300  void slot_action_vs_unit();
301  void slot_action_vs_city();
302 
303  /*used by civilization menu */
304  void slot_show_map();
305  void slot_popup_tax_rates();
306  void slot_popup_mult_rates();
307  void slot_show_research_tab();
308  void slot_spaceship();
309  void slot_demographics();
310  void slot_achievements();
311  void slot_endgame();
312  void slot_top_five();
313  void slot_traveler();
314 
315 private:
316  void clear_menus();
317  void nonunit_sensitivity();
318  struct tile *find_last_unit_pos(struct unit *punit, int pos);
319 };
static void update_all()
Update all goto and act menu instances.
Definition: menu.cpp:484
go_act_menu(QWidget *parent=0)
Instantiate a new goto and act sub menu.
Definition: menu.cpp:264
~go_act_menu() override
Destructor.
Definition: menu.cpp:273
void start_go_act(int act_id, int sub_tgt_id)
Activate the goto system.
Definition: menu.cpp:461
void reset()
Reset the goto and act menu so it will be recreated.
Definition: menu.cpp:301
static QSet< go_act_menu * > instances
Store all goto and act menu items so they can be updated etc.
Definition: menu.h:135
void update()
Update the goto and act menu based on the selected unit(s)
Definition: menu.cpp:421
static void reset_all()
Reset all goto and act menu instances.
Definition: menu.cpp:474
void create()
Fill the new goto and act sub menu with menu items.
Definition: menu.cpp:313
QMap< QAction *, int > items
Definition: menu.h:137
Definition: menu.h:109
static QSet< gov_menu * > instances
Keeps track of all gov_menu instances.
Definition: menu.h:111
static void create_all()
Updates all gov_menu instances.
Definition: menu.cpp:244
void revolution()
Shows the dialog asking for confirmation before starting a revolution.
Definition: menu.cpp:223
QVector< QAction * > actions
Definition: menu.h:113
static void update_all()
Updates all gov_menu instances.
Definition: menu.cpp:254
void change_gov(int target_gov)
Shows the dialog asking for confirmation before starting a revolution.
Definition: menu.cpp:231
~gov_menu() override
Destructor.
Definition: menu.cpp:150
gov_menu(QWidget *parent=0)
Creates a new government menu.
Definition: menu.cpp:140
void create()
Creates the menu once the government list is known.
Definition: menu.cpp:159
void update()
Updates the menu to take gov availability into account.
Definition: menu.cpp:199
Definition: menu.h:157
void slot_unit_sentry()
Action "SENTRY".
Definition: menu.cpp:2106
QActionGroup * action_vs_city
Definition: menu.h:166
void slot_traveler()
Action "SHOW WONDERS REPORT".
Definition: menu.cpp:2619
void slot_delayed_goto()
Delayed goto.
Definition: menu.cpp:2267
void slot_autocaravan()
Sends automatic caravan.
Definition: menu.cpp:2187
QMenu * multiplayer_menu
Definition: menu.h:162
void slot_build_irrigation()
Action "BUILD_IRRIGATION".
Definition: menu.cpp:2081
void slot_execute_orders()
Executes stored orders.
Definition: menu.cpp:2293
void update_bases_menu()
Updates "build bases" menu.
Definition: menu.cpp:1410
void tileset_custom_load()
Shows rulesets to load.
Definition: menu.cpp:2627
void update_roads_menu()
Updates "build path" menu.
Definition: menu.cpp:1361
void slot_calculate()
Trade calculation slot.
Definition: menu.cpp:2177
void slot_conn_road()
Action "CONNECT WITH ROAD".
Definition: menu.cpp:2022
void slot_conn_irrigation()
Action "CONNECT WITH IRRIGATION".
Definition: menu.cpp:1981
QMenu * bases_menu
Definition: menu.h:160
void clear_menus()
Clears all menus, making sure them and their actions are deleted.
Definition: menu.cpp:1270
QActionGroup * airlift_type
Definition: menu.h:165
void slot_quickairlift_set()
Slot for setting quick airlift.
Definition: menu.cpp:2227
void slot_battlelog()
Action "Show/Dont battle log".
Definition: menu.cpp:2444
void add_modpacks()
Slot for loading modpack installer.
Definition: menu.cpp:2684
void slot_trade_add_all()
Adds all cities to trade planning.
Definition: menu.cpp:2172
void update_airlift_menu()
Updates airlift menu.
Definition: menu.cpp:1321
void slot_transform()
Action "TRANSFROM TERRAIN".
Definition: menu.cpp:2037
void slot_action_vs_unit()
Slot for choosing default action vs unit.
Definition: menu.cpp:2240
void slot_achievements()
Action "SHOW ACHIEVEMENTS REPORT".
Definition: menu.cpp:2601
void slot_show_research_tab()
Slot for showing research tab.
Definition: menu.cpp:1915
void shortcut_options()
Invoke dialog with shortcut options.
Definition: menu.cpp:2773
void slot_city_output()
Action "SHOW CITY OUTPUT".
Definition: menu.cpp:2513
QMenu * airlift_menu
Definition: menu.h:159
QAction * osd_status
Definition: menu.h:188
void slot_unload_all()
Action "UNLOAD ALL UNITS FROM TRANSPORTER".
Definition: menu.cpp:2360
void slot_airlift()
Action "GOTO/AIRLIFT TO CITY".
Definition: menu.cpp:2340
void slot_select_same_continent()
Action "SELLECT SAME UNITS ON CONTINENT".
Definition: menu.cpp:2554
void slot_city_production()
Action "SHOW CITY PRODUCTION".
Definition: menu.cpp:2518
void slot_set_home()
Action "SET HOMECITY".
Definition: menu.cpp:2345
QAction * lock_status
Definition: menu.h:187
void slot_native_tiles()
Action "SHOW NATIVE TILES".
Definition: menu.cpp:2457
void slot_unit_explore()
Action "EXPLORE".
Definition: menu.cpp:2380
void slot_upgrade()
Action "UPGRADE UNITS".
Definition: menu.cpp:2370
bool shortcut_exists(const fc_shortcut &fcs, QString &where)
Returns string assigned to shortcut or empty string if doesnt exist.
Definition: menu.cpp:1298
bool event(QEvent *event) override
Reimplemented virtual function.
Definition: menu.cpp:2757
void slot_popup_mult_rates()
Action "MULTIPLERS RATES".
Definition: menu.cpp:2709
void slot_select_same_everywhere()
Action "SELECT SAME TYPE EVERYWHERE".
Definition: menu.cpp:2562
void slot_map_grid()
Action "SHOW MAP GRID".
Definition: menu.cpp:2528
void slot_unit_filter()
Shows units filter.
Definition: menu.cpp:2583
void show_tileset_options()
Slot for loading modpack installer.
Definition: menu.cpp:2675
void slot_clean_pollution()
Action "CLEAN POLLUTION and PARADROP".
Definition: menu.cpp:1959
void slot_done_moving()
Action "DONE MOVING".
Definition: menu.cpp:2533
void slot_city_buycost()
Action "SHOW BUY COST".
Definition: menu.cpp:2462
void slot_load()
Action "LOAD INTO TRANSPORTER".
Definition: menu.cpp:2325
void slot_action()
Do...
Definition: menu.cpp:2047
void slot_unload()
Action "UNLOAD FROM TRANSPORTED".
Definition: menu.cpp:2350
QMenu * roads_menu
Definition: menu.h:163
QAction * minimap_status
Definition: menu.h:185
void slot_select_all_tile()
Action "SELECT ALL UNITS ON TILE".
Definition: menu.cpp:2538
void save_game()
Menu Save Game.
Definition: menu.cpp:2876
struct tile * find_last_unit_pos(struct unit *punit, int pos)
Predicts last unit position.
Definition: menu.cpp:494
void save_image()
Menu Save Map Image.
Definition: menu.cpp:2801
void slot_pillage()
Action "PILLAGE".
Definition: menu.cpp:2042
void slot_center_view()
Action "CENTER VIEW".
Definition: menu.cpp:2385
void slot_build_mine()
Action "BUILD_MINE".
Definition: menu.cpp:2091
void server_options()
Invoke dialog with server options.
Definition: menu.cpp:2778
void load_new_tileset()
Slot for loading new tileset.
Definition: menu.cpp:2689
void slot_rename()
Action "RENAME UNIT".
Definition: menu.cpp:2121
std::vector< qfc_delayed_unit_item > units_list
Definition: menu.h:172
void set_tile_for_order(struct tile *ptile)
Sets given tile for delayed order.
Definition: menu.cpp:1288
void slot_fullscreen()
Action "SET FULLSCREEN".
Definition: menu.cpp:2423
void slot_top_five()
Action "SHOW TOP FIVE CITIES".
Definition: menu.cpp:2614
QAction * messages_status
Definition: menu.h:191
void slot_build_road()
Action "BUILD_ROAD".
Definition: menu.cpp:2057
QActionGroup * action_citybar
Definition: menu.h:168
void slot_unsentry()
Action "UNSENTRY(WAKEUP) ALL UNITS".
Definition: menu.cpp:2365
void slot_show_new_turn_text()
Action "Show/Dont show new turn info".
Definition: menu.cpp:2436
void local_options()
Invoke dialog with interface (local) options.
Definition: menu.cpp:2768
QMenu * menu
Definition: menu.h:161
bool delayed_order
Definition: menu.h:192
void slot_borders()
Action "SHOW BORDERS".
Definition: menu.cpp:2452
void slot_clear_trade()
Slot for clearing trade routes.
Definition: menu.cpp:2182
void zoom_scale_fonts()
Action "SCALE FONTS WHEN SCALING MAP".
Definition: menu.cpp:2472
void slot_conn_rail()
Action "CONNECT WITH RAILROAD".
Definition: menu.cpp:1997
void slot_select_same_tile()
Action "SELECT SAME TYPE ON TILE".
Definition: menu.cpp:2570
void slot_convert()
Action "CONVERT".
Definition: menu.cpp:2111
QMenu * action_unit_menu
Definition: menu.h:169
QMenu * citybar_submenu
Definition: menu.h:164
QActionGroup * action_vs_unit
Definition: menu.h:167
QAction * chat_status
Definition: menu.h:190
void slot_endgame()
Action "SHOW ENDGAME REPORT".
Definition: menu.cpp:2609
void slot_select_one()
Action "SELECT ONE UNITS/DESELECT OTHERS".
Definition: menu.cpp:2546
void menus_sensitive()
Enables/disables menu items and renames them depending on key in menu_list.
Definition: menu.cpp:1519
void slot_set_citybar()
Action "Citybar changed".
Definition: menu.cpp:2491
void messages_options()
Invoke dialog with messages options.
Definition: menu.cpp:2786
void slot_unit_goto()
Action "GOTO".
Definition: menu.cpp:2375
void slot_cultivate()
Action "CULTIVATE".
Definition: menu.cpp:2086
void slot_patrol()
Action "UNIT PATROL".
Definition: menu.cpp:2335
void slot_unit_fortress()
Action "BUILD FORTRESS".
Definition: menu.cpp:2012
void slot_wait()
Action "WAIT".
Definition: menu.cpp:2578
void slot_demographics()
Action "SHOW DEMOGRAPGHICS REPORT".
Definition: menu.cpp:2593
void slot_build_city()
Action "BUILD_CITY".
Definition: menu.cpp:1935
void slot_city_growth()
Action "SHOW CITY GROWTH".
Definition: menu.cpp:2467
void slot_rally()
Sets/unset rally point.
Definition: menu.cpp:2158
void slot_city_traderoutes()
Action "SHOW CITY TRADEROUTES".
Definition: menu.cpp:2523
void slot_plant()
Action "PLANT".
Definition: menu.cpp:2096
void slot_build_path(int id)
Actions "BUILD_PATH_*".
Definition: menu.cpp:2722
Unit_type_id airlift_type_id
Definition: menu.h:194
void slot_show_map()
Changes tab to mapview.
Definition: menu.cpp:1930
QAction * scale_fonts_status
Definition: menu.h:186
void slot_trade_city()
Adds one city to trade planning.
Definition: menu.cpp:2167
void quit_game()
Invoke popup for quiting game.
Definition: menu.cpp:2796
void slot_help(const QString &topic)
Actions "HELP_*".
Definition: menu.cpp:2714
void save_game_as()
Menu Save Game As...
Definition: menu.cpp:2881
bool quick_airlifting
Definition: menu.h:193
QAction * tileset_options
Definition: menu.h:184
void slot_spaceship()
Slot for showing spaceship.
Definition: menu.cpp:1920
QMultiHash< munit, QAction * > menu_list
Definition: menu.h:171
void slot_city_names()
Action "SHOW CITY NAMES".
Definition: menu.cpp:2481
void slot_clean_fallout()
Action "CLEAN FALLOUT".
Definition: menu.cpp:1954
QMenu * action_city_menu
Definition: menu.h:170
void save_options_now()
Menu Save Options Now.
Definition: menu.cpp:2791
QAction * btlog_status
Definition: menu.h:189
void slot_unit_fortify()
Action "FORTIFY".
Definition: menu.cpp:2101
void slot_quickairlift()
Slot for quick airlifting.
Definition: menu.cpp:2262
void slot_lock()
Action "Lock interface".
Definition: menu.cpp:2390
void back_to_menu()
Back to Main Menu.
Definition: menu.cpp:2907
void slot_popup_tax_rates()
Action "NATIONAL BUDGET".
Definition: menu.cpp:2704
void slot_auto_settler()
Action "AUTO_SETTLER".
Definition: menu.cpp:2052
void slot_build_base(int id)
Actions "BUILD_BASE_*".
Definition: menu.cpp:2740
void setup_menus()
Initializes menu system, and add custom enum(munit) for most of options Notice that if you set option...
Definition: menu.cpp:542
mr_menu()
Constructor for global menubar in gameview.
Definition: menu.cpp:535
void slot_action_vs_city()
Slot for choosing default action vs city.
Definition: menu.cpp:2251
void slot_disband()
Action "DISBAND UNIT".
Definition: menu.cpp:2116
bool initialized
Definition: menu.h:173
void slot_unit_airbase()
Action "BUILD AIRBASE".
Definition: menu.cpp:2017
void slot_city_outlines()
Action "SHOW CITY OUTLINES".
Definition: menu.cpp:2486
void slot_orders_clear()
Clears delayed orders.
Definition: menu.cpp:2149
void nonunit_sensitivity()
Definition: menu.cpp:1458
qfc_delayed_unit_item(delay_order dg, int i)
Definition: menu.h:95
struct tile * ptile
Definition: menu.h:103
delay_order order
Definition: menu.h:101
bool hover_city
Definition: menu.h:84
bool hover_tile
Definition: menu.h:83
qfc_rally_list()
Definition: menu.h:77
struct city * rally_city
Definition: menu.h:85
int Unit_type_id
Definition: fc_types.h:299
delay_order
Definition: menu.h:70
@ D_NUKE
Definition: menu.h:70
@ D_FORT
Definition: menu.h:70
@ D_PARADROP
Definition: menu.h:70
@ D_GOTO
Definition: menu.h:70
void multiairlift(struct city *acity, Unit_type_id ut)
Airlift unit type to city acity from each city.
Definition: menu.cpp:2937
munit
used for indicating menu about current option - for renaming and enabling, disabling
Definition: menu.h:28
@ AIRLIFT
Definition: menu.h:58
@ CONNECT_RAIL
Definition: menu.h:55
@ TRANSFORM
Definition: menu.h:41
@ FORTIFY
Definition: menu.h:45
@ GOTO_CITY
Definition: menu.h:57
@ TRANSPORTER
Definition: menu.h:33
@ BUILD
Definition: menu.h:43
@ IRRIGATION
Definition: menu.h:39
@ UNLOAD
Definition: menu.h:32
@ CONNECT_IRRIGATION
Definition: menu.h:56
@ CONNECT_ROAD
Definition: menu.h:54
@ HOMECITY
Definition: menu.h:51
@ CONVERT
Definition: menu.h:36
@ PILLAGE
Definition: menu.h:42
@ FALLOUT
Definition: menu.h:49
@ BUILD_WONDER
Definition: menu.h:59
@ DISBAND
Definition: menu.h:34
@ NOT_4_OBS
Definition: menu.h:64
@ UPGRADE
Definition: menu.h:63
@ ORDER_TRADEROUTE
Definition: menu.h:61
@ SAVE
Definition: menu.h:67
@ MULTIPLIERS
Definition: menu.h:65
@ PLANT
Definition: menu.h:38
@ POLLUTION
Definition: menu.h:48
@ WAKEUP
Definition: menu.h:52
@ MINE
Definition: menu.h:37
@ LOAD
Definition: menu.h:31
@ SENTRY
Definition: menu.h:50
@ ORDER_DIPLOMAT_DLG
Definition: menu.h:62
@ EXPLORE
Definition: menu.h:30
@ STANDARD
Definition: menu.h:29
@ ROAD
Definition: menu.h:44
@ CULTIVATE
Definition: menu.h:40
@ AUTOSETTLER
Definition: menu.h:53
@ FORTRESS
Definition: menu.h:46
@ ENDGAME
Definition: menu.h:66
@ RENAME
Definition: menu.h:35
@ AUTOTRADEROUTE
Definition: menu.h:60
@ AIRBASE
Definition: menu.h:47
Definition: city.h:291
Definition: tile.h:42
Definition: unit.h:134