From 3a9b38bb10df13c8c4d66d0672994e3267a1e66a Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 19 Aug 2020 18:02:00 +0100 Subject: [PATCH] Cargo type orders window: Use two columns when more than 32 cargos --- src/order_gui.cpp | 30 +++++++++++++++++++++++++++--- src/widgets/order_widget.h | 1 + 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/order_gui.cpp b/src/order_gui.cpp index ca60bbbd55..489a54b3b2 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -163,6 +163,7 @@ public: this->CreateNestedTree(desc); this->GetWidget(WID_CTO_CAPTION)->SetDataTip(STR_CARGO_TYPE_ORDERS_LOAD_CAPTION + this->variant, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS); this->GetWidget(WID_CTO_HEADER)->SetDataTip(STR_CARGO_TYPE_ORDERS_LOAD_TITLE + this->variant, STR_NULL); + this->GetWidget(WID_CTO_SELECT)->SetDisplayedPlane((_sorted_standard_cargo_specs_size >= 32) ? 0 : SZSP_NONE); this->InitDropdownSelectedTypes(); this->FinishInitNested(v->index); @@ -317,11 +318,17 @@ public: * @return A vertical container of cargo type orders rows. * @post \c *biggest_index contains the largest used index in the tree. */ -static NWidgetBase *MakeCargoTypeOrdersRows(int *biggest_index) +static NWidgetBase *MakeCargoTypeOrdersRows(int *biggest_index, bool right) { + NWidgetVertical *ver = new NWidgetVertical; - for (int i = 0; i < _sorted_standard_cargo_specs_size; i++) { + const bool dual_column = (_sorted_standard_cargo_specs_size >= 32); + if (right && !dual_column) return ver; + + const int increment = dual_column ? 2 : 1; + + for (int i = (right ? 1 : 0); i < _sorted_standard_cargo_specs_size; i += increment) { /* Cargo row */ NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, WID_CTO_CARGO_ROW_FIRST + i); ver->Add(panel); @@ -343,6 +350,16 @@ static NWidgetBase *MakeCargoTypeOrdersRows(int *biggest_index) return ver; } +static NWidgetBase *MakeCargoTypeOrdersRowsLeft(int *biggest_index) +{ + return MakeCargoTypeOrdersRows(biggest_index, false); +} + +static NWidgetBase *MakeCargoTypeOrdersRowsRight(int *biggest_index) +{ + return MakeCargoTypeOrdersRows(biggest_index, true); +} + /** Widgets definition of CargoTypeOrdersWindow. */ static const NWidgetPart _nested_cargo_type_orders_widgets[] = { NWidget(NWID_HORIZONTAL), @@ -352,7 +369,14 @@ static const NWidgetPart _nested_cargo_type_orders_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY), NWidget(WWT_LABEL, COLOUR_GREY, WID_CTO_HEADER), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_NULL, STR_NULL), EndContainer(), - NWidgetFunction(MakeCargoTypeOrdersRows), + NWidget(WWT_PANEL, COLOUR_GREY), + NWidget(NWID_HORIZONTAL), + NWidgetFunction(MakeCargoTypeOrdersRowsLeft), + NWidget(NWID_SELECTION, COLOUR_GREY, WID_CTO_SELECT), + NWidgetFunction(MakeCargoTypeOrdersRowsRight), + EndContainer(), + EndContainer(), + EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(1, 4), SetFill(1, 0), SetResize(1, 0), EndContainer(), // SPACER NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_GREY), diff --git a/src/widgets/order_widget.h b/src/widgets/order_widget.h index 6e0e76ca56..9822f50c60 100644 --- a/src/widgets/order_widget.h +++ b/src/widgets/order_widget.h @@ -67,6 +67,7 @@ enum CargoTypeOrdersWidgets { WID_CTO_CARGO_LABEL_LAST = WID_CTO_CARGO_LABEL_FIRST + NUM_CARGO - 1, ///< Last cargo label. WID_CTO_CARGO_DROPDOWN_FIRST, ///< First order dropdown. WID_CTO_CARGO_DROPDOWN_LAST = WID_CTO_CARGO_DROPDOWN_FIRST + NUM_CARGO - 1, ///< Last order dropdown. + WID_CTO_SELECT, ///< Right column select panel }; #endif /* WIDGETS_ORDER_WIDGET_H */