1
0
Fork 0
mirror of https://github.com/DarkMatterCore/nxdumptool.git synced 2024-12-23 00:52:10 +00:00

views: create RootView class.

This commit is contained in:
Pablo Curiel 2021-06-11 00:41:58 -04:00
parent 04540643be
commit 4ffbb1f903
16 changed files with 170 additions and 708 deletions

View file

@ -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 <https://www.gnu.org/licenses/>.
*/
#include <borealis.hpp>
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;
};

37
include/root_view.hpp Normal file
View file

@ -0,0 +1,37 @@
/*
* root_view.hpp
*
* Copyright (c) 2020-2021, DarkMatterCore <pabloacurielz@gmail.com>.
*
* 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 <https://www.gnu.org/licenses/>.
*/
#include <tasks.hpp>
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);
};
}

View file

@ -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 <https://www.gnu.org/licenses/>.
*/
#pragma once
#include <borealis.hpp>
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;
};

View file

@ -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 <https://www.gnu.org/licenses/>.
*/
#pragma once
#include <borealis.hpp>
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;
};

View file

@ -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__ */

View file

@ -1,5 +0,0 @@
{
"first_button": "First button",
"second_button": "Second button",
"third_button": "Third button"
}

View file

@ -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"
}
}

View file

@ -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"
}
}
}

View file

@ -1,13 +0,0 @@
{
"open": "Open popup",
"red": "Red",
"green": "Green",
"blue": "Blue",
"title": "Popup title",
"subtitle": {
"left": "Subtitle left",
"right": "Subtitle right"
}
}

View file

@ -0,0 +1,9 @@
{
"tabs": {
"gamecard": "Gamecard",
"user_titles": "User titles",
"system_titles": "System titles",
"options": "Options",
"about": "About"
}
}

View file

@ -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 <https://www.gnu.org/licenses/>.
*/
#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);
}

View file

@ -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 <https://www.gnu.org/licenses/>.
*/
* main.cpp
*
* Copyright (c) 2020-2021, DarkMatterCore <pabloacurielz@gmail.com>.
*
* 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 <https://www.gnu.org/licenses/>.
*/
#include <nxdt_utils.h>
#include <tasks.hpp>
#include <scope_guard.hpp>
#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<std::string> 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 <root_view.hpp>
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;
}

54
source/root_view.cpp Normal file
View file

@ -0,0 +1,54 @@
/*
* root_view.cpp
*
* Copyright (c) 2020-2021, DarkMatterCore <pabloacurielz@gmail.com>.
*
* 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 <https://www.gnu.org/licenses/>.
*/
#include <nxdt_includes.h>
#include <root_view.hpp>
//#include <gamecard_tab.hpp>
//#include <user_titles_tab.hpp>
//#include <system_titles_tab.hpp>
//#include <options_tab.hpp>
//#include <about_tab.hpp>
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)));
}
}

View file

@ -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 <https://www.gnu.org/licenses/>.
*/
#include "sample_installer_page.hpp"
#include <math.h>
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;
}

View file

@ -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 <https://www.gnu.org/licenses/>.
*/
#include "sample_loading_page.hpp"
#include <math.h>
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;
}

View file

@ -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);
}
}