From 4ffbb1f90346c1b4095c0be892b0ccf0a0058602 Mon Sep 17 00:00:00 2001 From: Pablo Curiel Date: Fri, 11 Jun 2021 00:41:58 -0400 Subject: [PATCH] views: create RootView class. --- include/custom_layout_tab.hpp | 36 ----- include/root_view.hpp | 37 +++++ include/sample_installer_page.hpp | 38 ----- include/sample_loading_page.hpp | 42 ------ include/tasks.hpp | 52 +++++-- romfs/i18n/en-US/custom_layout.json | 5 - romfs/i18n/en-US/installer.json | 18 --- romfs/i18n/en-US/main.json | 76 ---------- romfs/i18n/en-US/popup.json | 13 -- romfs/i18n/en-US/root_view.json | 9 ++ source/custom_layout_tab.cpp | 97 ------------ source/main.cpp | 222 ++++------------------------ source/root_view.cpp | 54 +++++++ source/sample_installer_page.cpp | 77 ---------- source/sample_loading_page.cpp | 82 ---------- source/tasks.cpp | 20 --- 16 files changed, 170 insertions(+), 708 deletions(-) delete mode 100644 include/custom_layout_tab.hpp create mode 100644 include/root_view.hpp delete mode 100644 include/sample_installer_page.hpp delete mode 100644 include/sample_loading_page.hpp delete mode 100644 romfs/i18n/en-US/custom_layout.json delete mode 100644 romfs/i18n/en-US/installer.json delete mode 100644 romfs/i18n/en-US/main.json delete mode 100644 romfs/i18n/en-US/popup.json create mode 100644 romfs/i18n/en-US/root_view.json delete mode 100644 source/custom_layout_tab.cpp create mode 100644 source/root_view.cpp delete mode 100644 source/sample_installer_page.cpp delete mode 100644 source/sample_loading_page.cpp diff --git a/include/custom_layout_tab.hpp b/include/custom_layout_tab.hpp deleted file mode 100644 index da3e48b..0000000 --- a/include/custom_layout_tab.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/* - Borealis, a Nintendo Switch UI Library - Copyright (C) 2020 natinusala - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include - -class CustomLayoutTab : public brls::AbsoluteLayout -{ - public: - CustomLayoutTab(); - - brls::View* getDefaultFocus() override; - brls::View* getNextFocus(brls::FocusDirection direction, brls::View* currentView) override; - void layout(NVGcontext* vg, brls::Style* style, brls::FontStash* stash); - - private: - brls::NavigationMap navigationMap; - - brls::Button* firstButton; - brls::Button* secondButton; - brls::Button* thirdButton; -}; diff --git a/include/root_view.hpp b/include/root_view.hpp new file mode 100644 index 0000000..309fd5f --- /dev/null +++ b/include/root_view.hpp @@ -0,0 +1,37 @@ +/* + * root_view.hpp + * + * Copyright (c) 2020-2021, DarkMatterCore . + * + * This file is part of nxdumptool (https://github.com/DarkMatterCore/nxdumptool). + * + * nxdumptool is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nxdumptool is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +namespace nxdt::views +{ + class RootView: public brls::TabFrame + { + private: + nxdt::tasks::GameCardTask *gc_status_task = nullptr; + nxdt::tasks::TitleTask *title_task = nullptr; + nxdt::tasks::UmsTask *ums_task = nullptr; + nxdt::tasks::UsbHostTask *usb_host_task = nullptr; + + public: + RootView(void); + }; +} diff --git a/include/sample_installer_page.hpp b/include/sample_installer_page.hpp deleted file mode 100644 index 753f402..0000000 --- a/include/sample_installer_page.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - Borealis, a Nintendo Switch UI Library - Copyright (C) 2019 natinusala - Copyright (C) 2019 Billy Laws - Copyright (C) 2019 p-sam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#pragma once - -#include - -class SampleInstallerPage : public brls::View -{ - private: - brls::Button* button; - brls::Label* label; - - public: - SampleInstallerPage(brls::StagedAppletFrame* frame, std::string label); - ~SampleInstallerPage(); - - void draw(NVGcontext* vg, int x, int y, unsigned width, unsigned height, brls::Style* style, brls::FrameContext* ctx) override; - void layout(NVGcontext* vg, brls::Style* style, brls::FontStash* stash) override; - brls::View* getDefaultFocus() override; -}; diff --git a/include/sample_loading_page.hpp b/include/sample_loading_page.hpp deleted file mode 100644 index 035e049..0000000 --- a/include/sample_loading_page.hpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - Borealis, a Nintendo Switch UI Library - Copyright (C) 2019 natinusala - Copyright (C) 2019 Billy Laws - Copyright (C) 2019 p-sam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#pragma once - -#include - -class SampleLoadingPage : public brls::View -{ - private: - brls::StagedAppletFrame* frame; - brls::ProgressDisplay* progressDisp; - brls::Label* label; - int progressValue = 0; - - public: - SampleLoadingPage(brls::StagedAppletFrame* frame); - ~SampleLoadingPage(); - - void draw(NVGcontext* vg, int x, int y, unsigned width, unsigned height, brls::Style* style, brls::FrameContext* ctx) override; - void layout(NVGcontext* vg, brls::Style* style, brls::FontStash* stash) override; - - void willAppear(bool resetState = false) override; - void willDisappear(bool resetState = false) override; -}; diff --git a/include/tasks.hpp b/include/tasks.hpp index b8243a7..4c02236 100644 --- a/include/tasks.hpp +++ b/include/tasks.hpp @@ -52,13 +52,22 @@ namespace nxdt::tasks GameCardStatus cur_gc_status = GameCardStatus_NotInserted; GameCardStatus prev_gc_status = GameCardStatus_NotInserted; + public: GameCardTask(void); ~GameCardTask(void); void run(retro_time_t current_time) override; - GameCardStatusEvent* GetTaskEvent(void); + ALWAYS_INLINE GameCardStatusEvent::Subscription RegisterListener(GameCardStatusEvent::Callback cb) + { + return this->gc_status_event.subscribe(cb); + } + + ALWAYS_INLINE void UnregisterListener(GameCardStatusEvent::Subscription subscription) + { + this->gc_status_event.unsubscribe(subscription); + } }; /* Title task. */ @@ -71,15 +80,24 @@ namespace nxdt::tasks TitleApplicationMetadataVector user_metadata; void PopulateApplicationMetadataVector(bool is_system); + public: TitleTask(void); ~TitleTask(void); void run(retro_time_t current_time) override; - VoidEvent* GetTaskEvent(void); - TitleApplicationMetadataVector* GetApplicationMetadata(bool is_system); + + ALWAYS_INLINE VoidEvent::Subscription RegisterListener(VoidEvent::Callback cb) + { + return this->title_event.subscribe(cb); + } + + ALWAYS_INLINE void UnregisterListener(VoidEvent::Subscription subscription) + { + this->title_event.unsubscribe(subscription); + } }; /* USB Mass Storage task. */ @@ -97,9 +115,17 @@ namespace nxdt::tasks void run(retro_time_t current_time) override; - VoidEvent* GetTaskEvent(void); - UmsDeviceVector* GetUmsDevices(void); + + ALWAYS_INLINE VoidEvent::Subscription RegisterListener(VoidEvent::Callback cb) + { + return this->ums_event.subscribe(cb); + } + + ALWAYS_INLINE void UnregisterListener(VoidEvent::Subscription subscription) + { + this->ums_event.unsubscribe(subscription); + } }; /* USB host device connection task. */ @@ -116,14 +142,16 @@ namespace nxdt::tasks void run(retro_time_t current_time) override; - BooleanEvent* GetTaskEvent(void); + ALWAYS_INLINE BooleanEvent::Subscription RegisterListener(BooleanEvent::Callback cb) + { + return this->usb_host_event.subscribe(cb); + } + + ALWAYS_INLINE void UnregisterListener(BooleanEvent::Subscription subscription) + { + this->usb_host_event.unsubscribe(subscription); + } }; } -/* Declared in main.cpp. */ -extern nxdt::tasks::GameCardTask *g_gamecardTask; -extern nxdt::tasks::TitleTask *g_titleTask; -extern nxdt::tasks::UmsTask *g_umsTask; -extern nxdt::tasks::UsbHostTask *g_usbHostTask; - #endif /* __TASKS_HPP__ */ diff --git a/romfs/i18n/en-US/custom_layout.json b/romfs/i18n/en-US/custom_layout.json deleted file mode 100644 index 86a6ba3..0000000 --- a/romfs/i18n/en-US/custom_layout.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "first_button": "First button", - "second_button": "Second button", - "third_button": "Third button" -} diff --git a/romfs/i18n/en-US/installer.json b/romfs/i18n/en-US/installer.json deleted file mode 100644 index 1fa8482..0000000 --- a/romfs/i18n/en-US/installer.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "open": "Open example installer", - - "title": "My great installer", - - "stage1": { - "text": "Here, you would normally do useful things", - "button": "Go to step 2" - }, - - "stage2": { - "text": "Example loading display" - }, - - "stage3": { - "button": "Finish" - } -} diff --git a/romfs/i18n/en-US/main.json b/romfs/i18n/en-US/main.json deleted file mode 100644 index 5eb224d..0000000 --- a/romfs/i18n/en-US/main.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "tabs": { - "first": "First tab", - "second": "Second tab", - "third": "Third tab", - "fourth": "Fourth tab", - "custom_navigation_tab": "Custom Layout" - }, - - "pozznx": { - "open": "Open a dialog", - "warning": "Warning: PozzNX will wipe all data on your Switch and render it inoperable, do you want to proceed?", - "running": "Running PozzNX...", - "continue": "Continue" - }, - - "notify": "Post a random notification", - - "tv": { - "resolution": "TV Resolution", - "automatic": "Automatic" - }, - - "i18n": { - "title": "Language: {0} ({1})", - "lang": "English" - }, - - "jank": { - "jank": "User Interface Jankiness", - "native": "Native", - "minimal": "Minimal", - "regular": "Regular", - "maximum": "Maximum", - "saxophone": "SX OS", - "vista": "Windows Vista", - "ios": "iOS 14" - }, - - "divide": { - "title": "Divide by 0", - "description": "Can the Switch do it?", - "crash": "The software was closed because an error occured:\nSIGABRT (signal 6)" - }, - - "more": "For more information about how to use Nintendo Switch and its features, please refer to the Nintendo Support Website on your smart device or PC.", - - "actions": { - "title": "Custom Actions", - "notify": "Show notification", - "triggered": "Custom Action triggered" - }, - - "layers": { - "title": "Select Layer", - "layer1": "Layer 1", - "layer2": "Layer 2", - - "item1": "Item 1", - "item2": "Item 2", - "item3": "Item 3" - }, - - "keyboard": { - "string": { - "title": "Open Keyboard", - "default": "Default text", - "help": "Help message" - }, - "number": { - "title": "Open Num Keyboard", - "help": "Help message" - } - } -} - diff --git a/romfs/i18n/en-US/popup.json b/romfs/i18n/en-US/popup.json deleted file mode 100644 index e1c0084..0000000 --- a/romfs/i18n/en-US/popup.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "open": "Open popup", - - "red": "Red", - "green": "Green", - "blue": "Blue", - - "title": "Popup title", - "subtitle": { - "left": "Subtitle left", - "right": "Subtitle right" - } -} diff --git a/romfs/i18n/en-US/root_view.json b/romfs/i18n/en-US/root_view.json new file mode 100644 index 0000000..2c3b0a1 --- /dev/null +++ b/romfs/i18n/en-US/root_view.json @@ -0,0 +1,9 @@ +{ + "tabs": { + "gamecard": "Gamecard", + "user_titles": "User titles", + "system_titles": "System titles", + "options": "Options", + "about": "About" + } +} diff --git a/source/custom_layout_tab.cpp b/source/custom_layout_tab.cpp deleted file mode 100644 index 6feb557..0000000 --- a/source/custom_layout_tab.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - Borealis, a Nintendo Switch UI Library - Copyright (C) 2020 natinusala - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "custom_layout_tab.hpp" - -using namespace brls::i18n::literals; - -CustomLayoutTab::CustomLayoutTab() -{ - // Create views - this->firstButton = new brls::Button(brls::ButtonStyle::REGULAR); - this->firstButton->setLabel("custom_layout/first_button"_i18n); - this->addView(this->firstButton); - - this->secondButton = new brls::Button(brls::ButtonStyle::REGULAR); - this->secondButton->setLabel("custom_layout/second_button"_i18n); - this->addView(this->secondButton); - - this->thirdButton = new brls::Button(brls::ButtonStyle::REGULAR); - this->thirdButton->setLabel("custom_layout/third_button"_i18n); - this->addView(this->thirdButton); - - // Populate custom navigation map - this->navigationMap.add( - this->firstButton, - brls::FocusDirection::RIGHT, - this->secondButton); - - this->navigationMap.add( - this->secondButton, - brls::FocusDirection::LEFT, - this->firstButton); - - this->navigationMap.add( - this->secondButton, - brls::FocusDirection::DOWN, - this->thirdButton); - - this->navigationMap.add( - this->thirdButton, - brls::FocusDirection::UP, - this->secondButton); -} - -#define BUTTON_WIDTH 300 -#define BUTTON_HEIGHT 50 -#define PADDING 75 - -void CustomLayoutTab::layout(NVGcontext* vg, brls::Style* style, brls::FontStash* stash) -{ - int x = this->getX(); - int y = this->getY(); - - // Fully custom layout - this->firstButton->setBoundaries( - x + PADDING, - y + PADDING, - BUTTON_WIDTH, - BUTTON_HEIGHT); - - this->secondButton->setBoundaries( - x + PADDING * 2 + BUTTON_WIDTH, - y + PADDING, - BUTTON_WIDTH, - BUTTON_HEIGHT); - - this->thirdButton->setBoundaries( - x + PADDING * 2 + BUTTON_WIDTH, - y + PADDING * 2 + BUTTON_HEIGHT, - BUTTON_WIDTH, - BUTTON_HEIGHT); -} - -brls::View* CustomLayoutTab::getDefaultFocus() -{ - return this->firstButton->getDefaultFocus(); -} - -brls::View* CustomLayoutTab::getNextFocus(brls::FocusDirection direction, brls::View* currentView) -{ - return this->navigationMap.getNextFocus(direction, currentView); -} diff --git a/source/main.cpp b/source/main.cpp index ba0fb9c..b6e0f0d 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -1,51 +1,31 @@ /* - Borealis, a Nintendo Switch UI Library - Copyright (C) 2019-2020 natinusala - Copyright (C) 2019 p-sam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ + * main.cpp + * + * Copyright (c) 2020-2021, DarkMatterCore . + * + * This file is part of nxdumptool (https://github.com/DarkMatterCore/nxdumptool). + * + * nxdumptool is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nxdumptool is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include -#include #include - -#include "custom_layout_tab.hpp" -#include "sample_installer_page.hpp" -#include "sample_loading_page.hpp" - -namespace i18n = brls::i18n; // for loadTranslations() and getStr() -using namespace i18n::literals; // for _i18n - -std::vector NOTIFICATIONS = { - "You have cool hair", - "I like your shoes", - "borealis is powered by nanovg", - "The Triforce is an inside job", - "Pozznx will trigger in one day and twelve hours", - "Aurora Borealis? At this time of day, at this time of year, in this part of the gaming market, located entirely within your Switch?!", - "May I see it?", - "Hmm, Steamed Hams!" -}; - -nxdt::tasks::GameCardTask *g_gamecardTask = nullptr; -nxdt::tasks::TitleTask *g_titleTask = nullptr; -nxdt::tasks::UmsTask *g_umsTask = nullptr; -nxdt::tasks::UsbHostTask *g_usbHostTask = nullptr; +#include int main(int argc, char *argv[]) { + /* Set scope guard to clean up resources at exit. */ ON_SCOPE_EXIT { utilsCloseResources(); }; /* Initialize application resources. */ @@ -55,162 +35,20 @@ int main(int argc, char *argv[]) brls::Logger::setLogLevel(brls::LogLevel::DEBUG); /* Load Borealis translation files. */ - i18n::loadTranslations(); + brls::i18n::loadTranslations(); /* Initialize Borealis. */ if (!brls::Application::init(APP_TITLE)) return EXIT_FAILURE; - /* Start background tasks. */ - g_gamecardTask = new nxdt::tasks::GameCardTask(); - g_titleTask = new nxdt::tasks::TitleTask(); - g_umsTask = new nxdt::tasks::UmsTask(); - g_usbHostTask = new nxdt::tasks::UsbHostTask(); + /* Create root view. */ + nxdt::views::RootView *root_view = new nxdt::views::RootView(); - /* Create root tab frame. */ - brls::TabFrame *root_frame = new brls::TabFrame(); - root_frame->setTitle(APP_TITLE); - root_frame->setIcon(BOREALIS_ASSET("icon/" APP_TITLE ".jpg")); - root_frame->setFooterText("v" APP_VERSION); - - - - - - - - brls::List *testList = new brls::List(); - - brls::ListItem* dialogItem = new brls::ListItem("main/pozznx/open"_i18n); - dialogItem->getClickEvent()->subscribe([](brls::View* view) { - brls::Dialog* dialog = new brls::Dialog("main/pozznx/warning"_i18n); - - brls::GenericEvent::Callback closeCallback = [dialog](brls::View* view) { - dialog->close(); - brls::Application::notify("main/pozznx/running"_i18n); - }; - - std::string continueStr = "main/pozznx/continue"_i18n; - - dialog->addButton(continueStr, closeCallback); - dialog->addButton(continueStr, closeCallback); - dialog->addButton(continueStr, closeCallback); - - dialog->setCancelable(false); - - dialog->open(); - }); - - brls::ListItem* notificationItem = new brls::ListItem("main/notify"_i18n); - notificationItem->getClickEvent()->subscribe([](brls::View* view) { - std::string notification = NOTIFICATIONS[std::rand() % NOTIFICATIONS.size()]; - brls::Application::notify(notification); - }); - - brls::ListItem* themeItem = new brls::ListItem("main/tv/resolution"_i18n); - themeItem->setValue("main/tv/automatic"_i18n); - - brls::ListItem* i18nItem = new brls::ListItem(i18n::getStr("main/i18n/title", i18n::getCurrentLocale(), "main/i18n/lang"_i18n)); - - brls::SelectListItem* jankItem = new brls::SelectListItem( - "main/jank/jank"_i18n, - { - "main/jank/native"_i18n, - "main/jank/minimal"_i18n, - "main/jank/regular"_i18n, - "main/jank/maximum"_i18n, - "main/jank/saxophone"_i18n, - "main/jank/vista"_i18n, - "main/jank/ios"_i18n, - }); - - brls::ListItem* crashItem = new brls::ListItem("main/divide/title"_i18n, "main/divide/description"_i18n); - crashItem->getClickEvent()->subscribe([](brls::View* view) { brls::Application::crash("main/divide/crash"_i18n); }); - - brls::ListItem* installerItem = new brls::ListItem("installer/open"_i18n); - installerItem->getClickEvent()->subscribe([](brls::View* view) { - brls::StagedAppletFrame* stagedFrame = new brls::StagedAppletFrame(); - stagedFrame->setTitle("installer/title"_i18n); - - stagedFrame->addStage(new SampleInstallerPage(stagedFrame, "installer/stage1/button"_i18n)); - stagedFrame->addStage(new SampleLoadingPage(stagedFrame)); - stagedFrame->addStage(new SampleInstallerPage(stagedFrame, "installer/stage3/button"_i18n)); - - brls::Application::pushView(stagedFrame); - }); - - brls::ListItem* popupItem = new brls::ListItem("popup/open"_i18n); - popupItem->getClickEvent()->subscribe([](brls::View* view) { - brls::TabFrame* popupTabFrame = new brls::TabFrame(); - popupTabFrame->addTab("popup/red"_i18n, new brls::Rectangle(nvgRGB(255, 0, 0))); - popupTabFrame->addTab("popup/green"_i18n, new brls::Rectangle(nvgRGB(0, 255, 0))); - popupTabFrame->addTab("popup/blue"_i18n, new brls::Rectangle(nvgRGB(0, 0, 255))); - brls::PopupFrame::open("popup/title"_i18n, BOREALIS_ASSET("icon/" APP_TITLE ".jpg"), popupTabFrame, "popup/subtitle/left"_i18n, "popup/subtitle/right"_i18n); - }); - - brls::SelectListItem* layerSelectItem = new brls::SelectListItem("main/layers/title"_i18n, { "main/layers/layer1"_i18n, "main/layers/layer2"_i18n }); - - brls::InputListItem* keyboardItem = new brls::InputListItem("main/keyboard/string/title"_i18n, "main/keyboard/string/default"_i18n, "main/keyboard/string/help"_i18n, "", 16); - - brls::IntegerInputListItem* keyboardNumberItem = new brls::IntegerInputListItem("main/keyboard/number/title"_i18n, 1337, "main/keyboard/number/help"_i18n, "", 10); - - testList->addView(dialogItem); - testList->addView(notificationItem); - testList->addView(themeItem); - testList->addView(i18nItem); - testList->addView(jankItem); - testList->addView(crashItem); - testList->addView(installerItem); - testList->addView(popupItem); - testList->addView(keyboardItem); - testList->addView(keyboardNumberItem); - - brls::Label* testLabel = new brls::Label(brls::LabelStyle::REGULAR, "main/more"_i18n, true); - testList->addView(testLabel); - - brls::ListItem* actionTestItem = new brls::ListItem("main/actions/title"_i18n); - actionTestItem->registerAction("main/actions/notify"_i18n, brls::Key::L, [] { - brls::Application::notify("main/actions/triggered"_i18n); - return true; - }); - testList->addView(actionTestItem); - - brls::LayerView* testLayers = new brls::LayerView(); - brls::List* layerList1 = new brls::List(); - brls::List* layerList2 = new brls::List(); - - layerList1->addView(new brls::Header("main/layers/layer1"_i18n, false)); - layerList1->addView(new brls::ListItem("main/layers/item1"_i18n)); - layerList1->addView(new brls::ListItem("main/layers/item2"_i18n)); - layerList1->addView(new brls::ListItem("main/layers/item3"_i18n)); - - layerList2->addView(new brls::Header("main/layers/layer2"_i18n, false)); - layerList2->addView(new brls::ListItem("main/layers/item1"_i18n)); - layerList2->addView(new brls::ListItem("main/layers/item2"_i18n)); - layerList2->addView(new brls::ListItem("main/layers/item3"_i18n)); - - testLayers->addLayer(layerList1); - testLayers->addLayer(layerList2); - - layerSelectItem->getValueSelectedEvent()->subscribe([=](size_t selection) { - testLayers->changeLayer(selection); - }); - - testList->addView(layerSelectItem); - - root_frame->addTab("main/tabs/first"_i18n, testList); - root_frame->addTab("main/tabs/second"_i18n, testLayers); - root_frame->addSeparator(); - root_frame->addTab("main/tabs/third"_i18n, new brls::Rectangle(nvgRGB(255, 0, 0))); - root_frame->addTab("main/tabs/fourth"_i18n, new brls::Rectangle(nvgRGB(0, 255, 0))); - root_frame->addSeparator(); - root_frame->addTab("main/tabs/custom_navigation_tab"_i18n, new CustomLayoutTab()); - - // Add the root view to the stack - brls::Application::pushView(root_frame); - - // Run the app - while (brls::Application::mainLoop()); + /* Add the root view to the stack. */ + brls::Application::pushView(root_view); - // Exit + /* Run the application. */ + while(brls::Application::mainLoop()); + + /* Exit. */ return EXIT_SUCCESS; } diff --git a/source/root_view.cpp b/source/root_view.cpp new file mode 100644 index 0000000..4673336 --- /dev/null +++ b/source/root_view.cpp @@ -0,0 +1,54 @@ +/* + * root_view.cpp + * + * Copyright (c) 2020-2021, DarkMatterCore . + * + * This file is part of nxdumptool (https://github.com/DarkMatterCore/nxdumptool). + * + * nxdumptool is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nxdumptool is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +//#include +//#include +//#include +//#include +//#include + +using namespace brls::i18n::literals; /* For _i18n. */ + +namespace nxdt::views +{ + RootView::RootView(void) : brls::TabFrame() + { + /* Start background tasks. */ + this->gc_status_task = new nxdt::tasks::GameCardTask(); + this->title_task = new nxdt::tasks::TitleTask(); + this->ums_task = new nxdt::tasks::UmsTask(); + this->usb_host_task = new nxdt::tasks::UsbHostTask(); + + /* Set UI properties. */ + this->setTitle(APP_TITLE); + this->setIcon(BOREALIS_ASSET("icon/" APP_TITLE ".jpg")); + this->setFooterText("v" APP_VERSION); + + /* Add tabs. */ + this->addTab("root_view/tabs/gamecard"_i18n, new brls::Rectangle(nvgRGB(255, 0, 0))); + this->addTab("root_view/tabs/user_titles"_i18n, new brls::Rectangle(nvgRGB(0, 255, 0))); + this->addTab("root_view/tabs/system_titles"_i18n, new brls::Rectangle(nvgRGB(0, 0, 255))); + this->addTab("root_view/tabs/options"_i18n, new brls::Rectangle(nvgRGB(255, 255, 0))); + this->addTab("root_view/tabs/about"_i18n, new brls::Rectangle(nvgRGB(255, 0, 255))); + } +} diff --git a/source/sample_installer_page.cpp b/source/sample_installer_page.cpp deleted file mode 100644 index 697a016..0000000 --- a/source/sample_installer_page.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - Borealis, a Nintendo Switch UI Library - Copyright (C) 2019 natinusala - Copyright (C) 2019 Billy Laws - Copyright (C) 2019 p-sam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "sample_installer_page.hpp" - -#include - -using namespace brls::i18n::literals; - -SampleInstallerPage::SampleInstallerPage(brls::StagedAppletFrame* frame, std::string label) -{ - // Label - this->button = (new brls::Button(brls::ButtonStyle::BORDERLESS))->setLabel(label)->setImage(BOREALIS_ASSET("icon/" APP_TITLE ".jpg")); - this->button->setParent(this); - this->button->getClickEvent()->subscribe([frame](View* view) { - if (frame->isLastStage()) - brls::Application::popView(); - else - frame->nextStage(); - }); - this->label = new brls::Label(brls::LabelStyle::DIALOG, "installer/stage1/text"_i18n, true); - this->label->setHorizontalAlign(NVG_ALIGN_CENTER); - this->label->setParent(this); -} - -void SampleInstallerPage::draw(NVGcontext* vg, int x, int y, unsigned width, unsigned height, brls::Style* style, brls::FrameContext* ctx) -{ - this->label->frame(ctx); - this->button->frame(ctx); -} - -brls::View* SampleInstallerPage::getDefaultFocus() -{ - return this->button; -} - -void SampleInstallerPage::layout(NVGcontext* vg, brls::Style* style, brls::FontStash* stash) -{ - this->label->setWidth(roundf((float)this->width * style->CrashFrame.labelWidth)); - this->label->invalidate(true); - - this->label->setBoundaries( - this->x + this->width / 2 - this->label->getWidth() / 2, - this->y + (this->height - style->AppletFrame.footerHeight) / 2, - this->label->getWidth(), - this->label->getHeight()); - - this->button->setBoundaries( - this->x + this->width / 2 - style->CrashFrame.buttonWidth / 2, - this->y + this->height / 2 + style->CrashFrame.buttonHeight, - style->CrashFrame.buttonWidth, - style->CrashFrame.buttonHeight); - this->button->invalidate(); -} - -SampleInstallerPage::~SampleInstallerPage() -{ - delete this->label; - delete this->button; -} diff --git a/source/sample_loading_page.cpp b/source/sample_loading_page.cpp deleted file mode 100644 index 846a5fc..0000000 --- a/source/sample_loading_page.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - Borealis, a Nintendo Switch UI Library - Copyright (C) 2019 natinusala - Copyright (C) 2019 Billy Laws - Copyright (C) 2019 p-sam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "sample_loading_page.hpp" - -#include - -using namespace brls::i18n::literals; - -SampleLoadingPage::SampleLoadingPage(brls::StagedAppletFrame* frame) - : frame(frame) -{ - // Label - this->progressDisp = new brls::ProgressDisplay(); - this->progressDisp->setProgress(this->progressValue, 1000); - this->progressDisp->setParent(this); - this->label = new brls::Label(brls::LabelStyle::DIALOG, "installer/stage2/text"_i18n, true); - this->label->setHorizontalAlign(NVG_ALIGN_CENTER); - this->label->setParent(this); -} - -void SampleLoadingPage::draw(NVGcontext* vg, int x, int y, unsigned width, unsigned height, brls::Style* style, brls::FrameContext* ctx) -{ - if (progressValue == 500) - this->frame->nextStage(); - - this->progressValue++; - this->progressDisp->setProgress(this->progressValue, 500); - this->progressDisp->frame(ctx); - this->label->frame(ctx); -} - -void SampleLoadingPage::layout(NVGcontext* vg, brls::Style* style, brls::FontStash* stash) -{ - this->label->setWidth(roundf((float)this->width * style->CrashFrame.labelWidth)); - this->label->invalidate(true); - - this->label->setBoundaries( - this->x + this->width / 2 - this->label->getWidth() / 2, - this->y + (this->height - style->AppletFrame.footerHeight) / 2, - this->label->getWidth(), - this->label->getHeight()); - - this->progressDisp->setBoundaries( - this->x + this->width / 2 - style->CrashFrame.buttonWidth, - this->y + this->height / 2, - style->CrashFrame.buttonWidth * 2, - style->CrashFrame.buttonHeight); -} - -void SampleLoadingPage::willAppear(bool resetState) -{ - this->progressDisp->willAppear(resetState); -} - -void SampleLoadingPage::willDisappear(bool resetState) -{ - this->progressDisp->willDisappear(resetState); -} - -SampleLoadingPage::~SampleLoadingPage() -{ - delete this->progressDisp; - delete this->label; -} diff --git a/source/tasks.cpp b/source/tasks.cpp index e6d1a8f..e0c193a 100644 --- a/source/tasks.cpp +++ b/source/tasks.cpp @@ -52,11 +52,6 @@ namespace nxdt::tasks } } - GameCardStatusEvent* GameCardTask::GetTaskEvent(void) - { - return &(this->gc_status_event); - } - /* Title task. */ TitleTask::TitleTask(void) : brls::RepeatingTask(NXDT_TASK_INTERVAL) @@ -118,11 +113,6 @@ namespace nxdt::tasks } } - VoidEvent* TitleTask::GetTaskEvent(void) - { - return &(this->title_event); - } - TitleApplicationMetadataVector* TitleTask::GetApplicationMetadata(bool is_system) { return (is_system ? &(this->system_metadata) : &(this->user_metadata)); @@ -180,11 +170,6 @@ namespace nxdt::tasks } } - VoidEvent* UmsTask::GetTaskEvent(void) - { - return &(this->ums_event); - } - UmsDeviceVector* UmsTask::GetUmsDevices(void) { return &(this->ums_devices); @@ -215,9 +200,4 @@ namespace nxdt::tasks brls::Logger::debug("USB host status change triggered: {}.", this->cur_usb_host_status); } } - - BooleanEvent* UsbHostTask::GetTaskEvent(void) - { - return &(this->usb_host_event); - } }