From e96f35cda9d6fd8a2a310fa2513d8d63c3f8bdc2 Mon Sep 17 00:00:00 2001 From: mmtunligit <156685720+mmtunligit@users.noreply.github.com> Date: Mon, 1 Dec 2025 17:43:48 +0100 Subject: [PATCH] Codechange: Use SetDisplayedPlane instead of UpdateWidgetSize to hide various buttons (#14831) --- src/company_gui.cpp | 10 +++++----- src/news_gui.cpp | 24 +++++++++++------------- src/station_gui.cpp | 16 +++++----------- src/vehicle_gui.cpp | 7 ++++++- src/widgets/company_widget.h | 1 + src/widgets/news_widget.h | 1 + src/widgets/station_widget.h | 1 + src/widgets/vehicle_widget.h | 1 + 8 files changed, 31 insertions(+), 30 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 957d17e298..ca56d03a36 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -697,6 +697,7 @@ public: SelectCompanyLiveryWindow(WindowDesc &desc, CompanyID company, GroupID group) : Window(desc) { this->CreateNestedTree(); + this->GetWidget(WID_SCL_SEC_COL_DROP_SEL)->SetDisplayedPlane(_loaded_newgrf_features.has_2CC ? 0 : SZSP_NONE); this->vscroll = this->GetScrollbar(WID_SCL_MATRIX_SCROLLBAR); if (group == GroupID::Invalid()) { @@ -767,10 +768,7 @@ public: } case WID_SCL_SEC_COL_DROPDOWN: - if (!_loaded_newgrf_features.has_2CC) { - size.width = 0; - break; - } + if (!_loaded_newgrf_features.has_2CC) break; [[fallthrough]]; case WID_SCL_PRI_COL_DROPDOWN: { @@ -1089,7 +1087,9 @@ static constexpr std::initializer_list _nested_select_company_liver NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_GREY, WID_SCL_SPACER_DROPDOWN), SetFill(1, 1), SetResize(1, 0), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCL_PRI_COL_DROPDOWN), SetFill(0, 1), SetToolTip(STR_LIVERY_PRIMARY_TOOLTIP), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCL_SEC_COL_DROPDOWN), SetFill(0, 1), SetToolTip(STR_LIVERY_SECONDARY_TOOLTIP), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCL_SEC_COL_DROP_SEL), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCL_SEC_COL_DROPDOWN), SetFill(0, 1), SetToolTip(STR_LIVERY_SECONDARY_TOOLTIP), + EndContainer(), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), }; diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 1e45fbd2b4..8e63a624b7 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -266,10 +266,12 @@ static constexpr std::initializer_list _nested_small_news_widgets = NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_LIGHT_BLUE, WID_N_CLOSEBOX), NWidget(WWT_EMPTY, INVALID_COLOUR, WID_N_CAPTION), - NWidget(WWT_TEXTBTN, COLOUR_LIGHT_BLUE, WID_N_SHOW_GROUP), - SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), - SetResize(1, 0), - SetToolTip(STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_N_SHOW_GROUP_SEL), + NWidget(WWT_TEXTBTN, COLOUR_LIGHT_BLUE, WID_N_SHOW_GROUP), + SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), + SetResize(1, 0), + SetToolTip(STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP), + EndContainer(), EndContainer(), /* Main part */ @@ -368,8 +370,12 @@ struct NewsWindow : Window { this->CreateNestedTree(); + bool has_vehicle_id = std::holds_alternative(ni->ref1); + NWidgetStacked *nwid_sel = this->GetWidget(WID_N_SHOW_GROUP_SEL); + if (nwid_sel != nullptr) nwid_sel->SetDisplayedPlane(has_vehicle_id ? 0 : SZSP_NONE); + NWidgetCore *nwid = this->GetWidget(WID_N_SHOW_GROUP); - if (std::holds_alternative(ni->ref1) && nwid != nullptr) { + if (has_vehicle_id && nwid != nullptr) { const Vehicle *v = Vehicle::Get(std::get(ni->ref1)); switch (v->type) { case VEH_TRAIN: @@ -470,14 +476,6 @@ struct NewsWindow : Window { d2.height += WidgetDimensions::scaled.captiontext.Vertical(); d2.width += WidgetDimensions::scaled.captiontext.Horizontal(); size = d2; - } else { - /* Hide 'Show group window' button if this news is not about a vehicle. */ - size.width = 0; - size.height = 0; - resize.width = 0; - resize.height = 0; - fill.width = 0; - fill.height = 0; } return; diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 5dad2723cd..00ab921110 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -838,8 +838,10 @@ static constexpr std::initializer_list _nested_station_view_widgets NWidget(NWID_HORIZONTAL, NWidContainerFlag::EqualSize), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_ACCEPTS_RATINGS), SetMinimalSize(46, 12), SetResize(1, 0), SetFill(1, 1), SetStringTip(STR_STATION_VIEW_RATINGS_BUTTON, STR_STATION_VIEW_RATINGS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SV_CLOSE_AIRPORT), SetMinimalSize(45, 12), SetResize(1, 0), SetFill(1, 1), - SetStringTip(STR_STATION_VIEW_CLOSE_AIRPORT, STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SV_CLOSE_AIRPORT_SEL), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SV_CLOSE_AIRPORT), SetMinimalSize(45, 12), SetResize(1, 0), SetFill(1, 1), + SetStringTip(STR_STATION_VIEW_CLOSE_AIRPORT, STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP), + EndContainer(), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SV_CATCHMENT), SetMinimalSize(45, 12), SetResize(1, 0), SetFill(1, 1), SetStringTip(STR_BUTTON_CATCHMENT, STR_TOOLTIP_CATCHMENT), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_TRAINS), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetFill(0, 1), SetStringTip(STR_TRAIN, STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_ROADVEHS), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetFill(0, 1), SetStringTip(STR_LORRY, STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP), @@ -1321,6 +1323,7 @@ struct StationViewWindow : public Window { StationViewWindow(WindowDesc &desc, WindowNumber window_number) : Window(desc) { this->CreateNestedTree(); + this->GetWidget(WID_SV_CLOSE_AIRPORT_SEL)->SetDisplayedPlane(Station::Get(this->window_number)->facilities.Test(StationFacility::Airport) ? 0 : SZSP_NONE); this->vscroll = this->GetScrollbar(WID_SV_SCROLLBAR); /* Nested widget tree creation is done in two steps to ensure that this->GetWidget(WID_SV_ACCEPTS_RATINGS) exists in UpdateWidgetSize(). */ this->FinishInitNested(window_number); @@ -1409,15 +1412,6 @@ struct StationViewWindow : public Window { case WID_SV_ACCEPT_RATING_LIST: size.height = ((this->GetWidget(WID_SV_ACCEPTS_RATINGS)->GetString() == STR_STATION_VIEW_RATINGS_BUTTON) ? this->accepts_lines : this->rating_lines) * GetCharacterHeight(FS_NORMAL) + padding.height; break; - - case WID_SV_CLOSE_AIRPORT: - if (!Station::Get(this->window_number)->facilities.Test(StationFacility::Airport)) { - /* Hide 'Close Airport' button if no airport present. */ - size.width = 0; - resize.width = 0; - fill.width = 0; - } - break; } } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index a9a37ecd0e..9b0e0af438 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2843,8 +2843,10 @@ static constexpr std::initializer_list _nested_vehicle_view_widgets NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_CLONE), SetMinimalSize(18, 18), SetSpriteTip(SPR_EMPTY /* filled later */), EndContainer(), /* For trains only, 'ignore signal' button. */ - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_FORCE_PROCEED), SetMinimalSize(18, 18), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_VV_FORCE_PROCEED_SEL), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_FORCE_PROCEED), SetMinimalSize(18, 18), SetSpriteTip(SPR_IGNORE_SIGNALS, STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP), + EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_VV_SELECT_REFIT_TURN), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_REFIT), SetMinimalSize(18, 18), SetSpriteTip(SPR_REFIT_VEHICLE), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_TURN_AROUND), SetMinimalSize(18, 18), @@ -3017,13 +3019,16 @@ public: switch (v->type) { case VEH_TRAIN: this->GetWidget(WID_VV_TURN_AROUND)->SetToolTip(STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP); + this->GetWidget(WID_VV_FORCE_PROCEED_SEL)->SetDisplayedPlane(0); break; case VEH_ROAD: + this->GetWidget(WID_VV_FORCE_PROCEED_SEL)->SetDisplayedPlane(SZSP_NONE); break; case VEH_SHIP: case VEH_AIRCRAFT: + this->GetWidget(WID_VV_FORCE_PROCEED_SEL)->SetDisplayedPlane(SZSP_NONE); this->SelectPlane(SEL_RT_REFIT); break; diff --git a/src/widgets/company_widget.h b/src/widgets/company_widget.h index 2964b341c0..3be1f9a6ac 100644 --- a/src/widgets/company_widget.h +++ b/src/widgets/company_widget.h @@ -90,6 +90,7 @@ enum SelectCompanyLiveryWidgets : WidgetID { WID_SCL_SPACER_DROPDOWN, ///< Spacer for dropdown. WID_SCL_PRI_COL_DROPDOWN, ///< Dropdown for primary colour. WID_SCL_SEC_COL_DROPDOWN, ///< Dropdown for secondary colour. + WID_SCL_SEC_COL_DROP_SEL, ///< Container for secondary color dropdown, which can be hidden. WID_SCL_MATRIX, ///< Matrix. WID_SCL_MATRIX_SCROLLBAR, ///< Matrix scrollbar. }; diff --git a/src/widgets/news_widget.h b/src/widgets/news_widget.h index 68d59fa133..e5e702ae22 100644 --- a/src/widgets/news_widget.h +++ b/src/widgets/news_widget.h @@ -32,6 +32,7 @@ enum NewsWidgets : WidgetID { WID_N_VEH_SPR, ///< Graphical display of the new vehicle. WID_N_VEH_INFO, ///< Some technical data of the new vehicle. WID_N_SHOW_GROUP, ///< Show vehicle's group + WID_N_SHOW_GROUP_SEL, ///< Selector for showing vehicle group, which can be hidden. }; /** Widgets of the #MessageHistoryWindow class. */ diff --git a/src/widgets/station_widget.h b/src/widgets/station_widget.h index fda195456e..5bef150819 100644 --- a/src/widgets/station_widget.h +++ b/src/widgets/station_widget.h @@ -24,6 +24,7 @@ enum StationViewWidgets : WidgetID { WID_SV_ACCEPTS_RATINGS, ///< 'Accepts' / 'Ratings' button. WID_SV_RENAME, ///< 'Rename' button. WID_SV_CLOSE_AIRPORT, ///< 'Close airport' button. + WID_SV_CLOSE_AIRPORT_SEL, ///< Container for 'close airport' button, which can be hidden. WID_SV_TRAINS, ///< List of scheduled trains button. WID_SV_ROADVEHS, ///< List of scheduled road vehs button. WID_SV_SHIPS, ///< List of scheduled ships button. diff --git a/src/widgets/vehicle_widget.h b/src/widgets/vehicle_widget.h index e74011b9cb..296948283e 100644 --- a/src/widgets/vehicle_widget.h +++ b/src/widgets/vehicle_widget.h @@ -27,6 +27,7 @@ enum VehicleViewWidgets : WidgetID { WID_VV_SELECT_REFIT_TURN, ///< Selection widget between 'refit' and 'turn around' buttons. WID_VV_TURN_AROUND, ///< Turn this vehicle around. WID_VV_FORCE_PROCEED, ///< Force this vehicle to pass a signal at danger. + WID_VV_FORCE_PROCEED_SEL, ///< Container for 'force proceed' button, which can be hidden. WID_VV_HONK_HORN, ///< Honk the vehicles horn (not drawn on UI, only used for hotkey). };