OpenTTD Source  20240917-master-g9ab0a47812
toolbar_gui.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #include "stdafx.h"
11 #include "gui.h"
12 #include "window_gui.h"
13 #include "window_func.h"
14 #include "viewport_func.h"
15 #include "command_func.h"
16 #include "dropdown_type.h"
17 #include "dropdown_func.h"
18 #include "dropdown_common_type.h"
19 #include "house.h"
20 #include "vehicle_gui.h"
21 #include "rail_gui.h"
22 #include "road.h"
23 #include "road_gui.h"
24 #include "vehicle_func.h"
25 #include "sound_func.h"
26 #include "terraform_gui.h"
27 #include "strings_func.h"
28 #include "company_func.h"
29 #include "company_gui.h"
30 #include "vehicle_base.h"
31 #include "cheat_func.h"
32 #include "transparency_gui.h"
33 #include "screenshot.h"
34 #include "signs_func.h"
35 #include "fios.h"
36 #include "console_gui.h"
37 #include "news_gui.h"
38 #include "ai/ai_gui.hpp"
39 #include "game/game_gui.hpp"
40 #include "script/script_gui.h"
41 #include "tilehighlight_func.h"
42 #include "smallmap_gui.h"
43 #include "graph_gui.h"
44 #include "textbuf_gui.h"
46 #include "newgrf_debug.h"
47 #include "hotkeys.h"
48 #include "engine_base.h"
49 #include "highscore.h"
50 #include "game/game.hpp"
51 #include "goal_base.h"
52 #include "story_base.h"
53 #include "toolbar_gui.h"
54 #include "framerate_type.h"
55 #include "screenshot_gui.h"
56 #include "misc_cmd.h"
57 #include "league_gui.h"
58 #include "league_base.h"
59 #include "timer/timer.h"
60 #include "timer/timer_window.h"
62 #include "help_gui.h"
63 
64 #include "widgets/toolbar_widget.h"
65 
66 #include "network/network.h"
67 #include "network/network_gui.h"
68 #include "network/network_func.h"
69 
70 #include "safeguards.h"
71 
72 
74 uint _toolbar_width = 0;
75 
76 RailType _last_built_railtype;
77 RoadType _last_built_roadtype;
78 RoadType _last_built_tramtype;
79 
82  TB_NORMAL,
83  TB_UPPER,
84  TB_LOWER
85 };
86 
89  CBF_NONE,
90  CBF_PLACE_SIGN,
91  CBF_PLACE_LANDINFO,
92 };
93 
95 
99 class DropDownListCompanyItem : public DropDownIcon<DropDownIcon<DropDownString<DropDownListItem>, true>> {
100 public:
101  DropDownListCompanyItem(CompanyID company, bool shaded) : DropDownIcon<DropDownIcon<DropDownString<DropDownListItem>, true>>(SPR_COMPANY_ICON, COMPANY_SPRITE_COLOUR(company), NetworkCanJoinCompany(company) ? SPR_EMPTY : SPR_LOCK, PAL_NONE, STR_NULL, company, false, shaded)
102  {
103  SetDParam(0, company);
104  SetDParam(1, company);
105  this->SetString(GetString(STR_COMPANY_NAME_COMPANY_NUM));
106  }
107 };
108 
116 static void PopupMainToolbarMenu(Window *w, WidgetID widget, DropDownList &&list, int def)
117 {
118  ShowDropDownList(w, std::move(list), def, widget, 0, true);
120 }
121 
128 static void PopupMainToolbarMenu(Window *w, WidgetID widget, const std::initializer_list<StringID> &strings)
129 {
130  DropDownList list;
131  int i = 0;
132  for (StringID string : strings) {
133  if (string == STR_NULL) {
134  list.push_back(MakeDropDownListDividerItem());
135  } else {
136  list.push_back(MakeDropDownListStringItem(string, i));
137  i++;
138  }
139  }
140  PopupMainToolbarMenu(w, widget, std::move(list), 0);
141 }
142 
144 static const int CTMN_CLIENT_LIST = -1;
145 static const int CTMN_SPECTATE = -2;
146 static const int CTMN_SPECTATOR = -3;
147 
154 static void PopupMainCompanyToolbMenu(Window *w, WidgetID widget, CompanyMask grey = 0)
155 {
156  DropDownList list;
157 
158  switch (widget) {
159  case WID_TN_COMPANIES:
160  if (!_networking) break;
161 
162  /* Add the client list button for the companies menu */
163  list.push_back(MakeDropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST));
164 
166  list.push_back(MakeDropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE));
167  }
168  break;
169  case WID_TN_STORY:
170  list.push_back(MakeDropDownListStringItem(STR_STORY_BOOK_SPECTATOR, CTMN_SPECTATOR));
171  break;
172 
173  case WID_TN_GOAL:
174  list.push_back(MakeDropDownListStringItem(STR_GOALS_SPECTATOR, CTMN_SPECTATOR));
175  break;
176  }
177 
178  for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
179  if (!Company::IsValidID(c)) continue;
180  list.push_back(std::make_unique<DropDownListCompanyItem>(c, HasBit(grey, c)));
181  }
182 
184 }
185 
186 static ToolbarMode _toolbar_mode;
187 
188 static CallBackFunction SelectSignTool()
189 {
190  if (_last_started_action == CBF_PLACE_SIGN) {
192  return CBF_NONE;
193  } else {
194  SetObjectToPlace(SPR_CURSOR_SIGN, PAL_NONE, HT_RECT, WC_MAIN_TOOLBAR, 0);
195  return CBF_PLACE_SIGN;
196  }
197 }
198 
199 /* --- Pausing --- */
200 
201 static CallBackFunction ToolbarPauseClick(Window *)
202 {
203  if (_networking && !_network_server) return CBF_NONE; // only server can pause the game
204 
206  if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
207  }
208  return CBF_NONE;
209 }
210 
217 {
218  if (_networking) return CBF_NONE; // no fast forward in network game
219 
220  ChangeGameSpeed(_game_speed == 100);
221 
223  return CBF_NONE;
224 }
225 
230  OME_GAMEOPTIONS,
231  OME_SETTINGS,
232  OME_AI_SETTINGS,
233  OME_GAMESCRIPT_SETTINGS,
234  OME_NEWGRFSETTINGS,
235  OME_SANDBOX,
236  OME_TRANSPARENCIES,
237  OME_SHOW_TOWNNAMES,
238  OME_SHOW_STATIONNAMES,
239  OME_SHOW_WAYPOINTNAMES,
240  OME_SHOW_SIGNS,
241  OME_SHOW_COMPETITOR_SIGNS,
242  OME_FULL_ANIMATION,
243  OME_FULL_DETAILS,
244  OME_TRANSPARENTBUILDINGS,
245  OME_SHOW_STATIONSIGNS,
246 };
247 
255 {
256  DropDownList list;
257  list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_GAME_OPTIONS, OME_GAMEOPTIONS));
258  list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE, OME_SETTINGS));
259  /* Changes to the per-AI settings don't get send from the server to the clients. Clients get
260  * the settings once they join but never update it. As such don't show the window at all
261  * to network clients. */
262  if (!_networking || _network_server) {
263  list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_AI_SETTINGS, OME_AI_SETTINGS));
264  list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS, OME_GAMESCRIPT_SETTINGS));
265  }
266  list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_NEWGRF_SETTINGS, OME_NEWGRFSETTINGS));
267  if (_game_mode != GM_EDITOR && !_networking) {
268  list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_SANDBOX_OPTIONS, OME_SANDBOX));
269  }
270  list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS, OME_TRANSPARENCIES));
271  list.push_back(MakeDropDownListDividerItem());
272  list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_TOWN_NAMES), STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES));
273  list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_STATION_NAMES), STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES));
274  list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES), STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES));
275  list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_SIGNS), STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS));
276  list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS), STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS));
277  list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_FULL_ANIMATION), STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION));
278  list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_FULL_DETAIL), STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS));
279  list.push_back(MakeDropDownListCheckedItem(IsTransparencySet(TO_HOUSES), STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS));
280  list.push_back(MakeDropDownListCheckedItem(IsTransparencySet(TO_SIGNS), STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS));
281 
282  ShowDropDownList(w, std::move(list), 0, WID_TN_SETTINGS, 140, true);
284  return CBF_NONE;
285 }
286 
294 {
295  switch (index) {
296  case OME_GAMEOPTIONS: ShowGameOptions(); return CBF_NONE;
297  case OME_SETTINGS: ShowGameSettings(); return CBF_NONE;
298  case OME_AI_SETTINGS: ShowAIConfigWindow(); return CBF_NONE;
299  case OME_GAMESCRIPT_SETTINGS: ShowGSConfigWindow(); return CBF_NONE;
300  case OME_NEWGRFSETTINGS: ShowNewGRFSettings(!_networking && _settings_client.gui.UserIsAllowedToChangeNewGRFs(), true, true, &_grfconfig); return CBF_NONE;
301  case OME_SANDBOX: ShowCheatWindow(); break;
302  case OME_TRANSPARENCIES: ShowTransparencyToolbar(); break;
303 
304  case OME_SHOW_TOWNNAMES: ToggleBit(_display_opt, DO_SHOW_TOWN_NAMES); break;
305  case OME_SHOW_STATIONNAMES: ToggleBit(_display_opt, DO_SHOW_STATION_NAMES); break;
306  case OME_SHOW_WAYPOINTNAMES: ToggleBit(_display_opt, DO_SHOW_WAYPOINT_NAMES); break;
307  case OME_SHOW_SIGNS: ToggleBit(_display_opt, DO_SHOW_SIGNS); break;
308  case OME_SHOW_COMPETITOR_SIGNS:
311  break;
312  case OME_FULL_ANIMATION: ToggleBit(_display_opt, DO_FULL_ANIMATION); CheckBlitter(); break;
313  case OME_FULL_DETAILS: ToggleBit(_display_opt, DO_FULL_DETAIL); break;
314  case OME_TRANSPARENTBUILDINGS: ToggleTransparency(TO_HOUSES); break;
315  case OME_SHOW_STATIONSIGNS: ToggleTransparency(TO_SIGNS); break;
316  }
318  return CBF_NONE;
319 }
320 
325  SLEME_SAVE_SCENARIO = 0,
326  SLEME_LOAD_SCENARIO,
327  SLEME_SAVE_HEIGHTMAP,
328  SLEME_LOAD_HEIGHTMAP,
329  SLEME_EXIT_TOINTRO,
330  SLEME_EXIT_GAME,
331 };
332 
337  SLNME_SAVE_GAME = 0,
338  SLNME_LOAD_GAME,
339  SLNME_EXIT_TOINTRO,
340  SLNME_EXIT_GAME,
341 };
342 
350 {
351  PopupMainToolbarMenu(w, WID_TN_SAVE, {STR_FILE_MENU_SAVE_GAME, STR_FILE_MENU_LOAD_GAME, STR_FILE_MENU_QUIT_GAME,
352  STR_NULL, STR_FILE_MENU_EXIT});
353  return CBF_NONE;
354 }
355 
363 {
364  PopupMainToolbarMenu(w, WID_TE_SAVE, {STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO, STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO,
365  STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP, STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP,
366  STR_SCENEDIT_FILE_MENU_QUIT_EDITOR, STR_NULL, STR_SCENEDIT_FILE_MENU_QUIT});
367  return CBF_NONE;
368 }
369 
376 static CallBackFunction MenuClickSaveLoad(int index = 0)
377 {
378  if (_game_mode == GM_EDITOR) {
379  switch (index) {
380  case SLEME_SAVE_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_SAVE); break;
381  case SLEME_LOAD_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_LOAD); break;
382  case SLEME_SAVE_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP, SLO_SAVE); break;
383  case SLEME_LOAD_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP, SLO_LOAD); break;
384  case SLEME_EXIT_TOINTRO: AskExitToGameMenu(); break;
385  case SLEME_EXIT_GAME: HandleExitGameRequest(); break;
386  }
387  } else {
388  switch (index) {
389  case SLNME_SAVE_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_SAVE); break;
390  case SLNME_LOAD_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break;
391  case SLNME_EXIT_TOINTRO: AskExitToGameMenu(); break;
392  case SLNME_EXIT_GAME: HandleExitGameRequest(); break;
393  }
394  }
395  return CBF_NONE;
396 }
397 
398 /* --- Map button menu --- */
399 
400 enum MapMenuEntries {
401  MME_SHOW_SMALLMAP = 0,
402  MME_SHOW_EXTRAVIEWPORTS,
403  MME_SHOW_LINKGRAPH,
404  MME_SHOW_SIGNLISTS,
405  MME_SHOW_TOWNDIRECTORY,
406  MME_SHOW_INDUSTRYDIRECTORY,
407 };
408 
409 static CallBackFunction ToolbarMapClick(Window *w)
410 {
411  DropDownList list;
412  list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP));
413  list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS));
414  list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_LINGRAPH_LEGEND, MME_SHOW_LINKGRAPH));
415  list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS));
416  PopupMainToolbarMenu(w, WID_TN_SMALL_MAP, std::move(list), 0);
417  return CBF_NONE;
418 }
419 
420 static CallBackFunction ToolbarScenMapTownDir(Window *w)
421 {
422  DropDownList list;
423  list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP));
424  list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS));
425  list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS));
426  list.push_back(MakeDropDownListStringItem(STR_TOWN_MENU_TOWN_DIRECTORY, MME_SHOW_TOWNDIRECTORY));
427  list.push_back(MakeDropDownListStringItem(STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, MME_SHOW_INDUSTRYDIRECTORY));
428  PopupMainToolbarMenu(w, WID_TE_SMALL_MAP, std::move(list), 0);
429  return CBF_NONE;
430 }
431 
439 {
440  switch (index) {
441  case MME_SHOW_SMALLMAP: ShowSmallMap(); break;
442  case MME_SHOW_EXTRAVIEWPORTS: ShowExtraViewportWindow(); break;
443  case MME_SHOW_LINKGRAPH: ShowLinkGraphLegend(); break;
444  case MME_SHOW_SIGNLISTS: ShowSignList(); break;
445  case MME_SHOW_TOWNDIRECTORY: ShowTownDirectory(); break;
446  case MME_SHOW_INDUSTRYDIRECTORY: ShowIndustryDirectory(); break;
447  }
448  return CBF_NONE;
449 }
450 
451 /* --- Town button menu --- */
452 
453 static CallBackFunction ToolbarTownClick(Window *w)
454 {
456  PopupMainToolbarMenu(w, WID_TN_TOWNS, {STR_TOWN_MENU_TOWN_DIRECTORY});
457  } else {
458  PopupMainToolbarMenu(w, WID_TN_TOWNS, {STR_TOWN_MENU_TOWN_DIRECTORY, STR_TOWN_MENU_FOUND_TOWN});
459  }
460  return CBF_NONE;
461 }
462 
470 {
471  switch (index) {
472  case 0: ShowTownDirectory(); break;
473  case 1: // setting could be changed when the dropdown was open
474  if (_settings_game.economy.found_town != TF_FORBIDDEN) ShowFoundTownWindow();
475  break;
476  }
477  return CBF_NONE;
478 }
479 
480 /* --- Subidies button menu --- */
481 
482 static CallBackFunction ToolbarSubsidiesClick(Window *w)
483 {
484  PopupMainToolbarMenu(w, WID_TN_SUBSIDIES, {STR_SUBSIDIES_MENU_SUBSIDIES});
485  return CBF_NONE;
486 }
487 
494 {
495  ShowSubsidiesList();
496  return CBF_NONE;
497 }
498 
499 /* --- Stations button menu --- */
500 
501 static CallBackFunction ToolbarStationsClick(Window *w)
502 {
504  return CBF_NONE;
505 }
506 
514 {
516  return CBF_NONE;
517 }
518 
519 /* --- Finances button menu --- */
520 
521 static CallBackFunction ToolbarFinancesClick(Window *w)
522 {
524  return CBF_NONE;
525 }
526 
534 {
536  return CBF_NONE;
537 }
538 
539 /* --- Company's button menu --- */
540 
541 static CallBackFunction ToolbarCompaniesClick(Window *w)
542 {
544  return CBF_NONE;
545 }
546 
554 {
555  if (_networking) {
556  switch (index) {
557  case CTMN_CLIENT_LIST:
558  ShowClientList();
559  return CBF_NONE;
560 
561  case CTMN_SPECTATE:
562  if (_network_server) {
565  } else {
567  }
568  return CBF_NONE;
569  }
570  }
571  ShowCompany((CompanyID)index);
572  return CBF_NONE;
573 }
574 
575 /* --- Story button menu --- */
576 
577 static CallBackFunction ToolbarStoryClick(Window *w)
578 {
580  return CBF_NONE;
581 }
582 
590 {
592  return CBF_NONE;
593 }
594 
595 /* --- Goal button menu --- */
596 
597 static CallBackFunction ToolbarGoalClick(Window *w)
598 {
600  return CBF_NONE;
601 }
602 
610 {
612  return CBF_NONE;
613 }
614 
615 /* --- Graphs and League Table button menu --- */
616 
621 static const int GRMN_OPERATING_PROFIT_GRAPH = -1;
622 static const int GRMN_INCOME_GRAPH = -2;
623 static const int GRMN_DELIVERED_CARGO_GRAPH = -3;
624 static const int GRMN_PERFORMANCE_HISTORY_GRAPH = -4;
625 static const int GRMN_COMPANY_VALUE_GRAPH = -5;
626 static const int GRMN_CARGO_PAYMENT_RATES = -6;
627 static const int LTMN_PERFORMANCE_LEAGUE = -7;
628 static const int LTMN_PERFORMANCE_RATING = -8;
629 static const int LTMN_HIGHSCORE = -9;
630 
631 static void AddDropDownLeagueTableOptions(DropDownList &list)
632 {
633  if (LeagueTable::GetNumItems() > 0) {
634  for (LeagueTable *lt : LeagueTable::Iterate()) {
635  list.push_back(MakeDropDownListStringItem(lt->title, lt->index));
636  }
637  } else {
638  list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE, LTMN_PERFORMANCE_LEAGUE));
639  list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING, LTMN_PERFORMANCE_RATING));
640  if (!_networking) {
641  list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_HIGHSCORE, LTMN_HIGHSCORE));
642  }
643  }
644 }
645 
646 static CallBackFunction ToolbarGraphsClick(Window *w)
647 {
648  DropDownList list;
649 
650  list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH, GRMN_OPERATING_PROFIT_GRAPH));
651  list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_INCOME_GRAPH, GRMN_INCOME_GRAPH));
652  list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH, GRMN_DELIVERED_CARGO_GRAPH));
653  list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH, GRMN_PERFORMANCE_HISTORY_GRAPH));
654  list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_COMPANY_VALUE_GRAPH, GRMN_COMPANY_VALUE_GRAPH));
655  list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_CARGO_PAYMENT_RATES, GRMN_CARGO_PAYMENT_RATES));
656 
657  if (_toolbar_mode != TB_NORMAL) AddDropDownLeagueTableOptions(list);
658 
659  ShowDropDownList(w, std::move(list), GRMN_OPERATING_PROFIT_GRAPH, WID_TN_GRAPHS, 140, true);
661 
662  return CBF_NONE;
663 }
664 
665 static CallBackFunction ToolbarLeagueClick(Window *w)
666 {
667  DropDownList list;
668 
669  AddDropDownLeagueTableOptions(list);
670 
671  int selected = list[0]->result;
672  ShowDropDownList(w, std::move(list), selected, WID_TN_LEAGUE, 140, true);
674 
675  return CBF_NONE;
676 }
677 
685 {
686  switch (index) {
687  case GRMN_OPERATING_PROFIT_GRAPH: ShowOperatingProfitGraph(); break;
688  case GRMN_INCOME_GRAPH: ShowIncomeGraph(); break;
689  case GRMN_DELIVERED_CARGO_GRAPH: ShowDeliveredCargoGraph(); break;
690  case GRMN_PERFORMANCE_HISTORY_GRAPH: ShowPerformanceHistoryGraph(); break;
691  case GRMN_COMPANY_VALUE_GRAPH: ShowCompanyValueGraph(); break;
692  case GRMN_CARGO_PAYMENT_RATES: ShowCargoPaymentRates(); break;
693  case LTMN_PERFORMANCE_LEAGUE: ShowPerformanceLeagueTable(); break;
694  case LTMN_PERFORMANCE_RATING: ShowPerformanceRatingDetail(); break;
695  case LTMN_HIGHSCORE: ShowHighscoreTable(); break;
696  default: {
697  if (LeagueTable::IsValidID(index)) {
698  ShowScriptLeagueTable((LeagueTableID)index);
699  }
700  }
701  }
702  return CBF_NONE;
703 }
704 
705 
706 
707 /* --- Industries button menu --- */
708 
709 static CallBackFunction ToolbarIndustryClick(Window *w)
710 {
711  /* Disable build-industry menu if we are a spectator */
713  PopupMainToolbarMenu(w, WID_TN_INDUSTRIES, {STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, STR_INDUSTRY_MENU_INDUSTRY_CHAIN});
714  } else {
715  PopupMainToolbarMenu(w, WID_TN_INDUSTRIES, {STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, STR_INDUSTRY_MENU_INDUSTRY_CHAIN, STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY});
716  }
717  return CBF_NONE;
718 }
719 
727 {
728  switch (index) {
729  case 0: ShowIndustryDirectory(); break;
730  case 1: ShowIndustryCargoesWindow(); break;
731  case 2: ShowBuildIndustryWindow(); break;
732  }
733  return CBF_NONE;
734 }
735 
736 /* --- Trains button menu + 1 helper function for all vehicles. --- */
737 
738 static void ToolbarVehicleClick(Window *w, VehicleType veh)
739 {
740  CompanyMask dis = 0;
741 
742  for (const Company *c : Company::Iterate()) {
743  if (c->group_all[veh].num_vehicle == 0) SetBit(dis, c->index);
744  }
746 }
747 
748 
749 static CallBackFunction ToolbarTrainClick(Window *w)
750 {
751  ToolbarVehicleClick(w, VEH_TRAIN);
752  return CBF_NONE;
753 }
754 
762 {
763  ShowVehicleListWindow((CompanyID)index, VEH_TRAIN);
764  return CBF_NONE;
765 }
766 
767 /* --- Road vehicle button menu --- */
768 
769 static CallBackFunction ToolbarRoadClick(Window *w)
770 {
771  ToolbarVehicleClick(w, VEH_ROAD);
772  return CBF_NONE;
773 }
774 
782 {
783  ShowVehicleListWindow((CompanyID)index, VEH_ROAD);
784  return CBF_NONE;
785 }
786 
787 /* --- Ship button menu --- */
788 
789 static CallBackFunction ToolbarShipClick(Window *w)
790 {
791  ToolbarVehicleClick(w, VEH_SHIP);
792  return CBF_NONE;
793 }
794 
802 {
803  ShowVehicleListWindow((CompanyID)index, VEH_SHIP);
804  return CBF_NONE;
805 }
806 
807 /* --- Aircraft button menu --- */
808 
809 static CallBackFunction ToolbarAirClick(Window *w)
810 {
811  ToolbarVehicleClick(w, VEH_AIRCRAFT);
812  return CBF_NONE;
813 }
814 
822 {
823  ShowVehicleListWindow((CompanyID)index, VEH_AIRCRAFT);
824  return CBF_NONE;
825 }
826 
827 /* --- Zoom in button --- */
828 
829 static CallBackFunction ToolbarZoomInClick(Window *w)
830 {
832  w->HandleButtonClick((_game_mode == GM_EDITOR) ? (WidgetID)WID_TE_ZOOM_IN : (WidgetID)WID_TN_ZOOM_IN);
834  }
835  return CBF_NONE;
836 }
837 
838 /* --- Zoom out button --- */
839 
840 static CallBackFunction ToolbarZoomOutClick(Window *w)
841 {
843  w->HandleButtonClick((_game_mode == GM_EDITOR) ? (WidgetID)WID_TE_ZOOM_OUT : (WidgetID)WID_TN_ZOOM_OUT);
845  }
846  return CBF_NONE;
847 }
848 
849 /* --- Rail button menu --- */
850 
851 static CallBackFunction ToolbarBuildRailClick(Window *w)
852 {
853  ShowDropDownList(w, GetRailTypeDropDownList(), _last_built_railtype, WID_TN_RAILS, 140, true);
855  return CBF_NONE;
856 }
857 
865 {
866  _last_built_railtype = (RailType)index;
867  ShowBuildRailToolbar(_last_built_railtype);
868  return CBF_NONE;
869 }
870 
871 /* --- Road button menu --- */
872 
873 static CallBackFunction ToolbarBuildRoadClick(Window *w)
874 {
875  ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TN_ROADS, 140, true);
877  return CBF_NONE;
878 }
879 
887 {
888  _last_built_roadtype = (RoadType)index;
889  ShowBuildRoadToolbar(_last_built_roadtype);
890  return CBF_NONE;
891 }
892 
893 /* --- Tram button menu --- */
894 
895 static CallBackFunction ToolbarBuildTramClick(Window *w)
896 {
897  ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TN_TRAMS, 140, true);
899  return CBF_NONE;
900 }
901 
909 {
910  _last_built_tramtype = (RoadType)index;
911  ShowBuildRoadToolbar(_last_built_tramtype);
912  return CBF_NONE;
913 }
914 
915 /* --- Water button menu --- */
916 
917 static CallBackFunction ToolbarBuildWaterClick(Window *w)
918 {
919  DropDownList list;
920  list.push_back(MakeDropDownListIconItem(SPR_IMG_BUILD_CANAL, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, 0));
921  ShowDropDownList(w, std::move(list), 0, WID_TN_WATER, 140, true);
923  return CBF_NONE;
924 }
925 
932 {
934  return CBF_NONE;
935 }
936 
937 /* --- Airport button menu --- */
938 
939 static CallBackFunction ToolbarBuildAirClick(Window *w)
940 {
941  DropDownList list;
942  list.push_back(MakeDropDownListIconItem(SPR_IMG_AIRPORT, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, 0));
943  ShowDropDownList(w, std::move(list), 0, WID_TN_AIR, 140, true);
945  return CBF_NONE;
946 }
947 
954 {
956  return CBF_NONE;
957 }
958 
959 /* --- Forest button menu --- */
960 
961 static CallBackFunction ToolbarForestClick(Window *w)
962 {
963  DropDownList list;
964  list.push_back(MakeDropDownListIconItem(SPR_IMG_LANDSCAPING, PAL_NONE, STR_LANDSCAPING_MENU_LANDSCAPING, 0));
965  list.push_back(MakeDropDownListIconItem(SPR_IMG_PLANTTREES, PAL_NONE, STR_LANDSCAPING_MENU_PLANT_TREES, 1));
966  list.push_back(MakeDropDownListIconItem(SPR_IMG_SIGN, PAL_NONE, STR_LANDSCAPING_MENU_PLACE_SIGN, 2));
967  ShowDropDownList(w, std::move(list), 0, WID_TN_LANDSCAPE, 100, true);
969  return CBF_NONE;
970 }
971 
979 {
980  switch (index) {
981  case 0: ShowTerraformToolbar(); break;
982  case 1: ShowBuildTreesToolbar(); break;
983  case 2: return SelectSignTool();
984  }
985  return CBF_NONE;
986 }
987 
988 /* --- Music button menu --- */
989 
990 static CallBackFunction ToolbarMusicClick(Window *w)
991 {
992  PopupMainToolbarMenu(w, _game_mode == GM_EDITOR ? (WidgetID)WID_TE_MUSIC_SOUND : (WidgetID)WID_TN_MUSIC_SOUND, {STR_TOOLBAR_SOUND_MUSIC});
993  return CBF_NONE;
994 }
995 
1002 {
1003  ShowMusicWindow();
1004  return CBF_NONE;
1005 }
1006 
1007 /* --- Newspaper button menu --- */
1008 
1009 static CallBackFunction ToolbarNewspaperClick(Window *w)
1010 {
1011  PopupMainToolbarMenu(w, WID_TN_MESSAGES, {STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT, STR_NEWS_MENU_MESSAGE_HISTORY_MENU, STR_NEWS_MENU_DELETE_ALL_MESSAGES});
1012  return CBF_NONE;
1013 }
1014 
1022 {
1023  switch (index) {
1024  case 0: ShowLastNewsMessage(); break;
1025  case 1: ShowMessageHistory(); break;
1026  case 2: DeleteAllMessages(); break;
1027  }
1028  return CBF_NONE;
1029 }
1030 
1031 /* --- Help button menu --- */
1032 
1033 static CallBackFunction PlaceLandBlockInfo()
1034 {
1035  if (_last_started_action == CBF_PLACE_LANDINFO) {
1037  return CBF_NONE;
1038  } else {
1039  SetObjectToPlace(SPR_CURSOR_QUERY, PAL_NONE, HT_RECT, WC_MAIN_TOOLBAR, 0);
1040  return CBF_PLACE_LANDINFO;
1041  }
1042 }
1043 
1044 static CallBackFunction ToolbarHelpClick(Window *w)
1045 {
1047  PopupMainToolbarMenu(w, _game_mode == GM_EDITOR ? (WidgetID)WID_TE_HELP : (WidgetID)WID_TN_HELP, {STR_ABOUT_MENU_LAND_BLOCK_INFO,
1048  STR_ABOUT_MENU_HELP, STR_NULL, STR_ABOUT_MENU_TOGGLE_CONSOLE, STR_ABOUT_MENU_AI_DEBUG,
1049  STR_ABOUT_MENU_SCREENSHOT, STR_ABOUT_MENU_SHOW_FRAMERATE, STR_ABOUT_MENU_ABOUT_OPENTTD,
1050  STR_ABOUT_MENU_SPRITE_ALIGNER, STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES, STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS,
1051  STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES});
1052  } else {
1053  PopupMainToolbarMenu(w, _game_mode == GM_EDITOR ? (WidgetID)WID_TE_HELP : (WidgetID)WID_TN_HELP, {STR_ABOUT_MENU_LAND_BLOCK_INFO,
1054  STR_ABOUT_MENU_HELP, STR_NULL, STR_ABOUT_MENU_TOGGLE_CONSOLE, STR_ABOUT_MENU_AI_DEBUG,
1055  STR_ABOUT_MENU_SCREENSHOT, STR_ABOUT_MENU_SHOW_FRAMERATE, STR_ABOUT_MENU_ABOUT_OPENTTD});
1056  }
1057  return CBF_NONE;
1058 }
1059 
1068 {
1069  extern bool _draw_bounding_boxes;
1070  /* Always allow to toggle them off */
1071  if (_settings_client.gui.newgrf_developer_tools || _draw_bounding_boxes) {
1072  _draw_bounding_boxes = !_draw_bounding_boxes;
1074  }
1075 }
1076 
1085 {
1086  extern bool _draw_dirty_blocks;
1087  /* Always allow to toggle them off */
1088  if (_settings_client.gui.newgrf_developer_tools || _draw_dirty_blocks) {
1089  _draw_dirty_blocks = !_draw_dirty_blocks;
1091  }
1092 }
1093 
1099 {
1100  extern bool _draw_widget_outlines;
1101  /* Always allow to toggle them off */
1102  if (_settings_client.gui.newgrf_developer_tools || _draw_widget_outlines) {
1103  _draw_widget_outlines = !_draw_widget_outlines;
1105  }
1106 }
1107 
1113 {
1115  TimerGameCalendar::Date new_calendar_date = TimerGameCalendar::ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1);
1116  TimerGameEconomy::Date new_economy_date = new_calendar_date.base();
1117 
1118  /* We must set both Calendar and Economy dates to keep them in sync. Calendar first. */
1119  TimerGameCalendar::SetDate(new_calendar_date, 0);
1120 
1121  /* If you open a savegame as a scenario, there may already be link graphs and/or vehicles. These use economy date. */
1123  for (auto v : Vehicle::Iterate()) v->ShiftDates(new_economy_date - TimerGameEconomy::date);
1124 
1125  /* Only change the date after changing cached values above. */
1126  TimerGameEconomy::SetDate(new_economy_date, 0);
1127 }
1128 
1135 {
1136  switch (index) {
1137  case 0: return PlaceLandBlockInfo();
1138  case 1: ShowHelpWindow(); break;
1139  case 2: IConsoleSwitch(); break;
1141  case 4: ShowScreenshotWindow(); break;
1142  case 5: ShowFramerateWindow(); break;
1143  case 6: ShowAboutWindow(); break;
1144  case 7: ShowSpriteAlignerWindow(); break;
1145  case 8: ToggleBoundingBoxes(); break;
1146  case 9: ToggleDirtyBlocks(); break;
1147  case 10: ToggleWidgetOutlines(); break;
1148  }
1149  return CBF_NONE;
1150 }
1151 
1152 /* --- Switch toolbar button --- */
1153 
1154 static CallBackFunction ToolbarSwitchClick(Window *w)
1155 {
1156  if (_toolbar_mode != TB_LOWER) {
1157  _toolbar_mode = TB_LOWER;
1158  } else {
1159  _toolbar_mode = TB_UPPER;
1160  }
1161 
1162  w->ReInit();
1163  w->SetWidgetLoweredState(_game_mode == GM_EDITOR ? (WidgetID)WID_TE_SWITCH_BAR : (WidgetID)WID_TN_SWITCH_BAR, _toolbar_mode == TB_LOWER);
1164  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1165  return CBF_NONE;
1166 }
1167 
1168 /* --- Scenario editor specific handlers. */
1169 
1174 {
1176  ShowQueryString(STR_JUST_INT, STR_MAPGEN_START_DATE_QUERY_CAPT, 8, w, CS_NUMERAL, QSF_ENABLE_DEFAULT);
1177  return CBF_NONE;
1178 }
1179 
1180 static CallBackFunction ToolbarScenDateBackward(Window *w)
1181 {
1182  /* don't allow too fast scrolling */
1183  if (!(w->flags & WF_TIMEOUT) || w->timeout_timer <= 1) {
1185  w->SetDirty();
1186 
1188  }
1189  _left_button_clicked = false;
1190  return CBF_NONE;
1191 }
1192 
1193 static CallBackFunction ToolbarScenDateForward(Window *w)
1194 {
1195  /* don't allow too fast scrolling */
1196  if (!(w->flags & WF_TIMEOUT) || w->timeout_timer <= 1) {
1198  w->SetDirty();
1199 
1201  }
1202  _left_button_clicked = false;
1203  return CBF_NONE;
1204 }
1205 
1206 static CallBackFunction ToolbarScenGenLand(Window *w)
1207 {
1209  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1210 
1212  return CBF_NONE;
1213 }
1214 
1215 static CallBackFunction ToolbarScenGenTownClick(Window *w)
1216 {
1217  PopupMainToolbarMenu(w, WID_TE_TOWN_GENERATE, {STR_SCENEDIT_TOWN_MENU_BUILD_TOWN, STR_SCENEDIT_TOWN_MENU_PACE_HOUSE});
1218  return CBF_NONE;
1219 }
1220 
1221 static CallBackFunction ToolbarScenGenTown(int index)
1222 {
1223  switch (index) {
1224  case 0: ShowFoundTownWindow(); break;
1225  case 1: ShowBuildHousePicker(nullptr); break;
1226  }
1227  return CBF_NONE;
1228 }
1229 
1230 static CallBackFunction ToolbarScenGenIndustry(Window *w)
1231 {
1233  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1234  ShowBuildIndustryWindow();
1235  return CBF_NONE;
1236 }
1237 
1238 static CallBackFunction ToolbarScenBuildRoadClick(Window *w)
1239 {
1240  ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TE_ROADS, 140, true);
1241  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1242  return CBF_NONE;
1243 }
1244 
1252 {
1253  _last_built_roadtype = (RoadType)index;
1254  ShowBuildRoadScenToolbar(_last_built_roadtype);
1255  return CBF_NONE;
1256 }
1257 
1258 static CallBackFunction ToolbarScenBuildTramClick(Window *w)
1259 {
1260  ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TE_TRAMS, 140, true);
1261  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1262  return CBF_NONE;
1263 }
1264 
1272 {
1273  _last_built_tramtype = (RoadType)index;
1274  ShowBuildRoadScenToolbar(_last_built_tramtype);
1275  return CBF_NONE;
1276 }
1277 
1278 static CallBackFunction ToolbarScenBuildDocks(Window *w)
1279 {
1281  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1283  return CBF_NONE;
1284 }
1285 
1286 static CallBackFunction ToolbarScenPlantTrees(Window *w)
1287 {
1289  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1290  ShowBuildTreesToolbar();
1291  return CBF_NONE;
1292 }
1293 
1294 static CallBackFunction ToolbarScenPlaceSign(Window *w)
1295 {
1297  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1298  return SelectSignTool();
1299 }
1300 
1301 static CallBackFunction ToolbarBtn_NULL(Window *)
1302 {
1303  return CBF_NONE;
1304 }
1305 
1306 typedef CallBackFunction MenuClickedProc(int index);
1307 
1308 static MenuClickedProc * const _menu_clicked_procs[] = {
1309  nullptr, // 0
1310  nullptr, // 1
1311  MenuClickSettings, // 2
1312  MenuClickSaveLoad, // 3
1313  MenuClickMap, // 4
1314  MenuClickTown, // 5
1315  MenuClickSubsidies, // 6
1316  MenuClickStations, // 7
1317  MenuClickFinances, // 8
1318  MenuClickCompany, // 9
1319  MenuClickStory, // 10
1320  MenuClickGoal, // 11
1323  MenuClickIndustry, // 14
1324  MenuClickShowTrains, // 15
1325  MenuClickShowRoad, // 16
1326  MenuClickShowShips, // 17
1327  MenuClickShowAir, // 18
1328  MenuClickMap, // 19
1329  nullptr, // 20
1330  MenuClickBuildRail, // 21
1331  MenuClickBuildRoad, // 22
1332  MenuClickBuildTram, // 23
1333  MenuClickBuildWater, // 24
1334  MenuClickBuildAir, // 25
1335  MenuClickForest, // 26
1336  MenuClickMusicWindow, // 27
1337  MenuClickNewspaper, // 28
1338  MenuClickHelp, // 29
1339 };
1340 
1343 protected:
1344  uint spacers;
1345 
1346 public:
1348  {
1349  }
1350 
1357  {
1358  return type == WWT_IMGBTN || type == WWT_IMGBTN_2 || type == WWT_PUSHIMGBTN;
1359  }
1360 
1361  void SetupSmallestSize(Window *w) override
1362  {
1363  this->smallest_x = 0; // Biggest child
1364  this->smallest_y = 0; // Biggest child
1365  this->fill_x = 1;
1366  this->fill_y = 0;
1367  this->resize_x = 1; // We only resize in this direction
1368  this->resize_y = 0; // We never resize in this direction
1369  this->spacers = 0;
1370 
1371  uint nbuttons = 0;
1372  /* First initialise some variables... */
1373  for (const auto &child_wid : this->children) {
1374  child_wid->SetupSmallestSize(w);
1375  this->smallest_y = std::max(this->smallest_y, child_wid->smallest_y + child_wid->padding.Vertical());
1376  if (this->IsButton(child_wid->type)) {
1377  nbuttons++;
1378  this->smallest_x = std::max(this->smallest_x, child_wid->smallest_x + child_wid->padding.Horizontal());
1379  } else if (child_wid->type == NWID_SPACER) {
1380  this->spacers++;
1381  }
1382  }
1383 
1384  /* ... then in a second pass make sure the 'current' heights are set. Won't change ever. */
1385  for (const auto &child_wid : this->children) {
1386  child_wid->current_y = this->smallest_y;
1387  if (!this->IsButton(child_wid->type)) {
1388  child_wid->current_x = child_wid->smallest_x;
1389  }
1390  }
1391  _toolbar_width = nbuttons * this->smallest_x;
1392  }
1393 
1394  void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override
1395  {
1396  assert(given_width >= this->smallest_x && given_height >= this->smallest_y);
1397 
1398  this->pos_x = x;
1399  this->pos_y = y;
1400  this->current_x = given_width;
1401  this->current_y = given_height;
1402 
1403  /* Figure out what are the visible buttons */
1404  uint arrangable_count, button_count, spacer_count;
1405  const WidgetID *arrangement = GetButtonArrangement(given_width, arrangable_count, button_count, spacer_count);
1406 
1407  /* Create us ourselves a quick lookup table from WidgetID to slot. */
1408  std::map<WidgetID, uint> lookup;
1409  for (auto it = std::begin(this->children); it != std::end(this->children); ++it) {
1410  NWidgetBase *nwid = it->get();
1411  nwid->current_x = 0; /* Hide widget, it will be revealed in the next step. */
1412  if (nwid->type == NWID_SPACER) continue;
1413  lookup[dynamic_cast<NWidgetCore *>(nwid)->index] = std::distance(this->children.begin(), it);
1414  }
1415 
1416  /* Now assign the widgets to their rightful place */
1417  uint position = 0; // Place to put next child relative to origin of the container.
1418  uint spacer_space = std::max(0, (int)given_width - (int)(button_count * this->smallest_x)); // Remaining spacing for 'spacer' widgets
1419  uint button_space = given_width - spacer_space; // Remaining spacing for the buttons
1420  uint spacer_i = 0;
1421  uint button_i = 0;
1422 
1423  /* Index into the arrangement indices. */
1424  const WidgetID *slotp = rtl ? &arrangement[arrangable_count - 1] : arrangement;
1425  for (uint i = 0; i < arrangable_count; i++) {
1426  uint slot = lookup[*slotp];
1427  auto &child_wid = this->children[slot];
1428  /* If we have space to give to the spacers, do that. */
1429  if (spacer_space > 0 && slot > 0 && slot < this->children.size() - 1) {
1430  const auto &possible_spacer = this->children[slot + (rtl ? 1 : -1)];
1431  if (possible_spacer != nullptr && possible_spacer->type == NWID_SPACER) {
1432  uint add = spacer_space / (spacer_count - spacer_i);
1433  position += add;
1434  spacer_space -= add;
1435  spacer_i++;
1436  }
1437  }
1438 
1439  /* Buttons can be scaled, the others not. */
1440  if (this->IsButton(child_wid->type)) {
1441  child_wid->current_x = button_space / (button_count - button_i);
1442  button_space -= child_wid->current_x;
1443  button_i++;
1444  } else {
1445  child_wid->current_x = child_wid->smallest_x;
1446  }
1447  child_wid->AssignSizePosition(sizing, x + position, y, child_wid->current_x, this->current_y, rtl);
1448  position += child_wid->current_x;
1449 
1450  if (rtl) {
1451  slotp--;
1452  } else {
1453  slotp++;
1454  }
1455  }
1456  }
1457 
1458  void Draw(const Window *w) override
1459  {
1460  /* Draw brown-red toolbar bg. */
1461  const Rect r = this->GetCurrentRect();
1464 
1465  this->NWidgetContainer::Draw(w);
1466  }
1467 
1476  virtual const WidgetID *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const = 0;
1477 };
1478 
1481  const WidgetID *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
1482  {
1483  static const uint SMALLEST_ARRANGEMENT = 14;
1484  static const uint BIGGEST_ARRANGEMENT = 20;
1485 
1486  /* The number of buttons of each row of the toolbar should match the number of items which we want to be visible.
1487  * The total number of buttons should be equal to arrangable_count * 2.
1488  * No bad things happen, but we could see strange behaviours if we have buttons < (arrangable_count * 2) like a
1489  * pause button appearing on the right of the lower toolbar and weird resizing of the widgets even if there is
1490  * enough space.
1491  */
1492  static const WidgetID arrange14[] = {
1493  WID_TN_PAUSE,
1495  WID_TN_TRAINS,
1497  WID_TN_SHIPS,
1501  WID_TN_RAILS,
1502  WID_TN_ROADS,
1503  WID_TN_WATER,
1504  WID_TN_AIR,
1507  // lower toolbar
1509  WID_TN_SAVE,
1511  WID_TN_TOWNS,
1516  WID_TN_GRAPHS,
1520  WID_TN_HELP,
1522  };
1523  static const WidgetID arrange15[] = {
1524  WID_TN_PAUSE,
1527  WID_TN_TRAINS,
1529  WID_TN_SHIPS,
1531  WID_TN_RAILS,
1532  WID_TN_ROADS,
1533  WID_TN_WATER,
1534  WID_TN_AIR,
1539  // lower toolbar
1540  WID_TN_PAUSE,
1543  WID_TN_SAVE,
1544  WID_TN_TOWNS,
1549  WID_TN_GRAPHS,
1553  WID_TN_HELP,
1555  };
1556  static const WidgetID arrange16[] = {
1557  WID_TN_PAUSE,
1561  WID_TN_TRAINS,
1563  WID_TN_SHIPS,
1565  WID_TN_RAILS,
1566  WID_TN_ROADS,
1567  WID_TN_WATER,
1568  WID_TN_AIR,
1573  // lower toolbar
1574  WID_TN_PAUSE,
1576  WID_TN_SAVE,
1577  WID_TN_TOWNS,
1582  WID_TN_GRAPHS,
1586  WID_TN_HELP,
1590  };
1591  static const WidgetID arrange17[] = {
1592  WID_TN_PAUSE,
1597  WID_TN_TRAINS,
1599  WID_TN_SHIPS,
1601  WID_TN_RAILS,
1602  WID_TN_ROADS,
1603  WID_TN_WATER,
1604  WID_TN_AIR,
1609  // lower toolbar
1610  WID_TN_PAUSE,
1612  WID_TN_SAVE,
1615  WID_TN_TOWNS,
1619  WID_TN_GRAPHS,
1623  WID_TN_HELP,
1627  };
1628  static const WidgetID arrange18[] = {
1629  WID_TN_PAUSE,
1633  WID_TN_TOWNS,
1639  WID_TN_RAILS,
1640  WID_TN_ROADS,
1641  WID_TN_WATER,
1642  WID_TN_AIR,
1647  // lower toolbar
1648  WID_TN_PAUSE,
1650  WID_TN_SAVE,
1652  WID_TN_TOWNS,
1655  WID_TN_GRAPHS,
1656  WID_TN_TRAINS,
1658  WID_TN_SHIPS,
1662  WID_TN_HELP,
1666  };
1667  static const WidgetID arrange19[] = {
1668  WID_TN_PAUSE,
1672  WID_TN_TOWNS,
1674  WID_TN_TRAINS,
1676  WID_TN_SHIPS,
1678  WID_TN_RAILS,
1679  WID_TN_ROADS,
1680  WID_TN_WATER,
1681  WID_TN_AIR,
1687  // lower toolbar
1688  WID_TN_PAUSE,
1690  WID_TN_SAVE,
1695  WID_TN_GRAPHS,
1698  WID_TN_RAILS,
1699  WID_TN_ROADS,
1700  WID_TN_WATER,
1701  WID_TN_AIR,
1703  WID_TN_HELP,
1707  };
1708  static const WidgetID arrange20[] = {
1709  WID_TN_PAUSE,
1713  WID_TN_TOWNS,
1715  WID_TN_TRAINS,
1717  WID_TN_SHIPS,
1719  WID_TN_RAILS,
1720  WID_TN_ROADS,
1721  WID_TN_WATER,
1722  WID_TN_AIR,
1725  WID_TN_GOAL,
1729  // lower toolbar
1730  WID_TN_PAUSE,
1732  WID_TN_SAVE,
1737  WID_TN_GRAPHS,
1740  WID_TN_RAILS,
1741  WID_TN_ROADS,
1742  WID_TN_WATER,
1743  WID_TN_AIR,
1745  WID_TN_STORY,
1746  WID_TN_HELP,
1750  };
1751  static const WidgetID arrange_all[] = {
1752  WID_TN_PAUSE,
1755  WID_TN_SAVE,
1757  WID_TN_TOWNS,
1762  WID_TN_STORY,
1763  WID_TN_GOAL,
1764  WID_TN_GRAPHS,
1765  WID_TN_LEAGUE,
1767  WID_TN_TRAINS,
1769  WID_TN_SHIPS,
1773  WID_TN_RAILS,
1774  WID_TN_ROADS,
1775  WID_TN_TRAMS,
1776  WID_TN_WATER,
1777  WID_TN_AIR,
1781  WID_TN_HELP
1782  };
1783 
1784  /* If at least BIGGEST_ARRANGEMENT fit, just spread all the buttons nicely */
1785  uint full_buttons = std::max(CeilDiv(width, this->smallest_x), SMALLEST_ARRANGEMENT);
1786  if (full_buttons > BIGGEST_ARRANGEMENT) {
1787  button_count = arrangable_count = lengthof(arrange_all);
1788  spacer_count = this->spacers;
1789  return arrange_all;
1790  }
1791 
1792  /* Introduce the split toolbar */
1793  static const WidgetID * const arrangements[] = { arrange14, arrange15, arrange16, arrange17, arrange18, arrange19, arrange20 };
1794 
1795  button_count = arrangable_count = full_buttons;
1796  spacer_count = this->spacers;
1797  return arrangements[full_buttons - SMALLEST_ARRANGEMENT] + ((_toolbar_mode == TB_LOWER) ? full_buttons : 0);
1798  }
1799 };
1800 
1803  uint panel_widths[2];
1804 
1805  void SetupSmallestSize(Window *w) override
1806  {
1808 
1809  /* Find the size of panel_widths */
1810  uint i = 0;
1811  for (const auto &child_wid : this->children) {
1812  if (child_wid->type == NWID_SPACER || this->IsButton(child_wid->type)) continue;
1813 
1814  assert(i < lengthof(this->panel_widths));
1815  this->panel_widths[i++] = child_wid->current_x;
1816  _toolbar_width += child_wid->current_x;
1817  }
1818  }
1819 
1820  const WidgetID *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
1821  {
1822  static const WidgetID arrange_all[] = {
1823  WID_TE_PAUSE,
1826  WID_TE_SAVE,
1827  WID_TE_SPACER,
1835  WID_TE_ROADS,
1836  WID_TE_TRAMS,
1837  WID_TE_WATER,
1838  WID_TE_TREES,
1839  WID_TE_SIGNS,
1841  WID_TE_HELP,
1842  };
1843  static const WidgetID arrange_nopanel[] = {
1844  WID_TE_PAUSE,
1847  WID_TE_SAVE,
1855  WID_TE_ROADS,
1856  WID_TE_TRAMS,
1857  WID_TE_WATER,
1858  WID_TE_TREES,
1859  WID_TE_SIGNS,
1861  WID_TE_HELP,
1862  };
1863  static const WidgetID arrange_switch[] = {
1869  WID_TE_ROADS,
1870  WID_TE_TRAMS,
1871  WID_TE_WATER,
1872  WID_TE_TREES,
1873  WID_TE_SIGNS,
1875  // lower toolbar
1876  WID_TE_PAUSE,
1879  WID_TE_SAVE,
1885  WID_TE_HELP,
1887  };
1888 
1889  /* If we can place all buttons *and* the panels, show them. */
1890  uint min_full_width = (lengthof(arrange_all) - lengthof(this->panel_widths)) * this->smallest_x + this->panel_widths[0] + this->panel_widths[1];
1891  if (width >= min_full_width) {
1892  width -= this->panel_widths[0] + this->panel_widths[1];
1893  arrangable_count = lengthof(arrange_all);
1894  button_count = arrangable_count - 2;
1895  spacer_count = this->spacers;
1896  return arrange_all;
1897  }
1898 
1899  /* Otherwise don't show the date panel and if we can't fit half the buttons and the panels anymore, split the toolbar in two */
1900  uint min_small_width = (lengthof(arrange_switch) - lengthof(this->panel_widths)) * this->smallest_x / 2 + this->panel_widths[1];
1901  if (width > min_small_width) {
1902  width -= this->panel_widths[1];
1903  arrangable_count = lengthof(arrange_nopanel);
1904  button_count = arrangable_count - 1;
1905  spacer_count = this->spacers - 1;
1906  return arrange_nopanel;
1907  }
1908 
1909  /* Split toolbar */
1910  width -= this->panel_widths[1];
1911  arrangable_count = lengthof(arrange_switch) / 2;
1912  button_count = arrangable_count - 1;
1913  spacer_count = 0;
1914  return arrange_switch + ((_toolbar_mode == TB_LOWER) ? arrangable_count : 0);
1915  }
1916 };
1917 
1918 /* --- Toolbar handling for the 'normal' case */
1919 
1920 typedef CallBackFunction ToolbarButtonProc(Window *w);
1921 
1922 static ToolbarButtonProc * const _toolbar_button_procs[] = {
1923  ToolbarPauseClick,
1927  ToolbarMapClick,
1928  ToolbarTownClick,
1929  ToolbarSubsidiesClick,
1930  ToolbarStationsClick,
1931  ToolbarFinancesClick,
1932  ToolbarCompaniesClick,
1933  ToolbarStoryClick,
1934  ToolbarGoalClick,
1935  ToolbarGraphsClick,
1936  ToolbarLeagueClick,
1937  ToolbarIndustryClick,
1938  ToolbarTrainClick,
1939  ToolbarRoadClick,
1940  ToolbarShipClick,
1941  ToolbarAirClick,
1942  ToolbarZoomInClick,
1943  ToolbarZoomOutClick,
1944  ToolbarBuildRailClick,
1945  ToolbarBuildRoadClick,
1946  ToolbarBuildTramClick,
1947  ToolbarBuildWaterClick,
1948  ToolbarBuildAirClick,
1949  ToolbarForestClick,
1950  ToolbarMusicClick,
1951  ToolbarNewspaperClick,
1952  ToolbarHelpClick,
1953  ToolbarSwitchClick,
1954 };
1955 
1958  MainToolbarWindow(WindowDesc &desc) : Window(desc)
1959  {
1960  this->InitNested(0);
1961 
1962  _last_started_action = CBF_NONE;
1963  CLRBITS(this->flags, WF_WHITE_BORDER);
1964  this->SetWidgetDisabledState(WID_TN_PAUSE, _networking && !_network_server); // if not server, disable pause button
1965  this->SetWidgetDisabledState(WID_TN_FAST_FORWARD, _networking); // if networking, disable fast-forward button
1966  PositionMainToolbar(this);
1968  }
1969 
1970  void FindWindowPlacementAndResize([[maybe_unused]] int def_width, [[maybe_unused]] int def_height) override
1971  {
1973  }
1974 
1975  void OnPaint() override
1976  {
1977  /* If spectator, disable all construction buttons
1978  * ie : Build road, rail, ships, airports and landscaping
1979  * Since enabled state is the default, just disable when needed */
1981  /* disable company list drop downs, if there are no companies */
1983 
1986 
1987  this->DrawWidgets();
1988  }
1989 
1990  void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
1991  {
1992  if (_game_mode != GM_MENU && !this->IsWidgetDisabled(widget)) _toolbar_button_procs[widget](this);
1993  }
1994 
1995  void OnDropdownSelect(WidgetID widget, int index) override
1996  {
1997  CallBackFunction cbf = _menu_clicked_procs[widget](index);
1998  if (cbf != CBF_NONE) _last_started_action = cbf;
1999  }
2000 
2001  EventState OnHotkey(int hotkey) override
2002  {
2003  CallBackFunction cbf = CBF_NONE;
2004  switch (hotkey) {
2005  case MTHK_PAUSE: ToolbarPauseClick(this); break;
2006  case MTHK_FASTFORWARD: ToolbarFastForwardClick(this); break;
2007  case MTHK_SETTINGS: ShowGameOptions(); break;
2008  case MTHK_SAVEGAME: MenuClickSaveLoad(); break;
2009  case MTHK_LOADGAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break;
2010  case MTHK_SMALLMAP: ShowSmallMap(); break;
2011  case MTHK_TOWNDIRECTORY: ShowTownDirectory(); break;
2012  case MTHK_SUBSIDIES: ShowSubsidiesList(); break;
2013  case MTHK_STATIONS: ShowCompanyStations(_local_company); break;
2014  case MTHK_FINANCES: ShowCompanyFinances(_local_company); break;
2015  case MTHK_COMPANIES: ShowCompany(_local_company); break;
2016  case MTHK_STORY: ShowStoryBook(_local_company); break;
2017  case MTHK_GOAL: ShowGoalsList(_local_company); break;
2018  case MTHK_GRAPHS: ShowOperatingProfitGraph(); break;
2019  case MTHK_LEAGUE: ShowFirstLeagueTable(); break;
2020  case MTHK_INDUSTRIES: ShowBuildIndustryWindow(); break;
2021  case MTHK_TRAIN_LIST: ShowVehicleListWindow(_local_company, VEH_TRAIN); break;
2022  case MTHK_ROADVEH_LIST: ShowVehicleListWindow(_local_company, VEH_ROAD); break;
2023  case MTHK_SHIP_LIST: ShowVehicleListWindow(_local_company, VEH_SHIP); break;
2024  case MTHK_AIRCRAFT_LIST: ShowVehicleListWindow(_local_company, VEH_AIRCRAFT); break;
2025  case MTHK_ZOOM_IN: ToolbarZoomInClick(this); break;
2026  case MTHK_ZOOM_OUT: ToolbarZoomOutClick(this); break;
2027  case MTHK_BUILD_RAIL: ShowBuildRailToolbar(_last_built_railtype); break;
2028  case MTHK_BUILD_ROAD: ShowBuildRoadToolbar(_last_built_roadtype); break;
2029  case MTHK_BUILD_TRAM: ShowBuildRoadToolbar(_last_built_tramtype); break;
2030  case MTHK_BUILD_DOCKS: ShowBuildDocksToolbar(); break;
2031  case MTHK_BUILD_AIRPORT: ShowBuildAirToolbar(); break;
2032  case MTHK_BUILD_TREES: ShowBuildTreesToolbar(); break;
2033  case MTHK_MUSIC: ShowMusicWindow(); break;
2034  case MTHK_SCRIPT_DEBUG: ShowScriptDebugWindow(); break;
2035  case MTHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break;
2036  case MTHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break;
2037  case MTHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break;
2038  case MTHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break;
2039  case MTHK_CHEATS: if (!_networking) ShowCheatWindow(); break;
2040  case MTHK_TERRAFORM: ShowTerraformToolbar(); break;
2041  case MTHK_EXTRA_VIEWPORT: ShowExtraViewportWindowForTileUnderCursor(); break;
2042  case MTHK_CLIENT_LIST: if (_networking) ShowClientList(); break;
2043  case MTHK_SIGN_LIST: ShowSignList(); break;
2044  case MTHK_LANDINFO: cbf = PlaceLandBlockInfo(); break;
2045  default: return ES_NOT_HANDLED;
2046  }
2047  if (cbf != CBF_NONE) _last_started_action = cbf;
2048  return ES_HANDLED;
2049  }
2050 
2051  void OnPlaceObject([[maybe_unused]] Point pt, TileIndex tile) override
2052  {
2053  switch (_last_started_action) {
2054  case CBF_PLACE_SIGN:
2055  PlaceProc_Sign(tile);
2056  break;
2057 
2058  case CBF_PLACE_LANDINFO:
2059  ShowLandInfo(tile);
2060  break;
2061 
2062  default: NOT_REACHED();
2063  }
2064  }
2065 
2066  void OnPlaceObjectAbort() override
2067  {
2068  _last_started_action = CBF_NONE;
2069  }
2070 
2072  IntervalTimer<TimerWindow> refresh_interval = {std::chrono::milliseconds(30), [this](auto) {
2073  if (this->IsWidgetLowered(WID_TN_PAUSE) != !!_pause_mode) {
2076  }
2077 
2078  if (this->IsWidgetLowered(WID_TN_FAST_FORWARD) != (_game_speed != 100)) {
2081  }
2082  }};
2083 
2084  void OnTimeout() override
2085  {
2086  /* We do not want to automatically raise the pause, fast forward and
2087  * switchbar buttons; they have to stay down when pressed etc. */
2088  for (WidgetID i = WID_TN_SETTINGS; i < WID_TN_SWITCH_BAR; i++) {
2089  this->RaiseWidgetWhenLowered(i);
2090  }
2091  }
2092 
2098  void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
2099  {
2100  if (!gui_scope) return;
2102  }
2103 
2104  static inline HotkeyList hotkeys{"maintoolbar", {
2105  Hotkey({WKC_F1, WKC_PAUSE}, "pause", MTHK_PAUSE),
2106  Hotkey(0, "fastforward", MTHK_FASTFORWARD),
2107  Hotkey(WKC_F2, "settings", MTHK_SETTINGS),
2108  Hotkey(WKC_F3, "saveload", MTHK_SAVEGAME),
2109  Hotkey(0, "load_game", MTHK_LOADGAME),
2110  Hotkey({WKC_F4, 'M'}, "smallmap", MTHK_SMALLMAP),
2111  Hotkey(WKC_F5, "town_list", MTHK_TOWNDIRECTORY),
2112  Hotkey(WKC_F6, "subsidies", MTHK_SUBSIDIES),
2113  Hotkey(WKC_F7, "station_list", MTHK_STATIONS),
2114  Hotkey(WKC_F8, "finances", MTHK_FINANCES),
2115  Hotkey(WKC_F9, "companies", MTHK_COMPANIES),
2116  Hotkey(0, "story_book", MTHK_STORY),
2117  Hotkey(0, "goal_list", MTHK_GOAL),
2118  Hotkey(WKC_F10, "graphs", MTHK_GRAPHS),
2119  Hotkey(WKC_F11, "league", MTHK_LEAGUE),
2120  Hotkey(WKC_F12, "industry_list", MTHK_INDUSTRIES),
2121  Hotkey(WKC_SHIFT | WKC_F1, "train_list", MTHK_TRAIN_LIST),
2122  Hotkey(WKC_SHIFT | WKC_F2, "roadveh_list", MTHK_ROADVEH_LIST),
2123  Hotkey(WKC_SHIFT | WKC_F3, "ship_list", MTHK_SHIP_LIST),
2124  Hotkey(WKC_SHIFT | WKC_F4, "aircraft_list", MTHK_AIRCRAFT_LIST),
2125  Hotkey({WKC_NUM_PLUS, WKC_EQUALS, WKC_SHIFT | WKC_EQUALS, WKC_SHIFT | WKC_F5}, "zoomin", MTHK_ZOOM_IN),
2126  Hotkey({WKC_NUM_MINUS, WKC_MINUS, WKC_SHIFT | WKC_MINUS, WKC_SHIFT | WKC_F6}, "zoomout", MTHK_ZOOM_OUT),
2127  Hotkey(WKC_SHIFT | WKC_F7, "build_rail", MTHK_BUILD_RAIL),
2128  Hotkey(WKC_SHIFT | WKC_F8, "build_road", MTHK_BUILD_ROAD),
2129  Hotkey(0, "build_tram", MTHK_BUILD_TRAM),
2130  Hotkey(WKC_SHIFT | WKC_F9, "build_docks", MTHK_BUILD_DOCKS),
2131  Hotkey(WKC_SHIFT | WKC_F10, "build_airport", MTHK_BUILD_AIRPORT),
2132  Hotkey(WKC_SHIFT | WKC_F11, "build_trees", MTHK_BUILD_TREES),
2133  Hotkey(WKC_SHIFT | WKC_F12, "music", MTHK_MUSIC),
2134  Hotkey(0, "ai_debug", MTHK_SCRIPT_DEBUG),
2135  Hotkey(WKC_CTRL | 'S', "small_screenshot", MTHK_SMALL_SCREENSHOT),
2136  Hotkey(WKC_CTRL | 'P', "zoomedin_screenshot", MTHK_ZOOMEDIN_SCREENSHOT),
2137  Hotkey(WKC_CTRL | 'D', "defaultzoom_screenshot", MTHK_DEFAULTZOOM_SCREENSHOT),
2138  Hotkey(0, "giant_screenshot", MTHK_GIANT_SCREENSHOT),
2139  Hotkey(WKC_CTRL | WKC_ALT | 'C', "cheats", MTHK_CHEATS),
2140  Hotkey('L', "terraform", MTHK_TERRAFORM),
2141  Hotkey('V', "extra_viewport", MTHK_EXTRA_VIEWPORT),
2142  Hotkey(0, "client_list", MTHK_CLIENT_LIST),
2143  Hotkey(0, "sign_list", MTHK_SIGN_LIST),
2144  Hotkey(0, "land_info", MTHK_LANDINFO),
2145  }};
2146 };
2147 
2148 static std::unique_ptr<NWidgetBase> MakeMainToolbar()
2149 {
2151  static const SpriteID toolbar_button_sprites[] = {
2152  SPR_IMG_PAUSE, // WID_TN_PAUSE
2153  SPR_IMG_FASTFORWARD, // WID_TN_FAST_FORWARD
2154  SPR_IMG_SETTINGS, // WID_TN_SETTINGS
2155  SPR_IMG_SAVE, // WID_TN_SAVE
2156  SPR_IMG_SMALLMAP, // WID_TN_SMALL_MAP
2157  SPR_IMG_TOWN, // WID_TN_TOWNS
2158  SPR_IMG_SUBSIDIES, // WID_TN_SUBSIDIES
2159  SPR_IMG_COMPANY_LIST, // WID_TN_STATIONS
2160  SPR_IMG_COMPANY_FINANCE, // WID_TN_FINANCES
2161  SPR_IMG_COMPANY_GENERAL, // WID_TN_COMPANIES
2162  SPR_IMG_STORY_BOOK, // WID_TN_STORY
2163  SPR_IMG_GOAL, // WID_TN_GOAL
2164  SPR_IMG_GRAPHS, // WID_TN_GRAPHS
2165  SPR_IMG_COMPANY_LEAGUE, // WID_TN_LEAGUE
2166  SPR_IMG_INDUSTRY, // WID_TN_INDUSTRIES
2167  SPR_IMG_TRAINLIST, // WID_TN_TRAINS
2168  SPR_IMG_TRUCKLIST, // WID_TN_ROADVEHS
2169  SPR_IMG_SHIPLIST, // WID_TN_SHIPS
2170  SPR_IMG_AIRPLANESLIST, // WID_TN_AIRCRAFT
2171  SPR_IMG_ZOOMIN, // WID_TN_ZOOMIN
2172  SPR_IMG_ZOOMOUT, // WID_TN_ZOOMOUT
2173  SPR_IMG_BUILDRAIL, // WID_TN_RAILS
2174  SPR_IMG_BUILDROAD, // WID_TN_ROADS
2175  SPR_IMG_BUILDTRAMS, // WID_TN_TRAMS
2176  SPR_IMG_BUILDWATER, // WID_TN_WATER
2177  SPR_IMG_BUILDAIR, // WID_TN_AIR
2178  SPR_IMG_LANDSCAPING, // WID_TN_LANDSCAPE
2179  SPR_IMG_MUSIC, // WID_TN_MUSIC_SOUND
2180  SPR_IMG_MESSAGES, // WID_TN_MESSAGES
2181  SPR_IMG_QUERY, // WID_TN_HELP
2182  SPR_IMG_SWITCH_TOOLBAR, // WID_TN_SWITCH_BAR
2183  };
2184 
2185  auto hor = std::make_unique<NWidgetMainToolbarContainer>();
2186  for (WidgetID i = 0; i < WID_TN_END; i++) {
2187  switch (i) {
2188  case WID_TN_SMALL_MAP:
2189  case WID_TN_FINANCES:
2190  case WID_TN_VEHICLE_START:
2191  case WID_TN_ZOOM_IN:
2193  case WID_TN_MUSIC_SOUND:
2194  hor->Add(std::make_unique<NWidgetSpacer>(0, 0));
2195  break;
2196  }
2197  auto leaf = std::make_unique<NWidgetLeaf>(i == WID_TN_SAVE ? WWT_IMGBTN_2 : WWT_IMGBTN, COLOUR_GREY, i, toolbar_button_sprites[i], STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i);
2198  leaf->SetMinimalSize(20, 20);
2199  hor->Add(std::move(leaf));
2200  }
2201 
2202  return hor;
2203 }
2204 
2205 static constexpr NWidgetPart _nested_toolbar_normal_widgets[] = {
2207 };
2208 
2209 static WindowDesc _toolb_normal_desc(
2210  WDP_MANUAL, nullptr, 0, 0,
2213  _nested_toolbar_normal_widgets,
2214  &MainToolbarWindow::hotkeys
2215 );
2216 
2217 
2218 /* --- Toolbar handling for the scenario editor */
2219 
2220 static MenuClickedProc * const _scen_toolbar_dropdown_procs[] = {
2221  nullptr, // 0
2222  nullptr, // 1
2223  MenuClickSettings, // 2
2224  MenuClickSaveLoad, // 3
2225  nullptr, // 4
2226  nullptr, // 5
2227  nullptr, // 6
2228  nullptr, // 7
2229  MenuClickMap, // 8
2230  nullptr, // 9
2231  nullptr, // 10
2232  nullptr, // 11
2233  ToolbarScenGenTown, // 12
2234  nullptr, // 13
2235  ToolbarScenBuildRoad, // 14
2236  ToolbarScenBuildTram, // 15
2237  nullptr, // 16
2238  nullptr, // 17
2239  nullptr, // 18
2240  nullptr, // 19
2241  MenuClickMusicWindow, // 20
2242  MenuClickHelp, // 21
2243  nullptr, // 22
2244 };
2245 
2246 static ToolbarButtonProc * const _scen_toolbar_button_procs[] = {
2247  ToolbarPauseClick,
2251  ToolbarBtn_NULL,
2253  ToolbarScenDateBackward,
2254  ToolbarScenDateForward,
2255  ToolbarScenMapTownDir,
2256  ToolbarZoomInClick,
2257  ToolbarZoomOutClick,
2258  ToolbarScenGenLand,
2259  ToolbarScenGenTownClick,
2260  ToolbarScenGenIndustry,
2261  ToolbarScenBuildRoadClick,
2262  ToolbarScenBuildTramClick,
2263  ToolbarScenBuildDocks,
2264  ToolbarScenPlantTrees,
2265  ToolbarScenPlaceSign,
2266  ToolbarBtn_NULL,
2267  ToolbarMusicClick,
2268  ToolbarHelpClick,
2269  ToolbarSwitchClick,
2270 };
2271 
2272 enum MainToolbarEditorHotkeys {
2273  MTEHK_PAUSE,
2274  MTEHK_FASTFORWARD,
2275  MTEHK_SETTINGS,
2276  MTEHK_SAVEGAME,
2277  MTEHK_GENLAND,
2278  MTEHK_GENTOWN,
2279  MTEHK_GENINDUSTRY,
2280  MTEHK_BUILD_ROAD,
2281  MTEHK_BUILD_TRAM,
2282  MTEHK_BUILD_DOCKS,
2283  MTEHK_BUILD_TREES,
2284  MTEHK_SIGN,
2285  MTEHK_MUSIC,
2286  MTEHK_LANDINFO,
2287  MTEHK_SMALL_SCREENSHOT,
2288  MTEHK_ZOOMEDIN_SCREENSHOT,
2289  MTEHK_DEFAULTZOOM_SCREENSHOT,
2290  MTEHK_GIANT_SCREENSHOT,
2291  MTEHK_ZOOM_IN,
2292  MTEHK_ZOOM_OUT,
2293  MTEHK_TERRAFORM,
2294  MTEHK_SMALLMAP,
2295  MTEHK_EXTRA_VIEWPORT,
2296 };
2297 
2300  {
2301  this->InitNested(0);
2302 
2303  _last_started_action = CBF_NONE;
2304  CLRBITS(this->flags, WF_WHITE_BORDER);
2305  PositionMainToolbar(this);
2307  }
2308 
2309  void FindWindowPlacementAndResize([[maybe_unused]] int def_width, [[maybe_unused]] int def_height) override
2310  {
2312  }
2313 
2314  void OnPaint() override
2315  {
2320 
2321  this->DrawWidgets();
2322  }
2323 
2324  void SetStringParameters(WidgetID widget) const override
2325  {
2326  switch (widget) {
2327  case WID_TE_DATE:
2329  break;
2330  }
2331  }
2332 
2333  void DrawWidget(const Rect &r, WidgetID widget) const override
2334  {
2335  switch (widget) {
2336  case WID_TE_SPACER: {
2337  int height = r.Height();
2338  if (height > 2 * GetCharacterHeight(FS_NORMAL)) {
2339  DrawString(r.left, r.right, height / 2 - GetCharacterHeight(FS_NORMAL), STR_SCENEDIT_TOOLBAR_OPENTTD, TC_FROMSTRING, SA_HOR_CENTER);
2340  DrawString(r.left, r.right, height / 2, STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR, TC_FROMSTRING, SA_HOR_CENTER);
2341  } else {
2342  DrawString(r.left, r.right, (height - GetCharacterHeight(FS_NORMAL)) / 2, STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR, TC_FROMSTRING, SA_HOR_CENTER);
2343  }
2344  break;
2345  }
2346  }
2347  }
2348 
2349  void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override
2350  {
2351  switch (widget) {
2352  case WID_TE_SPACER:
2353  size.width = std::max(GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_OPENTTD).width, GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR).width) + padding.width;
2354  break;
2355 
2356  case WID_TE_DATE:
2358  size = GetStringBoundingBox(STR_JUST_DATE_LONG);
2359  break;
2360  }
2361  }
2362 
2363  void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
2364  {
2365  if (_game_mode == GM_MENU) return;
2366  CallBackFunction cbf = _scen_toolbar_button_procs[widget](this);
2367  if (cbf != CBF_NONE) _last_started_action = cbf;
2368  }
2369 
2370  void OnDropdownSelect(WidgetID widget, int index) override
2371  {
2372  CallBackFunction cbf = _scen_toolbar_dropdown_procs[widget](index);
2373  if (cbf != CBF_NONE) _last_started_action = cbf;
2374  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
2375  }
2376 
2377  EventState OnHotkey(int hotkey) override
2378  {
2379  CallBackFunction cbf = CBF_NONE;
2380  switch (hotkey) {
2381  case MTEHK_PAUSE: ToolbarPauseClick(this); break;
2382  case MTEHK_FASTFORWARD: ToolbarFastForwardClick(this); break;
2383  case MTEHK_SETTINGS: ShowGameOptions(); break;
2384  case MTEHK_SAVEGAME: MenuClickSaveLoad(); break;
2385  case MTEHK_GENLAND: ToolbarScenGenLand(this); break;
2386  case MTEHK_GENTOWN: ToolbarScenGenTownClick(this); break;
2387  case MTEHK_GENINDUSTRY: ToolbarScenGenIndustry(this); break;
2388  case MTEHK_BUILD_ROAD: ToolbarScenBuildRoadClick(this); break;
2389  case MTEHK_BUILD_TRAM: ToolbarScenBuildTramClick(this); break;
2390  case MTEHK_BUILD_DOCKS: ToolbarScenBuildDocks(this); break;
2391  case MTEHK_BUILD_TREES: ToolbarScenPlantTrees(this); break;
2392  case MTEHK_SIGN: cbf = ToolbarScenPlaceSign(this); break;
2393  case MTEHK_MUSIC: ShowMusicWindow(); break;
2394  case MTEHK_LANDINFO: cbf = PlaceLandBlockInfo(); break;
2395  case MTEHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break;
2396  case MTEHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break;
2397  case MTEHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break;
2398  case MTEHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break;
2399  case MTEHK_ZOOM_IN: ToolbarZoomInClick(this); break;
2400  case MTEHK_ZOOM_OUT: ToolbarZoomOutClick(this); break;
2401  case MTEHK_TERRAFORM: ShowEditorTerraformToolbar(); break;
2402  case MTEHK_SMALLMAP: ShowSmallMap(); break;
2403  case MTEHK_EXTRA_VIEWPORT: ShowExtraViewportWindowForTileUnderCursor(); break;
2404  default: return ES_NOT_HANDLED;
2405  }
2406  if (cbf != CBF_NONE) _last_started_action = cbf;
2407  return ES_HANDLED;
2408  }
2409 
2410  void OnPlaceObject([[maybe_unused]] Point pt, TileIndex tile) override
2411  {
2412  switch (_last_started_action) {
2413  case CBF_PLACE_SIGN:
2414  PlaceProc_Sign(tile);
2415  break;
2416 
2417  case CBF_PLACE_LANDINFO:
2418  ShowLandInfo(tile);
2419  break;
2420 
2421  default: NOT_REACHED();
2422  }
2423  }
2424 
2425  void OnPlaceObjectAbort() override
2426  {
2427  _last_started_action = CBF_NONE;
2428  }
2429 
2430  void OnTimeout() override
2431  {
2435  }
2436 
2438  IntervalTimer<TimerWindow> refresh_interval = {std::chrono::milliseconds(30), [this](auto) {
2439  if (this->IsWidgetLowered(WID_TE_PAUSE) != !!_pause_mode) {
2441  this->SetDirty();
2442  }
2443 
2444  if (this->IsWidgetLowered(WID_TE_FAST_FORWARD) != (_game_speed != 100)) {
2446  this->SetDirty();
2447  }
2448  }};
2449 
2455  void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
2456  {
2457  if (!gui_scope) return;
2459  }
2460 
2461  void OnQueryTextFinished(std::optional<std::string> str) override
2462  {
2463  /* Was 'cancel' pressed? */
2464  if (!str.has_value()) return;
2465 
2467  if (!str->empty()) {
2468  value = atoi(str->c_str());
2469  } else {
2470  /* An empty string means revert to the default */
2471  value = CalendarTime::DEF_START_YEAR.base();
2472  }
2473  SetStartingYear(value);
2474 
2475  this->SetDirty();
2476  }
2477 
2478  static inline HotkeyList hotkeys{"scenedit_maintoolbar", {
2479  Hotkey({WKC_F1, WKC_PAUSE}, "pause", MTEHK_PAUSE),
2480  Hotkey(0, "fastforward", MTEHK_FASTFORWARD),
2481  Hotkey(WKC_F2, "settings", MTEHK_SETTINGS),
2482  Hotkey(WKC_F3, "saveload", MTEHK_SAVEGAME),
2483  Hotkey(WKC_F4, "gen_land", MTEHK_GENLAND),
2484  Hotkey(WKC_F5, "gen_town", MTEHK_GENTOWN),
2485  Hotkey(WKC_F6, "gen_industry", MTEHK_GENINDUSTRY),
2486  Hotkey(WKC_F7, "build_road", MTEHK_BUILD_ROAD),
2487  Hotkey(0, "build_tram", MTEHK_BUILD_TRAM),
2488  Hotkey(WKC_F8, "build_docks", MTEHK_BUILD_DOCKS),
2489  Hotkey(WKC_F9, "build_trees", MTEHK_BUILD_TREES),
2490  Hotkey(WKC_F10, "build_sign", MTEHK_SIGN),
2491  Hotkey(WKC_F11, "music", MTEHK_MUSIC),
2492  Hotkey(WKC_F12, "land_info", MTEHK_LANDINFO),
2493  Hotkey(WKC_CTRL | 'S', "small_screenshot", MTEHK_SMALL_SCREENSHOT),
2494  Hotkey(WKC_CTRL | 'P', "zoomedin_screenshot", MTEHK_ZOOMEDIN_SCREENSHOT),
2495  Hotkey(WKC_CTRL | 'D', "defaultzoom_screenshot", MTEHK_DEFAULTZOOM_SCREENSHOT),
2496  Hotkey(0, "giant_screenshot", MTEHK_GIANT_SCREENSHOT),
2497  Hotkey({WKC_NUM_PLUS, WKC_EQUALS, WKC_SHIFT | WKC_EQUALS, WKC_SHIFT | WKC_F5}, "zoomin", MTEHK_ZOOM_IN),
2498  Hotkey({WKC_NUM_MINUS, WKC_MINUS, WKC_SHIFT | WKC_MINUS, WKC_SHIFT | WKC_F6}, "zoomout", MTEHK_ZOOM_OUT),
2499  Hotkey('L', "terraform", MTEHK_TERRAFORM),
2500  Hotkey('M', "smallmap", MTEHK_SMALLMAP),
2501  Hotkey('V', "extra_viewport", MTEHK_EXTRA_VIEWPORT),
2502  }};
2503 };
2504 
2505 static constexpr NWidgetPart _nested_toolb_scen_inner_widgets[] = {
2506  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_PAUSE), SetDataTip(SPR_IMG_PAUSE, STR_TOOLBAR_TOOLTIP_PAUSE_GAME),
2507  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_FAST_FORWARD), SetDataTip(SPR_IMG_FASTFORWARD, STR_TOOLBAR_TOOLTIP_FORWARD),
2508  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SETTINGS), SetDataTip(SPR_IMG_SETTINGS, STR_TOOLBAR_TOOLTIP_OPTIONS),
2509  NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_TE_SAVE), SetDataTip(SPR_IMG_SAVE, STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO),
2511  NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_SPACER), EndContainer(),
2513  NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_DATE_PANEL),
2514  NWidget(NWID_HORIZONTAL), SetPIP(2, 2, 2), SetPadding(1),
2515  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_BACKWARD), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1),
2516  NWidget(WWT_TEXT, COLOUR_GREY, WID_TE_DATE), SetDataTip(STR_JUST_DATE_LONG, STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE), SetTextStyle(TC_WHITE), SetAlignment(SA_CENTER), SetFill(0, 1),
2517  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_FORWARD), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1),
2518  EndContainer(),
2519  EndContainer(),
2521  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SMALL_MAP), SetDataTip(SPR_IMG_SMALLMAP, STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY),
2523  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_IN), SetDataTip(SPR_IMG_ZOOMIN, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN),
2524  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_OUT), SetDataTip(SPR_IMG_ZOOMOUT, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT),
2526  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_LAND_GENERATE), SetDataTip(SPR_IMG_LANDSCAPING, STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION),
2527  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TOWN_GENERATE), SetDataTip(SPR_IMG_TOWN, STR_SCENEDIT_TOOLBAR_TOWN_GENERATION),
2528  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_INDUSTRY), SetDataTip(SPR_IMG_INDUSTRY, STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION),
2529  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_ROADS), SetDataTip(SPR_IMG_BUILDROAD, STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION),
2530  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_TRAMS), SetDataTip(SPR_IMG_BUILDTRAMS, STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION),
2531  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_WATER), SetDataTip(SPR_IMG_BUILDWATER, STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS),
2532  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TREES), SetDataTip(SPR_IMG_PLANTTREES, STR_SCENEDIT_TOOLBAR_PLANT_TREES),
2533  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_SIGNS), SetDataTip(SPR_IMG_SIGN, STR_SCENEDIT_TOOLBAR_PLACE_SIGN),
2535  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_MUSIC_SOUND), SetDataTip(SPR_IMG_MUSIC, STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW),
2536  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_HELP), SetDataTip(SPR_IMG_QUERY, STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION),
2537  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SWITCH_BAR), SetDataTip(SPR_IMG_SWITCH_TOOLBAR, STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR),
2538 };
2539 
2540 static std::unique_ptr<NWidgetBase> MakeScenarioToolbar()
2541 {
2542  return MakeNWidgets(_nested_toolb_scen_inner_widgets, std::make_unique<NWidgetScenarioToolbarContainer>());
2543 }
2544 
2545 static constexpr NWidgetPart _nested_toolb_scen_widgets[] = {
2546  NWidgetFunction(MakeScenarioToolbar),
2547 };
2548 
2549 static WindowDesc _toolb_scen_desc(
2550  WDP_MANUAL, nullptr, 0, 0,
2553  _nested_toolb_scen_widgets,
2554  &ScenarioEditorToolbarWindow::hotkeys
2555 );
2556 
2559 {
2560  /* Clean old GUI values; railtype is (re)set by rail_gui.cpp */
2561  _last_built_roadtype = ROADTYPE_ROAD;
2562  _last_built_tramtype = ROADTYPE_TRAM;
2563 
2564  if (_game_mode == GM_EDITOR) {
2565  new ScenarioEditorToolbarWindow(_toolb_scen_desc);
2566  } else {
2567  new MainToolbarWindow(_toolb_normal_desc);
2568  }
2569 }
ShowScriptDebugWindow
Window * ShowScriptDebugWindow(CompanyID show_company, bool new_window)
Open the Script debug window and select the given company.
Definition: script_gui.cpp:1303
SaveLoadEditorMenuEntries
SaveLoadEditorMenuEntries
SaveLoad entries in scenario editor mode.
Definition: toolbar_gui.cpp:324
DO_SHOW_COMPETITOR_SIGNS
@ DO_SHOW_COMPETITOR_SIGNS
Display signs, station names and waypoint names of opponent companies. Buoys and oilrig-stations are ...
Definition: openttd.h:52
ShowNewGRFSettings
void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfig **config)
Setup the NewGRF gui.
Definition: newgrf_gui.cpp:2020
game.hpp
ES_HANDLED
@ ES_HANDLED
The passed event is handled.
Definition: window_type.h:738
Window::timeout_timer
uint8_t timeout_timer
Timer value of the WF_TIMEOUT for flags.
Definition: window_gui.h:309
NWidgetToolbarContainer::AssignSizePosition
void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override
Definition: toolbar_gui.cpp:1394
MenuClickFinances
static CallBackFunction MenuClickFinances(int index)
Handle click on the entry in the finances overview menu.
Definition: toolbar_gui.cpp:533
_display_opt
uint8_t _display_opt
What do we want to draw/do?
Definition: transparency_gui.cpp:26
SetFill
constexpr NWidgetPart SetFill(uint16_t fill_x, uint16_t fill_y)
Widget part function for setting filling.
Definition: widget_type.h:1183
ShowSpriteAlignerWindow
void ShowSpriteAlignerWindow()
Show the window for aligning sprites.
Definition: newgrf_debug_gui.cpp:1213
NWidgetContainer::children
std::vector< std::unique_ptr< NWidgetBase > > children
Child widgets in contaier.
Definition: widget_type.h:478
ShowIndustryCargoesWindow
void ShowIndustryCargoesWindow()
Open the industry and cargoes window with an industry.
Definition: industry_gui.cpp:3223
sound_func.h
_last_started_action
static CallBackFunction _last_started_action
Last started user action.
Definition: toolbar_gui.cpp:94
WWT_IMGBTN_2
@ WWT_IMGBTN_2
(Toggle) Button with diff image when clicked
Definition: widget_type.h:55
SetBit
constexpr T SetBit(T &x, const uint8_t y)
Set a bit in a variable.
Definition: bitmath_func.hpp:121
WID_TN_GOAL
@ WID_TN_GOAL
Goal menu.
Definition: toolbar_widget.h:26
FT_SCENARIO
@ FT_SCENARIO
old or new scenario
Definition: fileio_type.h:19
MenuClickTown
static CallBackFunction MenuClickTown(int index)
Handle click on one of the entries in the Town menu.
Definition: toolbar_gui.cpp:469
Rect::Height
int Height() const
Get height of Rect.
Definition: geometry_type.hpp:91
vehicle_gui.h
TO_HOUSES
@ TO_HOUSES
town buildings
Definition: transparency.h:25
ShowGoalsList
void ShowGoalsList(CompanyID company)
Open a goal list window.
Definition: goal_gui.cpp:316
GetRailTypeDropDownList
DropDownList GetRailTypeDropDownList(bool for_replacement, bool all_option)
Create a drop down list for all the rail types of the local company.
Definition: rail_gui.cpp:2011
WID_TN_SETTINGS
@ WID_TN_SETTINGS
Settings menu.
Definition: toolbar_widget.h:17
ShowExtraViewportWindow
void ShowExtraViewportWindow(TileIndex tile=INVALID_TILE)
Show a new Extra Viewport window.
Definition: viewport_gui.cpp:156
HotkeyList
List of hotkeys for a window.
Definition: hotkeys.h:37
WID_TN_TRAINS
@ WID_TN_TRAINS
Train menu.
Definition: toolbar_widget.h:31
GUISettings::newgrf_developer_tools
bool newgrf_developer_tools
activate NewGRF developer tools and allow modifying NewGRFs in an existing game
Definition: settings_type.h:224
WID_TE_SWITCH_BAR
@ WID_TE_SWITCH_BAR
Only available when toolbar has been split to switch between different subsets.
Definition: toolbar_widget.h:75
MenuClickIndustry
static CallBackFunction MenuClickIndustry(int index)
Handle click on the entry in the Industry menu.
Definition: toolbar_gui.cpp:726
Dimension
Dimensions (a width and height) of a rectangle in 2D.
Definition: geometry_type.hpp:30
ZOOM_OUT
@ ZOOM_OUT
Zoom out (get helicopter view).
Definition: viewport_type.h:78
command_func.h
ROADTYPE_ROAD
@ ROADTYPE_ROAD
Basic road type.
Definition: road_type.h:27
PositionMainToolbar
int PositionMainToolbar(Window *w)
(Re)position main toolbar window at the screen.
Definition: window.cpp:3379
dropdown_func.h
ShowBuildAirToolbar
Window * ShowBuildAirToolbar()
Open the build airport toolbar window.
Definition: airport_gui.cpp:226
toolbar_gui.h
smallmap_gui.h
WID_TN_AIR
@ WID_TN_AIR
Airport building toolbar.
Definition: toolbar_widget.h:42
WID_TN_PAUSE
@ WID_TN_PAUSE
Pause the game.
Definition: toolbar_widget.h:15
timer_game_calendar.h
WID_TN_RAILS
@ WID_TN_RAILS
Rail building menu.
Definition: toolbar_widget.h:38
signs_func.h
MainToolbarWindow::OnInvalidateData
void OnInvalidateData([[maybe_unused]] int data=0, [[maybe_unused]] bool gui_scope=true) override
Some data on this window has become invalid.
Definition: toolbar_gui.cpp:2098
company_gui.h
Window::SetWidgetDirty
void SetWidgetDirty(WidgetID widget_index) const
Invalidate a widget, i.e.
Definition: window.cpp:551
INVALID_COMPANY
@ INVALID_COMPANY
An invalid company.
Definition: company_type.h:30
SetAlignment
constexpr NWidgetPart SetAlignment(StringAlignment align)
Widget part function for setting the alignment of text/images.
Definition: widget_type.h:1172
StringID
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Definition: strings_type.h:16
WWT_IMGBTN
@ WWT_IMGBTN
(Toggle) Button with image
Definition: widget_type.h:54
Window::viewport
ViewportData * viewport
Pointer to viewport data, if present.
Definition: window_gui.h:321
_network_server
bool _network_server
network-server is active
Definition: network.cpp:66
league_gui.h
NWidgetToolbarContainer::Draw
void Draw(const Window *w) override
Definition: toolbar_gui.cpp:1458
WID_TN_FAST_FORWARD
@ WID_TN_FAST_FORWARD
Fast forward the game.
Definition: toolbar_widget.h:16
DropDownList
std::vector< std::unique_ptr< const DropDownListItem > > DropDownList
A drop down list is a collection of drop down list items.
Definition: dropdown_type.h:50
IntervalTimer< TimerWindow >
LinkGraphSchedule::instance
static LinkGraphSchedule instance
Static instance of LinkGraphSchedule.
Definition: linkgraphschedule.h:52
ToolbarSaveClick
static CallBackFunction ToolbarSaveClick(Window *w)
Handle click on Save button in toolbar in normal game mode.
Definition: toolbar_gui.cpp:349
Owner
Owner
Enum for all companies/owners.
Definition: company_type.h:18
IsTransparencySet
bool IsTransparencySet(TransparencyOption to)
Check if the transparency option bit is set and if we aren't in the game menu (there's never transpar...
Definition: transparency.h:48
RailType
RailType
Enumeration for all possible railtypes.
Definition: rail_type.h:27
NWID_HORIZONTAL
@ NWID_HORIZONTAL
Horizontal container.
Definition: widget_type.h:77
WID_TN_SUBSIDIES
@ WID_TN_SUBSIDIES
Subsidy menu.
Definition: toolbar_widget.h:21
VEH_TRAIN
@ VEH_TRAIN
Train vehicle type.
Definition: vehicle_type.h:24
WID_TE_DATE_FORWARD
@ WID_TE_DATE_FORWARD
Increase the date of the scenario.
Definition: toolbar_widget.h:60
ZOOM_NONE
@ ZOOM_NONE
Hack, used to update the button status.
Definition: viewport_type.h:79
MenuClickBuildWater
static CallBackFunction MenuClickBuildWater(int)
Handle click on the entry in the Build Waterways menu.
Definition: toolbar_gui.cpp:931
GRMN_OPERATING_PROFIT_GRAPH
static const int GRMN_OPERATING_PROFIT_GRAPH
Enum for the League Toolbar's and Graph Toolbar's related buttons.
Definition: toolbar_gui.cpp:621
misc_cmd.h
ai_gui.hpp
LeagueTable
Struct about custom league tables.
Definition: league_base.h:52
EndContainer
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
Definition: widget_type.h:1193
WC_SIGN_LIST
@ WC_SIGN_LIST
Sign list; Window numbers:
Definition: window_type.h:278
NetworkServerDoMove
void NetworkServerDoMove(ClientID client_id, CompanyID company_id)
Handle the tid-bits of moving a client from one company to another.
Definition: network_server.cpp:1983
WDF_NO_FOCUS
@ WDF_NO_FOCUS
This window won't get focus/make any other window lose focus when click.
Definition: window_gui.h:208
ToolbarScenSaveOrLoad
static CallBackFunction ToolbarScenSaveOrLoad(Window *w)
Handle click on SaveLoad button in toolbar in the scenario editor.
Definition: toolbar_gui.cpp:362
_ctrl_pressed
bool _ctrl_pressed
Is Ctrl pressed?
Definition: gfx.cpp:38
FILLRECT_CHECKER
@ FILLRECT_CHECKER
Draw only every second pixel, used for greying-out.
Definition: gfx_type.h:301
SND_15_BEEP
@ SND_15_BEEP
19 == 0x13 GUI button click
Definition: sound_type.h:58
ShowMessageHistory
void ShowMessageHistory()
Display window with news messages history.
Definition: news_gui.cpp:1208
vehicle_base.h
DoZoomInOutWindow
bool DoZoomInOutWindow(ZoomStateChange how, Window *w)
Zooms a viewport in a window in or out.
Definition: main_gui.cpp:93
screenshot_gui.h
TF_FORBIDDEN
@ TF_FORBIDDEN
Forbidden.
Definition: town_type.h:96
VEH_ROAD
@ VEH_ROAD
Road vehicle type.
Definition: vehicle_type.h:25
ShowGameOptions
void ShowGameOptions()
Open the game options window.
Definition: settings_gui.cpp:1199
ToolbarFastForwardClick
static CallBackFunction ToolbarFastForwardClick(Window *)
Toggle fast forward mode.
Definition: toolbar_gui.cpp:216
ShowLandInfo
void ShowLandInfo(TileIndex tile)
Show land information window.
Definition: misc_gui.cpp:379
CeilDiv
constexpr uint CeilDiv(uint a, uint b)
Computes ceil(a / b) for non-negative a and b.
Definition: math_func.hpp:320
goal_base.h
ShowGameSettings
void ShowGameSettings()
Open advanced settings window.
Definition: settings_gui.cpp:2910
_settings_client
ClientSettings _settings_client
The current settings for this game.
Definition: settings.cpp:56
SC_ZOOMEDIN
@ SC_ZOOMEDIN
Fully zoomed in screenshot of the visible area.
Definition: screenshot.h:21
ShowBuildRailToolbar
Window * ShowBuildRailToolbar(RailType railtype)
Open the build rail toolbar window for a specific rail type.
Definition: rail_gui.cpp:918
CallBackFunction
CallBackFunction
Callback functions.
Definition: toolbar_gui.cpp:88
newgrf_debug.h
StrongType::Typedef
Templated helper to make a type-safe 'typedef' representing a single POD value.
Definition: strong_typedef_type.hpp:150
network_gui.h
MainToolbarWindow::OnHotkey
EventState OnHotkey(int hotkey) override
A hotkey has been pressed.
Definition: toolbar_gui.cpp:2001
NWidgetScenarioToolbarContainer
Container for the scenario editor's toolbar.
Definition: toolbar_gui.cpp:1802
ScenarioEditorToolbarWindow::OnHotkey
EventState OnHotkey(int hotkey) override
A hotkey has been pressed.
Definition: toolbar_gui.cpp:2377
NWidgetFunction
constexpr NWidgetPart NWidgetFunction(NWidgetFunctionType *func_ptr)
Obtain a nested widget (sub)tree from an external source.
Definition: widget_type.h:1332
MenuClickGraphsOrLeague
static CallBackFunction MenuClickGraphsOrLeague(int index)
Handle click on the entry in the Graphs or CompanyLeague.
Definition: toolbar_gui.cpp:684
WID_TE_DATE
@ WID_TE_DATE
The date of the scenario.
Definition: toolbar_widget.h:58
MenuClickMap
static CallBackFunction MenuClickMap(int index)
Handle click on one of the entries in the Map menu.
Definition: toolbar_gui.cpp:438
fios.h
ScenarioEditorToolbarWindow::refresh_interval
IntervalTimer< TimerWindow > refresh_interval
Refresh the state of pause / game-speed on a regular interval.
Definition: toolbar_gui.cpp:2438
MenuClickMusicWindow
static CallBackFunction MenuClickMusicWindow(int)
Handle click on the entry in the Music menu.
Definition: toolbar_gui.cpp:1001
NWidgetBase::smallest_y
uint smallest_y
Smallest vertical size of the widget in a filled window.
Definition: widget_type.h:243
MenuClickBuildTram
static CallBackFunction MenuClickBuildTram(int index)
Handle click on the entry in the Build Tram menu.
Definition: toolbar_gui.cpp:908
WID_TN_STATIONS
@ WID_TN_STATIONS
Station menu.
Definition: toolbar_widget.h:22
NWidgetPart
Partial widget specification to allow NWidgets to be written nested.
Definition: widget_type.h:1077
ShowExtraViewportWindowForTileUnderCursor
void ShowExtraViewportWindowForTileUnderCursor()
Show a new Extra Viewport window.
Definition: viewport_gui.cpp:171
WID_TN_COMPANIES
@ WID_TN_COMPANIES
Company menu.
Definition: toolbar_widget.h:24
toolbar_widget.h
DropDownListCompanyItem
Company name list item, with company-colour icon, name, and lock components.
Definition: toolbar_gui.cpp:99
DropDownIcon
Drop down icon component.
Definition: dropdown_common_type.h:111
textbuf_gui.h
GameSettings::game_creation
GameCreationSettings game_creation
settings used during the creation of a game (map)
Definition: settings_type.h:594
WID_TN_TRAMS
@ WID_TN_TRAMS
Tram building menu.
Definition: toolbar_widget.h:40
OptionMenuEntries
OptionMenuEntries
Game Option button menu entries.
Definition: toolbar_gui.cpp:229
MainToolbarWindow::OnTimeout
void OnTimeout() override
Called when this window's timeout has been reached.
Definition: toolbar_gui.cpp:2084
screenshot.h
WindowDesc
High level window description.
Definition: window_gui.h:162
WidgetID
int WidgetID
Widget ID.
Definition: window_type.h:18
WID_TN_SAVE
@ WID_TN_SAVE
Save menu.
Definition: toolbar_widget.h:18
CTMN_SPECTATE
static const int CTMN_SPECTATE
Become spectator.
Definition: toolbar_gui.cpp:145
window_gui.h
DO_FULL_ANIMATION
@ DO_FULL_ANIMATION
Perform palette animation.
Definition: openttd.h:49
WID_TE_PAUSE
@ WID_TE_PAUSE
Pause the game.
Definition: toolbar_widget.h:53
PopupMainToolbarMenu
static void PopupMainToolbarMenu(Window *w, WidgetID widget, DropDownList &&list, int def)
Pop up a generic text only menu.
Definition: toolbar_gui.cpp:116
ShowCompanyFinances
void ShowCompanyFinances(CompanyID company)
Open the finances window of a company.
Definition: company_gui.cpp:546
MenuClickBuildAir
static CallBackFunction MenuClickBuildAir(int)
Handle click on the entry in the Build Air menu.
Definition: toolbar_gui.cpp:953
SetPadding
constexpr NWidgetPart SetPadding(uint8_t top, uint8_t right, uint8_t bottom, uint8_t left)
Widget part function for setting additional space around a widget.
Definition: widget_type.h:1230
ZOOM_IN
@ ZOOM_IN
Zoom in (get more detailed view).
Definition: viewport_type.h:77
ROADTYPES_NONE
@ ROADTYPES_NONE
No roadtypes.
Definition: road_type.h:39
ScenarioEditorToolbarWindow::OnPlaceObjectAbort
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
Definition: toolbar_gui.cpp:2425
COMPANY_FIRST
@ COMPANY_FIRST
First company, same as owner.
Definition: company_type.h:22
PC_VERY_DARK_RED
static const uint8_t PC_VERY_DARK_RED
Almost-black red palette colour.
Definition: palette_func.h:72
_roadtypes_type
RoadTypes _roadtypes_type
Bitmap of road/tram types.
Definition: road_cmd.cpp:62
SLO_LOAD
@ SLO_LOAD
File is being loaded.
Definition: fileio_type.h:55
GRMN_COMPANY_VALUE_GRAPH
static const int GRMN_COMPANY_VALUE_GRAPH
Show company value graph.
Definition: toolbar_gui.cpp:625
WID_TE_WATER
@ WID_TE_WATER
Water building toolbar.
Definition: toolbar_widget.h:69
ShowSignList
Window * ShowSignList()
Open the sign list window.
Definition: signs_gui.cpp:392
Window::resize
ResizeInfo resize
Resize information.
Definition: window_gui.h:317
WKC_EQUALS
@ WKC_EQUALS
= Equals
Definition: gfx_type.h:98
LinkGraphSchedule::ShiftDates
void ShiftDates(TimerGameEconomy::Date interval)
Shift all dates (join dates and edge annotations) of link graphs and link graph jobs by the number of...
Definition: linkgraphschedule.cpp:135
SLO_SAVE
@ SLO_SAVE
File is being saved.
Definition: fileio_type.h:56
CTMN_CLIENT_LIST
static const int CTMN_CLIENT_LIST
Enum for the Company Toolbar's network related buttons.
Definition: toolbar_gui.cpp:144
WID_TE_TOWN_GENERATE
@ WID_TE_TOWN_GENERATE
Town building window.
Definition: toolbar_widget.h:65
tilehighlight_func.h
ClientSettings::sound
SoundSettings sound
sound effect settings
Definition: settings_type.h:614
ToolbarScenBuildTram
static CallBackFunction ToolbarScenBuildTram(int index)
Handle click on the entry in the Build Tram menu.
Definition: toolbar_gui.cpp:1271
WID_TE_HELP
@ WID_TE_HELP
Help menu.
Definition: toolbar_widget.h:74
FS_NORMAL
@ FS_NORMAL
Index of the normal font in the font tables.
Definition: gfx_type.h:209
Window::InitNested
void InitNested(WindowNumber number=0)
Perform complete initialization of the Window with nested widgets, to allow use.
Definition: window.cpp:1746
NWidgetBase::type
WidgetType type
Type of the widget / nested widget.
Definition: widget_type.h:234
SetStartingYear
void SetStartingYear(TimerGameCalendar::Year year)
Set the starting year for a scenario.
Definition: toolbar_gui.cpp:1112
Window::HandleButtonClick
void HandleButtonClick(WidgetID widget)
Do all things to make a button look clicked and mark it to be unclicked in a few ticks.
Definition: window.cpp:590
Window::height
int height
Height of the window (number of pixels down in y direction)
Definition: window_gui.h:315
_toolbar_width
uint _toolbar_width
Width of the toolbar, shared by statusbar.
Definition: toolbar_gui.cpp:74
WF_WHITE_BORDER
@ WF_WHITE_BORDER
Window white border counter bit mask.
Definition: window_gui.h:239
game_gui.hpp
ShowCompanyStations
void ShowCompanyStations(CompanyID company)
Opens window with list of company's stations.
Definition: station_gui.cpp:814
SaveLoadNormalMenuEntries
SaveLoadNormalMenuEntries
SaveLoad entries in normal game mode.
Definition: toolbar_gui.cpp:336
Window::SetDirty
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
Definition: window.cpp:940
highscore.h
MenuClickSubsidies
static CallBackFunction MenuClickSubsidies(int)
Handle click on the entry in the Subsidies menu.
Definition: toolbar_gui.cpp:493
NWidgetBase::smallest_x
uint smallest_x
Smallest horizontal size of the widget in a filled window.
Definition: widget_type.h:242
NWidgetScenarioToolbarContainer::SetupSmallestSize
void SetupSmallestSize(Window *w) override
Definition: toolbar_gui.cpp:1805
TimerGameCalendar::ConvertYMDToDate
static Date ConvertYMDToDate(Year year, Month month, Day day)
Converts a tuple of Year, Month and Day to a Date.
Definition: timer_game_calendar.cpp:55
WID_TE_DATE_PANEL
@ WID_TE_DATE_PANEL
Container for the date widgets.
Definition: toolbar_widget.h:72
GRMN_CARGO_PAYMENT_RATES
static const int GRMN_CARGO_PAYMENT_RATES
Show cargo payment rates graph.
Definition: toolbar_gui.cpp:626
ES_NOT_HANDLED
@ ES_NOT_HANDLED
The passed event is not handled.
Definition: window_type.h:739
MenuClickShowShips
static CallBackFunction MenuClickShowShips(int index)
Handle click on the entry in the Ships menu.
Definition: toolbar_gui.cpp:801
NWidgetBase
Baseclass for nested widgets.
Definition: widget_type.h:146
AllocateToolbar
void AllocateToolbar()
Allocate the toolbar.
Definition: toolbar_gui.cpp:2558
NWidgetContainer::Draw
void Draw(const Window *w) override
Definition: widget.cpp:1211
ToolbarOptionsClick
static CallBackFunction ToolbarOptionsClick(Window *w)
Handle click on Options button in toolbar.
Definition: toolbar_gui.cpp:254
VEH_SHIP
@ VEH_SHIP
Ship vehicle type.
Definition: vehicle_type.h:26
_pause_mode
PauseMode _pause_mode
The current pause mode.
Definition: gfx.cpp:50
MenuClickShowRoad
static CallBackFunction MenuClickShowRoad(int index)
Handle click on the entry in the Road Vehicles menu.
Definition: toolbar_gui.cpp:781
WID_TE_MUSIC_SOUND
@ WID_TE_MUSIC_SOUND
Music/sound configuration menu.
Definition: toolbar_widget.h:73
MenuClickBuildRail
static CallBackFunction MenuClickBuildRail(int index)
Handle click on the entry in the Build Rail menu.
Definition: toolbar_gui.cpp:864
dropdown_type.h
road_gui.h
_settings_game
GameSettings _settings_game
Game settings of a running game or the scenario editor.
Definition: settings.cpp:57
linkgraph_gui.h
WID_TE_SIGNS
@ WID_TE_SIGNS
Sign building.
Definition: toolbar_widget.h:71
Window::ReInit
void ReInit(int rx=0, int ry=0, bool reposition=false)
Re-initialize a window, and optionally change its size.
Definition: window.cpp:952
WID_TE_TREES
@ WID_TE_TREES
Tree building toolbar.
Definition: toolbar_widget.h:70
LTMN_PERFORMANCE_RATING
static const int LTMN_PERFORMANCE_RATING
Show detailed performance rating.
Definition: toolbar_gui.cpp:628
RoadType
RoadType
The different roadtypes we support.
Definition: road_type.h:25
NWidgetToolbarContainer::IsButton
bool IsButton(WidgetType type) const
Check whether the given widget type is a button for us.
Definition: toolbar_gui.cpp:1356
GameSettings::economy
EconomySettings economy
settings to change the economy
Definition: settings_type.h:603
ShowFramerateWindow
void ShowFramerateWindow()
Open the general framerate window.
Definition: framerate_gui.cpp:1030
NWidget
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1311
_local_company
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
Definition: company_cmd.cpp:52
DO_SHOW_STATION_NAMES
@ DO_SHOW_STATION_NAMES
Display station names.
Definition: openttd.h:47
safeguards.h
ShowQueryString
void ShowQueryString(StringID str, StringID caption, uint maxsize, Window *parent, CharSetFilter afilter, QueryStringFlags flags)
Show a query popup window with a textbox in it.
Definition: misc_gui.cpp:1079
timer.h
GameCreationSettings::starting_year
TimerGameCalendar::Year starting_year
starting date
Definition: settings_type.h:353
lengthof
#define lengthof(array)
Return the length of an fixed size array.
Definition: stdafx.h:280
Window::flags
WindowFlags flags
Window flags.
Definition: window_gui.h:303
WF_TIMEOUT
@ WF_TIMEOUT
Window timeout counter.
Definition: window_gui.h:231
Window::Window
Window(WindowDesc &desc)
Empty constructor, initialization has been moved to InitNested() called from the constructor of the d...
Definition: window.cpp:1756
MenuClickShowAir
static CallBackFunction MenuClickShowAir(int index)
Handle click on the entry in the Aircraft menu.
Definition: toolbar_gui.cpp:821
MenuClickSaveLoad
static CallBackFunction MenuClickSaveLoad(int index=0)
Handle click on one of the entries in the SaveLoad menu.
Definition: toolbar_gui.cpp:376
ToggleDirtyBlocks
void ToggleDirtyBlocks()
Toggle drawing of the dirty blocks.
Definition: toolbar_gui.cpp:1084
_networking
bool _networking
are we in networking mode?
Definition: network.cpp:65
WID_TE_SPACER
@ WID_TE_SPACER
Spacer with "scenario editor" text.
Definition: toolbar_widget.h:57
LeagueTableID
uint8_t LeagueTableID
ID of a league table.
Definition: league_type.h:32
NWidgetToolbarContainer::SetupSmallestSize
void SetupSmallestSize(Window *w) override
Definition: toolbar_gui.cpp:1361
ToolbarScenDatePanel
static CallBackFunction ToolbarScenDatePanel(Window *w)
Called when clicking at the date panel of the scenario editor toolbar.
Definition: toolbar_gui.cpp:1173
road.h
TimerGameCalendar::SetDate
static void SetDate(Date date, DateFract fract)
Set the date.
Definition: timer_game_calendar.cpp:66
Point
Coordinates of a point in 2D.
Definition: geometry_type.hpp:21
EconomySettings::found_town
TownFounding found_town
town founding.
Definition: settings_type.h:531
WID_TN_SWITCH_BAR
@ WID_TN_SWITCH_BAR
Only available when toolbar has been split to switch between different subsets.
Definition: toolbar_widget.h:47
CheckBlitter
void CheckBlitter()
Check whether we still use the right blitter, or use another (better) one.
Definition: gfxinit.cpp:316
Window::IsWidgetDisabled
bool IsWidgetDisabled(WidgetID widget_index) const
Gets the enabled/disabled status of a widget.
Definition: window_gui.h:419
TimerGameConst< struct Calendar >::MAX_YEAR
static constexpr TimerGame< struct Calendar >::Year MAX_YEAR
MAX_YEAR, nicely rounded value of the number of years that can be encoded in a single 32 bits date,...
Definition: timer_game_common.h:173
WDF_NO_CLOSE
@ WDF_NO_CLOSE
This window can't be interactively closed.
Definition: window_gui.h:209
league_base.h
TimerGameConst< struct Calendar >::DEF_START_YEAR
static constexpr TimerGame< struct Calendar >::Year DEF_START_YEAR
The default starting year.
Definition: timer_game_common.h:179
WID_TN_MESSAGES
@ WID_TN_MESSAGES
Messages menu.
Definition: toolbar_widget.h:45
MakeNWidgets
std::unique_ptr< NWidgetBase > MakeNWidgets(std::span< const NWidgetPart > nwid_parts, std::unique_ptr< NWidgetBase > &&container)
Construct a nested widget tree from an array of parts.
Definition: widget.cpp:3210
PopupMainCompanyToolbMenu
static void PopupMainCompanyToolbMenu(Window *w, WidgetID widget, CompanyMask grey=0)
Pop up a generic company list menu.
Definition: toolbar_gui.cpp:154
ShowCheatWindow
void ShowCheatWindow()
Open cheat window.
Definition: cheat_gui.cpp:436
_game_speed
uint16_t _game_speed
Current game-speed; 100 is 1x, 0 is infinite.
Definition: gfx.cpp:40
stdafx.h
ShowSaveLoadDialog
void ShowSaveLoadDialog(AbstractFileType abstract_filetype, SaveLoadOperation fop)
Launch save/load dialog in the given mode.
Definition: fios_gui.cpp:986
FT_SAVEGAME
@ FT_SAVEGAME
old or new savegame
Definition: fileio_type.h:18
DO_FULL_DETAIL
@ DO_FULL_DETAIL
Also draw details of track and roads.
Definition: openttd.h:50
GfxFillRect
void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectMode mode)
Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen.
Definition: gfx.cpp:114
ToggleBoundingBoxes
void ToggleBoundingBoxes()
Toggle drawing of sprites' bounding boxes.
Definition: toolbar_gui.cpp:1067
SpriteID
uint32_t SpriteID
The number of a sprite, without mapping bits and colourtables.
Definition: gfx_type.h:18
MenuClickCompany
static CallBackFunction MenuClickCompany(int index)
Handle click on the entry in the Company menu.
Definition: toolbar_gui.cpp:553
ShowGSConfigWindow
void ShowGSConfigWindow()
Open the GS config window.
Definition: game_gui.cpp:445
MainToolbarWindow
Main toolbar.
Definition: toolbar_gui.cpp:1957
WID_TN_SHIPS
@ WID_TN_SHIPS
Ship menu.
Definition: toolbar_widget.h:33
house.h
viewport_func.h
NWidgetBase::current_y
uint current_y
Current vertical size (after resizing).
Definition: widget_type.h:246
ToolbarScenBuildRoad
static CallBackFunction ToolbarScenBuildRoad(int index)
Handle click on the entry in the Build Road menu.
Definition: toolbar_gui.cpp:1251
WC_NONE
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
Definition: window_type.h:45
WID_TN_END
@ WID_TN_END
Helper for knowing the amount of widgets.
Definition: toolbar_widget.h:48
SA_HOR_CENTER
@ SA_HOR_CENTER
Horizontally center the text.
Definition: gfx_type.h:346
Window::SetWidgetLoweredState
void SetWidgetLoweredState(WidgetID widget_index, bool lowered_stat)
Sets the lowered/raised status of a widget.
Definition: window_gui.h:450
WID_TE_LAND_GENERATE
@ WID_TE_LAND_GENERATE
Land generation.
Definition: toolbar_widget.h:64
WidgetType
WidgetType
Window widget types, nested widget types, and nested widget part types.
Definition: widget_type.h:48
WID_TN_ROADVEHS
@ WID_TN_ROADVEHS
Road vehicle menu.
Definition: toolbar_widget.h:32
ShowHighscoreTable
void ShowHighscoreTable(int difficulty=SP_CUSTOM, int8_t rank=-1)
Show the highscore table for a given difficulty.
Definition: highscore_gui.cpp:236
Window::SetWidgetDisabledState
void SetWidgetDisabledState(WidgetID widget_index, bool disab_stat)
Sets the enabled/disabled status of a widget.
Definition: window_gui.h:390
MenuClickStory
static CallBackFunction MenuClickStory(int index)
Handle click on the entry in the Story menu.
Definition: toolbar_gui.cpp:589
NWidgetMainToolbarContainer
Container for the 'normal' main toolbar.
Definition: toolbar_gui.cpp:1480
Window::IsWidgetLowered
bool IsWidgetLowered(WidgetID widget_index) const
Gets the lowered state of a widget.
Definition: window_gui.h:500
rail_gui.h
WWT_PUSHIMGBTN
@ WWT_PUSHIMGBTN
Normal push-button (no toggle button) with image caption.
Definition: widget_type.h:115
NWidgetBase::fill_y
uint fill_y
Vertical fill stepsize (from initial size, 0 means not resizable).
Definition: widget_type.h:236
WID_TN_BUILDING_TOOLS_START
@ WID_TN_BUILDING_TOOLS_START
Helper for the offset of the building tools.
Definition: toolbar_widget.h:37
SoundSettings::confirm
bool confirm
Play sound effect on successful constructions or other actions.
Definition: settings_type.h:248
vehicle_func.h
GRMN_INCOME_GRAPH
static const int GRMN_INCOME_GRAPH
Show income graph.
Definition: toolbar_gui.cpp:622
PC_DARK_RED
static const uint8_t PC_DARK_RED
Dark red palette colour.
Definition: palette_func.h:73
Pool::PoolItem<&_league_table_pool >::Iterate
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
Definition: pool_type.hpp:388
WID_TE_FAST_FORWARD
@ WID_TE_FAST_FORWARD
Fast forward the game.
Definition: toolbar_widget.h:54
ROADTYPE_TRAM
@ ROADTYPE_TRAM
Trams.
Definition: road_type.h:28
strings_func.h
WID_TN_ROADS
@ WID_TN_ROADS
Road building menu.
Definition: toolbar_widget.h:39
NWidgetScenarioToolbarContainer::GetButtonArrangement
const WidgetID * GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
Get the arrangement of the buttons for the toolbar.
Definition: toolbar_gui.cpp:1820
MakeMainToolbar
static std::unique_ptr< NWidgetBase > MakeMainToolbar()
Definition: toolbar_gui.cpp:2148
terraform_gui.h
MainToolbarWindow::OnPaint
void OnPaint() override
The window must be repainted.
Definition: toolbar_gui.cpp:1975
SC_WORLD
@ SC_WORLD
World screenshot.
Definition: screenshot.h:23
ShowBuildDocksScenToolbar
Window * ShowBuildDocksScenToolbar()
Open the build water toolbar window for the scenario editor.
Definition: dock_gui.cpp:403
graph_gui.h
MenuClickHelp
static CallBackFunction MenuClickHelp(int index)
Choose the proper callback function for the main toolbar's help menu.
Definition: toolbar_gui.cpp:1134
WID_TE_ZOOM_IN
@ WID_TE_ZOOM_IN
Zoom in the main viewport.
Definition: toolbar_widget.h:62
NWidgetBase::pos_x
int pos_x
Horizontal position of top-left corner of the widget in the window.
Definition: widget_type.h:250
WID_TE_ZOOM_OUT
@ WID_TE_ZOOM_OUT
Zoom out the main viewport.
Definition: toolbar_widget.h:63
Pool::PoolItem<&_league_table_pool >::GetNumItems
static size_t GetNumItems()
Returns number of valid items in the pool.
Definition: pool_type.hpp:369
DeleteAllMessages
void DeleteAllMessages()
Delete all messages and close their corresponding window (if any).
Definition: window.cpp:3282
WWT_TEXT
@ WWT_TEXT
Pure simple text.
Definition: widget_type.h:60
SetPIP
constexpr NWidgetPart SetPIP(uint8_t pre, uint8_t inter, uint8_t post)
Widget part function for setting a pre/inter/post spaces.
Definition: widget_type.h:1262
ScenarioEditorToolbarWindow
Definition: toolbar_gui.cpp:2298
WID_TN_ZOOM_IN
@ WID_TN_ZOOM_IN
Zoom in the main viewport.
Definition: toolbar_widget.h:35
ShowTransparencyToolbar
void ShowTransparencyToolbar()
Show the transparency toolbar.
Definition: transparency_gui.cpp:161
SetDParam
void SetDParam(size_t n, uint64_t v)
Set a string parameter v at index n in the global string parameter array.
Definition: strings.cpp:104
NWidgetBase::fill_x
uint fill_x
Horizontal fill stepsize (from initial size, 0 means not resizable).
Definition: widget_type.h:235
GRMN_PERFORMANCE_HISTORY_GRAPH
static const int GRMN_PERFORMANCE_HISTORY_GRAPH
Show performance history graph.
Definition: toolbar_gui.cpp:624
WID_TN_MUSIC_SOUND
@ WID_TN_MUSIC_SOUND
Music/sound configuration menu.
Definition: toolbar_widget.h:44
GetMainWindow
Window * GetMainWindow()
Get the main window, i.e.
Definition: window.cpp:1127
WID_TE_SAVE
@ WID_TE_SAVE
Save menu.
Definition: toolbar_widget.h:56
framerate_type.h
InvalidateWindowClassesData
void InvalidateWindowClassesData(WindowClass cls, int data, bool gui_scope)
Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by de...
Definition: window.cpp:3225
MenuClickGoal
static CallBackFunction MenuClickGoal(int index)
Handle click on the entry in the Goal menu.
Definition: toolbar_gui.cpp:609
WWT_PANEL
@ WWT_PANEL
Simple depressed panel.
Definition: widget_type.h:52
ShowLastNewsMessage
void ShowLastNewsMessage()
Show previous news item.
Definition: news_gui.cpp:1039
GRMN_DELIVERED_CARGO_GRAPH
static const int GRMN_DELIVERED_CARGO_GRAPH
Show delivered cargo graph.
Definition: toolbar_gui.cpp:623
MenuClickNewspaper
static CallBackFunction MenuClickNewspaper(int index)
Handle click on the entry in the Newspaper menu.
Definition: toolbar_gui.cpp:1021
NWidgetToolbarContainer
Full blown container to make it behave exactly as we want :)
Definition: toolbar_gui.cpp:1342
NWidgetBase::resize_y
uint resize_y
Vertical resize step (0 means not resizable).
Definition: widget_type.h:238
ShowSmallMap
void ShowSmallMap()
Show the smallmap window.
Definition: smallmap_gui.cpp:2067
WID_TN_INDUSTRIES
@ WID_TN_INDUSTRIES
Industry menu.
Definition: toolbar_widget.h:29
GetString
std::string GetString(StringID string)
Resolve the given StringID into a std::string with all the associated DParam lookups and formatting.
Definition: strings.cpp:319
EventState
EventState
State of handling an event.
Definition: window_type.h:737
HT_RECT
@ HT_RECT
rectangle (stations, depots, ...)
Definition: tilehighlight_type.h:21
transparency_gui.h
DO_SHOW_SIGNS
@ DO_SHOW_SIGNS
Display signs.
Definition: openttd.h:48
TimerGameConst< struct Calendar >::MIN_YEAR
static constexpr TimerGame< struct Calendar >::Year MIN_YEAR
The absolute minimum year in OTTD.
Definition: timer_game_common.h:176
news_gui.h
WID_TN_FINANCES
@ WID_TN_FINANCES
Finance menu.
Definition: toolbar_widget.h:23
PlaceProc_Sign
void PlaceProc_Sign(TileIndex tile)
PlaceProc function, called when someone pressed the button if the sign-tool is selected.
Definition: signs_cmd.cpp:122
WID_TE_DATE_BACKWARD
@ WID_TE_DATE_BACKWARD
Reduce the date of the scenario.
Definition: toolbar_widget.h:59
FT_HEIGHTMAP
@ FT_HEIGHTMAP
heightmap file
Definition: fileio_type.h:20
SC_DEFAULTZOOM
@ SC_DEFAULTZOOM
Zoomed to default zoom level screenshot of the visible area.
Definition: screenshot.h:22
ShowStoryBook
void ShowStoryBook(CompanyID company, uint16_t page_id=INVALID_STORY_PAGE, bool centered=false)
Raise or create the story book window for company, at page page_id.
Definition: story_gui.cpp:1051
ShowDropDownList
void ShowDropDownList(Window *w, DropDownList &&list, int selected, WidgetID button, uint width, bool instant_close, bool persist)
Show a drop down list.
Definition: dropdown.cpp:404
NWID_SPACER
@ NWID_SPACER
Invisible widget that takes some space.
Definition: widget_type.h:81
ToggleTransparency
void ToggleTransparency(TransparencyOption to)
Toggle the transparency option bit.
Definition: transparency.h:69
MenuClickSettings
static CallBackFunction MenuClickSettings(int index)
Handle click on one of the entries in the Options button menu.
Definition: toolbar_gui.cpp:293
DO_SHOW_TOWN_NAMES
@ DO_SHOW_TOWN_NAMES
Display town names.
Definition: openttd.h:46
company_func.h
MainToolbarWindow::refresh_interval
IntervalTimer< TimerWindow > refresh_interval
Refresh the state of pause / game-speed on a regular interval.
Definition: toolbar_gui.cpp:2072
NWidgetScenarioToolbarContainer::panel_widths
uint panel_widths[2]
The width of the two panels (the text panel and date panel)
Definition: toolbar_gui.cpp:1803
NWidgetContainer
Baseclass for container widgets.
Definition: widget_type.h:461
TO_SIGNS
@ TO_SIGNS
signs
Definition: transparency.h:23
WID_TE_SETTINGS
@ WID_TE_SETTINGS
Settings menu.
Definition: toolbar_widget.h:55
ShowLinkGraphLegend
void ShowLinkGraphLegend()
Open a link graph legend window.
Definition: linkgraph_gui.cpp:549
Window::SetWidgetsLoweredState
void SetWidgetsLoweredState(bool lowered_stat, Args... widgets)
Sets the lowered/raised status of a list of widgets.
Definition: window_gui.h:535
WID_TN_VEHICLE_START
@ WID_TN_VEHICLE_START
Helper for the offset of the vehicle menus.
Definition: toolbar_widget.h:30
WID_TN_HELP
@ WID_TN_HELP
Help menu.
Definition: toolbar_widget.h:46
network.h
_grfconfig
GRFConfig * _grfconfig
First item in list of current GRF set up.
Definition: newgrf_config.cpp:164
TimerGameEconomy::SetDate
static void SetDate(Date date, DateFract fract)
Set the date.
Definition: timer_game_economy.cpp:81
Window::RaiseWidgetWhenLowered
void RaiseWidgetWhenLowered(WidgetID widget_index)
Marks a widget as raised and dirty (redraw), when it is marked as lowered.
Definition: window_gui.h:487
CommandHelper
Definition: command_func.h:93
window_func.h
SA_CENTER
@ SA_CENTER
Center both horizontally and vertically.
Definition: gfx_type.h:355
SoundSettings::click_beep
bool click_beep
Beep on a random selection of buttons.
Definition: settings_type.h:249
GetCharacterHeight
int GetCharacterHeight(FontSize size)
Get height of a character for a given font size.
Definition: fontcache.cpp:77
Window::width
int width
width of the window (number of pixels to the right in x direction)
Definition: window_gui.h:314
CTMN_SPECTATOR
static const int CTMN_SPECTATOR
Show a company window as spectator.
Definition: toolbar_gui.cpp:146
ShowTerraformToolbar
Window * ShowTerraformToolbar(Window *link)
Show the toolbar for terraforming in the game.
Definition: terraform_gui.cpp:368
MarkWholeScreenDirty
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
Definition: gfx.cpp:1529
WDP_MANUAL
@ WDP_MANUAL
Manually align the window (so no automatic location finding)
Definition: window_gui.h:149
COMPANY_SPECTATOR
@ COMPANY_SPECTATOR
The client is spectating.
Definition: company_type.h:35
SC_VIEWPORT
@ SC_VIEWPORT
Screenshot of viewport.
Definition: screenshot.h:19
WID_TE_INDUSTRY
@ WID_TE_INDUSTRY
Industry building window.
Definition: toolbar_widget.h:66
MakeScreenshotWithConfirm
void MakeScreenshotWithConfirm(ScreenshotType t)
Make a screenshot.
Definition: screenshot.cpp:847
NWidgetBase::pos_y
int pos_y
Vertical position of top-left corner of the widget in the window.
Definition: widget_type.h:251
VehicleType
VehicleType
Available vehicle types.
Definition: vehicle_type.h:21
ShowBuildRoadToolbar
Window * ShowBuildRoadToolbar(RoadType roadtype)
Open the build road toolbar window.
Definition: road_gui.cpp:998
DrawString
int DrawString(int left, int right, int top, std::string_view str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly truncated to make it fit in its allocated space.
Definition: gfx.cpp:657
timer_window.h
VEH_AIRCRAFT
@ VEH_AIRCRAFT
Aircraft vehicle type.
Definition: vehicle_type.h:27
engine_base.h
WID_TN_ZOOM_OUT
@ WID_TN_ZOOM_OUT
Zoom out the main viewport.
Definition: toolbar_widget.h:36
help_gui.h
console_gui.h
MenuClickShowTrains
static CallBackFunction MenuClickShowTrains(int index)
Handle click on the entry in the Train menu.
Definition: toolbar_gui.cpp:761
gui.h
WID_TN_SMALL_MAP
@ WID_TN_SMALL_MAP
Small map menu.
Definition: toolbar_widget.h:19
NetworkCanJoinCompany
bool NetworkCanJoinCompany(CompanyID company_id)
Returns whether the given company can be joined by this client.
Definition: network.cpp:143
NetworkClientRequestMove
void NetworkClientRequestMove(CompanyID company_id)
Notify the server of this client wanting to be moved to another company.
Definition: network_client.cpp:1256
MenuClickStations
static CallBackFunction MenuClickStations(int index)
Handle click on the entry in the Stations menu.
Definition: toolbar_gui.cpp:513
HandleZoomMessage
void HandleZoomMessage(Window *w, const Viewport *vp, WidgetID widget_zoom_in, WidgetID widget_zoom_out)
Update the status of the zoom-buttons according to the zoom-level of the viewport.
Definition: viewport.cpp:491
ScenarioEditorToolbarWindow::OnInvalidateData
void OnInvalidateData([[maybe_unused]] int data=0, [[maybe_unused]] bool gui_scope=true) override
Some data on this window has become invalid.
Definition: toolbar_gui.cpp:2455
Window
Data structure for an opened window.
Definition: window_gui.h:276
NWidgetToolbarContainer::spacers
uint spacers
Number of spacer widgets in this toolbar.
Definition: toolbar_gui.cpp:1344
GetRoadTypes
RoadTypes GetRoadTypes(bool introduces)
Get list of road types, regardless of company availability.
Definition: road.cpp:227
SizingType
SizingType
Different forms of sizing nested widgets, using NWidgetBase::AssignSizePosition()
Definition: widget_type.h:121
MAX_COMPANIES
@ MAX_COMPANIES
Maximum number of companies.
Definition: company_type.h:23
Pool::PoolItem<&_company_pool >::IsValidID
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
Definition: pool_type.hpp:328
ToggleWidgetOutlines
void ToggleWidgetOutlines()
Toggle drawing of widget outlihes.
Definition: toolbar_gui.cpp:1098
NWidgetMainToolbarContainer::GetButtonArrangement
const WidgetID * GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
Get the arrangement of the buttons for the toolbar.
Definition: toolbar_gui.cpp:1481
SetObjectToPlace
void SetObjectToPlace(CursorID icon, PaletteID pal, HighLightStyle mode, WindowClass window_class, WindowNumber window_num)
Change the cursor and mouse click/drag handling to a mode for performing special operations like tile...
Definition: viewport.cpp:3447
Window::DrawWidgets
void DrawWidgets() const
Paint all widgets of a window.
Definition: widget.cpp:731
Clamp
constexpr T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
Definition: math_func.hpp:79
WID_TN_STORY
@ WID_TN_STORY
Story menu.
Definition: toolbar_widget.h:25
WID_TN_LANDSCAPE
@ WID_TN_LANDSCAPE
Landscaping toolbar.
Definition: toolbar_widget.h:43
IConsoleSwitch
void IConsoleSwitch()
Toggle in-game console between opened and closed.
Definition: console_gui.cpp:429
SetDataTip
constexpr NWidgetPart SetDataTip(uint32_t data, StringID tip)
Widget part function for setting the data and tooltip.
Definition: widget_type.h:1204
PM_UNPAUSED
@ PM_UNPAUSED
A normal unpaused game.
Definition: openttd.h:69
NWidgetCore
Base class for a 'real' widget.
Definition: widget_type.h:372
story_base.h
WKC_MINUS
@ WKC_MINUS
Definition: gfx_type.h:105
ShowAIConfigWindow
void ShowAIConfigWindow()
Open the AI config window.
Definition: ai_gui.cpp:324
ShowCompany
void ShowCompany(CompanyID company)
Show the window with the overview of the company.
Definition: company_gui.cpp:2573
GUISettings::UserIsAllowedToChangeNewGRFs
bool UserIsAllowedToChangeNewGRFs() const
Returns true when the user has sufficient privileges to edit newgrfs on a running game.
Definition: settings_type.h:237
ToolbarMode
ToolbarMode
Toobar modes.
Definition: toolbar_gui.cpp:81
Rect
Specification of a rectangle with absolute coordinates of all edges.
Definition: geometry_type.hpp:75
Window::ToggleWidgetLoweredState
void ToggleWidgetLoweredState(WidgetID widget_index)
Invert the lowered/raised status of a widget.
Definition: window_gui.h:459
ScenarioEditorToolbarWindow::OnTimeout
void OnTimeout() override
Called when this window's timeout has been reached.
Definition: toolbar_gui.cpp:2430
Company
Definition: company_base.h:133
WID_TE_ROADS
@ WID_TE_ROADS
Road building menu.
Definition: toolbar_widget.h:67
NWidgetBase::resize_x
uint resize_x
Horizontal resize step (0 means not resizable).
Definition: widget_type.h:237
WC_MAIN_TOOLBAR
@ WC_MAIN_TOOLBAR
Main toolbar (the long bar at the top); Window numbers:
Definition: window_type.h:58
Window::SetWidgetsDisabledState
void SetWidgetsDisabledState(bool disab_stat, Args... widgets)
Sets the enabled/disabled status of a list of widgets.
Definition: window_gui.h:524
ScenarioEditorToolbarWindow::OnPaint
void OnPaint() override
The window must be repainted.
Definition: toolbar_gui.cpp:2314
QSF_ENABLE_DEFAULT
@ QSF_ENABLE_DEFAULT
enable the 'Default' button ("\0" is returned)
Definition: textbuf_gui.h:21
DO_SHOW_WAYPOINT_NAMES
@ DO_SHOW_WAYPOINT_NAMES
Display waypoint names.
Definition: openttd.h:51
CLRBITS
#define CLRBITS(x, y)
Clears several bits in a variable.
Definition: bitmath_func.hpp:166
PM_PAUSED_NORMAL
@ PM_PAUSED_NORMAL
A game normally paused.
Definition: openttd.h:70
NWidgetBase::current_x
uint current_x
Current horizontal size (after resizing).
Definition: widget_type.h:245
WID_TN_LEAGUE
@ WID_TN_LEAGUE
Company league menu.
Definition: toolbar_widget.h:28
CLIENT_ID_SERVER
@ CLIENT_ID_SERVER
Servers always have this ID.
Definition: network_type.h:51
WID_TN_WATER
@ WID_TN_WATER
Water building toolbar.
Definition: toolbar_widget.h:41
ResetObjectToPlace
void ResetObjectToPlace()
Reset the cursor and mouse mode handling back to default (normal cursor, only clicking in windows).
Definition: viewport.cpp:3495
WID_TE_SMALL_MAP
@ WID_TE_SMALL_MAP
Small map menu.
Definition: toolbar_widget.h:61
_left_button_clicked
bool _left_button_clicked
Is left mouse button clicked?
Definition: gfx.cpp:42
network_func.h
WID_TN_GRAPHS
@ WID_TN_GRAPHS
Graph menu.
Definition: toolbar_widget.h:27
SetTextStyle
constexpr NWidgetPart SetTextStyle(TextColour colour, FontSize size=FS_NORMAL)
Widget part function for setting the text style.
Definition: widget_type.h:1162
CS_NUMERAL
@ CS_NUMERAL
Only numeric ones.
Definition: string_type.h:26
ToggleBit
constexpr T ToggleBit(T &x, const uint8_t y)
Toggles a bit in a variable.
Definition: bitmath_func.hpp:181
GetStringBoundingBox
Dimension GetStringBoundingBox(std::string_view str, FontSize start_fontsize)
Return the string dimension in pixels.
Definition: gfx.cpp:851
NWidgetToolbarContainer::GetButtonArrangement
virtual const WidgetID * GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const =0
Get the arrangement of the buttons for the toolbar.
WID_TN_AIRCRAFT
@ WID_TN_AIRCRAFT
Aircraft menu.
Definition: toolbar_widget.h:34
MenuClickForest
static CallBackFunction MenuClickForest(int index)
Handle click on the entry in the landscaping menu.
Definition: toolbar_gui.cpp:978
ClientSettings::gui
GUISettings gui
settings related to the GUI
Definition: settings_type.h:611
MenuClickBuildRoad
static CallBackFunction MenuClickBuildRoad(int index)
Handle click on the entry in the Build Road menu.
Definition: toolbar_gui.cpp:886
LTMN_HIGHSCORE
static const int LTMN_HIGHSCORE
Show highscrore table.
Definition: toolbar_gui.cpp:629
MainToolbarWindow::OnPlaceObjectAbort
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
Definition: toolbar_gui.cpp:2066
WID_TE_TRAMS
@ WID_TE_TRAMS
Tram building menu.
Definition: toolbar_widget.h:68
LTMN_PERFORMANCE_LEAGUE
static const int LTMN_PERFORMANCE_LEAGUE
Show default league table.
Definition: toolbar_gui.cpp:627
ShowEditorTerraformToolbar
Window * ShowEditorTerraformToolbar()
Show the toolbar for terraforming in the scenario editor.
Definition: terraform_gui.cpp:751
dropdown_common_type.h
Hotkey
All data for a single hotkey.
Definition: hotkeys.h:21
ShowBuildDocksToolbar
Window * ShowBuildDocksToolbar()
Open the build water toolbar window.
Definition: dock_gui.cpp:362
Window::FindWindowPlacementAndResize
virtual void FindWindowPlacementAndResize(int def_width, int def_height)
Resize window towards the default size.
Definition: window.cpp:1420
hotkeys.h
cheat_func.h
WID_TN_TOWNS
@ WID_TN_TOWNS
Town menu.
Definition: toolbar_widget.h:20
ShowBuildRoadScenToolbar
Window * ShowBuildRoadScenToolbar(RoadType roadtype)
Show the road building toolbar in the scenario editor.
Definition: road_gui.cpp:1085
TimerGameEconomy::date
static Date date
Current date in days (day counter).
Definition: timer_game_economy.h:37
HasBit
constexpr debug_inline bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.
Definition: bitmath_func.hpp:103