From 8c6ec65b2d8277cc0f55b4e19e957e8faff778d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 22 Sep 2026 09:48:18 -0600 Subject: [PATCH] Refactor the version reminder bar to make it reusable --- UI/MainScreen.cpp | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp index 83ebf1952d..ba18424645 100644 --- a/UI/MainScreen.cpp +++ b/UI/MainScreen.cpp @@ -506,28 +506,39 @@ void MainScreen::CreateViews() { root_->SetTag("mainroot"); - if (!g_Config.sUpgradeMessage.empty()) { - auto di = GetI18NCategory(I18NCat::DIALOG); + const UI::Drawable dismissableBackground = screenManager()->getUIContext()->GetTheme().itemDownStyle.background; + + auto CreateDismissableBar = [this, vertical, dismissableBackground](std::string_view message, std::string_view action, std::function onDismiss) { Margins margins(0, 0); - UI::LinearLayout *upgradeBar = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT, margins)); + UI::LinearLayout *bar = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT, margins)); UI::Margins textMargins(10, 5); UI::Margins buttonMargins(5, 0); - UI::Drawable solid(0xFFbd9939); - upgradeBar->SetSpacing(5.0f); - upgradeBar->SetBG(solid); - std::string upgradeMessage(di->T("New version of PPSSPP available")); - if (!vertical) { - // The version only really fits in the horizontal layout. - upgradeMessage += ": " + g_Config.sUpgradeVersion; + UI::Drawable solid(dismissableBackground); + bar->SetSpacing(5.0f); + bar->SetBG(solid); + + bar->Add(new TextView(message, FLAG_WRAP_TEXT, false, new LinearLayoutParams(1.0f, UI::Gravity::G_VCENTER, textMargins))); + if (!action.empty()) { + bar->Add(new Choice(action, new LinearLayoutParams(0.0f, UI::Gravity::G_VCENTER, buttonMargins)))->OnClick.Handle(this, &MainScreen::OnDownloadUpgrade); } - upgradeBar->Add(new TextView(upgradeMessage, new LinearLayoutParams(1.0f, UI::Gravity::G_VCENTER, textMargins))); - upgradeBar->Add(new Choice(di->T("Download"), new LinearLayoutParams(buttonMargins)))->OnClick.Handle(this, &MainScreen::OnDownloadUpgrade); - Choice *dismiss = upgradeBar->Add(new Choice("", ImageID("I_CROSS"), new LinearLayoutParams(buttonMargins))); - dismiss->OnClick.Add([this](UI::EventParams &e) { + + Choice *dismiss = bar->Add(new Choice("", ImageID("I_CROSS"), new LinearLayoutParams(0.0f, UI::Gravity::G_VCENTER, buttonMargins))); + dismiss->OnClick.Add([this, onDismiss](UI::EventParams &e) { + onDismiss(); + RecreateViews(); + }); + return bar; + }; + + if (!g_Config.sUpgradeMessage.empty()) { + auto di = GetI18NCategory(I18NCat::DIALOG); + std::string upgradeMessage(di->T("New version of PPSSPP available")); + // The version only really fits in the horizontal layout. + upgradeMessage += ": " + g_Config.sUpgradeVersion; + UI::LinearLayout *upgradeBar = CreateDismissableBar(upgradeMessage, di->T("Download"), [this]() { g_Config.DismissUpgrade(); g_Config.Save("dismissupgrade"); - RecreateViews(); }); // Slip in at the top.