mirror of
https://github.com/DarkMatterCore/nxdumptool.git
synced 2024-11-22 18:26:39 +00:00
views: create RootView class.
This commit is contained in:
parent
04540643be
commit
4ffbb1f903
16 changed files with 170 additions and 708 deletions
|
@ -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
37
include/root_view.hpp
Normal 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);
|
||||
};
|
||||
}
|
|
@ -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;
|
||||
};
|
|
@ -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;
|
||||
};
|
|
@ -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__ */
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"first_button": "First button",
|
||||
"second_button": "Second button",
|
||||
"third_button": "Third button"
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
"open": "Open popup",
|
||||
|
||||
"red": "Red",
|
||||
"green": "Green",
|
||||
"blue": "Blue",
|
||||
|
||||
"title": "Popup title",
|
||||
"subtitle": {
|
||||
"left": "Subtitle left",
|
||||
"right": "Subtitle right"
|
||||
}
|
||||
}
|
9
romfs/i18n/en-US/root_view.json
Normal file
9
romfs/i18n/en-US/root_view.json
Normal file
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"tabs": {
|
||||
"gamecard": "Gamecard",
|
||||
"user_titles": "User titles",
|
||||
"system_titles": "System titles",
|
||||
"options": "Options",
|
||||
"about": "About"
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
222
source/main.cpp
222
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 <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
54
source/root_view.cpp
Normal 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)));
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue