diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 4ef8697d93..d8305cb36c 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -886,11 +886,23 @@ static CallBackFunction ToolbarZoomOutClick(Window *w) static CallBackFunction ToolbarBuildRailClick(Window *w) { - ShowDropDownList(w, GetRailTypeDropDownList(), _last_built_railtype, WID_TN_RAILS, 140, true); + DropDownList *list = GetRailTypeDropDownList(); + if (_settings_client.gui.compact_vertical_toolbar) { + const Company *c = Company::Get(_local_company); + *list->Append() = new DropDownListStringItem(STR_ROAD_MENU_ROAD_CONSTRUCTION, RAILTYPE_END + ROADTYPE_ROAD, false); + *list->Append() = new DropDownListStringItem(STR_ROAD_MENU_TRAM_CONSTRUCTION, RAILTYPE_END + ROADTYPE_TRAM, !HasBit(c->avail_roadtypes, ROADTYPE_TRAM)); + *list->Append() = new DropDownListStringItem(STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, RAILTYPE_END + WID_TN_WATER, false); + *list->Append() = new DropDownListStringItem(STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, RAILTYPE_END + WID_TN_AIR, false); + } + ShowDropDownList(w, list, _last_built_railtype, WID_TN_RAILS, 140, true); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); return CBF_NONE; } +static CallBackFunction MenuClickBuildRoad(int index); +static CallBackFunction MenuClickBuildWater(int index); +static CallBackFunction MenuClickBuildAir(int index); + /** * Handle click on the entry in the Build Rail menu. * @@ -899,6 +911,16 @@ static CallBackFunction ToolbarBuildRailClick(Window *w) */ 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); + } _last_built_railtype = (RailType)index; ShowBuildRailToolbar(_last_built_railtype); return CBF_NONE; @@ -2261,6 +2283,18 @@ class NWidgetVerticalToolbarContainer : public NWidgetToolbarContainer { WID_TN_MESSAGES, WID_TN_HELP, }; + static const byte arrange_right_compact_noswitch[] = { + WID_TN_RAILS, + WID_TN_LANDSCAPE, + WID_TN_TRAINS, + WID_TN_TOWNS, + WID_TN_FINANCES, + WID_TN_COMPANIES, + WID_TN_GRAPHS, + WID_TN_MUSIC_SOUND, + WID_TN_MESSAGES, + WID_TN_HELP, + }; // Some rather artistic button arrangement, I'm proud of myself static const byte arrange_left_classic[] = { @@ -2304,6 +2338,20 @@ class NWidgetVerticalToolbarContainer : public NWidgetToolbarContainer { WID_TN_MESSAGES, WID_TN_HELP, }; + static const byte arrange_right_classic_noswitch[] = { + WID_TN_RAILS, + WID_TN_LANDSCAPE, + WID_TN_TRAINS, + WID_TN_STATIONS, + WID_TN_FINANCES, + WID_TN_COMPANIES, + WID_TN_GRAPHS, + WID_TN_LEAGUE, + WID_TN_STATIONS, + WID_TN_MUSIC_SOUND, + WID_TN_MESSAGES, + WID_TN_HELP, + }; // Full-length toolbar without switch button. // No WID_TN_SHIFT, WID_TN_STORY, WID_TN_GOAL, and WID_TN_LEAGUE buttons. @@ -2398,11 +2446,13 @@ class NWidgetVerticalToolbarContainer : public NWidgetToolbarContainer { { button_count = arrangable_count = lengthof(arrange_left_classic); if (side == 0) return arrange_left_classic; + if (_settings_client.gui.compact_vertical_toolbar) return arrange_right_classic_noswitch; return &arrange_right_classic[((_toolbar_mode == TB_LOWER) ? button_count : 0)]; } button_count = arrangable_count = lengthof(arrange_left_compact); if (side == 0) return arrange_left_compact; + if (_settings_client.gui.compact_vertical_toolbar) return arrange_right_compact_noswitch; return &arrange_right_compact[((_toolbar_mode == TB_LOWER) ? button_count : 0)]; } };