From e90a971fa6010c790421d56887973f4f66a8d4bf Mon Sep 17 00:00:00 2001 From: pelya Date: Tue, 25 Aug 2020 00:35:20 +0300 Subject: [PATCH] Fixed NewRoadTypes build dropdown list in compact toolbar --- src/toolbar_gui.cpp | 37 ++++++++++++++++++++++++------------- todo.txt | 2 -- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 5a7ddb70b0..4cde0ba54d 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -892,15 +892,24 @@ static CallBackFunction ToolbarZoomOutClick(Window *w) /* --- Rail button menu --- */ +enum { MENU_IDX_WATER = RAILTYPE_END + 1, MENU_IDX_AIR, MENU_IDX_TRAM, MENU_IDX_ROAD, }; + static CallBackFunction ToolbarBuildRailClick(Window *w) { DropDownList list = GetRailTypeDropDownList(); if (_settings_client.gui.compact_vertical_toolbar) { const Company *c = Company::Get(_local_company); - list.emplace_back(new DropDownListIconItem(SPR_IMG_BUILDROAD, PAL_NONE, STR_ROAD_MENU_ROAD_CONSTRUCTION, RAILTYPE_END + ROADTYPE_ROAD, false)); - list.emplace_back(new DropDownListIconItem(SPR_IMG_BUILDTRAMS, PAL_NONE, STR_ROAD_MENU_TRAM_CONSTRUCTION, RAILTYPE_END + ROADTYPE_TRAM, !HasBit(c->avail_roadtypes, ROADTYPE_TRAM))); - list.emplace_back(new DropDownListIconItem(SPR_IMG_BUILDWATER, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, RAILTYPE_END + WID_TN_WATER, false)); - list.emplace_back(new DropDownListIconItem(SPR_IMG_BUILDAIR, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, RAILTYPE_END + WID_TN_AIR, false)); + DropDownList roads = GetRoadTypeDropDownList(RTTB_ROAD); + for (auto &&iter: roads) { + if (iter->result == INVALID_ROADTYPE) continue; + const DropDownListIconItem *ptr = static_cast(iter.get()); + DropDownListIconItem *elem = new DropDownListIconItem(*ptr); + elem->result += MENU_IDX_ROAD; + list.emplace_back(elem); + } + list.emplace_back(new DropDownListIconItem(SPR_IMG_BUILDTRAMS, PAL_NONE, STR_ROAD_MENU_TRAM_CONSTRUCTION, MENU_IDX_TRAM, !HasBit(c->avail_roadtypes, ROADTYPE_TRAM))); + list.emplace_back(new DropDownListIconItem(SPR_IMG_BUILDWATER, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, MENU_IDX_WATER, false)); + list.emplace_back(new DropDownListIconItem(SPR_IMG_BUILDAIR, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, MENU_IDX_AIR, false)); } ShowDropDownList(w, std::move(list), _last_built_railtype, WID_TN_RAILS, 140, true); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); @@ -919,15 +928,17 @@ static CallBackFunction MenuClickBuildAir(int index); */ static CallBackFunction MenuClickBuildRail(int index) { - switch (index) { - case RAILTYPE_END + ROADTYPE_ROAD: - return MenuClickBuildRoad(ROADTYPE_ROAD); - case RAILTYPE_END + ROADTYPE_TRAM: - return MenuClickBuildRoad(ROADTYPE_TRAM); - case RAILTYPE_END + WID_TN_WATER: - return MenuClickBuildWater(0); - case RAILTYPE_END + WID_TN_AIR: - return MenuClickBuildAir(0); + if (index >= MENU_IDX_ROAD) { + return MenuClickBuildRoad(index - MENU_IDX_ROAD); + } + if (index == MENU_IDX_TRAM) { + return MenuClickBuildRoad(ROADTYPE_TRAM); + } + if (index == MENU_IDX_WATER) { + return MenuClickBuildWater(0); + } + if (index == MENU_IDX_AIR) { + return MenuClickBuildAir(0); } _last_built_railtype = (RailType)index; ShowBuildRailToolbar(_last_built_railtype); diff --git a/todo.txt b/todo.txt index 70ae59cf20..2354521100 100644 --- a/todo.txt +++ b/todo.txt @@ -6,5 +6,3 @@ - Create auto-save when the app is put to background, and load it on the next start. - Two-finger cancel action does not work when confirmation dialog is disabled. - -- New road types menu is not shown when building roads (Rattroads grf, Heqs Ratt grf).