From af102d123b0f217730ceb3d4627a9519f52abd5d Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 5 Jun 2024 20:42:47 +0100 Subject: [PATCH] Add button to toggle train purchase window dual pane mode --- src/build_vehicle_gui.cpp | 29 +++++++++++++++++++++++++++++ src/lang/extra/english.txt | 1 + src/tbtr_template_gui_create.cpp | 2 -- src/vehicle_gui.h | 1 + src/widgets/build_vehicle_widget.h | 2 ++ 5 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 836262abb4..3fecfe8996 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -61,6 +61,9 @@ static constexpr NWidgetPart _nested_build_vehicle_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY, WID_BV_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BV_TOGGLE_DUAL_PANE_SEL), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_BV_TOGGLE_DUAL_PANE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_BUY_VEHICLE_TRAIN_TOGGLE_DUAL_PANE_TOOLTIP), + EndContainer(), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), @@ -101,6 +104,7 @@ static constexpr NWidgetPart _nested_build_vehicle_widgets_train_advanced[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY, WID_BV_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_BV_TOGGLE_DUAL_PANE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_BUY_VEHICLE_TRAIN_TOGGLE_DUAL_PANE_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), @@ -1393,6 +1397,7 @@ enum BuildVehicleHotkeys { struct BuildVehicleWindowBase : Window { VehicleType vehicle_type; ///< Type of vehicles shown in the window. + TileIndex tile; ///< Original tile. bool virtual_train_mode; ///< Are we building a virtual train? Train **virtual_train_out; ///< Virtual train ptr bool listview_mode; ///< If set, only display the available vehicles and do not show a 'build' button. @@ -1400,6 +1405,7 @@ struct BuildVehicleWindowBase : Window { BuildVehicleWindowBase(WindowDesc *desc, TileIndex tile, VehicleType type, Train **virtual_train_out) : Window(desc) { this->vehicle_type = type; + this->tile = tile; this->window_number = tile == INVALID_TILE ? (int)type : tile; this->virtual_train_out = virtual_train_out; this->virtual_train_mode = (virtual_train_out != nullptr); @@ -1505,6 +1511,18 @@ struct BuildVehicleWindowBase : Window { te = {}; te.FillDefaultCapacities(e); } + + void ChangeDualPaneMode(bool new_value) + { + _settings_client.gui.dual_pane_train_purchase_window = new_value; + SetWindowDirty(WC_GAME_OPTIONS, WN_GAME_OPTIONS_GAME_SETTINGS); + + if (this->virtual_train_out != nullptr) { + ShowTemplateTrainBuildVehicleWindow(this->virtual_train_out); + } else { + ShowBuildVehicleWindow(this->tile, this->vehicle_type); + } + } }; /** @@ -1625,6 +1643,8 @@ struct BuildVehicleWindow : BuildVehicleWindowBase { this->details_height = ((this->vehicle_type == VEH_TRAIN) ? 10 : 9); + this->GetWidget(WID_BV_TOGGLE_DUAL_PANE_SEL)->SetDisplayedPlane((this->vehicle_type == VEH_TRAIN) ? 0 : SZSP_NONE); + this->FinishInitNested(this->window_number); this->querystrings[WID_BV_FILTER] = &this->vehicle_editbox; @@ -2054,6 +2074,11 @@ struct BuildVehicleWindow : BuildVehicleWindowBase { } break; } + + case WID_BV_TOGGLE_DUAL_PANE: { + this->ChangeDualPaneMode(true); + break; + } } } @@ -2788,6 +2813,10 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase { } switch (widget) { + case WID_BV_TOGGLE_DUAL_PANE: { + this->ChangeDualPaneMode(false); + break; + } /* Locomotives */ diff --git a/src/lang/extra/english.txt b/src/lang/extra/english.txt index 7cbe5474f2..1e5c5452ce 100644 --- a/src/lang/extra/english.txt +++ b/src/lang/extra/english.txt @@ -1574,6 +1574,7 @@ STR_BUY_VEHICLE_TRAIN_RENAME_LOCOMOTIVE_BUTTON :{BLACK}Rename L STR_BUY_VEHICLE_TRAIN_RENAME_WAGON_BUTTON :{BLACK}Rename Wagon STR_BUY_VEHICLE_TRAIN_RENAME_LOCOMOTIVE_TOOLTIP :{BLACK}Rename locomotive or power car STR_BUY_VEHICLE_TRAIN_RENAME_WAGON_TOOLTIP :{BLACK}Rename wagon +STR_BUY_VEHICLE_TRAIN_TOGGLE_DUAL_PANE_TOOLTIP :{BLACK}Toggle separate locomotives and wagons STR_QUERY_RENAME_TRAIN_TYPE_LOCOMOTIVE_CAPTION :{WHITE}Rename locomotive type STR_QUERY_RENAME_TRAIN_TYPE_WAGON_CAPTION :{WHITE}Rename wagon type diff --git a/src/tbtr_template_gui_create.cpp b/src/tbtr_template_gui_create.cpp index 089e00e39e..19428b9ad7 100644 --- a/src/tbtr_template_gui_create.cpp +++ b/src/tbtr_template_gui_create.cpp @@ -105,8 +105,6 @@ static WindowDesc _template_create_window_desc(__FILE__, __LINE__, std::begin(_widgets), std::end(_widgets) ); -void ShowTemplateTrainBuildVehicleWindow(Train **virtual_train); - static void TrainDepotMoveVehicle(const Vehicle *wagon, VehicleID sel, const Vehicle *head) { const Vehicle *v = Vehicle::Get(sel); diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h index 37eb52a5b5..c0eedd011f 100644 --- a/src/vehicle_gui.h +++ b/src/vehicle_gui.h @@ -57,6 +57,7 @@ void DrawShipImage(const Vehicle *v, const Rect &r, VehicleID selection, EngineI void DrawAircraftImage(const Vehicle *v, const Rect &r, VehicleID selection, EngineImageType image_type); void ShowBuildVehicleWindow(TileIndex tile, VehicleType type); +void ShowTemplateTrainBuildVehicleWindow(Train **virtual_train); uint ShowRefitOptionsList(int left, int right, int y, EngineID engine); StringID GetCargoSubtypeText(const Vehicle *v); diff --git a/src/widgets/build_vehicle_widget.h b/src/widgets/build_vehicle_widget.h index 13af53a0cb..0abb62c954 100644 --- a/src/widgets/build_vehicle_widget.h +++ b/src/widgets/build_vehicle_widget.h @@ -25,6 +25,8 @@ enum BuildVehicleWidgets : WidgetID { WID_BV_SHOW_HIDE, ///< Button to hide or show the selected engine. WID_BV_BUILD_SEL, ///< Build button. WID_BV_RENAME, ///< Rename button. + WID_BV_TOGGLE_DUAL_PANE, ///< Toggle dual pane windows. + WID_BV_TOGGLE_DUAL_PANE_SEL, ///< Selection for WID_BV_TOGGLE_DUAL_PANE. WID_BV_CAPTION_LOCO, ///< Caption of locomotive half of the window. WID_BV_SORT_ASCENDING_DESCENDING_LOCO, ///< Sort direction.