OpenTTD Source: src/toolbar_gui.cpp Source File

OpenTTD Source 15.0-RC2

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 <https://www.gnu.org/licenses/old-licenses/gpl-2.0>.
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 "house.h"
19#include "vehicle_gui.h"
20#include "rail_gui.h"
21#include "road.h"
22#include "road_gui.h"
23#include "vehicle_func.h"
24#include "sound_func.h"
25#include "terraform_gui.h"
26#include "strings_func.h"
27#include "company_func.h"
28#include "company_gui.h"
29#include "vehicle_base.h"
30#include "cheat_func.h"
31#include "transparency_gui.h"
32#include "screenshot.h"
33#include "signs_func.h"
34#include "fios.h"
35#include "console_gui.h"
36#include "news_gui.h"
37#include "ai/ai_gui.hpp"
38#include "game/game_gui.hpp"
39#include "script/script_gui.h"
40#include "tilehighlight_func.h"
41#include "smallmap_gui.h"
42#include "graph_gui.h"
43#include "textbuf_gui.h"
44#include "linkgraph/linkgraph_gui.h"
45#include "newgrf_debug.h"
46#include "hotkeys.h"
47#include "engine_base.h"
48#include "highscore.h"
49#include "game/game.hpp"
50#include "goal_base.h"
51#include "story_base.h"
52#include "toolbar_gui.h"
53#include "framerate_type.h"
54#include "screenshot_gui.h"
55#include "misc_cmd.h"
56#include "league_gui.h"
57#include "league_base.h"
58#include "timer/timer.h"
59#include "timer/timer_window.h"
60#include "timer/timer_game_calendar.h"
61#include "help_gui.h"
62#include "core/string_consumer.hpp"
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 "table/strings.h"
71
72#include "dropdown_common_type.h"
73
74#include "safeguards.h"
75
76
78uint _toolbar_width = 0;
79
80 RailType _last_built_railtype;
81 RoadType _last_built_roadtype;
82 RoadType _last_built_tramtype;
83
85 enum ToolbarMode : uint8_t {
86 TB_NORMAL,
87 TB_UPPER,
88 TB_LOWER
89};
90
92 enum CallBackFunction : uint8_t {
93 CBF_NONE,
94 CBF_PLACE_SIGN,
95 CBF_PLACE_LANDINFO,
96};
97
98 static CallBackFunction _last_started_action = CBF_NONE;
99
103 class DropDownListCompanyItem : public DropDownIcon<DropDownIcon<DropDownString<DropDownListItem>, true>> {
104public:
105 DropDownListCompanyItem(CompanyID company, bool shaded) : DropDownIcon<DropDownIcon<DropDownString<DropDownListItem>, true>>(SPR_COMPANY_ICON, GetCompanyPalette(company), NetworkCanJoinCompany(company) ? SPR_EMPTY : SPR_LOCK, PAL_NONE, GetString(STR_COMPANY_NAME_COMPANY_NUM, company, company), company.base(), false, shaded)
106 {
107 }
108};
109
110static DropDownOptions GetToolbarDropDownOptions()
111{
112 if (_settings_client.gui.toolbar_dropdown_autoselect) return DropDownOption::InstantClose;
113 return {};
114}
115
123 static void PopupMainToolbarMenu(Window *w, WidgetID widget, DropDownList &&list, int def)
124{
125 ShowDropDownList(w, std::move(list), def, widget, 0, GetToolbarDropDownOptions());
126}
127
134 static void PopupMainToolbarMenu(Window *w, WidgetID widget, const std::initializer_list<StringID> &strings)
135{
136 DropDownList list;
137 int i = 0;
138 for (StringID string : strings) {
139 if (string == STR_NULL) {
140 list.push_back(MakeDropDownListDividerItem());
141 } else {
142 list.push_back(MakeDropDownListStringItem(string, i));
143 i++;
144 }
145 }
146 PopupMainToolbarMenu(w, widget, std::move(list), 0);
147}
148
150 static const int CTMN_CLIENT_LIST = -1;
151 static const int CTMN_SPECTATE = -2;
152 static const int CTMN_SPECTATOR = -3;
153
160 static void PopupMainCompanyToolbMenu(Window *w, WidgetID widget, CompanyMask grey = {})
161{
162 DropDownList list;
163
164 switch (widget) {
165 case WID_TN_COMPANIES:
166 if (!_networking) break;
167
168 /* Add the client list button for the companies menu */
169 list.push_back(MakeDropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST));
170
171 if (_local_company != COMPANY_SPECTATOR) {
172 list.push_back(MakeDropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE));
173 }
174 break;
175 case WID_TN_STORY:
176 list.push_back(MakeDropDownListStringItem(STR_STORY_BOOK_SPECTATOR, CTMN_SPECTATOR));
177 break;
178
179 case WID_TN_GOAL:
180 list.push_back(MakeDropDownListStringItem(STR_GOALS_SPECTATOR, CTMN_SPECTATOR));
181 break;
182 }
183
184 for (CompanyID c = CompanyID::Begin(); c < MAX_COMPANIES; ++c) {
185 if (!Company::IsValidID(c)) continue;
186 list.push_back(std::make_unique<DropDownListCompanyItem>(c, grey.Test(c)));
187 }
188
189 PopupMainToolbarMenu(w, widget, std::move(list), _local_company == COMPANY_SPECTATOR ? (widget == WID_TN_COMPANIES ? CTMN_CLIENT_LIST : CTMN_SPECTATOR) : _local_company.base());
190}
191
192static ToolbarMode _toolbar_mode;
193
194static CallBackFunction SelectSignTool()
195{
196 if (_last_started_action == CBF_PLACE_SIGN) {
197 ResetObjectToPlace();
198 return CBF_NONE;
199 } else {
200 SetObjectToPlace(SPR_CURSOR_SIGN, PAL_NONE, HT_RECT, WC_MAIN_TOOLBAR, 0);
201 return CBF_PLACE_SIGN;
202 }
203}
204
205/* --- Pausing --- */
206
207static CallBackFunction ToolbarPauseClick(Window *)
208{
209 if (_networking && !_network_server) return CBF_NONE; // only server can pause the game
210
211 if (Command<CMD_PAUSE>::Post(PauseMode::Normal, _pause_mode.None())) {
212 SndConfirmBeep();
213 }
214 return CBF_NONE;
215}
216
222 static CallBackFunction ToolbarFastForwardClick(Window *)
223{
224 if (_networking) return CBF_NONE; // no fast forward in network game
225
226 ChangeGameSpeed(_game_speed == 100);
227
228 SndClickBeep();
229 return CBF_NONE;
230}
231
235 enum OptionMenuEntries : uint8_t {
236 OME_GAMEOPTIONS,
237 OME_AI_SETTINGS,
238 OME_GAMESCRIPT_SETTINGS,
239 OME_NEWGRFSETTINGS,
240 OME_SANDBOX,
241 OME_TRANSPARENCIES,
242 OME_SHOW_TOWNNAMES,
243 OME_SHOW_STATIONNAMES,
244 OME_SHOW_STATIONNAMES_TRAIN,
245 OME_SHOW_STATIONNAMES_LORRY,
246 OME_SHOW_STATIONNAMES_BUS,
247 OME_SHOW_STATIONNAMES_SHIP,
248 OME_SHOW_STATIONNAMES_PLANE,
249 OME_SHOW_STATIONNAMES_GHOST,
250 OME_SHOW_WAYPOINTNAMES,
251 OME_SHOW_SIGNS,
252 OME_SHOW_COMPETITOR_SIGNS,
253 OME_FULL_ANIMATION,
254 OME_FULL_DETAILS,
255 OME_TRANSPARENTBUILDINGS,
256 OME_SHOW_STATIONSIGNS,
257};
258
265 static CallBackFunction ToolbarOptionsClick(Window *w)
266{
267 DropDownList list;
268 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_GAME_OPTIONS, OME_GAMEOPTIONS));
269 /* Changes to the per-AI settings don't get send from the server to the clients. Clients get
270 * the settings once they join but never update it. As such don't show the window at all
271 * to network clients. */
272 if (!_networking || _network_server) {
273 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_AI_SETTINGS, OME_AI_SETTINGS));
274 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS, OME_GAMESCRIPT_SETTINGS));
275 }
276 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_NEWGRF_SETTINGS, OME_NEWGRFSETTINGS));
277 if (_game_mode != GM_EDITOR && !_networking) {
278 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_SANDBOX_OPTIONS, OME_SANDBOX));
279 }
280 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS, OME_TRANSPARENCIES));
281 list.push_back(MakeDropDownListDividerItem());
282 list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_TOWN_NAMES), STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES));
283 list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_STATION_NAMES), STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES));
284 list.push_back(MakeDropDownListCheckedItem(_facility_display_opt.Test(StationFacility::Train), STR_SETTINGS_MENU_STATION_NAMES_TRAIN, OME_SHOW_STATIONNAMES_TRAIN, false, false, 1));
285 list.push_back(MakeDropDownListCheckedItem(_facility_display_opt.Test(StationFacility::TruckStop), STR_SETTINGS_MENU_STATION_NAMES_LORRY, OME_SHOW_STATIONNAMES_LORRY, false, false, 1));
286 list.push_back(MakeDropDownListCheckedItem(_facility_display_opt.Test(StationFacility::BusStop), STR_SETTINGS_MENU_STATION_NAMES_BUS, OME_SHOW_STATIONNAMES_BUS, false, false, 1));
287 list.push_back(MakeDropDownListCheckedItem(_facility_display_opt.Test(StationFacility::Dock), STR_SETTINGS_MENU_STATION_NAMES_SHIP, OME_SHOW_STATIONNAMES_SHIP, false, false, 1));
288 list.push_back(MakeDropDownListCheckedItem(_facility_display_opt.Test(StationFacility::Airport), STR_SETTINGS_MENU_STATION_NAMES_PLANE, OME_SHOW_STATIONNAMES_PLANE, false, false, 1));
289 list.push_back(MakeDropDownListCheckedItem(_facility_display_opt.Test(STATION_FACILITY_GHOST), STR_SETTINGS_MENU_STATION_NAMES_GHOST, OME_SHOW_STATIONNAMES_GHOST, false, false, 1));
290 list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES), STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES));
291 list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_SIGNS), STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS));
292 list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS), STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS));
293 list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_FULL_ANIMATION), STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION));
294 list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_FULL_DETAIL), STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS));
295 list.push_back(MakeDropDownListCheckedItem(IsTransparencySet(TO_HOUSES), STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS));
296 list.push_back(MakeDropDownListCheckedItem(IsTransparencySet(TO_SIGNS), STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS));
297
298 ShowDropDownList(w, std::move(list), 0, WID_TN_SETTINGS, 140, GetToolbarDropDownOptions());
299 return CBF_NONE;
300}
301
308 static CallBackFunction MenuClickSettings(int index)
309{
310 switch (index) {
311 case OME_GAMEOPTIONS: ShowGameOptions(); return CBF_NONE;
312 case OME_AI_SETTINGS: ShowAIConfigWindow(); return CBF_NONE;
313 case OME_GAMESCRIPT_SETTINGS: ShowGSConfigWindow(); return CBF_NONE;
314 case OME_NEWGRFSETTINGS: ShowNewGRFSettings(!_networking && _settings_client.gui.UserIsAllowedToChangeNewGRFs(), true, true, _grfconfig); return CBF_NONE;
315 case OME_SANDBOX: ShowCheatWindow(); break;
316 case OME_TRANSPARENCIES: ShowTransparencyToolbar(); break;
317
318 case OME_SHOW_TOWNNAMES: ToggleBit(_display_opt, DO_SHOW_TOWN_NAMES); break;
319 case OME_SHOW_STATIONNAMES: ToggleBit(_display_opt, DO_SHOW_STATION_NAMES); break;
320 case OME_SHOW_STATIONNAMES_TRAIN: _facility_display_opt.Flip(StationFacility::Train); break;
321 case OME_SHOW_STATIONNAMES_LORRY: _facility_display_opt.Flip(StationFacility::TruckStop); break;
322 case OME_SHOW_STATIONNAMES_BUS: _facility_display_opt.Flip(StationFacility::BusStop); break;
323 case OME_SHOW_STATIONNAMES_SHIP: _facility_display_opt.Flip(StationFacility::Dock); break;
324 case OME_SHOW_STATIONNAMES_PLANE: _facility_display_opt.Flip(StationFacility::Airport); break;
325 case OME_SHOW_STATIONNAMES_GHOST: _facility_display_opt.Flip(STATION_FACILITY_GHOST); break;
326 case OME_SHOW_WAYPOINTNAMES: ToggleBit(_display_opt, DO_SHOW_WAYPOINT_NAMES); break;
327 case OME_SHOW_SIGNS: ToggleBit(_display_opt, DO_SHOW_SIGNS); break;
328 case OME_SHOW_COMPETITOR_SIGNS:
329 ToggleBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS);
330 InvalidateWindowClassesData(WC_SIGN_LIST, -1);
331 break;
332 case OME_FULL_ANIMATION: ToggleBit(_display_opt, DO_FULL_ANIMATION); CheckBlitter(); break;
333 case OME_FULL_DETAILS: ToggleBit(_display_opt, DO_FULL_DETAIL); break;
334 case OME_TRANSPARENTBUILDINGS: ToggleTransparency(TO_HOUSES); break;
335 case OME_SHOW_STATIONSIGNS: ToggleTransparency(TO_SIGNS); break;
336 }
337 MarkWholeScreenDirty();
338 return CBF_NONE;
339}
340
344 enum SaveLoadEditorMenuEntries : uint8_t {
345 SLEME_SAVE_SCENARIO = 0,
346 SLEME_LOAD_SCENARIO,
347 SLEME_SAVE_HEIGHTMAP,
348 SLEME_LOAD_HEIGHTMAP,
349 SLEME_EXIT_TOINTRO,
350 SLEME_EXIT_GAME,
351};
352
356 enum SaveLoadNormalMenuEntries : uint8_t {
357 SLNME_SAVE_GAME = 0,
358 SLNME_LOAD_GAME,
359 SLNME_EXIT_TOINTRO,
360 SLNME_EXIT_GAME,
361};
362
369 static CallBackFunction ToolbarSaveClick(Window *w)
370{
371 PopupMainToolbarMenu(w, WID_TN_SAVE, {STR_FILE_MENU_SAVE_GAME, STR_FILE_MENU_LOAD_GAME, STR_FILE_MENU_QUIT_GAME,
372 STR_NULL, STR_FILE_MENU_EXIT});
373 return CBF_NONE;
374}
375
382 static CallBackFunction ToolbarScenSaveOrLoad(Window *w)
383{
384 PopupMainToolbarMenu(w, WID_TE_SAVE, {STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO, STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO,
385 STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP, STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP,
386 STR_SCENEDIT_FILE_MENU_QUIT_EDITOR, STR_NULL, STR_SCENEDIT_FILE_MENU_QUIT});
387 return CBF_NONE;
388}
389
396 static CallBackFunction MenuClickSaveLoad(int index = 0)
397{
398 if (_game_mode == GM_EDITOR) {
399 switch (index) {
400 case SLEME_SAVE_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_SAVE); break;
401 case SLEME_LOAD_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_LOAD); break;
402 case SLEME_SAVE_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP, SLO_SAVE); break;
403 case SLEME_LOAD_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP, SLO_LOAD); break;
404 case SLEME_EXIT_TOINTRO: AskExitToGameMenu(); break;
405 case SLEME_EXIT_GAME: HandleExitGameRequest(); break;
406 }
407 } else {
408 switch (index) {
409 case SLNME_SAVE_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_SAVE); break;
410 case SLNME_LOAD_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break;
411 case SLNME_EXIT_TOINTRO: AskExitToGameMenu(); break;
412 case SLNME_EXIT_GAME: HandleExitGameRequest(); break;
413 }
414 }
415 return CBF_NONE;
416}
417
418/* --- Map button menu --- */
419
420enum MapMenuEntries : uint8_t {
421 MME_SHOW_SMALLMAP = 0,
422 MME_SHOW_EXTRAVIEWPORTS,
423 MME_SHOW_LINKGRAPH,
424 MME_SHOW_SIGNLISTS,
425 MME_SHOW_TOWNDIRECTORY,
426 MME_SHOW_INDUSTRYDIRECTORY,
427};
428
429static CallBackFunction ToolbarMapClick(Window *w)
430{
431 DropDownList list;
432 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP));
433 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS));
434 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_LINGRAPH_LEGEND, MME_SHOW_LINKGRAPH));
435 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS));
436 PopupMainToolbarMenu(w, WID_TN_SMALL_MAP, std::move(list), 0);
437 return CBF_NONE;
438}
439
440static CallBackFunction ToolbarScenMapTownDir(Window *w)
441{
442 DropDownList list;
443 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP));
444 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS));
445 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS));
446 list.push_back(MakeDropDownListStringItem(STR_TOWN_MENU_TOWN_DIRECTORY, MME_SHOW_TOWNDIRECTORY));
447 list.push_back(MakeDropDownListStringItem(STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, MME_SHOW_INDUSTRYDIRECTORY));
448 PopupMainToolbarMenu(w, WID_TE_SMALL_MAP, std::move(list), 0);
449 return CBF_NONE;
450}
451
458 static CallBackFunction MenuClickMap(int index)
459{
460 switch (index) {
461 case MME_SHOW_SMALLMAP: ShowSmallMap(); break;
462 case MME_SHOW_EXTRAVIEWPORTS: ShowExtraViewportWindow(); break;
463 case MME_SHOW_LINKGRAPH: ShowLinkGraphLegend(); break;
464 case MME_SHOW_SIGNLISTS: ShowSignList(); break;
465 case MME_SHOW_TOWNDIRECTORY: ShowTownDirectory(); break;
466 case MME_SHOW_INDUSTRYDIRECTORY: ShowIndustryDirectory(); break;
467 }
468 return CBF_NONE;
469}
470
471/* --- Town button menu --- */
472
473enum TownMenuEntries {
474 TME_SHOW_DIRECTORY = 0,
475 TME_SHOW_FOUND_TOWN,
476 TME_SHOW_PLACE_HOUSES,
477};
478
479static CallBackFunction ToolbarTownClick(Window *w)
480{
481 DropDownList list;
482 list.push_back(MakeDropDownListStringItem(STR_TOWN_MENU_TOWN_DIRECTORY, TME_SHOW_DIRECTORY));
483 if (_settings_game.economy.found_town != TF_FORBIDDEN) list.push_back(MakeDropDownListStringItem(STR_TOWN_MENU_FOUND_TOWN, TME_SHOW_FOUND_TOWN));
484 if (_settings_game.economy.place_houses != PH_FORBIDDEN) list.push_back(MakeDropDownListStringItem(STR_SCENEDIT_TOWN_MENU_PACE_HOUSE, TME_SHOW_PLACE_HOUSES));
485
486 PopupMainToolbarMenu(w, WID_TN_TOWNS, std::move(list), 0);
487
488 return CBF_NONE;
489}
490
497 static CallBackFunction MenuClickTown(int index)
498{
499 switch (index) {
500 case TME_SHOW_DIRECTORY: ShowTownDirectory(); break;
501 case TME_SHOW_FOUND_TOWN: // Setting could be changed when the dropdown was open
502 if (_settings_game.economy.found_town != TF_FORBIDDEN) ShowFoundTownWindow();
503 break;
504 case TME_SHOW_PLACE_HOUSES: // Setting could be changed when the dropdown was open
505 if (_settings_game.economy.place_houses != PH_FORBIDDEN) ShowBuildHousePicker(nullptr);
506 break;
507 }
508 return CBF_NONE;
509}
510
511/* --- Subidies button menu --- */
512
513static CallBackFunction ToolbarSubsidiesClick(Window *w)
514{
515 PopupMainToolbarMenu(w, WID_TN_SUBSIDIES, {STR_SUBSIDIES_MENU_SUBSIDIES});
516 return CBF_NONE;
517}
518
524 static CallBackFunction MenuClickSubsidies(int)
525{
526 ShowSubsidiesList();
527 return CBF_NONE;
528}
529
530/* --- Stations button menu --- */
531
532static CallBackFunction ToolbarStationsClick(Window *w)
533{
534 PopupMainCompanyToolbMenu(w, WID_TN_STATIONS);
535 return CBF_NONE;
536}
537
544 static CallBackFunction MenuClickStations(int index)
545{
546 ShowCompanyStations((CompanyID)index);
547 return CBF_NONE;
548}
549
550/* --- Finances button menu --- */
551
552static CallBackFunction ToolbarFinancesClick(Window *w)
553{
554 PopupMainCompanyToolbMenu(w, WID_TN_FINANCES);
555 return CBF_NONE;
556}
557
564 static CallBackFunction MenuClickFinances(int index)
565{
566 ShowCompanyFinances((CompanyID)index);
567 return CBF_NONE;
568}
569
570/* --- Company's button menu --- */
571
572static CallBackFunction ToolbarCompaniesClick(Window *w)
573{
574 PopupMainCompanyToolbMenu(w, WID_TN_COMPANIES);
575 return CBF_NONE;
576}
577
584 static CallBackFunction MenuClickCompany(int index)
585{
586 if (_networking) {
587 switch (index) {
588 case CTMN_CLIENT_LIST:
589 ShowClientList();
590 return CBF_NONE;
591
592 case CTMN_SPECTATE:
593 if (_network_server) {
594 NetworkServerDoMove(CLIENT_ID_SERVER, COMPANY_SPECTATOR);
595 MarkWholeScreenDirty();
596 } else {
597 NetworkClientRequestMove(COMPANY_SPECTATOR);
598 }
599 return CBF_NONE;
600 }
601 }
602 ShowCompany((CompanyID)index);
603 return CBF_NONE;
604}
605
606/* --- Story button menu --- */
607
608static CallBackFunction ToolbarStoryClick(Window *w)
609{
610 PopupMainCompanyToolbMenu(w, WID_TN_STORY);
611 return CBF_NONE;
612}
613
620 static CallBackFunction MenuClickStory(int index)
621{
622 ShowStoryBook(index == CTMN_SPECTATOR ? CompanyID::Invalid() : (CompanyID)index);
623 return CBF_NONE;
624}
625
626/* --- Goal button menu --- */
627
628static CallBackFunction ToolbarGoalClick(Window *w)
629{
630 PopupMainCompanyToolbMenu(w, WID_TN_GOAL);
631 return CBF_NONE;
632}
633
640 static CallBackFunction MenuClickGoal(int index)
641{
642 ShowGoalsList(index == CTMN_SPECTATOR ? CompanyID::Invalid() : (CompanyID)index);
643 return CBF_NONE;
644}
645
646/* --- Graphs and League Table button menu --- */
647
652 static const int GRMN_OPERATING_PROFIT_GRAPH = -1;
653 static const int GRMN_INCOME_GRAPH = -2;
654 static const int GRMN_DELIVERED_CARGO_GRAPH = -3;
655 static const int GRMN_PERFORMANCE_HISTORY_GRAPH = -4;
656 static const int GRMN_COMPANY_VALUE_GRAPH = -5;
657 static const int GRMN_CARGO_PAYMENT_RATES = -6;
658 static const int LTMN_PERFORMANCE_LEAGUE = -7;
659 static const int LTMN_PERFORMANCE_RATING = -8;
660 static const int LTMN_HIGHSCORE = -9;
661
662static void AddDropDownLeagueTableOptions(DropDownList &list)
663{
664 if (LeagueTable::GetNumItems() > 0) {
665 for (LeagueTable *lt : LeagueTable::Iterate()) {
666 list.push_back(MakeDropDownListStringItem(lt->title.GetDecodedString(), lt->index.base()));
667 }
668 } else {
669 list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE, LTMN_PERFORMANCE_LEAGUE));
670 list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING, LTMN_PERFORMANCE_RATING));
671 if (!_networking) {
672 list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_HIGHSCORE, LTMN_HIGHSCORE));
673 }
674 }
675}
676
677static CallBackFunction ToolbarGraphsClick(Window *w)
678{
679 DropDownList list;
680
681 list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH, GRMN_OPERATING_PROFIT_GRAPH));
682 list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_INCOME_GRAPH, GRMN_INCOME_GRAPH));
683 list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH, GRMN_DELIVERED_CARGO_GRAPH));
684 list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH, GRMN_PERFORMANCE_HISTORY_GRAPH));
685 list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_COMPANY_VALUE_GRAPH, GRMN_COMPANY_VALUE_GRAPH));
686 list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_CARGO_PAYMENT_RATES, GRMN_CARGO_PAYMENT_RATES));
687
688 if (_toolbar_mode != TB_NORMAL) AddDropDownLeagueTableOptions(list);
689
690 ShowDropDownList(w, std::move(list), GRMN_OPERATING_PROFIT_GRAPH, WID_TN_GRAPHS, 140, GetToolbarDropDownOptions());
691 return CBF_NONE;
692}
693
694static CallBackFunction ToolbarLeagueClick(Window *w)
695{
696 DropDownList list;
697
698 AddDropDownLeagueTableOptions(list);
699
700 int selected = list[0]->result;
701 ShowDropDownList(w, std::move(list), selected, WID_TN_LEAGUE, 140, GetToolbarDropDownOptions());
702 return CBF_NONE;
703}
704
711 static CallBackFunction MenuClickGraphsOrLeague(int index)
712{
713 switch (index) {
714 case GRMN_OPERATING_PROFIT_GRAPH: ShowOperatingProfitGraph(); break;
715 case GRMN_INCOME_GRAPH: ShowIncomeGraph(); break;
716 case GRMN_DELIVERED_CARGO_GRAPH: ShowDeliveredCargoGraph(); break;
717 case GRMN_PERFORMANCE_HISTORY_GRAPH: ShowPerformanceHistoryGraph(); break;
718 case GRMN_COMPANY_VALUE_GRAPH: ShowCompanyValueGraph(); break;
719 case GRMN_CARGO_PAYMENT_RATES: ShowCargoPaymentRates(); break;
720 case LTMN_PERFORMANCE_LEAGUE: ShowPerformanceLeagueTable(); break;
721 case LTMN_PERFORMANCE_RATING: ShowPerformanceRatingDetail(); break;
722 case LTMN_HIGHSCORE: ShowHighscoreTable(); break;
723 default: {
724 if (LeagueTable::IsValidID(index)) {
725 ShowScriptLeagueTable((LeagueTableID)index);
726 }
727 }
728 }
729 return CBF_NONE;
730}
731
732
733
734/* --- Industries button menu --- */
735
736static CallBackFunction ToolbarIndustryClick(Window *w)
737{
738 /* Disable build-industry menu if we are a spectator */
739 if (_local_company == COMPANY_SPECTATOR) {
740 PopupMainToolbarMenu(w, WID_TN_INDUSTRIES, {STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, STR_INDUSTRY_MENU_INDUSTRY_CHAIN});
741 } else {
742 PopupMainToolbarMenu(w, WID_TN_INDUSTRIES, {STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, STR_INDUSTRY_MENU_INDUSTRY_CHAIN, STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY});
743 }
744 return CBF_NONE;
745}
746
753 static CallBackFunction MenuClickIndustry(int index)
754{
755 switch (index) {
756 case 0: ShowIndustryDirectory(); break;
757 case 1: ShowIndustryCargoesWindow(); break;
758 case 2: ShowBuildIndustryWindow(); break;
759 }
760 return CBF_NONE;
761}
762
763/* --- Trains button menu + 1 helper function for all vehicles. --- */
764
765static void ToolbarVehicleClick(Window *w, VehicleType veh)
766{
767 CompanyMask dis{};
768
769 for (const Company *c : Company::Iterate()) {
770 if (c->group_all[veh].num_vehicle == 0) dis.Set(c->index);
771 }
772 PopupMainCompanyToolbMenu(w, WID_TN_VEHICLE_START + veh, dis);
773}
774
775
776static CallBackFunction ToolbarTrainClick(Window *w)
777{
778 ToolbarVehicleClick(w, VEH_TRAIN);
779 return CBF_NONE;
780}
781
788 static CallBackFunction MenuClickShowTrains(int index)
789{
790 ShowVehicleListWindow((CompanyID)index, VEH_TRAIN);
791 return CBF_NONE;
792}
793
794/* --- Road vehicle button menu --- */
795
796static CallBackFunction ToolbarRoadClick(Window *w)
797{
798 ToolbarVehicleClick(w, VEH_ROAD);
799 return CBF_NONE;
800}
801
808 static CallBackFunction MenuClickShowRoad(int index)
809{
810 ShowVehicleListWindow((CompanyID)index, VEH_ROAD);
811 return CBF_NONE;
812}
813
814/* --- Ship button menu --- */
815
816static CallBackFunction ToolbarShipClick(Window *w)
817{
818 ToolbarVehicleClick(w, VEH_SHIP);
819 return CBF_NONE;
820}
821
828 static CallBackFunction MenuClickShowShips(int index)
829{
830 ShowVehicleListWindow((CompanyID)index, VEH_SHIP);
831 return CBF_NONE;
832}
833
834/* --- Aircraft button menu --- */
835
836static CallBackFunction ToolbarAirClick(Window *w)
837{
838 ToolbarVehicleClick(w, VEH_AIRCRAFT);
839 return CBF_NONE;
840}
841
848 static CallBackFunction MenuClickShowAir(int index)
849{
850 ShowVehicleListWindow((CompanyID)index, VEH_AIRCRAFT);
851 return CBF_NONE;
852}
853
854/* --- Zoom in button --- */
855
856static CallBackFunction ToolbarZoomInClick(Window *w)
857{
858 if (DoZoomInOutWindow(ZOOM_IN, GetMainWindow())) {
859 w->HandleButtonClick((_game_mode == GM_EDITOR) ? (WidgetID)WID_TE_ZOOM_IN : (WidgetID)WID_TN_ZOOM_IN);
860 }
861 return CBF_NONE;
862}
863
864/* --- Zoom out button --- */
865
866static CallBackFunction ToolbarZoomOutClick(Window *w)
867{
868 if (DoZoomInOutWindow(ZOOM_OUT, GetMainWindow())) {
869 w->HandleButtonClick((_game_mode == GM_EDITOR) ? (WidgetID)WID_TE_ZOOM_OUT : (WidgetID)WID_TN_ZOOM_OUT);
870 }
871 return CBF_NONE;
872}
873
874/* --- Rail button menu --- */
875
876static CallBackFunction ToolbarBuildRailClick(Window *w)
877{
878 ShowDropDownList(w, GetRailTypeDropDownList(), _last_built_railtype, WID_TN_RAILS, 140, GetToolbarDropDownOptions());
879 return CBF_NONE;
880}
881
888 static CallBackFunction MenuClickBuildRail(int index)
889{
890 _last_built_railtype = (RailType)index;
891 ShowBuildRailToolbar(_last_built_railtype);
892 return CBF_NONE;
893}
894
895/* --- Road button menu --- */
896
897static CallBackFunction ToolbarBuildRoadClick(Window *w)
898{
899 ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TN_ROADS, 140, GetToolbarDropDownOptions());
900 return CBF_NONE;
901}
902
909 static CallBackFunction MenuClickBuildRoad(int index)
910{
911 _last_built_roadtype = (RoadType)index;
912 ShowBuildRoadToolbar(_last_built_roadtype);
913 return CBF_NONE;
914}
915
916/* --- Tram button menu --- */
917
918static CallBackFunction ToolbarBuildTramClick(Window *w)
919{
920 ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TN_TRAMS, 140, GetToolbarDropDownOptions());
921 return CBF_NONE;
922}
923
930 static CallBackFunction MenuClickBuildTram(int index)
931{
932 _last_built_tramtype = (RoadType)index;
933 ShowBuildRoadToolbar(_last_built_tramtype);
934 return CBF_NONE;
935}
936
937/* --- Water button menu --- */
938
939static CallBackFunction ToolbarBuildWaterClick(Window *w)
940{
941 DropDownList list;
942 list.push_back(MakeDropDownListIconItem(SPR_IMG_BUILD_CANAL, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, 0));
943 ShowDropDownList(w, std::move(list), 0, WID_TN_WATER, 140, GetToolbarDropDownOptions());
944 return CBF_NONE;
945}
946
952 static CallBackFunction MenuClickBuildWater(int)
953{
954 ShowBuildDocksToolbar();
955 return CBF_NONE;
956}
957
958/* --- Airport button menu --- */
959
960static CallBackFunction ToolbarBuildAirClick(Window *w)
961{
962 DropDownList list;
963 list.push_back(MakeDropDownListIconItem(SPR_IMG_AIRPORT, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, 0));
964 ShowDropDownList(w, std::move(list), 0, WID_TN_AIR, 140, GetToolbarDropDownOptions());
965 return CBF_NONE;
966}
967
973 static CallBackFunction MenuClickBuildAir(int)
974{
975 ShowBuildAirToolbar();
976 return CBF_NONE;
977}
978
979/* --- Forest button menu --- */
980
981static CallBackFunction ToolbarForestClick(Window *w)
982{
983 DropDownList list;
984 list.push_back(MakeDropDownListIconItem(SPR_IMG_LANDSCAPING, PAL_NONE, STR_LANDSCAPING_MENU_LANDSCAPING, 0));
985 list.push_back(MakeDropDownListIconItem(SPR_IMG_PLANTTREES, PAL_NONE, STR_LANDSCAPING_MENU_PLANT_TREES, 1));
986 list.push_back(MakeDropDownListIconItem(SPR_IMG_SIGN, PAL_NONE, STR_LANDSCAPING_MENU_PLACE_SIGN, 2));
987 ShowDropDownList(w, std::move(list), 0, WID_TN_LANDSCAPE, 100, GetToolbarDropDownOptions());
988 return CBF_NONE;
989}
990
997 static CallBackFunction MenuClickForest(int index)
998{
999 switch (index) {
1000 case 0: ShowTerraformToolbar(); break;
1001 case 1: ShowBuildTreesToolbar(); break;
1002 case 2: return SelectSignTool();
1003 }
1004 return CBF_NONE;
1005}
1006
1007/* --- Music button menu --- */
1008
1009static CallBackFunction ToolbarMusicClick(Window *w)
1010{
1011 PopupMainToolbarMenu(w, _game_mode == GM_EDITOR ? (WidgetID)WID_TE_MUSIC_SOUND : (WidgetID)WID_TN_MUSIC_SOUND, {STR_TOOLBAR_SOUND_MUSIC});
1012 return CBF_NONE;
1013}
1014
1020 static CallBackFunction MenuClickMusicWindow(int)
1021{
1022 ShowMusicWindow();
1023 return CBF_NONE;
1024}
1025
1026/* --- Newspaper button menu --- */
1027
1028static CallBackFunction ToolbarNewspaperClick(Window *w)
1029{
1030 PopupMainToolbarMenu(w, WID_TN_MESSAGES, {STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT, STR_NEWS_MENU_MESSAGE_HISTORY_MENU, STR_NEWS_MENU_DELETE_ALL_MESSAGES});
1031 return CBF_NONE;
1032}
1033
1040 static CallBackFunction MenuClickNewspaper(int index)
1041{
1042 switch (index) {
1043 case 0: ShowLastNewsMessage(); break;
1044 case 1: ShowMessageHistory(); break;
1045 case 2: DeleteAllMessages(); break;
1046 }
1047 return CBF_NONE;
1048}
1049
1050/* --- Help button menu --- */
1051
1052static CallBackFunction PlaceLandBlockInfo()
1053{
1054 if (_last_started_action == CBF_PLACE_LANDINFO) {
1055 ResetObjectToPlace();
1056 return CBF_NONE;
1057 } else {
1058 SetObjectToPlace(SPR_CURSOR_QUERY, PAL_NONE, HT_RECT, WC_MAIN_TOOLBAR, 0);
1059 return CBF_PLACE_LANDINFO;
1060 }
1061}
1062
1063static CallBackFunction ToolbarHelpClick(Window *w)
1064{
1065 if (_settings_client.gui.newgrf_developer_tools) {
1066 PopupMainToolbarMenu(w, _game_mode == GM_EDITOR ? (WidgetID)WID_TE_HELP : (WidgetID)WID_TN_HELP, {STR_ABOUT_MENU_LAND_BLOCK_INFO,
1067 STR_ABOUT_MENU_HELP, STR_NULL, STR_ABOUT_MENU_TOGGLE_CONSOLE, STR_ABOUT_MENU_AI_DEBUG,
1068 STR_ABOUT_MENU_SCREENSHOT, STR_ABOUT_MENU_SHOW_FRAMERATE, STR_ABOUT_MENU_ABOUT_OPENTTD,
1069 STR_ABOUT_MENU_SPRITE_ALIGNER, STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES, STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS,
1070 STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES});
1071 } else {
1072 PopupMainToolbarMenu(w, _game_mode == GM_EDITOR ? (WidgetID)WID_TE_HELP : (WidgetID)WID_TN_HELP, {STR_ABOUT_MENU_LAND_BLOCK_INFO,
1073 STR_ABOUT_MENU_HELP, STR_NULL, STR_ABOUT_MENU_TOGGLE_CONSOLE, STR_ABOUT_MENU_AI_DEBUG,
1074 STR_ABOUT_MENU_SCREENSHOT, STR_ABOUT_MENU_SHOW_FRAMERATE, STR_ABOUT_MENU_ABOUT_OPENTTD});
1075 }
1076 return CBF_NONE;
1077}
1078
1086 void ToggleBoundingBoxes()
1087{
1088 extern bool _draw_bounding_boxes;
1089 /* Always allow to toggle them off */
1090 if (_settings_client.gui.newgrf_developer_tools || _draw_bounding_boxes) {
1091 _draw_bounding_boxes = !_draw_bounding_boxes;
1092 MarkWholeScreenDirty();
1093 }
1094}
1095
1103 void ToggleDirtyBlocks()
1104{
1105 extern bool _draw_dirty_blocks;
1106 /* Always allow to toggle them off */
1107 if (_settings_client.gui.newgrf_developer_tools || _draw_dirty_blocks) {
1108 _draw_dirty_blocks = !_draw_dirty_blocks;
1109 MarkWholeScreenDirty();
1110 }
1111}
1112
1117 void ToggleWidgetOutlines()
1118{
1119 extern bool _draw_widget_outlines;
1120 /* Always allow to toggle them off */
1121 if (_settings_client.gui.newgrf_developer_tools || _draw_widget_outlines) {
1122 _draw_widget_outlines = !_draw_widget_outlines;
1123 MarkWholeScreenDirty();
1124 }
1125}
1126
1131 void SetStartingYear(TimerGameCalendar::Year year)
1132{
1133 _settings_game.game_creation.starting_year = Clamp(year, CalendarTime::MIN_YEAR, CalendarTime::MAX_YEAR);
1134 TimerGameCalendar::Date new_calendar_date = TimerGameCalendar::ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1);
1135 TimerGameEconomy::Date new_economy_date{new_calendar_date.base()};
1136
1137 /* We must set both Calendar and Economy dates to keep them in sync. Calendar first. */
1138 TimerGameCalendar::SetDate(new_calendar_date, 0);
1139
1140 /* If you open a savegame as a scenario, there may already be link graphs and/or vehicles. These use economy date. */
1141 LinkGraphSchedule::instance.ShiftDates(new_economy_date - TimerGameEconomy::date);
1142 for (auto v : Vehicle::Iterate()) v->ShiftDates(new_economy_date - TimerGameEconomy::date);
1143
1144 /* Only change the date after changing cached values above. */
1145 TimerGameEconomy::SetDate(new_economy_date, 0);
1146}
1147
1153 static CallBackFunction MenuClickHelp(int index)
1154{
1155 switch (index) {
1156 case 0: return PlaceLandBlockInfo();
1157 case 1: ShowHelpWindow(); break;
1158 case 2: IConsoleSwitch(); break;
1159 case 3: ShowScriptDebugWindow(CompanyID::Invalid(), _ctrl_pressed); break;
1160 case 4: ShowScreenshotWindow(); break;
1161 case 5: ShowFramerateWindow(); break;
1162 case 6: ShowAboutWindow(); break;
1163 case 7: ShowSpriteAlignerWindow(); break;
1164 case 8: ToggleBoundingBoxes(); break;
1165 case 9: ToggleDirtyBlocks(); break;
1166 case 10: ToggleWidgetOutlines(); break;
1167 }
1168 return CBF_NONE;
1169}
1170
1171/* --- Switch toolbar button --- */
1172
1173static CallBackFunction ToolbarSwitchClick(Window *w)
1174{
1175 if (_toolbar_mode != TB_LOWER) {
1176 _toolbar_mode = TB_LOWER;
1177 } else {
1178 _toolbar_mode = TB_UPPER;
1179 }
1180
1181 w->ReInit();
1182 w->SetWidgetLoweredState(_game_mode == GM_EDITOR ? (WidgetID)WID_TE_SWITCH_BAR : (WidgetID)WID_TN_SWITCH_BAR, _toolbar_mode == TB_LOWER);
1183 SndClickBeep();
1184 return CBF_NONE;
1185}
1186
1187/* --- Scenario editor specific handlers. */
1188
1192 static CallBackFunction ToolbarScenDatePanel(Window *w)
1193{
1194 ShowQueryString(GetString(STR_JUST_INT, _settings_game.game_creation.starting_year), STR_MAPGEN_START_DATE_QUERY_CAPT, 8, w, CS_NUMERAL, QueryStringFlag::EnableDefault);
1195 return CBF_NONE;
1196}
1197
1198static CallBackFunction ToolbarScenDateBackward(Window *w)
1199{
1200 /* don't allow too fast scrolling */
1201 if (!w->flags.Test(WindowFlag::Timeout) || w->timeout_timer <= 1) {
1202 w->HandleButtonClick(WID_TE_DATE_BACKWARD);
1203 w->SetDirty();
1204
1205 SetStartingYear(_settings_game.game_creation.starting_year - 1);
1206 }
1207 _left_button_clicked = false;
1208 return CBF_NONE;
1209}
1210
1211static CallBackFunction ToolbarScenDateForward(Window *w)
1212{
1213 /* don't allow too fast scrolling */
1214 if (!w->flags.Test(WindowFlag::Timeout) || w->timeout_timer <= 1) {
1215 w->HandleButtonClick(WID_TE_DATE_FORWARD);
1216 w->SetDirty();
1217
1218 SetStartingYear(_settings_game.game_creation.starting_year + 1);
1219 }
1220 _left_button_clicked = false;
1221 return CBF_NONE;
1222}
1223
1224static CallBackFunction ToolbarScenGenLand(Window *w)
1225{
1226 w->HandleButtonClick(WID_TE_LAND_GENERATE);
1227
1228 ShowEditorTerraformToolbar();
1229 return CBF_NONE;
1230}
1231
1232static CallBackFunction ToolbarScenGenTownClick(Window *w)
1233{
1234 PopupMainToolbarMenu(w, WID_TE_TOWN_GENERATE, {STR_SCENEDIT_TOWN_MENU_BUILD_TOWN, STR_SCENEDIT_TOWN_MENU_PACE_HOUSE});
1235 return CBF_NONE;
1236}
1237
1238static CallBackFunction ToolbarScenGenTown(int index)
1239{
1240 switch (index) {
1241 case 0: ShowFoundTownWindow(); break;
1242 case 1: ShowBuildHousePicker(nullptr); break;
1243 }
1244 return CBF_NONE;
1245}
1246
1247static CallBackFunction ToolbarScenGenIndustry(Window *w)
1248{
1249 w->HandleButtonClick(WID_TE_INDUSTRY);
1250 ShowBuildIndustryWindow();
1251 return CBF_NONE;
1252}
1253
1254static CallBackFunction ToolbarScenBuildRoadClick(Window *w)
1255{
1256 ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TE_ROADS, 140, GetToolbarDropDownOptions());
1257 return CBF_NONE;
1258}
1259
1266 static CallBackFunction ToolbarScenBuildRoad(int index)
1267{
1268 _last_built_roadtype = (RoadType)index;
1269 ShowBuildRoadScenToolbar(_last_built_roadtype);
1270 return CBF_NONE;
1271}
1272
1273static CallBackFunction ToolbarScenBuildTramClick(Window *w)
1274{
1275 ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TE_TRAMS, 140, GetToolbarDropDownOptions());
1276 return CBF_NONE;
1277}
1278
1285 static CallBackFunction ToolbarScenBuildTram(int index)
1286{
1287 _last_built_tramtype = (RoadType)index;
1288 ShowBuildRoadScenToolbar(_last_built_tramtype);
1289 return CBF_NONE;
1290}
1291
1292static CallBackFunction ToolbarScenBuildDocks(Window *w)
1293{
1294 w->HandleButtonClick(WID_TE_WATER);
1295 ShowBuildDocksScenToolbar();
1296 return CBF_NONE;
1297}
1298
1299static CallBackFunction ToolbarScenPlantTrees(Window *w)
1300{
1301 w->HandleButtonClick(WID_TE_TREES);
1302 ShowBuildTreesToolbar();
1303 return CBF_NONE;
1304}
1305
1306static CallBackFunction ToolbarScenPlaceSign(Window *w)
1307{
1308 w->HandleButtonClick(WID_TE_SIGNS);
1309 return SelectSignTool();
1310}
1311
1312static CallBackFunction ToolbarBtn_NULL(Window *)
1313{
1314 return CBF_NONE;
1315}
1316
1317typedef CallBackFunction MenuClickedProc(int index);
1318
1319static MenuClickedProc * const _menu_clicked_procs[] = {
1320 nullptr, // 0
1321 nullptr, // 1
1322 MenuClickSettings, // 2
1323 MenuClickSaveLoad, // 3
1324 MenuClickMap, // 4
1325 MenuClickTown, // 5
1326 MenuClickSubsidies, // 6
1327 MenuClickStations, // 7
1328 MenuClickFinances, // 8
1329 MenuClickCompany, // 9
1330 MenuClickStory, // 10
1331 MenuClickGoal, // 11
1332 MenuClickGraphsOrLeague, // 12
1333 MenuClickGraphsOrLeague, // 13
1334 MenuClickIndustry, // 14
1335 MenuClickShowTrains, // 15
1336 MenuClickShowRoad, // 16
1337 MenuClickShowShips, // 17
1338 MenuClickShowAir, // 18
1339 MenuClickMap, // 19
1340 nullptr, // 20
1341 MenuClickBuildRail, // 21
1342 MenuClickBuildRoad, // 22
1343 MenuClickBuildTram, // 23
1344 MenuClickBuildWater, // 24
1345 MenuClickBuildAir, // 25
1346 MenuClickForest, // 26
1347 MenuClickMusicWindow, // 27
1348 MenuClickNewspaper, // 28
1349 MenuClickHelp, // 29
1350};
1351
1353 class NWidgetToolbarContainer : public NWidgetContainer {
1354protected:
1355 uint spacers = 0;
1356
1357public:
1358 NWidgetToolbarContainer() : NWidgetContainer(NWID_HORIZONTAL)
1359 {
1360 }
1361
1367 bool IsButton(WidgetType type) const
1368 {
1369 return type == WWT_IMGBTN || type == WWT_IMGBTN_2 || type == WWT_PUSHIMGBTN;
1370 }
1371
1372 void SetupSmallestSize(Window *w) override
1373 {
1374 this->smallest_x = 0; // Biggest child
1375 this->smallest_y = 0; // Biggest child
1376 this->fill_x = 1;
1377 this->fill_y = 0;
1378 this->resize_x = 1; // We only resize in this direction
1379 this->resize_y = 0; // We never resize in this direction
1380 this->spacers = 0;
1381
1382 uint nbuttons = 0;
1383 /* First initialise some variables... */
1384 for (const auto &child_wid : this->children) {
1385 child_wid->SetupSmallestSize(w);
1386 this->smallest_y = std::max(this->smallest_y, child_wid->smallest_y + child_wid->padding.Vertical());
1387 if (this->IsButton(child_wid->type)) {
1388 nbuttons++;
1389 this->smallest_x = std::max(this->smallest_x, child_wid->smallest_x + child_wid->padding.Horizontal());
1390 } else if (child_wid->type == NWID_SPACER) {
1391 this->spacers++;
1392 }
1393 }
1394
1395 /* ... then in a second pass make sure the 'current' heights are set. Won't change ever. */
1396 for (const auto &child_wid : this->children) {
1397 child_wid->current_y = this->smallest_y;
1398 if (!this->IsButton(child_wid->type)) {
1399 child_wid->current_x = child_wid->smallest_x;
1400 }
1401 }
1402
1403 /* Exclude the switcher button which is not displayed when the toolbar fits the screen. When the switch is
1404 * displayed there will be no spacers anyway. */
1405 --nbuttons;
1406
1407 /* Allow space for all buttons, and include spacers at quarter the width of buttons. */
1408 _toolbar_width = nbuttons * this->smallest_x + this->spacers * this->smallest_x / 4;
1409 }
1410
1411 void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override
1412 {
1413 assert(given_width >= this->smallest_x && given_height >= this->smallest_y);
1414
1415 this->pos_x = x;
1416 this->pos_y = y;
1417 this->current_x = given_width;
1418 this->current_y = given_height;
1419
1420 /* Figure out what are the visible buttons */
1421 uint arrangeable_count, button_count, spacer_count;
1422 const WidgetID *arrangement = GetButtonArrangement(given_width, arrangeable_count, button_count, spacer_count);
1423
1424 /* Create us ourselves a quick lookup table from WidgetID to slot. */
1425 std::map<WidgetID, uint> lookup;
1426 for (auto it = std::begin(this->children); it != std::end(this->children); ++it) {
1427 NWidgetBase *nwid = it->get();
1428 nwid->current_x = 0; /* Hide widget, it will be revealed in the next step. */
1429 if (nwid->type == NWID_SPACER) continue;
1430 NWidgetCore *nwc = dynamic_cast<NWidgetCore *>(nwid);
1431 assert(nwc != nullptr);
1432 lookup[nwc->GetIndex()] = std::distance(this->children.begin(), it);
1433 }
1434
1435 /* Now assign the widgets to their rightful place */
1436 uint position = 0; // Place to put next child relative to origin of the container.
1437 uint spacer_space = std::max(0, (int)given_width - (int)(button_count * this->smallest_x)); // Remaining spacing for 'spacer' widgets
1438 uint button_space = given_width - spacer_space; // Remaining spacing for the buttons
1439 uint spacer_i = 0;
1440 uint button_i = 0;
1441
1442 /* Index into the arrangement indices. */
1443 const WidgetID *slotp = rtl ? &arrangement[arrangeable_count - 1] : arrangement;
1444 for (uint i = 0; i < arrangeable_count; i++) {
1445 uint slot = lookup[*slotp];
1446 auto &child_wid = this->children[slot];
1447 /* If we have space to give to the spacers, do that. */
1448 if (spacer_space > 0 && slot > 0 && slot < this->children.size() - 1) {
1449 const auto &possible_spacer = this->children[slot + (rtl ? 1 : -1)];
1450 if (possible_spacer != nullptr && possible_spacer->type == NWID_SPACER) {
1451 uint add = spacer_space / (spacer_count - spacer_i);
1452 position += add;
1453 spacer_space -= add;
1454 spacer_i++;
1455 }
1456 }
1457
1458 /* Buttons can be scaled, the others not. */
1459 if (this->IsButton(child_wid->type)) {
1460 child_wid->current_x = button_space / (button_count - button_i);
1461 button_space -= child_wid->current_x;
1462 button_i++;
1463 } else {
1464 child_wid->current_x = child_wid->smallest_x;
1465 }
1466 child_wid->AssignSizePosition(sizing, x + position, y, child_wid->current_x, this->current_y, rtl);
1467 position += child_wid->current_x;
1468
1469 if (rtl) {
1470 slotp--;
1471 } else {
1472 slotp++;
1473 }
1474 }
1475 }
1476
1477 void Draw(const Window *w) override
1478 {
1479 /* Draw brown-red toolbar bg. */
1480 const Rect r = this->GetCurrentRect();
1481 GfxFillRect(r, PC_VERY_DARK_RED);
1482 GfxFillRect(r, PC_DARK_RED, FILLRECT_CHECKER);
1483
1484 this->NWidgetContainer::Draw(w);
1485 }
1486
1495 virtual const WidgetID *GetButtonArrangement(uint &width, uint &arrangeable_count, uint &button_count, uint &spacer_count) const = 0;
1496};
1497
1499 class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
1500 const WidgetID *GetButtonArrangement(uint &width, uint &arrangeable_count, uint &button_count, uint &spacer_count) const override
1501 {
1502 static const uint SMALLEST_ARRANGEMENT = 14;
1503 static const uint BIGGEST_ARRANGEMENT = 20;
1504
1505 /* The number of buttons of each row of the toolbar should match the number of items which we want to be visible.
1506 * The total number of buttons should be equal to arrangeable_count * 2.
1507 * No bad things happen, but we could see strange behaviours if we have buttons < (arrangeable_count * 2) like a
1508 * pause button appearing on the right of the lower toolbar and weird resizing of the widgets even if there is
1509 * enough space.
1510 */
1511 static const WidgetID arrange14[] = {
1512 WID_TN_PAUSE,
1513 WID_TN_FAST_FORWARD,
1514 WID_TN_TRAINS,
1515 WID_TN_ROADVEHS,
1516 WID_TN_SHIPS,
1517 WID_TN_AIRCRAFT,
1518 WID_TN_ZOOM_IN,
1519 WID_TN_ZOOM_OUT,
1520 WID_TN_RAILS,
1521 WID_TN_ROADS,
1522 WID_TN_WATER,
1523 WID_TN_AIR,
1524 WID_TN_LANDSCAPE,
1525 WID_TN_SWITCH_BAR,
1526 /* lower toolbar */
1527 WID_TN_SETTINGS,
1528 WID_TN_SAVE,
1529 WID_TN_SMALL_MAP,
1530 WID_TN_TOWNS,
1531 WID_TN_SUBSIDIES,
1532 WID_TN_STATIONS,
1533 WID_TN_FINANCES,
1534 WID_TN_COMPANIES,
1535 WID_TN_GRAPHS,
1536 WID_TN_INDUSTRIES,
1537 WID_TN_MUSIC_SOUND,
1538 WID_TN_MESSAGES,
1539 WID_TN_HELP,
1540 WID_TN_SWITCH_BAR,
1541 };
1542 static const WidgetID arrange15[] = {
1543 WID_TN_PAUSE,
1544 WID_TN_FAST_FORWARD,
1545 WID_TN_SMALL_MAP,
1546 WID_TN_TRAINS,
1547 WID_TN_ROADVEHS,
1548 WID_TN_SHIPS,
1549 WID_TN_AIRCRAFT,
1550 WID_TN_RAILS,
1551 WID_TN_ROADS,
1552 WID_TN_WATER,
1553 WID_TN_AIR,
1554 WID_TN_LANDSCAPE,
1555 WID_TN_ZOOM_IN,
1556 WID_TN_ZOOM_OUT,
1557 WID_TN_SWITCH_BAR,
1558 /* lower toolbar */
1559 WID_TN_PAUSE,
1560 WID_TN_SETTINGS,
1561 WID_TN_SMALL_MAP,
1562 WID_TN_SAVE,
1563 WID_TN_TOWNS,
1564 WID_TN_SUBSIDIES,
1565 WID_TN_STATIONS,
1566 WID_TN_FINANCES,
1567 WID_TN_COMPANIES,
1568 WID_TN_GRAPHS,
1569 WID_TN_INDUSTRIES,
1570 WID_TN_MUSIC_SOUND,
1571 WID_TN_MESSAGES,
1572 WID_TN_HELP,
1573 WID_TN_SWITCH_BAR,
1574 };
1575 static const WidgetID arrange16[] = {
1576 WID_TN_PAUSE,
1577 WID_TN_FAST_FORWARD,
1578 WID_TN_SETTINGS,
1579 WID_TN_SMALL_MAP,
1580 WID_TN_TRAINS,
1581 WID_TN_ROADVEHS,
1582 WID_TN_SHIPS,
1583 WID_TN_AIRCRAFT,
1584 WID_TN_RAILS,
1585 WID_TN_ROADS,
1586 WID_TN_WATER,
1587 WID_TN_AIR,
1588 WID_TN_LANDSCAPE,
1589 WID_TN_ZOOM_IN,
1590 WID_TN_ZOOM_OUT,
1591 WID_TN_SWITCH_BAR,
1592 /* lower toolbar */
1593 WID_TN_PAUSE,
1594 WID_TN_FAST_FORWARD,
1595 WID_TN_SAVE,
1596 WID_TN_TOWNS,
1597 WID_TN_SUBSIDIES,
1598 WID_TN_STATIONS,
1599 WID_TN_FINANCES,
1600 WID_TN_COMPANIES,
1601 WID_TN_GRAPHS,
1602 WID_TN_INDUSTRIES,
1603 WID_TN_MUSIC_SOUND,
1604 WID_TN_MESSAGES,
1605 WID_TN_HELP,
1606 WID_TN_ZOOM_IN,
1607 WID_TN_ZOOM_OUT,
1608 WID_TN_SWITCH_BAR,
1609 };
1610 static const WidgetID arrange17[] = {
1611 WID_TN_PAUSE,
1612 WID_TN_FAST_FORWARD,
1613 WID_TN_SETTINGS,
1614 WID_TN_SMALL_MAP,
1615 WID_TN_SUBSIDIES,
1616 WID_TN_TRAINS,
1617 WID_TN_ROADVEHS,
1618 WID_TN_SHIPS,
1619 WID_TN_AIRCRAFT,
1620 WID_TN_RAILS,
1621 WID_TN_ROADS,
1622 WID_TN_WATER,
1623 WID_TN_AIR,
1624 WID_TN_LANDSCAPE,
1625 WID_TN_ZOOM_IN,
1626 WID_TN_ZOOM_OUT,
1627 WID_TN_SWITCH_BAR,
1628 /* lower toolbar */
1629 WID_TN_PAUSE,
1630 WID_TN_FAST_FORWARD,
1631 WID_TN_SAVE,
1632 WID_TN_SMALL_MAP,
1633 WID_TN_SUBSIDIES,
1634 WID_TN_TOWNS,
1635 WID_TN_STATIONS,
1636 WID_TN_FINANCES,
1637 WID_TN_COMPANIES,
1638 WID_TN_GRAPHS,
1639 WID_TN_INDUSTRIES,
1640 WID_TN_MUSIC_SOUND,
1641 WID_TN_MESSAGES,
1642 WID_TN_HELP,
1643 WID_TN_ZOOM_IN,
1644 WID_TN_ZOOM_OUT,
1645 WID_TN_SWITCH_BAR,
1646 };
1647 static const WidgetID arrange18[] = {
1648 WID_TN_PAUSE,
1649 WID_TN_FAST_FORWARD,
1650 WID_TN_SETTINGS,
1651 WID_TN_SMALL_MAP,
1652 WID_TN_TOWNS,
1653 WID_TN_SUBSIDIES,
1654 WID_TN_STATIONS,
1655 WID_TN_FINANCES,
1656 WID_TN_COMPANIES,
1657 WID_TN_INDUSTRIES,
1658 WID_TN_RAILS,
1659 WID_TN_ROADS,
1660 WID_TN_WATER,
1661 WID_TN_AIR,
1662 WID_TN_LANDSCAPE,
1663 WID_TN_ZOOM_IN,
1664 WID_TN_ZOOM_OUT,
1665 WID_TN_SWITCH_BAR,
1666 /* lower toolbar */
1667 WID_TN_PAUSE,
1668 WID_TN_FAST_FORWARD,
1669 WID_TN_SAVE,
1670 WID_TN_SMALL_MAP,
1671 WID_TN_TOWNS,
1672 WID_TN_SUBSIDIES,
1673 WID_TN_STATIONS,
1674 WID_TN_GRAPHS,
1675 WID_TN_TRAINS,
1676 WID_TN_ROADVEHS,
1677 WID_TN_SHIPS,
1678 WID_TN_AIRCRAFT,
1679 WID_TN_MUSIC_SOUND,
1680 WID_TN_MESSAGES,
1681 WID_TN_HELP,
1682 WID_TN_ZOOM_IN,
1683 WID_TN_ZOOM_OUT,
1684 WID_TN_SWITCH_BAR,
1685 };
1686 static const WidgetID arrange19[] = {
1687 WID_TN_PAUSE,
1688 WID_TN_FAST_FORWARD,
1689 WID_TN_SETTINGS,
1690 WID_TN_SMALL_MAP,
1691 WID_TN_TOWNS,
1692 WID_TN_SUBSIDIES,
1693 WID_TN_TRAINS,
1694 WID_TN_ROADVEHS,
1695 WID_TN_SHIPS,
1696 WID_TN_AIRCRAFT,
1697 WID_TN_RAILS,
1698 WID_TN_ROADS,
1699 WID_TN_WATER,
1700 WID_TN_AIR,
1701 WID_TN_LANDSCAPE,
1702 WID_TN_MUSIC_SOUND,
1703 WID_TN_ZOOM_IN,
1704 WID_TN_ZOOM_OUT,
1705 WID_TN_SWITCH_BAR,
1706 /* lower toolbar */
1707 WID_TN_PAUSE,
1708 WID_TN_FAST_FORWARD,
1709 WID_TN_SAVE,
1710 WID_TN_SMALL_MAP,
1711 WID_TN_STATIONS,
1712 WID_TN_FINANCES,
1713 WID_TN_COMPANIES,
1714 WID_TN_GRAPHS,
1715 WID_TN_INDUSTRIES,
1716 WID_TN_MESSAGES,
1717 WID_TN_RAILS,
1718 WID_TN_ROADS,
1719 WID_TN_WATER,
1720 WID_TN_AIR,
1721 WID_TN_LANDSCAPE,
1722 WID_TN_HELP,
1723 WID_TN_ZOOM_IN,
1724 WID_TN_ZOOM_OUT,
1725 WID_TN_SWITCH_BAR,
1726 };
1727 static const WidgetID arrange20[] = {
1728 WID_TN_PAUSE,
1729 WID_TN_FAST_FORWARD,
1730 WID_TN_SETTINGS,
1731 WID_TN_SMALL_MAP,
1732 WID_TN_TOWNS,
1733 WID_TN_SUBSIDIES,
1734 WID_TN_TRAINS,
1735 WID_TN_ROADVEHS,
1736 WID_TN_SHIPS,
1737 WID_TN_AIRCRAFT,
1738 WID_TN_RAILS,
1739 WID_TN_ROADS,
1740 WID_TN_WATER,
1741 WID_TN_AIR,
1742 WID_TN_LANDSCAPE,
1743 WID_TN_MUSIC_SOUND,
1744 WID_TN_GOAL,
1745 WID_TN_ZOOM_IN,
1746 WID_TN_ZOOM_OUT,
1747 WID_TN_SWITCH_BAR,
1748 /* lower toolbar */
1749 WID_TN_PAUSE,
1750 WID_TN_FAST_FORWARD,
1751 WID_TN_SAVE,
1752 WID_TN_SMALL_MAP,
1753 WID_TN_STATIONS,
1754 WID_TN_FINANCES,
1755 WID_TN_COMPANIES,
1756 WID_TN_GRAPHS,
1757 WID_TN_INDUSTRIES,
1758 WID_TN_MESSAGES,
1759 WID_TN_RAILS,
1760 WID_TN_ROADS,
1761 WID_TN_WATER,
1762 WID_TN_AIR,
1763 WID_TN_LANDSCAPE,
1764 WID_TN_STORY,
1765 WID_TN_HELP,
1766 WID_TN_ZOOM_IN,
1767 WID_TN_ZOOM_OUT,
1768 WID_TN_SWITCH_BAR,
1769 };
1770 static const WidgetID arrange_all[] = {
1771 WID_TN_PAUSE,
1772 WID_TN_FAST_FORWARD,
1773 WID_TN_SETTINGS,
1774 WID_TN_SAVE,
1775 WID_TN_SMALL_MAP,
1776 WID_TN_TOWNS,
1777 WID_TN_SUBSIDIES,
1778 WID_TN_STATIONS,
1779 WID_TN_FINANCES,
1780 WID_TN_COMPANIES,
1781 WID_TN_STORY,
1782 WID_TN_GOAL,
1783 WID_TN_GRAPHS,
1784 WID_TN_LEAGUE,
1785 WID_TN_INDUSTRIES,
1786 WID_TN_TRAINS,
1787 WID_TN_ROADVEHS,
1788 WID_TN_SHIPS,
1789 WID_TN_AIRCRAFT,
1790 WID_TN_ZOOM_IN,
1791 WID_TN_ZOOM_OUT,
1792 WID_TN_RAILS,
1793 WID_TN_ROADS,
1794 WID_TN_TRAMS,
1795 WID_TN_WATER,
1796 WID_TN_AIR,
1797 WID_TN_LANDSCAPE,
1798 WID_TN_MUSIC_SOUND,
1799 WID_TN_MESSAGES,
1800 WID_TN_HELP
1801 };
1802
1803 /* If at least BIGGEST_ARRANGEMENT fit, just spread all the buttons nicely */
1804 uint full_buttons = std::max(CeilDiv(width, this->smallest_x), SMALLEST_ARRANGEMENT);
1805 if (full_buttons > BIGGEST_ARRANGEMENT) {
1806 button_count = arrangeable_count = lengthof(arrange_all);
1807 spacer_count = this->spacers;
1808 return arrange_all;
1809 }
1810
1811 /* Introduce the split toolbar */
1812 static const WidgetID * const arrangements[] = { arrange14, arrange15, arrange16, arrange17, arrange18, arrange19, arrange20 };
1813
1814 button_count = arrangeable_count = full_buttons;
1815 spacer_count = this->spacers;
1816 return arrangements[full_buttons - SMALLEST_ARRANGEMENT] + ((_toolbar_mode == TB_LOWER) ? full_buttons : 0);
1817 }
1818};
1819
1821 class NWidgetScenarioToolbarContainer : public NWidgetToolbarContainer {
1822 std::array<uint, 2> panel_widths{};
1823
1824 void SetupSmallestSize(Window *w) override
1825 {
1826 this->NWidgetToolbarContainer::SetupSmallestSize(w);
1827
1828 /* Find the size of panel_widths */
1829 auto it = this->panel_widths.begin();
1830 for (const auto &child_wid : this->children) {
1831 if (child_wid->type == NWID_SPACER || this->IsButton(child_wid->type)) continue;
1832
1833 assert(it != this->panel_widths.end());
1834 *it = child_wid->current_x;
1835 _toolbar_width += child_wid->current_x;
1836 ++it;
1837 }
1838 }
1839
1840 const WidgetID *GetButtonArrangement(uint &width, uint &arrangeable_count, uint &button_count, uint &spacer_count) const override
1841 {
1842 static const WidgetID arrange_all[] = {
1843 WID_TE_PAUSE,
1844 WID_TE_FAST_FORWARD,
1845 WID_TE_SETTINGS,
1846 WID_TE_SAVE,
1847 WID_TE_SPACER,
1848 WID_TE_DATE_PANEL,
1849 WID_TE_SMALL_MAP,
1850 WID_TE_ZOOM_IN,
1851 WID_TE_ZOOM_OUT,
1852 WID_TE_LAND_GENERATE,
1853 WID_TE_TOWN_GENERATE,
1854 WID_TE_INDUSTRY,
1855 WID_TE_ROADS,
1856 WID_TE_TRAMS,
1857 WID_TE_WATER,
1858 WID_TE_TREES,
1859 WID_TE_SIGNS,
1860 WID_TE_MUSIC_SOUND,
1861 WID_TE_HELP,
1862 };
1863 static const WidgetID arrange_nopanel[] = {
1864 WID_TE_PAUSE,
1865 WID_TE_FAST_FORWARD,
1866 WID_TE_SETTINGS,
1867 WID_TE_SAVE,
1868 WID_TE_DATE_PANEL,
1869 WID_TE_SMALL_MAP,
1870 WID_TE_ZOOM_IN,
1871 WID_TE_ZOOM_OUT,
1872 WID_TE_LAND_GENERATE,
1873 WID_TE_TOWN_GENERATE,
1874 WID_TE_INDUSTRY,
1875 WID_TE_ROADS,
1876 WID_TE_TRAMS,
1877 WID_TE_WATER,
1878 WID_TE_TREES,
1879 WID_TE_SIGNS,
1880 WID_TE_MUSIC_SOUND,
1881 WID_TE_HELP,
1882 };
1883 static const WidgetID arrange_switch[] = {
1884 WID_TE_DATE_PANEL,
1885 WID_TE_SMALL_MAP,
1886 WID_TE_LAND_GENERATE,
1887 WID_TE_TOWN_GENERATE,
1888 WID_TE_INDUSTRY,
1889 WID_TE_ROADS,
1890 WID_TE_TRAMS,
1891 WID_TE_WATER,
1892 WID_TE_TREES,
1893 WID_TE_SIGNS,
1894 WID_TE_SWITCH_BAR,
1895 /* lower toolbar */
1896 WID_TE_PAUSE,
1897 WID_TE_FAST_FORWARD,
1898 WID_TE_SETTINGS,
1899 WID_TE_SAVE,
1900 WID_TE_DATE_PANEL,
1901 WID_TE_SMALL_MAP,
1902 WID_TE_ZOOM_IN,
1903 WID_TE_ZOOM_OUT,
1904 WID_TE_MUSIC_SOUND,
1905 WID_TE_HELP,
1906 WID_TE_SWITCH_BAR,
1907 };
1908
1909 /* If we can place all buttons *and* the panels, show them. */
1910 size_t min_full_width = (lengthof(arrange_all) - std::size(this->panel_widths)) * this->smallest_x + this->panel_widths[0] + this->panel_widths[1];
1911 if (width >= min_full_width) {
1912 width -= this->panel_widths[0] + this->panel_widths[1];
1913 arrangeable_count = lengthof(arrange_all);
1914 button_count = arrangeable_count - 2;
1915 spacer_count = this->spacers;
1916 return arrange_all;
1917 }
1918
1919 /* 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 */
1920 size_t min_small_width = (lengthof(arrange_switch) - std::size(this->panel_widths)) * this->smallest_x / 2 + this->panel_widths[1];
1921 if (width > min_small_width) {
1922 width -= this->panel_widths[1];
1923 arrangeable_count = lengthof(arrange_nopanel);
1924 button_count = arrangeable_count - 1;
1925 spacer_count = this->spacers - 1;
1926 return arrange_nopanel;
1927 }
1928
1929 /* Split toolbar */
1930 width -= this->panel_widths[1];
1931 arrangeable_count = lengthof(arrange_switch) / 2;
1932 button_count = arrangeable_count - 1;
1933 spacer_count = 0;
1934 return arrange_switch + ((_toolbar_mode == TB_LOWER) ? arrangeable_count : 0);
1935 }
1936};
1937
1938/* --- Toolbar handling for the 'normal' case */
1939
1940typedef CallBackFunction ToolbarButtonProc(Window *w);
1941
1942static ToolbarButtonProc * const _toolbar_button_procs[] = {
1943 ToolbarPauseClick,
1944 ToolbarFastForwardClick,
1945 ToolbarOptionsClick,
1946 ToolbarSaveClick,
1947 ToolbarMapClick,
1948 ToolbarTownClick,
1949 ToolbarSubsidiesClick,
1950 ToolbarStationsClick,
1951 ToolbarFinancesClick,
1952 ToolbarCompaniesClick,
1953 ToolbarStoryClick,
1954 ToolbarGoalClick,
1955 ToolbarGraphsClick,
1956 ToolbarLeagueClick,
1957 ToolbarIndustryClick,
1958 ToolbarTrainClick,
1959 ToolbarRoadClick,
1960 ToolbarShipClick,
1961 ToolbarAirClick,
1962 ToolbarZoomInClick,
1963 ToolbarZoomOutClick,
1964 ToolbarBuildRailClick,
1965 ToolbarBuildRoadClick,
1966 ToolbarBuildTramClick,
1967 ToolbarBuildWaterClick,
1968 ToolbarBuildAirClick,
1969 ToolbarForestClick,
1970 ToolbarMusicClick,
1971 ToolbarNewspaperClick,
1972 ToolbarHelpClick,
1973 ToolbarSwitchClick,
1974};
1975
1977 struct MainToolbarWindow : Window {
1978 MainToolbarWindow(WindowDesc &desc) : Window(desc)
1979 {
1980 this->InitNested(0);
1981
1982 _last_started_action = CBF_NONE;
1983 this->flags.Reset(WindowFlag::WhiteBorder);
1984 this->SetWidgetDisabledState(WID_TN_PAUSE, _networking && !_network_server); // if not server, disable pause button
1985 this->SetWidgetDisabledState(WID_TN_FAST_FORWARD, _networking); // if networking, disable fast-forward button
1986 PositionMainToolbar(this);
1987 DoZoomInOutWindow(ZOOM_NONE, this);
1988 }
1989
1990 void FindWindowPlacementAndResize(int, int def_height, bool allow_resize) override
1991 {
1992 Window::FindWindowPlacementAndResize(_toolbar_width, def_height, allow_resize);
1993 }
1994
1995 void OnPaint() override
1996 {
1997 /* If spectator, disable all construction buttons
1998 * ie : Build road, rail, ships, airports and landscaping
1999 * Since enabled state is the default, just disable when needed */
2000 this->SetWidgetsDisabledState(_local_company == COMPANY_SPECTATOR, WID_TN_RAILS, WID_TN_ROADS, WID_TN_TRAMS, WID_TN_WATER, WID_TN_AIR, WID_TN_LANDSCAPE);
2001 /* disable company list drop downs, if there are no companies */
2002 this->SetWidgetsDisabledState(Company::GetNumItems() == 0, WID_TN_STATIONS, WID_TN_FINANCES, WID_TN_TRAINS, WID_TN_ROADVEHS, WID_TN_SHIPS, WID_TN_AIRCRAFT);
2003
2004 this->SetWidgetDisabledState(WID_TN_GOAL, Goal::GetNumItems() == 0);
2005 this->SetWidgetDisabledState(WID_TN_STORY, StoryPage::GetNumItems() == 0);
2006
2007 this->DrawWidgets();
2008 }
2009
2010 void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
2011 {
2012 if (_game_mode != GM_MENU && !this->IsWidgetDisabled(widget)) _toolbar_button_procs[widget](this);
2013 }
2014
2015 void OnDropdownSelect(WidgetID widget, int index, int) override
2016 {
2017 CallBackFunction cbf = _menu_clicked_procs[widget](index);
2018 if (cbf != CBF_NONE) _last_started_action = cbf;
2019 }
2020
2021 EventState OnHotkey(int hotkey) override
2022 {
2023 CallBackFunction cbf = CBF_NONE;
2024 switch (hotkey) {
2025 case MTHK_PAUSE: ToolbarPauseClick(this); break;
2026 case MTHK_FASTFORWARD: ToolbarFastForwardClick(this); break;
2027 case MTHK_SETTINGS: ShowGameOptions(); break;
2028 case MTHK_SAVEGAME: MenuClickSaveLoad(); break;
2029 case MTHK_LOADGAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break;
2030 case MTHK_SMALLMAP: ShowSmallMap(); break;
2031 case MTHK_TOWNDIRECTORY: ShowTownDirectory(); break;
2032 case MTHK_SUBSIDIES: ShowSubsidiesList(); break;
2033 case MTHK_STATIONS: ShowCompanyStations(_local_company); break;
2034 case MTHK_FINANCES: ShowCompanyFinances(_local_company); break;
2035 case MTHK_COMPANIES: ShowCompany(_local_company); break;
2036 case MTHK_STORY: ShowStoryBook(_local_company); break;
2037 case MTHK_GOAL: ShowGoalsList(_local_company); break;
2038 case MTHK_GRAPHS: ShowOperatingProfitGraph(); break;
2039 case MTHK_LEAGUE: ShowFirstLeagueTable(); break;
2040 case MTHK_INDUSTRIES: ShowBuildIndustryWindow(); break;
2041 case MTHK_TRAIN_LIST: ShowVehicleListWindow(_local_company, VEH_TRAIN); break;
2042 case MTHK_ROADVEH_LIST: ShowVehicleListWindow(_local_company, VEH_ROAD); break;
2043 case MTHK_SHIP_LIST: ShowVehicleListWindow(_local_company, VEH_SHIP); break;
2044 case MTHK_AIRCRAFT_LIST: ShowVehicleListWindow(_local_company, VEH_AIRCRAFT); break;
2045 case MTHK_ZOOM_IN: ToolbarZoomInClick(this); break;
2046 case MTHK_ZOOM_OUT: ToolbarZoomOutClick(this); break;
2047 case MTHK_BUILD_RAIL: ShowBuildRailToolbar(_last_built_railtype); break;
2048 case MTHK_BUILD_ROAD: ShowBuildRoadToolbar(_last_built_roadtype); break;
2049 case MTHK_BUILD_TRAM: ShowBuildRoadToolbar(_last_built_tramtype); break;
2050 case MTHK_BUILD_DOCKS: ShowBuildDocksToolbar(); break;
2051 case MTHK_BUILD_AIRPORT: ShowBuildAirToolbar(); break;
2052 case MTHK_BUILD_TREES: ShowBuildTreesToolbar(); break;
2053 case MTHK_MUSIC: ShowMusicWindow(); break;
2054 case MTHK_SCRIPT_DEBUG: ShowScriptDebugWindow(); break;
2055 case MTHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break;
2056 case MTHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break;
2057 case MTHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break;
2058 case MTHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break;
2059 case MTHK_CHEATS: if (!_networking) ShowCheatWindow(); break;
2060 case MTHK_TERRAFORM: ShowTerraformToolbar(); break;
2061 case MTHK_EXTRA_VIEWPORT: ShowExtraViewportWindowForTileUnderCursor(); break;
2062 case MTHK_CLIENT_LIST: if (_networking) ShowClientList(); break;
2063 case MTHK_SIGN_LIST: ShowSignList(); break;
2064 case MTHK_LANDINFO: cbf = PlaceLandBlockInfo(); break;
2065 default: return ES_NOT_HANDLED;
2066 }
2067 if (cbf != CBF_NONE) _last_started_action = cbf;
2068 return ES_HANDLED;
2069 }
2070
2071 void OnPlaceObject([[maybe_unused]] Point pt, TileIndex tile) override
2072 {
2073 switch (_last_started_action) {
2074 case CBF_PLACE_SIGN:
2075 PlaceProc_Sign(tile);
2076 break;
2077
2078 case CBF_PLACE_LANDINFO:
2079 ShowLandInfo(tile);
2080 break;
2081
2082 default: NOT_REACHED();
2083 }
2084 }
2085
2086 void OnPlaceObjectAbort() override
2087 {
2088 _last_started_action = CBF_NONE;
2089 }
2090
2092 const IntervalTimer<TimerWindow> refresh_interval = {std::chrono::milliseconds(30), [this](auto) {
2093 if (this->IsWidgetLowered(WID_TN_PAUSE) != _pause_mode.Any()) {
2094 this->ToggleWidgetLoweredState(WID_TN_PAUSE);
2095 this->SetWidgetDirty(WID_TN_PAUSE);
2096 }
2097
2098 if (this->IsWidgetLowered(WID_TN_FAST_FORWARD) != (_game_speed != 100)) {
2099 this->ToggleWidgetLoweredState(WID_TN_FAST_FORWARD);
2100 this->SetWidgetDirty(WID_TN_FAST_FORWARD);
2101 }
2102 }};
2103
2109 void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
2110 {
2111 if (!gui_scope) return;
2112 HandleZoomMessage(this, *GetMainWindow()->viewport, WID_TN_ZOOM_IN, WID_TN_ZOOM_OUT);
2113 }
2114
2115 static inline HotkeyList hotkeys{"maintoolbar", {
2116 Hotkey({WKC_F1, WKC_PAUSE}, "pause", MTHK_PAUSE),
2117 Hotkey(0, "fastforward", MTHK_FASTFORWARD),
2118 Hotkey(WKC_F2, "settings", MTHK_SETTINGS),
2119 Hotkey(WKC_F3, "saveload", MTHK_SAVEGAME),
2120 Hotkey(0, "load_game", MTHK_LOADGAME),
2121 Hotkey({WKC_F4, 'M'}, "smallmap", MTHK_SMALLMAP),
2122 Hotkey(WKC_F5, "town_list", MTHK_TOWNDIRECTORY),
2123 Hotkey(WKC_F6, "subsidies", MTHK_SUBSIDIES),
2124 Hotkey(WKC_F7, "station_list", MTHK_STATIONS),
2125 Hotkey(WKC_F8, "finances", MTHK_FINANCES),
2126 Hotkey(WKC_F9, "companies", MTHK_COMPANIES),
2127 Hotkey(0, "story_book", MTHK_STORY),
2128 Hotkey(0, "goal_list", MTHK_GOAL),
2129 Hotkey(WKC_F10, "graphs", MTHK_GRAPHS),
2130 Hotkey(WKC_F11, "league", MTHK_LEAGUE),
2131 Hotkey(WKC_F12, "industry_list", MTHK_INDUSTRIES),
2132 Hotkey(WKC_SHIFT | WKC_F1, "train_list", MTHK_TRAIN_LIST),
2133 Hotkey(WKC_SHIFT | WKC_F2, "roadveh_list", MTHK_ROADVEH_LIST),
2134 Hotkey(WKC_SHIFT | WKC_F3, "ship_list", MTHK_SHIP_LIST),
2135 Hotkey(WKC_SHIFT | WKC_F4, "aircraft_list", MTHK_AIRCRAFT_LIST),
2136 Hotkey({WKC_NUM_PLUS, WKC_EQUALS, WKC_SHIFT | WKC_EQUALS, WKC_SHIFT | WKC_F5}, "zoomin", MTHK_ZOOM_IN),
2137 Hotkey({WKC_NUM_MINUS, WKC_MINUS, WKC_SHIFT | WKC_MINUS, WKC_SHIFT | WKC_F6}, "zoomout", MTHK_ZOOM_OUT),
2138 Hotkey(WKC_SHIFT | WKC_F7, "build_rail", MTHK_BUILD_RAIL),
2139 Hotkey(WKC_SHIFT | WKC_F8, "build_road", MTHK_BUILD_ROAD),
2140 Hotkey(0, "build_tram", MTHK_BUILD_TRAM),
2141 Hotkey(WKC_SHIFT | WKC_F9, "build_docks", MTHK_BUILD_DOCKS),
2142 Hotkey(WKC_SHIFT | WKC_F10, "build_airport", MTHK_BUILD_AIRPORT),
2143 Hotkey(WKC_SHIFT | WKC_F11, "build_trees", MTHK_BUILD_TREES),
2144 Hotkey(WKC_SHIFT | WKC_F12, "music", MTHK_MUSIC),
2145 Hotkey(0, "ai_debug", MTHK_SCRIPT_DEBUG),
2146 Hotkey(WKC_CTRL | 'S', "small_screenshot", MTHK_SMALL_SCREENSHOT),
2147 Hotkey(WKC_CTRL | 'P', "zoomedin_screenshot", MTHK_ZOOMEDIN_SCREENSHOT),
2148 Hotkey(WKC_CTRL | 'D', "defaultzoom_screenshot", MTHK_DEFAULTZOOM_SCREENSHOT),
2149 Hotkey(0, "giant_screenshot", MTHK_GIANT_SCREENSHOT),
2150 Hotkey(WKC_CTRL | WKC_ALT | 'C', "cheats", MTHK_CHEATS),
2151 Hotkey('L', "terraform", MTHK_TERRAFORM),
2152 Hotkey('V', "extra_viewport", MTHK_EXTRA_VIEWPORT),
2153 Hotkey(0, "client_list", MTHK_CLIENT_LIST),
2154 Hotkey(0, "sign_list", MTHK_SIGN_LIST),
2155 Hotkey(0, "land_info", MTHK_LANDINFO),
2156 }};
2157};
2158
2159 static std::unique_ptr<NWidgetBase> MakeMainToolbar()
2160{
2162 static const std::tuple<WidgetID, WidgetType, SpriteID> toolbar_button_sprites[] = {
2163 {WID_TN_PAUSE, WWT_IMGBTN, SPR_IMG_PAUSE},
2164 {WID_TN_FAST_FORWARD, WWT_IMGBTN, SPR_IMG_FASTFORWARD},
2165 {WID_TN_SETTINGS, WWT_IMGBTN, SPR_IMG_SETTINGS},
2166 {WID_TN_SAVE, WWT_IMGBTN_2, SPR_IMG_SAVE},
2167 {WID_TN_SMALL_MAP, WWT_IMGBTN, SPR_IMG_SMALLMAP},
2168 {WID_TN_TOWNS, WWT_IMGBTN, SPR_IMG_TOWN},
2169 {WID_TN_SUBSIDIES, WWT_IMGBTN, SPR_IMG_SUBSIDIES},
2170 {WID_TN_STATIONS, WWT_IMGBTN, SPR_IMG_COMPANY_LIST},
2171 {WID_TN_FINANCES, WWT_IMGBTN, SPR_IMG_COMPANY_FINANCE},
2172 {WID_TN_COMPANIES, WWT_IMGBTN, SPR_IMG_COMPANY_GENERAL},
2173 {WID_TN_STORY, WWT_IMGBTN, SPR_IMG_STORY_BOOK},
2174 {WID_TN_GOAL, WWT_IMGBTN, SPR_IMG_GOAL},
2175 {WID_TN_GRAPHS, WWT_IMGBTN, SPR_IMG_GRAPHS},
2176 {WID_TN_LEAGUE, WWT_IMGBTN, SPR_IMG_COMPANY_LEAGUE},
2177 {WID_TN_INDUSTRIES, WWT_IMGBTN, SPR_IMG_INDUSTRY},
2178 {WID_TN_TRAINS, WWT_IMGBTN, SPR_IMG_TRAINLIST},
2179 {WID_TN_ROADVEHS, WWT_IMGBTN, SPR_IMG_TRUCKLIST},
2180 {WID_TN_SHIPS, WWT_IMGBTN, SPR_IMG_SHIPLIST},
2181 {WID_TN_AIRCRAFT, WWT_IMGBTN, SPR_IMG_AIRPLANESLIST},
2182 {WID_TN_ZOOM_IN, WWT_PUSHIMGBTN, SPR_IMG_ZOOMIN},
2183 {WID_TN_ZOOM_OUT, WWT_PUSHIMGBTN, SPR_IMG_ZOOMOUT},
2184 {WID_TN_RAILS, WWT_IMGBTN, SPR_IMG_BUILDRAIL},
2185 {WID_TN_ROADS, WWT_IMGBTN, SPR_IMG_BUILDROAD},
2186 {WID_TN_TRAMS, WWT_IMGBTN, SPR_IMG_BUILDTRAMS},
2187 {WID_TN_WATER, WWT_IMGBTN, SPR_IMG_BUILDWATER},
2188 {WID_TN_AIR, WWT_IMGBTN, SPR_IMG_BUILDAIR},
2189 {WID_TN_LANDSCAPE, WWT_IMGBTN, SPR_IMG_LANDSCAPING},
2190 {WID_TN_MUSIC_SOUND, WWT_IMGBTN, SPR_IMG_MUSIC},
2191 {WID_TN_MESSAGES, WWT_IMGBTN, SPR_IMG_MESSAGES},
2192 {WID_TN_HELP, WWT_IMGBTN, SPR_IMG_QUERY},
2193 {WID_TN_SWITCH_BAR, WWT_IMGBTN, SPR_IMG_SWITCH_TOOLBAR},
2194 };
2195
2196 auto hor = std::make_unique<NWidgetMainToolbarContainer>();
2197 for (const auto &[widget, tp, sprite] : toolbar_button_sprites) {
2198 switch (widget) {
2199 case WID_TN_SMALL_MAP:
2200 case WID_TN_FINANCES:
2201 case WID_TN_VEHICLE_START:
2202 case WID_TN_ZOOM_IN:
2203 case WID_TN_BUILDING_TOOLS_START:
2204 case WID_TN_MUSIC_SOUND:
2205 hor->Add(std::make_unique<NWidgetSpacer>(0, 0));
2206 break;
2207 }
2208 auto leaf = std::make_unique<NWidgetLeaf>(tp, COLOUR_GREY, widget, WidgetData{.sprite = sprite}, STR_TOOLBAR_TOOLTIP_PAUSE_GAME + widget);
2209 leaf->SetMinimalSize(20, 20);
2210 hor->Add(std::move(leaf));
2211 }
2212
2213 return hor;
2214}
2215
2216static constexpr std::initializer_list<NWidgetPart> _nested_toolbar_normal_widgets = {
2217 NWidgetFunction(MakeMainToolbar),
2218};
2219
2220static WindowDesc _toolb_normal_desc(
2221 WDP_MANUAL, {}, 0, 0,
2222 WC_MAIN_TOOLBAR, WC_NONE,
2223 {WindowDefaultFlag::NoFocus, WindowDefaultFlag::NoClose},
2224 _nested_toolbar_normal_widgets,
2225 &MainToolbarWindow::hotkeys
2226);
2227
2228
2229/* --- Toolbar handling for the scenario editor */
2230
2231static MenuClickedProc * const _scen_toolbar_dropdown_procs[] = {
2232 nullptr, // 0
2233 nullptr, // 1
2234 MenuClickSettings, // 2
2235 MenuClickSaveLoad, // 3
2236 nullptr, // 4
2237 nullptr, // 5
2238 nullptr, // 6
2239 nullptr, // 7
2240 MenuClickMap, // 8
2241 nullptr, // 9
2242 nullptr, // 10
2243 nullptr, // 11
2244 ToolbarScenGenTown, // 12
2245 nullptr, // 13
2246 ToolbarScenBuildRoad, // 14
2247 ToolbarScenBuildTram, // 15
2248 nullptr, // 16
2249 nullptr, // 17
2250 nullptr, // 18
2251 nullptr, // 19
2252 MenuClickMusicWindow, // 20
2253 MenuClickHelp, // 21
2254 nullptr, // 22
2255};
2256
2257static ToolbarButtonProc * const _scen_toolbar_button_procs[] = {
2258 ToolbarPauseClick,
2259 ToolbarFastForwardClick,
2260 ToolbarOptionsClick,
2261 ToolbarScenSaveOrLoad,
2262 ToolbarBtn_NULL,
2263 ToolbarScenDatePanel,
2264 ToolbarScenDateBackward,
2265 ToolbarScenDateForward,
2266 ToolbarScenMapTownDir,
2267 ToolbarZoomInClick,
2268 ToolbarZoomOutClick,
2269 ToolbarScenGenLand,
2270 ToolbarScenGenTownClick,
2271 ToolbarScenGenIndustry,
2272 ToolbarScenBuildRoadClick,
2273 ToolbarScenBuildTramClick,
2274 ToolbarScenBuildDocks,
2275 ToolbarScenPlantTrees,
2276 ToolbarScenPlaceSign,
2277 ToolbarBtn_NULL,
2278 ToolbarMusicClick,
2279 ToolbarHelpClick,
2280 ToolbarSwitchClick,
2281};
2282
2283enum MainToolbarEditorHotkeys : int32_t {
2284 MTEHK_PAUSE,
2285 MTEHK_FASTFORWARD,
2286 MTEHK_SETTINGS,
2287 MTEHK_SAVEGAME,
2288 MTEHK_GENLAND,
2289 MTEHK_GENTOWN,
2290 MTEHK_GENINDUSTRY,
2291 MTEHK_BUILD_ROAD,
2292 MTEHK_BUILD_TRAM,
2293 MTEHK_BUILD_DOCKS,
2294 MTEHK_BUILD_TREES,
2295 MTEHK_SIGN,
2296 MTEHK_MUSIC,
2297 MTEHK_LANDINFO,
2298 MTEHK_SMALL_SCREENSHOT,
2299 MTEHK_ZOOMEDIN_SCREENSHOT,
2300 MTEHK_DEFAULTZOOM_SCREENSHOT,
2301 MTEHK_GIANT_SCREENSHOT,
2302 MTEHK_ZOOM_IN,
2303 MTEHK_ZOOM_OUT,
2304 MTEHK_TERRAFORM,
2305 MTEHK_SMALLMAP,
2306 MTEHK_EXTRA_VIEWPORT,
2307};
2308
2309 struct ScenarioEditorToolbarWindow : Window {
2310 ScenarioEditorToolbarWindow(WindowDesc &desc) : Window(desc)
2311 {
2312 this->InitNested(0);
2313
2314 _last_started_action = CBF_NONE;
2315 this->flags.Reset(WindowFlag::WhiteBorder);
2316 PositionMainToolbar(this);
2317 DoZoomInOutWindow(ZOOM_NONE, this);
2318 }
2319
2320 void FindWindowPlacementAndResize(int, int def_height, bool allow_resize) override
2321 {
2322 Window::FindWindowPlacementAndResize(_toolbar_width, def_height, allow_resize);
2323 }
2324
2325 void OnPaint() override
2326 {
2327 this->SetWidgetDisabledState(WID_TE_DATE_BACKWARD, _settings_game.game_creation.starting_year <= CalendarTime::MIN_YEAR);
2328 this->SetWidgetDisabledState(WID_TE_DATE_FORWARD, _settings_game.game_creation.starting_year >= CalendarTime::MAX_YEAR);
2329 this->SetWidgetDisabledState(WID_TE_ROADS, !GetRoadTypes(true).Any(GetMaskForRoadTramType(RTT_ROAD)));
2330 this->SetWidgetDisabledState(WID_TE_TRAMS, !GetRoadTypes(true).Any(GetMaskForRoadTramType(RTT_TRAM)));
2331
2332 this->DrawWidgets();
2333 }
2334
2335 std::string GetWidgetString(WidgetID widget, StringID stringid) const override
2336 {
2337 switch (widget) {
2338 case WID_TE_DATE:
2339 return GetString(STR_JUST_DATE_LONG, TimerGameCalendar::ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1));
2340
2341 default:
2342 return this->Window::GetWidgetString(widget, stringid);
2343 }
2344 }
2345
2346 void DrawWidget(const Rect &r, WidgetID widget) const override
2347 {
2348 switch (widget) {
2349 case WID_TE_SPACER: {
2350 int height = r.Height();
2351 if (height > 2 * GetCharacterHeight(FS_NORMAL)) {
2352 DrawString(r.left, r.right, height / 2 - GetCharacterHeight(FS_NORMAL), STR_SCENEDIT_TOOLBAR_OPENTTD, TC_FROMSTRING, SA_HOR_CENTER);
2353 DrawString(r.left, r.right, height / 2, STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR, TC_FROMSTRING, SA_HOR_CENTER);
2354 } else {
2355 DrawString(r.left, r.right, (height - GetCharacterHeight(FS_NORMAL)) / 2, STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR, TC_FROMSTRING, SA_HOR_CENTER);
2356 }
2357 break;
2358 }
2359 }
2360 }
2361
2362 void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override
2363 {
2364 switch (widget) {
2365 case WID_TE_SPACER:
2366 size.width = std::max(GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_OPENTTD).width, GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR).width) + padding.width;
2367 break;
2368
2369 case WID_TE_DATE:
2370 size = GetStringBoundingBox(GetString(STR_JUST_DATE_LONG, TimerGameCalendar::ConvertYMDToDate(CalendarTime::MAX_YEAR, 0, 1)));
2371 break;
2372 }
2373 }
2374
2375 void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
2376 {
2377 if (_game_mode == GM_MENU) return;
2378 CallBackFunction cbf = _scen_toolbar_button_procs[widget](this);
2379 if (cbf != CBF_NONE) _last_started_action = cbf;
2380 }
2381
2382 void OnDropdownSelect(WidgetID widget, int index, int) override
2383 {
2384 CallBackFunction cbf = _scen_toolbar_dropdown_procs[widget](index);
2385 if (cbf != CBF_NONE) _last_started_action = cbf;
2386 SndClickBeep();
2387 }
2388
2389 EventState OnHotkey(int hotkey) override
2390 {
2391 CallBackFunction cbf = CBF_NONE;
2392 switch (hotkey) {
2393 case MTEHK_PAUSE: ToolbarPauseClick(this); break;
2394 case MTEHK_FASTFORWARD: ToolbarFastForwardClick(this); break;
2395 case MTEHK_SETTINGS: ShowGameOptions(); break;
2396 case MTEHK_SAVEGAME: MenuClickSaveLoad(); break;
2397 case MTEHK_GENLAND: ToolbarScenGenLand(this); break;
2398 case MTEHK_GENTOWN: ToolbarScenGenTownClick(this); break;
2399 case MTEHK_GENINDUSTRY: ToolbarScenGenIndustry(this); break;
2400 case MTEHK_BUILD_ROAD: ToolbarScenBuildRoadClick(this); break;
2401 case MTEHK_BUILD_TRAM: ToolbarScenBuildTramClick(this); break;
2402 case MTEHK_BUILD_DOCKS: ToolbarScenBuildDocks(this); break;
2403 case MTEHK_BUILD_TREES: ToolbarScenPlantTrees(this); break;
2404 case MTEHK_SIGN: cbf = ToolbarScenPlaceSign(this); break;
2405 case MTEHK_MUSIC: ShowMusicWindow(); break;
2406 case MTEHK_LANDINFO: cbf = PlaceLandBlockInfo(); break;
2407 case MTEHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break;
2408 case MTEHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break;
2409 case MTEHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break;
2410 case MTEHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break;
2411 case MTEHK_ZOOM_IN: ToolbarZoomInClick(this); break;
2412 case MTEHK_ZOOM_OUT: ToolbarZoomOutClick(this); break;
2413 case MTEHK_TERRAFORM: ShowEditorTerraformToolbar(); break;
2414 case MTEHK_SMALLMAP: ShowSmallMap(); break;
2415 case MTEHK_EXTRA_VIEWPORT: ShowExtraViewportWindowForTileUnderCursor(); break;
2416 default: return ES_NOT_HANDLED;
2417 }
2418 if (cbf != CBF_NONE) _last_started_action = cbf;
2419 return ES_HANDLED;
2420 }
2421
2422 void OnPlaceObject([[maybe_unused]] Point pt, TileIndex tile) override
2423 {
2424 switch (_last_started_action) {
2425 case CBF_PLACE_SIGN:
2426 PlaceProc_Sign(tile);
2427 break;
2428
2429 case CBF_PLACE_LANDINFO:
2430 ShowLandInfo(tile);
2431 break;
2432
2433 default: NOT_REACHED();
2434 }
2435 }
2436
2437 void OnPlaceObjectAbort() override
2438 {
2439 _last_started_action = CBF_NONE;
2440 }
2441
2442 void OnTimeout() override
2443 {
2444 this->SetWidgetsLoweredState(false, WID_TE_DATE_BACKWARD, WID_TE_DATE_FORWARD);
2445 this->SetWidgetDirty(WID_TE_DATE_BACKWARD);
2446 this->SetWidgetDirty(WID_TE_DATE_FORWARD);
2447 }
2448
2450 const IntervalTimer<TimerWindow> refresh_interval = {std::chrono::milliseconds(30), [this](auto) {
2451 if (this->IsWidgetLowered(WID_TE_PAUSE) != _pause_mode.Any()) {
2452 this->ToggleWidgetLoweredState(WID_TE_PAUSE);
2453 this->SetDirty();
2454 }
2455
2456 if (this->IsWidgetLowered(WID_TE_FAST_FORWARD) != (_game_speed != 100)) {
2457 this->ToggleWidgetLoweredState(WID_TE_FAST_FORWARD);
2458 this->SetDirty();
2459 }
2460 }};
2461
2467 void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
2468 {
2469 if (!gui_scope) return;
2470 HandleZoomMessage(this, *GetMainWindow()->viewport, WID_TE_ZOOM_IN, WID_TE_ZOOM_OUT);
2471 }
2472
2473 void OnQueryTextFinished(std::optional<std::string> str) override
2474 {
2475 /* Was 'cancel' pressed? */
2476 if (!str.has_value()) return;
2477
2478 TimerGameCalendar::Year value;
2479 if (!str->empty()) {
2480 auto val = ParseInteger(*str, 10, true);
2481 if (!val.has_value()) return;
2482 value = static_cast<TimerGameCalendar::Year>(*val);
2483 } else {
2484 /* An empty string means revert to the default */
2485 value = TimerGameCalendar::Year{CalendarTime::DEF_START_YEAR.base()};
2486 }
2487 SetStartingYear(value);
2488
2489 this->SetDirty();
2490 }
2491
2492 static inline HotkeyList hotkeys{"scenedit_maintoolbar", {
2493 Hotkey({WKC_F1, WKC_PAUSE}, "pause", MTEHK_PAUSE),
2494 Hotkey(0, "fastforward", MTEHK_FASTFORWARD),
2495 Hotkey(WKC_F2, "settings", MTEHK_SETTINGS),
2496 Hotkey(WKC_F3, "saveload", MTEHK_SAVEGAME),
2497 Hotkey(WKC_F4, "gen_land", MTEHK_GENLAND),
2498 Hotkey(WKC_F5, "gen_town", MTEHK_GENTOWN),
2499 Hotkey(WKC_F6, "gen_industry", MTEHK_GENINDUSTRY),
2500 Hotkey(WKC_F7, "build_road", MTEHK_BUILD_ROAD),
2501 Hotkey(0, "build_tram", MTEHK_BUILD_TRAM),
2502 Hotkey(WKC_F8, "build_docks", MTEHK_BUILD_DOCKS),
2503 Hotkey(WKC_F9, "build_trees", MTEHK_BUILD_TREES),
2504 Hotkey(WKC_F10, "build_sign", MTEHK_SIGN),
2505 Hotkey(WKC_F11, "music", MTEHK_MUSIC),
2506 Hotkey(WKC_F12, "land_info", MTEHK_LANDINFO),
2507 Hotkey(WKC_CTRL | 'S', "small_screenshot", MTEHK_SMALL_SCREENSHOT),
2508 Hotkey(WKC_CTRL | 'P', "zoomedin_screenshot", MTEHK_ZOOMEDIN_SCREENSHOT),
2509 Hotkey(WKC_CTRL | 'D', "defaultzoom_screenshot", MTEHK_DEFAULTZOOM_SCREENSHOT),
2510 Hotkey(0, "giant_screenshot", MTEHK_GIANT_SCREENSHOT),
2511 Hotkey({WKC_NUM_PLUS, WKC_EQUALS, WKC_SHIFT | WKC_EQUALS, WKC_SHIFT | WKC_F5}, "zoomin", MTEHK_ZOOM_IN),
2512 Hotkey({WKC_NUM_MINUS, WKC_MINUS, WKC_SHIFT | WKC_MINUS, WKC_SHIFT | WKC_F6}, "zoomout", MTEHK_ZOOM_OUT),
2513 Hotkey('L', "terraform", MTEHK_TERRAFORM),
2514 Hotkey('M', "smallmap", MTEHK_SMALLMAP),
2515 Hotkey('V', "extra_viewport", MTEHK_EXTRA_VIEWPORT),
2516 }};
2517};
2518
2519static constexpr std::initializer_list<NWidgetPart> _nested_toolb_scen_inner_widgets = {
2520 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_PAUSE), SetSpriteTip(SPR_IMG_PAUSE, STR_TOOLBAR_TOOLTIP_PAUSE_GAME),
2521 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_FAST_FORWARD), SetSpriteTip(SPR_IMG_FASTFORWARD, STR_TOOLBAR_TOOLTIP_FORWARD),
2522 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SETTINGS), SetSpriteTip(SPR_IMG_SETTINGS, STR_TOOLBAR_TOOLTIP_OPTIONS),
2523 NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_TE_SAVE), SetSpriteTip(SPR_IMG_SAVE, STR_SCENEDIT_TOOLBAR_SAVE_SCENARIO_LOAD_SCENARIO_TOOLTIP),
2524 NWidget(NWID_SPACER),
2525 NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_SPACER), EndContainer(),
2526 NWidget(NWID_SPACER),
2527 NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_DATE_PANEL),
2528 NWidget(NWID_HORIZONTAL), SetPIP(2, 2, 2), SetPadding(1),
2529 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_BACKWARD), SetSpriteTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_MOVE_THE_STARTING_DATE_BACKWARD_TOOLTIP), SetFill(0, 1),
2530 NWidget(WWT_TEXT, INVALID_COLOUR, WID_TE_DATE), SetToolTip(STR_SCENEDIT_TOOLBAR_SET_DATE_TOOLTIP), SetTextStyle(TC_WHITE), SetAlignment(SA_CENTER), SetFill(0, 1),
2531 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_FORWARD), SetSpriteTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_MOVE_THE_STARTING_DATE_FORWARD_TOOLTIP), SetFill(0, 1),
2532 EndContainer(),
2533 EndContainer(),
2534 NWidget(NWID_SPACER),
2535 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SMALL_MAP), SetSpriteTip(SPR_IMG_SMALLMAP, STR_SCENEDIT_TOOLBAR_DISPLAY_MAP_TOWN_DIRECTORY_TOOLTIP),
2536 NWidget(NWID_SPACER),
2537 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_IN), SetSpriteTip(SPR_IMG_ZOOMIN, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN),
2538 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_OUT), SetSpriteTip(SPR_IMG_ZOOMOUT, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT),
2539 NWidget(NWID_SPACER),
2540 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_LAND_GENERATE), SetSpriteTip(SPR_IMG_LANDSCAPING, STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION_TOOLTIP),
2541 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_TOWN_GENERATE), SetSpriteTip(SPR_IMG_TOWN, STR_SCENEDIT_TOOLBAR_TOWN_GENERATION_TOOLTIP),
2542 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_INDUSTRY), SetSpriteTip(SPR_IMG_INDUSTRY, STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION_TOOLTIP),
2543 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_ROADS), SetSpriteTip(SPR_IMG_BUILDROAD, STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION_TOOLTIP),
2544 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_TRAMS), SetSpriteTip(SPR_IMG_BUILDTRAMS, STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION_TOOLTIP),
2545 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_WATER), SetSpriteTip(SPR_IMG_BUILDWATER, STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS),
2546 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TREES), SetSpriteTip(SPR_IMG_PLANTTREES, STR_SCENEDIT_TOOLBAR_PLANT_TREES_TOOLTIP),
2547 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_SIGNS), SetSpriteTip(SPR_IMG_SIGN, STR_SCENEDIT_TOOLBAR_PLACE_SIGN_TOOLTIP),
2548 NWidget(NWID_SPACER),
2549 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_MUSIC_SOUND), SetSpriteTip(SPR_IMG_MUSIC, STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW),
2550 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_HELP), SetSpriteTip(SPR_IMG_QUERY, STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION),
2551 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SWITCH_BAR), SetSpriteTip(SPR_IMG_SWITCH_TOOLBAR, STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR),
2552};
2553
2554static std::unique_ptr<NWidgetBase> MakeScenarioToolbar()
2555{
2556 return MakeNWidgets(_nested_toolb_scen_inner_widgets, std::make_unique<NWidgetScenarioToolbarContainer>());
2557}
2558
2559static constexpr std::initializer_list<NWidgetPart> _nested_toolb_scen_widgets = {
2560 NWidgetFunction(MakeScenarioToolbar),
2561};
2562
2563static WindowDesc _toolb_scen_desc(
2564 WDP_MANUAL, {}, 0, 0,
2565 WC_MAIN_TOOLBAR, WC_NONE,
2566 {WindowDefaultFlag::NoFocus, WindowDefaultFlag::NoClose},
2567 _nested_toolb_scen_widgets,
2568 &ScenarioEditorToolbarWindow::hotkeys
2569);
2570
2572 void AllocateToolbar()
2573{
2574 /* Clean old GUI values; railtype is (re)set by rail_gui.cpp */
2575 _last_built_roadtype = ROADTYPE_ROAD;
2576 _last_built_tramtype = ROADTYPE_TRAM;
2577
2578 if (_game_mode == GM_EDITOR) {
2579 new ScenarioEditorToolbarWindow(_toolb_scen_desc);
2580 } else {
2581 new MainToolbarWindow(_toolb_normal_desc);
2582 }
2583}
ShowAIConfigWindow
void ShowAIConfigWindow()
Open the AI config window.
Definition ai_gui.cpp:334
ai_gui.hpp
Window for configuring the AIs
ShowBuildAirToolbar
Window * ShowBuildAirToolbar()
Open the build airport toolbar window.
Definition airport_gui.cpp:233
HasBit
constexpr bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.
Definition bitmath_func.hpp:103
ToggleBit
constexpr T ToggleBit(T &x, const uint8_t y)
Toggles a bit in a variable.
Definition bitmath_func.hpp:157
cheat_func.h
Functions related to cheating.
ShowCheatWindow
void ShowCheatWindow()
Open cheat window.
Definition cheat_gui.cpp:651
BaseBitSet::Test
constexpr bool Test(Tvalue_type value) const
Test if the value-th bit is set.
Definition base_bitset_type.hpp:141
BaseBitSet::None
constexpr bool None() const
Test if none of the values are set.
Definition base_bitset_type.hpp:188
BaseBitSet::Reset
constexpr Timpl & Reset()
Reset all bits.
Definition base_bitset_type.hpp:83
BaseBitSet::Flip
constexpr Timpl & Flip(Tvalue_type value)
Flip the value-th bit.
Definition base_bitset_type.hpp:116
BaseBitSet::Set
constexpr Timpl & Set()
Set all bits.
Definition base_bitset_type.hpp:40
BaseBitSet::Any
constexpr bool Any(const Timpl &other) const
Test if any of the given values are set.
Definition base_bitset_type.hpp:170
CompanyMask
Definition company_type.h:43
DropDownIcon
Drop down icon component.
Definition dropdown_common_type.h:113
DropDownListCompanyItem
Company name list item, with company-colour icon, name, and lock components.
Definition toolbar_gui.cpp:103
EnumBitSet< DropDownOption, uint8_t >
IntervalTimer
An interval timer will fire every interval, and will continue to fire until it is deleted.
Definition timer.h:76
LinkGraphSchedule::instance
static LinkGraphSchedule instance
Static instance of LinkGraphSchedule.
Definition linkgraphschedule.h:52
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
NWidgetBase
Baseclass for nested widgets.
Definition widget_type.h:136
NWidgetBase::type
WidgetType type
Type of the widget / nested widget.
Definition widget_type.h:226
NWidgetBase::resize_x
uint resize_x
Horizontal resize step (0 means not resizable).
Definition widget_type.h:229
NWidgetBase::fill_x
uint fill_x
Horizontal fill stepsize (from initial size, 0 means not resizable).
Definition widget_type.h:227
NWidgetBase::smallest_x
uint smallest_x
Smallest horizontal size of the widget in a filled window.
Definition widget_type.h:234
NWidgetBase::current_x
uint current_x
Current horizontal size (after resizing).
Definition widget_type.h:237
NWidgetBase::pos_y
int pos_y
Vertical position of top-left corner of the widget in the window.
Definition widget_type.h:243
NWidgetBase::pos_x
int pos_x
Horizontal position of top-left corner of the widget in the window.
Definition widget_type.h:242
NWidgetBase::smallest_y
uint smallest_y
Smallest vertical size of the widget in a filled window.
Definition widget_type.h:235
NWidgetBase::fill_y
uint fill_y
Vertical fill stepsize (from initial size, 0 means not resizable).
Definition widget_type.h:228
NWidgetBase::resize_y
uint resize_y
Vertical resize step (0 means not resizable).
Definition widget_type.h:230
NWidgetBase::current_y
uint current_y
Current vertical size (after resizing).
Definition widget_type.h:238
NWidgetContainer
Baseclass for container widgets.
Definition widget_type.h:471
NWidgetContainer::Draw
void Draw(const Window *w) override
Draw the widgets of the tree.
Definition widget.cpp:1307
NWidgetContainer::children
std::vector< std::unique_ptr< NWidgetBase > > children
Child widgets in container.
Definition widget_type.h:499
NWidgetCore
Base class for a 'real' widget.
Definition widget_type.h:368
NWidgetMainToolbarContainer
Container for the 'normal' main toolbar.
Definition toolbar_gui.cpp:1499
NWidgetMainToolbarContainer::GetButtonArrangement
const WidgetID * GetButtonArrangement(uint &width, uint &arrangeable_count, uint &button_count, uint &spacer_count) const override
Get the arrangement of the buttons for the toolbar.
Definition toolbar_gui.cpp:1500
NWidgetScenarioToolbarContainer
Container for the scenario editor's toolbar.
Definition toolbar_gui.cpp:1821
NWidgetScenarioToolbarContainer::panel_widths
std::array< uint, 2 > panel_widths
The width of the two panels (the text panel and date panel)
Definition toolbar_gui.cpp:1822
NWidgetScenarioToolbarContainer::GetButtonArrangement
const WidgetID * GetButtonArrangement(uint &width, uint &arrangeable_count, uint &button_count, uint &spacer_count) const override
Get the arrangement of the buttons for the toolbar.
Definition toolbar_gui.cpp:1840
NWidgetScenarioToolbarContainer::SetupSmallestSize
void SetupSmallestSize(Window *w) override
Compute smallest size needed by the widget.
Definition toolbar_gui.cpp:1824
NWidgetToolbarContainer
Full blown container to make it behave exactly as we want :)
Definition toolbar_gui.cpp:1353
NWidgetToolbarContainer::spacers
uint spacers
Number of spacer widgets in this toolbar.
Definition toolbar_gui.cpp:1355
NWidgetToolbarContainer::AssignSizePosition
void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override
Assign size and position to the widget.
Definition toolbar_gui.cpp:1411
NWidgetToolbarContainer::SetupSmallestSize
void SetupSmallestSize(Window *w) override
Compute smallest size needed by the widget.
Definition toolbar_gui.cpp:1372
NWidgetToolbarContainer::IsButton
bool IsButton(WidgetType type) const
Check whether the given widget type is a button for us.
Definition toolbar_gui.cpp:1367
NWidgetToolbarContainer::Draw
void Draw(const Window *w) override
Draw the widgets of the tree.
Definition toolbar_gui.cpp:1477
NWidgetToolbarContainer::GetButtonArrangement
virtual const WidgetID * GetButtonArrangement(uint &width, uint &arrangeable_count, uint &button_count, uint &spacer_count) const =0
Get the arrangement of the buttons for the toolbar.
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
TimerGameCalendar::SetDate
static void SetDate(Date date, DateFract fract)
Set the date.
Definition timer_game_calendar.cpp:66
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
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
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
TimerGameEconomy::date
static Date date
Current date in days (day counter).
Definition timer_game_economy.h:38
TimerGameEconomy::SetDate
static void SetDate(Date date, DateFract fract)
Set the date.
Definition timer_game_economy.cpp:82
command_func.h
Functions related to commands.
GetCompanyPalette
PaletteID GetCompanyPalette(CompanyID company)
Get the palette for recolouring with a company colour.
Definition company_cmd.cpp:164
_local_company
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
Definition company_cmd.cpp:55
company_func.h
Functions related to companies.
ShowCompanyFinances
void ShowCompanyFinances(CompanyID company)
Open the finances window of a company.
Definition company_gui.cpp:569
ShowCompany
void ShowCompany(CompanyID company)
Show the window with the overview of the company.
Definition company_gui.cpp:2307
company_gui.h
GUI Functions related to companies.
ShowCompanyStations
void ShowCompanyStations(CompanyID company)
Opens window with list of company's stations.
Definition station_gui.cpp:808
COMPANY_SPECTATOR
static constexpr CompanyID COMPANY_SPECTATOR
The client is spectating.
Definition company_type.h:21
ShowFramerateWindow
void ShowFramerateWindow()
Open the general framerate window.
Definition framerate_gui.cpp:986
IConsoleSwitch
void IConsoleSwitch()
Toggle in-game console between opened and closed.
Definition console_gui.cpp:426
console_gui.h
GUI related functions in the console.
ShowBuildDocksScenToolbar
Window * ShowBuildDocksScenToolbar()
Open the build water toolbar window for the scenario editor.
Definition dock_gui.cpp:415
ShowBuildDocksToolbar
Window * ShowBuildDocksToolbar()
Open the build water toolbar window.
Definition dock_gui.cpp:374
ShowDropDownList
void ShowDropDownList(Window *w, DropDownList &&list, int selected, WidgetID button, uint width, DropDownOptions options)
Show a drop down list.
Definition dropdown.cpp:418
dropdown_common_type.h
Common drop down list components.
dropdown_func.h
Functions related to the drop down widget.
dropdown_type.h
Types related to the drop down widget.
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:56
DropDownOption::InstantClose
@ InstantClose
Set if releasing mouse button should close the list regardless of where the cursor is.
engine_base.h
Base class for engines.
SLO_SAVE
@ SLO_SAVE
File is being saved.
Definition fileio_type.h:55
SLO_LOAD
@ SLO_LOAD
File is being loaded.
Definition fileio_type.h:54
FT_SCENARIO
@ FT_SCENARIO
old or new scenario
Definition fileio_type.h:20
FT_HEIGHTMAP
@ FT_HEIGHTMAP
heightmap file
Definition fileio_type.h:21
FT_SAVEGAME
@ FT_SAVEGAME
old or new savegame
Definition fileio_type.h:19
fios.h
Declarations for savegames operations.
ShowSaveLoadDialog
void ShowSaveLoadDialog(AbstractFileType abstract_filetype, SaveLoadOperation fop)
Launch save/load dialog in the given mode.
Definition fios_gui.cpp:999
GetCharacterHeight
int GetCharacterHeight(FontSize size)
Get height of a character for a given font size.
Definition fontcache.cpp:87
framerate_type.h
Types for recording game performance data.
game.hpp
Base functions for all Games.
ShowGSConfigWindow
void ShowGSConfigWindow()
Open the GS config window.
Definition game_gui.cpp:425
game_gui.hpp
Window for configuring the Games
GetStringBoundingBox
Dimension GetStringBoundingBox(std::string_view str, FontSize start_fontsize)
Return the string dimension in pixels.
Definition gfx.cpp:894
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:665
_ctrl_pressed
bool _ctrl_pressed
Is Ctrl pressed?
Definition gfx.cpp:38
_left_button_clicked
bool _left_button_clicked
Is left mouse button clicked?
Definition gfx.cpp:42
_game_speed
uint16_t _game_speed
Current game-speed; 100 is 1x, 0 is infinite.
Definition gfx.cpp:40
_pause_mode
PauseModes _pause_mode
The current pause mode.
Definition gfx.cpp:50
GfxFillRect
void GfxFillRect(int left, int top, int right, int bottom, const std::variant< PixelColour, PaletteID > &colour, FillRectMode mode)
Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen.
Definition gfx.cpp:115
CheckBlitter
void CheckBlitter()
Check whether we still use the right blitter, or use another (better) one.
Definition gfxinit.cpp:325
FS_NORMAL
@ FS_NORMAL
Index of the normal font in the font tables.
Definition gfx_type.h:249
SA_HOR_CENTER
@ SA_HOR_CENTER
Horizontally center the text.
Definition gfx_type.h:389
SA_CENTER
@ SA_CENTER
Center both horizontally and vertically.
Definition gfx_type.h:398
FILLRECT_CHECKER
@ FILLRECT_CHECKER
Draw only every second pixel, used for greying-out.
Definition gfx_type.h:346
WKC_MINUS
@ WKC_MINUS
Definition gfx_type.h:106
WKC_EQUALS
@ WKC_EQUALS
= Equals
Definition gfx_type.h:99
goal_base.h
Goal base class.
ShowGoalsList
void ShowGoalsList(CompanyID company)
Open a goal list window.
Definition goal_gui.cpp:311
graph_gui.h
Graph GUI functions.
NWidgetFunction
constexpr NWidgetPart NWidgetFunction(NWidgetFunctionType *func_ptr)
Obtain a nested widget (sub)tree from an external source.
Definition widget_type.h:1445
SetFill
constexpr NWidgetPart SetFill(uint16_t fill_x, uint16_t fill_y)
Widget part function for setting filling.
Definition widget_type.h:1219
SetSpriteTip
constexpr NWidgetPart SetSpriteTip(SpriteID sprite, StringID tip={})
Widget part function for setting the sprite and tooltip.
Definition widget_type.h:1251
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:1375
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:1332
SetTextStyle
constexpr NWidgetPart SetTextStyle(TextColour colour, FontSize size=FS_NORMAL)
Widget part function for setting the text style.
Definition widget_type.h:1198
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:3374
SetToolTip
constexpr NWidgetPart SetToolTip(StringID tip)
Widget part function for setting tooltip and clearing the widget data.
Definition widget_type.h:1318
EndContainer
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
Definition widget_type.h:1229
NWidget
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=INVALID_WIDGET)
Widget part function for starting a new 'real' widget.
Definition widget_type.h:1424
SetAlignment
constexpr NWidgetPart SetAlignment(StringAlignment align)
Widget part function for setting the alignment of text/images.
Definition widget_type.h:1208
Window::SetDirty
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
Definition window.cpp:966
MarkWholeScreenDirty
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
Definition gfx.cpp:1546
gui.h
GUI functions that shouldn't be here.
ShowStoryBook
void ShowStoryBook(CompanyID company, StoryPageID page_id=StoryPageID::Invalid(), bool centered=false)
Raise or create the story book window for company, at page page_id.
Definition story_gui.cpp:1043
ShowIndustryCargoesWindow
void ShowIndustryCargoesWindow()
Open the industry and cargoes window with an industry.
Definition industry_gui.cpp:3203
ShowLandInfo
void ShowLandInfo(TileIndex tile)
Show land information window.
Definition misc_gui.cpp:321
ShowExtraViewportWindowForTileUnderCursor
void ShowExtraViewportWindowForTileUnderCursor()
Show a new Extra Viewport window.
Definition viewport_gui.cpp:174
ShowExtraViewportWindow
void ShowExtraViewportWindow(TileIndex tile=INVALID_TILE)
Show a new Extra Viewport window.
Definition viewport_gui.cpp:159
ShowGameOptions
void ShowGameOptions()
Open the game options window.
Definition settings_gui.cpp:1851
help_gui.h
GUI to access manuals and related.
highscore.h
Declaration of functions and types defined in highscore.h and highscore_gui.h.
ShowHighscoreTable
void ShowHighscoreTable(int difficulty=SP_CUSTOM, int8_t rank=-1)
Show the highscore table for a given difficulty.
Definition highscore_gui.cpp:243
hotkeys.h
Hotkey related functions.
house.h
definition of HouseSpec and accessors
league_base.h
LeagueTable base class.
league_gui.h
League table GUI functions.
ShowLinkGraphLegend
void ShowLinkGraphLegend()
Open a link graph legend window.
Definition linkgraph_gui.cpp:542
linkgraph_gui.h
Declaration of linkgraph overlay GUI.
DoZoomInOutWindow
bool DoZoomInOutWindow(ZoomStateChange how, Window *w)
Zooms a viewport in a window in or out.
Definition main_gui.cpp:93
CeilDiv
constexpr uint CeilDiv(uint a, uint b)
Computes ceil(a / b) for non-negative a and b.
Definition math_func.hpp:310
Clamp
constexpr T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
Definition math_func.hpp:79
misc_cmd.h
Miscellaneous command definitions.
ShowQueryString
void ShowQueryString(std::string_view 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:1062
_networking
bool _networking
are we in networking mode?
Definition network.cpp:66
_network_server
bool _network_server
network-server is active
Definition network.cpp:67
NetworkCanJoinCompany
bool NetworkCanJoinCompany(CompanyID company_id)
Returns whether the given company can be joined by this client.
Definition network.cpp:142
network.h
Basic functions/variables used all over the place.
NetworkClientRequestMove
void NetworkClientRequestMove(CompanyID company_id)
Notify the server of this client wanting to be moved to another company.
Definition network_client.cpp:1214
network_func.h
Network functions used by other parts of OpenTTD.
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:1976
network_gui.h
GUIs related to networking.
CLIENT_ID_SERVER
@ CLIENT_ID_SERVER
Servers always have this ID.
Definition network_type.h:45
_grfconfig
GRFConfigList _grfconfig
First item in list of current GRF set up.
Definition newgrf_config.cpp:154
ShowNewGRFSettings
void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfigList &config)
Setup the NewGRF gui.
Definition newgrf_gui.cpp:1966
newgrf_debug.h
Functions/types related to NewGRF debugging.
ShowSpriteAlignerWindow
void ShowSpriteAlignerWindow()
Show the window for aligning sprites.
Definition newgrf_debug_gui.cpp:1202
ShowLastNewsMessage
void ShowLastNewsMessage()
Show previous news item.
Definition news_gui.cpp:1138
ShowMessageHistory
void ShowMessageHistory()
Display window with news messages history.
Definition news_gui.cpp:1303
news_gui.h
GUI functions related to the news.
DO_SHOW_TOWN_NAMES
@ DO_SHOW_TOWN_NAMES
Display town names.
Definition openttd.h:46
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
DO_FULL_DETAIL
@ DO_FULL_DETAIL
Also draw details of track and roads.
Definition openttd.h:50
DO_SHOW_SIGNS
@ DO_SHOW_SIGNS
Display signs.
Definition openttd.h:48
DO_SHOW_WAYPOINT_NAMES
@ DO_SHOW_WAYPOINT_NAMES
Display waypoint names.
Definition openttd.h:51
DO_SHOW_STATION_NAMES
@ DO_SHOW_STATION_NAMES
Display station names.
Definition openttd.h:47
DO_FULL_ANIMATION
@ DO_FULL_ANIMATION
Perform palette animation.
Definition openttd.h:49
PauseMode::Normal
@ Normal
A game normally paused.
PC_VERY_DARK_RED
static constexpr PixelColour PC_VERY_DARK_RED
Almost-black red palette colour.
Definition palette_func.h:101
PC_DARK_RED
static constexpr PixelColour PC_DARK_RED
Dark red palette colour.
Definition palette_func.h:102
ShowBuildRailToolbar
Window * ShowBuildRailToolbar(RailType railtype)
Open the build rail toolbar window for a specific rail type.
Definition rail_gui.cpp:923
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:2030
rail_gui.h
Functions/types etc.
RailType
RailType
Enumeration for all possible railtypes.
Definition rail_type.h:25
GetRoadTypes
RoadTypes GetRoadTypes(bool introduces)
Get list of road types, regardless of company availability.
Definition road.cpp:238
road.h
Road specific functions.
GetMaskForRoadTramType
RoadTypes GetMaskForRoadTramType(RoadTramType rtt)
Get the mask for road types of the given RoadTramType.
Definition road.h:183
ShowBuildRoadScenToolbar
Window * ShowBuildRoadScenToolbar(RoadType roadtype)
Show the road building toolbar in the scenario editor.
Definition road_gui.cpp:1097
ShowBuildRoadToolbar
Window * ShowBuildRoadToolbar(RoadType roadtype)
Open the build road toolbar window.
Definition road_gui.cpp:1006
road_gui.h
Functions/types related to the road GUIs.
RTT_ROAD
@ RTT_ROAD
Road road type.
Definition road_type.h:38
RTT_TRAM
@ RTT_TRAM
Tram road type.
Definition road_type.h:39
RTTB_ROAD
@ RTTB_ROAD
Road road type bit.
Definition road_type.h:43
RTTB_TRAM
@ RTTB_TRAM
Tram road type bit.
Definition road_type.h:44
RoadType
RoadType
The different roadtypes we support.
Definition road_type.h:23
ROADTYPE_TRAM
@ ROADTYPE_TRAM
Trams.
Definition road_type.h:26
ROADTYPE_ROAD
@ ROADTYPE_ROAD
Basic road type.
Definition road_type.h:25
safeguards.h
A number of safeguards to prevent using unsafe methods.
MakeScreenshotWithConfirm
void MakeScreenshotWithConfirm(ScreenshotType t)
Make a screenshot.
Definition screenshot.cpp:353
screenshot.h
Functions to make screenshots.
SC_VIEWPORT
@ SC_VIEWPORT
Screenshot of viewport.
Definition screenshot.h:17
SC_ZOOMEDIN
@ SC_ZOOMEDIN
Fully zoomed in screenshot of the visible area.
Definition screenshot.h:19
SC_WORLD
@ SC_WORLD
World screenshot.
Definition screenshot.h:21
SC_DEFAULTZOOM
@ SC_DEFAULTZOOM
Zoomed to default zoom level screenshot of the visible area.
Definition screenshot.h:20
screenshot_gui.h
GUI functions related to screenshots.
ShowScriptDebugWindow
Window * ShowScriptDebugWindow(CompanyID show_company, bool new_window)
Open the Script debug window and select the given company.
Definition script_gui.cpp:1264
_settings_game
GameSettings _settings_game
Game settings of a running game or the scenario editor.
Definition settings.cpp:61
_settings_client
ClientSettings _settings_client
The current settings for this game.
Definition settings.cpp:60
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:147
signs_func.h
Functions related to signs.
ShowSignList
Window * ShowSignList()
Open the sign list window.
Definition signs_gui.cpp:373
ShowSmallMap
void ShowSmallMap()
Show the smallmap window.
Definition smallmap_gui.cpp:2065
smallmap_gui.h
Smallmap GUI functions.
SndConfirmBeep
void SndConfirmBeep()
Play a beep sound for a confirm event if enabled in settings.
Definition sound.cpp:261
SndClickBeep
void SndClickBeep()
Play a beep sound for a click event if enabled in settings.
Definition sound.cpp:253
sound_func.h
Functions related to sound.
STATION_FACILITY_GHOST
static constexpr StationFacility STATION_FACILITY_GHOST
Fake 'facility' to allow toggling display of recently-removed station signs.
Definition station_type.h:61
StationFacility::Dock
@ Dock
Station with a dock.
StationFacility::TruckStop
@ TruckStop
Station with truck stops.
StationFacility::Train
@ Train
Station with train station.
StationFacility::Airport
@ Airport
Station with an airport.
StationFacility::BusStop
@ BusStop
Station with bus stops.
stdafx.h
Definition of base types and functions in a cross-platform compatible way.
lengthof
#define lengthof(array)
Return the length of an fixed size array.
Definition stdafx.h:271
story_base.h
StoryPage base class.
string_consumer.hpp
Parse strings.
ParseInteger
static std::optional< T > ParseInteger(std::string_view arg, int base=10, bool clamp=false)
Change a string into its number representation.
Definition string_consumer.hpp:917
CS_NUMERAL
@ CS_NUMERAL
Only numeric ones.
Definition string_type.h:26
GetString
std::string GetString(StringID string)
Resolve the given StringID into a std::string with formatting but no parameters.
Definition strings.cpp:424
strings_func.h
Functions related to OTTD's strings.
StringID
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Definition strings_type.h:19
ClientSettings::gui
GUISettings gui
settings related to the GUI
Definition settings_type.h:650
CommandHelper
Definition command_func.h:83
Company
Definition company_base.h:127
Coord2D< int >
Dimension
Dimensions (a width and height) of a rectangle in 2D.
Definition geometry_type.hpp:56
EconomySettings::found_town
TownFounding found_town
town founding.
Definition settings_type.h:558
EconomySettings::place_houses
PlaceHouses place_houses
players are allowed to place town houses.
Definition settings_type.h:559
GUISettings::UserIsAllowedToChangeNewGRFs
bool UserIsAllowedToChangeNewGRFs() const
Returns true when the user has sufficient privileges to edit newgrfs on a running game.
Definition settings_type.h:264
GUISettings::toolbar_dropdown_autoselect
bool toolbar_dropdown_autoselect
should toolbar dropdown buttons autoselect when releasing the mouse button
Definition settings_type.h:207
GUISettings::newgrf_developer_tools
bool newgrf_developer_tools
activate NewGRF developer tools and allow modifying NewGRFs in an existing game
Definition settings_type.h:251
GameCreationSettings::starting_year
TimerGameCalendar::Year starting_year
starting date
Definition settings_type.h:380
GameSettings::economy
EconomySettings economy
settings to change the economy
Definition settings_type.h:642
GameSettings::game_creation
GameCreationSettings game_creation
settings used during the creation of a game (map)
Definition settings_type.h:634
HotkeyList
List of hotkeys for a window.
Definition hotkeys.h:37
Hotkey
All data for a single hotkey.
Definition hotkeys.h:21
LeagueTable
Struct about custom league tables.
Definition league_base.h:55
MainToolbarWindow
Main toolbar.
Definition toolbar_gui.cpp:1977
MainToolbarWindow::OnHotkey
EventState OnHotkey(int hotkey) override
A hotkey has been pressed.
Definition toolbar_gui.cpp:2021
MainToolbarWindow::OnPaint
void OnPaint() override
The window must be repainted.
Definition toolbar_gui.cpp:1995
MainToolbarWindow::OnClick
void OnClick(Point pt, WidgetID widget, int click_count) override
A click with the left mouse button has been made on the window.
Definition toolbar_gui.cpp:2010
MainToolbarWindow::FindWindowPlacementAndResize
void FindWindowPlacementAndResize(int, int def_height, bool allow_resize) override
Resize window towards the default size.
Definition toolbar_gui.cpp:1990
MainToolbarWindow::OnInvalidateData
void OnInvalidateData(int data=0, bool gui_scope=true) override
Some data on this window has become invalid.
Definition toolbar_gui.cpp:2109
MainToolbarWindow::OnDropdownSelect
void OnDropdownSelect(WidgetID widget, int index, int) override
A dropdown option associated to this window has been selected.
Definition toolbar_gui.cpp:2015
MainToolbarWindow::OnPlaceObjectAbort
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
Definition toolbar_gui.cpp:2086
MainToolbarWindow::refresh_interval
const IntervalTimer< TimerWindow > refresh_interval
Refresh the state of pause / game-speed on a regular interval.
Definition toolbar_gui.cpp:2092
MainToolbarWindow::OnPlaceObject
void OnPlaceObject(Point pt, TileIndex tile) override
The user clicked some place on the map when a tile highlight mode has been set.
Definition toolbar_gui.cpp:2071
PoolID< uint8_t, struct CompanyIDTag, 0xF, 0xFF >
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:436
Pool::PoolItem<&_league_table_pool >::GetNumItems
static size_t GetNumItems()
Returns number of valid items in the pool.
Definition pool_type.hpp:417
Pool::PoolItem<&_company_pool >::IsValidID
static bool IsValidID(auto index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
Definition pool_type.hpp:376
Rect
Specification of a rectangle with absolute coordinates of all edges.
Definition geometry_type.hpp:101
Rect::Height
int Height() const
Get height of Rect.
Definition geometry_type.hpp:117
ScenarioEditorToolbarWindow
Definition toolbar_gui.cpp:2309
ScenarioEditorToolbarWindow::OnPlaceObject
void OnPlaceObject(Point pt, TileIndex tile) override
The user clicked some place on the map when a tile highlight mode has been set.
Definition toolbar_gui.cpp:2422
ScenarioEditorToolbarWindow::OnClick
void OnClick(Point pt, WidgetID widget, int click_count) override
A click with the left mouse button has been made on the window.
Definition toolbar_gui.cpp:2375
ScenarioEditorToolbarWindow::OnPaint
void OnPaint() override
The window must be repainted.
Definition toolbar_gui.cpp:2325
ScenarioEditorToolbarWindow::OnPlaceObjectAbort
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
Definition toolbar_gui.cpp:2437
ScenarioEditorToolbarWindow::OnTimeout
void OnTimeout() override
Called when this window's timeout has been reached.
Definition toolbar_gui.cpp:2442
ScenarioEditorToolbarWindow::OnDropdownSelect
void OnDropdownSelect(WidgetID widget, int index, int) override
A dropdown option associated to this window has been selected.
Definition toolbar_gui.cpp:2382
ScenarioEditorToolbarWindow::GetWidgetString
std::string GetWidgetString(WidgetID widget, StringID stringid) const override
Get the raw string for a widget.
Definition toolbar_gui.cpp:2335
ScenarioEditorToolbarWindow::refresh_interval
const IntervalTimer< TimerWindow > refresh_interval
Refresh the state of pause / game-speed on a regular interval.
Definition toolbar_gui.cpp:2450
ScenarioEditorToolbarWindow::OnHotkey
EventState OnHotkey(int hotkey) override
A hotkey has been pressed.
Definition toolbar_gui.cpp:2389
ScenarioEditorToolbarWindow::DrawWidget
void DrawWidget(const Rect &r, WidgetID widget) const override
Draw the contents of a nested widget.
Definition toolbar_gui.cpp:2346
ScenarioEditorToolbarWindow::FindWindowPlacementAndResize
void FindWindowPlacementAndResize(int, int def_height, bool allow_resize) override
Resize window towards the default size.
Definition toolbar_gui.cpp:2320
ScenarioEditorToolbarWindow::OnInvalidateData
void OnInvalidateData(int data=0, bool gui_scope=true) override
Some data on this window has become invalid.
Definition toolbar_gui.cpp:2467
ScenarioEditorToolbarWindow::OnQueryTextFinished
void OnQueryTextFinished(std::optional< std::string > str) override
The query window opened from this window has closed.
Definition toolbar_gui.cpp:2473
ScenarioEditorToolbarWindow::UpdateWidgetSize
void UpdateWidgetSize(WidgetID widget, Dimension &size, const Dimension &padding, Dimension &fill, Dimension &resize) override
Update size and resize step of a widget in the window.
Definition toolbar_gui.cpp:2362
StrongType::Typedef
Templated helper to make a type-safe 'typedef' representing a single POD value.
Definition strong_typedef_type.hpp:130
WidgetData
Container with the data associated to a single widget.
Definition widget_type.h:355
WindowDesc
High level window description.
Definition window_gui.h:168
Window
Data structure for an opened window.
Definition window_gui.h:274
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:978
Window::DrawWidgets
void DrawWidgets() const
Paint all widgets of a window.
Definition widget.cpp:766
Window::SetWidgetDirty
void SetWidgetDirty(WidgetID widget_index) const
Invalidate a widget, i.e.
Definition window.cpp:556
Window::timeout_timer
uint8_t timeout_timer
Timer value of the WindowFlag::Timeout for flags.
Definition window_gui.h:307
Window::viewport
std::unique_ptr< ViewportData > viewport
Pointer to viewport data, if present.
Definition window_gui.h:319
Window::GetWidgetString
virtual std::string GetWidgetString(WidgetID widget, StringID stringid) const
Get the raw string for a widget.
Definition window.cpp:504
Window::resize
ResizeInfo resize
Resize information.
Definition window_gui.h:315
Window::SetWidgetsDisabledState
void SetWidgetsDisabledState(bool disab_stat, Args... widgets)
Sets the enabled/disabled status of a list of widgets.
Definition window_gui.h:516
Window::IsWidgetLowered
bool IsWidgetLowered(WidgetID widget_index) const
Gets the lowered state of a widget.
Definition window_gui.h:492
Window::IsWidgetDisabled
bool IsWidgetDisabled(WidgetID widget_index) const
Gets the enabled/disabled status of a widget.
Definition window_gui.h:411
Window::SetWidgetsLoweredState
void SetWidgetsLoweredState(bool lowered_stat, Args... widgets)
Sets the lowered/raised status of a list of widgets.
Definition window_gui.h:527
Window::SetWidgetLoweredState
void SetWidgetLoweredState(WidgetID widget_index, bool lowered_stat)
Sets the lowered/raised status of a widget.
Definition window_gui.h:442
Window::FindWindowPlacementAndResize
virtual void FindWindowPlacementAndResize(int def_width, int def_height, bool allow_resize)
Resize window towards the default size.
Definition window.cpp:1474
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:595
Window::InitNested
void InitNested(WindowNumber number=0)
Perform complete initialization of the Window with nested widgets, to allow use.
Definition window.cpp:1820
Window::flags
WindowFlags flags
Window flags.
Definition window_gui.h:301
Window::SetWidgetDisabledState
void SetWidgetDisabledState(WidgetID widget_index, bool disab_stat)
Sets the enabled/disabled status of a widget.
Definition window_gui.h:382
Window::height
int height
Height of the window (number of pixels down in y direction)
Definition window_gui.h:313
Window::width
int width
width of the window (number of pixels to the right in x direction)
Definition window_gui.h:312
Window::ToggleWidgetLoweredState
void ToggleWidgetLoweredState(WidgetID widget_index)
Invert the lowered/raised status of a widget.
Definition window_gui.h:451
ShowEditorTerraformToolbar
Window * ShowEditorTerraformToolbar()
Show the toolbar for terraforming in the scenario editor.
Definition terraform_gui.cpp:742
ShowTerraformToolbar
Window * ShowTerraformToolbar(Window *link)
Show the toolbar for terraforming in the game.
Definition terraform_gui.cpp:364
terraform_gui.h
GUI stuff related to terraforming.
textbuf_gui.h
Stuff related to the text buffer GUI.
QueryStringFlag::EnableDefault
@ EnableDefault
enable the 'Default' button ("\0" is returned)
tilehighlight_func.h
Functions related to tile highlights.
ResetObjectToPlace
void ResetObjectToPlace()
Reset the cursor and mouse mode handling back to default (normal cursor, only clicking in windows).
Definition viewport.cpp:3573
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:3525
HT_RECT
@ HT_RECT
rectangle (stations, depots, ...)
Definition tilehighlight_type.h:21
timer.h
Definition of Interval and OneShot timers.
timer_game_calendar.h
Definition of the game-calendar-timer.
timer_window.h
Definition of the Window system.
MenuClickForest
static CallBackFunction MenuClickForest(int index)
Handle click on the entry in the landscaping menu.
Definition toolbar_gui.cpp:997
SaveLoadEditorMenuEntries
SaveLoadEditorMenuEntries
SaveLoad entries in scenario editor mode.
Definition toolbar_gui.cpp:344
PopupMainToolbarMenu
static void PopupMainToolbarMenu(Window *w, WidgetID widget, DropDownList &&list, int def)
Pop up a generic text only menu.
Definition toolbar_gui.cpp:123
MenuClickCompany
static CallBackFunction MenuClickCompany(int index)
Handle click on the entry in the Company menu.
Definition toolbar_gui.cpp:584
MenuClickStations
static CallBackFunction MenuClickStations(int index)
Handle click on the entry in the Stations menu.
Definition toolbar_gui.cpp:544
MenuClickTown
static CallBackFunction MenuClickTown(int index)
Handle click on one of the entries in the Town menu.
Definition toolbar_gui.cpp:497
LTMN_PERFORMANCE_LEAGUE
static const int LTMN_PERFORMANCE_LEAGUE
Show default league table.
Definition toolbar_gui.cpp:658
ToolbarMode
ToolbarMode
Toolbar modes.
Definition toolbar_gui.cpp:85
MenuClickNewspaper
static CallBackFunction MenuClickNewspaper(int index)
Handle click on the entry in the Newspaper menu.
Definition toolbar_gui.cpp:1040
LTMN_PERFORMANCE_RATING
static const int LTMN_PERFORMANCE_RATING
Show detailed performance rating.
Definition toolbar_gui.cpp:659
CallBackFunction
CallBackFunction
Callback functions.
Definition toolbar_gui.cpp:92
ToolbarSaveClick
static CallBackFunction ToolbarSaveClick(Window *w)
Handle click on Save button in toolbar in normal game mode.
Definition toolbar_gui.cpp:369
SaveLoadNormalMenuEntries
SaveLoadNormalMenuEntries
SaveLoad entries in normal game mode.
Definition toolbar_gui.cpp:356
MenuClickShowRoad
static CallBackFunction MenuClickShowRoad(int index)
Handle click on the entry in the Road Vehicles menu.
Definition toolbar_gui.cpp:808
GRMN_DELIVERED_CARGO_GRAPH
static const int GRMN_DELIVERED_CARGO_GRAPH
Show delivered cargo graph.
Definition toolbar_gui.cpp:654
MenuClickGraphsOrLeague
static CallBackFunction MenuClickGraphsOrLeague(int index)
Handle click on the entry in the Graphs or CompanyLeague.
Definition toolbar_gui.cpp:711
MenuClickHelp
static CallBackFunction MenuClickHelp(int index)
Choose the proper callback function for the main toolbar's help menu.
Definition toolbar_gui.cpp:1153
_toolbar_width
uint _toolbar_width
Width of the toolbar, shared by statusbar.
Definition toolbar_gui.cpp:78
GRMN_PERFORMANCE_HISTORY_GRAPH
static const int GRMN_PERFORMANCE_HISTORY_GRAPH
Show performance history graph.
Definition toolbar_gui.cpp:655
ToolbarOptionsClick
static CallBackFunction ToolbarOptionsClick(Window *w)
Handle click on Options button in toolbar.
Definition toolbar_gui.cpp:265
MenuClickShowShips
static CallBackFunction MenuClickShowShips(int index)
Handle click on the entry in the Ships menu.
Definition toolbar_gui.cpp:828
MakeMainToolbar
static std::unique_ptr< NWidgetBase > MakeMainToolbar()
Definition toolbar_gui.cpp:2159
MenuClickSaveLoad
static CallBackFunction MenuClickSaveLoad(int index=0)
Handle click on one of the entries in the SaveLoad menu.
Definition toolbar_gui.cpp:396
CTMN_CLIENT_LIST
static const int CTMN_CLIENT_LIST
Enum for the Company Toolbar's network related buttons.
Definition toolbar_gui.cpp:150
GRMN_INCOME_GRAPH
static const int GRMN_INCOME_GRAPH
Show income graph.
Definition toolbar_gui.cpp:653
MenuClickMusicWindow
static CallBackFunction MenuClickMusicWindow(int)
Handle click on the entry in the Music menu.
Definition toolbar_gui.cpp:1020
ToolbarScenBuildTram
static CallBackFunction ToolbarScenBuildTram(int index)
Handle click on the entry in the Build Tram menu.
Definition toolbar_gui.cpp:1285
GRMN_COMPANY_VALUE_GRAPH
static const int GRMN_COMPANY_VALUE_GRAPH
Show company value graph.
Definition toolbar_gui.cpp:656
ToggleDirtyBlocks
void ToggleDirtyBlocks()
Toggle drawing of the dirty blocks.
Definition toolbar_gui.cpp:1103
MenuClickGoal
static CallBackFunction MenuClickGoal(int index)
Handle click on the entry in the Goal menu.
Definition toolbar_gui.cpp:640
ToolbarScenBuildRoad
static CallBackFunction ToolbarScenBuildRoad(int index)
Handle click on the entry in the Build Road menu.
Definition toolbar_gui.cpp:1266
MenuClickBuildRoad
static CallBackFunction MenuClickBuildRoad(int index)
Handle click on the entry in the Build Road menu.
Definition toolbar_gui.cpp:909
_last_started_action
static CallBackFunction _last_started_action
Last started user action.
Definition toolbar_gui.cpp:98
MenuClickShowTrains
static CallBackFunction MenuClickShowTrains(int index)
Handle click on the entry in the Train menu.
Definition toolbar_gui.cpp:788
MenuClickMap
static CallBackFunction MenuClickMap(int index)
Handle click on one of the entries in the Map menu.
Definition toolbar_gui.cpp:458
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:652
MenuClickBuildRail
static CallBackFunction MenuClickBuildRail(int index)
Handle click on the entry in the Build Rail menu.
Definition toolbar_gui.cpp:888
MenuClickShowAir
static CallBackFunction MenuClickShowAir(int index)
Handle click on the entry in the Aircraft menu.
Definition toolbar_gui.cpp:848
AllocateToolbar
void AllocateToolbar()
Allocate the toolbar.
Definition toolbar_gui.cpp:2572
GRMN_CARGO_PAYMENT_RATES
static const int GRMN_CARGO_PAYMENT_RATES
Show cargo payment rates graph.
Definition toolbar_gui.cpp:657
ToolbarScenSaveOrLoad
static CallBackFunction ToolbarScenSaveOrLoad(Window *w)
Handle click on SaveLoad button in toolbar in the scenario editor.
Definition toolbar_gui.cpp:382
MenuClickBuildTram
static CallBackFunction MenuClickBuildTram(int index)
Handle click on the entry in the Build Tram menu.
Definition toolbar_gui.cpp:930
ToolbarFastForwardClick
static CallBackFunction ToolbarFastForwardClick(Window *)
Toggle fast forward mode.
Definition toolbar_gui.cpp:222
OptionMenuEntries
OptionMenuEntries
Game Option button menu entries.
Definition toolbar_gui.cpp:235
ToolbarScenDatePanel
static CallBackFunction ToolbarScenDatePanel(Window *w)
Called when clicking at the date panel of the scenario editor toolbar.
Definition toolbar_gui.cpp:1192
PopupMainCompanyToolbMenu
static void PopupMainCompanyToolbMenu(Window *w, WidgetID widget, CompanyMask grey={})
Pop up a generic company list menu.
Definition toolbar_gui.cpp:160
MenuClickBuildWater
static CallBackFunction MenuClickBuildWater(int)
Handle click on the entry in the Build Waterways menu.
Definition toolbar_gui.cpp:952
CTMN_SPECTATE
static const int CTMN_SPECTATE
Become spectator.
Definition toolbar_gui.cpp:151
MenuClickSubsidies
static CallBackFunction MenuClickSubsidies(int)
Handle click on the entry in the Subsidies menu.
Definition toolbar_gui.cpp:524
SetStartingYear
void SetStartingYear(TimerGameCalendar::Year year)
Set the starting year for a scenario.
Definition toolbar_gui.cpp:1131
LTMN_HIGHSCORE
static const int LTMN_HIGHSCORE
Show highscrore table.
Definition toolbar_gui.cpp:660
MenuClickStory
static CallBackFunction MenuClickStory(int index)
Handle click on the entry in the Story menu.
Definition toolbar_gui.cpp:620
ToggleBoundingBoxes
void ToggleBoundingBoxes()
Toggle drawing of sprites' bounding boxes.
Definition toolbar_gui.cpp:1086
MenuClickBuildAir
static CallBackFunction MenuClickBuildAir(int)
Handle click on the entry in the Build Air menu.
Definition toolbar_gui.cpp:973
ToggleWidgetOutlines
void ToggleWidgetOutlines()
Toggle drawing of widget outlines.
Definition toolbar_gui.cpp:1117
MenuClickSettings
static CallBackFunction MenuClickSettings(int index)
Handle click on one of the entries in the Options button menu.
Definition toolbar_gui.cpp:308
MenuClickFinances
static CallBackFunction MenuClickFinances(int index)
Handle click on the entry in the finances overview menu.
Definition toolbar_gui.cpp:564
MenuClickIndustry
static CallBackFunction MenuClickIndustry(int index)
Handle click on the entry in the Industry menu.
Definition toolbar_gui.cpp:753
CTMN_SPECTATOR
static const int CTMN_SPECTATOR
Show a company window as spectator.
Definition toolbar_gui.cpp:152
toolbar_gui.h
Stuff related to the (main) toolbar.
toolbar_widget.h
Types related to the toolbar widgets.
WID_TE_SMALL_MAP
@ WID_TE_SMALL_MAP
Small map menu.
Definition toolbar_widget.h:61
WID_TE_TREES
@ WID_TE_TREES
Tree building toolbar.
Definition toolbar_widget.h:70
WID_TE_TRAMS
@ WID_TE_TRAMS
Tram building menu.
Definition toolbar_widget.h:68
WID_TE_DATE
@ WID_TE_DATE
The date of the scenario.
Definition toolbar_widget.h:58
WID_TE_ZOOM_IN
@ WID_TE_ZOOM_IN
Zoom in the main viewport.
Definition toolbar_widget.h:62
WID_TE_DATE_PANEL
@ WID_TE_DATE_PANEL
Container for the date widgets.
Definition toolbar_widget.h:72
WID_TE_HELP
@ WID_TE_HELP
Help menu.
Definition toolbar_widget.h:74
WID_TE_ZOOM_OUT
@ WID_TE_ZOOM_OUT
Zoom out the main viewport.
Definition toolbar_widget.h:63
WID_TE_INDUSTRY
@ WID_TE_INDUSTRY
Industry building window.
Definition toolbar_widget.h:66
WID_TE_PAUSE
@ WID_TE_PAUSE
Pause the game.
Definition toolbar_widget.h:53
WID_TE_DATE_FORWARD
@ WID_TE_DATE_FORWARD
Increase the date of the scenario.
Definition toolbar_widget.h:60
WID_TE_SPACER
@ WID_TE_SPACER
Spacer with "scenario editor" text.
Definition toolbar_widget.h:57
WID_TE_WATER
@ WID_TE_WATER
Water building toolbar.
Definition toolbar_widget.h:69
WID_TE_MUSIC_SOUND
@ WID_TE_MUSIC_SOUND
Music/sound configuration menu.
Definition toolbar_widget.h:73
WID_TE_SAVE
@ WID_TE_SAVE
Save menu.
Definition toolbar_widget.h:56
WID_TE_LAND_GENERATE
@ WID_TE_LAND_GENERATE
Land generation.
Definition toolbar_widget.h:64
WID_TE_TOWN_GENERATE
@ WID_TE_TOWN_GENERATE
Town building window.
Definition toolbar_widget.h:65
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
WID_TE_ROADS
@ WID_TE_ROADS
Road building menu.
Definition toolbar_widget.h:67
WID_TE_FAST_FORWARD
@ WID_TE_FAST_FORWARD
Fast forward the game.
Definition toolbar_widget.h:54
WID_TE_SIGNS
@ WID_TE_SIGNS
Sign building.
Definition toolbar_widget.h:71
WID_TE_SETTINGS
@ WID_TE_SETTINGS
Settings menu.
Definition toolbar_widget.h:55
WID_TE_DATE_BACKWARD
@ WID_TE_DATE_BACKWARD
Reduce the date of the scenario.
Definition toolbar_widget.h:59
WID_TN_LANDSCAPE
@ WID_TN_LANDSCAPE
Landscaping toolbar.
Definition toolbar_widget.h:43
WID_TN_AIR
@ WID_TN_AIR
Airport building toolbar.
Definition toolbar_widget.h:42
WID_TN_SHIPS
@ WID_TN_SHIPS
Ship menu.
Definition toolbar_widget.h:33
WID_TN_SETTINGS
@ WID_TN_SETTINGS
Settings menu.
Definition toolbar_widget.h:17
WID_TN_GOAL
@ WID_TN_GOAL
Goal menu.
Definition toolbar_widget.h:26
WID_TN_MUSIC_SOUND
@ WID_TN_MUSIC_SOUND
Music/sound configuration menu.
Definition toolbar_widget.h:44
WID_TN_RAILS
@ WID_TN_RAILS
Rail building menu.
Definition toolbar_widget.h:38
WID_TN_SUBSIDIES
@ WID_TN_SUBSIDIES
Subsidy menu.
Definition toolbar_widget.h:21
WID_TN_BUILDING_TOOLS_START
@ WID_TN_BUILDING_TOOLS_START
Helper for the offset of the building tools.
Definition toolbar_widget.h:37
WID_TN_TRAMS
@ WID_TN_TRAMS
Tram building menu.
Definition toolbar_widget.h:40
WID_TN_HELP
@ WID_TN_HELP
Help menu.
Definition toolbar_widget.h:46
WID_TN_SAVE
@ WID_TN_SAVE
Save menu.
Definition toolbar_widget.h:18
WID_TN_STORY
@ WID_TN_STORY
Story menu.
Definition toolbar_widget.h:25
WID_TN_MESSAGES
@ WID_TN_MESSAGES
Messages menu.
Definition toolbar_widget.h:45
WID_TN_ROADVEHS
@ WID_TN_ROADVEHS
Road vehicle menu.
Definition toolbar_widget.h:32
WID_TN_VEHICLE_START
@ WID_TN_VEHICLE_START
Helper for the offset of the vehicle menus.
Definition toolbar_widget.h:30
WID_TN_FINANCES
@ WID_TN_FINANCES
Finance menu.
Definition toolbar_widget.h:23
WID_TN_GRAPHS
@ WID_TN_GRAPHS
Graph menu.
Definition toolbar_widget.h:27
WID_TN_LEAGUE
@ WID_TN_LEAGUE
Company league menu.
Definition toolbar_widget.h:28
WID_TN_STATIONS
@ WID_TN_STATIONS
Station menu.
Definition toolbar_widget.h:22
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
WID_TN_COMPANIES
@ WID_TN_COMPANIES
Company menu.
Definition toolbar_widget.h:24
WID_TN_INDUSTRIES
@ WID_TN_INDUSTRIES
Industry menu.
Definition toolbar_widget.h:29
WID_TN_AIRCRAFT
@ WID_TN_AIRCRAFT
Aircraft menu.
Definition toolbar_widget.h:34
WID_TN_ZOOM_OUT
@ WID_TN_ZOOM_OUT
Zoom out the main viewport.
Definition toolbar_widget.h:36
WID_TN_FAST_FORWARD
@ WID_TN_FAST_FORWARD
Fast forward the game.
Definition toolbar_widget.h:16
WID_TN_ZOOM_IN
@ WID_TN_ZOOM_IN
Zoom in the main viewport.
Definition toolbar_widget.h:35
WID_TN_PAUSE
@ WID_TN_PAUSE
Pause the game.
Definition toolbar_widget.h:15
WID_TN_WATER
@ WID_TN_WATER
Water building toolbar.
Definition toolbar_widget.h:41
WID_TN_ROADS
@ WID_TN_ROADS
Road building menu.
Definition toolbar_widget.h:39
WID_TN_TRAINS
@ WID_TN_TRAINS
Train menu.
Definition toolbar_widget.h:31
WID_TN_TOWNS
@ WID_TN_TOWNS
Town menu.
Definition toolbar_widget.h:20
WID_TN_SMALL_MAP
@ WID_TN_SMALL_MAP
Small map menu.
Definition toolbar_widget.h:19
TF_FORBIDDEN
@ TF_FORBIDDEN
Forbidden.
Definition town_type.h:105
_facility_display_opt
StationFacilities _facility_display_opt
What station facilities to draw.
Definition transparency_gui.cpp:27
ToggleTransparency
void ToggleTransparency(TransparencyOption to)
Toggle the transparency option bit.
Definition transparency.h:71
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:50
_display_opt
uint8_t _display_opt
What do we want to draw/do?
Definition transparency_gui.cpp:26
TO_HOUSES
@ TO_HOUSES
town buildings
Definition transparency.h:26
TO_SIGNS
@ TO_SIGNS
signs
Definition transparency.h:24
ShowTransparencyToolbar
void ShowTransparencyToolbar()
Show the transparency toolbar.
Definition transparency_gui.cpp:162
transparency_gui.h
GUI functions related to transparency.
vehicle_base.h
Base class for all vehicles.
vehicle_func.h
Functions related to vehicles.
vehicle_gui.h
Functions related to the vehicle's GUIs.
VehicleType
VehicleType
Available vehicle types.
Definition vehicle_type.h:22
VEH_ROAD
@ VEH_ROAD
Road vehicle type.
Definition vehicle_type.h:26
VEH_AIRCRAFT
@ VEH_AIRCRAFT
Aircraft vehicle type.
Definition vehicle_type.h:28
VEH_SHIP
@ VEH_SHIP
Ship vehicle type.
Definition vehicle_type.h:27
VEH_TRAIN
@ VEH_TRAIN
Train vehicle type.
Definition vehicle_type.h:25
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:486
viewport_func.h
Functions related to (drawing on) viewports.
ZOOM_IN
@ ZOOM_IN
Zoom in (get more detailed view).
Definition viewport_type.h:81
ZOOM_NONE
@ ZOOM_NONE
Hack, used to update the button status.
Definition viewport_type.h:83
ZOOM_OUT
@ ZOOM_OUT
Zoom out (get helicopter view).
Definition viewport_type.h:82
WidgetType
WidgetType
Window widget types, nested widget types, and nested widget part types.
Definition widget_type.h:35
WWT_IMGBTN
@ WWT_IMGBTN
(Toggle) Button with image
Definition widget_type.h:41
WWT_IMGBTN_2
@ WWT_IMGBTN_2
(Toggle) Button with diff image when clicked
Definition widget_type.h:42
WWT_PUSHIMGBTN
@ WWT_PUSHIMGBTN
Normal push-button (no toggle button) with image caption.
Definition widget_type.h:105
NWID_SPACER
@ NWID_SPACER
Invisible widget that takes some space.
Definition widget_type.h:70
NWID_HORIZONTAL
@ NWID_HORIZONTAL
Horizontal container.
Definition widget_type.h:66
WWT_PANEL
@ WWT_PANEL
Simple depressed panel.
Definition widget_type.h:39
WWT_TEXT
@ WWT_TEXT
Pure simple text.
Definition widget_type.h:49
SizingType
SizingType
Different forms of sizing nested widgets, using NWidgetBase::AssignSizePosition()
Definition widget_type.h:112
GetMainWindow
Window * GetMainWindow()
Get the main window, i.e.
Definition window.cpp:1180
PositionMainToolbar
int PositionMainToolbar(Window *w)
(Re)position main toolbar window at the screen.
Definition window.cpp:3465
DeleteAllMessages
void DeleteAllMessages()
Delete all messages and close their corresponding window (if any).
Definition window.cpp:3368
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:3311
window_func.h
Window functions not directly related to making/drawing windows.
window_gui.h
Functions, definitions and such used only by the GUI.
WindowDefaultFlag::NoClose
@ NoClose
This window can't be interactively closed.
WindowDefaultFlag::NoFocus
@ NoFocus
This window won't get focus/make any other window lose focus when click.
WindowFlag::WhiteBorder
@ WhiteBorder
Window white border counter bit mask.
WindowFlag::Timeout
@ Timeout
Window timeout counter.
WDP_MANUAL
@ WDP_MANUAL
Manually align the window (so no automatic location finding)
Definition window_gui.h:143
WidgetID
int WidgetID
Widget ID.
Definition window_type.h:20
EventState
EventState
State of handling an event.
Definition window_type.h:780
ES_HANDLED
@ ES_HANDLED
The passed event is handled.
Definition window_type.h:781
ES_NOT_HANDLED
@ ES_NOT_HANDLED
The passed event is not handled.
Definition window_type.h:782
WC_SIGN_LIST
@ WC_SIGN_LIST
Sign list; Window numbers:
Definition window_type.h:283
WC_NONE
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
Definition window_type.h:50
WC_MAIN_TOOLBAR
@ WC_MAIN_TOOLBAR
Main toolbar (the long bar at the top); Window numbers:
Definition window_type.h:63