From 0cb86fd3387965e308a243e422e4c368f605d099 Mon Sep 17 00:00:00 2001 From: digitalLumberjack Date: Wed, 3 Dec 2025 00:09:53 +0100 Subject: [PATCH] feat(frontend): add wizard for first run and new hw installations - First run - RGB DUAL 2 - RGB JAMMA 2 - Card Reader --- .../data/resources/recalbox_x_kubii.svg | 1 - .../data/resources/wizard/arcade_panel.svg | 104 +++++++ .../data/resources/wizard/cardreader.png | Bin 0 -> 88753 bytes .../data/resources/wizard/controller.svg | 122 ++++++++ .../wizard/logo_recaltower_text_reduced.svg | 18 ++ .../resources/{ => wizard}/pad_info_fr.svg | 0 projects/frontend/es-app/src/MainRunner.cpp | 16 +- projects/frontend/es-app/src/MainRunner.h | 5 - .../es-app/src/guis/wizards/WizardBase.cpp | 18 +- .../es-app/src/guis/wizards/WizardBase.h | 20 ++ .../es-app/src/guis/wizards/WizardLite.cpp | 132 --------- .../es-app/src/guis/wizards/WizardWelcome.cpp | 279 ++++++++++++++++++ .../wizards/{WizardLite.h => WizardWelcome.h} | 36 ++- projects/frontend/es-core/src/RecalboxConf.h | 6 + 14 files changed, 606 insertions(+), 151 deletions(-) delete mode 100755 projects/frontend/data/resources/recalbox_x_kubii.svg create mode 100644 projects/frontend/data/resources/wizard/arcade_panel.svg create mode 100644 projects/frontend/data/resources/wizard/cardreader.png create mode 100644 projects/frontend/data/resources/wizard/controller.svg create mode 100644 projects/frontend/data/resources/wizard/logo_recaltower_text_reduced.svg rename projects/frontend/data/resources/{ => wizard}/pad_info_fr.svg (100%) delete mode 100644 projects/frontend/es-app/src/guis/wizards/WizardLite.cpp create mode 100644 projects/frontend/es-app/src/guis/wizards/WizardWelcome.cpp rename projects/frontend/es-app/src/guis/wizards/{WizardLite.h => WizardWelcome.h} (68%) diff --git a/projects/frontend/data/resources/recalbox_x_kubii.svg b/projects/frontend/data/resources/recalbox_x_kubii.svg deleted file mode 100755 index c9dc00e8e9..0000000000 --- a/projects/frontend/data/resources/recalbox_x_kubii.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/frontend/data/resources/wizard/arcade_panel.svg b/projects/frontend/data/resources/wizard/arcade_panel.svg new file mode 100644 index 0000000000..85eeb01ca2 --- /dev/null +++ b/projects/frontend/data/resources/wizard/arcade_panel.svg @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/frontend/data/resources/wizard/cardreader.png b/projects/frontend/data/resources/wizard/cardreader.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3c85a724b69e736157964d9645310d7b68948e GIT binary patch literal 88753 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 VE2<&HZU?B9;pyt`uc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/frontend/data/resources/wizard/logo_recaltower_text_reduced.svg b/projects/frontend/data/resources/wizard/logo_recaltower_text_reduced.svg new file mode 100644 index 0000000000..2dfc693833 --- /dev/null +++ b/projects/frontend/data/resources/wizard/logo_recaltower_text_reduced.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/projects/frontend/data/resources/pad_info_fr.svg b/projects/frontend/data/resources/wizard/pad_info_fr.svg similarity index 100% rename from projects/frontend/data/resources/pad_info_fr.svg rename to projects/frontend/data/resources/wizard/pad_info_fr.svg diff --git a/projects/frontend/es-app/src/MainRunner.cpp b/projects/frontend/es-app/src/MainRunner.cpp index 02fe7b0d14..2428c2aa38 100644 --- a/projects/frontend/es-app/src/MainRunner.cpp +++ b/projects/frontend/es-app/src/MainRunner.cpp @@ -24,7 +24,6 @@ #include "DemoMode.h" #include "RootFolders.h" #include "web/RestApiServer.h" -#include "guis/wizards/WizardLite.h" #include "network/Networks.h" #include "guis/GuiSearch.h" #include "guis/menus/modaltasks/MenuModalRescanRoms.h" @@ -43,6 +42,7 @@ #include #include #include "utils/os/system/ProcessTree.h" +#include "guis/wizards/WizardWelcome.h" MainRunner::ExitState MainRunner::sRequestedExitState = MainRunner::ExitState::Quit; bool MainRunner::sQuitRequested = false; @@ -500,12 +500,6 @@ void MainRunner::CheckAlert(WindowManager& window, SystemManager& systemManager) } } -void MainRunner::CheckRecalboxLite(WindowManager& window) -{ - if (RecalboxSystem::IsLiteVersion()) - window.pushGui(new WizardLite(window)); -} - void MainRunner::CheckFirstTimeWizard(WindowManager& window) { if (RecalboxConf::Instance().GetFirstTimeUse()) @@ -551,12 +545,18 @@ void MainRunner::CheckFirstTimeWizard(WindowManager& window) case BoardType::OdroidUnknown: default: { - CheckRecalboxLite(window); + if (WizardWelcome::ShouldShowWizard()) + window.pushGui(new WizardWelcome(window)); break; } } RecalboxConf::Instance().SetFirstTimeUse(false); } + else + { + if (WizardWelcome::ShouldShowWizard()) + window.pushGui(new WizardWelcome(window)); + } } void MainRunner::CheckBootNotification(WindowManager& window) diff --git a/projects/frontend/es-app/src/MainRunner.h b/projects/frontend/es-app/src/MainRunner.h index d388ae9785..7ea55b0012 100644 --- a/projects/frontend/es-app/src/MainRunner.h +++ b/projects/frontend/es-app/src/MainRunner.h @@ -208,11 +208,6 @@ class MainRunner */ static void CheckBootNotification(WindowManager& window); - /*! - * @brief Check Recalbox Lite status and show wizard - */ - static void CheckRecalboxLite(WindowManager& window); - /*! * @brief Initialize input configurations * @param window Main window diff --git a/projects/frontend/es-app/src/guis/wizards/WizardBase.cpp b/projects/frontend/es-app/src/guis/wizards/WizardBase.cpp index 95d7607266..8e42ea0351 100644 --- a/projects/frontend/es-app/src/guis/wizards/WizardBase.cpp +++ b/projects/frontend/es-app/src/guis/wizards/WizardBase.cpp @@ -98,7 +98,7 @@ void WizardBase::Update(int deltaTime) Component::Update(deltaTime); if (mCurrentPage < 0) - SetPage(0); + SetPage(FirstPage()); } void WizardBase::SetPage(int page) @@ -135,7 +135,16 @@ void WizardBase::DoButtonClick(int index) { if (index < 0) { - if (mCurrentPage < mPageCount - 1) SetPage(mCurrentPage + 1); + if (mCurrentPage < mPageCount - 1) + { + int nextPage = mCurrentPage + 1; + while (OnNextClick(nextPage) == Move::Forward && nextPage < mPageCount) + nextPage++; + if (nextPage < mPageCount) + SetPage(nextPage); + else + Close(); + } else Close(); } else switch(OnButtonClick(mCurrentPage, index)) @@ -162,3 +171,8 @@ void WizardBase::UpdatePage() { SetPage(mCurrentPage); } + +void WizardBase::SetTitle(const String& title) +{ + mTitle->setText(title); +} diff --git a/projects/frontend/es-app/src/guis/wizards/WizardBase.h b/projects/frontend/es-app/src/guis/wizards/WizardBase.h index 01025602cf..9a979ea018 100644 --- a/projects/frontend/es-app/src/guis/wizards/WizardBase.h +++ b/projects/frontend/es-app/src/guis/wizards/WizardBase.h @@ -65,6 +65,19 @@ class WizardBase: public Gui */ virtual Move OnButtonClick(int page, int buttonIndex) = 0; + /*! + * @brief Called when a button the 'next' is clicked allowing to execute custom operations as skip optional page + * @param nextPage next page + * @return + */ + virtual Move OnNextClick(int nextPage) { return Move::None; } + + /*! + * @brief Called when a button the 'next' is clicked allowing to execute custom operations as skip optional page + * @return + */ + virtual int FirstPage() { return 0; } + /*! * @brief Called when the help bar is being to be refreshed * @param page Page to display @@ -85,6 +98,13 @@ class WizardBase: public Gui */ void UpdatePage(); + /*! + * @brief Set the title of the current page + * @param title the title + * @return + */ + void SetTitle(const String& title); + private: //! "Window" background NinePatchComponent mBackground; diff --git a/projects/frontend/es-app/src/guis/wizards/WizardLite.cpp b/projects/frontend/es-app/src/guis/wizards/WizardLite.cpp deleted file mode 100644 index 145b83da4e..0000000000 --- a/projects/frontend/es-app/src/guis/wizards/WizardLite.cpp +++ /dev/null @@ -1,132 +0,0 @@ -// -// Created by bkg2k on 11/10/23. -// - -#include "WizardLite.h" -#include "components/PictureComponent.h" -#include "themes/ThemeManager.h" -#include "guis/menus/MenuProvider.h" - -WizardBase::Move WizardLite::OnKeyReceived(int page, const InputCompactEvent& event) -{ - if (page != 0) - if (event.CancelReleased()) return Move::Backward; - - return Move::None; -} - -bool WizardLite::OnComponentRequired(int page, int componentIndex, Rectangle& where, std::shared_ptr& component) -{ - switch((Pages)page) - { - case Pages::Intro: - { - if (componentIndex == 0) - { - component = std::make_shared(mWindow, Path(":/recalbox_x_kubii.svg"), ImgProps::KeepRatio); - where = Rectangle(0, 0, 2, 10); - return true; - } - if (componentIndex == 1) - { - const MenuThemeData& menuTheme = ThemeManager::Instance().Menu(); - String text = _("Recalbox et Kubii vous remercient pour votre confiance !\n" - "\n" - "Profitons de ce premier lancement pour découvrir ensemble comment utiliser votre Recalbox."); - std::shared_ptr textComponent = std::make_shared(mWindow, text, menuTheme.Text().font, menuTheme.Text().color, ::Alignment::CenterLeft); - textComponent->setVerticalAlignment(::VerticalAlignment::Top); - component = textComponent; - where = Rectangle(3, 1, 7, 9); - return true; - } - break; - } - case Pages::HowTo: - { - if (componentIndex == 0) - { - component = std::make_shared(mWindow, Path(":/pad_info_fr.svg"), ImgProps::KeepRatio); - where = Rectangle(0, 5, 10, 5); - return true; - } - if (componentIndex == 1) - { - const MenuThemeData& menuTheme = ThemeManager::Instance().Menu(); - String text = _("Vous pouvez naviguer dans les menus à l’aide de la croix directionnelle, sélectionner un système ou un jeu à l’aide du bouton B et en sortir à l’aide du bouton A.\n\n" - "Accédez au menu principal à l’aide du bouton START.\n" - "Pour sortir d’un jeu, appuyez simultanément sur les boutons SELECT et START"); - std::shared_ptr textComponent = std::make_shared(mWindow, text, menuTheme.Text().font, menuTheme.Text().color, ::Alignment::CenterLeft); - textComponent->setVerticalAlignment(::VerticalAlignment::Top); - component = textComponent; - where = Rectangle(0, 0, 10, 5); - return true; - } - break; - } - case Pages::AddGames: - { - if (componentIndex == 0) - { - component = std::make_shared(mWindow, Path(":/win_network_share.png"), ImgProps::KeepRatio); - where = Rectangle(0, 5, 10, 5); - return true; - } - if (componentIndex == 1) - { - const MenuThemeData& menuTheme = ThemeManager::Instance().Menu(); - String text = _("Recalbox partage ses dossiers de roms, de bios et de sauvegardes sur le réseau local. Pour ajouter vos roms, rien de plus simple : sur votre ordinateur, recherchez votre “recalbox” dans les partages réseaux.\n" - "Accédez au dossier roms, et copiez ensuite votre jeu dans le dossier correspondant à son système. Par exemple, pour ajouter un jeu “NES”, copiez-le dans le dossier 'roms/nes'."); - std::shared_ptr textComponent = std::make_shared(mWindow, text, menuTheme.Text().font, menuTheme.Text().color, ::Alignment::CenterLeft); - textComponent->setVerticalAlignment(::VerticalAlignment::Top); - component = textComponent; - where = Rectangle(0, 0, 10, 5); - return true; - } - break; - } - case Pages::Update: - { - if (componentIndex == 0) - { - component = std::make_shared(mWindow, Path(":/recalbox_qrcode.svg"), ImgProps::KeepRatio); - where = Rectangle(0, 0, 3, 10); - return true; - } - if (componentIndex == 1) - { - const MenuThemeData& menuTheme = ThemeManager::Instance().Menu(); - String text = _("Passez gratuitement à la version complète du système en connectant votre recalbox à internet et profitez de tous les émulateurs et de toutes les fonctionnalités !\n\n" - "Une fois votre Recalbox connectée, une mise à jour vous sera proposée automatiquement.\n\n" - "Retrouvez des infos utiles et des tutoriels sur recalbox.com, ou sur le wiki recalbox en scannant le qr code."); - std::shared_ptr textComponent = std::make_shared(mWindow, text, menuTheme.Text().font, menuTheme.Text().color, ::Alignment::CenterLeft); - textComponent->setVerticalAlignment(::VerticalAlignment::Top); - component = textComponent; - where = Rectangle(4, 0, 6, 10); - return true; - } - break; - } - case Pages::Count: break; - } - - return false; -} - -bool WizardLite::OnButtonRequired(int page, int buttonIndex, String& buttonText) -{ - if ((Pages)page == Pages::Update && buttonIndex == 0) - { - buttonText = _("NETWORK SETTINGS"); - return true; - } - return false; -} - -WizardBase::Move WizardLite::OnButtonClick(int page, int buttonIndex) -{ - if ((Pages)page == Pages::Update && buttonIndex == 0) - MenuProvider::ShowMenu(MenuContainerType::Network, InheritableContext()); - //mWindow.pushGui(new MenuNetwork(mWindow)); - - return Move::None; -} diff --git a/projects/frontend/es-app/src/guis/wizards/WizardWelcome.cpp b/projects/frontend/es-app/src/guis/wizards/WizardWelcome.cpp new file mode 100644 index 0000000000..0a445f44ed --- /dev/null +++ b/projects/frontend/es-app/src/guis/wizards/WizardWelcome.cpp @@ -0,0 +1,279 @@ +// +// Created by bkg2k on 11/10/23. +// + +#include "WizardWelcome.h" +#include "components/PictureComponent.h" +#include "themes/ThemeManager.h" +#include "guis/menus/MenuProvider.h" +#include "hardware/cardreader/CardReader.h" + + +WizardBase::Move WizardWelcome::OnKeyReceived(int page, const InputCompactEvent& event) +{ + if (page != 0) + if (event.CancelReleased()) return Move::Backward; + + return Move::None; +} + +bool WizardWelcome::OnComponentRequired(int page, int componentIndex, Rectangle& where, std::shared_ptr& component) +{ + switch((Pages)page) + { + case Pages::Intro: + { + if (componentIndex == 0) + { + const MenuThemeData& menuTheme = ThemeManager::Instance().Menu(); + + component = ShouldShowLite() ? std::make_shared(mWindow, Path(":/wizard/logo_recaltower_text_reduced.svg"), ImgProps::KeepRatio) : std::make_shared(mWindow, Path(":/recalbox.svg"), ImgProps::KeepRatio); + component->setColor(menuTheme.Text().color); + where = Rectangle(0, 0, 3, 15); + return true; + } + if (componentIndex == 1) + { + const MenuThemeData& menuTheme = ThemeManager::Instance().Menu(); + String text = _("The Recalbox team thanks you for your trust!\n\n" + "Let's take advantage of this first launch to discover together how to use:\n- your Recalbox"); + + if (ShouldShowLite()) + text.Append(" and its Recaltower"); + if (!ShouldShowJAMMA2()) + text.Append("\n- your controller"); + if (ShouldShowDUAL2()) + text.Append("\n- your Recalbox RGB DUAL 2"); + if (ShouldShowJAMMA2()) + text.Append("\n- your Recalbox RGB JAMMA 2"); + if (ShouldShowCardReader()) + text.Append("\n- your Recalbox Card Reader"); + + if (!ShouldShowJAMMA2() && InputManager::Instance().ConfiguredControllersCount() == 0) + text.Append("\n\nPlease connect your controller via USB and press X to continue."); + std::shared_ptr textComponent = std::make_shared(mWindow, text, *menuTheme.Text().font, menuTheme.Text().color, ::Alignment::TopLeft); + component = textComponent; + where = Rectangle(3, 1, 7, 9); + return true; + } + break; + } + case Pages::Controller: + { + SetTitle(_("Controller")); + if (componentIndex == 0) + { + component = std::make_shared(mWindow, Path(":/wizard/controller.svg"), ImgProps::KeepRatio); + where = Rectangle(0, 6, 10, 4); + return true; + } + if (componentIndex == 1) + { + const MenuThemeData& menuTheme = ThemeManager::Instance().Menu(); + String text = _( + "You can navigate through the menus using the directional pad, **select a system**, or start a game with the **B button**. The **A button** allows you to exit a menu or game list.\n\n" + "Access the **main menu** using the **START button**.\n" + "To exit a game, press the SELECT and START buttons simultaneously."); + std::shared_ptr textComponent = std::make_shared(mWindow, text, *menuTheme.Text().font, menuTheme.Text().color, ::Alignment::TopLeft); + component = textComponent; + where = Rectangle(0, 0, 10, 6); + return true; + } + break; + } + case Pages::JAMMA2: + { + SetTitle(_("RGB JAMMA 2")); + if (componentIndex == 0) + { + component = std::make_shared(mWindow, Path(":/wizard/arcade_panel.svg"), ImgProps::KeepRatio); + where = Rectangle(0, 6, 10, 4); + return true; + } + if (componentIndex == 1) + { + const MenuThemeData& menuTheme = ThemeManager::Instance().Menu(); + String text = _("You can navigate through the menus using the joystick, **select a system**, or start a game with the **button 1**. The **button 2** allows you to exit a menu or game list." + "\n\nAccess the **main menu** using the **START button**.\nTo **exit a game**, **press and hold START** for 4 seconds and release."); + std::shared_ptr textComponent = std::make_shared(mWindow, text, *menuTheme.Text().font, menuTheme.Text().color, ::Alignment::TopLeft); + component = textComponent; + where = Rectangle(0, 0, 10, 6); + RecalboxConf::Instance().SetFirstInstallJamma2(false).Save(); + return true; + } + break; + } + case Pages::DUAL2: + { + SetTitle(_("RGB DUAL 2")); + if (componentIndex == 0) + { + component = std::make_shared(mWindow, Path(":/crt/logorgbdual2.png"), ImgProps::KeepRatio); + where = Rectangle(0, 0, 3, 10); + return true; + } + if (componentIndex == 1) + { + const MenuThemeData& menuTheme = ThemeManager::Instance().Menu(); + String text = _("Your Recalbox RGB DUAL 2 has been detected and installed automatically! You can now enjoy **all your games** on Recalbox with **perfect pixels and frequency**!"); + if (Board::Instance().CrtBoard().IsCrtAdapterAttached()) + text.Append(_("\n\nConsider this: you can automatically switch back to **HDMI mode** by connecting an HDMI cable and restarting Recalbox!")); + else + text.Append(_("\n\nAn HDMI cable has been detected and the “HDMI priority” mode is enabled in the options. To switch back to CRT mode, disconnect the HDMI cable and restart, or disable the HDMI priority option in the Recalbox RGB DUAL 2 (START) menu options.")); + + + std::shared_ptr textComponent = std::make_shared(mWindow, text, *menuTheme.Text().font, menuTheme.Text().color, ::Alignment::TopLeft); + component = textComponent; + where = Rectangle(3, 0, 6, 10); + + RecalboxConf::Instance().SetFirstInstallDual2(false).Save(); + return true; + } + break; + } + case Pages::CardReader: + { + SetTitle(_("Recalbox Card Reader")); + if (componentIndex == 0) + { + component = std::make_shared(mWindow, Path(":/wizard/cardreader.png"), ImgProps::KeepRatio); + where = Rectangle(0, 6, 10, 4); + return true; + } + if (componentIndex == 1) + { + const MenuThemeData& menuTheme = ThemeManager::Instance().Menu(); + String text = _("Your Recalbox Card Reader has been detected and **installed automatically!**\n\nYou can start using it right away by **inserting a card** into the reader and going to the game of your choice to **associate the game and card** using the **menu** available with the **START** button."); + std::shared_ptr textComponent = std::make_shared(mWindow, text, *menuTheme.Text().font, menuTheme.Text().color, ::Alignment::TopLeft); + component = textComponent; + where = Rectangle(0, 0, 10, 6); + RecalboxConf::Instance().SetFirstInstallCardReader(false).Save(); + return true; + } + break; + } + case Pages::AddGames: + { + SetTitle(_("Add games")); + if (componentIndex == 0) + { + component = std::make_shared(mWindow, Path(":/win_network_share.png"), ImgProps::KeepRatio); + where = Rectangle(0, 5, 10, 5); + return true; + } + if (componentIndex == 1) + { + const MenuThemeData& menuTheme = ThemeManager::Instance().Menu(); + String text = _("Recalbox shares its ROM, BIOS, and save files folders on the local network. Adding your ROMs couldn't be easier: on your computer, search for your “recalbox” in the network shares.\n" + "Go to the ROMs folder, then copy your game to the folder corresponding to its system. For example, to add a “NES” game, copy it to the ‘roms/nes’ folder."); + std::shared_ptr textComponent = std::make_shared(mWindow, text, *menuTheme.Text().font, menuTheme.Text().color, ::Alignment::TopLeft); + component = textComponent; + where = Rectangle(0, 0, 10, 5); + return true; + } + break; + } + case Pages::Update: + { + SetTitle(_("Update")); + if (componentIndex == 0) + { + component = std::make_shared(mWindow, Path(":/recalbox_qrcode.svg"), ImgProps::KeepRatio); + where = Rectangle(0, 0, 2, 10); + return true; + } + if (componentIndex == 1) + { + const MenuThemeData& menuTheme = ThemeManager::Instance().Menu(); + String text; + if (ShouldShowLite()) + text.Append(_("You are currently using the *Lite* version of Recalbox. **Upgrade to the full version of the system for free** by connecting your Recalbox to the internet and enjoy all the emulators and features!\n\n")); + else + text.Append(_("Remember to connect your Recalbox to the internet to enjoy all its features!\n")); + text.Append(_("Updates will be offered to you automatically.\n\n" + "Find useful information and tutorials at recalbox.com, or on the recalbox wiki by scanning the QR code.")); + std::shared_ptr textComponent = std::make_shared(mWindow, text, *menuTheme.Text().font, menuTheme.Text().color, ::Alignment::TopLeft); + component = textComponent; + where = Rectangle(3, 0, 7, 10); + RecalboxConf::Instance().SetFirstTimeUse(false).Save(); + return true; + } + break; + } + case Pages::Count: break; + } + + return false; +} + +bool WizardWelcome::OnButtonRequired(int page, int buttonIndex, String& buttonText) +{ + if ((Pages)page == Pages::Update && buttonIndex == 0) + { + buttonText = _("NETWORK SETTINGS"); + return true; + } + return false; +} + +WizardBase::Move WizardWelcome::OnButtonClick(int page, int buttonIndex) +{ + if ((Pages)page == Pages::Update && buttonIndex == 0) + MenuProvider::ShowMenu(MenuContainerType::Network, InheritableContext()); + //mWindow.pushGui(new MenuNetwork(mWindow)); + + if ((Pages)page == Pages::CardReader && true) + return Move::Forward; + return Move::None; +} + +WizardBase::Move WizardWelcome::OnNextClick(int nextPage) +{ + if ( ((Pages)nextPage == Pages::DUAL2 && !ShouldShowDUAL2()) + || ((Pages)nextPage == Pages::CardReader && !ShouldShowCardReader()) + || ((Pages)nextPage == Pages::JAMMA2 && !ShouldShowJAMMA2()) + || ((Pages)nextPage == Pages::Controller && ShouldShowJAMMA2()) + || ((Pages)nextPage >= Pages::AddGames && !ShouldShowFirstInstall())) + return Move::Forward; + return Move::None; +} + +int WizardWelcome::FirstPage() +{ + if (ShouldShowFirstInstall()) return static_cast(Pages::Intro); + if (ShouldShowDUAL2()) return static_cast(Pages::DUAL2); + if (ShouldShowJAMMA2()) return static_cast(Pages::JAMMA2); + if (ShouldShowCardReader()) return static_cast(Pages::CardReader); + return 0; +} + +bool WizardWelcome::ShouldShowLite() +{ + return RecalboxSystem::IsLiteVersion(); +} + +bool WizardWelcome::ShouldShowFirstInstall() +{ + return RecalboxConf::Instance().GetFirstTimeUse(); +} + +bool WizardWelcome::ShouldShowJAMMA2() +{ + return Board::Instance().CrtBoard().GetCrtAdapter() == CrtAdapterType::RGBJamma && RecalboxConf::Instance().GetFirstInstallJamma2(); +} + +bool WizardWelcome::ShouldShowDUAL2() +{ + return Board::Instance().CrtBoard().GetCrtAdapter() == CrtAdapterType::RGBDual2 && RecalboxConf::Instance().GetFirstInstallDual2(); +} + +bool WizardWelcome::ShouldShowCardReader() +{ + return CardReader::Instance().IsAvailable() && RecalboxConf::Instance().GetFirstInstallCardReader(); +} + +bool WizardWelcome::ShouldShowWizard() +{ + return ShouldShowFirstInstall() || ShouldShowDUAL2() || ShouldShowJAMMA2() || ShouldShowCardReader(); +} + diff --git a/projects/frontend/es-app/src/guis/wizards/WizardLite.h b/projects/frontend/es-app/src/guis/wizards/WizardWelcome.h similarity index 68% rename from projects/frontend/es-app/src/guis/wizards/WizardLite.h rename to projects/frontend/es-app/src/guis/wizards/WizardWelcome.h index a1d0c258b1..139f973ee4 100644 --- a/projects/frontend/es-app/src/guis/wizards/WizardLite.h +++ b/projects/frontend/es-app/src/guis/wizards/WizardWelcome.h @@ -3,26 +3,35 @@ // #pragma once +#include "RecalboxConf.h" #include "WizardBase.h" +#include "hardware/Board.h" +#include "hardware/crt/CrtAdapterType.h" +#include "recalbox/RecalboxSystem.h" #include "utils/locale/LocaleHelper.h" -class WizardLite : public WizardBase +class WizardWelcome : public WizardBase { public: enum class Pages { Intro, - HowTo, + Controller, + DUAL2, + JAMMA2, + CardReader, AddGames, Update, Count, }; - explicit WizardLite(WindowManager& window) + explicit WizardWelcome(WindowManager& window) : WizardBase(window, _("WELCOME TO RECALBOX!"), int(Pages::Count), true) { } + static bool ShouldShowWizard(); + private: //! Called when a key event is received @@ -66,4 +75,25 @@ class WizardLite : public WizardBase * @param help Help to fill-in */ void OnHelpRequired(int page, Help& help) override { (void)page; (void)help; } + + /*! + * @brief Called when a button the 'next' is clicked allowing to execute custom operations as skip optional page + * @param page Current page + * @param buttonIndex + * @return + */ + Move OnNextClick(int nextPage) override; + + /*! + * @brief Called when a button the 'next' is clicked allowing to execute custom operations as skip optional page + * @return + */ + int FirstPage() override; + + static bool ShouldShowFirstInstall(); + static bool ShouldShowLite(); + static bool ShouldShowJAMMA2(); + static bool ShouldShowDUAL2(); + static bool ShouldShowCardReader(); + }; diff --git a/projects/frontend/es-core/src/RecalboxConf.h b/projects/frontend/es-core/src/RecalboxConf.h index cddd2488b3..6f57b208b1 100644 --- a/projects/frontend/es-core/src/RecalboxConf.h +++ b/projects/frontend/es-core/src/RecalboxConf.h @@ -328,6 +328,9 @@ class RecalboxConf: public IniFile, public StaticLifeCycleControler