OpenTTD Source  12.0-beta2
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 
53 #include "widgets/toolbar_widget.h"
54 
55 #include "network/network.h"
56 #include "network/network_gui.h"
57 #include "network/network_func.h"
58 
59 #include "safeguards.h"
60 
61 
63 uint _toolbar_width = 0;
64 
65 RailType _last_built_railtype;
66 RoadType _last_built_roadtype;
67 RoadType _last_built_tramtype;
68 
71  TB_NORMAL,
72  TB_UPPER,
73  TB_LOWER
74 };
75 
78  CBF_NONE,
79  CBF_PLACE_SIGN,
80  CBF_PLACE_LANDINFO,
81 };
82 
84 
85 
90  uint checkmark_width;
91 public:
92  bool checked;
93 
94  DropDownListCheckedItem(StringID string, int result, bool masked, bool checked) : DropDownListStringItem(string, result, masked), checked(checked)
95  {
96  this->checkmark_width = GetStringBoundingBox(STR_JUST_CHECKMARK).width + 3;
97  }
98 
99  uint Width() const
100  {
101  return DropDownListStringItem::Width() + this->checkmark_width;
102  }
103 
104  void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const
105  {
106  bool rtl = _current_text_dir == TD_RTL;
107  if (this->checked) {
108  DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, STR_JUST_CHECKMARK, sel ? TC_WHITE : TC_BLACK);
109  }
110  DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 0 : this->checkmark_width), right - WD_FRAMERECT_RIGHT - (rtl ? this->checkmark_width : 0), top, this->String(), sel ? TC_WHITE : TC_BLACK);
111  }
112 };
113 
118  Dimension icon_size;
119  Dimension lock_size;
120 public:
121  bool greyed;
122 
123  DropDownListCompanyItem(int result, bool masked, bool greyed) : DropDownListItem(result, masked), greyed(greyed)
124  {
125  this->icon_size = GetSpriteSize(SPR_COMPANY_ICON);
126  this->lock_size = GetSpriteSize(SPR_LOCK);
127  }
128 
129  bool Selectable() const override
130  {
131  return true;
132  }
133 
134  uint Width() const override
135  {
136  CompanyID company = (CompanyID)this->result;
137  SetDParam(0, company);
138  SetDParam(1, company);
139  return GetStringBoundingBox(STR_COMPANY_NAME_COMPANY_NUM).width + this->icon_size.width + this->lock_size.width + 6;
140  }
141 
142  uint Height(uint width) const override
143  {
144  return std::max(std::max(this->icon_size.height, this->lock_size.height) + 2U, (uint)FONT_HEIGHT_NORMAL);
145  }
146 
147  void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const override
148  {
149  CompanyID company = (CompanyID)this->result;
150  bool rtl = _current_text_dir == TD_RTL;
151 
152  /* It's possible the company is deleted while the dropdown is open */
153  if (!Company::IsValidID(company)) return;
154 
155  int icon_offset = (bottom - top - icon_size.height) / 2;
156  int text_offset = (bottom - top - FONT_HEIGHT_NORMAL) / 2;
157  int lock_offset = (bottom - top - lock_size.height) / 2;
158 
159  DrawCompanyIcon(company, rtl ? right - this->icon_size.width - WD_FRAMERECT_RIGHT : left + WD_FRAMERECT_LEFT, top + icon_offset);
160  if (NetworkCompanyIsPassworded(company)) {
161  DrawSprite(SPR_LOCK, PAL_NONE, rtl ? left + WD_FRAMERECT_LEFT : right - this->lock_size.width - WD_FRAMERECT_RIGHT, top + lock_offset);
162  }
163 
164  SetDParam(0, company);
165  SetDParam(1, company);
166  TextColour col;
167  if (this->greyed) {
168  col = (sel ? TC_SILVER : TC_GREY) | TC_NO_SHADE;
169  } else {
170  col = sel ? TC_WHITE : TC_BLACK;
171  }
172  DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 3 + this->lock_size.width : 3 + this->icon_size.width), right - WD_FRAMERECT_RIGHT - (rtl ? 3 + this->icon_size.width : 3 + this->lock_size.width), top + text_offset, STR_COMPANY_NAME_COMPANY_NUM, col);
173  }
174 };
175 
183 static void PopupMainToolbMenu(Window *w, int widget, DropDownList &&list, int def)
184 {
185  ShowDropDownList(w, std::move(list), def, widget, 0, true, true);
187 }
188 
196 static void PopupMainToolbMenu(Window *w, int widget, StringID string, int count)
197 {
198  DropDownList list;
199  for (int i = 0; i < count; i++) {
200  list.emplace_back(new DropDownListStringItem(string + i, i, false));
201  }
202  PopupMainToolbMenu(w, widget, std::move(list), 0);
203 }
204 
206 static const int CTMN_CLIENT_LIST = -1;
207 static const int CTMN_SPECTATOR = -2;
208 
215 static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0)
216 {
217  DropDownList list;
218 
219  switch (widget) {
220  case WID_TN_COMPANIES:
221  if (!_networking) break;
222 
223  /* Add the client list button for the companies menu */
224  list.emplace_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST, false));
225  break;
226 
227  case WID_TN_STORY:
228  list.emplace_back(new DropDownListStringItem(STR_STORY_BOOK_SPECTATOR, CTMN_SPECTATOR, false));
229  break;
230 
231  case WID_TN_GOAL:
232  list.emplace_back(new DropDownListStringItem(STR_GOALS_SPECTATOR, CTMN_SPECTATOR, false));
233  break;
234  }
235 
236  for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
237  if (!Company::IsValidID(c)) continue;
238  list.emplace_back(new DropDownListCompanyItem(c, false, HasBit(grey, c)));
239  }
240 
242 }
243 
244 
245 static ToolbarMode _toolbar_mode;
246 
247 static CallBackFunction SelectSignTool()
248 {
249  if (_last_started_action == CBF_PLACE_SIGN) {
251  return CBF_NONE;
252  } else {
253  SetObjectToPlace(SPR_CURSOR_SIGN, PAL_NONE, HT_RECT, WC_MAIN_TOOLBAR, 0);
254  return CBF_PLACE_SIGN;
255  }
256 }
257 
258 /* --- Pausing --- */
259 
260 static CallBackFunction ToolbarPauseClick(Window *w)
261 {
262  if (_networking && !_network_server) return CBF_NONE; // only server can pause the game
263 
265  if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
266  }
267  return CBF_NONE;
268 }
269 
277 {
278  ChangeGameSpeed(_game_speed == 100);
279 
281  return CBF_NONE;
282 }
283 
288  OME_GAMEOPTIONS,
289  OME_SETTINGS,
290  OME_SCRIPT_SETTINGS,
291  OME_NEWGRFSETTINGS,
292  OME_TRANSPARENCIES,
293  OME_SHOW_TOWNNAMES,
294  OME_SHOW_STATIONNAMES,
295  OME_SHOW_WAYPOINTNAMES,
296  OME_SHOW_SIGNS,
297  OME_SHOW_COMPETITOR_SIGNS,
298  OME_FULL_ANIMATION,
299  OME_FULL_DETAILS,
300  OME_TRANSPARENTBUILDINGS,
301  OME_SHOW_STATIONSIGNS,
302 };
303 
311 {
312  DropDownList list;
313  list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_GAME_OPTIONS, OME_GAMEOPTIONS, false));
314  list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE, OME_SETTINGS, false));
315  /* Changes to the per-AI settings don't get send from the server to the clients. Clients get
316  * the settings once they join but never update it. As such don't show the window at all
317  * to network clients. */
318  if (!_networking || _network_server) list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_SCRIPT_SETTINGS, OME_SCRIPT_SETTINGS, false));
319  list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_NEWGRF_SETTINGS, OME_NEWGRFSETTINGS, false));
320  list.emplace_back(new DropDownListStringItem(STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS, OME_TRANSPARENCIES, false));
321  list.emplace_back(new DropDownListItem(-1, false));
322  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES, false, HasBit(_display_opt, DO_SHOW_TOWN_NAMES)));
323  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES, false, HasBit(_display_opt, DO_SHOW_STATION_NAMES)));
324  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES, false, HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES)));
325  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS, false, HasBit(_display_opt, DO_SHOW_SIGNS)));
326  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS, false, HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS)));
327  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION, false, HasBit(_display_opt, DO_FULL_ANIMATION)));
328  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS, false, HasBit(_display_opt, DO_FULL_DETAIL)));
329  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS, false, IsTransparencySet(TO_HOUSES)));
330  list.emplace_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS, false, IsTransparencySet(TO_SIGNS)));
331 
332  ShowDropDownList(w, std::move(list), 0, WID_TN_SETTINGS, 140, true, true);
334  return CBF_NONE;
335 }
336 
344 {
345  switch (index) {
346  case OME_GAMEOPTIONS: ShowGameOptions(); return CBF_NONE;
347  case OME_SETTINGS: ShowGameSettings(); return CBF_NONE;
348  case OME_SCRIPT_SETTINGS: ShowAIConfigWindow(); return CBF_NONE;
349  case OME_NEWGRFSETTINGS: ShowNewGRFSettings(!_networking && _settings_client.gui.UserIsAllowedToChangeNewGRFs(), true, true, &_grfconfig); return CBF_NONE;
350  case OME_TRANSPARENCIES: ShowTransparencyToolbar(); break;
351 
352  case OME_SHOW_TOWNNAMES: ToggleBit(_display_opt, DO_SHOW_TOWN_NAMES); break;
353  case OME_SHOW_STATIONNAMES: ToggleBit(_display_opt, DO_SHOW_STATION_NAMES); break;
354  case OME_SHOW_WAYPOINTNAMES: ToggleBit(_display_opt, DO_SHOW_WAYPOINT_NAMES); break;
355  case OME_SHOW_SIGNS: ToggleBit(_display_opt, DO_SHOW_SIGNS); break;
356  case OME_SHOW_COMPETITOR_SIGNS:
359  break;
360  case OME_FULL_ANIMATION: ToggleBit(_display_opt, DO_FULL_ANIMATION); CheckBlitter(); break;
361  case OME_FULL_DETAILS: ToggleBit(_display_opt, DO_FULL_DETAIL); break;
362  case OME_TRANSPARENTBUILDINGS: ToggleTransparency(TO_HOUSES); break;
363  case OME_SHOW_STATIONSIGNS: ToggleTransparency(TO_SIGNS); break;
364  }
366  return CBF_NONE;
367 }
368 
373  SLEME_SAVE_SCENARIO = 0,
374  SLEME_LOAD_SCENARIO,
375  SLEME_SAVE_HEIGHTMAP,
376  SLEME_LOAD_HEIGHTMAP,
377  SLEME_EXIT_TOINTRO,
378  SLEME_EXIT_GAME = 6,
379  SLEME_MENUCOUNT,
380 };
381 
386  SLNME_SAVE_GAME = 0,
387  SLNME_LOAD_GAME,
388  SLNME_EXIT_TOINTRO,
389  SLNME_EXIT_GAME = 4,
390  SLNME_MENUCOUNT,
391 };
392 
400 {
401  PopupMainToolbMenu(w, WID_TN_SAVE, STR_FILE_MENU_SAVE_GAME, SLNME_MENUCOUNT);
402  return CBF_NONE;
403 }
404 
412 {
413  PopupMainToolbMenu(w, WID_TE_SAVE, STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO, SLEME_MENUCOUNT);
414  return CBF_NONE;
415 }
416 
423 static CallBackFunction MenuClickSaveLoad(int index = 0)
424 {
425  if (_game_mode == GM_EDITOR) {
426  switch (index) {
427  case SLEME_SAVE_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_SAVE); break;
428  case SLEME_LOAD_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_LOAD); break;
429  case SLEME_SAVE_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_SAVE); break;
430  case SLEME_LOAD_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_LOAD); break;
431  case SLEME_EXIT_TOINTRO: AskExitToGameMenu(); break;
432  case SLEME_EXIT_GAME: HandleExitGameRequest(); break;
433  }
434  } else {
435  switch (index) {
436  case SLNME_SAVE_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_SAVE); break;
437  case SLNME_LOAD_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break;
438  case SLNME_EXIT_TOINTRO: AskExitToGameMenu(); break;
439  case SLNME_EXIT_GAME: HandleExitGameRequest(); break;
440  }
441  }
442  return CBF_NONE;
443 }
444 
445 /* --- Map button menu --- */
446 
447 enum MapMenuEntries {
448  MME_SHOW_SMALLMAP = 0,
449  MME_SHOW_EXTRAVIEWPORTS,
450  MME_SHOW_LINKGRAPH,
451  MME_SHOW_SIGNLISTS,
452  MME_SHOW_TOWNDIRECTORY,
453  MME_SHOW_INDUSTRYDIRECTORY,
454 };
455 
456 static CallBackFunction ToolbarMapClick(Window *w)
457 {
458  DropDownList list;
459  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false));
460  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS, false));
461  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_LINGRAPH_LEGEND, MME_SHOW_LINKGRAPH, false));
462  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false));
463  PopupMainToolbMenu(w, WID_TN_SMALL_MAP, std::move(list), 0);
464  return CBF_NONE;
465 }
466 
467 static CallBackFunction ToolbarScenMapTownDir(Window *w)
468 {
469  DropDownList list;
470  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false));
471  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS, false));
472  list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false));
473  list.emplace_back(new DropDownListStringItem(STR_TOWN_MENU_TOWN_DIRECTORY, MME_SHOW_TOWNDIRECTORY, false));
474  list.emplace_back(new DropDownListStringItem(STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, MME_SHOW_INDUSTRYDIRECTORY, false));
475  PopupMainToolbMenu(w, WID_TE_SMALL_MAP, std::move(list), 0);
476  return CBF_NONE;
477 }
478 
486 {
487  switch (index) {
488  case MME_SHOW_SMALLMAP: ShowSmallMap(); break;
489  case MME_SHOW_EXTRAVIEWPORTS: ShowExtraViewportWindow(); break;
490  case MME_SHOW_LINKGRAPH: ShowLinkGraphLegend(); break;
491  case MME_SHOW_SIGNLISTS: ShowSignList(); break;
492  case MME_SHOW_TOWNDIRECTORY: ShowTownDirectory(); break;
493  case MME_SHOW_INDUSTRYDIRECTORY: ShowIndustryDirectory(); break;
494  }
495  return CBF_NONE;
496 }
497 
498 /* --- Town button menu --- */
499 
500 static CallBackFunction ToolbarTownClick(Window *w)
501 {
502  PopupMainToolbMenu(w, WID_TN_TOWNS, STR_TOWN_MENU_TOWN_DIRECTORY, (_settings_game.economy.found_town == TF_FORBIDDEN) ? 1 : 2);
503  return CBF_NONE;
504 }
505 
513 {
514  switch (index) {
515  case 0: ShowTownDirectory(); break;
516  case 1: // setting could be changed when the dropdown was open
517  if (_settings_game.economy.found_town != TF_FORBIDDEN) ShowFoundTownWindow();
518  break;
519  }
520  return CBF_NONE;
521 }
522 
523 /* --- Subidies button menu --- */
524 
525 static CallBackFunction ToolbarSubsidiesClick(Window *w)
526 {
527  PopupMainToolbMenu(w, WID_TN_SUBSIDIES, STR_SUBSIDIES_MENU_SUBSIDIES, 1);
528  return CBF_NONE;
529 }
530 
538 {
539  switch (index) {
540  case 0: ShowSubsidiesList(); break;
541  }
542  return CBF_NONE;
543 }
544 
545 /* --- Stations button menu --- */
546 
547 static CallBackFunction ToolbarStationsClick(Window *w)
548 {
550  return CBF_NONE;
551 }
552 
560 {
562  return CBF_NONE;
563 }
564 
565 /* --- Finances button menu --- */
566 
567 static CallBackFunction ToolbarFinancesClick(Window *w)
568 {
570  return CBF_NONE;
571 }
572 
580 {
582  return CBF_NONE;
583 }
584 
585 /* --- Company's button menu --- */
586 
587 static CallBackFunction ToolbarCompaniesClick(Window *w)
588 {
590  return CBF_NONE;
591 }
592 
600 {
601  if (_networking) {
602  switch (index) {
603  case CTMN_CLIENT_LIST:
604  ShowClientList();
605  return CBF_NONE;
606  }
607  }
608  ShowCompany((CompanyID)index);
609  return CBF_NONE;
610 }
611 
612 /* --- Story button menu --- */
613 
614 static CallBackFunction ToolbarStoryClick(Window *w)
615 {
617  return CBF_NONE;
618 }
619 
627 {
629  return CBF_NONE;
630 }
631 
632 /* --- Goal button menu --- */
633 
634 static CallBackFunction ToolbarGoalClick(Window *w)
635 {
637  return CBF_NONE;
638 }
639 
647 {
649  return CBF_NONE;
650 }
651 
652 /* --- Graphs button menu --- */
653 
654 static CallBackFunction ToolbarGraphsClick(Window *w)
655 {
656  PopupMainToolbMenu(w, WID_TN_GRAPHS, STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH, (_toolbar_mode == TB_NORMAL) ? 6 : 8);
657  return CBF_NONE;
658 }
659 
667 {
668  switch (index) {
669  case 0: ShowOperatingProfitGraph(); break;
670  case 1: ShowIncomeGraph(); break;
671  case 2: ShowDeliveredCargoGraph(); break;
672  case 3: ShowPerformanceHistoryGraph(); break;
673  case 4: ShowCompanyValueGraph(); break;
674  case 5: ShowCargoPaymentRates(); break;
675  /* functions for combined graphs/league button */
676  case 6: ShowCompanyLeagueTable(); break;
677  case 7: ShowPerformanceRatingDetail(); break;
678  }
679  return CBF_NONE;
680 }
681 
682 /* --- League button menu --- */
683 
684 static CallBackFunction ToolbarLeagueClick(Window *w)
685 {
686  PopupMainToolbMenu(w, WID_TN_LEAGUE, STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE, _networking ? 2 : 3);
687  return CBF_NONE;
688 }
689 
697 {
698  switch (index) {
699  case 0: ShowCompanyLeagueTable(); break;
700  case 1: ShowPerformanceRatingDetail(); break;
701  case 2: ShowHighscoreTable(); break;
702  }
703  return CBF_NONE;
704 }
705 
706 /* --- Industries button menu --- */
707 
708 static CallBackFunction ToolbarIndustryClick(Window *w)
709 {
710  /* Disable build-industry menu if we are a spectator */
711  PopupMainToolbMenu(w, WID_TN_INDUSTRIES, STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, (_local_company == COMPANY_SPECTATOR) ? 2 : 3);
712  return CBF_NONE;
713 }
714 
722 {
723  switch (index) {
724  case 0: ShowIndustryDirectory(); break;
725  case 1: ShowIndustryCargoesWindow(); break;
726  case 2: ShowBuildIndustryWindow(); break;
727  }
728  return CBF_NONE;
729 }
730 
731 /* --- Trains button menu + 1 helper function for all vehicles. --- */
732 
733 static void ToolbarVehicleClick(Window *w, VehicleType veh)
734 {
735  int dis = ~0;
736 
737  for (const Vehicle *v : Vehicle::Iterate()) {
738  if (v->type == veh && v->IsPrimaryVehicle()) ClrBit(dis, v->owner);
739  }
741 }
742 
743 
744 static CallBackFunction ToolbarTrainClick(Window *w)
745 {
746  ToolbarVehicleClick(w, VEH_TRAIN);
747  return CBF_NONE;
748 }
749 
757 {
758  ShowVehicleListWindow((CompanyID)index, VEH_TRAIN);
759  return CBF_NONE;
760 }
761 
762 /* --- Road vehicle button menu --- */
763 
764 static CallBackFunction ToolbarRoadClick(Window *w)
765 {
766  ToolbarVehicleClick(w, VEH_ROAD);
767  return CBF_NONE;
768 }
769 
777 {
778  ShowVehicleListWindow((CompanyID)index, VEH_ROAD);
779  return CBF_NONE;
780 }
781 
782 /* --- Ship button menu --- */
783 
784 static CallBackFunction ToolbarShipClick(Window *w)
785 {
786  ToolbarVehicleClick(w, VEH_SHIP);
787  return CBF_NONE;
788 }
789 
797 {
798  ShowVehicleListWindow((CompanyID)index, VEH_SHIP);
799  return CBF_NONE;
800 }
801 
802 /* --- Aircraft button menu --- */
803 
804 static CallBackFunction ToolbarAirClick(Window *w)
805 {
806  ToolbarVehicleClick(w, VEH_AIRCRAFT);
807  return CBF_NONE;
808 }
809 
817 {
818  ShowVehicleListWindow((CompanyID)index, VEH_AIRCRAFT);
819  return CBF_NONE;
820 }
821 
822 /* --- Zoom in button --- */
823 
824 static CallBackFunction ToolbarZoomInClick(Window *w)
825 {
827  w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)WID_TE_ZOOM_IN : (byte)WID_TN_ZOOM_IN);
829  }
830  return CBF_NONE;
831 }
832 
833 /* --- Zoom out button --- */
834 
835 static CallBackFunction ToolbarZoomOutClick(Window *w)
836 {
838  w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)WID_TE_ZOOM_OUT : (byte)WID_TN_ZOOM_OUT);
840  }
841  return CBF_NONE;
842 }
843 
844 /* --- Rail button menu --- */
845 
846 static CallBackFunction ToolbarBuildRailClick(Window *w)
847 {
848  ShowDropDownList(w, GetRailTypeDropDownList(), _last_built_railtype, WID_TN_RAILS, 140, true, true);
850  return CBF_NONE;
851 }
852 
860 {
861  _last_built_railtype = (RailType)index;
862  ShowBuildRailToolbar(_last_built_railtype);
863  return CBF_NONE;
864 }
865 
866 /* --- Road button menu --- */
867 
868 static CallBackFunction ToolbarBuildRoadClick(Window *w)
869 {
870  ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TN_ROADS, 140, true, true);
872  return CBF_NONE;
873 }
874 
882 {
883  _last_built_roadtype = (RoadType)index;
884  ShowBuildRoadToolbar(_last_built_roadtype);
885  return CBF_NONE;
886 }
887 
888 /* --- Tram button menu --- */
889 
890 static CallBackFunction ToolbarBuildTramClick(Window *w)
891 {
892  ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TN_TRAMS, 140, true, true);
894  return CBF_NONE;
895 }
896 
904 {
905  _last_built_tramtype = (RoadType)index;
906  ShowBuildRoadToolbar(_last_built_tramtype);
907  return CBF_NONE;
908 }
909 
910 /* --- Water button menu --- */
911 
912 static CallBackFunction ToolbarBuildWaterClick(Window *w)
913 {
914  DropDownList list;
915  list.emplace_back(new DropDownListIconItem(SPR_IMG_BUILD_CANAL, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, 0, false));
916  ShowDropDownList(w, std::move(list), 0, WID_TN_WATER, 140, true, true);
918  return CBF_NONE;
919 }
920 
928 {
930  return CBF_NONE;
931 }
932 
933 /* --- Airport button menu --- */
934 
935 static CallBackFunction ToolbarBuildAirClick(Window *w)
936 {
937  DropDownList list;
938  list.emplace_back(new DropDownListIconItem(SPR_IMG_AIRPORT, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, 0, false));
939  ShowDropDownList(w, std::move(list), 0, WID_TN_AIR, 140, true, true);
941  return CBF_NONE;
942 }
943 
951 {
953  return CBF_NONE;
954 }
955 
956 /* --- Forest button menu --- */
957 
958 static CallBackFunction ToolbarForestClick(Window *w)
959 {
960  DropDownList list;
961  list.emplace_back(new DropDownListIconItem(SPR_IMG_LANDSCAPING, PAL_NONE, STR_LANDSCAPING_MENU_LANDSCAPING, 0, false));
962  list.emplace_back(new DropDownListIconItem(SPR_IMG_PLANTTREES, PAL_NONE, STR_LANDSCAPING_MENU_PLANT_TREES, 1, false));
963  list.emplace_back(new DropDownListIconItem(SPR_IMG_SIGN, PAL_NONE, STR_LANDSCAPING_MENU_PLACE_SIGN, 2, false));
964  ShowDropDownList(w, std::move(list), 0, WID_TN_LANDSCAPE, 100, true, true);
966  return CBF_NONE;
967 }
968 
976 {
977  switch (index) {
978  case 0: ShowTerraformToolbar(); break;
979  case 1: ShowBuildTreesToolbar(); break;
980  case 2: return SelectSignTool();
981  }
982  return CBF_NONE;
983 }
984 
985 /* --- Music button menu --- */
986 
987 static CallBackFunction ToolbarMusicClick(Window *w)
988 {
989  PopupMainToolbMenu(w, _game_mode == GM_EDITOR ? (int)WID_TE_MUSIC_SOUND : (int)WID_TN_MUSIC_SOUND, STR_TOOLBAR_SOUND_MUSIC, 1);
990  return CBF_NONE;
991 }
992 
1000 {
1001  ShowMusicWindow();
1002  return CBF_NONE;
1003 }
1004 
1005 /* --- Newspaper button menu --- */
1006 
1007 static CallBackFunction ToolbarNewspaperClick(Window *w)
1008 {
1009  PopupMainToolbMenu(w, WID_TN_MESSAGES, STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT, 3);
1010  return CBF_NONE;
1011 }
1012 
1020 {
1021  switch (index) {
1022  case 0: ShowLastNewsMessage(); break;
1023  case 1: ShowMessageHistory(); break;
1024  case 2: DeleteAllMessages(); break;
1025  }
1026  return CBF_NONE;
1027 }
1028 
1029 /* --- Help button menu --- */
1030 
1031 static CallBackFunction PlaceLandBlockInfo()
1032 {
1033  if (_last_started_action == CBF_PLACE_LANDINFO) {
1035  return CBF_NONE;
1036  } else {
1037  SetObjectToPlace(SPR_CURSOR_QUERY, PAL_NONE, HT_RECT, WC_MAIN_TOOLBAR, 0);
1038  return CBF_PLACE_LANDINFO;
1039  }
1040 }
1041 
1042 static CallBackFunction ToolbarHelpClick(Window *w)
1043 {
1044  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);
1045  return CBF_NONE;
1046 }
1047 
1056 {
1057  extern bool _draw_bounding_boxes;
1058  /* Always allow to toggle them off */
1059  if (_settings_client.gui.newgrf_developer_tools || _draw_bounding_boxes) {
1060  _draw_bounding_boxes = !_draw_bounding_boxes;
1062  }
1063 }
1064 
1073 {
1074  extern bool _draw_dirty_blocks;
1075  /* Always allow to toggle them off */
1076  if (_settings_client.gui.newgrf_developer_tools || _draw_dirty_blocks) {
1077  _draw_dirty_blocks = !_draw_dirty_blocks;
1079  }
1080 }
1081 
1087 {
1090  /* If you open a savegame as scenario there may already be link graphs.*/
1092  SetDate(new_date, 0);
1093 }
1094 
1101 {
1102  switch (index) {
1103  case 0: return PlaceLandBlockInfo();
1104  case 2: IConsoleSwitch(); break;
1105  case 3: ShowAIDebugWindow(); break;
1106  case 4: ShowScreenshotWindow(); break;
1107  case 5: ShowFramerateWindow(); break;
1108  case 6: ShowAboutWindow(); break;
1109  case 7: ShowSpriteAlignerWindow(); break;
1110  case 8: ToggleBoundingBoxes(); break;
1111  case 9: ToggleDirtyBlocks(); break;
1112  }
1113  return CBF_NONE;
1114 }
1115 
1116 /* --- Switch toolbar button --- */
1117 
1118 static CallBackFunction ToolbarSwitchClick(Window *w)
1119 {
1120  if (_toolbar_mode != TB_LOWER) {
1121  _toolbar_mode = TB_LOWER;
1122  } else {
1123  _toolbar_mode = TB_UPPER;
1124  }
1125 
1126  w->ReInit();
1127  w->SetWidgetLoweredState(_game_mode == GM_EDITOR ? (uint)WID_TE_SWITCH_BAR : (uint)WID_TN_SWITCH_BAR, _toolbar_mode == TB_LOWER);
1128  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1129  return CBF_NONE;
1130 }
1131 
1132 /* --- Scenario editor specific handlers. */
1133 
1138 {
1140  ShowQueryString(STR_JUST_INT, STR_MAPGEN_START_DATE_QUERY_CAPT, 8, w, CS_NUMERAL, QSF_ENABLE_DEFAULT);
1141  _left_button_clicked = false;
1142  return CBF_NONE;
1143 }
1144 
1145 static CallBackFunction ToolbarScenDateBackward(Window *w)
1146 {
1147  /* don't allow too fast scrolling */
1148  if (!(w->flags & WF_TIMEOUT) || w->timeout_timer <= 1) {
1150  w->SetDirty();
1151 
1153  }
1154  _left_button_clicked = false;
1155  return CBF_NONE;
1156 }
1157 
1158 static CallBackFunction ToolbarScenDateForward(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 ToolbarScenGenLand(Window *w)
1172 {
1174  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1175 
1177  return CBF_NONE;
1178 }
1179 
1180 
1181 static CallBackFunction ToolbarScenGenTown(Window *w)
1182 {
1184  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1185  ShowFoundTownWindow();
1186  return CBF_NONE;
1187 }
1188 
1189 static CallBackFunction ToolbarScenGenIndustry(Window *w)
1190 {
1192  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1193  ShowBuildIndustryWindow();
1194  return CBF_NONE;
1195 }
1196 
1197 static CallBackFunction ToolbarScenBuildRoadClick(Window *w)
1198 {
1199  ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TE_ROADS, 140, true, true);
1200  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1201  return CBF_NONE;
1202 }
1203 
1211 {
1212  _last_built_roadtype = (RoadType)index;
1213  ShowBuildRoadScenToolbar(_last_built_roadtype);
1214  return CBF_NONE;
1215 }
1216 
1217 static CallBackFunction ToolbarScenBuildTramClick(Window *w)
1218 {
1219  ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TE_TRAMS, 140, true, true);
1220  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1221  return CBF_NONE;
1222 }
1223 
1231 {
1232  _last_built_tramtype = (RoadType)index;
1233  ShowBuildRoadScenToolbar(_last_built_tramtype);
1234  return CBF_NONE;
1235 }
1236 
1237 static CallBackFunction ToolbarScenBuildDocks(Window *w)
1238 {
1240  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1242  return CBF_NONE;
1243 }
1244 
1245 static CallBackFunction ToolbarScenPlantTrees(Window *w)
1246 {
1248  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1249  ShowBuildTreesToolbar();
1250  return CBF_NONE;
1251 }
1252 
1253 static CallBackFunction ToolbarScenPlaceSign(Window *w)
1254 {
1256  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
1257  return SelectSignTool();
1258 }
1259 
1260 static CallBackFunction ToolbarBtn_NULL(Window *w)
1261 {
1262  return CBF_NONE;
1263 }
1264 
1265 typedef CallBackFunction MenuClickedProc(int index);
1266 
1267 static MenuClickedProc * const _menu_clicked_procs[] = {
1268  nullptr, // 0
1269  nullptr, // 1
1270  MenuClickSettings, // 2
1271  MenuClickSaveLoad, // 3
1272  MenuClickMap, // 4
1273  MenuClickTown, // 5
1274  MenuClickSubsidies, // 6
1275  MenuClickStations, // 7
1276  MenuClickFinances, // 8
1277  MenuClickCompany, // 9
1278  MenuClickStory, // 10
1279  MenuClickGoal, // 11
1280  MenuClickGraphs, // 12
1281  MenuClickLeague, // 13
1282  MenuClickIndustry, // 14
1283  MenuClickShowTrains, // 15
1284  MenuClickShowRoad, // 16
1285  MenuClickShowShips, // 17
1286  MenuClickShowAir, // 18
1287  MenuClickMap, // 19
1288  nullptr, // 20
1289  MenuClickBuildRail, // 21
1290  MenuClickBuildRoad, // 22
1291  MenuClickBuildTram, // 23
1292  MenuClickBuildWater, // 24
1293  MenuClickBuildAir, // 25
1294  MenuClickForest, // 26
1295  MenuClickMusicWindow, // 27
1296  MenuClickNewspaper, // 28
1297  MenuClickHelp, // 29
1298 };
1299 
1303 protected:
1304  uint spacers;
1305 
1306 public:
1308  {
1309  }
1310 
1317  {
1318  return type == WWT_IMGBTN || type == WWT_IMGBTN_2 || type == WWT_PUSHIMGBTN;
1319  }
1320 
1321  void SetupSmallestSize(Window *w, bool init_array) override
1322  {
1323  this->smallest_x = 0; // Biggest child
1324  this->smallest_y = 0; // Biggest child
1325  this->fill_x = 1;
1326  this->fill_y = 0;
1327  this->resize_x = 1; // We only resize in this direction
1328  this->resize_y = 0; // We never resize in this direction
1329  this->spacers = 0;
1330 
1331  uint nbuttons = 0;
1332  /* First initialise some variables... */
1333  for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1334  child_wid->SetupSmallestSize(w, init_array);
1335  this->smallest_y = std::max(this->smallest_y, child_wid->smallest_y + child_wid->padding_top + child_wid->padding_bottom);
1336  if (this->IsButton(child_wid->type)) {
1337  nbuttons++;
1338  this->smallest_x = std::max(this->smallest_x, child_wid->smallest_x + child_wid->padding_left + child_wid->padding_right);
1339  } else if (child_wid->type == NWID_SPACER) {
1340  this->spacers++;
1341  }
1342  }
1343 
1344  /* ... then in a second pass make sure the 'current' heights are set. Won't change ever. */
1345  for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1346  child_wid->current_y = this->smallest_y;
1347  if (!this->IsButton(child_wid->type)) {
1348  child_wid->current_x = child_wid->smallest_x;
1349  }
1350  }
1351  _toolbar_width = nbuttons * this->smallest_x;
1352  }
1353 
1354  void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override
1355  {
1356  assert(given_width >= this->smallest_x && given_height >= this->smallest_y);
1357 
1358  this->pos_x = x;
1359  this->pos_y = y;
1360  this->current_x = given_width;
1361  this->current_y = given_height;
1362 
1363  /* Figure out what are the visible buttons */
1364  memset(this->visible, 0, sizeof(this->visible));
1365  uint arrangable_count, button_count, spacer_count;
1366  const byte *arrangement = GetButtonArrangement(given_width, arrangable_count, button_count, spacer_count);
1367  for (uint i = 0; i < arrangable_count; i++) {
1368  this->visible[arrangement[i]] = true;
1369  }
1370 
1371  /* Create us ourselves a quick lookup table */
1372  NWidgetBase *widgets[WID_TN_END];
1373  for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1374  if (child_wid->type == NWID_SPACER) continue;
1375  widgets[((NWidgetCore*)child_wid)->index] = child_wid;
1376  }
1377 
1378  /* Now assign the widgets to their rightful place */
1379  uint position = 0; // Place to put next child relative to origin of the container.
1380  uint spacer_space = std::max(0, (int)given_width - (int)(button_count * this->smallest_x)); // Remaining spacing for 'spacer' widgets
1381  uint button_space = given_width - spacer_space; // Remaining spacing for the buttons
1382  uint spacer_i = 0;
1383  uint button_i = 0;
1384 
1385  /* Index into the arrangement indices. The macro lastof cannot be used here! */
1386  const byte *cur_wid = rtl ? &arrangement[arrangable_count - 1] : arrangement;
1387  for (uint i = 0; i < arrangable_count; i++) {
1388  NWidgetBase *child_wid = widgets[*cur_wid];
1389  /* If we have to give space to the spacers, do that */
1390  if (spacer_space != 0) {
1391  NWidgetBase *possible_spacer = rtl ? child_wid->next : child_wid->prev;
1392  if (possible_spacer != nullptr && possible_spacer->type == NWID_SPACER) {
1393  uint add = spacer_space / (spacer_count - spacer_i);
1394  position += add;
1395  spacer_space -= add;
1396  spacer_i++;
1397  }
1398  }
1399 
1400  /* Buttons can be scaled, the others not. */
1401  if (this->IsButton(child_wid->type)) {
1402  child_wid->current_x = button_space / (button_count - button_i);
1403  button_space -= child_wid->current_x;
1404  button_i++;
1405  }
1406  child_wid->AssignSizePosition(sizing, x + position, y, child_wid->current_x, this->current_y, rtl);
1407  position += child_wid->current_x;
1408 
1409  if (rtl) {
1410  cur_wid--;
1411  } else {
1412  cur_wid++;
1413  }
1414  }
1415  }
1416 
1417  void Draw(const Window *w) override
1418  {
1419  /* Draw brown-red toolbar bg. */
1420  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);
1421  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);
1422 
1423  bool rtl = _current_text_dir == TD_RTL;
1424  for (NWidgetBase *child_wid = rtl ? this->tail : this->head; child_wid != nullptr; child_wid = rtl ? child_wid->prev : child_wid->next) {
1425  if (child_wid->type == NWID_SPACER) continue;
1426  if (!this->visible[((NWidgetCore*)child_wid)->index]) continue;
1427 
1428  child_wid->Draw(w);
1429  }
1430  }
1431 
1432  NWidgetCore *GetWidgetFromPos(int x, int y) override
1433  {
1434  if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr;
1435 
1436  for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1437  if (child_wid->type == NWID_SPACER) continue;
1438  if (!this->visible[((NWidgetCore*)child_wid)->index]) continue;
1439 
1440  NWidgetCore *nwid = child_wid->GetWidgetFromPos(x, y);
1441  if (nwid != nullptr) return nwid;
1442  }
1443  return nullptr;
1444  }
1445 
1454  virtual const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const = 0;
1455 };
1456 
1459  const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
1460  {
1461  static const uint SMALLEST_ARRANGEMENT = 14;
1462  static const uint BIGGEST_ARRANGEMENT = 20;
1463 
1464  /* The number of buttons of each row of the toolbar should match the number of items which we want to be visible.
1465  * The total number of buttons should be equal to arrangable_count * 2.
1466  * No bad things happen, but we could see strange behaviours if we have buttons < (arrangable_count * 2) like a
1467  * pause button appearing on the right of the lower toolbar and weird resizing of the widgets even if there is
1468  * enough space.
1469  */
1470  static const byte arrange14[] = {
1471  WID_TN_PAUSE,
1473  WID_TN_TRAINS,
1475  WID_TN_SHIPS,
1479  WID_TN_RAILS,
1480  WID_TN_ROADS,
1481  WID_TN_WATER,
1482  WID_TN_AIR,
1485  // lower toolbar
1487  WID_TN_SAVE,
1489  WID_TN_TOWNS,
1494  WID_TN_GRAPHS,
1498  WID_TN_HELP,
1500  };
1501  static const byte arrange15[] = {
1502  WID_TN_PAUSE,
1505  WID_TN_TRAINS,
1507  WID_TN_SHIPS,
1509  WID_TN_RAILS,
1510  WID_TN_ROADS,
1511  WID_TN_WATER,
1512  WID_TN_AIR,
1517  // lower toolbar
1518  WID_TN_PAUSE,
1521  WID_TN_SAVE,
1522  WID_TN_TOWNS,
1527  WID_TN_GRAPHS,
1531  WID_TN_HELP,
1533  };
1534  static const byte arrange16[] = {
1535  WID_TN_PAUSE,
1539  WID_TN_TRAINS,
1541  WID_TN_SHIPS,
1543  WID_TN_RAILS,
1544  WID_TN_ROADS,
1545  WID_TN_WATER,
1546  WID_TN_AIR,
1551  // lower toolbar
1552  WID_TN_PAUSE,
1554  WID_TN_SAVE,
1555  WID_TN_TOWNS,
1560  WID_TN_GRAPHS,
1564  WID_TN_HELP,
1568  };
1569  static const byte arrange17[] = {
1570  WID_TN_PAUSE,
1575  WID_TN_TRAINS,
1577  WID_TN_SHIPS,
1579  WID_TN_RAILS,
1580  WID_TN_ROADS,
1581  WID_TN_WATER,
1582  WID_TN_AIR,
1587  // lower toolbar
1588  WID_TN_PAUSE,
1590  WID_TN_SAVE,
1593  WID_TN_TOWNS,
1597  WID_TN_GRAPHS,
1601  WID_TN_HELP,
1605  };
1606  static const byte arrange18[] = {
1607  WID_TN_PAUSE,
1611  WID_TN_TOWNS,
1617  WID_TN_RAILS,
1618  WID_TN_ROADS,
1619  WID_TN_WATER,
1620  WID_TN_AIR,
1625  // lower toolbar
1626  WID_TN_PAUSE,
1628  WID_TN_SAVE,
1630  WID_TN_TOWNS,
1633  WID_TN_GRAPHS,
1634  WID_TN_TRAINS,
1636  WID_TN_SHIPS,
1640  WID_TN_HELP,
1644  };
1645  static const byte arrange19[] = {
1646  WID_TN_PAUSE,
1650  WID_TN_TOWNS,
1652  WID_TN_TRAINS,
1654  WID_TN_SHIPS,
1656  WID_TN_RAILS,
1657  WID_TN_ROADS,
1658  WID_TN_WATER,
1659  WID_TN_AIR,
1665  // lower toolbar
1666  WID_TN_PAUSE,
1668  WID_TN_SAVE,
1673  WID_TN_GRAPHS,
1676  WID_TN_RAILS,
1677  WID_TN_ROADS,
1678  WID_TN_WATER,
1679  WID_TN_AIR,
1681  WID_TN_HELP,
1685  };
1686  static const byte arrange20[] = {
1687  WID_TN_PAUSE,
1691  WID_TN_TOWNS,
1693  WID_TN_TRAINS,
1695  WID_TN_SHIPS,
1697  WID_TN_RAILS,
1698  WID_TN_ROADS,
1699  WID_TN_WATER,
1700  WID_TN_AIR,
1703  WID_TN_GOAL,
1707  // lower toolbar
1708  WID_TN_PAUSE,
1710  WID_TN_SAVE,
1715  WID_TN_GRAPHS,
1718  WID_TN_RAILS,
1719  WID_TN_ROADS,
1720  WID_TN_WATER,
1721  WID_TN_AIR,
1723  WID_TN_STORY,
1724  WID_TN_HELP,
1728  };
1729  static const byte arrange_all[] = {
1730  WID_TN_PAUSE,
1733  WID_TN_SAVE,
1735  WID_TN_TOWNS,
1740  WID_TN_STORY,
1741  WID_TN_GOAL,
1742  WID_TN_GRAPHS,
1743  WID_TN_LEAGUE,
1745  WID_TN_TRAINS,
1747  WID_TN_SHIPS,
1751  WID_TN_RAILS,
1752  WID_TN_ROADS,
1753  WID_TN_TRAMS,
1754  WID_TN_WATER,
1755  WID_TN_AIR,
1759  WID_TN_HELP
1760  };
1761 
1762  /* If at least BIGGEST_ARRANGEMENT fit, just spread all the buttons nicely */
1763  uint full_buttons = std::max(CeilDiv(width, this->smallest_x), SMALLEST_ARRANGEMENT);
1764  if (full_buttons > BIGGEST_ARRANGEMENT) {
1765  button_count = arrangable_count = lengthof(arrange_all);
1766  spacer_count = this->spacers;
1767  return arrange_all;
1768  }
1769 
1770  /* Introduce the split toolbar */
1771  static const byte * const arrangements[] = { arrange14, arrange15, arrange16, arrange17, arrange18, arrange19, arrange20 };
1772 
1773  button_count = arrangable_count = full_buttons;
1774  spacer_count = this->spacers;
1775  return arrangements[full_buttons - SMALLEST_ARRANGEMENT] + ((_toolbar_mode == TB_LOWER) ? full_buttons : 0);
1776  }
1777 };
1778 
1781  uint panel_widths[2];
1782 
1783  void SetupSmallestSize(Window *w, bool init_array) override
1784  {
1785  this->NWidgetToolbarContainer::SetupSmallestSize(w, init_array);
1786 
1787  /* Find the size of panel_widths */
1788  uint i = 0;
1789  for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
1790  if (child_wid->type == NWID_SPACER || this->IsButton(child_wid->type)) continue;
1791 
1792  assert(i < lengthof(this->panel_widths));
1793  this->panel_widths[i++] = child_wid->current_x;
1794  _toolbar_width += child_wid->current_x;
1795  }
1796  }
1797 
1798  const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
1799  {
1800  static const byte arrange_all[] = {
1801  WID_TE_PAUSE,
1804  WID_TE_SAVE,
1805  WID_TE_SPACER,
1813  WID_TE_ROADS,
1814  WID_TE_TRAMS,
1815  WID_TE_WATER,
1816  WID_TE_TREES,
1817  WID_TE_SIGNS,
1819  WID_TE_HELP,
1820  };
1821  static const byte arrange_nopanel[] = {
1822  WID_TE_PAUSE,
1825  WID_TE_SAVE,
1833  WID_TE_ROADS,
1834  WID_TE_TRAMS,
1835  WID_TE_WATER,
1836  WID_TE_TREES,
1837  WID_TE_SIGNS,
1839  WID_TE_HELP,
1840  };
1841  static const byte arrange_switch[] = {
1847  WID_TE_ROADS,
1848  WID_TE_TRAMS,
1849  WID_TE_WATER,
1850  WID_TE_TREES,
1851  WID_TE_SIGNS,
1853  // lower toolbar
1854  WID_TE_PAUSE,
1857  WID_TE_SAVE,
1863  WID_TE_HELP,
1865  };
1866 
1867  /* If we can place all buttons *and* the panels, show them. */
1868  uint min_full_width = (lengthof(arrange_all) - lengthof(this->panel_widths)) * this->smallest_x + this->panel_widths[0] + this->panel_widths[1];
1869  if (width >= min_full_width) {
1870  width -= this->panel_widths[0] + this->panel_widths[1];
1871  arrangable_count = lengthof(arrange_all);
1872  button_count = arrangable_count - 2;
1873  spacer_count = this->spacers;
1874  return arrange_all;
1875  }
1876 
1877  /* 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 */
1878  uint min_small_width = (lengthof(arrange_switch) - lengthof(this->panel_widths)) * this->smallest_x / 2 + this->panel_widths[1];
1879  if (width > min_small_width) {
1880  width -= this->panel_widths[1];
1881  arrangable_count = lengthof(arrange_nopanel);
1882  button_count = arrangable_count - 1;
1883  spacer_count = this->spacers - 1;
1884  return arrange_nopanel;
1885  }
1886 
1887  /* Split toolbar */
1888  width -= this->panel_widths[1];
1889  arrangable_count = lengthof(arrange_switch) / 2;
1890  button_count = arrangable_count - 1;
1891  spacer_count = 0;
1892  return arrange_switch + ((_toolbar_mode == TB_LOWER) ? arrangable_count : 0);
1893  }
1894 };
1895 
1896 /* --- Toolbar handling for the 'normal' case */
1897 
1898 typedef CallBackFunction ToolbarButtonProc(Window *w);
1899 
1900 static ToolbarButtonProc * const _toolbar_button_procs[] = {
1901  ToolbarPauseClick,
1905  ToolbarMapClick,
1906  ToolbarTownClick,
1907  ToolbarSubsidiesClick,
1908  ToolbarStationsClick,
1909  ToolbarFinancesClick,
1910  ToolbarCompaniesClick,
1911  ToolbarStoryClick,
1912  ToolbarGoalClick,
1913  ToolbarGraphsClick,
1914  ToolbarLeagueClick,
1915  ToolbarIndustryClick,
1916  ToolbarTrainClick,
1917  ToolbarRoadClick,
1918  ToolbarShipClick,
1919  ToolbarAirClick,
1920  ToolbarZoomInClick,
1921  ToolbarZoomOutClick,
1922  ToolbarBuildRailClick,
1923  ToolbarBuildRoadClick,
1924  ToolbarBuildTramClick,
1925  ToolbarBuildWaterClick,
1926  ToolbarBuildAirClick,
1927  ToolbarForestClick,
1928  ToolbarMusicClick,
1929  ToolbarNewspaperClick,
1930  ToolbarHelpClick,
1931  ToolbarSwitchClick,
1932 };
1933 
1934 enum MainToolbarHotkeys {
1935  MTHK_PAUSE,
1936  MTHK_FASTFORWARD,
1937  MTHK_SETTINGS,
1938  MTHK_SAVEGAME,
1939  MTHK_LOADGAME,
1940  MTHK_SMALLMAP,
1941  MTHK_TOWNDIRECTORY,
1942  MTHK_SUBSIDIES,
1943  MTHK_STATIONS,
1944  MTHK_FINANCES,
1945  MTHK_COMPANIES,
1946  MTHK_STORY,
1947  MTHK_GOAL,
1948  MTHK_GRAPHS,
1949  MTHK_LEAGUE,
1950  MTHK_INDUSTRIES,
1951  MTHK_TRAIN_LIST,
1952  MTHK_ROADVEH_LIST,
1953  MTHK_SHIP_LIST,
1954  MTHK_AIRCRAFT_LIST,
1955  MTHK_ZOOM_IN,
1956  MTHK_ZOOM_OUT,
1957  MTHK_BUILD_RAIL,
1958  MTHK_BUILD_ROAD,
1959  MTHK_BUILD_TRAM,
1960  MTHK_BUILD_DOCKS,
1961  MTHK_BUILD_AIRPORT,
1962  MTHK_BUILD_TREES,
1963  MTHK_MUSIC,
1964  MTHK_LANDINFO,
1965  MTHK_AI_DEBUG,
1966  MTHK_SMALL_SCREENSHOT,
1967  MTHK_ZOOMEDIN_SCREENSHOT,
1968  MTHK_DEFAULTZOOM_SCREENSHOT,
1969  MTHK_GIANT_SCREENSHOT,
1970  MTHK_CHEATS,
1971  MTHK_TERRAFORM,
1972  MTHK_EXTRA_VIEWPORT,
1973  MTHK_CLIENT_LIST,
1974  MTHK_SIGN_LIST,
1975 };
1976 
1979  GUITimer timer;
1980 
1981  MainToolbarWindow(WindowDesc *desc) : Window(desc)
1982  {
1983  this->InitNested(0);
1984 
1985  _last_started_action = CBF_NONE;
1986  CLRBITS(this->flags, WF_WHITE_BORDER);
1987  this->SetWidgetDisabledState(WID_TN_PAUSE, _networking && !_network_server); // if not server, disable pause button
1988  this->SetWidgetDisabledState(WID_TN_FAST_FORWARD, _networking); // if networking, disable fast-forward button
1989  PositionMainToolbar(this);
1991 
1992  this->timer.SetInterval(MILLISECONDS_PER_TICK);
1993  }
1994 
1995  void FindWindowPlacementAndResize(int def_width, int def_height) override
1996  {
1998  }
1999 
2000  void OnPaint() override
2001  {
2002  /* If spectator, disable all construction buttons
2003  * ie : Build road, rail, ships, airports and landscaping
2004  * Since enabled state is the default, just disable when needed */
2006  /* disable company list drop downs, if there are no companies */
2008 
2011 
2012  this->DrawWidgets();
2013  }
2014 
2015  void OnClick(Point pt, int widget, int click_count) override
2016  {
2017  if (_game_mode != GM_MENU && !this->IsWidgetDisabled(widget)) _toolbar_button_procs[widget](this);
2018  }
2019 
2020  void OnDropdownSelect(int widget, int index) override
2021  {
2022  CallBackFunction cbf = _menu_clicked_procs[widget](index);
2023  if (cbf != CBF_NONE) _last_started_action = cbf;
2024  }
2025 
2026  EventState OnHotkey(int hotkey) override
2027  {
2028  CallBackFunction cbf = CBF_NONE;
2029  switch (hotkey) {
2030  case MTHK_PAUSE: ToolbarPauseClick(this); break;
2031  case MTHK_FASTFORWARD: ToolbarFastForwardClick(this); break;
2032  case MTHK_SETTINGS: ShowGameOptions(); break;
2033  case MTHK_SAVEGAME: MenuClickSaveLoad(); break;
2034  case MTHK_LOADGAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break;
2035  case MTHK_SMALLMAP: ShowSmallMap(); break;
2036  case MTHK_TOWNDIRECTORY: ShowTownDirectory(); break;
2037  case MTHK_SUBSIDIES: ShowSubsidiesList(); break;
2038  case MTHK_STATIONS: ShowCompanyStations(_local_company); break;
2039  case MTHK_FINANCES: ShowCompanyFinances(_local_company); break;
2040  case MTHK_COMPANIES: ShowCompany(_local_company); break;
2041  case MTHK_STORY: ShowStoryBook(_local_company); break;
2042  case MTHK_GOAL: ShowGoalsList(_local_company); break;
2043  case MTHK_GRAPHS: ShowOperatingProfitGraph(); break;
2044  case MTHK_LEAGUE: ShowCompanyLeagueTable(); break;
2045  case MTHK_INDUSTRIES: ShowBuildIndustryWindow(); break;
2046  case MTHK_TRAIN_LIST: ShowVehicleListWindow(_local_company, VEH_TRAIN); break;
2047  case MTHK_ROADVEH_LIST: ShowVehicleListWindow(_local_company, VEH_ROAD); break;
2048  case MTHK_SHIP_LIST: ShowVehicleListWindow(_local_company, VEH_SHIP); break;
2049  case MTHK_AIRCRAFT_LIST: ShowVehicleListWindow(_local_company, VEH_AIRCRAFT); break;
2050  case MTHK_ZOOM_IN: ToolbarZoomInClick(this); break;
2051  case MTHK_ZOOM_OUT: ToolbarZoomOutClick(this); break;
2052  case MTHK_BUILD_RAIL: ShowBuildRailToolbar(_last_built_railtype); break;
2053  case MTHK_BUILD_ROAD: ShowBuildRoadToolbar(_last_built_roadtype); break;
2054  case MTHK_BUILD_TRAM: ShowBuildRoadToolbar(_last_built_tramtype); break;
2055  case MTHK_BUILD_DOCKS: ShowBuildDocksToolbar(); break;
2056  case MTHK_BUILD_AIRPORT: ShowBuildAirToolbar(); break;
2057  case MTHK_BUILD_TREES: ShowBuildTreesToolbar(); break;
2058  case MTHK_MUSIC: ShowMusicWindow(); break;
2059  case MTHK_AI_DEBUG: ShowAIDebugWindow(); break;
2060  case MTHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break;
2061  case MTHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break;
2062  case MTHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break;
2063  case MTHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break;
2064  case MTHK_CHEATS: if (!_networking) ShowCheatWindow(); break;
2065  case MTHK_TERRAFORM: ShowTerraformToolbar(); break;
2066  case MTHK_EXTRA_VIEWPORT: ShowExtraViewportWindowForTileUnderCursor(); break;
2067  case MTHK_CLIENT_LIST: if (_networking) ShowClientList(); break;
2068  case MTHK_SIGN_LIST: ShowSignList(); break;
2069  case MTHK_LANDINFO: cbf = PlaceLandBlockInfo(); break;
2070  default: return ES_NOT_HANDLED;
2071  }
2072  if (cbf != CBF_NONE) _last_started_action = cbf;
2073  return ES_HANDLED;
2074  }
2075 
2076  void OnPlaceObject(Point pt, TileIndex tile) override
2077  {
2078  switch (_last_started_action) {
2079  case CBF_PLACE_SIGN:
2080  PlaceProc_Sign(tile);
2081  break;
2082 
2083  case CBF_PLACE_LANDINFO:
2084  ShowLandInfo(tile);
2085  break;
2086 
2087  default: NOT_REACHED();
2088  }
2089  }
2090 
2091  void OnPlaceObjectAbort() override
2092  {
2093  _last_started_action = CBF_NONE;
2094  }
2095 
2096  void OnRealtimeTick(uint delta_ms) override
2097  {
2098  if (!this->timer.Elapsed(delta_ms)) return;
2099  this->timer.SetInterval(MILLISECONDS_PER_TICK);
2100 
2101  if (this->IsWidgetLowered(WID_TN_PAUSE) != !!_pause_mode) {
2104  }
2105 
2106  if (this->IsWidgetLowered(WID_TN_FAST_FORWARD) != (_game_speed != 100)) {
2109  }
2110  }
2111 
2112  void OnTimeout() override
2113  {
2114  /* We do not want to automatically raise the pause, fast forward and
2115  * switchbar buttons; they have to stay down when pressed etc. */
2116  for (uint i = WID_TN_SETTINGS; i < WID_TN_SWITCH_BAR; i++) {
2117  if (this->IsWidgetLowered(i)) {
2118  this->RaiseWidget(i);
2119  this->SetWidgetDirty(i);
2120  }
2121  }
2122  }
2123 
2129  void OnInvalidateData(int data = 0, bool gui_scope = true) override
2130  {
2131  if (!gui_scope) return;
2133  }
2134 
2135  static HotkeyList hotkeys;
2136 };
2137 
2138 const uint16 _maintoolbar_pause_keys[] = {WKC_F1, WKC_PAUSE, 0};
2139 const uint16 _maintoolbar_zoomin_keys[] = {WKC_NUM_PLUS, WKC_EQUALS, WKC_SHIFT | WKC_EQUALS, WKC_SHIFT | WKC_F5, 0};
2140 const uint16 _maintoolbar_zoomout_keys[] = {WKC_NUM_MINUS, WKC_MINUS, WKC_SHIFT | WKC_MINUS, WKC_SHIFT | WKC_F6, 0};
2141 const uint16 _maintoolbar_smallmap_keys[] = {WKC_F4, 'M', 0};
2142 
2143 static Hotkey maintoolbar_hotkeys[] = {
2144  Hotkey(_maintoolbar_pause_keys, "pause", MTHK_PAUSE),
2145  Hotkey((uint16)0, "fastforward", MTHK_FASTFORWARD),
2146  Hotkey(WKC_F2, "settings", MTHK_SETTINGS),
2147  Hotkey(WKC_F3, "saveload", MTHK_SAVEGAME),
2148  Hotkey((uint16)0, "load_game", MTHK_LOADGAME),
2149  Hotkey(_maintoolbar_smallmap_keys, "smallmap", MTHK_SMALLMAP),
2150  Hotkey(WKC_F5, "town_list", MTHK_TOWNDIRECTORY),
2151  Hotkey(WKC_F6, "subsidies", MTHK_SUBSIDIES),
2152  Hotkey(WKC_F7, "station_list", MTHK_STATIONS),
2153  Hotkey(WKC_F8, "finances", MTHK_FINANCES),
2154  Hotkey(WKC_F9, "companies", MTHK_COMPANIES),
2155  Hotkey((uint16)0, "story_book", MTHK_STORY),
2156  Hotkey((uint16)0, "goal_list", MTHK_GOAL),
2157  Hotkey(WKC_F10, "graphs", MTHK_GRAPHS),
2158  Hotkey(WKC_F11, "league", MTHK_LEAGUE),
2159  Hotkey(WKC_F12, "industry_list", MTHK_INDUSTRIES),
2160  Hotkey(WKC_SHIFT | WKC_F1, "train_list", MTHK_TRAIN_LIST),
2161  Hotkey(WKC_SHIFT | WKC_F2, "roadveh_list", MTHK_ROADVEH_LIST),
2162  Hotkey(WKC_SHIFT | WKC_F3, "ship_list", MTHK_SHIP_LIST),
2163  Hotkey(WKC_SHIFT | WKC_F4, "aircraft_list", MTHK_AIRCRAFT_LIST),
2164  Hotkey(_maintoolbar_zoomin_keys, "zoomin", MTHK_ZOOM_IN),
2165  Hotkey(_maintoolbar_zoomout_keys, "zoomout", MTHK_ZOOM_OUT),
2166  Hotkey(WKC_SHIFT | WKC_F7, "build_rail", MTHK_BUILD_RAIL),
2167  Hotkey(WKC_SHIFT | WKC_F8, "build_road", MTHK_BUILD_ROAD),
2168  Hotkey((uint16)0, "build_tram", MTHK_BUILD_TRAM),
2169  Hotkey(WKC_SHIFT | WKC_F9, "build_docks", MTHK_BUILD_DOCKS),
2170  Hotkey(WKC_SHIFT | WKC_F10, "build_airport", MTHK_BUILD_AIRPORT),
2171  Hotkey(WKC_SHIFT | WKC_F11, "build_trees", MTHK_BUILD_TREES),
2172  Hotkey(WKC_SHIFT | WKC_F12, "music", MTHK_MUSIC),
2173  Hotkey((uint16)0, "ai_debug", MTHK_AI_DEBUG),
2174  Hotkey(WKC_CTRL | 'S', "small_screenshot", MTHK_SMALL_SCREENSHOT),
2175  Hotkey(WKC_CTRL | 'P', "zoomedin_screenshot", MTHK_ZOOMEDIN_SCREENSHOT),
2176  Hotkey(WKC_CTRL | 'D', "defaultzoom_screenshot", MTHK_DEFAULTZOOM_SCREENSHOT),
2177  Hotkey((uint16)0, "giant_screenshot", MTHK_GIANT_SCREENSHOT),
2178  Hotkey(WKC_CTRL | WKC_ALT | 'C', "cheats", MTHK_CHEATS),
2179  Hotkey('L', "terraform", MTHK_TERRAFORM),
2180  Hotkey('V', "extra_viewport", MTHK_EXTRA_VIEWPORT),
2181  Hotkey((uint16)0, "client_list", MTHK_CLIENT_LIST),
2182  Hotkey((uint16)0, "sign_list", MTHK_SIGN_LIST),
2183  Hotkey((uint16)0, "land_info", MTHK_LANDINFO),
2184  HOTKEY_LIST_END
2185 };
2186 HotkeyList MainToolbarWindow::hotkeys("maintoolbar", maintoolbar_hotkeys);
2187 
2188 static NWidgetBase *MakeMainToolbar(int *biggest_index)
2189 {
2191  static const SpriteID toolbar_button_sprites[] = {
2192  SPR_IMG_PAUSE, // WID_TN_PAUSE
2193  SPR_IMG_FASTFORWARD, // WID_TN_FAST_FORWARD
2194  SPR_IMG_SETTINGS, // WID_TN_SETTINGS
2195  SPR_IMG_SAVE, // WID_TN_SAVE
2196  SPR_IMG_SMALLMAP, // WID_TN_SMALL_MAP
2197  SPR_IMG_TOWN, // WID_TN_TOWNS
2198  SPR_IMG_SUBSIDIES, // WID_TN_SUBSIDIES
2199  SPR_IMG_COMPANY_LIST, // WID_TN_STATIONS
2200  SPR_IMG_COMPANY_FINANCE, // WID_TN_FINANCES
2201  SPR_IMG_COMPANY_GENERAL, // WID_TN_COMPANIES
2202  SPR_IMG_STORY_BOOK, // WID_TN_STORY
2203  SPR_IMG_GOAL, // WID_TN_GOAL
2204  SPR_IMG_GRAPHS, // WID_TN_GRAPHS
2205  SPR_IMG_COMPANY_LEAGUE, // WID_TN_LEAGUE
2206  SPR_IMG_INDUSTRY, // WID_TN_INDUSTRIES
2207  SPR_IMG_TRAINLIST, // WID_TN_TRAINS
2208  SPR_IMG_TRUCKLIST, // WID_TN_ROADVEHS
2209  SPR_IMG_SHIPLIST, // WID_TN_SHIPS
2210  SPR_IMG_AIRPLANESLIST, // WID_TN_AIRCRAFT
2211  SPR_IMG_ZOOMIN, // WID_TN_ZOOMIN
2212  SPR_IMG_ZOOMOUT, // WID_TN_ZOOMOUT
2213  SPR_IMG_BUILDRAIL, // WID_TN_RAILS
2214  SPR_IMG_BUILDROAD, // WID_TN_ROADS
2215  SPR_IMG_BUILDTRAMS, // WID_TN_TRAMS
2216  SPR_IMG_BUILDWATER, // WID_TN_WATER
2217  SPR_IMG_BUILDAIR, // WID_TN_AIR
2218  SPR_IMG_LANDSCAPING, // WID_TN_LANDSCAPE
2219  SPR_IMG_MUSIC, // WID_TN_MUSIC_SOUND
2220  SPR_IMG_MESSAGES, // WID_TN_MESSAGES
2221  SPR_IMG_QUERY, // WID_TN_HELP
2222  SPR_IMG_SWITCH_TOOLBAR, // WID_TN_SWITCH_BAR
2223  };
2224 
2226  for (uint i = 0; i < WID_TN_END; i++) {
2227  switch (i) {
2228  case WID_TN_SMALL_MAP:
2229  case WID_TN_FINANCES:
2230  case WID_TN_VEHICLE_START:
2231  case WID_TN_ZOOM_IN:
2233  case WID_TN_MUSIC_SOUND:
2234  hor->Add(new NWidgetSpacer(0, 0));
2235  break;
2236  }
2237  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);
2238  leaf->SetMinimalSize(20, 20);
2239  hor->Add(leaf);
2240  }
2241 
2242  *biggest_index = std::max<int>(*biggest_index, WID_TN_SWITCH_BAR);
2243  return hor;
2244 }
2245 
2246 static const NWidgetPart _nested_toolbar_normal_widgets[] = {
2248 };
2249 
2250 static WindowDesc _toolb_normal_desc(
2251  WDP_MANUAL, nullptr, 0, 0,
2253  WDF_NO_FOCUS,
2254  _nested_toolbar_normal_widgets, lengthof(_nested_toolbar_normal_widgets),
2255  &MainToolbarWindow::hotkeys
2256 );
2257 
2258 
2259 /* --- Toolbar handling for the scenario editor */
2260 
2261 static MenuClickedProc * const _scen_toolbar_dropdown_procs[] = {
2262  nullptr, // 0
2263  nullptr, // 1
2264  MenuClickSettings, // 2
2265  MenuClickSaveLoad, // 3
2266  nullptr, // 4
2267  nullptr, // 5
2268  nullptr, // 6
2269  nullptr, // 7
2270  MenuClickMap, // 8
2271  nullptr, // 9
2272  nullptr, // 10
2273  nullptr, // 11
2274  nullptr, // 12
2275  nullptr, // 13
2276  ToolbarScenBuildRoad, // 14
2277  ToolbarScenBuildTram, // 15
2278  nullptr, // 16
2279  nullptr, // 17
2280  nullptr, // 18
2281  nullptr, // 19
2282  MenuClickMusicWindow, // 20
2283  MenuClickHelp, // 21
2284  nullptr, // 22
2285 };
2286 
2287 static ToolbarButtonProc * const _scen_toolbar_button_procs[] = {
2288  ToolbarPauseClick,
2292  ToolbarBtn_NULL,
2294  ToolbarScenDateBackward,
2295  ToolbarScenDateForward,
2296  ToolbarScenMapTownDir,
2297  ToolbarZoomInClick,
2298  ToolbarZoomOutClick,
2299  ToolbarScenGenLand,
2300  ToolbarScenGenTown,
2301  ToolbarScenGenIndustry,
2302  ToolbarScenBuildRoadClick,
2303  ToolbarScenBuildTramClick,
2304  ToolbarScenBuildDocks,
2305  ToolbarScenPlantTrees,
2306  ToolbarScenPlaceSign,
2307  ToolbarBtn_NULL,
2308  ToolbarMusicClick,
2309  ToolbarHelpClick,
2310  ToolbarSwitchClick,
2311 };
2312 
2313 enum MainToolbarEditorHotkeys {
2314  MTEHK_PAUSE,
2315  MTEHK_FASTFORWARD,
2316  MTEHK_SETTINGS,
2317  MTEHK_SAVEGAME,
2318  MTEHK_GENLAND,
2319  MTEHK_GENTOWN,
2320  MTEHK_GENINDUSTRY,
2321  MTEHK_BUILD_ROAD,
2322  MTEHK_BUILD_TRAM,
2323  MTEHK_BUILD_DOCKS,
2324  MTEHK_BUILD_TREES,
2325  MTEHK_SIGN,
2326  MTEHK_MUSIC,
2327  MTEHK_LANDINFO,
2328  MTEHK_SMALL_SCREENSHOT,
2329  MTEHK_ZOOMEDIN_SCREENSHOT,
2330  MTEHK_DEFAULTZOOM_SCREENSHOT,
2331  MTEHK_GIANT_SCREENSHOT,
2332  MTEHK_ZOOM_IN,
2333  MTEHK_ZOOM_OUT,
2334  MTEHK_TERRAFORM,
2335  MTEHK_SMALLMAP,
2336  MTEHK_EXTRA_VIEWPORT,
2337 };
2338 
2340  GUITimer timer;
2341 
2343  {
2344  this->InitNested(0);
2345 
2346  _last_started_action = CBF_NONE;
2347  CLRBITS(this->flags, WF_WHITE_BORDER);
2348  PositionMainToolbar(this);
2350 
2351  this->timer.SetInterval(MILLISECONDS_PER_TICK);
2352  }
2353 
2354  void FindWindowPlacementAndResize(int def_width, int def_height) override
2355  {
2357  }
2358 
2359  void OnPaint() override
2360  {
2365 
2366  this->DrawWidgets();
2367  }
2368 
2369  void DrawWidget(const Rect &r, int widget) const override
2370  {
2371  switch (widget) {
2372  case WID_TE_DATE:
2374  DrawString(r.left, r.right, (this->height - FONT_HEIGHT_NORMAL) / 2, STR_WHITE_DATE_LONG, TC_FROMSTRING, SA_HOR_CENTER);
2375  break;
2376 
2377  case WID_TE_SPACER: {
2378  int height = r.bottom - r.top;
2379  if (height > 2 * FONT_HEIGHT_NORMAL) {
2380  DrawString(r.left, r.right, (height + 1) / 2 - FONT_HEIGHT_NORMAL, STR_SCENEDIT_TOOLBAR_OPENTTD, TC_FROMSTRING, SA_HOR_CENTER);
2381  DrawString(r.left, r.right, (height + 1) / 2, STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR, TC_FROMSTRING, SA_HOR_CENTER);
2382  } else {
2383  DrawString(r.left, r.right, (height - FONT_HEIGHT_NORMAL) / 2, STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR, TC_FROMSTRING, SA_HOR_CENTER);
2384  }
2385  break;
2386  }
2387  }
2388  }
2389 
2390  void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
2391  {
2392  switch (widget) {
2393  case WID_TE_SPACER:
2394  size->width = std::max(GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_OPENTTD).width, GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR).width) + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
2395  break;
2396 
2397  case WID_TE_DATE:
2398  SetDParam(0, ConvertYMDToDate(MAX_YEAR, 0, 1));
2399  *size = GetStringBoundingBox(STR_WHITE_DATE_LONG);
2400  size->height = std::max(size->height, GetSpriteSize(SPR_IMG_SAVE).height + WD_IMGBTN_TOP + WD_IMGBTN_BOTTOM);
2401  break;
2402  }
2403  }
2404 
2405  void OnClick(Point pt, int widget, int click_count) override
2406  {
2407  if (_game_mode == GM_MENU) return;
2408  CallBackFunction cbf = _scen_toolbar_button_procs[widget](this);
2409  if (cbf != CBF_NONE) _last_started_action = cbf;
2410  }
2411 
2412  void OnDropdownSelect(int widget, int index) override
2413  {
2414  CallBackFunction cbf = _scen_toolbar_dropdown_procs[widget](index);
2415  if (cbf != CBF_NONE) _last_started_action = cbf;
2416  if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
2417  }
2418 
2419  EventState OnHotkey(int hotkey) override
2420  {
2421  CallBackFunction cbf = CBF_NONE;
2422  switch (hotkey) {
2423  case MTEHK_PAUSE: ToolbarPauseClick(this); break;
2424  case MTEHK_FASTFORWARD: ToolbarFastForwardClick(this); break;
2425  case MTEHK_SETTINGS: ShowGameOptions(); break;
2426  case MTEHK_SAVEGAME: MenuClickSaveLoad(); break;
2427  case MTEHK_GENLAND: ToolbarScenGenLand(this); break;
2428  case MTEHK_GENTOWN: ToolbarScenGenTown(this); break;
2429  case MTEHK_GENINDUSTRY: ToolbarScenGenIndustry(this); break;
2430  case MTEHK_BUILD_ROAD: ToolbarScenBuildRoadClick(this); break;
2431  case MTEHK_BUILD_TRAM: ToolbarScenBuildTramClick(this); break;
2432  case MTEHK_BUILD_DOCKS: ToolbarScenBuildDocks(this); break;
2433  case MTEHK_BUILD_TREES: ToolbarScenPlantTrees(this); break;
2434  case MTEHK_SIGN: cbf = ToolbarScenPlaceSign(this); break;
2435  case MTEHK_MUSIC: ShowMusicWindow(); break;
2436  case MTEHK_LANDINFO: cbf = PlaceLandBlockInfo(); break;
2437  case MTEHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break;
2438  case MTEHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break;
2439  case MTEHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break;
2440  case MTEHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break;
2441  case MTEHK_ZOOM_IN: ToolbarZoomInClick(this); break;
2442  case MTEHK_ZOOM_OUT: ToolbarZoomOutClick(this); break;
2443  case MTEHK_TERRAFORM: ShowEditorTerraformToolbar(); break;
2444  case MTEHK_SMALLMAP: ShowSmallMap(); break;
2445  case MTEHK_EXTRA_VIEWPORT: ShowExtraViewportWindowForTileUnderCursor(); break;
2446  default: return ES_NOT_HANDLED;
2447  }
2448  if (cbf != CBF_NONE) _last_started_action = cbf;
2449  return ES_HANDLED;
2450  }
2451 
2452  void OnPlaceObject(Point pt, TileIndex tile) override
2453  {
2454  switch (_last_started_action) {
2455  case CBF_PLACE_SIGN:
2456  PlaceProc_Sign(tile);
2457  break;
2458 
2459  case CBF_PLACE_LANDINFO:
2460  ShowLandInfo(tile);
2461  break;
2462 
2463  default: NOT_REACHED();
2464  }
2465  }
2466 
2467  void OnPlaceObjectAbort() override
2468  {
2469  _last_started_action = CBF_NONE;
2470  }
2471 
2472  void OnTimeout() override
2473  {
2477  }
2478 
2479  void OnRealtimeTick(uint delta_ms) override
2480  {
2481  if (!this->timer.Elapsed(delta_ms)) return;
2482  this->timer.SetInterval(MILLISECONDS_PER_TICK);
2483 
2484  if (this->IsWidgetLowered(WID_TE_PAUSE) != !!_pause_mode) {
2486  this->SetDirty();
2487  }
2488 
2489  if (this->IsWidgetLowered(WID_TE_FAST_FORWARD) != (_game_speed != 100)) {
2491  this->SetDirty();
2492  }
2493  }
2494 
2500  void OnInvalidateData(int data = 0, bool gui_scope = true) override
2501  {
2502  if (!gui_scope) return;
2504  }
2505 
2506  void OnQueryTextFinished(char *str) override
2507  {
2508  /* Was 'cancel' pressed? */
2509  if (str == nullptr) return;
2510 
2511  int32 value;
2512  if (!StrEmpty(str)) {
2513  value = atoi(str);
2514  } else {
2515  /* An empty string means revert to the default */
2516  value = DEF_START_YEAR;
2517  }
2518  SetStartingYear(value);
2519 
2520  this->SetDirty();
2521  }
2522 
2523  static HotkeyList hotkeys;
2524 };
2525 
2526 static Hotkey scenedit_maintoolbar_hotkeys[] = {
2527  Hotkey(_maintoolbar_pause_keys, "pause", MTEHK_PAUSE),
2528  Hotkey((uint16)0, "fastforward", MTEHK_FASTFORWARD),
2529  Hotkey(WKC_F2, "settings", MTEHK_SETTINGS),
2530  Hotkey(WKC_F3, "saveload", MTEHK_SAVEGAME),
2531  Hotkey(WKC_F4, "gen_land", MTEHK_GENLAND),
2532  Hotkey(WKC_F5, "gen_town", MTEHK_GENTOWN),
2533  Hotkey(WKC_F6, "gen_industry", MTEHK_GENINDUSTRY),
2534  Hotkey(WKC_F7, "build_road", MTEHK_BUILD_ROAD),
2535  Hotkey((uint16)0, "build_tram", MTEHK_BUILD_TRAM),
2536  Hotkey(WKC_F8, "build_docks", MTEHK_BUILD_DOCKS),
2537  Hotkey(WKC_F9, "build_trees", MTEHK_BUILD_TREES),
2538  Hotkey(WKC_F10, "build_sign", MTEHK_SIGN),
2539  Hotkey(WKC_F11, "music", MTEHK_MUSIC),
2540  Hotkey(WKC_F12, "land_info", MTEHK_LANDINFO),
2541  Hotkey(WKC_CTRL | 'S', "small_screenshot", MTEHK_SMALL_SCREENSHOT),
2542  Hotkey(WKC_CTRL | 'P', "zoomedin_screenshot", MTEHK_ZOOMEDIN_SCREENSHOT),
2543  Hotkey(WKC_CTRL | 'D', "defaultzoom_screenshot", MTEHK_DEFAULTZOOM_SCREENSHOT),
2544  Hotkey((uint16)0, "giant_screenshot", MTEHK_GIANT_SCREENSHOT),
2545  Hotkey(_maintoolbar_zoomin_keys, "zoomin", MTEHK_ZOOM_IN),
2546  Hotkey(_maintoolbar_zoomout_keys, "zoomout", MTEHK_ZOOM_OUT),
2547  Hotkey('L', "terraform", MTEHK_TERRAFORM),
2548  Hotkey('M', "smallmap", MTEHK_SMALLMAP),
2549  Hotkey('V', "extra_viewport", MTEHK_EXTRA_VIEWPORT),
2550  HOTKEY_LIST_END
2551 };
2552 HotkeyList ScenarioEditorToolbarWindow::hotkeys("scenedit_maintoolbar", scenedit_maintoolbar_hotkeys);
2553 
2554 static const NWidgetPart _nested_toolb_scen_inner_widgets[] = {
2555  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_PAUSE), SetDataTip(SPR_IMG_PAUSE, STR_TOOLBAR_TOOLTIP_PAUSE_GAME),
2556  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_FAST_FORWARD), SetDataTip(SPR_IMG_FASTFORWARD, STR_TOOLBAR_TOOLTIP_FORWARD),
2557  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SETTINGS), SetDataTip(SPR_IMG_SETTINGS, STR_TOOLBAR_TOOLTIP_OPTIONS),
2558  NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_TE_SAVE), SetDataTip(SPR_IMG_SAVE, STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO),
2560  NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_SPACER), EndContainer(),
2562  NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_DATE_PANEL),
2563  NWidget(NWID_HORIZONTAL), SetPIP(3, 2, 3),
2564  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_BACKWARD), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD),
2565  NWidget(WWT_EMPTY, COLOUR_GREY, WID_TE_DATE), SetDataTip(STR_NULL, STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE),
2566  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_FORWARD), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD),
2567  EndContainer(),
2568  EndContainer(),
2570  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SMALL_MAP), SetDataTip(SPR_IMG_SMALLMAP, STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY),
2572  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_IN), SetDataTip(SPR_IMG_ZOOMIN, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN),
2573  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_OUT), SetDataTip(SPR_IMG_ZOOMOUT, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT),
2575  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_LAND_GENERATE), SetDataTip(SPR_IMG_LANDSCAPING, STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION),
2576  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TOWN_GENERATE), SetDataTip(SPR_IMG_TOWN, STR_SCENEDIT_TOOLBAR_TOWN_GENERATION),
2577  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_INDUSTRY), SetDataTip(SPR_IMG_INDUSTRY, STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION),
2578  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_ROADS), SetDataTip(SPR_IMG_BUILDROAD, STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION),
2579  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_TRAMS), SetDataTip(SPR_IMG_BUILDTRAMS, STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION),
2580  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_WATER), SetDataTip(SPR_IMG_BUILDWATER, STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS),
2581  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TREES), SetDataTip(SPR_IMG_PLANTTREES, STR_SCENEDIT_TOOLBAR_PLANT_TREES),
2582  NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_SIGNS), SetDataTip(SPR_IMG_SIGN, STR_SCENEDIT_TOOLBAR_PLACE_SIGN),
2584  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_MUSIC_SOUND), SetDataTip(SPR_IMG_MUSIC, STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW),
2585  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_HELP), SetDataTip(SPR_IMG_QUERY, STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION),
2586  NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SWITCH_BAR), SetDataTip(SPR_IMG_SWITCH_TOOLBAR, STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR),
2587 };
2588 
2589 static NWidgetBase *MakeScenarioToolbar(int *biggest_index)
2590 {
2591  return MakeNWidgets(_nested_toolb_scen_inner_widgets, lengthof(_nested_toolb_scen_inner_widgets), biggest_index, new NWidgetScenarioToolbarContainer());
2592 }
2593 
2594 static const NWidgetPart _nested_toolb_scen_widgets[] = {
2595  NWidgetFunction(MakeScenarioToolbar),
2596 };
2597 
2598 static WindowDesc _toolb_scen_desc(
2599  WDP_MANUAL, nullptr, 0, 0,
2601  WDF_NO_FOCUS,
2602  _nested_toolb_scen_widgets, lengthof(_nested_toolb_scen_widgets),
2603  &ScenarioEditorToolbarWindow::hotkeys
2604 );
2605 
2608 {
2609  /* Clean old GUI values; railtype is (re)set by rail_gui.cpp */
2610  _last_built_roadtype = ROADTYPE_ROAD;
2611  _last_built_tramtype = ROADTYPE_TRAM;
2612 
2613  if (_game_mode == GM_EDITOR) {
2614  new ScenarioEditorToolbarWindow(&_toolb_scen_desc);
2615  } else {
2616  new MainToolbarWindow(&_toolb_normal_desc);
2617  }
2618 }
VEH_AIRCRAFT
@ VEH_AIRCRAFT
Aircraft vehicle type.
Definition: vehicle_type.h:27
SaveLoadEditorMenuEntries
SaveLoadEditorMenuEntries
SaveLoad entries in scenario editor mode.
Definition: toolbar_gui.cpp:372
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:579
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:3169
ScenarioEditorToolbarWindow::OnDropdownSelect
void OnDropdownSelect(int widget, int index) override
A dropdown option associated to this window has been selected.
Definition: toolbar_gui.cpp:2412
PopupMainToolbMenu
static void PopupMainToolbMenu(Window *w, int widget, DropDownList &&list, int def)
Pop up a generic text only menu.
Definition: toolbar_gui.cpp:183
TileIndex
uint32 TileIndex
The index/ID of a Tile.
Definition: tile_type.h:83
WID_TN_BUILDING_TOOLS_START
@ WID_TN_BUILDING_TOOLS_START
Helper for the offset of the building tools.
Definition: toolbar_widget.h:37
WID_TN_SAVE
@ WID_TN_SAVE
Save menu.
Definition: toolbar_widget.h:18
sound_func.h
_last_started_action
static CallBackFunction _last_started_action
Last started user action.
Definition: toolbar_gui.cpp:83
WID_TN_COMPANIES
@ WID_TN_COMPANIES
Company menu.
Definition: toolbar_widget.h:24
WID_TN_FINANCES
@ WID_TN_FINANCES
Finance menu.
Definition: toolbar_widget.h:23
WWT_IMGBTN_2
@ WWT_IMGBTN_2
(Toggle) Button with diff image when clicked
Definition: widget_type.h:51
NWidgetFunction
static NWidgetPart NWidgetFunction(NWidgetFunctionType *func_ptr)
Obtain a nested widget (sub)tree from an external source.
Definition: widget_type.h:1239
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:512
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:320
GetRailTypeDropDownList
DropDownList GetRailTypeDropDownList(bool for_replacement, bool all_option)
Create a drop down list for all the rail types of the local company.
Definition: rail_gui.cpp:2171
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:186
MenuClickIndustry
static CallBackFunction MenuClickIndustry(int index)
Handle click on the entry in the Industry menu.
Definition: toolbar_gui.cpp:721
LinkGraphSchedule::ShiftDates
void ShiftDates(int interval)
Shift all dates (join dates and edge annotations) of link graphs and link graph jobs by the number of...
Definition: linkgraphschedule.cpp:134
Dimension
Dimensions (a width and height) of a rectangle in 2D.
Definition: geometry_type.hpp:27
ZOOM_OUT
@ ZOOM_OUT
Zoom out (get helicopter view).
Definition: viewport_type.h:82
command_func.h
MenuClickGraphs
static CallBackFunction MenuClickGraphs(int index)
Handle click on the entry in the Graphs menu.
Definition: toolbar_gui.cpp:666
PositionMainToolbar
int PositionMainToolbar(Window *w)
(Re)position main toolbar window at the screen.
Definition: window.cpp:3382
ShowBuildAirToolbar
Window * ShowBuildAirToolbar()
Open the build airport toolbar window.
Definition: airport_gui.cpp:217
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:196
toolbar_gui.h
smallmap_gui.h
ShowStoryBook
void ShowStoryBook(CompanyID company, uint16 page_id=INVALID_STORY_PAGE)
Raise or create the story book window for company, at page page_id.
Definition: story_gui.cpp:1062
guitimer_func.h
Window::ReInit
void ReInit(int rx=0, int ry=0)
Re-initialize a window, and optionally change its size.
Definition: window.cpp: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:276
NWidgetToolbarContainer::GetWidgetFromPos
NWidgetCore * GetWidgetFromPos(int x, int y) override
Definition: toolbar_gui.cpp:1432
signs_func.h
WID_TN_AIR
@ WID_TN_AIR
Airport building toolbar.
Definition: toolbar_widget.h:42
company_gui.h
TF_FORBIDDEN
@ TF_FORBIDDEN
Forbidden.
Definition: town_type.h:94
WID_TN_STORY
@ WID_TN_STORY
Story menu.
Definition: toolbar_widget.h:25
WWT_IMGBTN
@ WWT_IMGBTN
(Toggle) Button with image
Definition: widget_type.h:50
Window::viewport
ViewportData * viewport
Pointer to viewport data, if present.
Definition: window_gui.h:321
_network_server
bool _network_server
network-server is active
Definition: network.cpp:57
NWidgetToolbarContainer::Draw
void Draw(const Window *w) override
Definition: toolbar_gui.cpp:1417
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:399
MainToolbarWindow::OnRealtimeTick
void OnRealtimeTick(uint delta_ms) override
Called periodically.
Definition: toolbar_gui.cpp:2096
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
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:568
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
WID_TN_GOAL
@ WID_TN_GOAL
Goal menu.
Definition: toolbar_widget.h:26
WDF_NO_FOCUS
@ WDF_NO_FOCUS
This window won't get focus/make any other window lose focus when click.
Definition: window_gui.h:212
ToolbarScenSaveOrLoad
static CallBackFunction ToolbarScenSaveOrLoad(Window *w)
Handle click on SaveLoad button in toolbar in the scenario editor.
Definition: toolbar_gui.cpp:411
NWidgetScenarioToolbarContainer::SetupSmallestSize
void SetupSmallestSize(Window *w, bool init_array) override
Definition: toolbar_gui.cpp:1783
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:1256
TextColour
TextColour
Colour of the strings, see _string_colourmap in table/string_colours.h or docs/ottd-colourtext-palett...
Definition: gfx_type.h:250
vehicle_base.h
DoZoomInOutWindow
bool DoZoomInOutWindow(ZoomStateChange how, Window *w)
Zooms a viewport in a window in or out.
Definition: main_gui.cpp:91
screenshot_gui.h
ShowGameOptions
void ShowGameOptions()
Open the game options window.
Definition: settings_gui.cpp:745
NWidgetLeaf
Leaf widget.
Definition: widget_type.h:815
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:377
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:2485
_settings_client
ClientSettings _settings_client
The current settings for this game.
Definition: settings.cpp:52
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:642
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:863
WWT_EMPTY
@ WWT_EMPTY
Empty widget, place holder to reserve space in widget array.
Definition: widget_type.h:46
CallBackFunction
CallBackFunction
Callback functions.
Definition: toolbar_gui.cpp:77
newgrf_debug.h
network_gui.h
MainToolbarWindow::OnHotkey
EventState OnHotkey(int hotkey) override
A hotkey has been pressed.
Definition: toolbar_gui.cpp:2026
NWidgetScenarioToolbarContainer
Container for the scenario editor's toolbar.
Definition: toolbar_gui.cpp:1780
_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:2419
VEH_ROAD
@ VEH_ROAD
Road vehicle type.
Definition: vehicle_type.h:25
Vehicle
Vehicle data structure.
Definition: vehicle_base.h:221
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
ROADTYPE_ROAD
@ ROADTYPE_ROAD
Basic road type.
Definition: road_type.h:24
MenuClickMap
static CallBackFunction MenuClickMap(int index)
Handle click on one of the entries in the Map menu.
Definition: toolbar_gui.cpp:485
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:3015
MenuClickBuildTram
static CallBackFunction MenuClickBuildTram(int index)
Handle click on the entry in the Build Tram menu.
Definition: toolbar_gui.cpp:903
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:971
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:1107
WID_TE_DATE_PANEL
@ WID_TE_DATE_PANEL
Container for the date widgets.
Definition: toolbar_widget.h:72
toolbar_widget.h
WD_IMGBTN_BOTTOM
@ WD_IMGBTN_BOTTOM
Bottom offset of image in the button.
Definition: window_gui.h:43
GetStringBoundingBox
Dimension GetStringBoundingBox(const char *str, FontSize start_fontsize)
Return the string dimension in pixels.
Definition: gfx.cpp:888
DropDownListCompanyItem
Drop down list entry for showing a company entry, with companies 'blob'.
Definition: toolbar_gui.cpp:117
WID_TN_ZOOM_OUT
@ WID_TN_ZOOM_OUT
Zoom out the main viewport.
Definition: toolbar_widget.h:36
textbuf_gui.h
GameSettings::game_creation
GameCreationSettings game_creation
settings used during the creation of a game (map)
Definition: settings_type.h:576
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:287
MainToolbarWindow::OnTimeout
void OnTimeout() override
Called when this window's timeout has been reached.
Definition: toolbar_gui.cpp:2112
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
COMPANY_FIRST
@ COMPANY_FIRST
First company, same as owner.
Definition: company_type.h:22
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:2076
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:477
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:2390
ScenarioEditorToolbarWindow::FindWindowPlacementAndResize
void FindWindowPlacementAndResize(int def_width, int def_height) override
Resize window towards the default size.
Definition: toolbar_gui.cpp:2354
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:2467
WID_TN_HELP
@ WID_TN_HELP
Help menu.
Definition: toolbar_widget.h:46
GUITimer
Definition: guitimer_func.h:13
_roadtypes_type
RoadTypes _roadtypes_type
Bitmap of road/tram types.
Definition: road_cmd.cpp:57
NWidgetToolbarContainer::GetButtonArrangement
virtual const byte * GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const =0
Get the arrangement of the buttons for the toolbar.
WID_TN_SHIPS
@ WID_TN_SHIPS
Ship menu.
Definition: toolbar_widget.h:33
SLO_LOAD
@ SLO_LOAD
File is being loaded.
Definition: fileio_type.h:49
ShowSignList
Window * ShowSignList()
Open the sign list window.
Definition: signs_gui.cpp:402
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:1798
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:206
tilehighlight_func.h
ClientSettings::sound
SoundSettings sound
sound effect settings
Definition: settings_type.h:596
ToolbarScenBuildTram
static CallBackFunction ToolbarScenBuildTram(int index)
Handle click on the entry in the Build Tram menu.
Definition: toolbar_gui.cpp:1230
DoCommandP
bool DoCommandP(const CommandContainer *container, bool my_cmd)
Shortcut for the long DoCommandP when having a container with the data.
Definition: command.cpp:541
NWidgetContainer::tail
NWidgetBase * tail
Pointer to last widget in container.
Definition: widget_type.h:416
Window::InitNested
void InitNested(WindowNumber number=0)
Perform complete initialization of the Window with nested widgets, to allow use.
Definition: window.cpp:1789
CMD_PAUSE
@ CMD_PAUSE
pause the game
Definition: command_type.h:256
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:63
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:784
SaveLoadNormalMenuEntries
SaveLoadNormalMenuEntries
SaveLoad entries in normal game mode.
Definition: toolbar_gui.cpp:385
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
ROADTYPE_TRAM
@ ROADTYPE_TRAM
Trams.
Definition: road_type.h:25
WD_FRAMERECT_RIGHT
@ WD_FRAMERECT_RIGHT
Offset at right to draw the frame rectangular area.
Definition: window_gui.h: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:796
NWidgetBase
Baseclass for nested widgets.
Definition: widget_type.h:126
AllocateToolbar
void AllocateToolbar()
Allocate the toolbar.
Definition: toolbar_gui.cpp:2607
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:950
ToolbarOptionsClick
static CallBackFunction ToolbarOptionsClick(Window *w)
Handle click on Options button in toolbar.
Definition: toolbar_gui.cpp:310
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:47
MenuClickShowRoad
static CallBackFunction MenuClickShowRoad(int index)
Handle click on the entry in the Road Vehicles menu.
Definition: toolbar_gui.cpp:776
MenuClickBuildRail
static CallBackFunction MenuClickBuildRail(int index)
Handle click on the entry in the Build Rail menu.
Definition: toolbar_gui.cpp:859
road_gui.h
_settings_game
GameSettings _settings_game
Game settings of a running game or the scenario editor.
Definition: settings.cpp:53
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:1316
GameSettings::economy
EconomySettings economy
settings to change the economy
Definition: settings_type.h:585
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:1118
Window::flags
WindowFlags flags
Window flags.
Definition: window_gui.h:305
WF_TIMEOUT
@ WF_TIMEOUT
Window timeout counter.
Definition: window_gui.h:234
MenuClickSubsidies
static CallBackFunction MenuClickSubsidies(int index)
Handle click on the entry in the Subsidies menu.
Definition: toolbar_gui.cpp:537
MenuClickShowAir
static CallBackFunction MenuClickShowAir(int index)
Handle click on the entry in the Aircraft menu.
Definition: toolbar_gui.cpp:816
MenuClickSaveLoad
static CallBackFunction MenuClickSaveLoad(int index=0)
Handle click on one of the entries in the SaveLoad menu.
Definition: toolbar_gui.cpp:423
ToggleDirtyBlocks
void ToggleDirtyBlocks()
Toggle drawing of the dirty blocks.
Definition: toolbar_gui.cpp:1072
StrEmpty
static bool StrEmpty(const char *s)
Check if a string buffer is empty.
Definition: string_func.h:64
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:56
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:1041
ToolbarScenDatePanel
static CallBackFunction ToolbarScenDatePanel(Window *w)
Called when clicking at the date panel of the scenario editor toolbar.
Definition: toolbar_gui.cpp:1137
road.h
MainToolbarWindow::FindWindowPlacementAndResize
void FindWindowPlacementAndResize(int def_width, int def_height) override
Resize window towards the default size.
Definition: toolbar_gui.cpp:1995
Point
Coordinates of a point in 2D.
Definition: geometry_type.hpp:21
EconomySettings::found_town
TownFounding found_town
town founding.
Definition: settings_type.h:518
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:1321
date_func.h
ShowCheatWindow
void ShowCheatWindow()
Open cheat window.
Definition: cheat_gui.cpp:416
stdafx.h
ShowSaveLoadDialog
void ShowSaveLoadDialog(AbstractFileType abstract_filetype, SaveLoadOperation fop)
Launch save/load dialog in the given mode.
Definition: fios_gui.cpp:921
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:2129
DO_FULL_DETAIL
@ DO_FULL_DETAIL
Also draw details of track and roads.
Definition: openttd.h:49
RoadType
RoadType
The different roadtypes we support.
Definition: road_type.h:22
VehicleType
VehicleType
Available vehicle types.
Definition: vehicle_type.h:21
GfxFillRect
void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectMode mode)
Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen.
Definition: gfx.cpp:116
ToggleBoundingBoxes
void ToggleBoundingBoxes()
Toggle drawing of sprites' bounding boxes.
Definition: toolbar_gui.cpp:1055
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:2405
MenuClickCompany
static CallBackFunction MenuClickCompany(int index)
Handle click on the entry in the Company menu.
Definition: toolbar_gui.cpp:599
MainToolbarWindow
Main toolbar.
Definition: toolbar_gui.cpp:1978
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:211
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:1210
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:143
GetSpriteSize
Dimension GetSpriteSize(SpriteID sprid, Point *offset, ZoomLevel zoom)
Get the size of a sprite.
Definition: gfx.cpp:976
ShowHighscoreTable
void ShowHighscoreTable(int difficulty=SP_CUSTOM, int8 rank=-1)
Show the highscore table for a given difficulty.
Definition: highscore_gui.cpp:233
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:626
ScenarioEditorToolbarWindow::OnQueryTextFinished
void OnQueryTextFinished(char *str) override
The query window opened from this window has closed.
Definition: toolbar_gui.cpp:2506
NWidgetMainToolbarContainer
Container for the 'normal' main toolbar.
Definition: toolbar_gui.cpp:1458
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:2188
SoundSettings::confirm
bool confirm
Play sound effect on successful constructions or other actions.
Definition: settings_type.h:208
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:1092
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:2500
MainToolbarWindow::OnPaint
void OnPaint() override
The window must be repainted.
Definition: toolbar_gui.cpp:2000
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:399
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:1100
PC_VERY_DARK_RED
static const uint8 PC_VERY_DARK_RED
Almost-black red palette colour.
Definition: gfx_func.h:195
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:3299
WIDGET_LIST_END
static const int WIDGET_LIST_END
indicate the end of widgets' list for vararg functions
Definition: widget_type.h:20
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:165
ScenarioEditorToolbarWindow
Definition: toolbar_gui.cpp:2339
NWidget
static NWidgetPart NWidget(WidgetType tp, Colours col, int16 idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1207
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:3235
SetStartingYear
void SetStartingYear(Year year)
Set the starting year for a scenario.
Definition: toolbar_gui.cpp:1086
MenuClickGoal
static CallBackFunction MenuClickGoal(int index)
Handle click on the entry in the Goal menu.
Definition: toolbar_gui.cpp:646
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:927
ShowLastNewsMessage
void ShowLastNewsMessage()
Show previous news item.
Definition: news_gui.cpp:1040
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:1019
NWidgetToolbarContainer
Full blown container to make it behave exactly as we want :)
Definition: toolbar_gui.cpp:1301
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:1866
ShowAIDebugWindow
Window * ShowAIDebugWindow(CompanyID show_company)
Open the AI debug window and select the given company.
Definition: ai_gui.cpp:1537
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:2015
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
WD_IMGBTN_TOP
@ WD_IMGBTN_TOP
Top offset of image in the button.
Definition: window_gui.h:42
PlaceProc_Sign
void PlaceProc_Sign(TileIndex tile)
PlaceProc function, called when someone pressed the button if the sign-tool is selected.
Definition: signs_cmd.cpp:131
ScenarioEditorToolbarWindow::DrawWidget
void DrawWidget(const Rect &r, int widget) const override
Draw the contents of a nested widget.
Definition: toolbar_gui.cpp:2369
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:305
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:343
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:1781
WID_TN_INDUSTRIES
@ WID_TN_INDUSTRIES
Industry menu.
Definition: toolbar_widget.h:29
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:471
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
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:999
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:209
lengthof
#define lengthof(x)
Return the length of an fixed size array.
Definition: stdafx.h:378
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:207
ShowTerraformToolbar
Window * ShowTerraformToolbar(Window *link)
Show the toolbar for terraforming in the game.
Definition: terraform_gui.cpp:357
MarkWholeScreenDirty
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
Definition: gfx.cpp:1689
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:1169
SC_VIEWPORT
@ SC_VIEWPORT
Screenshot of viewport.
Definition: screenshot.h:19
MakeScreenshotWithConfirm
void MakeScreenshotWithConfirm(ScreenshotType t)
Make a screenshot.
Definition: screenshot.cpp:876
WID_TN_ZOOM_IN
@ WID_TN_ZOOM_IN
Zoom in the main viewport.
Definition: toolbar_widget.h:35
NWidgetBase::pos_y
int pos_y
Vertical position of top-left corner of the widget in the window.
Definition: widget_type.h:190
ShowBuildRoadToolbar
Window * ShowBuildRoadToolbar(RoadType roadtype)
Open the build road toolbar window.
Definition: road_gui.cpp:889
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:1459
console_gui.h
MenuClickShowTrains
static CallBackFunction MenuClickShowTrains(int index)
Handle click on the entry in the Train menu.
Definition: toolbar_gui.cpp:756
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:559
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:1304
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:1354
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:3375
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:438
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:2452
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:973
MenuClickLeague
static CallBackFunction MenuClickLeague(int index)
Handle click on the entry in the CompanyLeague menu.
Definition: toolbar_gui.cpp:696
ShowCompany
void ShowCompany(CompanyID company)
Show the window with the overview of the company.
Definition: company_gui.cpp:2698
GUISettings::UserIsAllowedToChangeNewGRFs
bool UserIsAllowedToChangeNewGRFs() const
Returns true when the user has sufficient privileges to edit newgrfs on a running game.
Definition: settings_type.h:197
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:483
ScenarioEditorToolbarWindow::OnRealtimeTick
void OnRealtimeTick(uint delta_ms) override
Called periodically.
Definition: toolbar_gui.cpp:2479
VEH_SHIP
@ VEH_SHIP
Ship vehicle type.
Definition: vehicle_type.h:26
ToolbarMode
ToolbarMode
Toobar modes.
Definition: toolbar_gui.cpp:70
ROADTYPES_NONE
@ ROADTYPES_NONE
No roadtypes.
Definition: road_type.h:37
Rect
Specification of a rectangle with absolute coordinates of all edges.
Definition: geometry_type.hpp:47
ScenarioEditorToolbarWindow::OnTimeout
void OnTimeout() override
Called when this window's timeout has been reached.
Definition: toolbar_gui.cpp:2472
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:2359
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:3423
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:39
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:37
DropDownListIconItem
List item with icon and string.
Definition: dropdown_type.h:82
MenuClickForest
static CallBackFunction MenuClickForest(int index)
Handle click on the entry in the landscaping menu.
Definition: toolbar_gui.cpp:975
ClientSettings::gui
GUISettings gui
settings related to the GUI
Definition: settings_type.h:593
MenuClickBuildRoad
static CallBackFunction MenuClickBuildRoad(int index)
Handle click on the entry in the Build Road menu.
Definition: toolbar_gui.cpp:881
DropDownListCheckedItem
Drop down list entry for showing a checked/unchecked toggle item.
Definition: toolbar_gui.cpp:89
MainToolbarWindow::OnPlaceObjectAbort
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
Definition: toolbar_gui.cpp:2091
ShowEditorTerraformToolbar
Window * ShowEditorTerraformToolbar()
Show the toolbar for terraforming in the scenario editor.
Definition: terraform_gui.cpp:749
PopupMainCompanyToolbMenu
static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey=0)
Pop up a generic company list menu.
Definition: toolbar_gui.cpp:215
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:2020
ShowBuildDocksToolbar
Window * ShowBuildDocksToolbar()
Open the build water toolbar window.
Definition: dock_gui.cpp:358
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:976
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:1302
WID_TN_RAILS
@ WID_TN_RAILS
Rail building menu.
Definition: toolbar_widget.h:38