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