From 948ceb3b17951629de1c082a099b0d179e86db85 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 23 May 2025 17:44:20 +0100 Subject: [PATCH] Add: Button to configure badges in build picker window. --- src/picker_gui.cpp | 42 +++++++++++++++++++++++++++++++++++-- src/picker_gui.h | 1 + src/widgets/picker_widget.h | 2 ++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/picker_gui.cpp b/src/picker_gui.cpp index 3b6a4f224c..1e52dde944 100644 --- a/src/picker_gui.cpp +++ b/src/picker_gui.cpp @@ -14,6 +14,7 @@ #include "hotkeys.h" #include "ini_type.h" #include "newgrf_badge.h" +#include "newgrf_badge_config.h" #include "newgrf_badge_gui.h" #include "picker_gui.h" #include "querystring_gui.h" @@ -279,6 +280,11 @@ void PickerWindow::UpdateWidgetSize(WidgetID widget, Dimension &size, const Dime size.width = ScaleGUITrad(PREVIEW_WIDTH) + WidgetDimensions::scaled.fullbevel.Horizontal(); size.height = ScaleGUITrad(PREVIEW_HEIGHT) + WidgetDimensions::scaled.fullbevel.Vertical(); break; + + case WID_PW_CONFIGURE_BADGES: + /* Hide the configuration button if no configurable badges are present. */ + if (this->badge_classes.GetClasses().empty()) size = {0, 0}; + break; } } @@ -401,6 +407,35 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int) CloseWindowById(WC_SELECT_STATION, 0); break; } + + case WID_PW_CONFIGURE_BADGES: + if (this->badge_classes.GetClasses().empty()) break; + ShowDropDownList(this, BuildBadgeClassConfigurationList(this->badge_classes, 1, {}), -1, widget, 0, false, true); + break; + + default: + break; + } +} + +void PickerWindow::OnDropdownSelect(WidgetID widget, int index, int click_result) +{ + switch (widget) { + case WID_PW_CONFIGURE_BADGES: { + bool reopen = HandleBadgeConfigurationDropDownClick(this->callbacks.GetFeature(), 1, index, click_result); + + this->ReInit(); + + if (reopen) { + ReplaceDropDownList(this, BuildBadgeClassConfigurationList(this->badge_classes, 1, {}), -1); + } else { + this->CloseChildWindows(WC_DROPDOWN_MENU); + } + break; + } + + default: + break; } } @@ -671,8 +706,11 @@ std::unique_ptr MakePickerTypeWidgets() static constexpr NWidgetPart picker_type_widgets[] = { NWidget(NWID_SELECTION, INVALID_COLOUR, WID_PW_TYPE_SEL), NWidget(NWID_VERTICAL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), - NWidget(WWT_EDITBOX, COLOUR_DARK_GREEN, WID_PW_TYPE_FILTER), SetPadding(2), SetResize(1, 0), SetFill(1, 0), SetStringTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), + NWidget(WWT_EDITBOX, COLOUR_DARK_GREEN, WID_PW_TYPE_FILTER), SetPadding(2), SetResize(1, 0), SetFill(1, 0), SetStringTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), + EndContainer(), + NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_PW_CONFIGURE_BADGES), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetResize(0, 0), SetFill(0, 1), SetSpriteTip(SPR_EXTRA_MENU, STR_BADGE_CONFIG_MENU_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL, NWidContainerFlag::EqualSize), NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_PW_MODE_ALL), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_PICKER_MODE_ALL, STR_PICKER_MODE_ALL_TOOLTIP), diff --git a/src/picker_gui.h b/src/picker_gui.h index 9d72235f6b..629b26342e 100644 --- a/src/picker_gui.h +++ b/src/picker_gui.h @@ -184,6 +184,7 @@ public: void Close(int data = 0) override; void UpdateWidgetSize(WidgetID widget, Dimension &size, const Dimension &padding, Dimension &fill, Dimension &resize) override; void DrawWidget(const Rect &r, WidgetID widget) const override; + void OnDropdownSelect(WidgetID widget, int index, int click_result) override; void OnResize() override; void OnClick(Point pt, WidgetID widget, int click_count) override; void OnInvalidateData(int data = 0, bool gui_scope = true) override; diff --git a/src/widgets/picker_widget.h b/src/widgets/picker_widget.h index c6612c2b9d..97b2dd7a4e 100644 --- a/src/widgets/picker_widget.h +++ b/src/widgets/picker_widget.h @@ -29,6 +29,8 @@ enum PickerClassWindowWidgets : WidgetID { WID_PW_TYPE_SCROLL, ///< Scrollbar for the matrix. WID_PW_TYPE_NAME, ///< Name of selected item. WID_PW_TYPE_RESIZE, ///< Type resize handle. + + WID_PW_CONFIGURE_BADGES, ///< Button to configure badges. }; #endif /* WIDGETS_PICKER_WIDGET_H */