From 420a6a83e47f63376d4c712951fed98c52b3796c Mon Sep 17 00:00:00 2001 From: XorTroll Date: Sat, 2 Nov 2019 14:10:22 +0100 Subject: [PATCH] Welcome logo! toasts, small minor changes --- Common/Source/am/am_LibraryApplet.cpp | 9 ++++++--- Common/Source/hb/hb_hbl.c | 2 +- .../Include/ui/ui_QMenuApplication.hpp | 2 ++ LibraryAppletQMenu/RomFs/Logo.png | Bin 7339 -> 22692 bytes LibraryAppletQMenu/RomFs/LogoLarge.png | Bin 0 -> 19850 bytes .../Source/ui/ui_MenuLayout.cpp | 18 +++++++++--------- .../Source/ui/ui_QMenuApplication.cpp | 11 +++++++++++ .../Source/ui/ui_ThemeMenuLayout.cpp | 16 ++++++++++------ Makefile | 2 +- README.md | 2 +- 10 files changed, 41 insertions(+), 21 deletions(-) create mode 100644 LibraryAppletQMenu/RomFs/LogoLarge.png diff --git a/Common/Source/am/am_LibraryApplet.cpp b/Common/Source/am/am_LibraryApplet.cpp index ff24593..9872150 100644 --- a/Common/Source/am/am_LibraryApplet.cpp +++ b/Common/Source/am/am_LibraryApplet.cpp @@ -7,9 +7,12 @@ namespace am bool LibraryAppletIsActive() { - if(applet_holder.StateChangedEvent.revent == INVALID_HANDLE) return false; - if(!serviceIsActive(&applet_holder.s)) return false; - return !appletHolderCheckFinished(&applet_holder); + bool active = false; + if(applet_holder.StateChangedEvent.revent == INVALID_HANDLE) active = false; + if(!serviceIsActive(&applet_holder.s)) active = false; + active = !appletHolderCheckFinished(&applet_holder); + if(!active) appletUpdateCallerAppletCaptureImage(); + return active; } bool LibraryAppletIsQMenu() diff --git a/Common/Source/hb/hb_hbl.c b/Common/Source/hb/hb_hbl.c index 2fa71a6..ed8d9a1 100644 --- a/Common/Source/hb/hb_hbl.c +++ b/Common/Source/hb/hb_hbl.c @@ -4,7 +4,7 @@ #include const char g_noticeText[] = - "uLaunch's HbTarget impl v" Q_VERSION " (custom wrapper of nx-hbloader)\0" + "uLaunch's HbTarget impl (custom wrapper of nx-hbloader v2.2.0)\0" "There is only one true CFW in the scene."; // Biggest truth static char g_argv[2048]; diff --git a/LibraryAppletQMenu/Include/ui/ui_QMenuApplication.hpp b/LibraryAppletQMenu/Include/ui/ui_QMenuApplication.hpp index 22736fe..b819f63 100644 --- a/LibraryAppletQMenu/Include/ui/ui_QMenuApplication.hpp +++ b/LibraryAppletQMenu/Include/ui/ui_QMenuApplication.hpp @@ -29,6 +29,7 @@ namespace ui u64 GetSuspendedApplicationId(); void NotifyEndSuspended(); bool LaunchFailed(); + void ShowNotification(std::string text); template T GetUIConfigValue(std::string name, T def) @@ -81,6 +82,7 @@ namespace ui MenuLayout::Ref menuLayout; ThemeMenuLayout::Ref themeMenuLayout; SettingsMenuLayout::Ref settingsMenuLayout; + pu::ui::extras::Toast::Ref notifToast; am::QSuspendedInfo suspinfo; u128 selected_user; JSON uijson; diff --git a/LibraryAppletQMenu/RomFs/Logo.png b/LibraryAppletQMenu/RomFs/Logo.png index 40d01594daa33a3aa160f6b3f6195e6b3f078716..8f2eaade242bf49310c12e9696c2659546694396 100644 GIT binary patch literal 22692 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 V>bxafa!d#hW~ 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"Add to menu", "Would you like to add this homebrew to the main menu?", { "Yes", "Cancel" }, true); if(sopt == 0) { - if(cfg::ExistsRecord(list, hb)) qapp->CreateShowDialog("Add to menu", "The homebrew is already in the main menu.\nNothing was added nor removed.\n\nYou can remove it from main menu itself.", { "Ok" }, true); + if(cfg::ExistsRecord(list, hb)) qapp->ShowNotification("The homebrew is already in the main menu. Nothing was added nor removed."); else { cfg::SaveRecord(hb); list.root.titles.push_back(hb); - qapp->CreateShowDialog("Add to menu", "The homebrew was successfully added to the main menu.", { "Ok" }, true); + qapp->ShowNotification("The homebrew was successfully added to the main menu."); } } } @@ -218,7 +218,7 @@ namespace ui else { auto rc = reader.GetReadResult(); - qapp->CreateShowDialog("Title launch", "An error ocurred attempting to launch the title:\n" + util::FormatResult(rc), { "Ok" }, true); + qapp->ShowNotification("An error ocurred attempting to launch the title: " + util::FormatResult(rc)); } reader.FinishRead(); } @@ -274,7 +274,7 @@ namespace ui { cfg::RemoveRecord(title); folder.titles.erase(folder.titles.begin() + realidx); - qapp->CreateShowDialog("Remove entry", "The entry was successfully removed.", { "Ok" }, true); + qapp->ShowNotification("The entry was successfully removed."); this->MoveFolder(this->curfolder, true); } } @@ -570,7 +570,7 @@ namespace ui void MenuLayout::logo_Click() { - qapp->CreateShowDialog("About uLaunch", "uLaunch v" + std::string(Q_VERSION) + "\n\n - Custom, open source Nintendo Switch HOME menu reimplementation", { "Ok" }, true, "romfs:/Logo.png"); + qapp->CreateShowDialog("About uLaunch", "uLaunch v" + std::string(Q_VERSION) + "\n\n - Custom, open source Nintendo Switch HOME menu reimplementation", { "Ok" }, true, "romfs:/LogoLarge.png"); } void MenuLayout::settings_Click() @@ -674,7 +674,7 @@ namespace ui else { auto rc = reader.GetReadResult(); - qapp->CreateShowDialog("Title launch", "An error ocurred attempting to launch the title:\n" + util::FormatResult(rc), { "Ok" }, true); + qapp->ShowNotification("An error ocurred attempting to launch the title:\n" + util::FormatResult(rc)); } reader.FinishRead(); } @@ -744,7 +744,7 @@ namespace ui am::QMenuCommandResultReader reader; rc = reader.GetReadResult(); } - qapp->CreateShowDialog("Change password", R_SUCCEEDED(rc) ? "The password was successfully changed." : "An error ocurred while attempting to change the password: " + util::FormatResult(rc), { "Ok" }, true); + qapp->ShowNotification(R_SUCCEEDED(rc) ? "The password was successfully changed." : "An error ocurred while attempting to change the password: " + util::FormatResult(rc)); } } } @@ -760,7 +760,7 @@ namespace ui am::QMenuCommandResultReader reader; rc = reader.GetReadResult(); - qapp->CreateShowDialog("Remove password", R_SUCCEEDED(rc) ? "The password was successfully removed." : "An error ocurred while attempting to remove the password: " + util::FormatResult(rc), { "Ok" }, true); + qapp->ShowNotification(R_SUCCEEDED(rc) ? "The password was successfully removed." : "An error ocurred while attempting to remove the password: " + util::FormatResult(rc)); } } } @@ -794,7 +794,7 @@ namespace ui rc = reader.GetReadResult(); } } - qapp->CreateShowDialog("Register password", R_SUCCEEDED(rc) ? "The password was successfully registered." : "An error ocurred while attempting to register the password: " + util::FormatResult(rc), { "Ok" }, true); + qapp->ShowNotification(R_SUCCEEDED(rc) ? "The password was successfully registered." : "An error ocurred while attempting to register the password: " + util::FormatResult(rc)); } } } diff --git a/LibraryAppletQMenu/Source/ui/ui_QMenuApplication.cpp b/LibraryAppletQMenu/Source/ui/ui_QMenuApplication.cpp index 8fff4e4..8dbe926 100644 --- a/LibraryAppletQMenu/Source/ui/ui_QMenuApplication.cpp +++ b/LibraryAppletQMenu/Source/ui/ui_QMenuApplication.cpp @@ -35,6 +35,10 @@ namespace ui this->bgm_fade_in_ms = this->bgmjson.value("fade_in_ms", 1500); this->bgm_fade_out_ms = this->bgmjson.value("fade_out_ms", 500); + pu::ui::Color toasttextclr = pu::ui::Color::FromHex(GetUIConfigValue("toast_text_color", "#e1e1e1ff")); + pu::ui::Color toastbaseclr = pu::ui::Color::FromHex(GetUIConfigValue("toast_base_color", "#282828ff")); + this->notifToast = pu::ui::extras::Toast::New("...", 20, toasttextclr, toastbaseclr); + this->bgm = pu::audio::Open(cfg::ProcessedThemeResource(theme, "sound/BGM.mp3")); this->startupLayout = StartupLayout::New(); @@ -130,6 +134,13 @@ namespace ui return (this->stmode == am::QMenuStartMode::MenuLaunchFailure); } + void QMenuApplication::ShowNotification(std::string text) + { + this->EndOverlay(); + this->notifToast->SetText(text); + this->StartOverlayWithTimeout(this->notifToast, 1500); + } + void QMenuApplication::StartPlayBGM() { if(this->bgm != NULL) diff --git a/LibraryAppletQMenu/Source/ui/ui_ThemeMenuLayout.cpp b/LibraryAppletQMenu/Source/ui/ui_ThemeMenuLayout.cpp index 3bd5c2e..932508f 100644 --- a/LibraryAppletQMenu/Source/ui/ui_ThemeMenuLayout.cpp +++ b/LibraryAppletQMenu/Source/ui/ui_ThemeMenuLayout.cpp @@ -80,7 +80,7 @@ namespace ui this->curThemeAuthor->SetVisible(true); this->curThemeAuthor->SetText(theme.base.manifest.author); this->curThemeVersion->SetVisible(true); - this->curThemeVersion->SetText(theme.base.manifest.release); + this->curThemeVersion->SetText("v" + theme.base.manifest.release); this->curThemeBanner->SetVisible(true); this->curThemeIcon->SetVisible(true); this->curThemeIcon->SetImage(theme.base.path + "/theme/Icon.png"); @@ -122,12 +122,16 @@ namespace ui { auto seltheme = this->loadedThemes[this->themesMenu->GetSelectedIndex()]; auto iconpath = seltheme.path + "/theme/Icon.png"; - auto sopt = qapp->CreateShowDialog("Set theme", "Would you like to set '" + seltheme.manifest.name + "' theme as uLaunch's theme?\nNote: changes require a reboot.", { "Yes", "Cancel" }, true, iconpath); - if(sopt == 0) + if(seltheme.base_name == theme.base.base_name) qapp->ShowNotification("This is theme is the currently active one."); + else { - config.theme_name = seltheme.base_name; - cfg::SaveConfig(config); - qapp->CreateShowDialog("Set theme", "uLaunch's theme was updated.", { "Ok" }, true); + auto sopt = qapp->CreateShowDialog("Set theme", "Would you like to set '" + seltheme.manifest.name + "' theme as uLaunch's theme?", { "Yes", "Cancel" }, true, iconpath); + if(sopt == 0) + { + config.theme_name = seltheme.base_name; + cfg::SaveConfig(config); + qapp->ShowNotification("uLaunch's theme was updated. Reboot in order to see changes."); + } } } } \ No newline at end of file diff --git a/Makefile b/Makefile index f0a1e39..12d8693 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -export Q_VERSION := dev +export Q_VERSION := 0.1 .PHONY: all dev clean diff --git a/README.md b/README.md index a5b9451..1fa69b4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# uLaunch + > Custom, open-source replacement/reimplementation for Nintendo Switch's HOME Menu (qlaunch), extending it with amazing, homebrew-orienteed functionality!