2019-10-22 22:14:37 +00:00
# include <filesystem>
# include "ui/MainApplication.hpp"
# include "ui/mainPage.hpp"
# include "ui/nspInstPage.hpp"
# include "nspInstall.hpp"
2019-10-25 01:33:41 +00:00
# include "util/util.hpp"
2019-11-14 01:23:30 +00:00
# include "util/config.hpp"
2019-10-22 22:14:37 +00:00
# define COLOR(hex) pu::ui::Color::FromHex(hex)
namespace inst : : ui {
extern MainApplication * mainApp ;
2019-11-02 00:12:00 +00:00
std : : vector < std : : filesystem : : path > nspInstPage : : ourFiles ;
std : : vector < std : : filesystem : : path > nspInstPage : : selectedNsps ;
2019-10-22 22:14:37 +00:00
nspInstPage : : nspInstPage ( ) : Layout : : Layout ( ) {
this - > SetBackgroundColor ( COLOR ( " #670000FF " ) ) ;
2019-10-27 03:36:45 +00:00
this - > SetBackgroundImage ( " romfs:/background.jpg " ) ;
this - > topRect = Rectangle : : New ( 0 , 0 , 1280 , 93 , COLOR ( " #170909FF " ) ) ;
this - > infoRect = Rectangle : : New ( 0 , 93 , 1280 , 60 , COLOR ( " #17090980 " ) ) ;
this - > botRect = Rectangle : : New ( 0 , 660 , 1280 , 60 , COLOR ( " #17090980 " ) ) ;
this - > titleImage = Image : : New ( 0 , 0 , " romfs:/logo.png " ) ;
2019-11-14 01:23:30 +00:00
this - > appVersionText = TextBlock : : New ( 480 , 49 , " v " + inst : : config : : appVersion , 22 ) ;
this - > appVersionText - > SetColor ( COLOR ( " #FFFFFFFF " ) ) ;
2019-11-02 00:12:00 +00:00
this - > pageInfoText = TextBlock : : New ( 10 , 109 , " Select NSP files to install, then press the Plus button! " , 30 ) ;
2019-10-22 22:14:37 +00:00
this - > pageInfoText - > SetColor ( COLOR ( " #FFFFFFFF " ) ) ;
2019-11-08 16:41:04 +00:00
this - > butText = TextBlock : : New ( 10 , 678 , " \ue0e0 Select NSP \ue0e3 Select All \ue0ef Install NSP(s) \ue0e2 Help \ue0e1 Cancel " , 24 ) ;
2019-10-27 03:36:45 +00:00
this - > butText - > SetColor ( COLOR ( " #FFFFFFFF " ) ) ;
2019-11-03 18:36:07 +00:00
this - > menu = pu : : ui : : elm : : Menu : : New ( 0 , 154 , 1280 , COLOR ( " #FFFFFF00 " ) , 84 , ( 506 / 84 ) ) ;
2019-10-22 22:14:37 +00:00
this - > menu - > SetOnFocusColor ( COLOR ( " #00000033 " ) ) ;
2019-10-27 03:36:45 +00:00
this - > menu - > SetScrollbarColor ( COLOR ( " #17090980 " ) ) ;
this - > Add ( this - > topRect ) ;
this - > Add ( this - > infoRect ) ;
this - > Add ( this - > botRect ) ;
this - > Add ( this - > titleImage ) ;
2019-11-14 01:23:30 +00:00
this - > Add ( this - > appVersionText ) ;
2019-10-27 03:36:45 +00:00
this - > Add ( this - > butText ) ;
2019-10-22 22:14:37 +00:00
this - > Add ( this - > pageInfoText ) ;
this - > Add ( this - > menu ) ;
}
2019-11-02 00:12:00 +00:00
void nspInstPage : : drawMenuItems ( bool clearItems ) {
if ( clearItems ) nspInstPage : : selectedNsps = { } ;
this - > menu - > ClearItems ( ) ;
2019-11-16 04:13:30 +00:00
nspInstPage : : ourFiles = util : : getDirectoryFiles ( " sdmc:/tinfoil/nsp/ " , { " .nsp " , " .nsz " } ) ;
2019-11-02 00:12:00 +00:00
for ( auto & file : nspInstPage : : ourFiles ) {
2019-11-08 17:24:31 +00:00
pu : : String itm = inst : : util : : shortenString ( file . string ( ) . erase ( 0 , 6 ) , 56 , true ) ;
2019-11-02 00:12:00 +00:00
auto ourEntry = pu : : ui : : elm : : MenuItem : : New ( itm ) ;
ourEntry - > SetColor ( COLOR ( " #FFFFFFFF " ) ) ;
ourEntry - > SetIcon ( " romfs:/checkbox-blank-outline.png " ) ;
for ( long unsigned int i = 0 ; i < nspInstPage : : selectedNsps . size ( ) ; i + + ) {
if ( nspInstPage : : selectedNsps [ i ] = = file ) {
ourEntry - > SetIcon ( " romfs:/check-box-outline.png " ) ;
}
}
this - > menu - > AddItem ( ourEntry ) ;
}
}
2019-11-08 16:41:04 +00:00
void nspInstPage : : selectNsp ( int selectedIndex ) {
if ( this - > menu - > GetItems ( ) [ selectedIndex ] - > GetIcon ( ) = = " romfs:/check-box-outline.png " ) {
2019-11-02 00:12:00 +00:00
for ( long unsigned int i = 0 ; i < nspInstPage : : selectedNsps . size ( ) ; i + + ) {
2019-11-08 16:41:04 +00:00
if ( nspInstPage : : selectedNsps [ i ] = = nspInstPage : : ourFiles [ selectedIndex ] . string ( ) ) nspInstPage : : selectedNsps . erase ( nspInstPage : : selectedNsps . begin ( ) + i ) ;
2019-11-02 00:12:00 +00:00
}
2019-11-08 16:41:04 +00:00
} else nspInstPage : : selectedNsps . push_back ( nspInstPage : : ourFiles [ selectedIndex ] ) ;
2019-11-02 00:12:00 +00:00
nspInstPage : : drawMenuItems ( false ) ;
}
2019-10-22 22:14:37 +00:00
void nspInstPage : : startInstall ( ) {
2019-11-02 00:12:00 +00:00
int dialogResult = - 1 ;
if ( nspInstPage : : selectedNsps . size ( ) = = 1 ) {
std : : string ourNsp = nspInstPage : : selectedNsps [ 0 ] . string ( ) . erase ( 0 , 6 ) ;
2019-11-08 17:24:31 +00:00
dialogResult = mainApp - > CreateShowDialog ( " Where should " + inst : : util : : shortenString ( ourNsp , 32 , true ) + " be installed to? " , " Press B to cancel " , { " SD Card " , " Internal Storage " } , false ) ;
2019-11-08 16:41:04 +00:00
} else dialogResult = mainApp - > CreateShowDialog ( " Where should the selected " + std : : to_string ( nspInstPage : : selectedNsps . size ( ) ) + " files be installed to? " , " Press B to cancel " , { " SD Card " , " Internal Storage " } , false ) ;
2019-10-23 01:33:13 +00:00
if ( dialogResult = = - 1 ) return ;
2019-11-02 00:12:00 +00:00
nspInstStuff : : installNspFromFile ( nspInstPage : : selectedNsps , dialogResult ) ;
2019-10-22 22:14:37 +00:00
}
void nspInstPage : : onInput ( u64 Down , u64 Up , u64 Held , pu : : ui : : Touch Pos ) {
if ( Down & KEY_B ) {
mainApp - > LoadLayout ( mainApp - > mainPage ) ;
}
2019-10-31 15:42:40 +00:00
if ( ( Down & KEY_A ) | | ( Up & KEY_TOUCH ) ) {
2019-11-08 16:41:04 +00:00
nspInstPage : : selectNsp ( this - > menu - > GetSelectedIndex ( ) ) ;
2019-11-10 17:47:45 +00:00
if ( this - > menu - > GetItems ( ) . size ( ) = = 1 & & nspInstPage : : selectedNsps . size ( ) = = 1 ) {
2019-11-06 22:37:10 +00:00
nspInstPage : : startInstall ( ) ;
2019-11-08 16:41:04 +00:00
}
}
if ( ( Down & KEY_Y ) ) {
if ( nspInstPage : : selectedNsps . size ( ) = = this - > menu - > GetItems ( ) . size ( ) ) nspInstPage : : drawMenuItems ( true ) ;
else {
for ( long unsigned int i = 0 ; i < this - > menu - > GetItems ( ) . size ( ) ; i + + ) {
if ( this - > menu - > GetItems ( ) [ i ] - > GetIcon ( ) = = " romfs:/check-box-outline.png " ) continue ;
else nspInstPage : : selectNsp ( i ) ;
}
nspInstPage : : drawMenuItems ( false ) ;
2019-11-06 22:37:10 +00:00
}
2019-11-02 00:12:00 +00:00
}
2019-11-02 01:13:15 +00:00
if ( ( Down & KEY_X ) ) {
2019-11-03 18:18:42 +00:00
inst : : ui : : mainApp - > CreateShowDialog ( " Help " , " Copy your NSP or NSZ files to the root (top) of your SD card, select the ones \n you want to install, then press the Plus button. " , { " OK " } , true ) ;
2019-11-02 01:13:15 +00:00
}
2019-11-02 00:12:00 +00:00
if ( Down & KEY_PLUS ) {
2019-11-06 22:37:10 +00:00
if ( nspInstPage : : selectedNsps . size ( ) = = 0 ) {
2019-11-08 16:41:04 +00:00
nspInstPage : : selectNsp ( this - > menu - > GetSelectedIndex ( ) ) ;
2019-11-06 22:37:10 +00:00
nspInstPage : : startInstall ( ) ;
return ;
}
2019-10-22 22:14:37 +00:00
nspInstPage : : startInstall ( ) ;
}
}
}