mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-18 17:29:17 +01:00
177 lines
6.0 KiB
C++
177 lines
6.0 KiB
C++
|
/****************************************************************************
|
||
|
* Copyright (C) 2011
|
||
|
* by Dimok
|
||
|
*
|
||
|
* This software is provided 'as-is', without any express or implied
|
||
|
* warranty. In no event will the authors be held liable for any
|
||
|
* damages arising from the use of this software.
|
||
|
*
|
||
|
* Permission is granted to anyone to use this software for any
|
||
|
* purpose, including commercial applications, and to alter it and
|
||
|
* redistribute it freely, subject to the following restrictions:
|
||
|
*
|
||
|
* 1. The origin of this software must not be misrepresented; you
|
||
|
* must not claim that you wrote the original software. If you use
|
||
|
* this software in a product, an acknowledgment in the product
|
||
|
* documentation would be appreciated but is not required.
|
||
|
*
|
||
|
* 2. Altered source versions must be plainly marked as such, and
|
||
|
* must not be misrepresented as being the original software.
|
||
|
*
|
||
|
* 3. This notice may not be removed or altered from any source
|
||
|
* distribution.
|
||
|
***************************************************************************/
|
||
|
#include <unistd.h>
|
||
|
#include "HomebrewPrompt.hpp"
|
||
|
#include "themes/gettheme.h"
|
||
|
#include "themes/Resources.h"
|
||
|
#include "language/gettext.h"
|
||
|
#include "utils/StringTools.h"
|
||
|
#include "menu/menus.h"
|
||
|
|
||
|
HomebrewPrompt::HomebrewPrompt(const char *name, const char *coder, const char *version,
|
||
|
const char *release_date, const char *long_description,
|
||
|
GuiImageData * iconImgData, u64 filesize)
|
||
|
: PromptWindow(NULL, NULL)
|
||
|
{
|
||
|
SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||
|
SetPosition(0, 6);
|
||
|
|
||
|
whiteBox = Resources::GetImageData("bg_options.png");
|
||
|
|
||
|
iconImg = new GuiImage(iconImgData);
|
||
|
iconImg->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||
|
iconImg->SetPosition(45, 10);
|
||
|
|
||
|
dialogBoxImg->SetSkew(0, -80, 0, -80, 0, 50, 0, 50);
|
||
|
dialogBoxImg->SetWidescreen(false);
|
||
|
|
||
|
whiteBoxImg = new GuiImage(whiteBox);
|
||
|
whiteBoxImg->SetPosition(0, 110);
|
||
|
whiteBoxImg->SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||
|
whiteBoxImg->SetSkew(0, 0, 0, 0, 0, -120, 0, -120);
|
||
|
|
||
|
nameTxt = new GuiText(name, 30, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
|
||
|
nameTxt->SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||
|
nameTxt->SetPosition(0, -15);
|
||
|
nameTxt->SetMaxWidth(430, SCROLL_HORIZONTAL);
|
||
|
|
||
|
coderTxt = new GuiText(fmt(tr( "Coded by: %s" ), coder), 16, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
|
||
|
coderTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||
|
coderTxt->SetPosition(180, 30);
|
||
|
coderTxt->SetMaxWidth(280);
|
||
|
|
||
|
versionTxt = new GuiText(fmt(tr( "Version: %s" ), version), 16, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
|
||
|
versionTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||
|
versionTxt->SetPosition(40, 65);
|
||
|
versionTxt->SetMaxWidth(430);
|
||
|
|
||
|
release_dateTxt = new GuiText(release_date, 16, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
|
||
|
release_dateTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||
|
release_dateTxt->SetPosition(40, 85);
|
||
|
release_dateTxt->SetMaxWidth(430);
|
||
|
|
||
|
const int pagesize = 6;
|
||
|
long_descriptionTxt = new Text(long_description, 20, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
|
||
|
long_descriptionTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||
|
long_descriptionTxt->SetPosition(46, 117);
|
||
|
long_descriptionTxt->SetMaxWidth(358);
|
||
|
long_descriptionTxt->SetLinesToDraw(pagesize);
|
||
|
long_descriptionTxt->Refresh();
|
||
|
|
||
|
//convert filesize from u64 to char and put unit of measurement after it
|
||
|
char filesizeCH[15];
|
||
|
if (filesize <= 1024.0)
|
||
|
snprintf(filesizeCH, sizeof(filesizeCH), "%lld B", filesize);
|
||
|
if (filesize > 1024.0)
|
||
|
snprintf(filesizeCH, sizeof(filesizeCH), "%0.2f KB", filesize / 1024.0);
|
||
|
if (filesize > 1048576.0)
|
||
|
snprintf(filesizeCH, sizeof(filesizeCH), "%0.2f MB", filesize / 1048576.0);
|
||
|
|
||
|
filesizeTxt = new GuiText(filesizeCH, 16, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
|
||
|
filesizeTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
||
|
filesizeTxt->SetPosition(-40, 12);
|
||
|
|
||
|
scrollBar = new GuiScrollbar(150);
|
||
|
scrollBar->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||
|
scrollBar->SetPosition(393, 115);
|
||
|
scrollBar->SetPageSize(pagesize);
|
||
|
scrollBar->SetEntrieCount(long_descriptionTxt->GetTotalLinesCount());
|
||
|
scrollBar->listChanged.connect(this, &HomebrewPrompt::onListChange);
|
||
|
|
||
|
Append(whiteBoxImg);
|
||
|
if(strcmp(long_description, "") != 0 && long_descriptionTxt->GetTotalLinesCount() > pagesize)
|
||
|
Append(scrollBar);
|
||
|
|
||
|
if(strcmp(name, "") != 0) Append(nameTxt);
|
||
|
if(strcmp(version, "") != 0) Append(versionTxt);
|
||
|
if(strcmp(coder, "") != 0) Append(coderTxt);
|
||
|
if(strcmp(release_date, "") != 0) Append(release_dateTxt);
|
||
|
if(strcmp(long_description, "") != 0) Append(long_descriptionTxt);
|
||
|
Append(filesizeTxt);
|
||
|
Append(iconImg);
|
||
|
|
||
|
AddButton(tr( "Load" ));
|
||
|
AddButton(tr( "Back" ));
|
||
|
|
||
|
Button[0]->SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
|
||
|
Button[0]->SetPosition(40, 2);
|
||
|
Button[1]->SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
|
||
|
Button[1]->SetPosition(-40, 2);
|
||
|
}
|
||
|
|
||
|
HomebrewPrompt::~HomebrewPrompt()
|
||
|
{
|
||
|
ResumeGui();
|
||
|
|
||
|
SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
|
||
|
while(parentElement && this->GetEffect() > 0) usleep(100);
|
||
|
|
||
|
if(parentElement)
|
||
|
((GuiWindow *) parentElement)->Remove(this);
|
||
|
parentElement = NULL;
|
||
|
|
||
|
RemoveAll();
|
||
|
|
||
|
delete whiteBox;
|
||
|
delete iconImg;
|
||
|
delete whiteBoxImg;
|
||
|
delete nameTxt;
|
||
|
delete coderTxt;
|
||
|
delete versionTxt;
|
||
|
delete release_dateTxt;
|
||
|
delete long_descriptionTxt;
|
||
|
delete filesizeTxt;
|
||
|
delete scrollBar;
|
||
|
}
|
||
|
|
||
|
void HomebrewPrompt::onListChange(int SelItem, int SelInd)
|
||
|
{
|
||
|
long_descriptionTxt->SetTextLine(SelItem+SelInd);
|
||
|
}
|
||
|
|
||
|
int HomebrewPrompt::MainLoop()
|
||
|
{
|
||
|
int choice = -1;
|
||
|
|
||
|
while (choice == -1)
|
||
|
{
|
||
|
usleep(100);
|
||
|
|
||
|
if (shutdown)
|
||
|
{
|
||
|
wiilight(0);
|
||
|
Sys_Shutdown();
|
||
|
}
|
||
|
else if (reset)
|
||
|
{
|
||
|
wiilight(0);
|
||
|
Sys_Reboot();
|
||
|
}
|
||
|
|
||
|
choice = GetChoice();
|
||
|
}
|
||
|
|
||
|
return choice;
|
||
|
}
|