Add button to toggle train purchase window dual pane mode

This commit is contained in:
Jonathan G Rennison
2024-06-05 20:42:47 +01:00
parent 8a134d0f94
commit af102d123b
5 changed files with 33 additions and 2 deletions

View File

@@ -61,6 +61,9 @@ static constexpr NWidgetPart _nested_build_vehicle_widgets[] = {
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_GREY), 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_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_SHADEBOX, COLOUR_GREY),
NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY),
NWidget(WWT_STICKYBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY),
@@ -101,6 +104,7 @@ static constexpr NWidgetPart _nested_build_vehicle_widgets_train_advanced[] = {
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_GREY), 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_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_SHADEBOX, COLOUR_GREY),
NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY),
NWidget(WWT_STICKYBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY),
@@ -1393,6 +1397,7 @@ enum BuildVehicleHotkeys {
struct BuildVehicleWindowBase : Window { struct BuildVehicleWindowBase : Window {
VehicleType vehicle_type; ///< Type of vehicles shown in the 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? bool virtual_train_mode; ///< Are we building a virtual train?
Train **virtual_train_out; ///< Virtual train ptr Train **virtual_train_out; ///< Virtual train ptr
bool listview_mode; ///< If set, only display the available vehicles and do not show a 'build' button. 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) BuildVehicleWindowBase(WindowDesc *desc, TileIndex tile, VehicleType type, Train **virtual_train_out) : Window(desc)
{ {
this->vehicle_type = type; this->vehicle_type = type;
this->tile = tile;
this->window_number = tile == INVALID_TILE ? (int)type : tile; this->window_number = tile == INVALID_TILE ? (int)type : tile;
this->virtual_train_out = virtual_train_out; this->virtual_train_out = virtual_train_out;
this->virtual_train_mode = (virtual_train_out != nullptr); this->virtual_train_mode = (virtual_train_out != nullptr);
@@ -1505,6 +1511,18 @@ struct BuildVehicleWindowBase : Window {
te = {}; te = {};
te.FillDefaultCapacities(e); 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->details_height = ((this->vehicle_type == VEH_TRAIN) ? 10 : 9);
this->GetWidget<NWidgetStacked>(WID_BV_TOGGLE_DUAL_PANE_SEL)->SetDisplayedPlane((this->vehicle_type == VEH_TRAIN) ? 0 : SZSP_NONE);
this->FinishInitNested(this->window_number); this->FinishInitNested(this->window_number);
this->querystrings[WID_BV_FILTER] = &this->vehicle_editbox; this->querystrings[WID_BV_FILTER] = &this->vehicle_editbox;
@@ -2054,6 +2074,11 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
} }
break; break;
} }
case WID_BV_TOGGLE_DUAL_PANE: {
this->ChangeDualPaneMode(true);
break;
}
} }
} }
@@ -2788,6 +2813,10 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
} }
switch (widget) { switch (widget) {
case WID_BV_TOGGLE_DUAL_PANE: {
this->ChangeDualPaneMode(false);
break;
}
/* Locomotives */ /* Locomotives */

View File

@@ -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_WAGON_BUTTON :{BLACK}Rename Wagon
STR_BUY_VEHICLE_TRAIN_RENAME_LOCOMOTIVE_TOOLTIP :{BLACK}Rename locomotive or power car 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_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_LOCOMOTIVE_CAPTION :{WHITE}Rename locomotive type
STR_QUERY_RENAME_TRAIN_TYPE_WAGON_CAPTION :{WHITE}Rename wagon type STR_QUERY_RENAME_TRAIN_TYPE_WAGON_CAPTION :{WHITE}Rename wagon type

View File

@@ -105,8 +105,6 @@ static WindowDesc _template_create_window_desc(__FILE__, __LINE__,
std::begin(_widgets), std::end(_widgets) std::begin(_widgets), std::end(_widgets)
); );
void ShowTemplateTrainBuildVehicleWindow(Train **virtual_train);
static void TrainDepotMoveVehicle(const Vehicle *wagon, VehicleID sel, const Vehicle *head) static void TrainDepotMoveVehicle(const Vehicle *wagon, VehicleID sel, const Vehicle *head)
{ {
const Vehicle *v = Vehicle::Get(sel); const Vehicle *v = Vehicle::Get(sel);

View File

@@ -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 DrawAircraftImage(const Vehicle *v, const Rect &r, VehicleID selection, EngineImageType image_type);
void ShowBuildVehicleWindow(TileIndex tile, VehicleType type); void ShowBuildVehicleWindow(TileIndex tile, VehicleType type);
void ShowTemplateTrainBuildVehicleWindow(Train **virtual_train);
uint ShowRefitOptionsList(int left, int right, int y, EngineID engine); uint ShowRefitOptionsList(int left, int right, int y, EngineID engine);
StringID GetCargoSubtypeText(const Vehicle *v); StringID GetCargoSubtypeText(const Vehicle *v);

View File

@@ -25,6 +25,8 @@ enum BuildVehicleWidgets : WidgetID {
WID_BV_SHOW_HIDE, ///< Button to hide or show the selected engine. WID_BV_SHOW_HIDE, ///< Button to hide or show the selected engine.
WID_BV_BUILD_SEL, ///< Build button. WID_BV_BUILD_SEL, ///< Build button.
WID_BV_RENAME, ///< Rename 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_CAPTION_LOCO, ///< Caption of locomotive half of the window.
WID_BV_SORT_ASCENDING_DESCENDING_LOCO, ///< Sort direction. WID_BV_SORT_ASCENDING_DESCENDING_LOCO, ///< Sort direction.