mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-18 09:19:17 +01:00
a66a30a771
*added support to control screen pointer with gc pad or classic controller. you are always able to control as long as the corresponding wii control does not point to the screen (e.g. wiimote 1 not pointing to screen -> gcpad/classic controller 1 can control pointer 1). a speed factor is added to the gui option. need feedback about a proper default value, currently 15% (only tested gc pad on dolphin-emu) *fix reinit of cheatcount on download of new file *moved installation window to be on top of main window *added game installation cancel *added nand extract cancel *added back extract of save feature for a real nand channels *added auto position of progress window messages in vertical direction depending of how many are used at the same time
181 lines
4.5 KiB
C++
181 lines
4.5 KiB
C++
/****************************************************************************
|
|
* USB Loader GX
|
|
*
|
|
* r-win 2009
|
|
*
|
|
* gui_numpad.cpp
|
|
*
|
|
* GUI class definitions
|
|
***************************************************************************/
|
|
|
|
#include "gui.h"
|
|
#include "../main.h"
|
|
#include "../settings/CSettings.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
/**
|
|
* Constructor for the GuiNumpad class.
|
|
*/
|
|
|
|
GuiNumpad::GuiNumpad(char * t, u32 max)
|
|
{
|
|
width = 400;
|
|
height = 370;
|
|
selectable = true;
|
|
alignmentHor = ALIGN_CENTRE;
|
|
alignmentVert = ALIGN_MIDDLE;
|
|
kbtextmaxlen = max > sizeof(kbtextstr) ? sizeof(kbtextstr) : max; // limit max up to sizeof(kbtextstr)
|
|
// strlcpy(kbtextstr, t, kbtextmaxlen);
|
|
strncpy(kbtextstr, t, kbtextmaxlen); // strncpy is needed to fill the rest with \0
|
|
kbtextstr[sizeof(kbtextstr) - 1] = 0; // terminate with \0
|
|
|
|
char thekeys[11] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '\0', '0' };
|
|
memcpy(keys, thekeys, sizeof(thekeys));
|
|
|
|
keyTextbox = new GuiImageData("keyboard_textbox.png");
|
|
keyTextboxImg = new GuiImage(keyTextbox);
|
|
keyTextboxImg->SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
keyTextboxImg->SetPosition(0, 40);//(0,0);
|
|
this->Append(keyTextboxImg);
|
|
|
|
kbText = new GuiText(kbtextstr, 20, ( GXColor )
|
|
{ 0, 0, 0, 0xff});
|
|
kbText->SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
kbText->SetPosition(0, 53);//(0, 13);
|
|
kbText->SetPassChar('*');
|
|
this->Append(kbText);
|
|
|
|
keyMedium = new GuiImageData("keyboard_mediumkey_over.png");
|
|
|
|
trigA = new GuiTrigger;
|
|
trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
|
trigB = new GuiTrigger;
|
|
trigB->SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
|
|
|
|
keyBackImg = new GuiImage(keyMedium);
|
|
keyBackOverImg = new GuiImage(keyMedium);
|
|
keyBackText = new GuiText("Back", 20, ( GXColor )
|
|
{ 0, 0, 0, 0xff});
|
|
|
|
keyBack = new GuiButton(keyBackImg, keyBackOverImg, ALIGN_CENTRE, ALIGN_MIDDLE, 90, 80, trigA, btnSoundOver, btnSoundClick, 1);
|
|
keyBack->SetLabel(keyBackText);
|
|
keyBack->SetTrigger(trigB);
|
|
this->Append(keyBack);
|
|
|
|
keyClearImg = new GuiImage(keyMedium);
|
|
keyClearOverImg = new GuiImage(keyMedium);
|
|
keyClearText = new GuiText("Clear", 20, ( GXColor )
|
|
{ 0, 0, 0, 0xff});
|
|
keyClear = new GuiButton(keyClearImg, keyClearOverImg, ALIGN_CENTRE, ALIGN_MIDDLE, -90, 80, trigA, btnSoundOver, btnSoundClick, 1);
|
|
keyClear->SetLabel(keyClearText);
|
|
this->Append(keyClear);
|
|
|
|
char txt[2] = { 0, 0 };
|
|
for (int i = 0; i < 11; i++)
|
|
{
|
|
if (keys[i] != '\0')
|
|
{
|
|
int col = i % 3;
|
|
int row = i / 3;
|
|
|
|
keyImg[i] = new GuiImage(keyMedium);
|
|
keyImgOver[i] = new GuiImage(keyMedium);
|
|
txt[0] = keys[i];
|
|
keyTxt[i] = new GuiText(txt, 20, ( GXColor )
|
|
{ 0, 0, 0, 0xff});
|
|
keyTxt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
|
|
keyTxt[i]->SetPosition(0, -10);
|
|
keyBtn[i] = new GuiButton(keyImg[i], keyImgOver[i], ALIGN_CENTRE, ALIGN_MIDDLE, -90 + 90 * col, -70 + 50
|
|
* row, trigA, btnSoundOver, btnSoundClick, 1);
|
|
keyBtn[i]->SetLabel(keyTxt[i]);
|
|
|
|
this->Append(keyBtn[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Destructor for the GuiKeyboard class.
|
|
*/
|
|
GuiNumpad::~GuiNumpad()
|
|
{
|
|
delete kbText;
|
|
delete keyTextbox;
|
|
delete keyTextboxImg;
|
|
delete keyBackText;
|
|
delete keyBackImg;
|
|
delete keyBackOverImg;
|
|
delete keyBack;
|
|
delete keyClear;
|
|
delete keyClearImg;
|
|
delete keyClearOverImg;
|
|
delete keyClearText;
|
|
delete keyMedium;
|
|
delete trigA;
|
|
delete trigB;
|
|
|
|
for (int i = 0; i < 11; i++)
|
|
{
|
|
if (keys[i] != '\0')
|
|
{
|
|
delete keyImg[i];
|
|
delete keyImgOver[i];
|
|
delete keyTxt[i];
|
|
delete keyBtn[i];
|
|
}
|
|
}
|
|
}
|
|
|
|
void GuiNumpad::Update(GuiTrigger * t)
|
|
{
|
|
LOCK( this );
|
|
if (_elements.size() == 0 || (state == STATE_DISABLED && parentElement)) return;
|
|
|
|
for (u8 i = 0; i < _elements.size(); i++)
|
|
{
|
|
try
|
|
{
|
|
_elements.at(i)->Update(t);
|
|
}
|
|
catch (const std::exception& e)
|
|
{
|
|
}
|
|
}
|
|
|
|
if (keyBack->GetState() == STATE_CLICKED)
|
|
{
|
|
if (strlen(kbtextstr) > 0)
|
|
{
|
|
kbtextstr[strlen(kbtextstr) - 1] = 0;
|
|
kbText->SetText(kbtextstr);
|
|
}
|
|
keyBack->SetState(STATE_SELECTED, t->chan);
|
|
}
|
|
else if (keyClear->GetState() == STATE_CLICKED)
|
|
{
|
|
memset(kbtextstr, 0, sizeof(kbtextstr));
|
|
kbText->SetText(kbtextstr);
|
|
keyClear->SetState(STATE_SELECTED, t->chan);
|
|
}
|
|
|
|
char txt[2] = { 0, 0 };
|
|
for (int i = 0; i < 11; i++)
|
|
{
|
|
if (keys[i] != '\0')
|
|
{
|
|
if (keyBtn[i]->GetState() == STATE_CLICKED)
|
|
{
|
|
txt[0] = keys[i];
|
|
if (strlen(kbtextstr) < kbtextmaxlen - 1) // -1 --> kbtextmaxlen means with term. '\0'
|
|
{
|
|
kbtextstr[strlen(kbtextstr)] = txt[0];
|
|
kbText->SetText(kbtextstr);
|
|
}
|
|
keyBtn[i]->SetState(STATE_SELECTED, t->chan);
|
|
}
|
|
}
|
|
}
|
|
|
|
kbText->SetPosition(0, 53);
|
|
}
|