40 #include "script/script_gui.h"
105 this->SetString(
GetString(STR_COMPANY_NAME_COMPANY_NUM));
133 if (
string == STR_NULL) {
134 list.push_back(MakeDropDownListDividerItem());
136 list.push_back(MakeDropDownListStringItem(
string, i));
163 list.push_back(MakeDropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST,
CTMN_CLIENT_LIST));
166 list.push_back(MakeDropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE,
CTMN_SPECTATE));
170 list.push_back(MakeDropDownListStringItem(STR_STORY_BOOK_SPECTATOR,
CTMN_SPECTATOR));
174 list.push_back(MakeDropDownListStringItem(STR_GOALS_SPECTATOR,
CTMN_SPECTATOR));
180 list.push_back(std::make_unique<DropDownListCompanyItem>(c,
HasBit(grey, c)));
195 return CBF_PLACE_SIGN;
233 OME_GAMESCRIPT_SETTINGS,
238 OME_SHOW_STATIONNAMES,
239 OME_SHOW_WAYPOINTNAMES,
241 OME_SHOW_COMPETITOR_SIGNS,
244 OME_TRANSPARENTBUILDINGS,
245 OME_SHOW_STATIONSIGNS,
257 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_GAME_OPTIONS, OME_GAMEOPTIONS));
258 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE, OME_SETTINGS));
263 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_AI_SETTINGS, OME_AI_SETTINGS));
264 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS, OME_GAMESCRIPT_SETTINGS));
266 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_NEWGRF_SETTINGS, OME_NEWGRFSETTINGS));
268 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_SANDBOX_OPTIONS, OME_SANDBOX));
270 list.push_back(MakeDropDownListStringItem(STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS, OME_TRANSPARENCIES));
271 list.push_back(MakeDropDownListDividerItem());
279 list.push_back(MakeDropDownListCheckedItem(
IsTransparencySet(
TO_HOUSES), STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS));
280 list.push_back(MakeDropDownListCheckedItem(
IsTransparencySet(
TO_SIGNS), STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS));
308 case OME_SHOW_COMPETITOR_SIGNS:
325 SLEME_SAVE_SCENARIO = 0,
327 SLEME_SAVE_HEIGHTMAP,
328 SLEME_LOAD_HEIGHTMAP,
352 STR_NULL, STR_FILE_MENU_EXIT});
365 STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP, STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP,
366 STR_SCENEDIT_FILE_MENU_QUIT_EDITOR, STR_NULL, STR_SCENEDIT_FILE_MENU_QUIT});
378 if (_game_mode == GM_EDITOR) {
384 case SLEME_EXIT_TOINTRO: AskExitToGameMenu();
break;
385 case SLEME_EXIT_GAME: HandleExitGameRequest();
break;
391 case SLNME_EXIT_TOINTRO: AskExitToGameMenu();
break;
392 case SLNME_EXIT_GAME: HandleExitGameRequest();
break;
400 enum MapMenuEntries {
401 MME_SHOW_SMALLMAP = 0,
402 MME_SHOW_EXTRAVIEWPORTS,
405 MME_SHOW_TOWNDIRECTORY,
406 MME_SHOW_INDUSTRYDIRECTORY,
412 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP));
413 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS));
414 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_LINGRAPH_LEGEND, MME_SHOW_LINKGRAPH));
415 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS));
423 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP));
424 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS));
425 list.push_back(MakeDropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS));
426 list.push_back(MakeDropDownListStringItem(STR_TOWN_MENU_TOWN_DIRECTORY, MME_SHOW_TOWNDIRECTORY));
427 list.push_back(MakeDropDownListStringItem(STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, MME_SHOW_INDUSTRYDIRECTORY));
445 case MME_SHOW_TOWNDIRECTORY: ShowTownDirectory();
break;
446 case MME_SHOW_INDUSTRYDIRECTORY: ShowIndustryDirectory();
break;
472 case 0: ShowTownDirectory();
break;
631 static void AddDropDownLeagueTableOptions(
DropDownList &list)
635 list.push_back(MakeDropDownListStringItem(lt->title, lt->index));
639 list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING,
LTMN_PERFORMANCE_RATING));
641 list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_HIGHSCORE,
LTMN_HIGHSCORE));
651 list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_INCOME_GRAPH,
GRMN_INCOME_GRAPH));
657 if (_toolbar_mode != TB_NORMAL) AddDropDownLeagueTableOptions(list);
669 AddDropDownLeagueTableOptions(list);
671 int selected = list[0]->result;
729 case 0: ShowIndustryDirectory();
break;
731 case 2: ShowBuildIndustryWindow();
break;
743 if (c->group_all[veh].num_vehicle == 0)
SetBit(dis, c->index);
866 _last_built_railtype = (
RailType)index;
888 _last_built_roadtype = (
RoadType)index;
910 _last_built_tramtype = (
RoadType)index;
920 list.push_back(MakeDropDownListIconItem(SPR_IMG_BUILD_CANAL, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, 0));
942 list.push_back(MakeDropDownListIconItem(SPR_IMG_AIRPORT, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, 0));
964 list.push_back(MakeDropDownListIconItem(SPR_IMG_LANDSCAPING, PAL_NONE, STR_LANDSCAPING_MENU_LANDSCAPING, 0));
965 list.push_back(MakeDropDownListIconItem(SPR_IMG_PLANTTREES, PAL_NONE, STR_LANDSCAPING_MENU_PLANT_TREES, 1));
966 list.push_back(MakeDropDownListIconItem(SPR_IMG_SIGN, PAL_NONE, STR_LANDSCAPING_MENU_PLACE_SIGN, 2));
982 case 1: ShowBuildTreesToolbar();
break;
983 case 2:
return SelectSignTool();
1040 return CBF_PLACE_LANDINFO;
1048 STR_ABOUT_MENU_HELP, STR_NULL, STR_ABOUT_MENU_TOGGLE_CONSOLE, STR_ABOUT_MENU_AI_DEBUG,
1049 STR_ABOUT_MENU_SCREENSHOT, STR_ABOUT_MENU_SHOW_FRAMERATE, STR_ABOUT_MENU_ABOUT_OPENTTD,
1050 STR_ABOUT_MENU_SPRITE_ALIGNER, STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES, STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS,
1051 STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES});
1054 STR_ABOUT_MENU_HELP, STR_NULL, STR_ABOUT_MENU_TOGGLE_CONSOLE, STR_ABOUT_MENU_AI_DEBUG,
1055 STR_ABOUT_MENU_SCREENSHOT, STR_ABOUT_MENU_SHOW_FRAMERATE, STR_ABOUT_MENU_ABOUT_OPENTTD});
1069 extern bool _draw_bounding_boxes;
1072 _draw_bounding_boxes = !_draw_bounding_boxes;
1086 extern bool _draw_dirty_blocks;
1089 _draw_dirty_blocks = !_draw_dirty_blocks;
1100 extern bool _draw_widget_outlines;
1103 _draw_widget_outlines = !_draw_widget_outlines;
1116 TimerGameEconomy::Date new_economy_date = new_calendar_date.base();
1137 case 0:
return PlaceLandBlockInfo();
1138 case 1: ShowHelpWindow();
break;
1141 case 4: ShowScreenshotWindow();
break;
1143 case 6: ShowAboutWindow();
break;
1156 if (_toolbar_mode != TB_LOWER) {
1157 _toolbar_mode = TB_LOWER;
1159 _toolbar_mode = TB_UPPER;
1224 case 0: ShowFoundTownWindow();
break;
1225 case 1: ShowBuildHousePicker(
nullptr);
break;
1234 ShowBuildIndustryWindow();
1253 _last_built_roadtype = (
RoadType)index;
1273 _last_built_tramtype = (
RoadType)index;
1290 ShowBuildTreesToolbar();
1298 return SelectSignTool();
1308 static MenuClickedProc *
const _menu_clicked_procs[] = {
1373 for (
const auto &child_wid : this->
children) {
1374 child_wid->SetupSmallestSize(w);
1375 this->
smallest_y = std::max(this->
smallest_y, child_wid->smallest_y + child_wid->padding.Vertical());
1376 if (this->
IsButton(child_wid->type)) {
1378 this->
smallest_x = std::max(this->
smallest_x, child_wid->smallest_x + child_wid->padding.Horizontal());
1385 for (
const auto &child_wid : this->children) {
1387 if (!this->
IsButton(child_wid->type)) {
1388 child_wid->current_x = child_wid->smallest_x;
1404 uint arrangable_count, button_count, spacer_count;
1408 std::map<WidgetID, uint> lookup;
1409 for (
auto it = std::begin(this->
children); it != std::end(this->
children); ++it) {
1413 lookup[
dynamic_cast<NWidgetCore *
>(nwid)->index] = std::distance(this->
children.begin(), it);
1418 uint spacer_space = std::max(0, (
int)given_width - (
int)(button_count * this->
smallest_x));
1419 uint button_space = given_width - spacer_space;
1424 const WidgetID *slotp = rtl ? &arrangement[arrangable_count - 1] : arrangement;
1425 for (uint i = 0; i < arrangable_count; i++) {
1426 uint slot = lookup[*slotp];
1427 auto &child_wid = this->
children[slot];
1429 if (spacer_space > 0 && slot > 0 && slot < this->
children.size() - 1) {
1430 const auto &possible_spacer = this->
children[slot + (rtl ? 1 : -1)];
1431 if (possible_spacer !=
nullptr && possible_spacer->type ==
NWID_SPACER) {
1432 uint add = spacer_space / (spacer_count - spacer_i);
1434 spacer_space -= add;
1440 if (this->
IsButton(child_wid->type)) {
1441 child_wid->current_x = button_space / (button_count - button_i);
1442 button_space -= child_wid->current_x;
1445 child_wid->current_x = child_wid->smallest_x;
1447 child_wid->AssignSizePosition(sizing, x + position, y, child_wid->current_x, this->current_y, rtl);
1448 position += child_wid->current_x;
1461 const Rect r = this->GetCurrentRect();
1483 static const uint SMALLEST_ARRANGEMENT = 14;
1484 static const uint BIGGEST_ARRANGEMENT = 20;
1492 static const WidgetID arrange14[] = {
1523 static const WidgetID arrange15[] = {
1556 static const WidgetID arrange16[] = {
1591 static const WidgetID arrange17[] = {
1628 static const WidgetID arrange18[] = {
1667 static const WidgetID arrange19[] = {
1708 static const WidgetID arrange20[] = {
1751 static const WidgetID arrange_all[] = {
1785 uint full_buttons = std::max(
CeilDiv(width, this->
smallest_x), SMALLEST_ARRANGEMENT);
1786 if (full_buttons > BIGGEST_ARRANGEMENT) {
1787 button_count = arrangable_count =
lengthof(arrange_all);
1793 static const WidgetID *
const arrangements[] = { arrange14, arrange15, arrange16, arrange17, arrange18, arrange19, arrange20 };
1795 button_count = arrangable_count = full_buttons;
1797 return arrangements[full_buttons - SMALLEST_ARRANGEMENT] + ((_toolbar_mode == TB_LOWER) ? full_buttons : 0);
1811 for (
const auto &child_wid : this->
children) {
1812 if (child_wid->type ==
NWID_SPACER || this->IsButton(child_wid->type))
continue;
1814 assert(i <
lengthof(this->panel_widths));
1815 this->panel_widths[i++] = child_wid->current_x;
1822 static const WidgetID arrange_all[] = {
1843 static const WidgetID arrange_nopanel[] = {
1863 static const WidgetID arrange_switch[] = {
1890 uint min_full_width = (
lengthof(arrange_all) -
lengthof(this->panel_widths)) * this->
smallest_x + this->panel_widths[0] + this->panel_widths[1];
1891 if (width >= min_full_width) {
1892 width -= this->panel_widths[0] + this->panel_widths[1];
1893 arrangable_count =
lengthof(arrange_all);
1894 button_count = arrangable_count - 2;
1900 uint min_small_width = (
lengthof(arrange_switch) -
lengthof(this->panel_widths)) * this->
smallest_x / 2 + this->panel_widths[1];
1901 if (width > min_small_width) {
1902 width -= this->panel_widths[1];
1903 arrangable_count =
lengthof(arrange_nopanel);
1904 button_count = arrangable_count - 1;
1905 spacer_count = this->
spacers - 1;
1906 return arrange_nopanel;
1910 width -= this->panel_widths[1];
1911 arrangable_count =
lengthof(arrange_switch) / 2;
1912 button_count = arrangable_count - 1;
1914 return arrange_switch + ((_toolbar_mode == TB_LOWER) ? arrangable_count : 0);
1922 static ToolbarButtonProc *
const _toolbar_button_procs[] = {
1929 ToolbarSubsidiesClick,
1930 ToolbarStationsClick,
1931 ToolbarFinancesClick,
1932 ToolbarCompaniesClick,
1937 ToolbarIndustryClick,
1943 ToolbarZoomOutClick,
1944 ToolbarBuildRailClick,
1945 ToolbarBuildRoadClick,
1946 ToolbarBuildTramClick,
1947 ToolbarBuildWaterClick,
1948 ToolbarBuildAirClick,
1951 ToolbarNewspaperClick,
1970 void FindWindowPlacementAndResize([[maybe_unused]]
int def_width, [[maybe_unused]]
int def_height)
override
1990 void OnClick([[maybe_unused]]
Point pt,
WidgetID widget, [[maybe_unused]]
int click_count)
override
1992 if (_game_mode != GM_MENU && !this->
IsWidgetDisabled(widget)) _toolbar_button_procs[widget](
this);
1995 void OnDropdownSelect(
WidgetID widget,
int index)
override
2005 case MTHK_PAUSE: ToolbarPauseClick(
this);
break;
2011 case MTHK_TOWNDIRECTORY: ShowTownDirectory();
break;
2012 case MTHK_SUBSIDIES: ShowSubsidiesList();
break;
2018 case MTHK_GRAPHS: ShowOperatingProfitGraph();
break;
2019 case MTHK_LEAGUE: ShowFirstLeagueTable();
break;
2020 case MTHK_INDUSTRIES: ShowBuildIndustryWindow();
break;
2025 case MTHK_ZOOM_IN: ToolbarZoomInClick(
this);
break;
2026 case MTHK_ZOOM_OUT: ToolbarZoomOutClick(
this);
break;
2032 case MTHK_BUILD_TREES: ShowBuildTreesToolbar();
break;
2033 case MTHK_MUSIC: ShowMusicWindow();
break;
2042 case MTHK_CLIENT_LIST:
if (
_networking) ShowClientList();
break;
2044 case MTHK_LANDINFO: cbf = PlaceLandBlockInfo();
break;
2051 void OnPlaceObject([[maybe_unused]]
Point pt,
TileIndex tile)
override
2054 case CBF_PLACE_SIGN:
2058 case CBF_PLACE_LANDINFO:
2062 default: NOT_REACHED();
2098 void OnInvalidateData([[maybe_unused]]
int data = 0, [[maybe_unused]]
bool gui_scope =
true)
override
2100 if (!gui_scope)
return;
2104 static inline HotkeyList hotkeys{
"maintoolbar", {
2105 Hotkey({WKC_F1, WKC_PAUSE},
"pause", MTHK_PAUSE),
2106 Hotkey(0,
"fastforward", MTHK_FASTFORWARD),
2107 Hotkey(WKC_F2,
"settings", MTHK_SETTINGS),
2108 Hotkey(WKC_F3,
"saveload", MTHK_SAVEGAME),
2109 Hotkey(0,
"load_game", MTHK_LOADGAME),
2110 Hotkey({WKC_F4,
'M'},
"smallmap", MTHK_SMALLMAP),
2111 Hotkey(WKC_F5,
"town_list", MTHK_TOWNDIRECTORY),
2112 Hotkey(WKC_F6,
"subsidies", MTHK_SUBSIDIES),
2113 Hotkey(WKC_F7,
"station_list", MTHK_STATIONS),
2114 Hotkey(WKC_F8,
"finances", MTHK_FINANCES),
2115 Hotkey(WKC_F9,
"companies", MTHK_COMPANIES),
2116 Hotkey(0,
"story_book", MTHK_STORY),
2117 Hotkey(0,
"goal_list", MTHK_GOAL),
2118 Hotkey(WKC_F10,
"graphs", MTHK_GRAPHS),
2119 Hotkey(WKC_F11,
"league", MTHK_LEAGUE),
2120 Hotkey(WKC_F12,
"industry_list", MTHK_INDUSTRIES),
2121 Hotkey(WKC_SHIFT | WKC_F1,
"train_list", MTHK_TRAIN_LIST),
2122 Hotkey(WKC_SHIFT | WKC_F2,
"roadveh_list", MTHK_ROADVEH_LIST),
2123 Hotkey(WKC_SHIFT | WKC_F3,
"ship_list", MTHK_SHIP_LIST),
2124 Hotkey(WKC_SHIFT | WKC_F4,
"aircraft_list", MTHK_AIRCRAFT_LIST),
2127 Hotkey(WKC_SHIFT | WKC_F7,
"build_rail", MTHK_BUILD_RAIL),
2128 Hotkey(WKC_SHIFT | WKC_F8,
"build_road", MTHK_BUILD_ROAD),
2129 Hotkey(0,
"build_tram", MTHK_BUILD_TRAM),
2130 Hotkey(WKC_SHIFT | WKC_F9,
"build_docks", MTHK_BUILD_DOCKS),
2131 Hotkey(WKC_SHIFT | WKC_F10,
"build_airport", MTHK_BUILD_AIRPORT),
2132 Hotkey(WKC_SHIFT | WKC_F11,
"build_trees", MTHK_BUILD_TREES),
2133 Hotkey(WKC_SHIFT | WKC_F12,
"music", MTHK_MUSIC),
2134 Hotkey(0,
"ai_debug", MTHK_SCRIPT_DEBUG),
2135 Hotkey(WKC_CTRL |
'S',
"small_screenshot", MTHK_SMALL_SCREENSHOT),
2136 Hotkey(WKC_CTRL |
'P',
"zoomedin_screenshot", MTHK_ZOOMEDIN_SCREENSHOT),
2137 Hotkey(WKC_CTRL |
'D',
"defaultzoom_screenshot", MTHK_DEFAULTZOOM_SCREENSHOT),
2138 Hotkey(0,
"giant_screenshot", MTHK_GIANT_SCREENSHOT),
2139 Hotkey(WKC_CTRL | WKC_ALT |
'C',
"cheats", MTHK_CHEATS),
2140 Hotkey(
'L',
"terraform", MTHK_TERRAFORM),
2141 Hotkey(
'V',
"extra_viewport", MTHK_EXTRA_VIEWPORT),
2142 Hotkey(0,
"client_list", MTHK_CLIENT_LIST),
2143 Hotkey(0,
"sign_list", MTHK_SIGN_LIST),
2144 Hotkey(0,
"land_info", MTHK_LANDINFO),
2151 static const SpriteID toolbar_button_sprites[] = {
2153 SPR_IMG_FASTFORWARD,
2159 SPR_IMG_COMPANY_LIST,
2160 SPR_IMG_COMPANY_FINANCE,
2161 SPR_IMG_COMPANY_GENERAL,
2165 SPR_IMG_COMPANY_LEAGUE,
2170 SPR_IMG_AIRPLANESLIST,
2178 SPR_IMG_LANDSCAPING,
2182 SPR_IMG_SWITCH_TOOLBAR,
2185 auto hor = std::make_unique<NWidgetMainToolbarContainer>();
2194 hor->Add(std::make_unique<NWidgetSpacer>(0, 0));
2197 auto leaf = std::make_unique<NWidgetLeaf>(i ==
WID_TN_SAVE ?
WWT_IMGBTN_2 :
WWT_IMGBTN, COLOUR_GREY, i, toolbar_button_sprites[i], STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i);
2198 leaf->SetMinimalSize(20, 20);
2199 hor->Add(std::move(leaf));
2205 static constexpr
NWidgetPart _nested_toolbar_normal_widgets[] = {
2213 _nested_toolbar_normal_widgets,
2214 &MainToolbarWindow::hotkeys
2220 static MenuClickedProc *
const _scen_toolbar_dropdown_procs[] = {
2246 static ToolbarButtonProc *
const _scen_toolbar_button_procs[] = {
2253 ToolbarScenDateBackward,
2254 ToolbarScenDateForward,
2255 ToolbarScenMapTownDir,
2257 ToolbarZoomOutClick,
2259 ToolbarScenGenTownClick,
2260 ToolbarScenGenIndustry,
2261 ToolbarScenBuildRoadClick,
2262 ToolbarScenBuildTramClick,
2263 ToolbarScenBuildDocks,
2264 ToolbarScenPlantTrees,
2265 ToolbarScenPlaceSign,
2272 enum MainToolbarEditorHotkeys {
2287 MTEHK_SMALL_SCREENSHOT,
2288 MTEHK_ZOOMEDIN_SCREENSHOT,
2289 MTEHK_DEFAULTZOOM_SCREENSHOT,
2290 MTEHK_GIANT_SCREENSHOT,
2295 MTEHK_EXTRA_VIEWPORT,
2309 void FindWindowPlacementAndResize([[maybe_unused]]
int def_width, [[maybe_unused]]
int def_height)
override
2324 void SetStringParameters(
WidgetID widget)
const override
2333 void DrawWidget(
const Rect &r,
WidgetID widget)
const override
2363 void OnClick([[maybe_unused]]
Point pt,
WidgetID widget, [[maybe_unused]]
int click_count)
override
2365 if (_game_mode == GM_MENU)
return;
2370 void OnDropdownSelect(
WidgetID widget,
int index)
override
2381 case MTEHK_PAUSE: ToolbarPauseClick(
this);
break;
2385 case MTEHK_GENLAND: ToolbarScenGenLand(
this);
break;
2386 case MTEHK_GENTOWN: ToolbarScenGenTownClick(
this);
break;
2387 case MTEHK_GENINDUSTRY: ToolbarScenGenIndustry(
this);
break;
2388 case MTEHK_BUILD_ROAD: ToolbarScenBuildRoadClick(
this);
break;
2389 case MTEHK_BUILD_TRAM: ToolbarScenBuildTramClick(
this);
break;
2390 case MTEHK_BUILD_DOCKS: ToolbarScenBuildDocks(
this);
break;
2391 case MTEHK_BUILD_TREES: ToolbarScenPlantTrees(
this);
break;
2392 case MTEHK_SIGN: cbf = ToolbarScenPlaceSign(
this);
break;
2393 case MTEHK_MUSIC: ShowMusicWindow();
break;
2394 case MTEHK_LANDINFO: cbf = PlaceLandBlockInfo();
break;
2399 case MTEHK_ZOOM_IN: ToolbarZoomInClick(
this);
break;
2400 case MTEHK_ZOOM_OUT: ToolbarZoomOutClick(
this);
break;
2410 void OnPlaceObject([[maybe_unused]]
Point pt,
TileIndex tile)
override
2413 case CBF_PLACE_SIGN:
2417 case CBF_PLACE_LANDINFO:
2421 default: NOT_REACHED();
2455 void OnInvalidateData([[maybe_unused]]
int data = 0, [[maybe_unused]]
bool gui_scope =
true)
override
2457 if (!gui_scope)
return;
2461 void OnQueryTextFinished(std::optional<std::string> str)
override
2464 if (!str.has_value())
return;
2467 if (!str->empty()) {
2468 value = atoi(str->c_str());
2478 static inline HotkeyList hotkeys{
"scenedit_maintoolbar", {
2479 Hotkey({WKC_F1, WKC_PAUSE},
"pause", MTEHK_PAUSE),
2480 Hotkey(0,
"fastforward", MTEHK_FASTFORWARD),
2481 Hotkey(WKC_F2,
"settings", MTEHK_SETTINGS),
2482 Hotkey(WKC_F3,
"saveload", MTEHK_SAVEGAME),
2483 Hotkey(WKC_F4,
"gen_land", MTEHK_GENLAND),
2484 Hotkey(WKC_F5,
"gen_town", MTEHK_GENTOWN),
2485 Hotkey(WKC_F6,
"gen_industry", MTEHK_GENINDUSTRY),
2486 Hotkey(WKC_F7,
"build_road", MTEHK_BUILD_ROAD),
2487 Hotkey(0,
"build_tram", MTEHK_BUILD_TRAM),
2488 Hotkey(WKC_F8,
"build_docks", MTEHK_BUILD_DOCKS),
2489 Hotkey(WKC_F9,
"build_trees", MTEHK_BUILD_TREES),
2490 Hotkey(WKC_F10,
"build_sign", MTEHK_SIGN),
2491 Hotkey(WKC_F11,
"music", MTEHK_MUSIC),
2492 Hotkey(WKC_F12,
"land_info", MTEHK_LANDINFO),
2493 Hotkey(WKC_CTRL |
'S',
"small_screenshot", MTEHK_SMALL_SCREENSHOT),
2494 Hotkey(WKC_CTRL |
'P',
"zoomedin_screenshot", MTEHK_ZOOMEDIN_SCREENSHOT),
2495 Hotkey(WKC_CTRL |
'D',
"defaultzoom_screenshot", MTEHK_DEFAULTZOOM_SCREENSHOT),
2496 Hotkey(0,
"giant_screenshot", MTEHK_GIANT_SCREENSHOT),
2499 Hotkey(
'L',
"terraform", MTEHK_TERRAFORM),
2500 Hotkey(
'M',
"smallmap", MTEHK_SMALLMAP),
2501 Hotkey(
'V',
"extra_viewport", MTEHK_EXTRA_VIEWPORT),
2505 static constexpr
NWidgetPart _nested_toolb_scen_inner_widgets[] = {
2540 static std::unique_ptr<NWidgetBase> MakeScenarioToolbar()
2542 return MakeNWidgets(_nested_toolb_scen_inner_widgets, std::make_unique<NWidgetScenarioToolbarContainer>());
2545 static constexpr
NWidgetPart _nested_toolb_scen_widgets[] = {
2553 _nested_toolb_scen_widgets,
2554 &ScenarioEditorToolbarWindow::hotkeys
2564 if (_game_mode == GM_EDITOR) {
void ShowAIConfigWindow()
Open the AI config window.
Window for configuring the AIs
Window * ShowBuildAirToolbar()
Open the build airport toolbar window.
constexpr debug_inline bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.
#define CLRBITS(x, y)
Clears several bits in a variable.
constexpr T SetBit(T &x, const uint8_t y)
Set a bit in a variable.
constexpr T ToggleBit(T &x, const uint8_t y)
Toggles a bit in a variable.
Functions related to cheating.
void ShowCheatWindow()
Open cheat window.
Drop down icon component.
Company name list item, with company-colour icon, name, and lock components.
static LinkGraphSchedule instance
Static instance of LinkGraphSchedule.
void ShiftDates(TimerGameEconomy::Date interval)
Shift all dates (join dates and edge annotations) of link graphs and link graph jobs by the number of...
Container for the 'normal' main toolbar.
const WidgetID * GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override
Get the arrangement of the buttons for the toolbar.
static Date ConvertYMDToDate(Year year, Month month, Day day)
Converts a tuple of Year, Month and Day to a Date.
static void SetDate(Date date, DateFract fract)
Set the date.
static constexpr TimerGame< struct Calendar >::Year DEF_START_YEAR
The default starting year.
static constexpr TimerGame< struct Calendar >::Year MIN_YEAR
The absolute minimum year in OTTD.
static constexpr TimerGame< struct Calendar >::Year MAX_YEAR
MAX_YEAR, nicely rounded value of the number of years that can be encoded in a single 32 bits date,...
static Date date
Current date in days (day counter).
static void SetDate(Date date, DateFract fract)
Set the date.
Functions related to commands.
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
Functions related to companies.
void ShowCompanyFinances(CompanyID company)
Open the finances window of a company.
void ShowCompany(CompanyID company)
Show the window with the overview of the company.
GUI Functions related to companies.
void ShowCompanyStations(CompanyID company)
Opens window with list of company's stations.
Owner
Enum for all companies/owners.
@ INVALID_COMPANY
An invalid company.
@ COMPANY_SPECTATOR
The client is spectating.
@ COMPANY_FIRST
First company, same as owner.
@ MAX_COMPANIES
Maximum number of companies.
void ShowFramerateWindow()
Open the general framerate window.
void IConsoleSwitch()
Toggle in-game console between opened and closed.
GUI related functions in the console.
Window * ShowBuildDocksScenToolbar()
Open the build water toolbar window for the scenario editor.
Window * ShowBuildDocksToolbar()
Open the build water toolbar window.
void ShowDropDownList(Window *w, DropDownList &&list, int selected, WidgetID button, uint width, bool instant_close, bool persist)
Show a drop down list.
Common drop down list components.
Functions related to the drop down widget.
Types related to the drop down widget.
std::vector< std::unique_ptr< const DropDownListItem > > DropDownList
A drop down list is a collection of drop down list items.
@ FT_SCENARIO
old or new scenario
@ FT_HEIGHTMAP
heightmap file
@ FT_SAVEGAME
old or new savegame
@ SLO_SAVE
File is being saved.
@ SLO_LOAD
File is being loaded.
Declarations for savegames operations.
void ShowSaveLoadDialog(AbstractFileType abstract_filetype, SaveLoadOperation fop)
Launch save/load dialog in the given mode.
int GetCharacterHeight(FontSize size)
Get height of a character for a given font size.
Types for recording game performance data.
Base functions for all Games.
void ShowGSConfigWindow()
Open the GS config window.
Window for configuring the Games
PauseMode _pause_mode
The current pause mode.
Dimension GetStringBoundingBox(std::string_view str, FontSize start_fontsize)
Return the string dimension in pixels.
int DrawString(int left, int right, int top, std::string_view str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly truncated to make it fit in its allocated space.
bool _ctrl_pressed
Is Ctrl pressed?
bool _left_button_clicked
Is left mouse button clicked?
uint16_t _game_speed
Current game-speed; 100 is 1x, 0 is infinite.
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.
void CheckBlitter()
Check whether we still use the right blitter, or use another (better) one.
uint32_t SpriteID
The number of a sprite, without mapping bits and colourtables.
@ SA_HOR_CENTER
Horizontally center the text.
@ SA_CENTER
Center both horizontally and vertically.
@ FS_NORMAL
Index of the normal font in the font tables.
@ FILLRECT_CHECKER
Draw only every second pixel, used for greying-out.
void ShowGoalsList(CompanyID company)
Open a goal list window.
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
GUI functions that shouldn't be here.
void ShowIndustryCargoesWindow()
Open the industry and cargoes window with an industry.
void ShowLandInfo(TileIndex tile)
Show land information window.
void ShowExtraViewportWindowForTileUnderCursor()
Show a new Extra Viewport window.
void ShowExtraViewportWindow(TileIndex tile=INVALID_TILE)
Show a new Extra Viewport window.
void ShowGameSettings()
Open advanced settings window.
void ShowStoryBook(CompanyID company, uint16_t page_id=INVALID_STORY_PAGE, bool centered=false)
Raise or create the story book window for company, at page page_id.
void ShowGameOptions()
Open the game options window.
GUI to access manuals and related.
Declaration of functions and types defined in highscore.h and highscore_gui.h.
void ShowHighscoreTable(int difficulty=SP_CUSTOM, int8_t rank=-1)
Show the highscore table for a given difficulty.
Hotkey related functions.
definition of HouseSpec and accessors
League table GUI functions.
uint8_t LeagueTableID
ID of a league table.
void ShowLinkGraphLegend()
Open a link graph legend window.
Declaration of linkgraph overlay GUI.
bool DoZoomInOutWindow(ZoomStateChange how, Window *w)
Zooms a viewport in a window in or out.
constexpr uint CeilDiv(uint a, uint b)
Computes ceil(a / b) for non-negative a and b.
constexpr T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
Miscellaneous command definitions.
void ShowQueryString(StringID str, StringID caption, uint maxsize, Window *parent, CharSetFilter afilter, QueryStringFlags flags)
Show a query popup window with a textbox in it.
bool _networking
are we in networking mode?
bool _network_server
network-server is active
bool NetworkCanJoinCompany(CompanyID company_id)
Returns whether the given company can be joined by this client.
Basic functions/variables used all over the place.
void NetworkClientRequestMove(CompanyID company_id)
Notify the server of this client wanting to be moved to another company.
Network functions used by other parts of OpenTTD.
void NetworkServerDoMove(ClientID client_id, CompanyID company_id)
Handle the tid-bits of moving a client from one company to another.
GUIs related to networking.
@ CLIENT_ID_SERVER
Servers always have this ID.
GRFConfig * _grfconfig
First item in list of current GRF set up.
void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfig **config)
Setup the NewGRF gui.
Functions/types related to NewGRF debugging.
void ShowSpriteAlignerWindow()
Show the window for aligning sprites.
void ShowLastNewsMessage()
Show previous news item.
void ShowMessageHistory()
Display window with news messages history.
GUI functions related to the news.
@ PM_UNPAUSED
A normal unpaused game.
@ PM_PAUSED_NORMAL
A game normally paused.
@ DO_SHOW_TOWN_NAMES
Display town names.
@ DO_SHOW_COMPETITOR_SIGNS
Display signs, station names and waypoint names of opponent companies. Buoys and oilrig-stations are ...
@ DO_FULL_DETAIL
Also draw details of track and roads.
@ DO_SHOW_SIGNS
Display signs.
@ DO_SHOW_WAYPOINT_NAMES
Display waypoint names.
@ DO_SHOW_STATION_NAMES
Display station names.
@ DO_FULL_ANIMATION
Perform palette animation.
static const uint8_t PC_VERY_DARK_RED
Almost-black red palette colour.
static const uint8_t PC_DARK_RED
Dark red palette colour.
Window * ShowBuildRailToolbar(RailType railtype)
Open the build rail toolbar window for a specific rail type.
DropDownList GetRailTypeDropDownList(bool for_replacement, bool all_option)
Create a drop down list for all the rail types of the local company.
RailType
Enumeration for all possible railtypes.
RoadTypes GetRoadTypes(bool introduces)
Get list of road types, regardless of company availability.
RoadTypes _roadtypes_type
Bitmap of road/tram types.
Window * ShowBuildRoadToolbar(RoadType roadtype)
Open the build road toolbar window.
Window * ShowBuildRoadScenToolbar(RoadType roadtype)
Show the road building toolbar in the scenario editor.
Functions/types related to the road GUIs.
@ ROADTYPES_NONE
No roadtypes.
RoadType
The different roadtypes we support.
@ ROADTYPE_ROAD
Basic road type.
A number of safeguards to prevent using unsafe methods.
void MakeScreenshotWithConfirm(ScreenshotType t)
Make a screenshot.
Functions to make screenshots.
@ SC_VIEWPORT
Screenshot of viewport.
@ SC_ZOOMEDIN
Fully zoomed in screenshot of the visible area.
@ SC_WORLD
World screenshot.
@ SC_DEFAULTZOOM
Zoomed to default zoom level screenshot of the visible area.
GUI functions related to screenshots.
Window * ShowScriptDebugWindow(CompanyID show_company, bool new_window)
Open the Script debug window and select the given company.
GameSettings _settings_game
Game settings of a running game or the scenario editor.
ClientSettings _settings_client
The current settings for this game.
void PlaceProc_Sign(TileIndex tile)
PlaceProc function, called when someone pressed the button if the sign-tool is selected.
Functions related to signs.
Window * ShowSignList()
Open the sign list window.
void ShowSmallMap()
Show the smallmap window.
Functions related to sound.
@ SND_15_BEEP
19 == 0x13 GUI button click
Definition of base types and functions in a cross-platform compatible way.
#define lengthof(array)
Return the length of an fixed size array.
@ CS_NUMERAL
Only numeric ones.
void SetDParam(size_t n, uint64_t v)
Set a string parameter v at index n in the global string parameter array.
std::string GetString(StringID string)
Resolve the given StringID into a std::string with all the associated DParam lookups and formatting.
Functions related to OTTD's strings.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
SoundSettings sound
sound effect settings
GUISettings gui
settings related to the GUI
Dimensions (a width and height) of a rectangle in 2D.
TownFounding found_town
town founding.
bool UserIsAllowedToChangeNewGRFs() const
Returns true when the user has sufficient privileges to edit newgrfs on a running game.
bool newgrf_developer_tools
activate NewGRF developer tools and allow modifying NewGRFs in an existing game
TimerGameCalendar::Year starting_year
starting date
EconomySettings economy
settings to change the economy
GameCreationSettings game_creation
settings used during the creation of a game (map)
List of hotkeys for a window.
All data for a single hotkey.
Struct about custom league tables.
void OnTimeout() override
Called when this window's timeout has been reached.
EventState OnHotkey(int hotkey) override
A hotkey has been pressed.
void OnInvalidateData([[maybe_unused]] int data=0, [[maybe_unused]] bool gui_scope=true) override
Some data on this window has become invalid.
void OnPaint() override
The window must be repainted.
IntervalTimer< TimerWindow > refresh_interval
Refresh the state of pause / game-speed on a regular interval.
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
Coordinates of a point in 2D.
static size_t GetNumItems()
Returns number of valid items in the pool.
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
Specification of a rectangle with absolute coordinates of all edges.
int Height() const
Get height of Rect.
bool click_beep
Beep on a random selection of buttons.
bool confirm
Play sound effect on successful constructions or other actions.
Templated helper to make a type-safe 'typedef' representing a single POD value.
High level window description.
Data structure for an opened window.
void ReInit(int rx=0, int ry=0, bool reposition=false)
Re-initialize a window, and optionally change its size.
void DrawWidgets() const
Paint all widgets of a window.
void SetWidgetDirty(WidgetID widget_index) const
Invalidate a widget, i.e.
uint8_t timeout_timer
Timer value of the WF_TIMEOUT for flags.
void RaiseWidgetWhenLowered(WidgetID widget_index)
Marks a widget as raised and dirty (redraw), when it is marked as lowered.
ResizeInfo resize
Resize information.
void SetWidgetsDisabledState(bool disab_stat, Args... widgets)
Sets the enabled/disabled status of a list of widgets.
ViewportData * viewport
Pointer to viewport data, if present.
bool IsWidgetLowered(WidgetID widget_index) const
Gets the lowered state of a widget.
bool IsWidgetDisabled(WidgetID widget_index) const
Gets the enabled/disabled status of a widget.
void SetWidgetsLoweredState(bool lowered_stat, Args... widgets)
Sets the lowered/raised status of a list of widgets.
void SetWidgetLoweredState(WidgetID widget_index, bool lowered_stat)
Sets the lowered/raised status of a widget.
Window(WindowDesc &desc)
Empty constructor, initialization has been moved to InitNested() called from the constructor of the d...
void HandleButtonClick(WidgetID widget)
Do all things to make a button look clicked and mark it to be unclicked in a few ticks.
void InitNested(WindowNumber number=0)
Perform complete initialization of the Window with nested widgets, to allow use.
WindowFlags flags
Window flags.
void SetWidgetDisabledState(WidgetID widget_index, bool disab_stat)
Sets the enabled/disabled status of a widget.
int height
Height of the window (number of pixels down in y direction)
int width
width of the window (number of pixels to the right in x direction)
void ToggleWidgetLoweredState(WidgetID widget_index)
Invert the lowered/raised status of a widget.
virtual void FindWindowPlacementAndResize(int def_width, int def_height)
Resize window towards the default size.
Stuff related to the text buffer GUI.
@ QSF_ENABLE_DEFAULT
enable the 'Default' button ("\0" is returned)
Functions related to tile highlights.
void ResetObjectToPlace()
Reset the cursor and mouse mode handling back to default (normal cursor, only clicking in windows).
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...
@ HT_RECT
rectangle (stations, depots, ...)
Definition of Interval and OneShot timers.
Definition of the game-calendar-timer.
Definition of the Window system.
void ToggleTransparency(TransparencyOption to)
Toggle the transparency option bit.
@ TO_HOUSES
town buildings
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...
uint8_t _display_opt
What do we want to draw/do?
void ShowTransparencyToolbar()
Show the transparency toolbar.
GUI functions related to transparency.
Base class for all vehicles.
Functions related to vehicles.
Functions related to the vehicle's GUIs.
VehicleType
Available vehicle types.
@ VEH_ROAD
Road vehicle type.
@ VEH_AIRCRAFT
Aircraft vehicle type.
@ VEH_SHIP
Ship vehicle type.
@ VEH_TRAIN
Train vehicle type.
void HandleZoomMessage(Window *w, const Viewport *vp, WidgetID widget_zoom_in, WidgetID widget_zoom_out)
Update the status of the zoom-buttons according to the zoom-level of the viewport.
Functions related to (drawing on) viewports.
@ ZOOM_IN
Zoom in (get more detailed view).
@ ZOOM_NONE
Hack, used to update the button status.
@ ZOOM_OUT
Zoom out (get helicopter view).
int PositionMainToolbar(Window *w)
(Re)position main toolbar window at the screen.
void DeleteAllMessages()
Delete all messages and close their corresponding window (if any).
Window * GetMainWindow()
Get the main window, i.e.
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...
Window functions not directly related to making/drawing windows.
Functions, definitions and such used only by the GUI.
@ WF_WHITE_BORDER
Window white border counter bit mask.
@ WF_TIMEOUT
Window timeout counter.
@ WDF_NO_CLOSE
This window can't be interactively closed.
@ WDF_NO_FOCUS
This window won't get focus/make any other window lose focus when click.
@ WDP_MANUAL
Manually align the window (so no automatic location finding)
EventState
State of handling an event.
@ ES_HANDLED
The passed event is handled.
@ ES_NOT_HANDLED
The passed event is not handled.
@ WC_SIGN_LIST
Sign list; Window numbers:
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
@ WC_MAIN_TOOLBAR
Main toolbar (the long bar at the top); Window numbers: