OpenTTD Source  13.0-beta1
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"
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 #include "misc_cmd.h"
53 
54 #include "widgets/toolbar_widget.h"
55 
56 #include "network/network.h"
57 #include "network/network_gui.h"
58 #include "network/network_func.h"
59 
60 #include "safeguards.h"
61 
62 
64 uint _toolbar_width = 0;
65 
66 RailType _last_built_railtype;
67 RoadType _last_built_roadtype;
68 RoadType _last_built_tramtype;
69 
72  TB_NORMAL,
73  TB_UPPER,
74  TB_LOWER
75 };
76 
79  CBF_NONE,
80  CBF_PLACE_SIGN,
81  CBF_PLACE_LANDINFO,
82 };
83 
85 
86 
91  uint checkmark_width;
92 public:
93  bool checked;
94 
95  DropDownListCheckedItem(StringID string, int result, bool masked, bool checked) : DropDownListStringItem(string, result, masked), checked(checked)
96  {
97  this->checkmark_width = GetStringBoundingBox(STR_JUST_CHECKMARK).width + 3;
98  }
99 
100  uint Width() const
101  {
102  return DropDownListStringItem::Width() + this->checkmark_width;
103  }
104 
105  void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const
106  {
107  bool rtl = _current_text_dir == TD_RTL;
108  if (this->checked) {
109  DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, STR_JUST_CHECKMARK, sel ? TC_WHITE : TC_BLACK);
110  }
111  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);
112  }
113 };
114 
119  Dimension icon_size;
120  Dimension lock_size;
121 public:
122  bool greyed;
123 
124  DropDownListCompanyItem(int result, bool masked, bool greyed) : DropDownListItem(result, masked), greyed(greyed)
125  {
126  this->icon_size = GetSpriteSize(SPR_COMPANY_ICON);
127  this->lock_size = GetSpriteSize(SPR_LOCK);
128  }
129 
130  bool Selectable() const override
131  {
132  return true;
133  }
134 
135  uint Width() const override
136  {
137  CompanyID company = (CompanyID)this->result;
138  SetDParam(0, company);
139  SetDParam(1, company);
140  return GetStringBoundingBox(STR_COMPANY_NAME_COMPANY_NUM).width + this->icon_size.width + this->lock_size.width + 6;
141  }
142 
143  uint Height(uint width) const override
144  {
145  return std::max(std::max(this->icon_size.height, this->lock_size.height) + 2U, (uint)FONT_HEIGHT_NORMAL);
146  }
147 
148  void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const override
149  {
150  CompanyID company = (CompanyID)this->result;
151  bool rtl = _current_text_dir == TD_RTL;
152 
153  /* It's possible the company is deleted while the dropdown is open */
154  if (!Company::IsValidID(company)) return;
155 
156  int icon_offset = (bottom - top - icon_size.height) / 2;
157  int text_offset = (bottom - top - FONT_HEIGHT_NORMAL) / 2;
158  int lock_offset = (bottom - top - lock_size.height) / 2;
159 
160  DrawCompanyIcon(company, rtl ? right - this->icon_size.width - WD_FRAMERECT_RIGHT : left + WD_FRAMERECT_LEFT, top + icon_offset);
161  if (NetworkCompanyIsPassworded(company)) {
162  DrawSprite(SPR_LOCK, PAL_NONE, rtl ? left + WD_FRAMERECT_LEFT : right - this->lock_size.width - WD_FRAMERECT_RIGHT, top + lock_offset);
163  }
164 
165  SetDParam(0, company);
166  SetDParam(1, company);
167  TextColour col;
168  if (this->greyed) {
169  col = (sel ? TC_SILVER : TC_GREY) | TC_NO_SHADE;
170  } else {
171  col = sel ? TC_WHITE : TC_BLACK;
172  }
173  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);
174  }
175 };
176 
184 static void PopupMainToolbMenu(Window *w, int widget, DropDownList &&list, int def)
185 {
186  ShowDropDownList(w, std::move(list), def, widget, 0, true, true);
188 }
189 
197 static void PopupMainToolbMenu(Window *w, int widget, StringID string, int count)
198 {
199  DropDownList list;
200  for (int i = 0; i < count; i++) {
201  list.emplace_back(new DropDownListStringItem(string + i, i, false));
202  }
203  PopupMainToolbMenu(w, widget, std::move(list), 0);
204 }
205 
207 static const int CTMN_CLIENT_LIST = -1;
208 static const int CTMN_SPECTATE = -2;
209 static const int CTMN_SPECTATOR = -3;
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 
229  list.emplace_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, false));
230  }
231  break;
232  case WID_TN_STORY:
233  list.emplace_back(new DropDownListStringItem(STR_STORY_BOOK_SPECTATOR, CTMN_SPECTATOR, false));
234  break;
235 
236  case WID_TN_GOAL:
237  list.emplace_back(new DropDownListStringItem(STR_GOALS_SPECTATOR, CTMN_SPECTATOR, false));
238  break;
239  }
240 
241  for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
242  if (!Company::IsValidID(c)) continue;
243  list.emplace_back(new DropDownListCompanyItem(c, false, HasBit(grey, c)));
244  }
245 
247 }
248 
249 
250 static ToolbarMode _toolbar_mode;
251 
252 static CallBackFunction SelectSignTool()
253 {
254  if (_last_started_action == CBF_PLACE_SIGN) {
256  return CBF_NONE;
257  } else {
258  SetObjectToPlace(SPR_CURSOR_SIGN, PAL_NONE, HT_RECT, WC_MAIN_TOOLBAR, 0);
259  return CBF_PLACE_SIGN;
260  }
261 }
262 
263 /* --- Pausing --- */
264 
265 static CallBackFunction ToolbarPauseClick(Window *w)
266 {
267  if (_networking && !_network_server) return CBF_NONE; // only server can pause the game
268 
270  if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
271  }
272  return CBF_NONE;
273 }
274 
282 {
283  ChangeGameSpeed(_game_speed == 100);
284 
286  return CBF_NONE;
287 }
288 
293  OME_GAMEOPTIONS,
294  OME_SETTINGS,
295  OME_SCRIPT_SETTINGS,
296  OME_NEWGRFSETTINGS,
297  OME_TRANSPARENCIES,
298  OME_SHOW_TOWNNAMES,
299  OME_SHOW_STATIONNAMES,
300  OME_SHOW_WAYPOINTNAMES,
301  OME_SHOW_SIGNS,
302  OME_SHOW_COMPETITOR_SIGNS,
303  OME_FULL_ANIMATION,
304  OME_FULL_DETAILS,
305  OME_TRANSPARENTBUILDINGS,
306  OME_SHOW_STATIONSIGNS,
307 };
308 
316 {
317  DropDownList list;
318  list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_GAME_OPTIONS, OME_GAMEOPTIONS, false));
319  list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE, OME_SETTINGS, false));
320  /* Changes to the per-AI settings don't get send from the server to the clients. Clients get
321  * the settings once they join but never update it. As such don't show the window at all
322  * to network clients. */
323  if (!_networking || _network_server) list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_SCRIPT_SETTINGS, OME_SCRIPT_SETTINGS, false));
324  list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_NEWGRF_SETTINGS, OME_NEWGRFSETTINGS, false));
325  list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS, OME_TRANSPARENCIES, false));
326  list.emplace_back(new DropDownListItem(-1, false));
327  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES, false, HasBit(_display_opt, DO_SHOW_TOWN_NAMES)));
328  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES, false, HasBit(_display_opt, DO_SHOW_STATION_NAMES)));
329  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES, false, HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES)));
330  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS, false, HasBit(_display_opt, DO_SHOW_SIGNS)));
331  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS, false, HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS)));
332  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION, false, HasBit(_display_opt, DO_FULL_ANIMATION)));
333  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS, false, HasBit(_display_opt, DO_FULL_DETAIL)));
334  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS, false, IsTransparencySet(TO_HOUSES)));
335  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS, false, IsTransparencySet(TO_SIGNS)));
336 
337  ShowDropDownList(w, std::move(list), 0, WID_TN_SETTINGS, 140, true, true);
339  return CBF_NONE;
340 }
341 
349 {
350  switch (index) {
351  case OME_GAMEOPTIONS: ShowGameOptions(); return CBF_NONE;
352  case OME_SETTINGS: ShowGameSettings(); return CBF_NONE;
353  case OME_SCRIPT_SETTINGS: ShowAIConfigWindow(); return CBF_NONE;
354  case OME_NEWGRFSETTINGS: ShowNewGRFSettings(!_networking && _settings_client.gui.UserIsAllowedToChangeNewGRFs(), true, true, &_grfconfig); return CBF_NONE;
355  case OME_TRANSPARENCIES: ShowTransparencyToolbar(); break;
356 
357  case OME_SHOW_TOWNNAMES: ToggleBit(_display_opt, DO_SHOW_TOWN_NAMES); break;
358  case OME_SHOW_STATIONNAMES: ToggleBit(_display_opt, DO_SHOW_STATION_NAMES); break;
359  case OME_SHOW_WAYPOINTNAMES: ToggleBit(_display_opt, DO_SHOW_WAYPOINT_NAMES); break;
360  case OME_SHOW_SIGNS: ToggleBit(_display_opt, DO_SHOW_SIGNS); break;
361  case OME_SHOW_COMPETITOR_SIGNS:
364  break;
365  case OME_FULL_ANIMATION: ToggleBit(_display_opt, DO_FULL_ANIMATION); CheckBlitter(); break;
366  case OME_FULL_DETAILS: ToggleBit(_display_opt, DO_FULL_DETAIL); break;
367  case OME_TRANSPARENTBUILDINGS: ToggleTransparency(TO_HOUSES); break;
368  case OME_SHOW_STATIONSIGNS: ToggleTransparency(TO_SIGNS); break;
369  }
371  return CBF_NONE;
372 }
373 
378  SLEME_SAVE_SCENARIO = 0,
379  SLEME_LOAD_SCENARIO,
380  SLEME_SAVE_HEIGHTMAP,
381  SLEME_LOAD_HEIGHTMAP,
382  SLEME_EXIT_TOINTRO,
383  SLEME_EXIT_GAME = 6,
384  SLEME_MENUCOUNT,
385 };
386 
391  SLNME_SAVE_GAME = 0,
392  SLNME_LOAD_GAME,
393  SLNME_EXIT_TOINTRO,
394  SLNME_EXIT_GAME = 4,
395  SLNME_MENUCOUNT,
396 };
397 
405 {
406  PopupMainToolbMenu(w, WID_TN_SAVE, STR_FILE_MENU_SAVE_GAME, SLNME_MENUCOUNT);
407  return CBF_NONE;
408 }
409 
417 {
418  PopupMainToolbMenu(w, WID_TE_SAVE, STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO, SLEME_MENUCOUNT);
419  return CBF_NONE;
420 }
421 
428 static CallBackFunction MenuClickSaveLoad(int index = 0)
429 {
430  if (_game_mode == GM_EDITOR) {
431  switch (index) {
432  case SLEME_SAVE_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_SAVE); break;
433  case SLEME_LOAD_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_LOAD); break;
434  case SLEME_SAVE_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_SAVE); break;
435  case SLEME_LOAD_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_LOAD); break;
436  case SLEME_EXIT_TOINTRO: AskExitToGameMenu(); break;
437  case SLEME_EXIT_GAME: HandleExitGameRequest(); break;
438  }
439  } else {
440  switch (index) {
441  case SLNME_SAVE_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_SAVE); break;
442  case SLNME_LOAD_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break;
443  case SLNME_EXIT_TOINTRO: AskExitToGameMenu(); break;
444  case SLNME_EXIT_GAME: HandleExitGameRequest(); break;
445  }
446  }
447  return CBF_NONE;
448 }
449 
450 /* --- Map button menu --- */
451 
452 enum MapMenuEntries {
453  MME_SHOW_SMALLMAP = 0,
454  MME_SHOW_EXTRAVIEWPORTS,
455  MME_SHOW_LINKGRAPH,
456  MME_SHOW_SIGNLISTS,
457  MME_SHOW_TOWNDIRECTORY,
458  MME_SHOW_INDUSTRYDIRECTORY,
459 };
460 
461 static CallBackFunction ToolbarMapClick(Window *w)
462 {
463  DropDownList list;
464  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false));
465  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS, false));
466  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_LINGRAPH_LEGEND, MME_SHOW_LINKGRAPH, false));
467  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false));
468  PopupMainToolbMenu(w, WID_TN_SMALL_MAP, std::move(list), 0);
469  return CBF_NONE;
470 }
471 
472 static CallBackFunction ToolbarScenMapTownDir(Window *w)
473 {
474  DropDownList list;
475  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false));
476  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS, false));
477  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false));
478  list.emplace_back(new DropDownListStringItem(STR_TOWN_MENU_TOWN_DIRECTORY, MME_SHOW_TOWNDIRECTORY, false));
479  list.emplace_back(new DropDownListStringItem(STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, MME_SHOW_INDUSTRYDIRECTORY, false));
480  PopupMainToolbMenu(w, WID_TE_SMALL_MAP, std::move(list), 0);
481  return CBF_NONE;
482 }
483 
491 {
492  switch (index) {
493  case MME_SHOW_SMALLMAP: ShowSmallMap(); break;
494  case MME_SHOW_EXTRAVIEWPORTS: ShowExtraViewportWindow(); break;
495  case MME_SHOW_LINKGRAPH: ShowLinkGraphLegend(); break;
496  case MME_SHOW_SIGNLISTS: ShowSignList(); break;
497  case MME_SHOW_TOWNDIRECTORY: ShowTownDirectory(); break;
498  case MME_SHOW_INDUSTRYDIRECTORY: ShowIndustryDirectory(); break;
499  }
500  return CBF_NONE;
501 }
502 
503 /* --- Town button menu --- */
504 
505 static CallBackFunction ToolbarTownClick(Window *w)
506 {
507  PopupMainToolbMenu(w, WID_TN_TOWNS, STR_TOWN_MENU_TOWN_DIRECTORY, (_settings_game.economy.found_town == TF_FORBIDDEN) ? 1 : 2);
508  return CBF_NONE;
509 }
510 
518 {
519  switch (index) {
520  case 0: ShowTownDirectory(); break;
521  case 1: // setting could be changed when the dropdown was open
522  if (_settings_game.economy.found_town != TF_FORBIDDEN) ShowFoundTownWindow();
523  break;
524  }
525  return CBF_NONE;
526 }
527 
528 /* --- Subidies button menu --- */
529 
530 static CallBackFunction ToolbarSubsidiesClick(Window *w)
531 {
532  PopupMainToolbMenu(w, WID_TN_SUBSIDIES, STR_SUBSIDIES_MENU_SUBSIDIES, 1);
533  return CBF_NONE;
534 }
535 
543 {
544  switch (index) {
545  case 0: ShowSubsidiesList(); break;
546  }
547  return CBF_NONE;
548 }
549 
550 /* --- Stations button menu --- */
551 
552 static CallBackFunction ToolbarStationsClick(Window *w)
553 {
555  return CBF_NONE;
556 }
557 
565 {
567  return CBF_NONE;
568 }
569 
570 /* --- Finances button menu --- */
571 
572 static CallBackFunction ToolbarFinancesClick(Window *w)
573 {
575  return CBF_NONE;
576 }
577 
585 {
587  return CBF_NONE;
588 }
589 
590 /* --- Company's button menu --- */
591 
592 static CallBackFunction ToolbarCompaniesClick(Window *w)
593 {
595  return CBF_NONE;
596 }
597 
605 {
606  if (_networking) {
607  switch (index) {
608  case CTMN_CLIENT_LIST:
609  ShowClientList();
610  return CBF_NONE;
611 
612  case CTMN_SPECTATE:
613  if (_network_server) {
616  } else {
618  }
619  return CBF_NONE;
620  }
621  }
622  ShowCompany((CompanyID)index);
623  return CBF_NONE;
624 }
625 
626 /* --- Story button menu --- */
627 
628 static CallBackFunction ToolbarStoryClick(Window *w)
629 {
631  return CBF_NONE;
632 }
633 
641 {
643  return CBF_NONE;
644 }
645 
646 /* --- Goal button menu --- */
647 
648 static CallBackFunction ToolbarGoalClick(Window *w)
649 {
651  return CBF_NONE;
652 }
653 
661 {
663  return CBF_NONE;
664 }
665 
666 /* --- Graphs button menu --- */
667 
668 static CallBackFunction ToolbarGraphsClick(Window *w)
669 {
670  PopupMainToolbMenu(w, WID_TN_GRAPHS, STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH, (_toolbar_mode == TB_NORMAL) ? 6 : 8);
671  return CBF_NONE;
672 }
673 
681 {
682  switch (index) {
683  case 0: ShowOperatingProfitGraph(); break;
684  case 1: ShowIncomeGraph(); break;
685  case 2: ShowDeliveredCargoGraph(); break;
686  case 3: ShowPerformanceHistoryGraph(); break;
687  case 4: ShowCompanyValueGraph(); break;
688  case 5: ShowCargoPaymentRates(); break;
689  /* functions for combined graphs/league button */
690  case 6: ShowCompanyLeagueTable(); break;
691  case 7: ShowPerformanceRatingDetail(); break;
692  }
693  return CBF_NONE;
694 }
695 
696 /* --- League button menu --- */
697 
698 static CallBackFunction ToolbarLeagueClick(Window *w)
699 {
700  PopupMainToolbMenu(w, WID_TN_LEAGUE, STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE, _networking ? 2 : 3);
701  return CBF_NONE;
702 }
703 
711 {
712  switch (index) {
713  case 0: ShowCompanyLeagueTable(); break;
714  case 1: ShowPerformanceRatingDetail(); break;
715  case 2: ShowHighscoreTable(); break;
716  }
717  return CBF_NONE;
718 }
719 
720 /* --- Industries button menu --- */
721 
722 static CallBackFunction ToolbarIndustryClick(Window *w)
723 {
724  /* Disable build-industry menu if we are a spectator */
725  PopupMainToolbMenu(w, WID_TN_INDUSTRIES, STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, (_local_company == COMPANY_SPECTATOR) ? 2 : 3);
726  return CBF_NONE;
727 }
728 
736 {
737  switch (index) {
738  case 0: ShowIndustryDirectory(); break;
739  case 1: ShowIndustryCargoesWindow(); break;
740  case 2: ShowBuildIndustryWindow(); break;
741  }
742  return CBF_NONE;
743 }
744 
745 /* --- Trains button menu + 1 helper function for all vehicles. --- */
746 
747 static void ToolbarVehicleClick(Window *w, VehicleType veh)
748 {
749  int dis = ~0;
750 
751  for (const Vehicle *v : Vehicle::Iterate()) {
752  if (v->type == veh && v->IsPrimaryVehicle()) ClrBit(dis, v->owner);
753  }
755 }
756 
757 
758 static CallBackFunction ToolbarTrainClick(Window *w)
759 {
760  ToolbarVehicleClick(w, VEH_TRAIN);
761  return CBF_NONE;
762 }
763 
771 {
772  ShowVehicleListWindow((CompanyID)index, VEH_TRAIN);
773  return CBF_NONE;
774 }
775 
776 /* --- Road vehicle button menu --- */
777 
778 static CallBackFunction ToolbarRoadClick(Window *w)
779 {
780  ToolbarVehicleClick(w, VEH_ROAD);
781  return CBF_NONE;
782 }
783 
791 {
792  ShowVehicleListWindow((CompanyID)index, VEH_ROAD);
793  return CBF_NONE;
794 }
795 
796 /* --- Ship button menu --- */
797 
798 static CallBackFunction ToolbarShipClick(Window *w)
799 {
800  ToolbarVehicleClick(w, VEH_SHIP);
801  return CBF_NONE;
802 }
803 
811 {
812  ShowVehicleListWindow((CompanyID)index, VEH_SHIP);
813  return CBF_NONE;
814 }
815 
816 /* --- Aircraft button menu --- */
817 
818 static CallBackFunction ToolbarAirClick(Window *w)
819 {
820  ToolbarVehicleClick(w, VEH_AIRCRAFT);
821  return CBF_NONE;
822 }
823 
831 {
832  ShowVehicleListWindow((CompanyID)index, VEH_AIRCRAFT);
833  return CBF_NONE;
834 }
835 
836 /* --- Zoom in button --- */
837 
838 static CallBackFunction ToolbarZoomInClick(Window *w)
839 {
841  w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)WID_TE_ZOOM_IN : (byte)WID_TN_ZOOM_IN);
843  }
844  return CBF_NONE;
845 }
846 
847 /* --- Zoom out button --- */
848 
849 static CallBackFunction ToolbarZoomOutClick(Window *w)
850 {
852  w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)WID_TE_ZOOM_OUT : (byte)WID_TN_ZOOM_OUT);
854  }
855  return CBF_NONE;
856 }
857 
858 /* --- Rail button menu --- */
859 
860 static CallBackFunction ToolbarBuildRailClick(Window *w)
861 {
862  ShowDropDownList(w, GetRailTypeDropDownList(), _last_built_railtype, WID_TN_RAILS, 140, true, true);
864  return CBF_NONE;
865 }
866 
874 {
875  _last_built_railtype = (RailType)index;
876  ShowBuildRailToolbar(_last_built_railtype);
877  return CBF_NONE;
878 }
879 
880 /* --- Road button menu --- */
881 
882 static CallBackFunction ToolbarBuildRoadClick(Window *w)
883 {
884  ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TN_ROADS, 140, true, true);
886  return CBF_NONE;
887 }
888 
896 {
897  _last_built_roadtype = (RoadType)index;
898  ShowBuildRoadToolbar(_last_built_roadtype);
899  return CBF_NONE;
900 }
901 
902 /* --- Tram button menu --- */
903 
904 static CallBackFunction ToolbarBuildTramClick(Window *w)
905 {
906  ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TN_TRAMS, 140, true, true);
908  return CBF_NONE;
909 }
910 
918 {
919  _last_built_tramtype = (RoadType)index;
920  ShowBuildRoadToolbar(_last_built_tramtype);
921  return CBF_NONE;
922 }
923 
924 /* --- Water button menu --- */
925 
926 static CallBackFunction ToolbarBuildWaterClick(Window *w)
927 {
928  DropDownList list;
929  list.emplace_back(new DropDownListIconItem(SPR_IMG_BUILD_CANAL, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, 0, false));
930  ShowDropDownList(w, std::move(list), 0, WID_TN_WATER, 140, true, true);
932  return CBF_NONE;
933 }
934 
942 {
944  return CBF_NONE;
945 }
946 
947 /* --- Airport button menu --- */
948 
949 static CallBackFunction ToolbarBuildAirClick(Window *w)
950 {
951  DropDownList list;
952  list.emplace_back(new DropDownListIconItem(SPR_IMG_AIRPORT, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, 0, false));
953  ShowDropDownList(w, std::move(list), 0, WID_TN_AIR, 140, true, true);
955  return CBF_NONE;
956 }
957 
965 {
967  return CBF_NONE;
968 }
969 
970 /* --- Forest button menu --- */
971 
972 static CallBackFunction ToolbarForestClick(Window *w)
973 {
974  DropDownList list;
975  list.emplace_back(new DropDownListIconItem(SPR_IMG_LANDSCAPING, PAL_NONE, STR_LANDSCAPING_MENU_LANDSCAPING, 0, false));
976  list.emplace_back(new DropDownListIconItem(SPR_IMG_PLANTTREES, PAL_NONE, STR_LANDSCAPING_MENU_PLANT_TREES, 1, false));
977  list.emplace_back(new DropDownListIconItem(SPR_IMG_SIGN, PAL_NONE, STR_LANDSCAPING_MENU_PLACE_SIGN, 2, false));
978  ShowDropDownList(w, std::move(list), 0, WID_TN_LANDSCAPE, 100, true, true);
980  return CBF_NONE;
981 }
982 
990 {
991  switch (index) {
992  case 0: ShowTerraformToolbar(); break;
993  case 1: ShowBuildTreesToolbar(); break;
994  case 2: return SelectSignTool();
995  }
996  return CBF_NONE;
997 }
998 
999 /* --- Music button menu --- */
1000 
1001 static CallBackFunction ToolbarMusicClick(Window *w)
1002 {
1003  PopupMainToolbMenu(w, _game_mode == GM_EDITOR ? (int)WID_TE_MUSIC_SOUND : (int)WID_TN_MUSIC_SOUND, STR_TOOLBAR_SOUND_MUSIC, 1);
1004  return CBF_NONE;
1005 }
1006 
1014 {
1015  ShowMusicWindow();
1016  return CBF_NONE;
1017 }
1018 
1019 /* --- Newspaper button menu --- */
1020 
1021 static CallBackFunction ToolbarNewspaperClick(Window *w)
1022 {
1023  PopupMainToolbMenu(w, WID_TN_MESSAGES, STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT, 3);
1024  return CBF_NONE;
1025 }
1026 
1034 {
1035  switch (index) {
1036  case 0: ShowLastNewsMessage(); break;
1037  case 1: ShowMessageHistory(); break;
1038  case 2: DeleteAllMessages(); break;
1039  }
1040  return CBF_NONE;
1041 }
1042 
1043 /* --- Help button menu --- */
1044 
1045 static CallBackFunction PlaceLandBlockInfo()
1046 {
1047  if (_last_started_action == CBF_PLACE_LANDINFO) {
1049  return CBF_NONE;
1050  } else {
1051  SetObjectToPlace(SPR_CURSOR_QUERY, PAL_NONE, HT_RECT, WC_MAIN_TOOLBAR, 0);
1052  return CBF_PLACE_LANDINFO;
1053  }
1054 }
1055 
1056 static CallBackFunction ToolbarHelpClick(Window *w)
1057 {
1058  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);
1059  return CBF_NONE;
1060 }
1061 
1070 {
1071  extern bool _draw_bounding_boxes;
1072  /* Always allow to toggle them off */
1073  if (_settings_client.gui.newgrf_developer_tools || _draw_bounding_boxes) {
1074  _draw_bounding_boxes = !_draw_bounding_boxes;
1076  }
1077 }
1078 
1087 {
1088  extern bool _draw_dirty_blocks;
1089  /* Always allow to toggle them off */
1090  if (_settings_client.gui.newgrf_developer_tools || _draw_dirty_blocks) {
1091  _draw_dirty_blocks = !_draw_dirty_blocks;
1093  }
1094 }
1095 
1101 {
1104  /* If you open a savegame as scenario there may already be link graphs.*/
1106  SetDate(new_date, 0);
1107 }
1108 
1115 {
1116  switch (index) {
1117  case 0: return PlaceLandBlockInfo();
1118  case 2: IConsoleSwitch(); break;
1119  case 3: ShowAIDebugWindow(); break;
1120  case 4: ShowScreenshotWindow(); break;
1121  case 5: ShowFramerateWindow(); break;
1122  case 6: ShowAboutWindow(); break;
1123  case 7: ShowSpriteAlignerWindow(); break;
1124  case 8: ToggleBoundingBoxes(); break;
1125  case 9: ToggleDirtyBlocks(); break;
1126  }
1127  return CBF_NONE;
1128 }
1129 
1130 /* --- Switch toolbar button --- */
1131 
1132 static CallBackFunction ToolbarSwitchClick(Window *w)
1133 {
1134  if (_toolbar_mode != TB_LOWER) {
1135  _toolbar_mode = TB_LOWER;
1136  } else {
1137  _toolbar_mode = TB_UPPER;
1138  }
1139 
1140  w->ReInit();
1141  w->SetWidgetLoweredState(_game_mode == GM_EDITOR ? (uint)WID_TE_SWITCH_BAR : (uint)WID_TN_SWITCH_BAR, _toolbar_mode == TB_LOWER);
1142  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1143  return CBF_NONE;
1144 }
1145 
1146 /* --- Scenario editor specific handlers. */
1147 
1152 {
1154  ShowQueryString(STR_JUST_INT, STR_MAPGEN_START_DATE_QUERY_CAPT, 8, w, CS_NUMERAL, QSF_ENABLE_DEFAULT);
1155  return CBF_NONE;
1156 }
1157 
1158 static CallBackFunction ToolbarScenDateBackward(Window *w)
1159 {
1160  /* don't allow too fast scrolling */
1161  if (!(w->flags & WF_TIMEOUT) || w->timeout_timer <= 1) {
1163  w->SetDirty();
1164 
1166  }
1167  _left_button_clicked = false;
1168  return CBF_NONE;
1169 }
1170 
1171 static CallBackFunction ToolbarScenDateForward(Window *w)
1172 {
1173  /* don't allow too fast scrolling */
1174  if (!(w->flags & WF_TIMEOUT) || w->timeout_timer <= 1) {
1176  w->SetDirty();
1177 
1179  }
1180  _left_button_clicked = false;
1181  return CBF_NONE;
1182 }
1183 
1184 static CallBackFunction ToolbarScenGenLand(Window *w)
1185 {
1187  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1188 
1190  return CBF_NONE;
1191 }
1192 
1193 
1194 static CallBackFunction ToolbarScenGenTown(Window *w)
1195 {
1197  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1198  ShowFoundTownWindow();
1199  return CBF_NONE;
1200 }
1201 
1202 static CallBackFunction ToolbarScenGenIndustry(Window *w)
1203 {
1205  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1206  ShowBuildIndustryWindow();
1207  return CBF_NONE;
1208 }
1209 
1210 static CallBackFunction ToolbarScenBuildRoadClick(Window *w)
1211 {
1212  ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TE_ROADS, 140, true, true);
1213  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1214  return CBF_NONE;
1215 }
1216 
1224 {
1225  _last_built_roadtype = (RoadType)index;
1226  ShowBuildRoadScenToolbar(_last_built_roadtype);
1227  return CBF_NONE;
1228 }
1229 
1230 static CallBackFunction ToolbarScenBuildTramClick(Window *w)
1231 {
1232  ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TE_TRAMS, 140, true, true);
1233  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1234  return CBF_NONE;
1235 }
1236 
1244 {
1245  _last_built_tramtype = (RoadType)index;
1246  ShowBuildRoadScenToolbar(_last_built_tramtype);
1247  return CBF_NONE;
1248 }
1249 
1250 static CallBackFunction ToolbarScenBuildDocks(Window *w)
1251 {
1253  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1255  return CBF_NONE;
1256 }
1257 
1258 static CallBackFunction ToolbarScenPlantTrees(Window *w)
1259 {
1261  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1262  ShowBuildTreesToolbar();
1263  return CBF_NONE;
1264 }
1265 
1266 static CallBackFunction ToolbarScenPlaceSign(Window *w)
1267 {
1269  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1270  return SelectSignTool();
1271 }
1272 
1273 static CallBackFunction ToolbarBtn_NULL(Window *w)
1274 {
1275  return CBF_NONE;
1276 }
1277 
1278 typedef CallBackFunction MenuClickedProc(int index);
1279 
1280 static MenuClickedProc * const _menu_clicked_procs[] = {
1281  nullptr, // 0
1282  nullptr, // 1
1283  MenuClickSettings, // 2
1284  MenuClickSaveLoad, // 3
1285  MenuClickMap, // 4
1286  MenuClickTown, // 5
1287  MenuClickSubsidies, // 6
1288  MenuClickStations, // 7
1289  MenuClickFinances, // 8
1290  MenuClickCompany, // 9
1291  MenuClickStory, // 10
1292  MenuClickGoal, // 11
1293  MenuClickGraphs, // 12
1294  MenuClickLeague, // 13
1295  MenuClickIndustry, // 14
1296  MenuClickShowTrains, // 15
1297  MenuClickShowRoad, // 16
1298  MenuClickShowShips, // 17
1299  MenuClickShowAir, // 18
1300  MenuClickMap, // 19
1301  nullptr, // 20
1302  MenuClickBuildRail, // 21
1303  MenuClickBuildRoad, // 22
1304  MenuClickBuildTram, // 23
1305  MenuClickBuildWater, // 24
1306  MenuClickBuildAir, // 25
1307  MenuClickForest, // 26
1308  MenuClickMusicWindow, // 27
1309  MenuClickNewspaper, // 28
1310  MenuClickHelp, // 29
1311 };
1312 
1316 protected:
1317  uint spacers;
1318 
1319 public:
1321  {
1322  }
1323 
1330  {
1331  return type == WWT_IMGBTN || type == WWT_IMGBTN_2 || type == WWT_PUSHIMGBTN;
1332  }
1333 
1334  void SetupSmallestSize(Window *w, bool init_array) override
1335  {
1336  this->smallest_x = 0; // Biggest child
1337  this->smallest_y = 0; // Biggest child
1338  this->fill_x = 1;
1339  this->fill_y = 0;
1340  this->resize_x = 1; // We only resize in this direction
1341  this->resize_y = 0; // We never resize in this direction
1342  this->spacers = 0;
1343 
1344  uint nbuttons = 0;
1345  /* First initialise some variables... */
1346  for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1347  child_wid->SetupSmallestSize(w, init_array);
1348  this->smallest_y = std::max(this->smallest_y, child_wid->smallest_y + child_wid->padding_top + child_wid->padding_bottom);
1349  if (this->IsButton(child_wid->type)) {
1350  nbuttons++;
1351  this->smallest_x = std::max(this->smallest_x, child_wid->smallest_x + child_wid->padding_left + child_wid->padding_right);
1352  } else if (child_wid->type == NWID_SPACER) {
1353  this->spacers++;
1354  }
1355  }
1356 
1357  /* ... then in a second pass make sure the 'current' heights are set. Won't change ever. */
1358  for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1359  child_wid->current_y = this->smallest_y;
1360  if (!this->IsButton(child_wid->type)) {
1361  child_wid->current_x = child_wid->smallest_x;
1362  }
1363  }
1364  _toolbar_width = nbuttons * this->smallest_x;
1365  }
1366 
1367  void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override
1368  {
1369  assert(given_width >= this->smallest_x && given_height >= this->smallest_y);
1370 
1371  this->pos_x = x;
1372  this->pos_y = y;
1373  this->current_x = given_width;
1374  this->current_y = given_height;
1375 
1376  /* Figure out what are the visible buttons */
1377  memset(this->visible, 0, sizeof(this->visible));
1378  uint arrangable_count, button_count, spacer_count;
1379  const byte *arrangement = GetButtonArrangement(given_width, arrangable_count, button_count, spacer_count);
1380  for (uint i = 0; i < arrangable_count; i++) {
1381  this->visible[arrangement[i]] = true;
1382  }
1383 
1384  /* Create us ourselves a quick lookup table */
1385  NWidgetBase *widgets[WID_TN_END];
1386  for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1387  if (child_wid->type == NWID_SPACER) continue;
1388  widgets[((NWidgetCore*)child_wid)->index] = child_wid;
1389  }
1390 
1391  /* Now assign the widgets to their rightful place */
1392  uint position = 0; // Place to put next child relative to origin of the container.
1393  uint spacer_space = std::max(0, (int)given_width - (int)(button_count * this->smallest_x)); // Remaining spacing for 'spacer' widgets
1394  uint button_space = given_width - spacer_space; // Remaining spacing for the buttons
1395  uint spacer_i = 0;
1396  uint button_i = 0;
1397 
1398  /* Index into the arrangement indices. The macro lastof cannot be used here! */
1399  const byte *cur_wid = rtl ? &arrangement[arrangable_count - 1] : arrangement;
1400  for (uint i = 0; i < arrangable_count; i++) {
1401  NWidgetBase *child_wid = widgets[*cur_wid];
1402  /* If we have to give space to the spacers, do that */
1403  if (spacer_space != 0) {
1404  NWidgetBase *possible_spacer = rtl ? child_wid->next : child_wid->prev;
1405  if (possible_spacer != nullptr && possible_spacer->type == NWID_SPACER) {
1406  uint add = spacer_space / (spacer_count - spacer_i);
1407  position += add;
1408  spacer_space -= add;
1409  spacer_i++;
1410  }
1411  }
1412 
1413  /* Buttons can be scaled, the others not. */
1414  if (this->IsButton(child_wid->type)) {
1415  child_wid->current_x = button_space / (button_count - button_i);
1416  button_space -= child_wid->current_x;
1417  button_i++;
1418  }
1419  child_wid->AssignSizePosition(sizing, x + position, y, child_wid->current_x, this->current_y, rtl);
1420  position += child_wid->current_x;
1421 
1422  if (rtl) {
1423  cur_wid--;
1424  } else {
1425  cur_wid++;
1426  }
1427  }
1428  }
1429 
1430  void Draw(const Window *w) override
1431  {
1432  /* Draw brown-red toolbar bg. */
1433  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);
1434  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);
1435 
1436  bool rtl = _current_text_dir == TD_RTL;
1437  for (NWidgetBase *child_wid = rtl ? this->tail : this->head; child_wid != nullptr; child_wid = rtl ? child_wid->prev : child_wid->next) {
1438  if (child_wid->type == NWID_SPACER) continue;
1439  if (!this->visible[((NWidgetCore*)child_wid)->index]) continue;
1440 
1441  child_wid->Draw(w);
1442  }
1443  }
1444 
1445  NWidgetCore *GetWidgetFromPos(int x, int y) override
1446  {
1447  if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr;
1448 
1449  for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1450  if (child_wid->type == NWID_SPACER) continue;
1451  if (!this->visible[((NWidgetCore*)child_wid)->index]) continue;
1452 
1453  NWidgetCore *nwid = child_wid->GetWidgetFromPos(x, y);
1454  if (nwid != nullptr) return nwid;
1455  }
1456  return nullptr;
1457  }
1458 
1467  virtual const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const = 0;
1468 };
1469 
1472  const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
1473  {
1474  static const uint SMALLEST_ARRANGEMENT = 14;
1475  static const uint BIGGEST_ARRANGEMENT = 20;
1476 
1477  /* The number of buttons of each row of the toolbar should match the number of items which we want to be visible.
1478  * The total number of buttons should be equal to arrangable_count * 2.
1479  * No bad things happen, but we could see strange behaviours if we have buttons < (arrangable_count * 2) like a
1480  * pause button appearing on the right of the lower toolbar and weird resizing of the widgets even if there is
1481  * enough space.
1482  */
1483  static const byte arrange14[] = {
1484  WID_TN_PAUSE,
1486  WID_TN_TRAINS,
1488  WID_TN_SHIPS,
1492  WID_TN_RAILS,
1493  WID_TN_ROADS,
1494  WID_TN_WATER,
1495  WID_TN_AIR,
1498  // lower toolbar
1500  WID_TN_SAVE,
1502  WID_TN_TOWNS,
1507  WID_TN_GRAPHS,
1511  WID_TN_HELP,
1513  };
1514  static const byte arrange15[] = {
1515  WID_TN_PAUSE,
1518  WID_TN_TRAINS,
1520  WID_TN_SHIPS,
1522  WID_TN_RAILS,
1523  WID_TN_ROADS,
1524  WID_TN_WATER,
1525  WID_TN_AIR,
1530  // lower toolbar
1531  WID_TN_PAUSE,
1534  WID_TN_SAVE,
1535  WID_TN_TOWNS,
1540  WID_TN_GRAPHS,
1544  WID_TN_HELP,
1546  };
1547  static const byte arrange16[] = {
1548  WID_TN_PAUSE,
1552  WID_TN_TRAINS,
1554  WID_TN_SHIPS,
1556  WID_TN_RAILS,
1557  WID_TN_ROADS,
1558  WID_TN_WATER,
1559  WID_TN_AIR,
1564  // lower toolbar
1565  WID_TN_PAUSE,
1567  WID_TN_SAVE,
1568  WID_TN_TOWNS,
1573  WID_TN_GRAPHS,
1577  WID_TN_HELP,
1581  };
1582  static const byte arrange17[] = {
1583  WID_TN_PAUSE,
1588  WID_TN_TRAINS,
1590  WID_TN_SHIPS,
1592  WID_TN_RAILS,
1593  WID_TN_ROADS,
1594  WID_TN_WATER,
1595  WID_TN_AIR,
1600  // lower toolbar
1601  WID_TN_PAUSE,
1603  WID_TN_SAVE,
1606  WID_TN_TOWNS,
1610  WID_TN_GRAPHS,
1614  WID_TN_HELP,
1618  };
1619  static const byte arrange18[] = {
1620  WID_TN_PAUSE,
1624  WID_TN_TOWNS,
1630  WID_TN_RAILS,
1631  WID_TN_ROADS,
1632  WID_TN_WATER,
1633  WID_TN_AIR,
1638  // lower toolbar
1639  WID_TN_PAUSE,
1641  WID_TN_SAVE,
1643  WID_TN_TOWNS,
1646  WID_TN_GRAPHS,
1647  WID_TN_TRAINS,
1649  WID_TN_SHIPS,
1653  WID_TN_HELP,
1657  };
1658  static const byte arrange19[] = {
1659  WID_TN_PAUSE,
1663  WID_TN_TOWNS,
1665  WID_TN_TRAINS,
1667  WID_TN_SHIPS,
1669  WID_TN_RAILS,
1670  WID_TN_ROADS,
1671  WID_TN_WATER,
1672  WID_TN_AIR,
1678  // lower toolbar
1679  WID_TN_PAUSE,
1681  WID_TN_SAVE,
1686  WID_TN_GRAPHS,
1689  WID_TN_RAILS,
1690  WID_TN_ROADS,
1691  WID_TN_WATER,
1692  WID_TN_AIR,
1694  WID_TN_HELP,
1698  };
1699  static const byte arrange20[] = {
1700  WID_TN_PAUSE,
1704  WID_TN_TOWNS,
1706  WID_TN_TRAINS,
1708  WID_TN_SHIPS,
1710  WID_TN_RAILS,
1711  WID_TN_ROADS,
1712  WID_TN_WATER,
1713  WID_TN_AIR,
1716  WID_TN_GOAL,
1720  // lower toolbar
1721  WID_TN_PAUSE,
1723  WID_TN_SAVE,
1728  WID_TN_GRAPHS,
1731  WID_TN_RAILS,
1732  WID_TN_ROADS,
1733  WID_TN_WATER,
1734  WID_TN_AIR,
1736  WID_TN_STORY,
1737  WID_TN_HELP,
1741  };
1742  static const byte arrange_all[] = {
1743  WID_TN_PAUSE,
1746  WID_TN_SAVE,
1748  WID_TN_TOWNS,
1753  WID_TN_STORY,
1754  WID_TN_GOAL,
1755  WID_TN_GRAPHS,
1756  WID_TN_LEAGUE,
1758  WID_TN_TRAINS,
1760  WID_TN_SHIPS,
1764  WID_TN_RAILS,
1765  WID_TN_ROADS,
1766  WID_TN_TRAMS,
1767  WID_TN_WATER,
1768  WID_TN_AIR,
1772  WID_TN_HELP
1773  };
1774 
1775  /* If at least BIGGEST_ARRANGEMENT fit, just spread all the buttons nicely */
1776  uint full_buttons = std::max(CeilDiv(width, this->smallest_x), SMALLEST_ARRANGEMENT);
1777  if (full_buttons > BIGGEST_ARRANGEMENT) {
1778  button_count = arrangable_count = lengthof(arrange_all);
1779  spacer_count = this->spacers;
1780  return arrange_all;
1781  }
1782 
1783  /* Introduce the split toolbar */
1784  static const byte * const arrangements[] = { arrange14, arrange15, arrange16, arrange17, arrange18, arrange19, arrange20 };
1785 
1786  button_count = arrangable_count = full_buttons;
1787  spacer_count = this->spacers;
1788  return arrangements[full_buttons - SMALLEST_ARRANGEMENT] + ((_toolbar_mode == TB_LOWER) ? full_buttons : 0);
1789  }
1790 };
1791 
1794  uint panel_widths[2];
1795 
1796  void SetupSmallestSize(Window *w, bool init_array) override
1797  {
1798  this->NWidgetToolbarContainer::SetupSmallestSize(w, init_array);
1799 
1800  /* Find the size of panel_widths */
1801  uint i = 0;
1802  for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1803  if (child_wid->type == NWID_SPACER || this->IsButton(child_wid->type)) continue;
1804 
1805  assert(i < lengthof(this->panel_widths));
1806  this->panel_widths[i++] = child_wid->current_x;
1807  _toolbar_width += child_wid->current_x;
1808  }
1809  }
1810 
1811  const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
1812  {
1813  static const byte arrange_all[] = {
1814  WID_TE_PAUSE,
1817  WID_TE_SAVE,
1818  WID_TE_SPACER,
1826  WID_TE_ROADS,
1827  WID_TE_TRAMS,
1828  WID_TE_WATER,
1829  WID_TE_TREES,
1830  WID_TE_SIGNS,
1832  WID_TE_HELP,
1833  };
1834  static const byte arrange_nopanel[] = {
1835  WID_TE_PAUSE,
1838  WID_TE_SAVE,
1846  WID_TE_ROADS,
1847  WID_TE_TRAMS,
1848  WID_TE_WATER,
1849  WID_TE_TREES,
1850  WID_TE_SIGNS,
1852  WID_TE_HELP,
1853  };
1854  static const byte arrange_switch[] = {
1860  WID_TE_ROADS,
1861  WID_TE_TRAMS,
1862  WID_TE_WATER,
1863  WID_TE_TREES,
1864  WID_TE_SIGNS,
1866  // lower toolbar
1867  WID_TE_PAUSE,
1870  WID_TE_SAVE,
1876  WID_TE_HELP,
1878  };
1879 
1880  /* If we can place all buttons *and* the panels, show them. */
1881  uint min_full_width = (lengthof(arrange_all) - lengthof(this->panel_widths)) * this->smallest_x + this->panel_widths[0] + this->panel_widths[1];
1882  if (width >= min_full_width) {
1883  width -= this->panel_widths[0] + this->panel_widths[1];
1884  arrangable_count = lengthof(arrange_all);
1885  button_count = arrangable_count - 2;
1886  spacer_count = this->spacers;
1887  return arrange_all;
1888  }
1889 
1890  /* 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 */
1891  uint min_small_width = (lengthof(arrange_switch) - lengthof(this->panel_widths)) * this->smallest_x / 2 + this->panel_widths[1];
1892  if (width > min_small_width) {
1893  width -= this->panel_widths[1];
1894  arrangable_count = lengthof(arrange_nopanel);
1895  button_count = arrangable_count - 1;
1896  spacer_count = this->spacers - 1;
1897  return arrange_nopanel;
1898  }
1899 
1900  /* Split toolbar */
1901  width -= this->panel_widths[1];
1902  arrangable_count = lengthof(arrange_switch) / 2;
1903  button_count = arrangable_count - 1;
1904  spacer_count = 0;
1905  return arrange_switch + ((_toolbar_mode == TB_LOWER) ? arrangable_count : 0);
1906  }
1907 };
1908 
1909 /* --- Toolbar handling for the 'normal' case */
1910 
1911 typedef CallBackFunction ToolbarButtonProc(Window *w);
1912 
1913 static ToolbarButtonProc * const _toolbar_button_procs[] = {
1914  ToolbarPauseClick,
1918  ToolbarMapClick,
1919  ToolbarTownClick,
1920  ToolbarSubsidiesClick,
1921  ToolbarStationsClick,
1922  ToolbarFinancesClick,
1923  ToolbarCompaniesClick,
1924  ToolbarStoryClick,
1925  ToolbarGoalClick,
1926  ToolbarGraphsClick,
1927  ToolbarLeagueClick,
1928  ToolbarIndustryClick,
1929  ToolbarTrainClick,
1930  ToolbarRoadClick,
1931  ToolbarShipClick,
1932  ToolbarAirClick,
1933  ToolbarZoomInClick,
1934  ToolbarZoomOutClick,
1935  ToolbarBuildRailClick,
1936  ToolbarBuildRoadClick,
1937  ToolbarBuildTramClick,
1938  ToolbarBuildWaterClick,
1939  ToolbarBuildAirClick,
1940  ToolbarForestClick,
1941  ToolbarMusicClick,
1942  ToolbarNewspaperClick,
1943  ToolbarHelpClick,
1944  ToolbarSwitchClick,
1945 };
1946 
1949  GUITimer timer;
1950 
1951  MainToolbarWindow(WindowDesc *desc) : Window(desc)
1952  {
1953  this->InitNested(0);
1954 
1955  _last_started_action = CBF_NONE;
1956  CLRBITS(this->flags, WF_WHITE_BORDER);
1957  this->SetWidgetDisabledState(WID_TN_PAUSE, _networking && !_network_server); // if not server, disable pause button
1958  this->SetWidgetDisabledState(WID_TN_FAST_FORWARD, _networking); // if networking, disable fast-forward button
1959  PositionMainToolbar(this);
1961 
1962  this->timer.SetInterval(MILLISECONDS_PER_TICK);
1963  }
1964 
1965  void FindWindowPlacementAndResize(int def_width, int def_height) override
1966  {
1968  }
1969 
1970  void OnPaint() override
1971  {
1972  /* If spectator, disable all construction buttons
1973  * ie : Build road, rail, ships, airports and landscaping
1974  * Since enabled state is the default, just disable when needed */
1976  /* disable company list drop downs, if there are no companies */
1978 
1981 
1982  this->DrawWidgets();
1983  }
1984 
1985  void OnClick(Point pt, int widget, int click_count) override
1986  {
1987  if (_game_mode != GM_MENU && !this->IsWidgetDisabled(widget)) _toolbar_button_procs[widget](this);
1988  }
1989 
1990  void OnDropdownSelect(int widget, int index) override
1991  {
1992  CallBackFunction cbf = _menu_clicked_procs[widget](index);
1993  if (cbf != CBF_NONE) _last_started_action = cbf;
1994  }
1995 
1996  EventState OnHotkey(int hotkey) override
1997  {
1998  CallBackFunction cbf = CBF_NONE;
1999  switch (hotkey) {
2000  case MTHK_PAUSE: ToolbarPauseClick(this); break;
2001  case MTHK_FASTFORWARD: ToolbarFastForwardClick(this); break;
2002  case MTHK_SETTINGS: ShowGameOptions(); break;
2003  case MTHK_SAVEGAME: MenuClickSaveLoad(); break;
2004  case MTHK_LOADGAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break;
2005  case MTHK_SMALLMAP: ShowSmallMap(); break;
2006  case MTHK_TOWNDIRECTORY: ShowTownDirectory(); break;
2007  case MTHK_SUBSIDIES: ShowSubsidiesList(); break;
2008  case MTHK_STATIONS: ShowCompanyStations(_local_company); break;
2009  case MTHK_FINANCES: ShowCompanyFinances(_local_company); break;
2010  case MTHK_COMPANIES: ShowCompany(_local_company); break;
2011  case MTHK_STORY: ShowStoryBook(_local_company); break;
2012  case MTHK_GOAL: ShowGoalsList(_local_company); break;
2013  case MTHK_GRAPHS: ShowOperatingProfitGraph(); break;
2014  case MTHK_LEAGUE: ShowCompanyLeagueTable(); break;
2015  case MTHK_INDUSTRIES: ShowBuildIndustryWindow(); break;
2016  case MTHK_TRAIN_LIST: ShowVehicleListWindow(_local_company, VEH_TRAIN); break;
2017  case MTHK_ROADVEH_LIST: ShowVehicleListWindow(_local_company, VEH_ROAD); break;
2018  case MTHK_SHIP_LIST: ShowVehicleListWindow(_local_company, VEH_SHIP); break;
2019  case MTHK_AIRCRAFT_LIST: ShowVehicleListWindow(_local_company, VEH_AIRCRAFT); break;
2020  case MTHK_ZOOM_IN: ToolbarZoomInClick(this); break;
2021  case MTHK_ZOOM_OUT: ToolbarZoomOutClick(this); break;
2022  case MTHK_BUILD_RAIL: ShowBuildRailToolbar(_last_built_railtype); break;
2023  case MTHK_BUILD_ROAD: ShowBuildRoadToolbar(_last_built_roadtype); break;
2024  case MTHK_BUILD_TRAM: ShowBuildRoadToolbar(_last_built_tramtype); break;
2025  case MTHK_BUILD_DOCKS: ShowBuildDocksToolbar(); break;
2026  case MTHK_BUILD_AIRPORT: ShowBuildAirToolbar(); break;
2027  case MTHK_BUILD_TREES: ShowBuildTreesToolbar(); break;
2028  case MTHK_MUSIC: ShowMusicWindow(); break;
2029  case MTHK_AI_DEBUG: ShowAIDebugWindow(); break;
2030  case MTHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break;
2031  case MTHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break;
2032  case MTHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break;
2033  case MTHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break;
2034  case MTHK_CHEATS: if (!_networking) ShowCheatWindow(); break;
2035  case MTHK_TERRAFORM: ShowTerraformToolbar(); break;
2036  case MTHK_EXTRA_VIEWPORT: ShowExtraViewportWindowForTileUnderCursor(); break;
2037  case MTHK_CLIENT_LIST: if (_networking) ShowClientList(); break;
2038  case MTHK_SIGN_LIST: ShowSignList(); break;
2039  case MTHK_LANDINFO: cbf = PlaceLandBlockInfo(); break;
2040  default: return ES_NOT_HANDLED;
2041  }
2042  if (cbf != CBF_NONE) _last_started_action = cbf;
2043  return ES_HANDLED;
2044  }
2045 
2046  void OnPlaceObject(Point pt, TileIndex tile) override
2047  {
2048  switch (_last_started_action) {
2049  case CBF_PLACE_SIGN:
2050  PlaceProc_Sign(tile);
2051  break;
2052 
2053  case CBF_PLACE_LANDINFO:
2054  ShowLandInfo(tile);
2055  break;
2056 
2057  default: NOT_REACHED();
2058  }
2059  }
2060 
2061  void OnPlaceObjectAbort() override
2062  {
2063  _last_started_action = CBF_NONE;
2064  }
2065 
2066  void OnRealtimeTick(uint delta_ms) override
2067  {
2068  if (!this->timer.Elapsed(delta_ms)) return;
2069  this->timer.SetInterval(MILLISECONDS_PER_TICK);
2070 
2071  if (this->IsWidgetLowered(WID_TN_PAUSE) != !!_pause_mode) {
2074  }
2075 
2076  if (this->IsWidgetLowered(WID_TN_FAST_FORWARD) != (_game_speed != 100)) {
2079  }
2080  }
2081 
2082  void OnTimeout() override
2083  {
2084  /* We do not want to automatically raise the pause, fast forward and
2085  * switchbar buttons; they have to stay down when pressed etc. */
2086  for (uint i = WID_TN_SETTINGS; i < WID_TN_SWITCH_BAR; i++) {
2087  if (this->IsWidgetLowered(i)) {
2088  this->RaiseWidget(i);
2089  this->SetWidgetDirty(i);
2090  }
2091  }
2092  }
2093 
2099  void OnInvalidateData(int data = 0, bool gui_scope = true) override
2100  {
2101  if (!gui_scope) return;
2103  }
2104 
2105  static HotkeyList hotkeys;
2106 };
2107 
2108 const uint16 _maintoolbar_pause_keys[] = {WKC_F1, WKC_PAUSE, 0};
2109 const uint16 _maintoolbar_zoomin_keys[] = {WKC_NUM_PLUS, WKC_EQUALS, WKC_SHIFT | WKC_EQUALS, WKC_SHIFT | WKC_F5, 0};
2110 const uint16 _maintoolbar_zoomout_keys[] = {WKC_NUM_MINUS, WKC_MINUS, WKC_SHIFT | WKC_MINUS, WKC_SHIFT | WKC_F6, 0};
2111 const uint16 _maintoolbar_smallmap_keys[] = {WKC_F4, 'M', 0};
2112 
2113 static Hotkey maintoolbar_hotkeys[] = {
2114  Hotkey(_maintoolbar_pause_keys, "pause", MTHK_PAUSE),
2115  Hotkey((uint16)0, "fastforward", MTHK_FASTFORWARD),
2116  Hotkey(WKC_F2, "settings", MTHK_SETTINGS),
2117  Hotkey(WKC_F3, "saveload", MTHK_SAVEGAME),
2118  Hotkey((uint16)0, "load_game", MTHK_LOADGAME),
2119  Hotkey(_maintoolbar_smallmap_keys, "smallmap", MTHK_SMALLMAP),
2120  Hotkey(WKC_F5, "town_list", MTHK_TOWNDIRECTORY),
2121  Hotkey(WKC_F6, "subsidies", MTHK_SUBSIDIES),
2122  Hotkey(WKC_F7, "station_list", MTHK_STATIONS),
2123  Hotkey(WKC_F8, "finances", MTHK_FINANCES),
2124  Hotkey(WKC_F9, "companies", MTHK_COMPANIES),
2125  Hotkey((uint16)0, "story_book", MTHK_STORY),
2126  Hotkey((uint16)0, "goal_list", MTHK_GOAL),
2127  Hotkey(WKC_F10, "graphs", MTHK_GRAPHS),
2128  Hotkey(WKC_F11, "league", MTHK_LEAGUE),
2129  Hotkey(WKC_F12, "industry_list", MTHK_INDUSTRIES),
2130  Hotkey(WKC_SHIFT | WKC_F1, "train_list", MTHK_TRAIN_LIST),
2131  Hotkey(WKC_SHIFT | WKC_F2, "roadveh_list", MTHK_ROADVEH_LIST),
2132  Hotkey(WKC_SHIFT | WKC_F3, "ship_list", MTHK_SHIP_LIST),
2133  Hotkey(WKC_SHIFT | WKC_F4, "aircraft_list", MTHK_AIRCRAFT_LIST),
2134  Hotkey(_maintoolbar_zoomin_keys, "zoomin", MTHK_ZOOM_IN),
2135  Hotkey(_maintoolbar_zoomout_keys, "zoomout", MTHK_ZOOM_OUT),
2136  Hotkey(WKC_SHIFT | WKC_F7, "build_rail", MTHK_BUILD_RAIL),
2137  Hotkey(WKC_SHIFT | WKC_F8, "build_road", MTHK_BUILD_ROAD),
2138  Hotkey((uint16)0, "build_tram", MTHK_BUILD_TRAM),
2139  Hotkey(WKC_SHIFT | WKC_F9, "build_docks", MTHK_BUILD_DOCKS),
2140  Hotkey(WKC_SHIFT | WKC_F10, "build_airport", MTHK_BUILD_AIRPORT),
2141  Hotkey(WKC_SHIFT | WKC_F11, "build_trees", MTHK_BUILD_TREES),
2142  Hotkey(WKC_SHIFT | WKC_F12, "music", MTHK_MUSIC),
2143  Hotkey((uint16)0, "ai_debug", MTHK_AI_DEBUG),
2144  Hotkey(WKC_CTRL | 'S', "small_screenshot", MTHK_SMALL_SCREENSHOT),
2145  Hotkey(WKC_CTRL | 'P', "zoomedin_screenshot", MTHK_ZOOMEDIN_SCREENSHOT),
2146  Hotkey(WKC_CTRL | 'D', "defaultzoom_screenshot", MTHK_DEFAULTZOOM_SCREENSHOT),
2147  Hotkey((uint16)0, "giant_screenshot", MTHK_GIANT_SCREENSHOT),
2148  Hotkey(WKC_CTRL | WKC_ALT | 'C', "cheats", MTHK_CHEATS),
2149  Hotkey('L', "terraform", MTHK_TERRAFORM),
2150  Hotkey('V', "extra_viewport", MTHK_EXTRA_VIEWPORT),
2151  Hotkey((uint16)0, "client_list", MTHK_CLIENT_LIST),
2152  Hotkey((uint16)0, "sign_list", MTHK_SIGN_LIST),
2153  Hotkey((uint16)0, "land_info", MTHK_LANDINFO),
2154  HOTKEY_LIST_END
2155 };
2156 HotkeyList MainToolbarWindow::hotkeys("maintoolbar", maintoolbar_hotkeys);
2157 
2158 static NWidgetBase *MakeMainToolbar(int *biggest_index)
2159 {
2161  static const SpriteID toolbar_button_sprites[] = {
2162  SPR_IMG_PAUSE, // WID_TN_PAUSE
2163  SPR_IMG_FASTFORWARD, // WID_TN_FAST_FORWARD
2164  SPR_IMG_SETTINGS, // WID_TN_SETTINGS
2165  SPR_IMG_SAVE, // WID_TN_SAVE
2166  SPR_IMG_SMALLMAP, // WID_TN_SMALL_MAP
2167  SPR_IMG_TOWN, // WID_TN_TOWNS
2168  SPR_IMG_SUBSIDIES, // WID_TN_SUBSIDIES
2169  SPR_IMG_COMPANY_LIST, // WID_TN_STATIONS
2170  SPR_IMG_COMPANY_FINANCE, // WID_TN_FINANCES
2171  SPR_IMG_COMPANY_GENERAL, // WID_TN_COMPANIES
2172  SPR_IMG_STORY_BOOK, // WID_TN_STORY
2173  SPR_IMG_GOAL, // WID_TN_GOAL
2174  SPR_IMG_GRAPHS, // WID_TN_GRAPHS
2175  SPR_IMG_COMPANY_LEAGUE, // WID_TN_LEAGUE
2176  SPR_IMG_INDUSTRY, // WID_TN_INDUSTRIES
2177  SPR_IMG_TRAINLIST, // WID_TN_TRAINS
2178  SPR_IMG_TRUCKLIST, // WID_TN_ROADVEHS
2179  SPR_IMG_SHIPLIST, // WID_TN_SHIPS
2180  SPR_IMG_AIRPLANESLIST, // WID_TN_AIRCRAFT
2181  SPR_IMG_ZOOMIN, // WID_TN_ZOOMIN
2182  SPR_IMG_ZOOMOUT, // WID_TN_ZOOMOUT
2183  SPR_IMG_BUILDRAIL, // WID_TN_RAILS
2184  SPR_IMG_BUILDROAD, // WID_TN_ROADS
2185  SPR_IMG_BUILDTRAMS, // WID_TN_TRAMS
2186  SPR_IMG_BUILDWATER, // WID_TN_WATER
2187  SPR_IMG_BUILDAIR, // WID_TN_AIR
2188  SPR_IMG_LANDSCAPING, // WID_TN_LANDSCAPE
2189  SPR_IMG_MUSIC, // WID_TN_MUSIC_SOUND
2190  SPR_IMG_MESSAGES, // WID_TN_MESSAGES
2191  SPR_IMG_QUERY, // WID_TN_HELP
2192  SPR_IMG_SWITCH_TOOLBAR, // WID_TN_SWITCH_BAR
2193  };
2194 
2196  for (uint i = 0; i < WID_TN_END; i++) {
2197  switch (i) {
2198  case WID_TN_SMALL_MAP:
2199  case WID_TN_FINANCES:
2200  case WID_TN_VEHICLE_START:
2201  case WID_TN_ZOOM_IN:
2203  case WID_TN_MUSIC_SOUND:
2204  hor->Add(new NWidgetSpacer(0, 0));
2205  break;
2206  }
2207  NWidgetLeaf *leaf = new NWidgetLeaf(i == WID_TN_SAVE ? WWT_IMGBTN_2 : WWT_IMGBTN, COLOUR_GREY, i, toolbar_button_sprites[i], STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i);
2208  leaf->SetMinimalSize(20, 20);
2209  hor->Add(leaf);
2210  }
2211 
2212  *biggest_index = std::max<int>(*biggest_index, WID_TN_SWITCH_BAR);
2213  return hor;
2214 }
2215 
2216 static const NWidgetPart _nested_toolbar_normal_widgets[] = {
2218 };
2219 
2220 static WindowDesc _toolb_normal_desc(
2221  WDP_MANUAL, nullptr, 0, 0,
2223  WDF_NO_FOCUS,
2224  _nested_toolbar_normal_widgets, lengthof(_nested_toolbar_normal_widgets),
2225  &MainToolbarWindow::hotkeys
2226 );
2227 
2228 
2229 /* --- Toolbar handling for the scenario editor */
2230 
2231 static MenuClickedProc * const _scen_toolbar_dropdown_procs[] = {
2232  nullptr, // 0
2233  nullptr, // 1
2234  MenuClickSettings, // 2
2235  MenuClickSaveLoad, // 3
2236  nullptr, // 4
2237  nullptr, // 5
2238  nullptr, // 6
2239  nullptr, // 7
2240  MenuClickMap, // 8
2241  nullptr, // 9
2242  nullptr, // 10
2243  nullptr, // 11
2244  nullptr, // 12
2245  nullptr, // 13
2246  ToolbarScenBuildRoad, // 14
2247  ToolbarScenBuildTram, // 15
2248  nullptr, // 16
2249  nullptr, // 17
2250  nullptr, // 18
2251  nullptr, // 19
2252  MenuClickMusicWindow, // 20
2253  MenuClickHelp, // 21
2254  nullptr, // 22
2255 };
2256 
2257 static ToolbarButtonProc * const _scen_toolbar_button_procs[] = {
2258  ToolbarPauseClick,
2262  ToolbarBtn_NULL,
2264  ToolbarScenDateBackward,
2265  ToolbarScenDateForward,
2266  ToolbarScenMapTownDir,
2267  ToolbarZoomInClick,
2268  ToolbarZoomOutClick,
2269  ToolbarScenGenLand,
2270  ToolbarScenGenTown,
2271  ToolbarScenGenIndustry,
2272  ToolbarScenBuildRoadClick,
2273  ToolbarScenBuildTramClick,
2274  ToolbarScenBuildDocks,
2275  ToolbarScenPlantTrees,
2276  ToolbarScenPlaceSign,
2277  ToolbarBtn_NULL,
2278  ToolbarMusicClick,
2279  ToolbarHelpClick,
2280  ToolbarSwitchClick,
2281 };
2282 
2283 enum MainToolbarEditorHotkeys {
2284  MTEHK_PAUSE,
2285  MTEHK_FASTFORWARD,
2286  MTEHK_SETTINGS,
2287  MTEHK_SAVEGAME,
2288  MTEHK_GENLAND,
2289  MTEHK_GENTOWN,
2290  MTEHK_GENINDUSTRY,
2291  MTEHK_BUILD_ROAD,
2292  MTEHK_BUILD_TRAM,
2293  MTEHK_BUILD_DOCKS,
2294  MTEHK_BUILD_TREES,
2295  MTEHK_SIGN,
2296  MTEHK_MUSIC,
2297  MTEHK_LANDINFO,
2298  MTEHK_SMALL_SCREENSHOT,
2299  MTEHK_ZOOMEDIN_SCREENSHOT,
2300  MTEHK_DEFAULTZOOM_SCREENSHOT,
2301  MTEHK_GIANT_SCREENSHOT,
2302  MTEHK_ZOOM_IN,
2303  MTEHK_ZOOM_OUT,
2304  MTEHK_TERRAFORM,
2305  MTEHK_SMALLMAP,
2306  MTEHK_EXTRA_VIEWPORT,
2307 };
2308 
2310  GUITimer timer;
2311 
2313  {
2314  this->InitNested(0);
2315 
2316  _last_started_action = CBF_NONE;
2317  CLRBITS(this->flags, WF_WHITE_BORDER);
2318  PositionMainToolbar(this);
2320 
2321  this->timer.SetInterval(MILLISECONDS_PER_TICK);
2322  }
2323 
2324  void FindWindowPlacementAndResize(int def_width, int def_height) override
2325  {
2327  }
2328 
2329  void OnPaint() override
2330  {
2335 
2336  this->DrawWidgets();
2337  }
2338 
2339  void SetStringParameters(int widget) const override
2340  {
2341  switch (widget) {
2342  case WID_TE_DATE:
2344  break;
2345  }
2346  }
2347 
2348  void DrawWidget(const Rect &r, int widget) const override
2349  {
2350  switch (widget) {
2351  case WID_TE_SPACER: {
2352  int height = r.bottom - r.top;
2353  if (height > 2 * FONT_HEIGHT_NORMAL) {
2354  DrawString(r.left, r.right, (height + 1) / 2 - FONT_HEIGHT_NORMAL, STR_SCENEDIT_TOOLBAR_OPENTTD, TC_FROMSTRING, SA_HOR_CENTER);
2355  DrawString(r.left, r.right, (height + 1) / 2, STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR, TC_FROMSTRING, SA_HOR_CENTER);
2356  } else {
2357  DrawString(r.left, r.right, (height - FONT_HEIGHT_NORMAL) / 2, STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR, TC_FROMSTRING, SA_HOR_CENTER);
2358  }
2359  break;
2360  }
2361  }
2362  }
2363 
2364  void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
2365  {
2366  switch (widget) {
2367  case WID_TE_SPACER:
2368  size->width = std::max(GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_OPENTTD).width, GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR).width) + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
2369  break;
2370 
2371  case WID_TE_DATE:
2372  SetDParam(0, ConvertYMDToDate(MAX_YEAR, 0, 1));
2373  *size = GetStringBoundingBox(STR_WHITE_DATE_LONG);
2374  break;
2375  }
2376  }
2377 
2378  void OnClick(Point pt, int widget, int click_count) override
2379  {
2380  if (_game_mode == GM_MENU) return;
2381  CallBackFunction cbf = _scen_toolbar_button_procs[widget](this);
2382  if (cbf != CBF_NONE) _last_started_action = cbf;
2383  }
2384 
2385  void OnDropdownSelect(int widget, int index) override
2386  {
2387  CallBackFunction cbf = _scen_toolbar_dropdown_procs[widget](index);
2388  if (cbf != CBF_NONE) _last_started_action = cbf;
2389  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
2390  }
2391 
2392  EventState OnHotkey(int hotkey) override
2393  {
2394  CallBackFunction cbf = CBF_NONE;
2395  switch (hotkey) {
2396  case MTEHK_PAUSE: ToolbarPauseClick(this); break;
2397  case MTEHK_FASTFORWARD: ToolbarFastForwardClick(this); break;
2398  case MTEHK_SETTINGS: ShowGameOptions(); break;
2399  case MTEHK_SAVEGAME: MenuClickSaveLoad(); break;
2400  case MTEHK_GENLAND: ToolbarScenGenLand(this); break;
2401  case MTEHK_GENTOWN: ToolbarScenGenTown(this); break;
2402  case MTEHK_GENINDUSTRY: ToolbarScenGenIndustry(this); break;
2403  case MTEHK_BUILD_ROAD: ToolbarScenBuildRoadClick(this); break;
2404  case MTEHK_BUILD_TRAM: ToolbarScenBuildTramClick(this); break;
2405  case MTEHK_BUILD_DOCKS: ToolbarScenBuildDocks(this); break;
2406  case MTEHK_BUILD_TREES: ToolbarScenPlantTrees(this); break;
2407  case MTEHK_SIGN: cbf = ToolbarScenPlaceSign(this); break;
2408  case MTEHK_MUSIC: ShowMusicWindow(); break;
2409  case MTEHK_LANDINFO: cbf = PlaceLandBlockInfo(); break;
2410  case MTEHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break;
2411  case MTEHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break;
2412  case MTEHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break;
2413  case MTEHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break;
2414  case MTEHK_ZOOM_IN: ToolbarZoomInClick(this); break;
2415  case MTEHK_ZOOM_OUT: ToolbarZoomOutClick(this); break;
2416  case MTEHK_TERRAFORM: ShowEditorTerraformToolbar(); break;
2417  case MTEHK_SMALLMAP: ShowSmallMap(); break;
2418  case MTEHK_EXTRA_VIEWPORT: ShowExtraViewportWindowForTileUnderCursor(); break;
2419  default: return ES_NOT_HANDLED;
2420  }
2421  if (cbf != CBF_NONE) _last_started_action = cbf;
2422  return ES_HANDLED;
2423  }
2424 
2425  void OnPlaceObject(Point pt, TileIndex tile) override
2426  {
2427  switch (_last_started_action) {
2428  case CBF_PLACE_SIGN:
2429  PlaceProc_Sign(tile);
2430  break;
2431 
2432  case CBF_PLACE_LANDINFO:
2433  ShowLandInfo(tile);
2434  break;
2435 
2436  default: NOT_REACHED();
2437  }
2438  }
2439 
2440  void OnPlaceObjectAbort() override
2441  {
2442  _last_started_action = CBF_NONE;
2443  }
2444 
2445  void OnTimeout() override
2446  {
2450  }
2451 
2452  void OnRealtimeTick(uint delta_ms) override
2453  {
2454  if (!this->timer.Elapsed(delta_ms)) return;
2455  this->timer.SetInterval(MILLISECONDS_PER_TICK);
2456 
2457  if (this->IsWidgetLowered(WID_TE_PAUSE) != !!_pause_mode) {
2459  this->SetDirty();
2460  }
2461 
2462  if (this->IsWidgetLowered(WID_TE_FAST_FORWARD) != (_game_speed != 100)) {
2464  this->SetDirty();
2465  }
2466  }
2467 
2473  void OnInvalidateData(int data = 0, bool gui_scope = true) override
2474  {
2475  if (!gui_scope) return;
2477  }
2478 
2479  void OnQueryTextFinished(char *str) override
2480  {
2481  /* Was 'cancel' pressed? */
2482  if (str == nullptr) return;
2483 
2484  int32 value;
2485  if (!StrEmpty(str)) {
2486  value = atoi(str);
2487  } else {
2488  /* An empty string means revert to the default */
2489  value = DEF_START_YEAR;
2490  }
2491  SetStartingYear(value);
2492 
2493  this->SetDirty();
2494  }
2495 
2496  static HotkeyList hotkeys;
2497 };
2498 
2499 static Hotkey scenedit_maintoolbar_hotkeys[] = {
2500  Hotkey(_maintoolbar_pause_keys, "pause", MTEHK_PAUSE),
2501  Hotkey((uint16)0, "fastforward", MTEHK_FASTFORWARD),
2502  Hotkey(WKC_F2, "settings", MTEHK_SETTINGS),
2503  Hotkey(WKC_F3, "saveload", MTEHK_SAVEGAME),
2504  Hotkey(WKC_F4, "gen_land", MTEHK_GENLAND),
2505  Hotkey(WKC_F5, "gen_town", MTEHK_GENTOWN),
2506  Hotkey(WKC_F6, "gen_industry", MTEHK_GENINDUSTRY),
2507  Hotkey(WKC_F7, "build_road", MTEHK_BUILD_ROAD),
2508  Hotkey((uint16)0, "build_tram", MTEHK_BUILD_TRAM),
2509  Hotkey(WKC_F8, "build_docks", MTEHK_BUILD_DOCKS),
2510  Hotkey(WKC_F9, "build_trees", MTEHK_BUILD_TREES),
2511  Hotkey(WKC_F10, "build_sign", MTEHK_SIGN),
2512  Hotkey(WKC_F11, "music", MTEHK_MUSIC),
2513  Hotkey(WKC_F12, "land_info", MTEHK_LANDINFO),
2514  Hotkey(WKC_CTRL | 'S', "small_screenshot", MTEHK_SMALL_SCREENSHOT),
2515  Hotkey(WKC_CTRL | 'P', "zoomedin_screenshot", MTEHK_ZOOMEDIN_SCREENSHOT),
2516  Hotkey(WKC_CTRL | 'D', "defaultzoom_screenshot", MTEHK_DEFAULTZOOM_SCREENSHOT),
2517  Hotkey((uint16)0, "giant_screenshot", MTEHK_GIANT_SCREENSHOT),
2518  Hotkey(_maintoolbar_zoomin_keys, "zoomin", MTEHK_ZOOM_IN),
2519  Hotkey(_maintoolbar_zoomout_keys, "zoomout", MTEHK_ZOOM_OUT),
2520  Hotkey('L', "terraform", MTEHK_TERRAFORM),
2521  Hotkey('M', "smallmap", MTEHK_SMALLMAP),
2522  Hotkey('V', "extra_viewport", MTEHK_EXTRA_VIEWPORT),
2523  HOTKEY_LIST_END
2524 };
2525 HotkeyList ScenarioEditorToolbarWindow::hotkeys("scenedit_maintoolbar", scenedit_maintoolbar_hotkeys);
2526 
2527 static const NWidgetPart _nested_toolb_scen_inner_widgets[] = {
2528  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_PAUSE), SetDataTip(SPR_IMG_PAUSE, STR_TOOLBAR_TOOLTIP_PAUSE_GAME),
2529  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_FAST_FORWARD), SetDataTip(SPR_IMG_FASTFORWARD, STR_TOOLBAR_TOOLTIP_FORWARD),
2530  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SETTINGS), SetDataTip(SPR_IMG_SETTINGS, STR_TOOLBAR_TOOLTIP_OPTIONS),
2531  NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_TE_SAVE), SetDataTip(SPR_IMG_SAVE, STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO),
2533  NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_SPACER), EndContainer(),
2535  NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_DATE_PANEL),
2536  NWidget(NWID_HORIZONTAL), SetPIP(2, 2, 2), SetPadding(1),
2537  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_BACKWARD), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1),
2538  NWidget(WWT_TEXT, COLOUR_GREY, WID_TE_DATE), SetDataTip(STR_WHITE_DATE_LONG, STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE), SetAlignment(SA_CENTER), SetFill(0, 1),
2539  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_FORWARD), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1),
2540  EndContainer(),
2541  EndContainer(),
2543  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SMALL_MAP), SetDataTip(SPR_IMG_SMALLMAP, STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY),
2545  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_IN), SetDataTip(SPR_IMG_ZOOMIN, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN),
2546  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_OUT), SetDataTip(SPR_IMG_ZOOMOUT, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT),
2548  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_LAND_GENERATE), SetDataTip(SPR_IMG_LANDSCAPING, STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION),
2549  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TOWN_GENERATE), SetDataTip(SPR_IMG_TOWN, STR_SCENEDIT_TOOLBAR_TOWN_GENERATION),
2550  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_INDUSTRY), SetDataTip(SPR_IMG_INDUSTRY, STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION),
2551  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_ROADS), SetDataTip(SPR_IMG_BUILDROAD, STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION),
2552  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_TRAMS), SetDataTip(SPR_IMG_BUILDTRAMS, STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION),
2553  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_WATER), SetDataTip(SPR_IMG_BUILDWATER, STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS),
2554  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TREES), SetDataTip(SPR_IMG_PLANTTREES, STR_SCENEDIT_TOOLBAR_PLANT_TREES),
2555  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_SIGNS), SetDataTip(SPR_IMG_SIGN, STR_SCENEDIT_TOOLBAR_PLACE_SIGN),
2557  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_MUSIC_SOUND), SetDataTip(SPR_IMG_MUSIC, STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW),
2558  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_HELP), SetDataTip(SPR_IMG_QUERY, STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION),
2559  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SWITCH_BAR), SetDataTip(SPR_IMG_SWITCH_TOOLBAR, STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR),
2560 };
2561 
2562 static NWidgetBase *MakeScenarioToolbar(int *biggest_index)
2563 {
2564  return MakeNWidgets(_nested_toolb_scen_inner_widgets, lengthof(_nested_toolb_scen_inner_widgets), biggest_index, new NWidgetScenarioToolbarContainer());
2565 }
2566 
2567 static const NWidgetPart _nested_toolb_scen_widgets[] = {
2568  NWidgetFunction(MakeScenarioToolbar),
2569 };
2570 
2571 static WindowDesc _toolb_scen_desc(
2572  WDP_MANUAL, nullptr, 0, 0,
2574  WDF_NO_FOCUS,
2575  _nested_toolb_scen_widgets, lengthof(_nested_toolb_scen_widgets),
2576  &ScenarioEditorToolbarWindow::hotkeys
2577 );
2578 
2581 {
2582  /* Clean old GUI values; railtype is (re)set by rail_gui.cpp */
2583  _last_built_roadtype = ROADTYPE_ROAD;
2584  _last_built_tramtype = ROADTYPE_TRAM;
2585 
2586  if (_game_mode == GM_EDITOR) {
2587  new ScenarioEditorToolbarWindow(&_toolb_scen_desc);
2588  } else {
2589  new MainToolbarWindow(&_toolb_normal_desc);
2590  }
2591 }
VEH_AIRCRAFT
@ VEH_AIRCRAFT
Aircraft vehicle type.
Definition: vehicle_type.h:27
SaveLoadEditorMenuEntries
SaveLoadEditorMenuEntries
SaveLoad entries in scenario editor mode.
Definition: toolbar_gui.cpp:377
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:51
ShowNewGRFSettings
void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfig **config)
Setup the NewGRF gui.
Definition: newgrf_gui.cpp:1995
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:584
ShowSpriteAlignerWindow
void ShowSpriteAlignerWindow()
Show the window for aligning sprites.
Definition: newgrf_debug_gui.cpp:1101
ShowIndustryCargoesWindow
void ShowIndustryCargoesWindow()
Open the industry and cargoes window with an industry.
Definition: industry_gui.cpp:3171
ScenarioEditorToolbarWindow::OnDropdownSelect
void OnDropdownSelect(int widget, int index) override
A dropdown option associated to this window has been selected.
Definition: toolbar_gui.cpp:2385
PopupMainToolbMenu
static void PopupMainToolbMenu(Window *w, int widget, DropDownList &&list, int def)
Pop up a generic text only menu.
Definition: toolbar_gui.cpp:184
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:84
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:1241
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:517
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
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:309
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:321
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:2217
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:189
MenuClickIndustry
static CallBackFunction MenuClickIndustry(int index)
Handle click on the entry in the Industry menu.
Definition: toolbar_gui.cpp:735
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:135
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:680
SetPadding
static NWidgetPart SetPadding(uint8 top, uint8 right, uint8 bottom, uint8 left)
Widget part function for setting additional space around a widget.
Definition: widget_type.h:1141
PositionMainToolbar
int PositionMainToolbar(Window *w)
(Re)position main toolbar window at the screen.
Definition: window.cpp:3409
ShowBuildAirToolbar
Window * ShowBuildAirToolbar()
Open the build airport toolbar window.
Definition: airport_gui.cpp:229
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:210
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:1059
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:1004
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:1047
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:281
NWidgetToolbarContainer::GetWidgetFromPos
NWidgetCore * GetWidgetFromPos(int x, int y) override
Definition: toolbar_gui.cpp:1445
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:96
NetworkClientRequestMove
void NetworkClientRequestMove(CompanyID company_id, const std::string &pass)
Notify the server of this client wanting to be moved to another company.
Definition: network_client.cpp:1188
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:321
_network_server
bool _network_server
network-server is active
Definition: network.cpp:59
NWidgetToolbarContainer::Draw
void Draw(const Window *w) override
Definition: toolbar_gui.cpp:1430
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:99
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:404
MainToolbarWindow::OnRealtimeTick
void OnRealtimeTick(uint delta_ms) override
Called periodically.
Definition: toolbar_gui.cpp:2066
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:1146
misc_cmd.h
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:570
WC_SIGN_LIST
@ WC_SIGN_LIST
Sign list; Window numbers:
Definition: window_type.h:270
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:1915
WID_TN_GOAL
@ WID_TN_GOAL
Goal menu.
Definition: toolbar_widget.h:26
TileIndex
The index/ID of a Tile.
Definition: tile_type.h:85
WDF_NO_FOCUS
@ WDF_NO_FOCUS
This window won't get focus/make any other window lose focus when click.
Definition: window_gui.h:212
ToolbarScenSaveOrLoad
static CallBackFunction ToolbarScenSaveOrLoad(Window *w)
Handle click on SaveLoad button in toolbar in the scenario editor.
Definition: toolbar_gui.cpp:416
NWidgetScenarioToolbarContainer::SetupSmallestSize
void SetupSmallestSize(Window *w, bool init_array) override
Definition: toolbar_gui.cpp:1796
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:1268
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:92
screenshot_gui.h
ShowGameOptions
void ShowGameOptions()
Open the game options window.
Definition: settings_gui.cpp:752
NWidgetLeaf
Leaf widget.
Definition: widget_type.h:817
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:378
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:2490
_settings_client
ClientSettings _settings_client
The current settings for this game.
Definition: settings.cpp:53
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:645
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:856
CallBackFunction
CallBackFunction
Callback functions.
Definition: toolbar_gui.cpp:78
newgrf_debug.h
network_gui.h
MainToolbarWindow::OnHotkey
EventState OnHotkey(int hotkey) override
A hotkey has been pressed.
Definition: toolbar_gui.cpp:1996
NWidgetScenarioToolbarContainer
Container for the scenario editor's toolbar.
Definition: toolbar_gui.cpp:1793
_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:2392
VEH_ROAD
@ VEH_ROAD
Road vehicle type.
Definition: vehicle_type.h:25
Vehicle
Vehicle data structure.
Definition: vehicle_base.h:224
WID_TE_DATE_FORWARD
@ WID_TE_DATE_FORWARD
Increase the date of the scenario.
Definition: toolbar_widget.h:60
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:646
MenuClickMap
static CallBackFunction MenuClickMap(int index)
Handle click on one of the entries in the Map menu.
Definition: toolbar_gui.cpp:490
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:184
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:3055
MenuClickBuildTram
static CallBackFunction MenuClickBuildTram(int index)
Handle click on the entry in the Build Tram menu.
Definition: toolbar_gui.cpp:917
Window::Window
Window(WindowDesc *desc)
Empty constructor, initialization has been moved to InitNested() called from the constructor of the d...
Definition: window.cpp:1799
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:196
NWidgetPart
Partial widget specification to allow NWidgets to be written nested.
Definition: widget_type.h:973
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:1109
WID_TE_DATE_PANEL
@ WID_TE_DATE_PANEL
Container for the date widgets.
Definition: toolbar_widget.h:72
toolbar_widget.h
GetStringBoundingBox
Dimension GetStringBoundingBox(const char *str, FontSize start_fontsize)
Return the string dimension in pixels.
Definition: gfx.cpp:891
DropDownListCompanyItem
Drop down list entry for showing a company entry, with companies 'blob'.
Definition: toolbar_gui.cpp:118
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:581
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:292
MainToolbarWindow::OnTimeout
void OnTimeout() override
Called when this window's timeout has been reached.
Definition: toolbar_gui.cpp:2082
screenshot.h
PM_UNPAUSED
@ PM_UNPAUSED
A normal unpaused game.
Definition: openttd.h:61
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:193
WindowDesc
High level window description.
Definition: window_gui.h:168
WID_TN_LEAGUE
@ WID_TN_LEAGUE
Company league menu.
Definition: toolbar_widget.h:28
ScenarioEditorToolbarWindow::SetStringParameters
void SetStringParameters(int widget) const override
Initialize string parameters for a widget.
Definition: toolbar_gui.cpp:2339
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:2046
window_gui.h
DO_FULL_ANIMATION
@ DO_FULL_ANIMATION
Perform palette animation.
Definition: openttd.h:48
ShowCompanyFinances
void ShowCompanyFinances(CompanyID company)
Open the finances window of a company.
Definition: company_gui.cpp:549
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:2364
ScenarioEditorToolbarWindow::FindWindowPlacementAndResize
void FindWindowPlacementAndResize(int def_width, int def_height) override
Resize window towards the default size.
Definition: toolbar_gui.cpp:2324
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:2440
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:59
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:403
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:1811
Window::resize
ResizeInfo resize
Resize information.
Definition: window_gui.h:317
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:207
tilehighlight_func.h
ClientSettings::sound
SoundSettings sound
sound effect settings
Definition: settings_type.h:601
ToolbarScenBuildTram
static CallBackFunction ToolbarScenBuildTram(int index)
Handle click on the entry in the Build Tram menu.
Definition: toolbar_gui.cpp:1243
NWidgetContainer::tail
NWidgetBase * tail
Pointer to last widget in container.
Definition: widget_type.h:416
Window::InitNested
void InitNested(WindowNumber number=0)
Perform complete initialization of the Window with nested widgets, to allow use.
Definition: window.cpp:1789
NWidgetBase::type
WidgetType type
Type of the widget / nested widget.
Definition: widget_type.h:175
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:84
Window::height
int height
Height of the window (number of pixels down in y direction)
Definition: window_gui.h:315
_toolbar_width
uint _toolbar_width
Width of the toolbar, shared by statusbar.
Definition: toolbar_gui.cpp:64
WF_WHITE_BORDER
@ WF_WHITE_BORDER
Window white border counter bit mask.
Definition: window_gui.h:242
ShowCompanyStations
void ShowCompanyStations(CompanyID company)
Opens window with list of company's stations.
Definition: station_gui.cpp:757
SaveLoadNormalMenuEntries
SaveLoadNormalMenuEntries
SaveLoad entries in normal game mode.
Definition: toolbar_gui.cpp:390
Window::SetDirty
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
Definition: window.cpp:993
highscore.h
NWidgetBase::smallest_x
uint smallest_x
Smallest horizontal size of the widget in a filled window.
Definition: widget_type.h:183
WD_FRAMERECT_LEFT
@ WD_FRAMERECT_LEFT
Offset at left to draw the frame rectangular area.
Definition: window_gui.h:62
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
WD_FRAMERECT_RIGHT
@ WD_FRAMERECT_RIGHT
Offset at right to draw the frame rectangular area.
Definition: window_gui.h:63
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:810
NWidgetBase
Baseclass for nested widgets.
Definition: widget_type.h:126
AllocateToolbar
void AllocateToolbar()
Allocate the toolbar.
Definition: toolbar_gui.cpp:2580
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:964
ToolbarOptionsClick
static CallBackFunction ToolbarOptionsClick(Window *w)
Handle click on Options button in toolbar.
Definition: toolbar_gui.cpp:315
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:443
_pause_mode
PauseMode _pause_mode
The current pause mode.
Definition: gfx.cpp:50
MenuClickShowRoad
static CallBackFunction MenuClickShowRoad(int index)
Handle click on the entry in the Road Vehicles menu.
Definition: toolbar_gui.cpp:790
MenuClickBuildRail
static CallBackFunction MenuClickBuildRail(int index)
Handle click on the entry in the Build Rail menu.
Definition: toolbar_gui.cpp:873
road_gui.h
_settings_game
GameSettings _settings_game
Game settings of a running game or the scenario editor.
Definition: settings.cpp:54
linkgraph_gui.h
NWidgetToolbarContainer::IsButton
bool IsButton(WidgetType type) const
Check whether the given widget type is a button for us.
Definition: toolbar_gui.cpp:1329
GameSettings::economy
EconomySettings economy
settings to change the economy
Definition: settings_type.h:590
Window::SetWidgetDisabledState
void SetWidgetDisabledState(byte widget_index, bool disab_stat)
Sets the enabled/disabled status of a widget.
Definition: window_gui.h:386
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:46
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:1125
Window::flags
WindowFlags flags
Window flags.
Definition: window_gui.h:305
WF_TIMEOUT
@ WF_TIMEOUT
Window timeout counter.
Definition: window_gui.h:234
CLIENT_ID_SERVER
@ CLIENT_ID_SERVER
Servers always have this ID.
Definition: network_type.h:49
MenuClickSubsidies
static CallBackFunction MenuClickSubsidies(int index)
Handle click on the entry in the Subsidies menu.
Definition: toolbar_gui.cpp:542
MenuClickShowAir
static CallBackFunction MenuClickShowAir(int index)
Handle click on the entry in the Aircraft menu.
Definition: toolbar_gui.cpp:830
MenuClickSaveLoad
static CallBackFunction MenuClickSaveLoad(int index=0)
Handle click on one of the entries in the SaveLoad menu.
Definition: toolbar_gui.cpp:428
ToggleDirtyBlocks
void ToggleDirtyBlocks()
Toggle drawing of the dirty blocks.
Definition: toolbar_gui.cpp:1086
StrEmpty
static bool StrEmpty(const char *s)
Check if a string buffer is empty.
Definition: string_func.h:67
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:58
ROADTYPE_ROAD
@ ROADTYPE_ROAD
Basic road type.
Definition: road_type.h:24
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:1044
ToolbarScenDatePanel
static CallBackFunction ToolbarScenDatePanel(Window *w)
Called when clicking at the date panel of the scenario editor toolbar.
Definition: toolbar_gui.cpp:1151
road.h
MainToolbarWindow::FindWindowPlacementAndResize
void FindWindowPlacementAndResize(int def_width, int def_height) override
Resize window towards the default size.
Definition: toolbar_gui.cpp:1965
Point
Coordinates of a point in 2D.
Definition: geometry_type.hpp:21
EconomySettings::found_town
TownFounding found_town
town founding.
Definition: settings_type.h:523
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:334
NWidgetContainer::head
NWidgetBase * head
Pointer to first widget in container.
Definition: widget_type.h:415
NWidgetToolbarContainer::SetupSmallestSize
void SetupSmallestSize(Window *w, bool init_array) override
Definition: toolbar_gui.cpp:1334
date_func.h
ShowCheatWindow
void ShowCheatWindow()
Open cheat window.
Definition: cheat_gui.cpp:419
stdafx.h
ShowSaveLoadDialog
void ShowSaveLoadDialog(AbstractFileType abstract_filetype, SaveLoadOperation fop)
Launch save/load dialog in the given mode.
Definition: fios_gui.cpp:927
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:2099
DO_FULL_DETAIL
@ DO_FULL_DETAIL
Also draw details of track and roads.
Definition: openttd.h:49
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:119
ToggleBoundingBoxes
void ToggleBoundingBoxes()
Toggle drawing of sprites' bounding boxes.
Definition: toolbar_gui.cpp:1069
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:2378
MenuClickCompany
static CallBackFunction MenuClickCompany(int index)
Handle click on the entry in the Company menu.
Definition: toolbar_gui.cpp:604
MainToolbarWindow
Main toolbar.
Definition: toolbar_gui.cpp:1948
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:187
ToolbarScenBuildRoad
static CallBackFunction ToolbarScenBuildRoad(int index)
Handle click on the entry in the Build Road menu.
Definition: toolbar_gui.cpp:1223
WC_NONE
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
Definition: window_type.h:37
SA_HOR_CENTER
@ SA_HOR_CENTER
Horizontally center the text.
Definition: gfx_type.h:329
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:192
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:144
GetSpriteSize
Dimension GetSpriteSize(SpriteID sprid, Point *offset, ZoomLevel zoom)
Get the size of a sprite.
Definition: gfx.cpp:979
ShowHighscoreTable
void ShowHighscoreTable(int difficulty=SP_CUSTOM, int8 rank=-1)
Show the highscore table for a given difficulty.
Definition: highscore_gui.cpp:234
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:640
ScenarioEditorToolbarWindow::OnQueryTextFinished
void OnQueryTextFinished(char *str) override
The query window opened from this window has closed.
Definition: toolbar_gui.cpp:2479
NWidgetMainToolbarContainer
Container for the 'normal' main toolbar.
Definition: toolbar_gui.cpp:1471
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:105
NWidgetBase::fill_y
uint fill_y
Vertical fill stepsize (from initial size, 0 means not resizable).
Definition: widget_type.h:177
MakeMainToolbar
static NWidgetBase * MakeMainToolbar(int *biggest_index)
Definition: toolbar_gui.cpp:2158
SoundSettings::confirm
bool confirm
Play sound effect on successful constructions or other actions.
Definition: settings_type.h:211
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:1094
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:386
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:2473
MainToolbarWindow::OnPaint
void OnPaint() override
The window must be repainted.
Definition: toolbar_gui.cpp:1970
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:408
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:1114
PC_VERY_DARK_RED
static const uint8 PC_VERY_DARK_RED
Almost-black red palette colour.
Definition: gfx_func.h:209
NWidgetBase::pos_x
int pos_x
Horizontal position of top-left corner of the widget in the window.
Definition: widget_type.h:189
Pool::PoolItem<&_company_pool >::GetNumItems
static size_t GetNumItems()
Returns number of valid items in the pool.
Definition: pool_type.hpp:367
DeleteAllMessages
void DeleteAllMessages()
Delete all messages and close their corresponding window (if any).
Definition: window.cpp:3315
WIDGET_LIST_END
static const int WIDGET_LIST_END
indicate the end of widgets' list for vararg functions
Definition: widget_type.h:20
WWT_TEXT
@ WWT_TEXT
Pure simple text.
Definition: widget_type.h:56
Window::SetWidgetsLoweredState
void CDECL SetWidgetsLoweredState(bool lowered_stat, int widgets,...)
Sets the lowered/raised status of a list of widgets.
Definition: window.cpp:566
FONT_HEIGHT_NORMAL
#define FONT_HEIGHT_NORMAL
Height of characters in the normal (FS_NORMAL) font.
Definition: gfx_func.h:168
ScenarioEditorToolbarWindow
Definition: toolbar_gui.cpp:2309
NWidget
static NWidgetPart NWidget(WidgetType tp, Colours col, int16 idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1209
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:176
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:3251
SetStartingYear
void SetStartingYear(Year year)
Set the starting year for a scenario.
Definition: toolbar_gui.cpp:1100
MenuClickGoal
static CallBackFunction MenuClickGoal(int index)
Handle click on the entry in the Goal menu.
Definition: toolbar_gui.cpp:660
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:941
ShowLastNewsMessage
void ShowLastNewsMessage()
Show previous news item.
Definition: news_gui.cpp:1052
PM_PAUSED_NORMAL
@ PM_PAUSED_NORMAL
A game normally paused.
Definition: openttd.h:62
Window::SetWidgetsDisabledState
void CDECL SetWidgetsDisabledState(bool disab_stat, int widgets,...)
Sets the enabled/disabled status of a list of widgets.
Definition: window.cpp:547
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:1033
NWidgetToolbarContainer
Full blown container to make it behave exactly as we want :)
Definition: toolbar_gui.cpp:1314
NWidgetBase::resize_y
uint resize_y
Vertical resize step (0 means not resizable).
Definition: widget_type.h:179
Window::IsWidgetLowered
bool IsWidgetLowered(byte widget_index) const
Gets the lowered state of a widget.
Definition: window_gui.h:487
ShowSmallMap
void ShowSmallMap()
Show the smallmap window.
Definition: smallmap_gui.cpp:1870
ShowAIDebugWindow
Window * ShowAIDebugWindow(CompanyID show_company)
Open the AI debug window and select the given company.
Definition: ai_gui.cpp:1544
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:1985
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:47
news_gui.h
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:123
ScenarioEditorToolbarWindow::DrawWidget
void DrawWidget(const Rect &r, int widget) const override
Draw the contents of a nested widget.
Definition: toolbar_gui.cpp:2348
RoadType
RoadType
The different roadtypes we support.
Definition: road_type.h:22
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:43
GameCreationSettings::starting_year
Year starting_year
starting date
Definition: settings_type.h:308
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:348
DO_SHOW_TOWN_NAMES
@ DO_SHOW_TOWN_NAMES
Display town names.
Definition: openttd.h:45
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:1794
WID_TN_INDUSTRIES
@ WID_TN_INDUSTRIES
Industry menu.
Definition: toolbar_widget.h:29
SetAlignment
static NWidgetPart SetAlignment(StringAlignment align)
Widget part function for setting the alignment of text/images.
Definition: widget_type.h:1062
NWidgetContainer
Baseclass for container widgets.
Definition: widget_type.h:400
TO_SIGNS
@ TO_SIGNS
signs
Definition: transparency.h:23
ShowLinkGraphLegend
void ShowLinkGraphLegend()
Open a link graph legend window.
Definition: linkgraph_gui.cpp:546
DEF_START_YEAR
static const Year DEF_START_YEAR
The default starting year.
Definition: date_type.h:87
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:171
CommandHelper
Definition: command_func.h:94
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:1013
SA_CENTER
@ SA_CENTER
Center both horizontally and vertically.
Definition: gfx_type.h:338
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:457
SoundSettings::click_beep
bool click_beep
Beep on a random selection of buttons.
Definition: settings_type.h:212
lengthof
#define lengthof(x)
Return the length of an fixed size array.
Definition: stdafx.h:386
Window::width
int width
width of the window (number of pixels to the right in x direction)
Definition: window_gui.h:314
CTMN_SPECTATOR
static const int CTMN_SPECTATOR
Show a company window as spectator.
Definition: toolbar_gui.cpp:209
ShowTerraformToolbar
Window * ShowTerraformToolbar(Window *link)
Show the toolbar for terraforming in the game.
Definition: terraform_gui.cpp:371
MarkWholeScreenDirty
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
Definition: gfx.cpp:1753
WDP_MANUAL
@ WDP_MANUAL
Manually align the window (so no automatic location finding)
Definition: window_gui.h:155
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:1171
SC_VIEWPORT
@ SC_VIEWPORT
Screenshot of viewport.
Definition: screenshot.h:19
MakeScreenshotWithConfirm
void MakeScreenshotWithConfirm(ScreenshotType t)
Make a screenshot.
Definition: screenshot.cpp:878
WID_TN_ZOOM_IN
@ WID_TN_ZOOM_IN
Zoom in the main viewport.
Definition: toolbar_widget.h:35
ROADTYPE_TRAM
@ ROADTYPE_TRAM
Trams.
Definition: road_type.h:25
NWidgetBase::pos_y
int pos_y
Vertical position of top-left corner of the widget in the window.
Definition: widget_type.h:190
ShowBuildRoadToolbar
Window * ShowBuildRoadToolbar(RoadType roadtype)
Open the build road toolbar window.
Definition: road_gui.cpp:864
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:1472
console_gui.h
SetFill
static NWidgetPart SetFill(uint fill_x, uint fill_y)
Widget part function for setting filling.
Definition: widget_type.h:1078
MenuClickShowTrains
static CallBackFunction MenuClickShowTrains(int index)
Handle click on the entry in the Train menu.
Definition: toolbar_gui.cpp:770
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:564
Window
Data structure for an opened window.
Definition: window_gui.h:279
NWidgetToolbarContainer::spacers
uint spacers
Number of spacer widgets in this toolbar.
Definition: toolbar_gui.cpp:1317
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:111
NWidgetToolbarContainer::AssignSizePosition
void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override
Definition: toolbar_gui.cpp:1367
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:326
Window::RaiseWidget
void RaiseWidget(byte widget_index)
Marks a widget as raised.
Definition: window_gui.h:477
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:3376
Window::DrawWidgets
void DrawWidgets() const
Paint all widgets of a window.
Definition: widget.cpp:636
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:393
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:415
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:2425
NWidgetCore
Base class for a 'real' widget.
Definition: widget_type.h:311
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:608
ShowAIConfigWindow
void ShowAIConfigWindow()
Open the AI config window.
Definition: ai_gui.cpp:980
MenuClickLeague
static CallBackFunction MenuClickLeague(int index)
Handle click on the entry in the CompanyLeague menu.
Definition: toolbar_gui.cpp:710
ShowCompany
void ShowCompany(CompanyID company)
Show the window with the overview of the company.
Definition: company_gui.cpp:2765
GUISettings::UserIsAllowedToChangeNewGRFs
bool UserIsAllowedToChangeNewGRFs() const
Returns true when the user has sufficient privileges to edit newgrfs on a running game.
Definition: settings_type.h:200
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:484
ScenarioEditorToolbarWindow::OnRealtimeTick
void OnRealtimeTick(uint delta_ms) override
Called periodically.
Definition: toolbar_gui.cpp:2452
VEH_SHIP
@ VEH_SHIP
Ship vehicle type.
Definition: vehicle_type.h:26
ToolbarMode
ToolbarMode
Toobar modes.
Definition: toolbar_gui.cpp:71
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:2445
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:178
WC_MAIN_TOOLBAR
@ WC_MAIN_TOOLBAR
Main toolbar (the long bar at the top); Window numbers:
Definition: window_type.h:50
ScenarioEditorToolbarWindow::OnPaint
void OnPaint() override
The window must be repainted.
Definition: toolbar_gui.cpp:2329
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:50
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:186
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:3424
NWidgetResizeBase::SetMinimalSize
void SetMinimalSize(uint min_x, uint min_y)
Set minimal size of the widget.
Definition: widget.cpp:866
Window::SetWidgetLoweredState
void SetWidgetLoweredState(byte widget_index, bool lowered_stat)
Sets the lowered/raised status of a widget.
Definition: window_gui.h:447
_left_button_clicked
bool _left_button_clicked
Is left mouse button clicked?
Definition: gfx.cpp:42
NWidgetCore::GetWidgetFromPos
NWidgetCore * GetWidgetFromPos(int x, int y) override
Definition: widget.cpp:1000
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:40
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:989
ClientSettings::gui
GUISettings gui
settings related to the GUI
Definition: settings_type.h:598
MenuClickBuildRoad
static CallBackFunction MenuClickBuildRoad(int index)
Handle click on the entry in the Build Road menu.
Definition: toolbar_gui.cpp:895
DropDownListCheckedItem
Drop down list entry for showing a checked/unchecked toggle item.
Definition: toolbar_gui.cpp:90
MainToolbarWindow::OnPlaceObjectAbort
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
Definition: toolbar_gui.cpp:2061
ShowEditorTerraformToolbar
Window * ShowEditorTerraformToolbar()
Show the toolbar for terraforming in the scenario editor.
Definition: terraform_gui.cpp:763
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:1990
ShowBuildDocksToolbar
Window * ShowBuildDocksToolbar()
Open the build water toolbar window.
Definition: dock_gui.cpp:367
Window::FindWindowPlacementAndResize
virtual void FindWindowPlacementAndResize(int def_width, int def_height)
Resize window towards the default size.
Definition: window.cpp:1457
hotkeys.h
cheat_func.h
ShowBuildRoadScenToolbar
Window * ShowBuildRoadScenToolbar(RoadType roadtype)
Show the road building toolbar in the scenario editor.
Definition: road_gui.cpp:951
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:95
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:1315
WID_TN_RAILS
@ WID_TN_RAILS
Rail building menu.
Definition: toolbar_widget.h:38