OpenTTD Source: src/toolbar_gui.cpp Source File

OpenTTD Source 1.11.0-RC1

toolbar_gui.cpp
Go to the documentation of this file.
1 /*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6 */
7
10 #include "stdafx.h"
11 #include "gui.h"
12 #include "window_gui.h"
13 #include "window_func.h"
14 #include "viewport_func.h"
15 #include "command_func.h"
16 #include "vehicle_gui.h"
17 #include "rail_gui.h"
18 #include "road.h"
19 #include "road_gui.h"
20 #include "date_func.h"
21 #include "vehicle_func.h"
22 #include "sound_func.h"
23 #include "terraform_gui.h"
24 #include "strings_func.h"
25 #include "company_func.h"
26 #include "company_gui.h"
27 #include "vehicle_base.h"
28 #include "cheat_func.h"
29 #include "transparency_gui.h"
30 #include "screenshot.h"
31 #include "signs_func.h"
32 #include "fios.h"
33 #include "console_gui.h"
34 #include "news_gui.h"
35 #include "ai/ai_gui.hpp"
36 #include "tilehighlight_func.h"
37 #include "smallmap_gui.h"
38 #include "graph_gui.h"
39 #include "textbuf_gui.h"
40 #include "linkgraph/linkgraph_gui.h"
41 #include "newgrf_debug.h"
42 #include "hotkeys.h"
43 #include "engine_base.h"
44 #include "highscore.h"
45 #include "game/game.hpp"
46 #include "goal_base.h"
47 #include "story_base.h"
48 #include "toolbar_gui.h"
49 #include "framerate_type.h"
50 #include "guitimer_func.h"
51 #include "screenshot_gui.h"
52
53 #include "widgets/toolbar_widget.h"
54
55 #include "network/network.h"
56 #include "network/network_gui.h"
57 #include "network/network_func.h"
58
59 #include "safeguards.h"
60
61
63 uint _toolbar_width = 0;
64
65 RailType _last_built_railtype;
66 RoadType _last_built_roadtype;
67 RoadType _last_built_tramtype;
68
70 enum ToolbarMode {
71 TB_NORMAL,
72 TB_UPPER,
73 TB_LOWER
74 };
75
77 enum CallBackFunction {
78 CBF_NONE,
79 CBF_PLACE_SIGN,
80 CBF_PLACE_LANDINFO,
81 };
82
83 static CallBackFunction _last_started_action = CBF_NONE;
84
85
89 class DropDownListCheckedItem : public DropDownListStringItem {
90 uint checkmark_width;
91 public:
92 bool checked;
93
94 DropDownListCheckedItem(StringID string, int result, bool masked, bool checked) : DropDownListStringItem(string, result, masked), checked(checked)
95 {
96 this->checkmark_width = GetStringBoundingBox(STR_JUST_CHECKMARK).width + 3;
97 }
98
99 uint Width() const
100 {
101 return DropDownListStringItem::Width() + this->checkmark_width;
102 }
103
104 void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const
105 {
106 bool rtl = _current_text_dir == TD_RTL;
107 if (this->checked) {
108 DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, STR_JUST_CHECKMARK, sel ? TC_WHITE : TC_BLACK);
109 }
110 DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 0 : this->checkmark_width), right - WD_FRAMERECT_RIGHT - (rtl ? this->checkmark_width : 0), top, this->String(), sel ? TC_WHITE : TC_BLACK);
111 }
112 };
113
117 class DropDownListCompanyItem : public DropDownListItem {
118 Dimension icon_size;
119 Dimension lock_size;
120 public:
121 bool greyed;
122
123 DropDownListCompanyItem(int result, bool masked, bool greyed) : DropDownListItem(result, masked), greyed(greyed)
124 {
125 this->icon_size = GetSpriteSize(SPR_COMPANY_ICON);
126 this->lock_size = GetSpriteSize(SPR_LOCK);
127 }
128
129 bool Selectable() const override
130 {
131 return true;
132 }
133
134 uint Width() const override
135 {
136 CompanyID company = (CompanyID)this->result;
137 SetDParam(0, company);
138 SetDParam(1, company);
139 return GetStringBoundingBox(STR_COMPANY_NAME_COMPANY_NUM).width + this->icon_size.width + this->lock_size.width + 6;
140 }
141
142 uint Height(uint width) const override
143 {
144 return std::max(std::max(this->icon_size.height, this->lock_size.height) + 2U, (uint)FONT_HEIGHT_NORMAL);
145 }
146
147 void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const override
148 {
149 CompanyID company = (CompanyID)this->result;
150 bool rtl = _current_text_dir == TD_RTL;
151
152 /* It's possible the company is deleted while the dropdown is open */
153 if (!Company::IsValidID(company)) return;
154
155 int icon_offset = (bottom - top - icon_size.height) / 2;
156 int text_offset = (bottom - top - FONT_HEIGHT_NORMAL) / 2;
157 int lock_offset = (bottom - top - lock_size.height) / 2;
158
159 DrawCompanyIcon(company, rtl ? right - this->icon_size.width - WD_FRAMERECT_RIGHT : left + WD_FRAMERECT_LEFT, top + icon_offset);
160 if (NetworkCompanyIsPassworded(company)) {
161 DrawSprite(SPR_LOCK, PAL_NONE, rtl ? left + WD_FRAMERECT_LEFT : right - this->lock_size.width - WD_FRAMERECT_RIGHT, top + lock_offset);
162 }
163
164 SetDParam(0, company);
165 SetDParam(1, company);
166 TextColour col;
167 if (this->greyed) {
168 col = (sel ? TC_SILVER : TC_GREY) | TC_NO_SHADE;
169 } else {
170 col = sel ? TC_WHITE : TC_BLACK;
171 }
172 DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 3 + this->lock_size.width : 3 + this->icon_size.width), right - WD_FRAMERECT_RIGHT - (rtl ? 3 + this->icon_size.width : 3 + this->lock_size.width), top + text_offset, STR_COMPANY_NAME_COMPANY_NUM, col);
173 }
174 };
175
183 static void PopupMainToolbMenu(Window *w, int widget, DropDownList &&list, int def)
184 {
185 ShowDropDownList(w, std::move(list), def, widget, 0, true, true);
186 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
187 }
188
196 static void PopupMainToolbMenu(Window *w, int widget, StringID string, int count)
197 {
198 DropDownList list;
199 for (int i = 0; i < count; i++) {
200 list.emplace_back(new DropDownListStringItem(string + i, i, false));
201 }
202 PopupMainToolbMenu(w, widget, std::move(list), 0);
203 }
204
206 static const int CTMN_CLIENT_LIST = -1;
207 static const int CTMN_NEW_COMPANY = -2;
208 static const int CTMN_SPECTATE = -3;
209 static const int CTMN_SPECTATOR = -4;
210
217 static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0)
218 {
219 DropDownList list;
220
221 switch (widget) {
222 case WID_TN_COMPANIES:
223 if (!_networking) break;
224
225 /* Add the client list button for the companies menu */
226 list.emplace_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST, false));
227
228 if (_local_company == COMPANY_SPECTATOR) {
229 list.emplace_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_NEW_COMPANY, CTMN_NEW_COMPANY, NetworkMaxCompaniesReached()));
230 } else {
231 list.emplace_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, NetworkMaxSpectatorsReached()));
232 }
233 break;
234
235 case WID_TN_STORY:
236 list.emplace_back(new DropDownListStringItem(STR_STORY_BOOK_SPECTATOR, CTMN_SPECTATOR, false));
237 break;
238
239 case WID_TN_GOAL:
240 list.emplace_back(new DropDownListStringItem(STR_GOALS_SPECTATOR, CTMN_SPECTATOR, false));
241 break;
242 }
243
244 for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
245 if (!Company::IsValidID(c)) continue;
246 list.emplace_back(new DropDownListCompanyItem(c, false, HasBit(grey, c)));
247 }
248
249 PopupMainToolbMenu(w, widget, std::move(list), _local_company == COMPANY_SPECTATOR ? (widget == WID_TN_COMPANIES ? CTMN_CLIENT_LIST : CTMN_SPECTATOR) : (int)_local_company);
250 }
251
252
253 static ToolbarMode _toolbar_mode;
254
255 static CallBackFunction SelectSignTool()
256 {
257 if (_last_started_action == CBF_PLACE_SIGN) {
258 ResetObjectToPlace();
259 return CBF_NONE;
260 } else {
261 SetObjectToPlace(SPR_CURSOR_SIGN, PAL_NONE, HT_RECT, WC_MAIN_TOOLBAR, 0);
262 return CBF_PLACE_SIGN;
263 }
264 }
265
266 /* --- Pausing --- */
267
268 static CallBackFunction ToolbarPauseClick(Window *w)
269 {
270 if (_networking && !_network_server) return CBF_NONE; // only server can pause the game
271
272 if (DoCommandP(0, PM_PAUSED_NORMAL, _pause_mode == PM_UNPAUSED, CMD_PAUSE)) {
273 if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
274 }
275 return CBF_NONE;
276 }
277
284 static CallBackFunction ToolbarFastForwardClick(Window *w)
285 {
286 ChangeGameSpeed(_game_speed == 100);
287
288 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
289 return CBF_NONE;
290 }
291
295 enum OptionMenuEntries {
296 OME_GAMEOPTIONS,
297 OME_SETTINGS,
298 OME_SCRIPT_SETTINGS,
299 OME_NEWGRFSETTINGS,
300 OME_TRANSPARENCIES,
301 OME_SHOW_TOWNNAMES,
302 OME_SHOW_STATIONNAMES,
303 OME_SHOW_WAYPOINTNAMES,
304 OME_SHOW_SIGNS,
305 OME_SHOW_COMPETITOR_SIGNS,
306 OME_FULL_ANIMATION,
307 OME_FULL_DETAILS,
308 OME_TRANSPARENTBUILDINGS,
309 OME_SHOW_STATIONSIGNS,
310 };
311
318 static CallBackFunction ToolbarOptionsClick(Window *w)
319 {
320 DropDownList list;
321 list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_GAME_OPTIONS, OME_GAMEOPTIONS, false));
322 list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE, OME_SETTINGS, false));
323 /* Changes to the per-AI settings don't get send from the server to the clients. Clients get
324 * the settings once they join but never update it. As such don't show the window at all
325 * to network clients. */
326 if (!_networking || _network_server) list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_SCRIPT_SETTINGS, OME_SCRIPT_SETTINGS, false));
327 list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_NEWGRF_SETTINGS, OME_NEWGRFSETTINGS, false));
328 list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS, OME_TRANSPARENCIES, false));
329 list.emplace_back(new DropDownListItem(-1, false));
330 list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES, false, HasBit(_display_opt, DO_SHOW_TOWN_NAMES)));
331 list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES, false, HasBit(_display_opt, DO_SHOW_STATION_NAMES)));
332 list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES, false, HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES)));
333 list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS, false, HasBit(_display_opt, DO_SHOW_SIGNS)));
334 list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS, false, HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS)));
335 list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION, false, HasBit(_display_opt, DO_FULL_ANIMATION)));
336 list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS, false, HasBit(_display_opt, DO_FULL_DETAIL)));
337 list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS, false, IsTransparencySet(TO_HOUSES)));
338 list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS, false, IsTransparencySet(TO_SIGNS)));
339
340 ShowDropDownList(w, std::move(list), 0, WID_TN_SETTINGS, 140, true, true);
341 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
342 return CBF_NONE;
343 }
344
351 static CallBackFunction MenuClickSettings(int index)
352 {
353 switch (index) {
354 case OME_GAMEOPTIONS: ShowGameOptions(); return CBF_NONE;
355 case OME_SETTINGS: ShowGameSettings(); return CBF_NONE;
356 case OME_SCRIPT_SETTINGS: ShowAIConfigWindow(); return CBF_NONE;
357 case OME_NEWGRFSETTINGS: ShowNewGRFSettings(!_networking && _settings_client.gui.UserIsAllowedToChangeNewGRFs(), true, true, &_grfconfig); return CBF_NONE;
358 case OME_TRANSPARENCIES: ShowTransparencyToolbar(); break;
359
360 case OME_SHOW_TOWNNAMES: ToggleBit(_display_opt, DO_SHOW_TOWN_NAMES); break;
361 case OME_SHOW_STATIONNAMES: ToggleBit(_display_opt, DO_SHOW_STATION_NAMES); break;
362 case OME_SHOW_WAYPOINTNAMES: ToggleBit(_display_opt, DO_SHOW_WAYPOINT_NAMES); break;
363 case OME_SHOW_SIGNS: ToggleBit(_display_opt, DO_SHOW_SIGNS); break;
364 case OME_SHOW_COMPETITOR_SIGNS:
365 ToggleBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS);
366 InvalidateWindowClassesData(WC_SIGN_LIST, -1);
367 break;
368 case OME_FULL_ANIMATION: ToggleBit(_display_opt, DO_FULL_ANIMATION); CheckBlitter(); break;
369 case OME_FULL_DETAILS: ToggleBit(_display_opt, DO_FULL_DETAIL); break;
370 case OME_TRANSPARENTBUILDINGS: ToggleTransparency(TO_HOUSES); break;
371 case OME_SHOW_STATIONSIGNS: ToggleTransparency(TO_SIGNS); break;
372 }
373 MarkWholeScreenDirty();
374 return CBF_NONE;
375 }
376
380 enum SaveLoadEditorMenuEntries {
381 SLEME_SAVE_SCENARIO = 0,
382 SLEME_LOAD_SCENARIO,
383 SLEME_SAVE_HEIGHTMAP,
384 SLEME_LOAD_HEIGHTMAP,
385 SLEME_EXIT_TOINTRO,
386 SLEME_EXIT_GAME = 6,
387 SLEME_MENUCOUNT,
388 };
389
393 enum SaveLoadNormalMenuEntries {
394 SLNME_SAVE_GAME = 0,
395 SLNME_LOAD_GAME,
396 SLNME_EXIT_TOINTRO,
397 SLNME_EXIT_GAME = 4,
398 SLNME_MENUCOUNT,
399 };
400
407 static CallBackFunction ToolbarSaveClick(Window *w)
408 {
409 PopupMainToolbMenu(w, WID_TN_SAVE, STR_FILE_MENU_SAVE_GAME, SLNME_MENUCOUNT);
410 return CBF_NONE;
411 }
412
419 static CallBackFunction ToolbarScenSaveOrLoad(Window *w)
420 {
421 PopupMainToolbMenu(w, WID_TE_SAVE, STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO, SLEME_MENUCOUNT);
422 return CBF_NONE;
423 }
424
431 static CallBackFunction MenuClickSaveLoad(int index = 0)
432 {
433 if (_game_mode == GM_EDITOR) {
434 switch (index) {
435 case SLEME_SAVE_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_SAVE); break;
436 case SLEME_LOAD_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_LOAD); break;
437 case SLEME_SAVE_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_SAVE); break;
438 case SLEME_LOAD_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_LOAD); break;
439 case SLEME_EXIT_TOINTRO: AskExitToGameMenu(); break;
440 case SLEME_EXIT_GAME: HandleExitGameRequest(); break;
441 }
442 } else {
443 switch (index) {
444 case SLNME_SAVE_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_SAVE); break;
445 case SLNME_LOAD_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break;
446 case SLNME_EXIT_TOINTRO: AskExitToGameMenu(); break;
447 case SLNME_EXIT_GAME: HandleExitGameRequest(); break;
448 }
449 }
450 return CBF_NONE;
451 }
452
453 /* --- Map button menu --- */
454
455 enum MapMenuEntries {
456 MME_SHOW_SMALLMAP = 0,
457 MME_SHOW_EXTRAVIEWPORTS,
458 MME_SHOW_LINKGRAPH,
459 MME_SHOW_SIGNLISTS,
460 MME_SHOW_TOWNDIRECTORY,
461 MME_SHOW_INDUSTRYDIRECTORY,
462 };
463
464 static CallBackFunction ToolbarMapClick(Window *w)
465 {
466 DropDownList list;
467 list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false));
468 list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS, false));
469 list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_LINGRAPH_LEGEND, MME_SHOW_LINKGRAPH, false));
470 list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false));
471 PopupMainToolbMenu(w, WID_TN_SMALL_MAP, std::move(list), 0);
472 return CBF_NONE;
473 }
474
475 static CallBackFunction ToolbarScenMapTownDir(Window *w)
476 {
477 DropDownList list;
478 list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false));
479 list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS, false));
480 list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false));
481 list.emplace_back(new DropDownListStringItem(STR_TOWN_MENU_TOWN_DIRECTORY, MME_SHOW_TOWNDIRECTORY, false));
482 list.emplace_back(new DropDownListStringItem(STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, MME_SHOW_INDUSTRYDIRECTORY, false));
483 PopupMainToolbMenu(w, WID_TE_SMALL_MAP, std::move(list), 0);
484 return CBF_NONE;
485 }
486
493 static CallBackFunction MenuClickMap(int index)
494 {
495 switch (index) {
496 case MME_SHOW_SMALLMAP: ShowSmallMap(); break;
497 case MME_SHOW_EXTRAVIEWPORTS: ShowExtraViewportWindow(); break;
498 case MME_SHOW_LINKGRAPH: ShowLinkGraphLegend(); break;
499 case MME_SHOW_SIGNLISTS: ShowSignList(); break;
500 case MME_SHOW_TOWNDIRECTORY: ShowTownDirectory(); break;
501 case MME_SHOW_INDUSTRYDIRECTORY: ShowIndustryDirectory(); break;
502 }
503 return CBF_NONE;
504 }
505
506 /* --- Town button menu --- */
507
508 static CallBackFunction ToolbarTownClick(Window *w)
509 {
510 PopupMainToolbMenu(w, WID_TN_TOWNS, STR_TOWN_MENU_TOWN_DIRECTORY, (_settings_game.economy.found_town == TF_FORBIDDEN) ? 1 : 2);
511 return CBF_NONE;
512 }
513
520 static CallBackFunction MenuClickTown(int index)
521 {
522 switch (index) {
523 case 0: ShowTownDirectory(); break;
524 case 1: // setting could be changed when the dropdown was open
525 if (_settings_game.economy.found_town != TF_FORBIDDEN) ShowFoundTownWindow();
526 break;
527 }
528 return CBF_NONE;
529 }
530
531 /* --- Subidies button menu --- */
532
533 static CallBackFunction ToolbarSubsidiesClick(Window *w)
534 {
535 PopupMainToolbMenu(w, WID_TN_SUBSIDIES, STR_SUBSIDIES_MENU_SUBSIDIES, 1);
536 return CBF_NONE;
537 }
538
545 static CallBackFunction MenuClickSubsidies(int index)
546 {
547 switch (index) {
548 case 0: ShowSubsidiesList(); break;
549 }
550 return CBF_NONE;
551 }
552
553 /* --- Stations button menu --- */
554
555 static CallBackFunction ToolbarStationsClick(Window *w)
556 {
557 PopupMainCompanyToolbMenu(w, WID_TN_STATIONS);
558 return CBF_NONE;
559 }
560
567 static CallBackFunction MenuClickStations(int index)
568 {
569 ShowCompanyStations((CompanyID)index);
570 return CBF_NONE;
571 }
572
573 /* --- Finances button menu --- */
574
575 static CallBackFunction ToolbarFinancesClick(Window *w)
576 {
577 PopupMainCompanyToolbMenu(w, WID_TN_FINANCES);
578 return CBF_NONE;
579 }
580
587 static CallBackFunction MenuClickFinances(int index)
588 {
589 ShowCompanyFinances((CompanyID)index);
590 return CBF_NONE;
591 }
592
593 /* --- Company's button menu --- */
594
595 static CallBackFunction ToolbarCompaniesClick(Window *w)
596 {
597 PopupMainCompanyToolbMenu(w, WID_TN_COMPANIES, 0);
598 return CBF_NONE;
599 }
600
607 static CallBackFunction MenuClickCompany(int index)
608 {
609 if (_networking) {
610 switch (index) {
611 case CTMN_CLIENT_LIST:
612 ShowClientList();
613 return CBF_NONE;
614
615 case CTMN_NEW_COMPANY:
616 if (_network_server) {
617 DoCommandP(0, CCA_NEW, _network_own_client_id, CMD_COMPANY_CTRL);
618 } else {
619 NetworkSendCommand(0, CCA_NEW, 0, CMD_COMPANY_CTRL, nullptr, nullptr, _local_company);
620 }
621 return CBF_NONE;
622
623 case CTMN_SPECTATE:
624 if (_network_server) {
625 NetworkServerDoMove(CLIENT_ID_SERVER, COMPANY_SPECTATOR);
626 MarkWholeScreenDirty();
627 } else {
628 NetworkClientRequestMove(COMPANY_SPECTATOR);
629 }
630 return CBF_NONE;
631 }
632 }
633 ShowCompany((CompanyID)index);
634 return CBF_NONE;
635 }
636
637 /* --- Story button menu --- */
638
639 static CallBackFunction ToolbarStoryClick(Window *w)
640 {
641 PopupMainCompanyToolbMenu(w, WID_TN_STORY, 0);
642 return CBF_NONE;
643 }
644
651 static CallBackFunction MenuClickStory(int index)
652 {
653 ShowStoryBook(index == CTMN_SPECTATOR ? INVALID_COMPANY : (CompanyID)index);
654 return CBF_NONE;
655 }
656
657 /* --- Goal button menu --- */
658
659 static CallBackFunction ToolbarGoalClick(Window *w)
660 {
661 PopupMainCompanyToolbMenu(w, WID_TN_GOAL, 0);
662 return CBF_NONE;
663 }
664
671 static CallBackFunction MenuClickGoal(int index)
672 {
673 ShowGoalsList(index == CTMN_SPECTATOR ? INVALID_COMPANY : (CompanyID)index);
674 return CBF_NONE;
675 }
676
677 /* --- Graphs button menu --- */
678
679 static CallBackFunction ToolbarGraphsClick(Window *w)
680 {
681 PopupMainToolbMenu(w, WID_TN_GRAPHS, STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH, (_toolbar_mode == TB_NORMAL) ? 6 : 8);
682 return CBF_NONE;
683 }
684
691 static CallBackFunction MenuClickGraphs(int index)
692 {
693 switch (index) {
694 case 0: ShowOperatingProfitGraph(); break;
695 case 1: ShowIncomeGraph(); break;
696 case 2: ShowDeliveredCargoGraph(); break;
697 case 3: ShowPerformanceHistoryGraph(); break;
698 case 4: ShowCompanyValueGraph(); break;
699 case 5: ShowCargoPaymentRates(); break;
700 /* functions for combined graphs/league button */
701 case 6: ShowCompanyLeagueTable(); break;
702 case 7: ShowPerformanceRatingDetail(); break;
703 }
704 return CBF_NONE;
705 }
706
707 /* --- League button menu --- */
708
709 static CallBackFunction ToolbarLeagueClick(Window *w)
710 {
711 PopupMainToolbMenu(w, WID_TN_LEAGUE, STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE, _networking ? 2 : 3);
712 return CBF_NONE;
713 }
714
721 static CallBackFunction MenuClickLeague(int index)
722 {
723 switch (index) {
724 case 0: ShowCompanyLeagueTable(); break;
725 case 1: ShowPerformanceRatingDetail(); break;
726 case 2: ShowHighscoreTable(); break;
727 }
728 return CBF_NONE;
729 }
730
731 /* --- Industries button menu --- */
732
733 static CallBackFunction ToolbarIndustryClick(Window *w)
734 {
735 /* Disable build-industry menu if we are a spectator */
736 PopupMainToolbMenu(w, WID_TN_INDUSTRIES, STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, (_local_company == COMPANY_SPECTATOR) ? 2 : 3);
737 return CBF_NONE;
738 }
739
746 static CallBackFunction MenuClickIndustry(int index)
747 {
748 switch (index) {
749 case 0: ShowIndustryDirectory(); break;
750 case 1: ShowIndustryCargoesWindow(); break;
751 case 2: ShowBuildIndustryWindow(); break;
752 }
753 return CBF_NONE;
754 }
755
756 /* --- Trains button menu + 1 helper function for all vehicles. --- */
757
758 static void ToolbarVehicleClick(Window *w, VehicleType veh)
759 {
760 int dis = ~0;
761
762 for (const Vehicle *v : Vehicle::Iterate()) {
763 if (v->type == veh && v->IsPrimaryVehicle()) ClrBit(dis, v->owner);
764 }
765 PopupMainCompanyToolbMenu(w, WID_TN_VEHICLE_START + veh, dis);
766 }
767
768
769 static CallBackFunction ToolbarTrainClick(Window *w)
770 {
771 ToolbarVehicleClick(w, VEH_TRAIN);
772 return CBF_NONE;
773 }
774
781 static CallBackFunction MenuClickShowTrains(int index)
782 {
783 ShowVehicleListWindow((CompanyID)index, VEH_TRAIN);
784 return CBF_NONE;
785 }
786
787 /* --- Road vehicle button menu --- */
788
789 static CallBackFunction ToolbarRoadClick(Window *w)
790 {
791 ToolbarVehicleClick(w, VEH_ROAD);
792 return CBF_NONE;
793 }
794
801 static CallBackFunction MenuClickShowRoad(int index)
802 {
803 ShowVehicleListWindow((CompanyID)index, VEH_ROAD);
804 return CBF_NONE;
805 }
806
807 /* --- Ship button menu --- */
808
809 static CallBackFunction ToolbarShipClick(Window *w)
810 {
811 ToolbarVehicleClick(w, VEH_SHIP);
812 return CBF_NONE;
813 }
814
821 static CallBackFunction MenuClickShowShips(int index)
822 {
823 ShowVehicleListWindow((CompanyID)index, VEH_SHIP);
824 return CBF_NONE;
825 }
826
827 /* --- Aircraft button menu --- */
828
829 static CallBackFunction ToolbarAirClick(Window *w)
830 {
831 ToolbarVehicleClick(w, VEH_AIRCRAFT);
832 return CBF_NONE;
833 }
834
841 static CallBackFunction MenuClickShowAir(int index)
842 {
843 ShowVehicleListWindow((CompanyID)index, VEH_AIRCRAFT);
844 return CBF_NONE;
845 }
846
847 /* --- Zoom in button --- */
848
849 static CallBackFunction ToolbarZoomInClick(Window *w)
850 {
851 if (DoZoomInOutWindow(ZOOM_IN, FindWindowById(WC_MAIN_WINDOW, 0))) {
852 w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)WID_TE_ZOOM_IN : (byte)WID_TN_ZOOM_IN);
853 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
854 }
855 return CBF_NONE;
856 }
857
858 /* --- Zoom out button --- */
859
860 static CallBackFunction ToolbarZoomOutClick(Window *w)
861 {
862 if (DoZoomInOutWindow(ZOOM_OUT, FindWindowById(WC_MAIN_WINDOW, 0))) {
863 w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)WID_TE_ZOOM_OUT : (byte)WID_TN_ZOOM_OUT);
864 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
865 }
866 return CBF_NONE;
867 }
868
869 /* --- Rail button menu --- */
870
871 static CallBackFunction ToolbarBuildRailClick(Window *w)
872 {
873 ShowDropDownList(w, GetRailTypeDropDownList(), _last_built_railtype, WID_TN_RAILS, 140, true, true);
874 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
875 return CBF_NONE;
876 }
877
884 static CallBackFunction MenuClickBuildRail(int index)
885 {
886 _last_built_railtype = (RailType)index;
887 ShowBuildRailToolbar(_last_built_railtype);
888 return CBF_NONE;
889 }
890
891 /* --- Road button menu --- */
892
893 static CallBackFunction ToolbarBuildRoadClick(Window *w)
894 {
895 ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TN_ROADS, 140, true, true);
896 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
897 return CBF_NONE;
898 }
899
906 static CallBackFunction MenuClickBuildRoad(int index)
907 {
908 _last_built_roadtype = (RoadType)index;
909 ShowBuildRoadToolbar(_last_built_roadtype);
910 return CBF_NONE;
911 }
912
913 /* --- Tram button menu --- */
914
915 static CallBackFunction ToolbarBuildTramClick(Window *w)
916 {
917 ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TN_TRAMS, 140, true, true);
918 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
919 return CBF_NONE;
920 }
921
928 static CallBackFunction MenuClickBuildTram(int index)
929 {
930 _last_built_tramtype = (RoadType)index;
931 ShowBuildRoadToolbar(_last_built_tramtype);
932 return CBF_NONE;
933 }
934
935 /* --- Water button menu --- */
936
937 static CallBackFunction ToolbarBuildWaterClick(Window *w)
938 {
939 DropDownList list;
940 list.emplace_back(new DropDownListIconItem(SPR_IMG_BUILD_CANAL, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, 0, false));
941 ShowDropDownList(w, std::move(list), 0, WID_TN_WATER, 140, true, true);
942 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
943 return CBF_NONE;
944 }
945
952 static CallBackFunction MenuClickBuildWater(int index)
953 {
954 ShowBuildDocksToolbar();
955 return CBF_NONE;
956 }
957
958 /* --- Airport button menu --- */
959
960 static CallBackFunction ToolbarBuildAirClick(Window *w)
961 {
962 DropDownList list;
963 list.emplace_back(new DropDownListIconItem(SPR_IMG_AIRPORT, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, 0, false));
964 ShowDropDownList(w, std::move(list), 0, WID_TN_AIR, 140, true, true);
965 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
966 return CBF_NONE;
967 }
968
975 static CallBackFunction MenuClickBuildAir(int index)
976 {
977 ShowBuildAirToolbar();
978 return CBF_NONE;
979 }
980
981 /* --- Forest button menu --- */
982
983 static CallBackFunction ToolbarForestClick(Window *w)
984 {
985 DropDownList list;
986 list.emplace_back(new DropDownListIconItem(SPR_IMG_LANDSCAPING, PAL_NONE, STR_LANDSCAPING_MENU_LANDSCAPING, 0, false));
987 list.emplace_back(new DropDownListIconItem(SPR_IMG_PLANTTREES, PAL_NONE, STR_LANDSCAPING_MENU_PLANT_TREES, 1, false));
988 list.emplace_back(new DropDownListIconItem(SPR_IMG_SIGN, PAL_NONE, STR_LANDSCAPING_MENU_PLACE_SIGN, 2, false));
989 ShowDropDownList(w, std::move(list), 0, WID_TN_LANDSCAPE, 100, true, true);
990 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
991 return CBF_NONE;
992 }
993
1000 static CallBackFunction MenuClickForest(int index)
1001 {
1002 switch (index) {
1003 case 0: ShowTerraformToolbar(); break;
1004 case 1: ShowBuildTreesToolbar(); break;
1005 case 2: return SelectSignTool();
1006 }
1007 return CBF_NONE;
1008 }
1009
1010 /* --- Music button menu --- */
1011
1012 static CallBackFunction ToolbarMusicClick(Window *w)
1013 {
1014 PopupMainToolbMenu(w, _game_mode == GM_EDITOR ? (int)WID_TE_MUSIC_SOUND : (int)WID_TN_MUSIC_SOUND, STR_TOOLBAR_SOUND_MUSIC, 1);
1015 return CBF_NONE;
1016 }
1017
1024 static CallBackFunction MenuClickMusicWindow(int index)
1025 {
1026 ShowMusicWindow();
1027 return CBF_NONE;
1028 }
1029
1030 /* --- Newspaper button menu --- */
1031
1032 static CallBackFunction ToolbarNewspaperClick(Window *w)
1033 {
1034 PopupMainToolbMenu(w, WID_TN_MESSAGES, STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT, 3);
1035 return CBF_NONE;
1036 }
1037
1044 static CallBackFunction MenuClickNewspaper(int index)
1045 {
1046 switch (index) {
1047 case 0: ShowLastNewsMessage(); break;
1048 case 1: ShowMessageHistory(); break;
1049 case 2: DeleteAllMessages(); break;
1050 }
1051 return CBF_NONE;
1052 }
1053
1054 /* --- Help button menu --- */
1055
1056 static CallBackFunction PlaceLandBlockInfo()
1057 {
1058 if (_last_started_action == CBF_PLACE_LANDINFO) {
1059 ResetObjectToPlace();
1060 return CBF_NONE;
1061 } else {
1062 SetObjectToPlace(SPR_CURSOR_QUERY, PAL_NONE, HT_RECT, WC_MAIN_TOOLBAR, 0);
1063 return CBF_PLACE_LANDINFO;
1064 }
1065 }
1066
1067 static CallBackFunction ToolbarHelpClick(Window *w)
1068 {
1069 PopupMainToolbMenu(w, _game_mode == GM_EDITOR ? (int)WID_TE_HELP : (int)WID_TN_HELP, STR_ABOUT_MENU_LAND_BLOCK_INFO, _settings_client.gui.newgrf_developer_tools ? 10 : 7);
1070 return CBF_NONE;
1071 }
1072
1080 void ToggleBoundingBoxes()
1081 {
1082 extern bool _draw_bounding_boxes;
1083 /* Always allow to toggle them off */
1084 if (_settings_client.gui.newgrf_developer_tools || _draw_bounding_boxes) {
1085 _draw_bounding_boxes = !_draw_bounding_boxes;
1086 MarkWholeScreenDirty();
1087 }
1088 }
1089
1097 void ToggleDirtyBlocks()
1098 {
1099 extern bool _draw_dirty_blocks;
1100 /* Always allow to toggle them off */
1101 if (_settings_client.gui.newgrf_developer_tools || _draw_dirty_blocks) {
1102 _draw_dirty_blocks = !_draw_dirty_blocks;
1103 MarkWholeScreenDirty();
1104 }
1105 }
1106
1111 void SetStartingYear(Year year)
1112 {
1113 _settings_game.game_creation.starting_year = Clamp(year, MIN_YEAR, MAX_YEAR);
1114 Date new_date = ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1);
1115 /* If you open a savegame as scenario there may already be link graphs.*/
1116 LinkGraphSchedule::instance.ShiftDates(new_date - _date);
1117 SetDate(new_date, 0);
1118 }
1119
1125 static CallBackFunction MenuClickHelp(int index)
1126 {
1127 switch (index) {
1128 case 0: return PlaceLandBlockInfo();
1129 case 2: IConsoleSwitch(); break;
1130 case 3: ShowAIDebugWindow(); break;
1131 case 4: ShowScreenshotWindow(); break;
1132 case 5: ShowFramerateWindow(); break;
1133 case 6: ShowAboutWindow(); break;
1134 case 7: ShowSpriteAlignerWindow(); break;
1135 case 8: ToggleBoundingBoxes(); break;
1136 case 9: ToggleDirtyBlocks(); break;
1137 }
1138 return CBF_NONE;
1139 }
1140
1141 /* --- Switch toolbar button --- */
1142
1143 static CallBackFunction ToolbarSwitchClick(Window *w)
1144 {
1145 if (_toolbar_mode != TB_LOWER) {
1146 _toolbar_mode = TB_LOWER;
1147 } else {
1148 _toolbar_mode = TB_UPPER;
1149 }
1150
1151 w->ReInit();
1152 w->SetWidgetLoweredState(_game_mode == GM_EDITOR ? (uint)WID_TE_SWITCH_BAR : (uint)WID_TN_SWITCH_BAR, _toolbar_mode == TB_LOWER);
1153 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1154 return CBF_NONE;
1155 }
1156
1157 /* --- Scenario editor specific handlers. */
1158
1162 static CallBackFunction ToolbarScenDatePanel(Window *w)
1163 {
1164 SetDParam(0, _settings_game.game_creation.starting_year);
1165 ShowQueryString(STR_JUST_INT, STR_MAPGEN_START_DATE_QUERY_CAPT, 8, w, CS_NUMERAL, QSF_ENABLE_DEFAULT);
1166 _left_button_clicked = false;
1167 return CBF_NONE;
1168 }
1169
1170 static CallBackFunction ToolbarScenDateBackward(Window *w)
1171 {
1172 /* don't allow too fast scrolling */
1173 if (!(w->flags & WF_TIMEOUT) || w->timeout_timer <= 1) {
1174 w->HandleButtonClick(WID_TE_DATE_BACKWARD);
1175 w->SetDirty();
1176
1177 SetStartingYear(_settings_game.game_creation.starting_year - 1);
1178 }
1179 _left_button_clicked = false;
1180 return CBF_NONE;
1181 }
1182
1183 static CallBackFunction ToolbarScenDateForward(Window *w)
1184 {
1185 /* don't allow too fast scrolling */
1186 if (!(w->flags & WF_TIMEOUT) || w->timeout_timer <= 1) {
1187 w->HandleButtonClick(WID_TE_DATE_FORWARD);
1188 w->SetDirty();
1189
1190 SetStartingYear(_settings_game.game_creation.starting_year + 1);
1191 }
1192 _left_button_clicked = false;
1193 return CBF_NONE;
1194 }
1195
1196 static CallBackFunction ToolbarScenGenLand(Window *w)
1197 {
1198 w->HandleButtonClick(WID_TE_LAND_GENERATE);
1199 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1200
1201 ShowEditorTerraformToolbar();
1202 return CBF_NONE;
1203 }
1204
1205
1206 static CallBackFunction ToolbarScenGenTown(Window *w)
1207 {
1208 w->HandleButtonClick(WID_TE_TOWN_GENERATE);
1209 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1210 ShowFoundTownWindow();
1211 return CBF_NONE;
1212 }
1213
1214 static CallBackFunction ToolbarScenGenIndustry(Window *w)
1215 {
1216 w->HandleButtonClick(WID_TE_INDUSTRY);
1217 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1218 ShowBuildIndustryWindow();
1219 return CBF_NONE;
1220 }
1221
1222 static CallBackFunction ToolbarScenBuildRoadClick(Window *w)
1223 {
1224 ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TE_ROADS, 140, true, true);
1225 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1226 return CBF_NONE;
1227 }
1228
1235 static CallBackFunction ToolbarScenBuildRoad(int index)
1236 {
1237 _last_built_roadtype = (RoadType)index;
1238 ShowBuildRoadScenToolbar(_last_built_roadtype);
1239 return CBF_NONE;
1240 }
1241
1242 static CallBackFunction ToolbarScenBuildTramClick(Window *w)
1243 {
1244 ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TE_TRAMS, 140, true, true);
1245 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1246 return CBF_NONE;
1247 }
1248
1255 static CallBackFunction ToolbarScenBuildTram(int index)
1256 {
1257 _last_built_tramtype = (RoadType)index;
1258 ShowBuildRoadScenToolbar(_last_built_tramtype);
1259 return CBF_NONE;
1260 }
1261
1262 static CallBackFunction ToolbarScenBuildDocks(Window *w)
1263 {
1264 w->HandleButtonClick(WID_TE_WATER);
1265 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1266 ShowBuildDocksScenToolbar();
1267 return CBF_NONE;
1268 }
1269
1270 static CallBackFunction ToolbarScenPlantTrees(Window *w)
1271 {
1272 w->HandleButtonClick(WID_TE_TREES);
1273 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1274 ShowBuildTreesToolbar();
1275 return CBF_NONE;
1276 }
1277
1278 static CallBackFunction ToolbarScenPlaceSign(Window *w)
1279 {
1280 w->HandleButtonClick(WID_TE_SIGNS);
1281 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1282 return SelectSignTool();
1283 }
1284
1285 static CallBackFunction ToolbarBtn_NULL(Window *w)
1286 {
1287 return CBF_NONE;
1288 }
1289
1290 typedef CallBackFunction MenuClickedProc(int index);
1291
1292 static MenuClickedProc * const _menu_clicked_procs[] = {
1293 nullptr, // 0
1294 nullptr, // 1
1295 MenuClickSettings, // 2
1296 MenuClickSaveLoad, // 3
1297 MenuClickMap, // 4
1298 MenuClickTown, // 5
1299 MenuClickSubsidies, // 6
1300 MenuClickStations, // 7
1301 MenuClickFinances, // 8
1302 MenuClickCompany, // 9
1303 MenuClickStory, // 10
1304 MenuClickGoal, // 11
1305 MenuClickGraphs, // 12
1306 MenuClickLeague, // 13
1307 MenuClickIndustry, // 14
1308 MenuClickShowTrains, // 15
1309 MenuClickShowRoad, // 16
1310 MenuClickShowShips, // 17
1311 MenuClickShowAir, // 18
1312 MenuClickMap, // 19
1313 nullptr, // 20
1314 MenuClickBuildRail, // 21
1315 MenuClickBuildRoad, // 22
1316 MenuClickBuildTram, // 23
1317 MenuClickBuildWater, // 24
1318 MenuClickBuildAir, // 25
1319 MenuClickForest, // 26
1320 MenuClickMusicWindow, // 27
1321 MenuClickNewspaper, // 28
1322 MenuClickHelp, // 29
1323 };
1324
1326 class NWidgetToolbarContainer : public NWidgetContainer {
1327 bool visible[WID_TN_END];
1328 protected:
1329 uint spacers;
1330
1331 public:
1332 NWidgetToolbarContainer() : NWidgetContainer(NWID_HORIZONTAL)
1333 {
1334 }
1335
1341 bool IsButton(WidgetType type) const
1342 {
1343 return type == WWT_IMGBTN || type == WWT_IMGBTN_2 || type == WWT_PUSHIMGBTN;
1344 }
1345
1346 void SetupSmallestSize(Window *w, bool init_array) override
1347 {
1348 this->smallest_x = 0; // Biggest child
1349 this->smallest_y = 0; // Biggest child
1350 this->fill_x = 1;
1351 this->fill_y = 0;
1352 this->resize_x = 1; // We only resize in this direction
1353 this->resize_y = 0; // We never resize in this direction
1354 this->spacers = 0;
1355
1356 uint nbuttons = 0;
1357 /* First initialise some variables... */
1358 for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1359 child_wid->SetupSmallestSize(w, init_array);
1360 this->smallest_y = std::max(this->smallest_y, child_wid->smallest_y + child_wid->padding_top + child_wid->padding_bottom);
1361 if (this->IsButton(child_wid->type)) {
1362 nbuttons++;
1363 this->smallest_x = std::max(this->smallest_x, child_wid->smallest_x + child_wid->padding_left + child_wid->padding_right);
1364 } else if (child_wid->type == NWID_SPACER) {
1365 this->spacers++;
1366 }
1367 }
1368
1369 /* ... then in a second pass make sure the 'current' heights are set. Won't change ever. */
1370 for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1371 child_wid->current_y = this->smallest_y;
1372 if (!this->IsButton(child_wid->type)) {
1373 child_wid->current_x = child_wid->smallest_x;
1374 }
1375 }
1376 _toolbar_width = nbuttons * this->smallest_x;
1377 }
1378
1379 void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override
1380 {
1381 assert(given_width >= this->smallest_x && given_height >= this->smallest_y);
1382
1383 this->pos_x = x;
1384 this->pos_y = y;
1385 this->current_x = given_width;
1386 this->current_y = given_height;
1387
1388 /* Figure out what are the visible buttons */
1389 memset(this->visible, 0, sizeof(this->visible));
1390 uint arrangable_count, button_count, spacer_count;
1391 const byte *arrangement = GetButtonArrangement(given_width, arrangable_count, button_count, spacer_count);
1392 for (uint i = 0; i < arrangable_count; i++) {
1393 this->visible[arrangement[i]] = true;
1394 }
1395
1396 /* Create us ourselves a quick lookup table */
1397 NWidgetBase *widgets[WID_TN_END];
1398 for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1399 if (child_wid->type == NWID_SPACER) continue;
1400 widgets[((NWidgetCore*)child_wid)->index] = child_wid;
1401 }
1402
1403 /* Now assign the widgets to their rightful place */
1404 uint position = 0; // Place to put next child relative to origin of the container.
1405 uint spacer_space = std::max(0, (int)given_width - (int)(button_count * this->smallest_x)); // Remaining spacing for 'spacer' widgets
1406 uint button_space = given_width - spacer_space; // Remaining spacing for the buttons
1407 uint spacer_i = 0;
1408 uint button_i = 0;
1409
1410 /* Index into the arrangement indices. The macro lastof cannot be used here! */
1411 const byte *cur_wid = rtl ? &arrangement[arrangable_count - 1] : arrangement;
1412 for (uint i = 0; i < arrangable_count; i++) {
1413 NWidgetBase *child_wid = widgets[*cur_wid];
1414 /* If we have to give space to the spacers, do that */
1415 if (spacer_space != 0) {
1416 NWidgetBase *possible_spacer = rtl ? child_wid->next : child_wid->prev;
1417 if (possible_spacer != nullptr && possible_spacer->type == NWID_SPACER) {
1418 uint add = spacer_space / (spacer_count - spacer_i);
1419 position += add;
1420 spacer_space -= add;
1421 spacer_i++;
1422 }
1423 }
1424
1425 /* Buttons can be scaled, the others not. */
1426 if (this->IsButton(child_wid->type)) {
1427 child_wid->current_x = button_space / (button_count - button_i);
1428 button_space -= child_wid->current_x;
1429 button_i++;
1430 }
1431 child_wid->AssignSizePosition(sizing, x + position, y, child_wid->current_x, this->current_y, rtl);
1432 position += child_wid->current_x;
1433
1434 if (rtl) {
1435 cur_wid--;
1436 } else {
1437 cur_wid++;
1438 }
1439 }
1440 }
1441
1442 void Draw(const Window *w) override
1443 {
1444 /* Draw brown-red toolbar bg. */
1445 GfxFillRect(this->pos_x, this->pos_y, this->pos_x + this->current_x - 1, this->pos_y + this->current_y - 1, PC_VERY_DARK_RED);
1446 GfxFillRect(this->pos_x, this->pos_y, this->pos_x + this->current_x - 1, this->pos_y + this->current_y - 1, PC_DARK_RED, FILLRECT_CHECKER);
1447
1448 bool rtl = _current_text_dir == TD_RTL;
1449 for (NWidgetBase *child_wid = rtl ? this->tail : this->head; child_wid != nullptr; child_wid = rtl ? child_wid->prev : child_wid->next) {
1450 if (child_wid->type == NWID_SPACER) continue;
1451 if (!this->visible[((NWidgetCore*)child_wid)->index]) continue;
1452
1453 child_wid->Draw(w);
1454 }
1455 }
1456
1457 NWidgetCore *GetWidgetFromPos(int x, int y) override
1458 {
1459 if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr;
1460
1461 for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1462 if (child_wid->type == NWID_SPACER) continue;
1463 if (!this->visible[((NWidgetCore*)child_wid)->index]) continue;
1464
1465 NWidgetCore *nwid = child_wid->GetWidgetFromPos(x, y);
1466 if (nwid != nullptr) return nwid;
1467 }
1468 return nullptr;
1469 }
1470
1479 virtual const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const = 0;
1480 };
1481
1483 class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
1484 const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
1485 {
1486 static const uint SMALLEST_ARRANGEMENT = 14;
1487 static const uint BIGGEST_ARRANGEMENT = 20;
1488
1489 /* The number of buttons of each row of the toolbar should match the number of items which we want to be visible.
1490 * The total number of buttons should be equal to arrangable_count * 2.
1491 * No bad things happen, but we could see strange behaviours if we have buttons < (arrangable_count * 2) like a
1492 * pause button appearing on the right of the lower toolbar and weird resizing of the widgets even if there is
1493 * enough space.
1494 */
1495 static const byte arrange14[] = {
1496 WID_TN_PAUSE,
1497 WID_TN_FAST_FORWARD,
1498 WID_TN_TRAINS,
1499 WID_TN_ROADVEHS,
1500 WID_TN_SHIPS,
1501 WID_TN_AIRCRAFT,
1502 WID_TN_ZOOM_IN,
1503 WID_TN_ZOOM_OUT,
1504 WID_TN_RAILS,
1505 WID_TN_ROADS,
1506 WID_TN_WATER,
1507 WID_TN_AIR,
1508 WID_TN_LANDSCAPE,
1509 WID_TN_SWITCH_BAR,
1510 // lower toolbar
1511 WID_TN_SETTINGS,
1512 WID_TN_SAVE,
1513 WID_TN_SMALL_MAP,
1514 WID_TN_TOWNS,
1515 WID_TN_SUBSIDIES,
1516 WID_TN_STATIONS,
1517 WID_TN_FINANCES,
1518 WID_TN_COMPANIES,
1519 WID_TN_GRAPHS,
1520 WID_TN_INDUSTRIES,
1521 WID_TN_MUSIC_SOUND,
1522 WID_TN_MESSAGES,
1523 WID_TN_HELP,
1524 WID_TN_SWITCH_BAR,
1525 };
1526 static const byte arrange15[] = {
1527 WID_TN_PAUSE,
1528 WID_TN_FAST_FORWARD,
1529 WID_TN_SMALL_MAP,
1530 WID_TN_TRAINS,
1531 WID_TN_ROADVEHS,
1532 WID_TN_SHIPS,
1533 WID_TN_AIRCRAFT,
1534 WID_TN_RAILS,
1535 WID_TN_ROADS,
1536 WID_TN_WATER,
1537 WID_TN_AIR,
1538 WID_TN_LANDSCAPE,
1539 WID_TN_ZOOM_IN,
1540 WID_TN_ZOOM_OUT,
1541 WID_TN_SWITCH_BAR,
1542 // lower toolbar
1543 WID_TN_PAUSE,
1544 WID_TN_SETTINGS,
1545 WID_TN_SMALL_MAP,
1546 WID_TN_SAVE,
1547 WID_TN_TOWNS,
1548 WID_TN_SUBSIDIES,
1549 WID_TN_STATIONS,
1550 WID_TN_FINANCES,
1551 WID_TN_COMPANIES,
1552 WID_TN_GRAPHS,
1553 WID_TN_INDUSTRIES,
1554 WID_TN_MUSIC_SOUND,
1555 WID_TN_MESSAGES,
1556 WID_TN_HELP,
1557 WID_TN_SWITCH_BAR,
1558 };
1559 static const byte arrange16[] = {
1560 WID_TN_PAUSE,
1561 WID_TN_FAST_FORWARD,
1562 WID_TN_SETTINGS,
1563 WID_TN_SMALL_MAP,
1564 WID_TN_TRAINS,
1565 WID_TN_ROADVEHS,
1566 WID_TN_SHIPS,
1567 WID_TN_AIRCRAFT,
1568 WID_TN_RAILS,
1569 WID_TN_ROADS,
1570 WID_TN_WATER,
1571 WID_TN_AIR,
1572 WID_TN_LANDSCAPE,
1573 WID_TN_ZOOM_IN,
1574 WID_TN_ZOOM_OUT,
1575 WID_TN_SWITCH_BAR,
1576 // lower toolbar
1577 WID_TN_PAUSE,
1578 WID_TN_FAST_FORWARD,
1579 WID_TN_SAVE,
1580 WID_TN_TOWNS,
1581 WID_TN_SUBSIDIES,
1582 WID_TN_STATIONS,
1583 WID_TN_FINANCES,
1584 WID_TN_COMPANIES,
1585 WID_TN_GRAPHS,
1586 WID_TN_INDUSTRIES,
1587 WID_TN_MUSIC_SOUND,
1588 WID_TN_MESSAGES,
1589 WID_TN_HELP,
1590 WID_TN_ZOOM_IN,
1591 WID_TN_ZOOM_OUT,
1592 WID_TN_SWITCH_BAR,
1593 };
1594 static const byte arrange17[] = {
1595 WID_TN_PAUSE,
1596 WID_TN_FAST_FORWARD,
1597 WID_TN_SETTINGS,
1598 WID_TN_SMALL_MAP,
1599 WID_TN_SUBSIDIES,
1600 WID_TN_TRAINS,
1601 WID_TN_ROADVEHS,
1602 WID_TN_SHIPS,
1603 WID_TN_AIRCRAFT,
1604 WID_TN_RAILS,
1605 WID_TN_ROADS,
1606 WID_TN_WATER,
1607 WID_TN_AIR,
1608 WID_TN_LANDSCAPE,
1609 WID_TN_ZOOM_IN,
1610 WID_TN_ZOOM_OUT,
1611 WID_TN_SWITCH_BAR,
1612 // lower toolbar
1613 WID_TN_PAUSE,
1614 WID_TN_FAST_FORWARD,
1615 WID_TN_SAVE,
1616 WID_TN_SMALL_MAP,
1617 WID_TN_SUBSIDIES,
1618 WID_TN_TOWNS,
1619 WID_TN_STATIONS,
1620 WID_TN_FINANCES,
1621 WID_TN_COMPANIES,
1622 WID_TN_GRAPHS,
1623 WID_TN_INDUSTRIES,
1624 WID_TN_MUSIC_SOUND,
1625 WID_TN_MESSAGES,
1626 WID_TN_HELP,
1627 WID_TN_ZOOM_IN,
1628 WID_TN_ZOOM_OUT,
1629 WID_TN_SWITCH_BAR,
1630 };
1631 static const byte arrange18[] = {
1632 WID_TN_PAUSE,
1633 WID_TN_FAST_FORWARD,
1634 WID_TN_SETTINGS,
1635 WID_TN_SMALL_MAP,
1636 WID_TN_TOWNS,
1637 WID_TN_SUBSIDIES,
1638 WID_TN_STATIONS,
1639 WID_TN_FINANCES,
1640 WID_TN_COMPANIES,
1641 WID_TN_INDUSTRIES,
1642 WID_TN_RAILS,
1643 WID_TN_ROADS,
1644 WID_TN_WATER,
1645 WID_TN_AIR,
1646 WID_TN_LANDSCAPE,
1647 WID_TN_ZOOM_IN,
1648 WID_TN_ZOOM_OUT,
1649 WID_TN_SWITCH_BAR,
1650 // lower toolbar
1651 WID_TN_PAUSE,
1652 WID_TN_FAST_FORWARD,
1653 WID_TN_SAVE,
1654 WID_TN_SMALL_MAP,
1655 WID_TN_TOWNS,
1656 WID_TN_SUBSIDIES,
1657 WID_TN_STATIONS,
1658 WID_TN_GRAPHS,
1659 WID_TN_TRAINS,
1660 WID_TN_ROADVEHS,
1661 WID_TN_SHIPS,
1662 WID_TN_AIRCRAFT,
1663 WID_TN_MUSIC_SOUND,
1664 WID_TN_MESSAGES,
1665 WID_TN_HELP,
1666 WID_TN_ZOOM_IN,
1667 WID_TN_ZOOM_OUT,
1668 WID_TN_SWITCH_BAR,
1669 };
1670 static const byte arrange19[] = {
1671 WID_TN_PAUSE,
1672 WID_TN_FAST_FORWARD,
1673 WID_TN_SETTINGS,
1674 WID_TN_SMALL_MAP,
1675 WID_TN_TOWNS,
1676 WID_TN_SUBSIDIES,
1677 WID_TN_TRAINS,
1678 WID_TN_ROADVEHS,
1679 WID_TN_SHIPS,
1680 WID_TN_AIRCRAFT,
1681 WID_TN_RAILS,
1682 WID_TN_ROADS,
1683 WID_TN_WATER,
1684 WID_TN_AIR,
1685 WID_TN_LANDSCAPE,
1686 WID_TN_MUSIC_SOUND,
1687 WID_TN_ZOOM_IN,
1688 WID_TN_ZOOM_OUT,
1689 WID_TN_SWITCH_BAR,
1690 // lower toolbar
1691 WID_TN_PAUSE,
1692 WID_TN_FAST_FORWARD,
1693 WID_TN_SAVE,
1694 WID_TN_SMALL_MAP,
1695 WID_TN_STATIONS,
1696 WID_TN_FINANCES,
1697 WID_TN_COMPANIES,
1698 WID_TN_GRAPHS,
1699 WID_TN_INDUSTRIES,
1700 WID_TN_MESSAGES,
1701 WID_TN_RAILS,
1702 WID_TN_ROADS,
1703 WID_TN_WATER,
1704 WID_TN_AIR,
1705 WID_TN_LANDSCAPE,
1706 WID_TN_HELP,
1707 WID_TN_ZOOM_IN,
1708 WID_TN_ZOOM_OUT,
1709 WID_TN_SWITCH_BAR,
1710 };
1711 static const byte arrange20[] = {
1712 WID_TN_PAUSE,
1713 WID_TN_FAST_FORWARD,
1714 WID_TN_SETTINGS,
1715 WID_TN_SMALL_MAP,
1716 WID_TN_TOWNS,
1717 WID_TN_SUBSIDIES,
1718 WID_TN_TRAINS,
1719 WID_TN_ROADVEHS,
1720 WID_TN_SHIPS,
1721 WID_TN_AIRCRAFT,
1722 WID_TN_RAILS,
1723 WID_TN_ROADS,
1724 WID_TN_WATER,
1725 WID_TN_AIR,
1726 WID_TN_LANDSCAPE,
1727 WID_TN_MUSIC_SOUND,
1728 WID_TN_GOAL,
1729 WID_TN_ZOOM_IN,
1730 WID_TN_ZOOM_OUT,
1731 WID_TN_SWITCH_BAR,
1732 // lower toolbar
1733 WID_TN_PAUSE,
1734 WID_TN_FAST_FORWARD,
1735 WID_TN_SAVE,
1736 WID_TN_SMALL_MAP,
1737 WID_TN_STATIONS,
1738 WID_TN_FINANCES,
1739 WID_TN_COMPANIES,
1740 WID_TN_GRAPHS,
1741 WID_TN_INDUSTRIES,
1742 WID_TN_MESSAGES,
1743 WID_TN_RAILS,
1744 WID_TN_ROADS,
1745 WID_TN_WATER,
1746 WID_TN_AIR,
1747 WID_TN_LANDSCAPE,
1748 WID_TN_STORY,
1749 WID_TN_HELP,
1750 WID_TN_ZOOM_IN,
1751 WID_TN_ZOOM_OUT,
1752 WID_TN_SWITCH_BAR,
1753 };
1754 static const byte arrange_all[] = {
1755 WID_TN_PAUSE,
1756 WID_TN_FAST_FORWARD,
1757 WID_TN_SETTINGS,
1758 WID_TN_SAVE,
1759 WID_TN_SMALL_MAP,
1760 WID_TN_TOWNS,
1761 WID_TN_SUBSIDIES,
1762 WID_TN_STATIONS,
1763 WID_TN_FINANCES,
1764 WID_TN_COMPANIES,
1765 WID_TN_STORY,
1766 WID_TN_GOAL,
1767 WID_TN_GRAPHS,
1768 WID_TN_LEAGUE,
1769 WID_TN_INDUSTRIES,
1770 WID_TN_TRAINS,
1771 WID_TN_ROADVEHS,
1772 WID_TN_SHIPS,
1773 WID_TN_AIRCRAFT,
1774 WID_TN_ZOOM_IN,
1775 WID_TN_ZOOM_OUT,
1776 WID_TN_RAILS,
1777 WID_TN_ROADS,
1778 WID_TN_TRAMS,
1779 WID_TN_WATER,
1780 WID_TN_AIR,
1781 WID_TN_LANDSCAPE,
1782 WID_TN_MUSIC_SOUND,
1783 WID_TN_MESSAGES,
1784 WID_TN_HELP
1785 };
1786
1787 /* If at least BIGGEST_ARRANGEMENT fit, just spread all the buttons nicely */
1788 uint full_buttons = std::max(CeilDiv(width, this->smallest_x), SMALLEST_ARRANGEMENT);
1789 if (full_buttons > BIGGEST_ARRANGEMENT) {
1790 button_count = arrangable_count = lengthof(arrange_all);
1791 spacer_count = this->spacers;
1792 return arrange_all;
1793 }
1794
1795 /* Introduce the split toolbar */
1796 static const byte * const arrangements[] = { arrange14, arrange15, arrange16, arrange17, arrange18, arrange19, arrange20 };
1797
1798 button_count = arrangable_count = full_buttons;
1799 spacer_count = this->spacers;
1800 return arrangements[full_buttons - SMALLEST_ARRANGEMENT] + ((_toolbar_mode == TB_LOWER) ? full_buttons : 0);
1801 }
1802 };
1803
1805 class NWidgetScenarioToolbarContainer : public NWidgetToolbarContainer {
1806 uint panel_widths[2];
1807
1808 void SetupSmallestSize(Window *w, bool init_array) override
1809 {
1810 this->NWidgetToolbarContainer::SetupSmallestSize(w, init_array);
1811
1812 /* Find the size of panel_widths */
1813 uint i = 0;
1814 for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1815 if (child_wid->type == NWID_SPACER || this->IsButton(child_wid->type)) continue;
1816
1817 assert(i < lengthof(this->panel_widths));
1818 this->panel_widths[i++] = child_wid->current_x;
1819 _toolbar_width += child_wid->current_x;
1820 }
1821 }
1822
1823 const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
1824 {
1825 static const byte arrange_all[] = {
1826 WID_TE_PAUSE,
1827 WID_TE_FAST_FORWARD,
1828 WID_TE_SETTINGS,
1829 WID_TE_SAVE,
1830 WID_TE_SPACER,
1831 WID_TE_DATE_PANEL,
1832 WID_TE_SMALL_MAP,
1833 WID_TE_ZOOM_IN,
1834 WID_TE_ZOOM_OUT,
1835 WID_TE_LAND_GENERATE,
1836 WID_TE_TOWN_GENERATE,
1837 WID_TE_INDUSTRY,
1838 WID_TE_ROADS,
1839 WID_TE_TRAMS,
1840 WID_TE_WATER,
1841 WID_TE_TREES,
1842 WID_TE_SIGNS,
1843 WID_TE_MUSIC_SOUND,
1844 WID_TE_HELP,
1845 };
1846 static const byte arrange_nopanel[] = {
1847 WID_TE_PAUSE,
1848 WID_TE_FAST_FORWARD,
1849 WID_TE_SETTINGS,
1850 WID_TE_SAVE,
1851 WID_TE_DATE_PANEL,
1852 WID_TE_SMALL_MAP,
1853 WID_TE_ZOOM_IN,
1854 WID_TE_ZOOM_OUT,
1855 WID_TE_LAND_GENERATE,
1856 WID_TE_TOWN_GENERATE,
1857 WID_TE_INDUSTRY,
1858 WID_TE_ROADS,
1859 WID_TE_TRAMS,
1860 WID_TE_WATER,
1861 WID_TE_TREES,
1862 WID_TE_SIGNS,
1863 WID_TE_MUSIC_SOUND,
1864 WID_TE_HELP,
1865 };
1866 static const byte arrange_switch[] = {
1867 WID_TE_DATE_PANEL,
1868 WID_TE_SMALL_MAP,
1869 WID_TE_LAND_GENERATE,
1870 WID_TE_TOWN_GENERATE,
1871 WID_TE_INDUSTRY,
1872 WID_TE_ROADS,
1873 WID_TE_TRAMS,
1874 WID_TE_WATER,
1875 WID_TE_TREES,
1876 WID_TE_SIGNS,
1877 WID_TE_SWITCH_BAR,
1878 // lower toolbar
1879 WID_TE_PAUSE,
1880 WID_TE_FAST_FORWARD,
1881 WID_TE_SETTINGS,
1882 WID_TE_SAVE,
1883 WID_TE_DATE_PANEL,
1884 WID_TE_SMALL_MAP,
1885 WID_TE_ZOOM_IN,
1886 WID_TE_ZOOM_OUT,
1887 WID_TE_MUSIC_SOUND,
1888 WID_TE_HELP,
1889 WID_TE_SWITCH_BAR,
1890 };
1891
1892 /* If we can place all buttons *and* the panels, show them. */
1893 uint min_full_width = (lengthof(arrange_all) - lengthof(this->panel_widths)) * this->smallest_x + this->panel_widths[0] + this->panel_widths[1];
1894 if (width >= min_full_width) {
1895 width -= this->panel_widths[0] + this->panel_widths[1];
1896 arrangable_count = lengthof(arrange_all);
1897 button_count = arrangable_count - 2;
1898 spacer_count = this->spacers;
1899 return arrange_all;
1900 }
1901
1902 /* 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 */
1903 uint min_small_width = (lengthof(arrange_switch) - lengthof(this->panel_widths)) * this->smallest_x / 2 + this->panel_widths[1];
1904 if (width > min_small_width) {
1905 width -= this->panel_widths[1];
1906 arrangable_count = lengthof(arrange_nopanel);
1907 button_count = arrangable_count - 1;
1908 spacer_count = this->spacers - 1;
1909 return arrange_nopanel;
1910 }
1911
1912 /* Split toolbar */
1913 width -= this->panel_widths[1];
1914 arrangable_count = lengthof(arrange_switch) / 2;
1915 button_count = arrangable_count - 1;
1916 spacer_count = 0;
1917 return arrange_switch + ((_toolbar_mode == TB_LOWER) ? arrangable_count : 0);
1918 }
1919 };
1920
1921 /* --- Toolbar handling for the 'normal' case */
1922
1923 typedef CallBackFunction ToolbarButtonProc(Window *w);
1924
1925 static ToolbarButtonProc * const _toolbar_button_procs[] = {
1926 ToolbarPauseClick,
1927 ToolbarFastForwardClick,
1928 ToolbarOptionsClick,
1929 ToolbarSaveClick,
1930 ToolbarMapClick,
1931 ToolbarTownClick,
1932 ToolbarSubsidiesClick,
1933 ToolbarStationsClick,
1934 ToolbarFinancesClick,
1935 ToolbarCompaniesClick,
1936 ToolbarStoryClick,
1937 ToolbarGoalClick,
1938 ToolbarGraphsClick,
1939 ToolbarLeagueClick,
1940 ToolbarIndustryClick,
1941 ToolbarTrainClick,
1942 ToolbarRoadClick,
1943 ToolbarShipClick,
1944 ToolbarAirClick,
1945 ToolbarZoomInClick,
1946 ToolbarZoomOutClick,
1947 ToolbarBuildRailClick,
1948 ToolbarBuildRoadClick,
1949 ToolbarBuildTramClick,
1950 ToolbarBuildWaterClick,
1951 ToolbarBuildAirClick,
1952 ToolbarForestClick,
1953 ToolbarMusicClick,
1954 ToolbarNewspaperClick,
1955 ToolbarHelpClick,
1956 ToolbarSwitchClick,
1957 };
1958
1959 enum MainToolbarHotkeys {
1960 MTHK_PAUSE,
1961 MTHK_FASTFORWARD,
1962 MTHK_SETTINGS,
1963 MTHK_SAVEGAME,
1964 MTHK_LOADGAME,
1965 MTHK_SMALLMAP,
1966 MTHK_TOWNDIRECTORY,
1967 MTHK_SUBSIDIES,
1968 MTHK_STATIONS,
1969 MTHK_FINANCES,
1970 MTHK_COMPANIES,
1971 MTHK_STORY,
1972 MTHK_GOAL,
1973 MTHK_GRAPHS,
1974 MTHK_LEAGUE,
1975 MTHK_INDUSTRIES,
1976 MTHK_TRAIN_LIST,
1977 MTHK_ROADVEH_LIST,
1978 MTHK_SHIP_LIST,
1979 MTHK_AIRCRAFT_LIST,
1980 MTHK_ZOOM_IN,
1981 MTHK_ZOOM_OUT,
1982 MTHK_BUILD_RAIL,
1983 MTHK_BUILD_ROAD,
1984 MTHK_BUILD_TRAM,
1985 MTHK_BUILD_DOCKS,
1986 MTHK_BUILD_AIRPORT,
1987 MTHK_BUILD_TREES,
1988 MTHK_MUSIC,
1989 MTHK_LANDINFO,
1990 MTHK_AI_DEBUG,
1991 MTHK_SMALL_SCREENSHOT,
1992 MTHK_ZOOMEDIN_SCREENSHOT,
1993 MTHK_DEFAULTZOOM_SCREENSHOT,
1994 MTHK_GIANT_SCREENSHOT,
1995 MTHK_CHEATS,
1996 MTHK_TERRAFORM,
1997 MTHK_EXTRA_VIEWPORT,
1998 MTHK_CLIENT_LIST,
1999 MTHK_SIGN_LIST,
2000 };
2001
2003 struct MainToolbarWindow : Window {
2004 GUITimer timer;
2005
2006 MainToolbarWindow(WindowDesc *desc) : Window(desc)
2007 {
2008 this->InitNested(0);
2009
2010 _last_started_action = CBF_NONE;
2011 CLRBITS(this->flags, WF_WHITE_BORDER);
2012 this->SetWidgetDisabledState(WID_TN_PAUSE, _networking && !_network_server); // if not server, disable pause button
2013 this->SetWidgetDisabledState(WID_TN_FAST_FORWARD, _networking); // if networking, disable fast-forward button
2014 PositionMainToolbar(this);
2015 DoZoomInOutWindow(ZOOM_NONE, this);
2016
2017 this->timer.SetInterval(MILLISECONDS_PER_TICK);
2018 }
2019
2020 void FindWindowPlacementAndResize(int def_width, int def_height) override
2021 {
2022 Window::FindWindowPlacementAndResize(_toolbar_width, def_height);
2023 }
2024
2025 void OnPaint() override
2026 {
2027 /* If spectator, disable all construction buttons
2028 * ie : Build road, rail, ships, airports and landscaping
2029 * Since enabled state is the default, just disable when needed */
2030 this->SetWidgetsDisabledState(_local_company == COMPANY_SPECTATOR, WID_TN_RAILS, WID_TN_ROADS, WID_TN_TRAMS, WID_TN_WATER, WID_TN_AIR, WID_TN_LANDSCAPE, WIDGET_LIST_END);
2031 /* disable company list drop downs, if there are no companies */
2032 this->SetWidgetsDisabledState(Company::GetNumItems() == 0, WID_TN_STATIONS, WID_TN_FINANCES, WID_TN_TRAINS, WID_TN_ROADVEHS, WID_TN_SHIPS, WID_TN_AIRCRAFT, WIDGET_LIST_END);
2033
2034 this->SetWidgetDisabledState(WID_TN_GOAL, Goal::GetNumItems() == 0);
2035 this->SetWidgetDisabledState(WID_TN_STORY, StoryPage::GetNumItems() == 0);
2036
2037 this->DrawWidgets();
2038 }
2039
2040 void OnClick(Point pt, int widget, int click_count) override
2041 {
2042 if (_game_mode != GM_MENU && !this->IsWidgetDisabled(widget)) _toolbar_button_procs[widget](this);
2043 }
2044
2045 void OnDropdownSelect(int widget, int index) override
2046 {
2047 CallBackFunction cbf = _menu_clicked_procs[widget](index);
2048 if (cbf != CBF_NONE) _last_started_action = cbf;
2049 }
2050
2051 EventState OnHotkey(int hotkey) override
2052 {
2053 CallBackFunction cbf = CBF_NONE;
2054 switch (hotkey) {
2055 case MTHK_PAUSE: ToolbarPauseClick(this); break;
2056 case MTHK_FASTFORWARD: ToolbarFastForwardClick(this); break;
2057 case MTHK_SETTINGS: ShowGameOptions(); break;
2058 case MTHK_SAVEGAME: MenuClickSaveLoad(); break;
2059 case MTHK_LOADGAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break;
2060 case MTHK_SMALLMAP: ShowSmallMap(); break;
2061 case MTHK_TOWNDIRECTORY: ShowTownDirectory(); break;
2062 case MTHK_SUBSIDIES: ShowSubsidiesList(); break;
2063 case MTHK_STATIONS: ShowCompanyStations(_local_company); break;
2064 case MTHK_FINANCES: ShowCompanyFinances(_local_company); break;
2065 case MTHK_COMPANIES: ShowCompany(_local_company); break;
2066 case MTHK_STORY: ShowStoryBook(_local_company); break;
2067 case MTHK_GOAL: ShowGoalsList(_local_company); break;
2068 case MTHK_GRAPHS: ShowOperatingProfitGraph(); break;
2069 case MTHK_LEAGUE: ShowCompanyLeagueTable(); break;
2070 case MTHK_INDUSTRIES: ShowBuildIndustryWindow(); break;
2071 case MTHK_TRAIN_LIST: ShowVehicleListWindow(_local_company, VEH_TRAIN); break;
2072 case MTHK_ROADVEH_LIST: ShowVehicleListWindow(_local_company, VEH_ROAD); break;
2073 case MTHK_SHIP_LIST: ShowVehicleListWindow(_local_company, VEH_SHIP); break;
2074 case MTHK_AIRCRAFT_LIST: ShowVehicleListWindow(_local_company, VEH_AIRCRAFT); break;
2075 case MTHK_ZOOM_IN: ToolbarZoomInClick(this); break;
2076 case MTHK_ZOOM_OUT: ToolbarZoomOutClick(this); break;
2077 case MTHK_BUILD_RAIL: ShowBuildRailToolbar(_last_built_railtype); break;
2078 case MTHK_BUILD_ROAD: ShowBuildRoadToolbar(_last_built_roadtype); break;
2079 case MTHK_BUILD_TRAM: ShowBuildRoadToolbar(_last_built_tramtype); break;
2080 case MTHK_BUILD_DOCKS: ShowBuildDocksToolbar(); break;
2081 case MTHK_BUILD_AIRPORT: ShowBuildAirToolbar(); break;
2082 case MTHK_BUILD_TREES: ShowBuildTreesToolbar(); break;
2083 case MTHK_MUSIC: ShowMusicWindow(); break;
2084 case MTHK_AI_DEBUG: ShowAIDebugWindow(); break;
2085 case MTHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break;
2086 case MTHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break;
2087 case MTHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break;
2088 case MTHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break;
2089 case MTHK_CHEATS: if (!_networking) ShowCheatWindow(); break;
2090 case MTHK_TERRAFORM: ShowTerraformToolbar(); break;
2091 case MTHK_EXTRA_VIEWPORT: ShowExtraViewportWindowForTileUnderCursor(); break;
2092 case MTHK_CLIENT_LIST: if (_networking) ShowClientList(); break;
2093 case MTHK_SIGN_LIST: ShowSignList(); break;
2094 case MTHK_LANDINFO: cbf = PlaceLandBlockInfo(); break;
2095 default: return ES_NOT_HANDLED;
2096 }
2097 if (cbf != CBF_NONE) _last_started_action = cbf;
2098 return ES_HANDLED;
2099 }
2100
2101 void OnPlaceObject(Point pt, TileIndex tile) override
2102 {
2103 switch (_last_started_action) {
2104 case CBF_PLACE_SIGN:
2105 PlaceProc_Sign(tile);
2106 break;
2107
2108 case CBF_PLACE_LANDINFO:
2109 ShowLandInfo(tile);
2110 break;
2111
2112 default: NOT_REACHED();
2113 }
2114 }
2115
2116 void OnPlaceObjectAbort() override
2117 {
2118 _last_started_action = CBF_NONE;
2119 }
2120
2121 void OnRealtimeTick(uint delta_ms) override
2122 {
2123 if (!this->timer.Elapsed(delta_ms)) return;
2124 this->timer.SetInterval(MILLISECONDS_PER_TICK);
2125
2126 if (this->IsWidgetLowered(WID_TN_PAUSE) != !!_pause_mode) {
2127 this->ToggleWidgetLoweredState(WID_TN_PAUSE);
2128 this->SetWidgetDirty(WID_TN_PAUSE);
2129 }
2130
2131 if (this->IsWidgetLowered(WID_TN_FAST_FORWARD) != (_game_speed != 100)) {
2132 this->ToggleWidgetLoweredState(WID_TN_FAST_FORWARD);
2133 this->SetWidgetDirty(WID_TN_FAST_FORWARD);
2134 }
2135 }
2136
2137 void OnTimeout() override
2138 {
2139 /* We do not want to automatically raise the pause, fast forward and
2140 * switchbar buttons; they have to stay down when pressed etc. */
2141 for (uint i = WID_TN_SETTINGS; i < WID_TN_SWITCH_BAR; i++) {
2142 if (this->IsWidgetLowered(i)) {
2143 this->RaiseWidget(i);
2144 this->SetWidgetDirty(i);
2145 }
2146 }
2147 }
2148
2154 void OnInvalidateData(int data = 0, bool gui_scope = true) override
2155 {
2156 if (!gui_scope) return;
2157 if (FindWindowById(WC_MAIN_WINDOW, 0) != nullptr) HandleZoomMessage(this, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, WID_TN_ZOOM_IN, WID_TN_ZOOM_OUT);
2158 }
2159
2160 static HotkeyList hotkeys;
2161 };
2162
2163 const uint16 _maintoolbar_pause_keys[] = {WKC_F1, WKC_PAUSE, 0};
2164 const uint16 _maintoolbar_zoomin_keys[] = {WKC_NUM_PLUS, WKC_EQUALS, WKC_SHIFT | WKC_EQUALS, WKC_SHIFT | WKC_F5, 0};
2165 const uint16 _maintoolbar_zoomout_keys[] = {WKC_NUM_MINUS, WKC_MINUS, WKC_SHIFT | WKC_MINUS, WKC_SHIFT | WKC_F6, 0};
2166 const uint16 _maintoolbar_smallmap_keys[] = {WKC_F4, 'M', 0};
2167
2168 static Hotkey maintoolbar_hotkeys[] = {
2169 Hotkey(_maintoolbar_pause_keys, "pause", MTHK_PAUSE),
2170 Hotkey((uint16)0, "fastforward", MTHK_FASTFORWARD),
2171 Hotkey(WKC_F2, "settings", MTHK_SETTINGS),
2172 Hotkey(WKC_F3, "saveload", MTHK_SAVEGAME),
2173 Hotkey((uint16)0, "load_game", MTHK_LOADGAME),
2174 Hotkey(_maintoolbar_smallmap_keys, "smallmap", MTHK_SMALLMAP),
2175 Hotkey(WKC_F5, "town_list", MTHK_TOWNDIRECTORY),
2176 Hotkey(WKC_F6, "subsidies", MTHK_SUBSIDIES),
2177 Hotkey(WKC_F7, "station_list", MTHK_STATIONS),
2178 Hotkey(WKC_F8, "finances", MTHK_FINANCES),
2179 Hotkey(WKC_F9, "companies", MTHK_COMPANIES),
2180 Hotkey((uint16)0, "story_book", MTHK_STORY),
2181 Hotkey((uint16)0, "goal_list", MTHK_GOAL),
2182 Hotkey(WKC_F10, "graphs", MTHK_GRAPHS),
2183 Hotkey(WKC_F11, "league", MTHK_LEAGUE),
2184 Hotkey(WKC_F12, "industry_list", MTHK_INDUSTRIES),
2185 Hotkey(WKC_SHIFT | WKC_F1, "train_list", MTHK_TRAIN_LIST),
2186 Hotkey(WKC_SHIFT | WKC_F2, "roadveh_list", MTHK_ROADVEH_LIST),
2187 Hotkey(WKC_SHIFT | WKC_F3, "ship_list", MTHK_SHIP_LIST),
2188 Hotkey(WKC_SHIFT | WKC_F4, "aircraft_list", MTHK_AIRCRAFT_LIST),
2189 Hotkey(_maintoolbar_zoomin_keys, "zoomin", MTHK_ZOOM_IN),
2190 Hotkey(_maintoolbar_zoomout_keys, "zoomout", MTHK_ZOOM_OUT),
2191 Hotkey(WKC_SHIFT | WKC_F7, "build_rail", MTHK_BUILD_RAIL),
2192 Hotkey(WKC_SHIFT | WKC_F8, "build_road", MTHK_BUILD_ROAD),
2193 Hotkey((uint16)0, "build_tram", MTHK_BUILD_TRAM),
2194 Hotkey(WKC_SHIFT | WKC_F9, "build_docks", MTHK_BUILD_DOCKS),
2195 Hotkey(WKC_SHIFT | WKC_F10, "build_airport", MTHK_BUILD_AIRPORT),
2196 Hotkey(WKC_SHIFT | WKC_F11, "build_trees", MTHK_BUILD_TREES),
2197 Hotkey(WKC_SHIFT | WKC_F12, "music", MTHK_MUSIC),
2198 Hotkey((uint16)0, "ai_debug", MTHK_AI_DEBUG),
2199 Hotkey(WKC_CTRL | 'S', "small_screenshot", MTHK_SMALL_SCREENSHOT),
2200 Hotkey(WKC_CTRL | 'P', "zoomedin_screenshot", MTHK_ZOOMEDIN_SCREENSHOT),
2201 Hotkey(WKC_CTRL | 'D', "defaultzoom_screenshot", MTHK_DEFAULTZOOM_SCREENSHOT),
2202 Hotkey((uint16)0, "giant_screenshot", MTHK_GIANT_SCREENSHOT),
2203 Hotkey(WKC_CTRL | WKC_ALT | 'C', "cheats", MTHK_CHEATS),
2204 Hotkey('L', "terraform", MTHK_TERRAFORM),
2205 Hotkey('V', "extra_viewport", MTHK_EXTRA_VIEWPORT),
2206 Hotkey((uint16)0, "client_list", MTHK_CLIENT_LIST),
2207 Hotkey((uint16)0, "sign_list", MTHK_SIGN_LIST),
2208 Hotkey((uint16)0, "land_info", MTHK_LANDINFO),
2209 HOTKEY_LIST_END
2210 };
2211 HotkeyList MainToolbarWindow::hotkeys("maintoolbar", maintoolbar_hotkeys);
2212
2213 static NWidgetBase *MakeMainToolbar(int *biggest_index)
2214 {
2216 static const SpriteID toolbar_button_sprites[] = {
2217 SPR_IMG_PAUSE, // WID_TN_PAUSE
2218 SPR_IMG_FASTFORWARD, // WID_TN_FAST_FORWARD
2219 SPR_IMG_SETTINGS, // WID_TN_SETTINGS
2220 SPR_IMG_SAVE, // WID_TN_SAVE
2221 SPR_IMG_SMALLMAP, // WID_TN_SMALL_MAP
2222 SPR_IMG_TOWN, // WID_TN_TOWNS
2223 SPR_IMG_SUBSIDIES, // WID_TN_SUBSIDIES
2224 SPR_IMG_COMPANY_LIST, // WID_TN_STATIONS
2225 SPR_IMG_COMPANY_FINANCE, // WID_TN_FINANCES
2226 SPR_IMG_COMPANY_GENERAL, // WID_TN_COMPANIES
2227 SPR_IMG_STORY_BOOK, // WID_TN_STORY
2228 SPR_IMG_GOAL, // WID_TN_GOAL
2229 SPR_IMG_GRAPHS, // WID_TN_GRAPHS
2230 SPR_IMG_COMPANY_LEAGUE, // WID_TN_LEAGUE
2231 SPR_IMG_INDUSTRY, // WID_TN_INDUSTRIES
2232 SPR_IMG_TRAINLIST, // WID_TN_TRAINS
2233 SPR_IMG_TRUCKLIST, // WID_TN_ROADVEHS
2234 SPR_IMG_SHIPLIST, // WID_TN_SHIPS
2235 SPR_IMG_AIRPLANESLIST, // WID_TN_AIRCRAFT
2236 SPR_IMG_ZOOMIN, // WID_TN_ZOOMIN
2237 SPR_IMG_ZOOMOUT, // WID_TN_ZOOMOUT
2238 SPR_IMG_BUILDRAIL, // WID_TN_RAILS
2239 SPR_IMG_BUILDROAD, // WID_TN_ROADS
2240 SPR_IMG_BUILDTRAMS, // WID_TN_TRAMS
2241 SPR_IMG_BUILDWATER, // WID_TN_WATER
2242 SPR_IMG_BUILDAIR, // WID_TN_AIR
2243 SPR_IMG_LANDSCAPING, // WID_TN_LANDSCAPE
2244 SPR_IMG_MUSIC, // WID_TN_MUSIC_SOUND
2245 SPR_IMG_MESSAGES, // WID_TN_MESSAGES
2246 SPR_IMG_QUERY, // WID_TN_HELP
2247 SPR_IMG_SWITCH_TOOLBAR, // WID_TN_SWITCH_BAR
2248 };
2249
2250 NWidgetMainToolbarContainer *hor = new NWidgetMainToolbarContainer();
2251 for (uint i = 0; i < WID_TN_END; i++) {
2252 switch (i) {
2253 case WID_TN_SMALL_MAP:
2254 case WID_TN_FINANCES:
2255 case WID_TN_VEHICLE_START:
2256 case WID_TN_ZOOM_IN:
2257 case WID_TN_BUILDING_TOOLS_START:
2258 case WID_TN_MUSIC_SOUND:
2259 hor->Add(new NWidgetSpacer(0, 0));
2260 break;
2261 }
2262 hor->Add(new NWidgetLeaf(i == WID_TN_SAVE ? WWT_IMGBTN_2 : WWT_IMGBTN, COLOUR_GREY, i, toolbar_button_sprites[i], STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i));
2263 }
2264
2265 *biggest_index = std::max<int>(*biggest_index, WID_TN_SWITCH_BAR);
2266 return hor;
2267 }
2268
2269 static const NWidgetPart _nested_toolbar_normal_widgets[] = {
2270 NWidgetFunction(MakeMainToolbar),
2271 };
2272
2273 static WindowDesc _toolb_normal_desc(
2274 WDP_MANUAL, nullptr, 0, 0,
2275 WC_MAIN_TOOLBAR, WC_NONE,
2276 WDF_NO_FOCUS,
2277 _nested_toolbar_normal_widgets, lengthof(_nested_toolbar_normal_widgets),
2278 &MainToolbarWindow::hotkeys
2279 );
2280
2281
2282 /* --- Toolbar handling for the scenario editor */
2283
2284 static MenuClickedProc * const _scen_toolbar_dropdown_procs[] = {
2285 nullptr, // 0
2286 nullptr, // 1
2287 MenuClickSettings, // 2
2288 MenuClickSaveLoad, // 3
2289 nullptr, // 4
2290 nullptr, // 5
2291 nullptr, // 6
2292 nullptr, // 7
2293 MenuClickMap, // 8
2294 nullptr, // 9
2295 nullptr, // 10
2296 nullptr, // 11
2297 nullptr, // 12
2298 nullptr, // 13
2299 ToolbarScenBuildRoad, // 14
2300 ToolbarScenBuildTram, // 15
2301 nullptr, // 16
2302 nullptr, // 17
2303 nullptr, // 18
2304 nullptr, // 19
2305 MenuClickMusicWindow, // 20
2306 MenuClickHelp, // 21
2307 nullptr, // 22
2308 };
2309
2310 static ToolbarButtonProc * const _scen_toolbar_button_procs[] = {
2311 ToolbarPauseClick,
2312 ToolbarFastForwardClick,
2313 ToolbarOptionsClick,
2314 ToolbarScenSaveOrLoad,
2315 ToolbarBtn_NULL,
2316 ToolbarScenDatePanel,
2317 ToolbarScenDateBackward,
2318 ToolbarScenDateForward,
2319 ToolbarScenMapTownDir,
2320 ToolbarZoomInClick,
2321 ToolbarZoomOutClick,
2322 ToolbarScenGenLand,
2323 ToolbarScenGenTown,
2324 ToolbarScenGenIndustry,
2325 ToolbarScenBuildRoadClick,
2326 ToolbarScenBuildTramClick,
2327 ToolbarScenBuildDocks,
2328 ToolbarScenPlantTrees,
2329 ToolbarScenPlaceSign,
2330 ToolbarBtn_NULL,
2331 ToolbarMusicClick,
2332 ToolbarHelpClick,
2333 ToolbarSwitchClick,
2334 };
2335
2336 enum MainToolbarEditorHotkeys {
2337 MTEHK_PAUSE,
2338 MTEHK_FASTFORWARD,
2339 MTEHK_SETTINGS,
2340 MTEHK_SAVEGAME,
2341 MTEHK_GENLAND,
2342 MTEHK_GENTOWN,
2343 MTEHK_GENINDUSTRY,
2344 MTEHK_BUILD_ROAD,
2345 MTEHK_BUILD_TRAM,
2346 MTEHK_BUILD_DOCKS,
2347 MTEHK_BUILD_TREES,
2348 MTEHK_SIGN,
2349 MTEHK_MUSIC,
2350 MTEHK_LANDINFO,
2351 MTEHK_SMALL_SCREENSHOT,
2352 MTEHK_ZOOMEDIN_SCREENSHOT,
2353 MTEHK_DEFAULTZOOM_SCREENSHOT,
2354 MTEHK_GIANT_SCREENSHOT,
2355 MTEHK_ZOOM_IN,
2356 MTEHK_ZOOM_OUT,
2357 MTEHK_TERRAFORM,
2358 MTEHK_SMALLMAP,
2359 MTEHK_EXTRA_VIEWPORT,
2360 };
2361
2362 struct ScenarioEditorToolbarWindow : Window {
2363 GUITimer timer;
2364
2365 ScenarioEditorToolbarWindow(WindowDesc *desc) : Window(desc)
2366 {
2367 this->InitNested(0);
2368
2369 _last_started_action = CBF_NONE;
2370 CLRBITS(this->flags, WF_WHITE_BORDER);
2371 PositionMainToolbar(this);
2372 DoZoomInOutWindow(ZOOM_NONE, this);
2373
2374 this->timer.SetInterval(MILLISECONDS_PER_TICK);
2375 }
2376
2377 void FindWindowPlacementAndResize(int def_width, int def_height) override
2378 {
2379 Window::FindWindowPlacementAndResize(_toolbar_width, def_height);
2380 }
2381
2382 void OnPaint() override
2383 {
2384 this->SetWidgetDisabledState(WID_TE_DATE_BACKWARD, _settings_game.game_creation.starting_year <= MIN_YEAR);
2385 this->SetWidgetDisabledState(WID_TE_DATE_FORWARD, _settings_game.game_creation.starting_year >= MAX_YEAR);
2386 this->SetWidgetDisabledState(WID_TE_ROADS, (GetRoadTypes(true) & ~_roadtypes_type) == ROADTYPES_NONE);
2387 this->SetWidgetDisabledState(WID_TE_TRAMS, (GetRoadTypes(true) & _roadtypes_type) == ROADTYPES_NONE);
2388
2389 this->DrawWidgets();
2390 }
2391
2392 void DrawWidget(const Rect &r, int widget) const override
2393 {
2394 switch (widget) {
2395 case WID_TE_DATE:
2396 SetDParam(0, ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1));
2397 DrawString(r.left, r.right, (this->height - FONT_HEIGHT_NORMAL) / 2, STR_WHITE_DATE_LONG, TC_FROMSTRING, SA_HOR_CENTER);
2398 break;
2399
2400 case WID_TE_SPACER: {
2401 int height = r.bottom - r.top;
2402 if (height > 2 * FONT_HEIGHT_NORMAL) {
2403 DrawString(r.left, r.right, (height + 1) / 2 - FONT_HEIGHT_NORMAL, STR_SCENEDIT_TOOLBAR_OPENTTD, TC_FROMSTRING, SA_HOR_CENTER);
2404 DrawString(r.left, r.right, (height + 1) / 2, STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR, TC_FROMSTRING, SA_HOR_CENTER);
2405 } else {
2406 DrawString(r.left, r.right, (height - FONT_HEIGHT_NORMAL) / 2, STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR, TC_FROMSTRING, SA_HOR_CENTER);
2407 }
2408 break;
2409 }
2410 }
2411 }
2412
2413 void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
2414 {
2415 switch (widget) {
2416 case WID_TE_SPACER:
2417 size->width = std::max(GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_OPENTTD).width, GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR).width) + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
2418 break;
2419
2420 case WID_TE_DATE:
2421 SetDParam(0, ConvertYMDToDate(MAX_YEAR, 0, 1));
2422 *size = GetStringBoundingBox(STR_WHITE_DATE_LONG);
2423 size->height = std::max(size->height, GetSpriteSize(SPR_IMG_SAVE).height + WD_IMGBTN_TOP + WD_IMGBTN_BOTTOM);
2424 break;
2425 }
2426 }
2427
2428 void OnClick(Point pt, int widget, int click_count) override
2429 {
2430 if (_game_mode == GM_MENU) return;
2431 CallBackFunction cbf = _scen_toolbar_button_procs[widget](this);
2432 if (cbf != CBF_NONE) _last_started_action = cbf;
2433 }
2434
2435 void OnDropdownSelect(int widget, int index) override
2436 {
2437 CallBackFunction cbf = _scen_toolbar_dropdown_procs[widget](index);
2438 if (cbf != CBF_NONE) _last_started_action = cbf;
2439 if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
2440 }
2441
2442 EventState OnHotkey(int hotkey) override
2443 {
2444 CallBackFunction cbf = CBF_NONE;
2445 switch (hotkey) {
2446 case MTEHK_PAUSE: ToolbarPauseClick(this); break;
2447 case MTEHK_FASTFORWARD: ToolbarFastForwardClick(this); break;
2448 case MTEHK_SETTINGS: ShowGameOptions(); break;
2449 case MTEHK_SAVEGAME: MenuClickSaveLoad(); break;
2450 case MTEHK_GENLAND: ToolbarScenGenLand(this); break;
2451 case MTEHK_GENTOWN: ToolbarScenGenTown(this); break;
2452 case MTEHK_GENINDUSTRY: ToolbarScenGenIndustry(this); break;
2453 case MTEHK_BUILD_ROAD: ToolbarScenBuildRoadClick(this); break;
2454 case MTEHK_BUILD_TRAM: ToolbarScenBuildTramClick(this); break;
2455 case MTEHK_BUILD_DOCKS: ToolbarScenBuildDocks(this); break;
2456 case MTEHK_BUILD_TREES: ToolbarScenPlantTrees(this); break;
2457 case MTEHK_SIGN: cbf = ToolbarScenPlaceSign(this); break;
2458 case MTEHK_MUSIC: ShowMusicWindow(); break;
2459 case MTEHK_LANDINFO: cbf = PlaceLandBlockInfo(); break;
2460 case MTEHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break;
2461 case MTEHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break;
2462 case MTEHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break;
2463 case MTEHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break;
2464 case MTEHK_ZOOM_IN: ToolbarZoomInClick(this); break;
2465 case MTEHK_ZOOM_OUT: ToolbarZoomOutClick(this); break;
2466 case MTEHK_TERRAFORM: ShowEditorTerraformToolbar(); break;
2467 case MTEHK_SMALLMAP: ShowSmallMap(); break;
2468 case MTEHK_EXTRA_VIEWPORT: ShowExtraViewportWindowForTileUnderCursor(); break;
2469 default: return ES_NOT_HANDLED;
2470 }
2471 if (cbf != CBF_NONE) _last_started_action = cbf;
2472 return ES_HANDLED;
2473 }
2474
2475 void OnPlaceObject(Point pt, TileIndex tile) override
2476 {
2477 switch (_last_started_action) {
2478 case CBF_PLACE_SIGN:
2479 PlaceProc_Sign(tile);
2480 break;
2481
2482 case CBF_PLACE_LANDINFO:
2483 ShowLandInfo(tile);
2484 break;
2485
2486 default: NOT_REACHED();
2487 }
2488 }
2489
2490 void OnPlaceObjectAbort() override
2491 {
2492 _last_started_action = CBF_NONE;
2493 }
2494
2495 void OnTimeout() override
2496 {
2497 this->SetWidgetsLoweredState(false, WID_TE_DATE_BACKWARD, WID_TE_DATE_FORWARD, WIDGET_LIST_END);
2498 this->SetWidgetDirty(WID_TE_DATE_BACKWARD);
2499 this->SetWidgetDirty(WID_TE_DATE_FORWARD);
2500 }
2501
2502 void OnRealtimeTick(uint delta_ms) override
2503 {
2504 if (!this->timer.Elapsed(delta_ms)) return;
2505 this->timer.SetInterval(MILLISECONDS_PER_TICK);
2506
2507 if (this->IsWidgetLowered(WID_TE_PAUSE) != !!_pause_mode) {
2508 this->ToggleWidgetLoweredState(WID_TE_PAUSE);
2509 this->SetDirty();
2510 }
2511
2512 if (this->IsWidgetLowered(WID_TE_FAST_FORWARD) != (_game_speed != 100)) {
2513 this->ToggleWidgetLoweredState(WID_TE_FAST_FORWARD);
2514 this->SetDirty();
2515 }
2516 }
2517
2523 void OnInvalidateData(int data = 0, bool gui_scope = true) override
2524 {
2525 if (!gui_scope) return;
2526 if (FindWindowById(WC_MAIN_WINDOW, 0) != nullptr) HandleZoomMessage(this, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, WID_TE_ZOOM_IN, WID_TE_ZOOM_OUT);
2527 }
2528
2529 void OnQueryTextFinished(char *str) override
2530 {
2531 /* Was 'cancel' pressed? */
2532 if (str == nullptr) return;
2533
2534 int32 value;
2535 if (!StrEmpty(str)) {
2536 value = atoi(str);
2537 } else {
2538 /* An empty string means revert to the default */
2539 value = DEF_START_YEAR;
2540 }
2541 SetStartingYear(value);
2542
2543 this->SetDirty();
2544 }
2545
2546 static HotkeyList hotkeys;
2547 };
2548
2549 static Hotkey scenedit_maintoolbar_hotkeys[] = {
2550 Hotkey(_maintoolbar_pause_keys, "pause", MTEHK_PAUSE),
2551 Hotkey((uint16)0, "fastforward", MTEHK_FASTFORWARD),
2552 Hotkey(WKC_F2, "settings", MTEHK_SETTINGS),
2553 Hotkey(WKC_F3, "saveload", MTEHK_SAVEGAME),
2554 Hotkey(WKC_F4, "gen_land", MTEHK_GENLAND),
2555 Hotkey(WKC_F5, "gen_town", MTEHK_GENTOWN),
2556 Hotkey(WKC_F6, "gen_industry", MTEHK_GENINDUSTRY),
2557 Hotkey(WKC_F7, "build_road", MTEHK_BUILD_ROAD),
2558 Hotkey((uint16)0, "build_tram", MTEHK_BUILD_TRAM),
2559 Hotkey(WKC_F8, "build_docks", MTEHK_BUILD_DOCKS),
2560 Hotkey(WKC_F9, "build_trees", MTEHK_BUILD_TREES),
2561 Hotkey(WKC_F10, "build_sign", MTEHK_SIGN),
2562 Hotkey(WKC_F11, "music", MTEHK_MUSIC),
2563 Hotkey(WKC_F12, "land_info", MTEHK_LANDINFO),
2564 Hotkey(WKC_CTRL | 'S', "small_screenshot", MTEHK_SMALL_SCREENSHOT),
2565 Hotkey(WKC_CTRL | 'P', "zoomedin_screenshot", MTEHK_ZOOMEDIN_SCREENSHOT),
2566 Hotkey(WKC_CTRL | 'D', "defaultzoom_screenshot", MTEHK_DEFAULTZOOM_SCREENSHOT),
2567 Hotkey((uint16)0, "giant_screenshot", MTEHK_GIANT_SCREENSHOT),
2568 Hotkey(_maintoolbar_zoomin_keys, "zoomin", MTEHK_ZOOM_IN),
2569 Hotkey(_maintoolbar_zoomout_keys, "zoomout", MTEHK_ZOOM_OUT),
2570 Hotkey('L', "terraform", MTEHK_TERRAFORM),
2571 Hotkey('M', "smallmap", MTEHK_SMALLMAP),
2572 Hotkey('V', "extra_viewport", MTEHK_EXTRA_VIEWPORT),
2573 HOTKEY_LIST_END
2574 };
2575 HotkeyList ScenarioEditorToolbarWindow::hotkeys("scenedit_maintoolbar", scenedit_maintoolbar_hotkeys);
2576
2577 static const NWidgetPart _nested_toolb_scen_inner_widgets[] = {
2578 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_PAUSE), SetDataTip(SPR_IMG_PAUSE, STR_TOOLBAR_TOOLTIP_PAUSE_GAME),
2579 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_FAST_FORWARD), SetDataTip(SPR_IMG_FASTFORWARD, STR_TOOLBAR_TOOLTIP_FORWARD),
2580 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SETTINGS), SetDataTip(SPR_IMG_SETTINGS, STR_TOOLBAR_TOOLTIP_OPTIONS),
2581 NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_TE_SAVE), SetDataTip(SPR_IMG_SAVE, STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO),
2582 NWidget(NWID_SPACER),
2583 NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_SPACER), EndContainer(),
2584 NWidget(NWID_SPACER),
2585 NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_DATE_PANEL),
2586 NWidget(NWID_HORIZONTAL), SetPIP(3, 2, 3),
2587 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_BACKWARD), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD),
2588 NWidget(WWT_EMPTY, COLOUR_GREY, WID_TE_DATE), SetDataTip(STR_NULL, STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE),
2589 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_FORWARD), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD),
2590 EndContainer(),
2591 EndContainer(),
2592 NWidget(NWID_SPACER),
2593 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SMALL_MAP), SetDataTip(SPR_IMG_SMALLMAP, STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY),
2594 NWidget(NWID_SPACER),
2595 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_IN), SetDataTip(SPR_IMG_ZOOMIN, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN),
2596 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_OUT), SetDataTip(SPR_IMG_ZOOMOUT, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT),
2597 NWidget(NWID_SPACER),
2598 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_LAND_GENERATE), SetDataTip(SPR_IMG_LANDSCAPING, STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION),
2599 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TOWN_GENERATE), SetDataTip(SPR_IMG_TOWN, STR_SCENEDIT_TOOLBAR_TOWN_GENERATION),
2600 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_INDUSTRY), SetDataTip(SPR_IMG_INDUSTRY, STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION),
2601 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_ROADS), SetDataTip(SPR_IMG_BUILDROAD, STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION),
2602 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_TRAMS), SetDataTip(SPR_IMG_BUILDTRAMS, STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION),
2603 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_WATER), SetDataTip(SPR_IMG_BUILDWATER, STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS),
2604 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TREES), SetDataTip(SPR_IMG_PLANTTREES, STR_SCENEDIT_TOOLBAR_PLANT_TREES),
2605 NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_SIGNS), SetDataTip(SPR_IMG_SIGN, STR_SCENEDIT_TOOLBAR_PLACE_SIGN),
2606 NWidget(NWID_SPACER),
2607 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_MUSIC_SOUND), SetDataTip(SPR_IMG_MUSIC, STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW),
2608 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_HELP), SetDataTip(SPR_IMG_QUERY, STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION),
2609 NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SWITCH_BAR), SetDataTip(SPR_IMG_SWITCH_TOOLBAR, STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR),
2610 };
2611
2612 static NWidgetBase *MakeScenarioToolbar(int *biggest_index)
2613 {
2614 return MakeNWidgets(_nested_toolb_scen_inner_widgets, lengthof(_nested_toolb_scen_inner_widgets), biggest_index, new NWidgetScenarioToolbarContainer());
2615 }
2616
2617 static const NWidgetPart _nested_toolb_scen_widgets[] = {
2618 NWidgetFunction(MakeScenarioToolbar),
2619 };
2620
2621 static WindowDesc _toolb_scen_desc(
2622 WDP_MANUAL, nullptr, 0, 0,
2623 WC_MAIN_TOOLBAR, WC_NONE,
2624 WDF_NO_FOCUS,
2625 _nested_toolb_scen_widgets, lengthof(_nested_toolb_scen_widgets),
2626 &ScenarioEditorToolbarWindow::hotkeys
2627 );
2628
2630 void AllocateToolbar()
2631 {
2632 /* Clean old GUI values; railtype is (re)set by rail_gui.cpp */
2633 _last_built_roadtype = ROADTYPE_ROAD;
2634 _last_built_tramtype = ROADTYPE_TRAM;
2635
2636 if (_game_mode == GM_EDITOR) {
2637 new ScenarioEditorToolbarWindow(&_toolb_scen_desc);
2638 } else {
2639 new MainToolbarWindow(&_toolb_normal_desc);
2640 }
2641 }
VEH_AIRCRAFT
@ VEH_AIRCRAFT
Aircraft vehicle type.
Definition: vehicle_type.h:27
SaveLoadEditorMenuEntries
SaveLoadEditorMenuEntries
SaveLoad entries in scenario editor mode.
Definition: toolbar_gui.cpp:380
WID_TE_LAND_GENERATE
@ WID_TE_LAND_GENERATE
Land generation.
Definition: toolbar_widget.h:64
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:49
ShowNewGRFSettings
void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfig **config)
Setup the NewGRF gui.
Definition: newgrf_gui.cpp:1994
game.hpp
ES_HANDLED
@ ES_HANDLED
The passed event is handled.
Definition: window_type.h:718
MenuClickFinances
static CallBackFunction MenuClickFinances(int index)
Handle click on the entry in the finances overview menu.
Definition: toolbar_gui.cpp:587
ShowSpriteAlignerWindow
void ShowSpriteAlignerWindow()
Show the window for aligning sprites.
Definition: newgrf_debug_gui.cpp:1100
ShowIndustryCargoesWindow
void ShowIndustryCargoesWindow()
Open the industry and cargoes window with an industry.
Definition: industry_gui.cpp:3091
ScenarioEditorToolbarWindow::OnDropdownSelect
void OnDropdownSelect(int widget, int index) override
A dropdown option associated to this window has been selected.
Definition: toolbar_gui.cpp:2435
PopupMainToolbMenu
static void PopupMainToolbMenu(Window *w, int widget, DropDownList &&list, int def)
Pop up a generic text only menu.
Definition: toolbar_gui.cpp:183
TileIndex
uint32 TileIndex
The index/ID of a Tile.
Definition: tile_type.h:78
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_SAVE
@ WID_TN_SAVE
Save menu.
Definition: toolbar_widget.h:18
sound_func.h
_last_started_action
static CallBackFunction _last_started_action
Last started user action.
Definition: toolbar_gui.cpp:83
WID_TN_COMPANIES
@ WID_TN_COMPANIES
Company menu.
Definition: toolbar_widget.h:24
WID_TN_FINANCES
@ WID_TN_FINANCES
Finance menu.
Definition: toolbar_widget.h:23
WWT_IMGBTN_2
@ WWT_IMGBTN_2
(Toggle) Button with diff image when clicked
Definition: widget_type.h:51
NWidgetFunction
static NWidgetPart NWidgetFunction(NWidgetFunctionType *func_ptr)
Obtain a nested widget (sub)tree from an external source.
Definition: widget_type.h:1145
FT_SCENARIO
@ FT_SCENARIO
old or new scenario
Definition: fileio_type.h:19
MenuClickTown
static CallBackFunction MenuClickTown(int index)
Handle click on one of the entries in the Town menu.
Definition: toolbar_gui.cpp:520
DropDownListItem::result
int result
Result code to return to window on selection.
Definition: dropdown_type.h:24
vehicle_gui.h
WID_TN_ROADS
@ WID_TN_ROADS
Road building menu.
Definition: toolbar_widget.h:39
CTMN_NEW_COMPANY
static const int CTMN_NEW_COMPANY
Create a new company.
Definition: toolbar_gui.cpp:207
TO_HOUSES
@ TO_HOUSES
town buildings
Definition: transparency.h:25
Window::timeout_timer
uint8 timeout_timer
Timer value of the WF_TIMEOUT for flags.
Definition: window_gui.h:314
WID_TN_WATER
@ WID_TN_WATER
Water building toolbar.
Definition: toolbar_widget.h:41
ShowGoalsList
void ShowGoalsList(CompanyID company)
Open a goal list window.
Definition: goal_gui.cpp:320
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:2131
ShowExtraViewportWindow
void ShowExtraViewportWindow(TileIndex tile=INVALID_TILE)
Show a new Extra Viewport window.
Definition: viewport_gui.cpp:168
HotkeyList
List of hotkeys for a window.
Definition: hotkeys.h:40
GUISettings::newgrf_developer_tools
bool newgrf_developer_tools
activate NewGRF developer tools and allow modifying NewGRFs in an existing game
Definition: settings_type.h:175
MenuClickIndustry
static CallBackFunction MenuClickIndustry(int index)
Handle click on the entry in the Industry menu.
Definition: toolbar_gui.cpp:746
LinkGraphSchedule::ShiftDates
void ShiftDates(int interval)
Shift all dates (join dates and edge annotations) of link graphs and link graph jobs by the number of...
Definition: linkgraphschedule.cpp:134
Dimension
Dimensions (a width and height) of a rectangle in 2D.
Definition: geometry_type.hpp:27
ZOOM_OUT
@ ZOOM_OUT
Zoom out (get helicopter view).
Definition: viewport_type.h:82
command_func.h
MenuClickGraphs
static CallBackFunction MenuClickGraphs(int index)
Handle click on the entry in the Graphs menu.
Definition: toolbar_gui.cpp:691
PositionMainToolbar
int PositionMainToolbar(Window *w)
(Re)position main toolbar window at the screen.
Definition: window.cpp:3507
NetworkMaxSpectatorsReached
bool NetworkMaxSpectatorsReached()
Check if max_spectatos has been reached on the server (local check only).
Definition: network_client.cpp:1328
ShowBuildAirToolbar
Window * ShowBuildAirToolbar()
Open the build airport toolbar window.
Definition: airport_gui.cpp:216
WID_TE_ROADS
@ WID_TE_ROADS
Road building menu.
Definition: toolbar_widget.h:67
PC_DARK_RED
static const uint8 PC_DARK_RED
Dark red palette colour.
Definition: gfx_func.h:212
toolbar_gui.h
smallmap_gui.h
ShowStoryBook
void ShowStoryBook(CompanyID company, uint16 page_id=INVALID_STORY_PAGE)
Raise or create the story book window for company, at page page_id.
Definition: story_gui.cpp:1062
guitimer_func.h
Window::ReInit
void ReInit(int rx=0, int ry=0)
Re-initialize a window, and optionally change its size.
Definition: window.cpp:995
IsTransparencySet
static bool IsTransparencySet(TransparencyOption to)
Check if the transparency option bit is set and if we aren't in the game menu (there's never transpar...
Definition: transparency.h:48
NWidgetContainer::Add
void Add(NWidgetBase *wid)
Append widget wid to container.
Definition: widget.cpp:951
WID_TE_SAVE
@ WID_TE_SAVE
Save menu.
Definition: toolbar_widget.h:56
ToolbarFastForwardClick
static CallBackFunction ToolbarFastForwardClick(Window *w)
Toggle fast forward mode.
Definition: toolbar_gui.cpp:284
NWidgetToolbarContainer::GetWidgetFromPos
NWidgetCore * GetWidgetFromPos(int x, int y) override
Definition: toolbar_gui.cpp:1457
signs_func.h
WID_TN_AIR
@ WID_TN_AIR
Airport building toolbar.
Definition: toolbar_widget.h:42
company_gui.h
TF_FORBIDDEN
@ TF_FORBIDDEN
Forbidden.
Definition: town_type.h:94
WID_TN_STORY
@ WID_TN_STORY
Story menu.
Definition: toolbar_widget.h:25
WWT_IMGBTN
@ WWT_IMGBTN
(Toggle) Button with image
Definition: widget_type.h:50
Window::viewport
ViewportData * viewport
Pointer to viewport data, if present.
Definition: window_gui.h:326
_network_server
bool _network_server
network-server is active
Definition: network.cpp:53
NWidgetToolbarContainer::Draw
void Draw(const Window *w) override
Definition: toolbar_gui.cpp:1442
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:100
WID_TE_ZOOM_IN
@ WID_TE_ZOOM_IN
Zoom in the main viewport.
Definition: toolbar_widget.h:62
LinkGraphSchedule::instance
static LinkGraphSchedule instance
Static instance of LinkGraphSchedule.
Definition: linkgraphschedule.h:52
ToolbarSaveClick
static CallBackFunction ToolbarSaveClick(Window *w)
Handle click on Save button in toolbar in normal game mode.
Definition: toolbar_gui.cpp:407
MainToolbarWindow::OnRealtimeTick
void OnRealtimeTick(uint delta_ms) override
Called periodically.
Definition: toolbar_gui.cpp:2121
WID_TE_WATER
@ WID_TE_WATER
Water building toolbar.
Definition: toolbar_widget.h:69
NWID_HORIZONTAL
@ NWID_HORIZONTAL
Horizontal container.
Definition: widget_type.h:73
WID_TE_PAUSE
@ WID_TE_PAUSE
Pause the game.
Definition: toolbar_widget.h:53
WID_TE_DATE
@ WID_TE_DATE
The date of the scenario.
Definition: toolbar_widget.h:58
ZOOM_NONE
@ ZOOM_NONE
Hack, used to update the button status.
Definition: viewport_type.h:83
WID_TN_STATIONS
@ WID_TN_STATIONS
Station menu.
Definition: toolbar_widget.h:22
SetDate
void SetDate(Date date, DateFract fract)
Set the date.
Definition: date.cpp:37
FindWindowById
Window * FindWindowById(WindowClass cls, WindowNumber number)
Find a window by its class and window number.
Definition: window.cpp:1133
HasBit
static bool HasBit(const T x, const uint8 y)
Checks if a bit in a value is set.
Definition: bitmath_func.hpp:103
ai_gui.hpp
NWidgetSpacer
Spacer widget.
Definition: widget_type.h:528
WC_SIGN_LIST
@ WC_SIGN_LIST
Sign list; Window numbers:
Definition: window_type.h:271
ClrBit
static T ClrBit(T &x, const uint8 y)
Clears a bit in a variable.
Definition: bitmath_func.hpp:151
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:2040
WID_TN_GOAL
@ WID_TN_GOAL
Goal menu.
Definition: toolbar_widget.h:26
WDF_NO_FOCUS
@ WDF_NO_FOCUS
This window won't get focus/make any other window lose focus when click.
Definition: window_gui.h:210
ToolbarScenSaveOrLoad
static CallBackFunction ToolbarScenSaveOrLoad(Window *w)
Handle click on SaveLoad button in toolbar in the scenario editor.
Definition: toolbar_gui.cpp:419
NWidgetScenarioToolbarContainer::SetupSmallestSize
void SetupSmallestSize(Window *w, bool init_array) override
Definition: toolbar_gui.cpp:1808
FILLRECT_CHECKER
@ FILLRECT_CHECKER
Draw only every second pixel, used for greying-out.
Definition: gfx_type.h:288
SND_15_BEEP
@ SND_15_BEEP
19 == 0x13 GUI button click
Definition: sound_type.h:58
WID_TE_ZOOM_OUT
@ WID_TE_ZOOM_OUT
Zoom out the main viewport.
Definition: toolbar_widget.h:63
Year
int32 Year
Type for the year, note: 0 based, i.e. starts at the year 0.
Definition: date_type.h:18
ShowMessageHistory
void ShowMessageHistory()
Display window with news messages history.
Definition: news_gui.cpp:1253
TextColour
TextColour
Colour of the strings, see _string_colourmap in table/string_colours.h or docs/ottd-colourtext-palett...
Definition: gfx_type.h:250
vehicle_base.h
DoZoomInOutWindow
bool DoZoomInOutWindow(ZoomStateChange how, Window *w)
Zooms a viewport in a window in or out.
Definition: main_gui.cpp:91
screenshot_gui.h
ShowGameOptions
void ShowGameOptions()
Open the game options window.
Definition: settings_gui.cpp:683
NWidgetLeaf
Leaf widget.
Definition: widget_type.h:769
WID_TN_PAUSE
@ WID_TN_PAUSE
Pause the game.
Definition: toolbar_widget.h:15
ShowLandInfo
void ShowLandInfo(TileIndex tile)
Show land information window.
Definition: misc_gui.cpp:400
goal_base.h
DropDownListItem
Base list item class from which others are derived.
Definition: dropdown_type.h:22
ShowGameSettings
void ShowGameSettings()
Open advanced settings window.
Definition: settings_gui.cpp:2402
_settings_client
ClientSettings _settings_client
The current settings for this game.
Definition: settings.cpp:79
DrawString
int DrawString(int left, int right, int top, const char *str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly truncated to make it fit in its allocated space.
Definition: gfx.cpp:640
SC_ZOOMEDIN
@ SC_ZOOMEDIN
Fully zoomed in screenshot of the visible area.
Definition: screenshot.h:21
ShowBuildRailToolbar
Window * ShowBuildRailToolbar(RailType railtype)
Open the build rail toolbar window for a specific rail type.
Definition: rail_gui.cpp:862
WWT_EMPTY
@ WWT_EMPTY
Empty widget, place holder to reserve space in widget array.
Definition: widget_type.h:46
CallBackFunction
CallBackFunction
Callback functions.
Definition: toolbar_gui.cpp:77
newgrf_debug.h
network_gui.h
MainToolbarWindow::OnHotkey
EventState OnHotkey(int hotkey) override
A hotkey has been pressed.
Definition: toolbar_gui.cpp:2051
NWidgetScenarioToolbarContainer
Container for the scenario editor's toolbar.
Definition: toolbar_gui.cpp:1805
_display_opt
byte _display_opt
What do we want to draw/do?
Definition: transparency_gui.cpp:26
ScenarioEditorToolbarWindow::OnHotkey
EventState OnHotkey(int hotkey) override
A hotkey has been pressed.
Definition: toolbar_gui.cpp:2442
VEH_ROAD
@ VEH_ROAD
Road vehicle type.
Definition: vehicle_type.h:25
Vehicle
Vehicle data structure.
Definition: vehicle_base.h:222
WID_TE_DATE_FORWARD
@ WID_TE_DATE_FORWARD
Increase the date of the scenario.
Definition: toolbar_widget.h:60
SA_HOR_CENTER
@ SA_HOR_CENTER
Horizontally center the text.
Definition: gfx_func.h:97
WID_TN_END
@ WID_TN_END
Helper for knowing the amount of widgets.
Definition: toolbar_widget.h:48
Window::HandleButtonClick
void HandleButtonClick(byte widget)
Do all things to make a button look clicked and mark it to be unclicked in a few ticks.
Definition: window.cpp:635
ROADTYPE_ROAD
@ ROADTYPE_ROAD
Basic road type.
Definition: road_type.h:24
MenuClickMap
static CallBackFunction MenuClickMap(int index)
Handle click on one of the entries in the Map menu.
Definition: toolbar_gui.cpp:493
fios.h
Owner
Owner
Enum for all companies/owners.
Definition: company_type.h:18
NWidgetBase::smallest_y
uint smallest_y
Smallest vertical size of the widget in a filled window.
Definition: widget_type.h:170
MakeNWidgets
NWidgetContainer * MakeNWidgets(const NWidgetPart *parts, int count, int *biggest_index, NWidgetContainer *container)
Construct a nested widget tree from an array of parts.
Definition: widget.cpp:2799
MenuClickBuildTram
static CallBackFunction MenuClickBuildTram(int index)
Handle click on the entry in the Build Tram menu.
Definition: toolbar_gui.cpp:928
Window::Window
Window(WindowDesc *desc)
Empty constructor, initialization has been moved to InitNested() called from the constructor of the d...
Definition: window.cpp:1871
SetDParam
static void SetDParam(uint n, uint64 v)
Set a string parameter v at index n in the global string parameter array.
Definition: strings_func.h:199
NWidgetPart
Partial widget specification to allow NWidgets to be written nested.
Definition: widget_type.h:909
ShowExtraViewportWindowForTileUnderCursor
void ShowExtraViewportWindowForTileUnderCursor()
Show a new Extra Viewport window.
Definition: viewport_gui.cpp:183
WID_TE_TOWN_GENERATE
@ WID_TE_TOWN_GENERATE
Town building window.
Definition: toolbar_widget.h:65
SetDataTip
static NWidgetPart SetDataTip(uint32 data, StringID tip)
Widget part function for setting the data and tooltip.
Definition: widget_type.h:1013
WID_TE_DATE_PANEL
@ WID_TE_DATE_PANEL
Container for the date widgets.
Definition: toolbar_widget.h:72
toolbar_widget.h
WD_IMGBTN_BOTTOM
@ WD_IMGBTN_BOTTOM
Bottom offset of image in the button.
Definition: window_gui.h:41
GetStringBoundingBox
Dimension GetStringBoundingBox(const char *str, FontSize start_fontsize)
Return the string dimension in pixels.
Definition: gfx.cpp:842
DropDownListCompanyItem
Drop down list entry for showing a company entry, with companies 'blob'.
Definition: toolbar_gui.cpp:117
WID_TN_ZOOM_OUT
@ WID_TN_ZOOM_OUT
Zoom out the main viewport.
Definition: toolbar_widget.h:36
textbuf_gui.h
GameSettings::game_creation
GameCreationSettings game_creation
settings used during the creation of a game (map)
Definition: settings_type.h:560
WID_TN_TRAMS
@ WID_TN_TRAMS
Tram building menu.
Definition: toolbar_widget.h:40
OptionMenuEntries
OptionMenuEntries
Game Option button menu entries.
Definition: toolbar_gui.cpp:295
MainToolbarWindow::OnTimeout
void OnTimeout() override
Called when this window's timeout has been reached.
Definition: toolbar_gui.cpp:2137
screenshot.h
PM_UNPAUSED
@ PM_UNPAUSED
A normal unpaused game.
Definition: openttd.h:59
SpriteID
uint32 SpriteID
The number of a sprite, without mapping bits and colourtables.
Definition: gfx_type.h:17
NWidgetBase::Draw
virtual void Draw(const Window *w)=0
NWidgetBase::prev
NWidgetBase * prev
Pointer to previous widget in container. Managed by parent container widget.
Definition: widget_type.h:179
WindowDesc
High level window description.
Definition: window_gui.h:166
WID_TN_LEAGUE
@ WID_TN_LEAGUE
Company league menu.
Definition: toolbar_widget.h:28
COMPANY_FIRST
@ COMPANY_FIRST
First company, same as owner.
Definition: company_type.h:22
CTMN_SPECTATE
static const int CTMN_SPECTATE
Become spectator.
Definition: toolbar_gui.cpp:208
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:2101
window_gui.h
DO_FULL_ANIMATION
@ DO_FULL_ANIMATION
Perform palette animation.
Definition: openttd.h:46
ShowCompanyFinances
void ShowCompanyFinances(CompanyID company)
Open the finances window of a company.
Definition: company_gui.cpp:480
ZOOM_IN
@ ZOOM_IN
Zoom in (get more detailed view).
Definition: viewport_type.h:81
WID_TE_SPACER
@ WID_TE_SPACER
Spacer with "scenario editor" text.
Definition: toolbar_widget.h:57
ScenarioEditorToolbarWindow::UpdateWidgetSize
void UpdateWidgetSize(int 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:2413
ScenarioEditorToolbarWindow::FindWindowPlacementAndResize
void FindWindowPlacementAndResize(int def_width, int def_height) override
Resize window towards the default size.
Definition: toolbar_gui.cpp:2377
WID_TN_MUSIC_SOUND
@ WID_TN_MUSIC_SOUND
Music/sound configuration menu.
Definition: toolbar_widget.h:44
ScenarioEditorToolbarWindow::OnPlaceObjectAbort
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
Definition: toolbar_gui.cpp:2490
WID_TN_HELP
@ WID_TN_HELP
Help menu.
Definition: toolbar_widget.h:46
GUITimer
Definition: guitimer_func.h:13
_roadtypes_type
RoadTypes _roadtypes_type
Bitmap of road/tram types.
Definition: road_cmd.cpp:57
NWidgetToolbarContainer::GetButtonArrangement
virtual const byte * GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const =0
Get the arrangement of the buttons for the toolbar.
WID_TN_SHIPS
@ WID_TN_SHIPS
Ship menu.
Definition: toolbar_widget.h:33
SLO_LOAD
@ SLO_LOAD
File is being loaded.
Definition: fileio_type.h:49
ShowSignList
Window * ShowSignList()
Open the sign list window.
Definition: signs_gui.cpp:400
RailType
RailType
Enumeration for all possible railtypes.
Definition: rail_type.h:27
NWidgetScenarioToolbarContainer::GetButtonArrangement
const byte * GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
Get the arrangement of the buttons for the toolbar.
Definition: toolbar_gui.cpp:1823
Window::resize
ResizeInfo resize
Resize information.
Definition: window_gui.h:322
WKC_EQUALS
@ WKC_EQUALS
= Equals
Definition: gfx_type.h:97
_date
Date _date
Current date in days (day counter)
Definition: date.cpp:28
SLO_SAVE
@ SLO_SAVE
File is being saved.
Definition: fileio_type.h:50
CTMN_CLIENT_LIST
static const int CTMN_CLIENT_LIST
Enum for the Company Toolbar's network related buttons.
Definition: toolbar_gui.cpp:206
tilehighlight_func.h
ClientSettings::sound
SoundSettings sound
sound effect settings
Definition: settings_type.h:580
ToolbarScenBuildTram
static CallBackFunction ToolbarScenBuildTram(int index)
Handle click on the entry in the Build Tram menu.
Definition: toolbar_gui.cpp:1255
DoCommandP
bool DoCommandP(const CommandContainer *container, bool my_cmd)
Shortcut for the long DoCommandP when having a container with the data.
Definition: command.cpp:541
NWidgetContainer::tail
NWidgetBase * tail
Pointer to last widget in container.
Definition: widget_type.h:382
Window::InitNested
void InitNested(WindowNumber number=0)
Perform complete initialization of the Window with nested widgets, to allow use.
Definition: window.cpp:1861
CMD_PAUSE
@ CMD_PAUSE
pause the game
Definition: command_type.h:256
NetworkMaxCompaniesReached
bool NetworkMaxCompaniesReached()
Check if max_companies has been reached on the server (local check only).
Definition: network_client.cpp:1319
NWidgetBase::type
WidgetType type
Type of the widget / nested widget.
Definition: widget_type.h:161
WID_TE_DATE_BACKWARD
@ WID_TE_DATE_BACKWARD
Reduce the date of the scenario.
Definition: toolbar_widget.h:59
MIN_YEAR
static const Year MIN_YEAR
The absolute minimum & maximum years in OTTD.
Definition: date_type.h:83
Window::height
int height
Height of the window (number of pixels down in y direction)
Definition: window_gui.h:320
_toolbar_width
uint _toolbar_width
Width of the toolbar, shared by statusbar.
Definition: toolbar_gui.cpp:63
WF_WHITE_BORDER
@ WF_WHITE_BORDER
Window white border counter bit mask.
Definition: window_gui.h:240
ShowCompanyStations
void ShowCompanyStations(CompanyID company)
Opens window with list of company's stations.
Definition: station_gui.cpp:780
SaveLoadNormalMenuEntries
SaveLoadNormalMenuEntries
SaveLoad entries in normal game mode.
Definition: toolbar_gui.cpp:393
Window::SetDirty
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
Definition: window.cpp:984
highscore.h
NWidgetBase::smallest_x
uint smallest_x
Smallest horizontal size of the widget in a filled window.
Definition: widget_type.h:169
WD_FRAMERECT_LEFT
@ WD_FRAMERECT_LEFT
Offset at left to draw the frame rectangular area.
Definition: window_gui.h:60
WID_TN_SETTINGS
@ WID_TN_SETTINGS
Settings menu.
Definition: toolbar_widget.h:17
NWidgetBase::AssignSizePosition
virtual void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl)=0
ConvertYMDToDate
Date ConvertYMDToDate(Year year, Month month, Day day)
Converts a tuple of Year, Month and Day to a Date.
Definition: date.cpp:149
IsInsideBS
static bool IsInsideBS(const T x, const size_t base, const size_t size)
Checks if a value is between a window started at some base point.
Definition: math_func.hpp:188
WID_TN_LANDSCAPE
@ WID_TN_LANDSCAPE
Landscaping toolbar.
Definition: toolbar_widget.h:43
ROADTYPE_TRAM
@ ROADTYPE_TRAM
Trams.
Definition: road_type.h:25
WD_FRAMERECT_RIGHT
@ WD_FRAMERECT_RIGHT
Offset at right to draw the frame rectangular area.
Definition: window_gui.h:61
ES_NOT_HANDLED
@ ES_NOT_HANDLED
The passed event is not handled.
Definition: window_type.h:719
MenuClickShowShips
static CallBackFunction MenuClickShowShips(int index)
Handle click on the entry in the Ships menu.
Definition: toolbar_gui.cpp:821
NWidgetBase
Baseclass for nested widgets.
Definition: widget_type.h:124
AllocateToolbar
void AllocateToolbar()
Allocate the toolbar.
Definition: toolbar_gui.cpp:2630
ShowFramerateWindow
void ShowFramerateWindow()
Open the general framerate window.
Definition: framerate_gui.cpp:1007
MenuClickBuildAir
static CallBackFunction MenuClickBuildAir(int index)
Handle click on the entry in the Build Air menu.
Definition: toolbar_gui.cpp:975
ToolbarOptionsClick
static CallBackFunction ToolbarOptionsClick(Window *w)
Handle click on Options button in toolbar.
Definition: toolbar_gui.cpp:318
Date
int32 Date
The type to store our dates in.
Definition: date_type.h:14
ShowDropDownList
void ShowDropDownList(Window *w, DropDownList &&list, int selected, int button, uint width, bool auto_width, bool instant_close)
Show a drop down list.
Definition: dropdown.cpp:453
_pause_mode
PauseMode _pause_mode
The current pause mode.
Definition: gfx.cpp:47
MenuClickShowRoad
static CallBackFunction MenuClickShowRoad(int index)
Handle click on the entry in the Road Vehicles menu.
Definition: toolbar_gui.cpp:801
MenuClickBuildRail
static CallBackFunction MenuClickBuildRail(int index)
Handle click on the entry in the Build Rail menu.
Definition: toolbar_gui.cpp:884
road_gui.h
_settings_game
GameSettings _settings_game
Game settings of a running game or the scenario editor.
Definition: settings.cpp:80
linkgraph_gui.h
CCA_NEW
@ CCA_NEW
Create a new company.
Definition: company_type.h:65
NWidgetToolbarContainer::IsButton
bool IsButton(WidgetType type) const
Check whether the given widget type is a button for us.
Definition: toolbar_gui.cpp:1341
GameSettings::economy
EconomySettings economy
settings to change the economy
Definition: settings_type.h:569
Window::SetWidgetDisabledState
void SetWidgetDisabledState(byte widget_index, bool disab_stat)
Sets the enabled/disabled status of a widget.
Definition: window_gui.h:392
MAX_COMPANIES
@ MAX_COMPANIES
Maximum number of companies.
Definition: company_type.h:23
_local_company
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
Definition: company_cmd.cpp:46
DropDownListStringItem
Common string list item.
Definition: dropdown_type.h:39
DO_SHOW_STATION_NAMES
@ DO_SHOW_STATION_NAMES
Display station names.
Definition: openttd.h:44
safeguards.h
ShowQueryString
void ShowQueryString(StringID str, StringID caption, uint maxsize, Window *parent, CharSetFilter afilter, QueryStringFlags flags)
Show a query popup window with a textbox in it.
Definition: misc_gui.cpp:1131
Window::flags
WindowFlags flags
Window flags.
Definition: window_gui.h:310
WF_TIMEOUT
@ WF_TIMEOUT
Window timeout counter.
Definition: window_gui.h:232
CLIENT_ID_SERVER
@ CLIENT_ID_SERVER
Servers always have this ID.
Definition: network_type.h:41
MenuClickSubsidies
static CallBackFunction MenuClickSubsidies(int index)
Handle click on the entry in the Subsidies menu.
Definition: toolbar_gui.cpp:545
MenuClickShowAir
static CallBackFunction MenuClickShowAir(int index)
Handle click on the entry in the Aircraft menu.
Definition: toolbar_gui.cpp:841
MenuClickSaveLoad
static CallBackFunction MenuClickSaveLoad(int index=0)
Handle click on one of the entries in the SaveLoad menu.
Definition: toolbar_gui.cpp:431
ToggleDirtyBlocks
void ToggleDirtyBlocks()
Toggle drawing of the dirty blocks.
Definition: toolbar_gui.cpp:1097
StrEmpty
static bool StrEmpty(const char *s)
Check if a string buffer is empty.
Definition: string_func.h:60
TC_NO_SHADE
@ TC_NO_SHADE
Do not add shading to this text colour.
Definition: gfx_type.h:274
_networking
bool _networking
are we in networking mode?
Definition: network.cpp:52
DrawSprite
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub, ZoomLevel zoom)
Draw a sprite, not in a viewport.
Definition: gfx.cpp:978
ToolbarScenDatePanel
static CallBackFunction ToolbarScenDatePanel(Window *w)
Called when clicking at the date panel of the scenario editor toolbar.
Definition: toolbar_gui.cpp:1162
road.h
MainToolbarWindow::FindWindowPlacementAndResize
void FindWindowPlacementAndResize(int def_width, int def_height) override
Resize window towards the default size.
Definition: toolbar_gui.cpp:2020
Point
Coordinates of a point in 2D.
Definition: geometry_type.hpp:21
EconomySettings::found_town
TownFounding found_town
town founding.
Definition: settings_type.h:502
WID_TN_SUBSIDIES
@ WID_TN_SUBSIDIES
Subsidy menu.
Definition: toolbar_widget.h:21
CheckBlitter
void CheckBlitter()
Check whether we still use the right blitter, or use another (better) one.
Definition: gfxinit.cpp:320
NWidgetContainer::head
NWidgetBase * head
Pointer to first widget in container.
Definition: widget_type.h:381
NWidgetToolbarContainer::SetupSmallestSize
void SetupSmallestSize(Window *w, bool init_array) override
Definition: toolbar_gui.cpp:1346
date_func.h
ShowCheatWindow
void ShowCheatWindow()
Open cheat window.
Definition: cheat_gui.cpp:416
stdafx.h
ShowSaveLoadDialog
void ShowSaveLoadDialog(AbstractFileType abstract_filetype, SaveLoadOperation fop)
Launch save/load dialog in the given mode.
Definition: fios_gui.cpp:920
FT_SAVEGAME
@ FT_SAVEGAME
old or new savegame
Definition: fileio_type.h:18
MainToolbarWindow::OnInvalidateData
void OnInvalidateData(int data=0, bool gui_scope=true) override
Some data on this window has become invalid.
Definition: toolbar_gui.cpp:2154
DO_FULL_DETAIL
@ DO_FULL_DETAIL
Also draw details of track and roads.
Definition: openttd.h:47
RoadType
RoadType
The different roadtypes we support.
Definition: road_type.h:22
VehicleType
VehicleType
Available vehicle types.
Definition: vehicle_type.h:21
GfxFillRect
void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectMode mode)
Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen.
Definition: gfx.cpp:114
ToggleBoundingBoxes
void ToggleBoundingBoxes()
Toggle drawing of sprites' bounding boxes.
Definition: toolbar_gui.cpp:1080
ScenarioEditorToolbarWindow::OnClick
void OnClick(Point pt, int widget, int click_count) override
A click with the left mouse button has been made on the window.
Definition: toolbar_gui.cpp:2428
MenuClickCompany
static CallBackFunction MenuClickCompany(int index)
Handle click on the entry in the Company menu.
Definition: toolbar_gui.cpp:607
MainToolbarWindow
Main toolbar.
Definition: toolbar_gui.cpp:2003
WID_TN_ROADVEHS
@ WID_TN_ROADVEHS
Road vehicle menu.
Definition: toolbar_widget.h:32
viewport_func.h
NetworkCompanyIsPassworded
bool NetworkCompanyIsPassworded(CompanyID company_id)
Check if the company we want to join requires a password.
Definition: network.cpp:213
NWidgetBase::current_y
uint current_y
Current vertical size (after resizing).
Definition: widget_type.h:173
ToolbarScenBuildRoad
static CallBackFunction ToolbarScenBuildRoad(int index)
Handle click on the entry in the Build Road menu.
Definition: toolbar_gui.cpp:1235
WC_NONE
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
Definition: window_type.h:38
WID_TE_SETTINGS
@ WID_TE_SETTINGS
Settings menu.
Definition: toolbar_widget.h:55
NWidgetBase::next
NWidgetBase * next
Pointer to next widget in container. Managed by parent container widget.
Definition: widget_type.h:178
WID_TN_AIRCRAFT
@ WID_TN_AIRCRAFT
Aircraft menu.
Definition: toolbar_widget.h:34
WidgetType
WidgetType
Window widget types, nested widget types, and nested widget part types.
Definition: widget_type.h:44
DrawCompanyIcon
void DrawCompanyIcon(CompanyID c, int x, int y)
Draw the icon of a company.
Definition: company_cmd.cpp:143
_network_own_client_id
ClientID _network_own_client_id
Our client identifier.
Definition: network.cpp:59
GetSpriteSize
Dimension GetSpriteSize(SpriteID sprid, Point *offset, ZoomLevel zoom)
Get the size of a sprite.
Definition: gfx.cpp:913
ShowHighscoreTable
void ShowHighscoreTable(int difficulty=SP_CUSTOM, int8 rank=-1)
Show the highscore table for a given difficulty.
Definition: highscore_gui.cpp:230
WID_TE_SIGNS
@ WID_TE_SIGNS
Sign building.
Definition: toolbar_widget.h:71
MenuClickStory
static CallBackFunction MenuClickStory(int index)
Handle click on the entry in the Story menu.
Definition: toolbar_gui.cpp:651
ScenarioEditorToolbarWindow::OnQueryTextFinished
void OnQueryTextFinished(char *str) override
The query window opened from this window has closed.
Definition: toolbar_gui.cpp:2529
NWidgetMainToolbarContainer
Container for the 'normal' main toolbar.
Definition: toolbar_gui.cpp:1483
rail_gui.h
StringID
uint32 StringID
Numeric value that represents a string, independent of the selected language.
Definition: strings_type.h:16
WWT_PUSHIMGBTN
@ WWT_PUSHIMGBTN
Normal push-button (no toggle button) with image caption.
Definition: widget_type.h:103
NWidgetBase::fill_y
uint fill_y
Vertical fill stepsize (from initial size, 0 means not resizable).
Definition: widget_type.h:163
MakeMainToolbar
static NWidgetBase * MakeMainToolbar(int *biggest_index)
Definition: toolbar_gui.cpp:2213
SoundSettings::confirm
bool confirm
Play sound effect on successful constructions or other actions.
Definition: settings_type.h:197
vehicle_func.h
WID_TE_HELP
@ WID_TE_HELP
Help menu.
Definition: toolbar_widget.h:74
EndContainer
static NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
Definition: widget_type.h:998
Clamp
static T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
Definition: math_func.hpp:77
Pool::PoolItem<&_vehicle_pool >::Iterate
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
Definition: pool_type.hpp:378
strings_func.h
WID_TE_TREES
@ WID_TE_TREES
Tree building toolbar.
Definition: toolbar_widget.h:70
terraform_gui.h
ScenarioEditorToolbarWindow::OnInvalidateData
void OnInvalidateData(int data=0, bool gui_scope=true) override
Some data on this window has become invalid.
Definition: toolbar_gui.cpp:2523
MainToolbarWindow::OnPaint
void OnPaint() override
The window must be repainted.
Definition: toolbar_gui.cpp:2025
SC_WORLD
@ SC_WORLD
World screenshot.
Definition: screenshot.h:23
ShowBuildDocksScenToolbar
Window * ShowBuildDocksScenToolbar()
Open the build water toolbar window for the scenario editor.
Definition: dock_gui.cpp:398
graph_gui.h
MenuClickHelp
static CallBackFunction MenuClickHelp(int index)
Choose the proper callback function for the main toolbar's help menu.
Definition: toolbar_gui.cpp:1125
PC_VERY_DARK_RED
static const uint8 PC_VERY_DARK_RED
Almost-black red palette colour.
Definition: gfx_func.h:211
NWidgetBase::pos_x
int pos_x
Horizontal position of top-left corner of the widget in the window.
Definition: widget_type.h:175
Pool::PoolItem<&_company_pool >::GetNumItems
static size_t GetNumItems()
Returns number of valid items in the pool.
Definition: pool_type.hpp:359
DeleteAllMessages
void DeleteAllMessages()
Delete all messages and their corresponding window (if any).
Definition: window.cpp:3418
WIDGET_LIST_END
static const int WIDGET_LIST_END
indicate the end of widgets' list for vararg functions
Definition: widget_type.h:20
NetworkSendCommand
void NetworkSendCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, CompanyID company)
Prepare a DoCommand to be send over the network.
Definition: network_command.cpp:136
Window::SetWidgetsLoweredState
void CDECL SetWidgetsLoweredState(bool lowered_stat, int widgets,...)
Sets the lowered/raised status of a list of widgets.
Definition: window.cpp:555
FONT_HEIGHT_NORMAL
#define FONT_HEIGHT_NORMAL
Height of characters in the normal (FS_NORMAL) font.
Definition: gfx_func.h:179
ScenarioEditorToolbarWindow
Definition: toolbar_gui.cpp:2362
NWidget
static NWidgetPart NWidget(WidgetType tp, Colours col, int16 idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1113
ShowTransparencyToolbar
void ShowTransparencyToolbar()
Show the transparency toolbar.
Definition: transparency_gui.cpp:159
COMPANY_SPECTATOR
@ COMPANY_SPECTATOR
The client is spectating.
Definition: company_type.h:35
NWidgetBase::fill_x
uint fill_x
Horizontal fill stepsize (from initial size, 0 means not resizable).
Definition: widget_type.h:162
framerate_type.h
InvalidateWindowClassesData
void InvalidateWindowClassesData(WindowClass cls, int data, bool gui_scope)
Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by de...
Definition: window.cpp:3339
SetStartingYear
void SetStartingYear(Year year)
Set the starting year for a scenario.
Definition: toolbar_gui.cpp:1111
MenuClickGoal
static CallBackFunction MenuClickGoal(int index)
Handle click on the entry in the Goal menu.
Definition: toolbar_gui.cpp:671
WID_TN_SMALL_MAP
@ WID_TN_SMALL_MAP
Small map menu.
Definition: toolbar_widget.h:19
WWT_PANEL
@ WWT_PANEL
Simple depressed panel.
Definition: widget_type.h:48
MenuClickBuildWater
static CallBackFunction MenuClickBuildWater(int index)
Handle click on the entry in the Build Waterways menu.
Definition: toolbar_gui.cpp:952
ShowLastNewsMessage
void ShowLastNewsMessage()
Show previous news item.
Definition: news_gui.cpp:1037
PM_PAUSED_NORMAL
@ PM_PAUSED_NORMAL
A game normally paused.
Definition: openttd.h:60
Window::SetWidgetsDisabledState
void CDECL SetWidgetsDisabledState(bool disab_stat, int widgets,...)
Sets the enabled/disabled status of a list of widgets.
Definition: window.cpp:536
WID_TN_TOWNS
@ WID_TN_TOWNS
Town menu.
Definition: toolbar_widget.h:20
MenuClickNewspaper
static CallBackFunction MenuClickNewspaper(int index)
Handle click on the entry in the Newspaper menu.
Definition: toolbar_gui.cpp:1044
NWidgetToolbarContainer
Full blown container to make it behave exactly as we want :)
Definition: toolbar_gui.cpp:1326
NWidgetBase::resize_y
uint resize_y
Vertical resize step (0 means not resizable).
Definition: widget_type.h:165
Window::IsWidgetLowered
bool IsWidgetLowered(byte widget_index) const
Gets the lowered state of a widget.
Definition: window_gui.h:493
ShowSmallMap
void ShowSmallMap()
Show the smallmap window.
Definition: smallmap_gui.cpp:1856
ShowAIDebugWindow
Window * ShowAIDebugWindow(CompanyID show_company)
Open the AI debug window and select the given company.
Definition: ai_gui.cpp:1535
MainToolbarWindow::OnClick
void OnClick(Point pt, int widget, int click_count) override
A click with the left mouse button has been made on the window.
Definition: toolbar_gui.cpp:2040
EventState
EventState
State of handling an event.
Definition: window_type.h:717
HT_RECT
@ HT_RECT
rectangle (stations, depots, ...)
Definition: tilehighlight_type.h:21
transparency_gui.h
WID_TE_SMALL_MAP
@ WID_TE_SMALL_MAP
Small map menu.
Definition: toolbar_widget.h:61
DO_SHOW_SIGNS
@ DO_SHOW_SIGNS
Display signs.
Definition: openttd.h:45
news_gui.h
WD_IMGBTN_TOP
@ WD_IMGBTN_TOP
Top offset of image in the button.
Definition: window_gui.h:40
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:131
ScenarioEditorToolbarWindow::DrawWidget
void DrawWidget(const Rect &r, int widget) const override
Draw the contents of a nested widget.
Definition: toolbar_gui.cpp:2392
FT_HEIGHTMAP
@ FT_HEIGHTMAP
heightmap file
Definition: fileio_type.h:20
WID_TN_MESSAGES
@ WID_TN_MESSAGES
Messages menu.
Definition: toolbar_widget.h:45
SC_DEFAULTZOOM
@ SC_DEFAULTZOOM
Zoomed to default zoom level screenshot of the visible area.
Definition: screenshot.h:22
WC_MAIN_WINDOW
@ WC_MAIN_WINDOW
Main window; Window numbers:
Definition: window_type.h:44
GameCreationSettings::starting_year
Year starting_year
starting date
Definition: settings_type.h:293
NWID_SPACER
@ NWID_SPACER
Invisible widget that takes some space.
Definition: widget_type.h:77
MenuClickSettings
static CallBackFunction MenuClickSettings(int index)
Handle click on one of the entries in the Options button menu.
Definition: toolbar_gui.cpp:351
DO_SHOW_TOWN_NAMES
@ DO_SHOW_TOWN_NAMES
Display town names.
Definition: openttd.h:43
company_func.h
NWidgetScenarioToolbarContainer::panel_widths
uint panel_widths[2]
The width of the two panels (the text panel and date panel)
Definition: toolbar_gui.cpp:1806
WID_TN_INDUSTRIES
@ WID_TN_INDUSTRIES
Industry menu.
Definition: toolbar_widget.h:29
CMD_COMPANY_CTRL
@ CMD_COMPANY_CTRL
used in multiplayer to create a new companies etc.
Definition: command_type.h:281
NWidgetContainer
Baseclass for container widgets.
Definition: widget_type.h:367
TO_SIGNS
@ TO_SIGNS
signs
Definition: transparency.h:23
ShowLinkGraphLegend
void ShowLinkGraphLegend()
Open a link graph legend window.
Definition: linkgraph_gui.cpp:470
DEF_START_YEAR
static const Year DEF_START_YEAR
The default starting year.
Definition: date_type.h:86
GUITimer::Elapsed
bool Elapsed(uint delta)
Test if a timer has elapsed.
Definition: guitimer_func.h:55
network.h
_grfconfig
GRFConfig * _grfconfig
First item in list of current GRF set up.
Definition: newgrf_config.cpp:170
MILLISECONDS_PER_TICK
static const uint MILLISECONDS_PER_TICK
The number of milliseconds per game tick.
Definition: gfx_type.h:310
window_func.h
WID_TE_FAST_FORWARD
@ WID_TE_FAST_FORWARD
Fast forward the game.
Definition: toolbar_widget.h:54
MenuClickMusicWindow
static CallBackFunction MenuClickMusicWindow(int index)
Handle click on the entry in the Music menu.
Definition: toolbar_gui.cpp:1024
ToggleBit
static T ToggleBit(T &x, const uint8 y)
Toggles a bit in a variable.
Definition: bitmath_func.hpp:181
Window::ToggleWidgetLoweredState
void ToggleWidgetLoweredState(byte widget_index)
Invert the lowered/raised status of a widget.
Definition: window_gui.h:463
SoundSettings::click_beep
bool click_beep
Beep on a random selection of buttons.
Definition: settings_type.h:198
lengthof
#define lengthof(x)
Return the length of an fixed size array.
Definition: stdafx.h:367
Window::width
int width
width of the window (number of pixels to the right in x direction)
Definition: window_gui.h:319
CTMN_SPECTATOR
static const int CTMN_SPECTATOR
Show a company window as spectator.
Definition: toolbar_gui.cpp:209
ShowTerraformToolbar
Window * ShowTerraformToolbar(Window *link)
Show the toolbar for terraforming in the game.
Definition: terraform_gui.cpp:356
MarkWholeScreenDirty
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
Definition: gfx.cpp:1597
WDP_MANUAL
@ WDP_MANUAL
Manually align the window (so no automatic location finding)
Definition: window_gui.h:153
ToggleTransparency
static void ToggleTransparency(TransparencyOption to)
Toggle the transparency option bit.
Definition: transparency.h:69
SetPIP
static NWidgetPart SetPIP(uint8 pre, uint8 inter, uint8 post)
Widget part function for setting a pre/inter/post spaces.
Definition: widget_type.h:1075
SC_VIEWPORT
@ SC_VIEWPORT
Screenshot of viewport.
Definition: screenshot.h:19
MakeScreenshotWithConfirm
void MakeScreenshotWithConfirm(ScreenshotType t)
Make a screenshot.
Definition: screenshot.cpp:868
WID_TN_ZOOM_IN
@ WID_TN_ZOOM_IN
Zoom in the main viewport.
Definition: toolbar_widget.h:35
NWidgetBase::pos_y
int pos_y
Vertical position of top-left corner of the widget in the window.
Definition: widget_type.h:176
NetworkClientRequestMove
void NetworkClientRequestMove(CompanyID company_id, const char *pass)
Notify the server of this client wanting to be moved to another company.
Definition: network_client.cpp:1229
ShowBuildRoadToolbar
Window * ShowBuildRoadToolbar(RoadType roadtype)
Open the build road toolbar window.
Definition: road_gui.cpp:888
INVALID_COMPANY
@ INVALID_COMPANY
An invalid company.
Definition: company_type.h:30
engine_base.h
NWidgetMainToolbarContainer::GetButtonArrangement
const byte * GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
Get the arrangement of the buttons for the toolbar.
Definition: toolbar_gui.cpp:1484
console_gui.h
MenuClickShowTrains
static CallBackFunction MenuClickShowTrains(int index)
Handle click on the entry in the Train menu.
Definition: toolbar_gui.cpp:781
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_INDUSTRY
@ WID_TE_INDUSTRY
Industry building window.
Definition: toolbar_widget.h:66
gui.h
CeilDiv
static uint CeilDiv(uint a, uint b)
Computes ceil(a / b) for non-negative a and b.
Definition: math_func.hpp:254
MenuClickStations
static CallBackFunction MenuClickStations(int index)
Handle click on the entry in the Stations menu.
Definition: toolbar_gui.cpp:567
Window
Data structure for an opened window.
Definition: window_gui.h:276
NWidgetToolbarContainer::spacers
uint spacers
Number of spacer widgets in this toolbar.
Definition: toolbar_gui.cpp:1329
GetRoadTypes
RoadTypes GetRoadTypes(bool introduces)
Get list of road types, regardless of company availability.
Definition: road.cpp:216
SizingType
SizingType
Different forms of sizing nested widgets, using NWidgetBase::AssignSizePosition()
Definition: widget_type.h:109
NWidgetToolbarContainer::AssignSizePosition
void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override
Definition: toolbar_gui.cpp:1379
VEH_TRAIN
@ VEH_TRAIN
Train vehicle type.
Definition: vehicle_type.h:24
Pool::PoolItem<&_company_pool >::IsValidID
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
Definition: pool_type.hpp:318
Window::RaiseWidget
void RaiseWidget(byte widget_index)
Marks a widget as raised.
Definition: window_gui.h:483
WID_TN_FAST_FORWARD
@ WID_TN_FAST_FORWARD
Fast forward the game.
Definition: toolbar_widget.h:16
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:3373
Window::DrawWidgets
void DrawWidgets() const
Paint all widgets of a window.
Definition: widget.cpp:602
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
IConsoleSwitch
void IConsoleSwitch()
Toggle in-game console between opened and closed.
Definition: console_gui.cpp:437
WID_TE_TRAMS
@ WID_TE_TRAMS
Tram building menu.
Definition: toolbar_widget.h:68
Window::IsWidgetDisabled
bool IsWidgetDisabled(byte widget_index) const
Gets the enabled/disabled status of a widget.
Definition: window_gui.h:421
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:2475
NWidgetCore
Base class for a 'real' widget.
Definition: widget_type.h:282
story_base.h
WKC_MINUS
@ WKC_MINUS
Definition: gfx_type.h:104
Window::SetWidgetDirty
void SetWidgetDirty(byte widget_index) const
Invalidate a widget, i.e.
Definition: window.cpp:597
ShowAIConfigWindow
void ShowAIConfigWindow()
Open the AI config window.
Definition: ai_gui.cpp:971
MenuClickLeague
static CallBackFunction MenuClickLeague(int index)
Handle click on the entry in the CompanyLeague menu.
Definition: toolbar_gui.cpp:721
ShowCompany
void ShowCompany(CompanyID company)
Show the window with the overview of the company.
Definition: company_gui.cpp:2751
GUISettings::UserIsAllowedToChangeNewGRFs
bool UserIsAllowedToChangeNewGRFs() const
Returns true when the user has sufficient privileges to edit newgrfs on a running game.
Definition: settings_type.h:186
HandleZoomMessage
void HandleZoomMessage(Window *w, const Viewport *vp, byte widget_zoom_in, byte widget_zoom_out)
Update the status of the zoom-buttons according to the zoom-level of the viewport.
Definition: viewport.cpp:478
ScenarioEditorToolbarWindow::OnRealtimeTick
void OnRealtimeTick(uint delta_ms) override
Called periodically.
Definition: toolbar_gui.cpp:2502
VEH_SHIP
@ VEH_SHIP
Ship vehicle type.
Definition: vehicle_type.h:26
ToolbarMode
ToolbarMode
Toobar modes.
Definition: toolbar_gui.cpp:70
ROADTYPES_NONE
@ ROADTYPES_NONE
No roadtypes.
Definition: road_type.h:37
Rect
Specification of a rectangle with absolute coordinates of all edges.
Definition: geometry_type.hpp:47
ScenarioEditorToolbarWindow::OnTimeout
void OnTimeout() override
Called when this window's timeout has been reached.
Definition: toolbar_gui.cpp:2495
WID_TE_MUSIC_SOUND
@ WID_TE_MUSIC_SOUND
Music/sound configuration menu.
Definition: toolbar_widget.h:73
WID_TN_VEHICLE_START
@ WID_TN_VEHICLE_START
Helper for the offset of the vehicle menus.
Definition: toolbar_widget.h:30
NWidgetBase::resize_x
uint resize_x
Horizontal resize step (0 means not resizable).
Definition: widget_type.h:164
WC_MAIN_TOOLBAR
@ WC_MAIN_TOOLBAR
Main toolbar (the long bar at the top); Window numbers:
Definition: window_type.h:51
ScenarioEditorToolbarWindow::OnPaint
void OnPaint() override
The window must be repainted.
Definition: toolbar_gui.cpp:2382
QSF_ENABLE_DEFAULT
@ QSF_ENABLE_DEFAULT
enable the 'Default' button ("\0" is returned)
Definition: textbuf_gui.h:21
DO_SHOW_WAYPOINT_NAMES
@ DO_SHOW_WAYPOINT_NAMES
Display waypoint names.
Definition: openttd.h:48
CLRBITS
#define CLRBITS(x, y)
Clears several bits in a variable.
Definition: bitmath_func.hpp:166
NWidgetBase::current_x
uint current_x
Current horizontal size (after resizing).
Definition: widget_type.h:172
DropDownListItem::masked
bool masked
Masked and unselectable item.
Definition: dropdown_type.h:25
ResetObjectToPlace
void ResetObjectToPlace()
Reset the cursor and mouse mode handling back to default (normal cursor, only clicking in windows).
Definition: viewport.cpp:3421
Window::SetWidgetLoweredState
void SetWidgetLoweredState(byte widget_index, bool lowered_stat)
Sets the lowered/raised status of a widget.
Definition: window_gui.h:453
_left_button_clicked
bool _left_button_clicked
Is left mouse button clicked?
Definition: gfx.cpp:39
NWidgetCore::GetWidgetFromPos
NWidgetCore * GetWidgetFromPos(int x, int y) override
Definition: widget.cpp:912
TD_RTL
@ TD_RTL
Text is written right-to-left by default.
Definition: strings_type.h:24
network_func.h
_current_text_dir
TextDirection _current_text_dir
Text direction of the currently selected language.
Definition: strings.cpp:48
CS_NUMERAL
@ CS_NUMERAL
Only numeric ones.
Definition: string_type.h:28
WID_TN_TRAINS
@ WID_TN_TRAINS
Train menu.
Definition: toolbar_widget.h:31
_game_speed
uint16 _game_speed
Current game-speed; 100 is 1x, 0 is infinite.
Definition: gfx.cpp:37
DropDownListIconItem
List item with icon and string.
Definition: dropdown_type.h:82
MenuClickForest
static CallBackFunction MenuClickForest(int index)
Handle click on the entry in the landscaping menu.
Definition: toolbar_gui.cpp:1000
ClientSettings::gui
GUISettings gui
settings related to the GUI
Definition: settings_type.h:577
MenuClickBuildRoad
static CallBackFunction MenuClickBuildRoad(int index)
Handle click on the entry in the Build Road menu.
Definition: toolbar_gui.cpp:906
DropDownListCheckedItem
Drop down list entry for showing a checked/unchecked toggle item.
Definition: toolbar_gui.cpp:89
MainToolbarWindow::OnPlaceObjectAbort
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
Definition: toolbar_gui.cpp:2116
ShowEditorTerraformToolbar
Window * ShowEditorTerraformToolbar()
Show the toolbar for terraforming in the scenario editor.
Definition: terraform_gui.cpp:748
PopupMainCompanyToolbMenu
static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey=0)
Pop up a generic company list menu.
Definition: toolbar_gui.cpp:217
Hotkey
All data for a single hotkey.
Definition: hotkeys.h:22
MainToolbarWindow::OnDropdownSelect
void OnDropdownSelect(int widget, int index) override
A dropdown option associated to this window has been selected.
Definition: toolbar_gui.cpp:2045
ShowBuildDocksToolbar
Window * ShowBuildDocksToolbar()
Open the build water toolbar window.
Definition: dock_gui.cpp:357
Window::FindWindowPlacementAndResize
virtual void FindWindowPlacementAndResize(int def_width, int def_height)
Resize window towards the default size.
Definition: window.cpp:1526
hotkeys.h
cheat_func.h
ShowBuildRoadScenToolbar
Window * ShowBuildRoadScenToolbar(RoadType roadtype)
Show the road building toolbar in the scenario editor.
Definition: road_gui.cpp:975
MAX_YEAR
static const Year MAX_YEAR
MAX_YEAR, nicely rounded value of the number of years that can be encoded in a single 32 bits date,...
Definition: date_type.h:94
WID_TN_GRAPHS
@ WID_TN_GRAPHS
Graph menu.
Definition: toolbar_widget.h:27
NWidgetToolbarContainer::visible
bool visible[WID_TN_END]
The visible headers.
Definition: toolbar_gui.cpp:1327
WID_TN_RAILS
@ WID_TN_RAILS
Rail building menu.
Definition: toolbar_widget.h:38