not64/menu/SettingsFrame.cpp
Extrems d7ca5e913f Added GC Loader 2.0.0 write support.
Added M.2 Loader support.
Added directory structure creation.
Added USB storage device name compatibility.
Fixed Wii Remote extension controller hotplug.
Fixed LoadButtonSlot argument.
Fixed RSP DMA memory alignment.
Fixed viewport flipping.
Other minor fixes.
2021-08-16 22:52:09 -04:00

1102 lines
40 KiB
C++

/**
* Wii64 - SettingsFrame.cpp
* Copyright (C) 2009, 2010 sepp256
*
* Wii64 homepage: http://www.emulatemii.com
* email address: sepp256@gmail.com
*
*
* This program is free software; you can redistribute it and/
* or modify it under the terms of the GNU General Public Li-
* cence as published by the Free Software Foundation; either
* version 2 of the Licence, or any later version.
*
* This program is distributed in the hope that it will be use-
* ful, but WITHOUT ANY WARRANTY; without even the implied war-
* ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public Licence for more details.
*
**/
#include "MenuContext.h"
#include "SettingsFrame.h"
#include "ConfigurePaksFrame.h"
#include "ConfigureButtonsFrame.h"
#include "../libgui/Button.h"
#include "../libgui/TextBox.h"
#include "../libgui/resources.h"
#include "../libgui/FocusManager.h"
#include "../libgui/CursorManager.h"
#include "../libgui/MessageBox.h"
//#include "../main/timers.h"
#include "../main/wii64config.h"
extern "C" {
#include "../gc_input/controller.h"
#include "../fileBrowser/fileBrowser.h"
#include "../fileBrowser/fileBrowser-libfat.h"
#include "../fileBrowser/fileBrowser-CARD.h"
}
void Func_TabGeneral();
void Func_TabVideo();
void Func_TabInput();
void Func_TabAudio();
void Func_TabSaves();
void Func_NativeSaveSD();
void Func_NativeSaveFAT();
void Func_NativeSaveCardA();
void Func_NativeSaveCardB();
void Func_SaveStateSD();
void Func_SaveStateFAT();
void Func_CpuPureInterp();
void Func_CpuDynarec();
void Func_ClockDivider1();
void Func_ClockDivider2();
void Func_ClockDivider3();
void Func_SaveSettingsSD();
void Func_SaveSettingsFAT();
void Func_ShowFpsOn();
void Func_ShowFpsOff();
void Func_ScreenMode4_3();
void Func_ScreenMode16_9();
void Func_ScreenForce16_9();
void Func_CpuFramebufferOn();
void Func_CpuFramebufferOff();
void Func_2xSaiTexturesOn();
void Func_2xSaiTexturesOff();
void Func_FbTexturesOn();
void Func_FbTexturesOff();
void Func_ConfigureInput();
void Func_ConfigurePaks();
void Func_ConfigureButtons();
void Func_SaveButtonsSD();
void Func_SaveButtonsFAT();
void Func_ToggleButtonLoad();
void Func_DisableAudioYes();
void Func_DisableAudioNo();
void Func_SpeedLimitOff();
void Func_SpeedLimitVi();
void Func_SpeedLimitDl();
void Func_ScalePitchYes();
void Func_ScalePitchNo();
void Func_AutoSaveNativeYes();
void Func_AutoSaveNativeNo();
void Func_CopySaves();
void Func_DeleteSaves();
void Func_ReturnFromSettingsFrame();
#define NUM_FRAME_BUTTONS 46
#define NUM_TAB_BUTTONS 5
#define FRAME_BUTTONS settingsFrameButtons
#define FRAME_STRINGS settingsFrameStrings
#define NUM_FRAME_TEXTBOXES 16
#define FRAME_TEXTBOXES settingsFrameTextBoxes
static char FRAME_STRINGS[45][23] =
{ "General",
"Video",
"Input",
"Audio",
"Saves",
//Strings for General tab [5]
"Native Saves Device",
"Save States Device",
"CPU Emulator",
"CPU Clock Divider",
"Save Settings",
"SD",
"FAT",
"CardA",
"CardB",
"Interpreter",
"Recompiler",
"1",
"2",
"3",
//Strings for Video tab [19]
"Show FPS",
"Screen Mode",
"CPU Framebuffer",
"2xSaI Textures",
"FB Textures",
"On",
"Off",
"4:3",
"16:9",
"Force 16:9",
//Strings for Input tab [29]
"Configure Input",
"Configure Paks",
"Configure Buttons",
"Save Configuration",
"Auto Load Slot",
"Default",
//Strings for Audio tab [35]
"Disable Audio",
"Speed Limit",
"Scale Pitch",
"Yes",
"No",
"VI",
"DL",
//Strings for Saves tab [42]
"Auto Save Native Saves",
"Copy Saves",
"Delete Saves"};
struct ButtonInfo
{
menu::Button *button;
int buttonStyle;
char* buttonString;
float x;
float y;
float width;
float height;
int focusUp;
int focusDown;
int focusLeft;
int focusRight;
ButtonFunc clickedFunc;
ButtonFunc returnFunc;
} FRAME_BUTTONS[NUM_FRAME_BUTTONS] =
{ // button buttonStyle buttonString x y width height Up Dwn Lft Rt clickFunc returnFunc
//Buttons for Tabs (starts at button[0])
{ NULL, BTN_A_SEL, FRAME_STRINGS[0], 25.0, 30.0, 110.0, 56.0, -1, -1, 4, 1, Func_TabGeneral, Func_ReturnFromSettingsFrame }, // General tab
{ NULL, BTN_A_SEL, FRAME_STRINGS[1], 155.0, 30.0, 100.0, 56.0, -1, -1, 0, 2, Func_TabVideo, Func_ReturnFromSettingsFrame }, // Video tab
{ NULL, BTN_A_SEL, FRAME_STRINGS[2], 275.0, 30.0, 100.0, 56.0, -1, -1, 1, 3, Func_TabInput, Func_ReturnFromSettingsFrame }, // Input tab
{ NULL, BTN_A_SEL, FRAME_STRINGS[3], 395.0, 30.0, 100.0, 56.0, -1, -1, 2, 4, Func_TabAudio, Func_ReturnFromSettingsFrame }, // Audio tab
{ NULL, BTN_A_SEL, FRAME_STRINGS[4], 515.0, 30.0, 100.0, 56.0, -1, -1, 3, 0, Func_TabSaves, Func_ReturnFromSettingsFrame }, // Saves tab
//Buttons for General Tab (starts at button[5])
{ NULL, BTN_A_SEL, FRAME_STRINGS[10], 295.0, 100.0, 55.0, 56.0, 0, 9, 8, 6, Func_NativeSaveSD, Func_ReturnFromSettingsFrame }, // Native Save: SD
{ NULL, BTN_A_SEL, FRAME_STRINGS[11], 360.0, 100.0, 70.0, 56.0, 0, 10, 5, 7, Func_NativeSaveFAT, Func_ReturnFromSettingsFrame }, // Native Save: FAT
{ NULL, BTN_A_SEL, FRAME_STRINGS[12], 440.0, 100.0, 90.0, 56.0, 0, 10, 6, 8, Func_NativeSaveCardA, Func_ReturnFromSettingsFrame }, // Native Save: Card A
{ NULL, BTN_A_SEL, FRAME_STRINGS[13], 540.0, 100.0, 90.0, 56.0, 0, 10, 7, 5, Func_NativeSaveCardB, Func_ReturnFromSettingsFrame }, // Native Save: Card B
{ NULL, BTN_A_SEL, FRAME_STRINGS[10], 295.0, 170.0, 55.0, 56.0, 5, 11, 10, 10, Func_SaveStateSD, Func_ReturnFromSettingsFrame }, // Save State: SD
{ NULL, BTN_A_SEL, FRAME_STRINGS[11], 360.0, 170.0, 70.0, 56.0, 6, 11, 9, 9, Func_SaveStateFAT, Func_ReturnFromSettingsFrame }, // Save State: FAT
{ NULL, BTN_A_SEL, FRAME_STRINGS[14], 295.0, 240.0, 160.0, 56.0, 9, 13, 12, 12, Func_CpuPureInterp, Func_ReturnFromSettingsFrame }, // CPU Emulator: Interpreter
{ NULL, BTN_A_SEL, FRAME_STRINGS[15], 465.0, 240.0, 160.0, 56.0, 10, 15, 11, 11, Func_CpuDynarec, Func_ReturnFromSettingsFrame }, // CPU Emulator: Recompiler
{ NULL, BTN_A_SEL, FRAME_STRINGS[16], 295.0, 310.0, 55.0, 56.0, 11, 16, 15, 14, Func_ClockDivider1, Func_ReturnFromSettingsFrame }, // CPU Clock Divider: 1
{ NULL, BTN_A_SEL, FRAME_STRINGS[17], 360.0, 310.0, 55.0, 56.0, 11, 17, 13, 15, Func_ClockDivider2, Func_ReturnFromSettingsFrame }, // CPU Clock Divider: 2
{ NULL, BTN_A_SEL, FRAME_STRINGS[18], 425.0, 310.0, 55.0, 56.0, 11, 17, 14, 13, Func_ClockDivider3, Func_ReturnFromSettingsFrame }, // CPU Clock Divider: 3
{ NULL, BTN_A_NRM, FRAME_STRINGS[10], 295.0, 380.0, 55.0, 56.0, 13, 0, 17, 17, Func_SaveSettingsSD, Func_ReturnFromSettingsFrame }, // Save Settings: SD
{ NULL, BTN_A_NRM, FRAME_STRINGS[11], 360.0, 380.0, 70.0, 56.0, 14, 0, 16, 16, Func_SaveSettingsFAT, Func_ReturnFromSettingsFrame }, // Save Settings: FAT
//Buttons for Video Tab (starts at button[18])
{ NULL, BTN_A_SEL, FRAME_STRINGS[24], 325.0, 100.0, 75.0, 56.0, 1, 21, 19, 19, Func_ShowFpsOn, Func_ReturnFromSettingsFrame }, // Show FPS: On
{ NULL, BTN_A_SEL, FRAME_STRINGS[25], 420.0, 100.0, 75.0, 56.0, 1, 22, 18, 18, Func_ShowFpsOff, Func_ReturnFromSettingsFrame }, // Show FPS: Off
{ NULL, BTN_A_SEL, FRAME_STRINGS[26], 230.0, 170.0, 75.0, 56.0, 18, 23, 22, 21, Func_ScreenMode4_3, Func_ReturnFromSettingsFrame }, // Screen Mode: 4:3
{ NULL, BTN_A_SEL, FRAME_STRINGS[27], 325.0, 170.0, 75.0, 56.0, 18, 23, 20, 22, Func_ScreenMode16_9, Func_ReturnFromSettingsFrame }, // Screen Mode: 16:9
{ NULL, BTN_A_SEL, FRAME_STRINGS[28], 420.0, 170.0, 155.0, 56.0, 19, 24, 21, 20, Func_ScreenForce16_9, Func_ReturnFromSettingsFrame }, // Screen Mode: Force 16:9
{ NULL, BTN_A_SEL, FRAME_STRINGS[24], 325.0, 240.0, 75.0, 56.0, 21, 25, 24, 24, Func_CpuFramebufferOn, Func_ReturnFromSettingsFrame }, // CPU Framebuffer: On
{ NULL, BTN_A_SEL, FRAME_STRINGS[25], 420.0, 240.0, 75.0, 56.0, 22, 26, 23, 23, Func_CpuFramebufferOff, Func_ReturnFromSettingsFrame }, // CPU Framebuffer: Off
{ NULL, BTN_A_SEL, FRAME_STRINGS[24], 325.0, 310.0, 75.0, 56.0, 23, 27, 26, 26, Func_2xSaiTexturesOn, Func_ReturnFromSettingsFrame }, // 2xSaI Textures: On
{ NULL, BTN_A_SEL, FRAME_STRINGS[25], 420.0, 310.0, 75.0, 56.0, 24, 28, 25, 25, Func_2xSaiTexturesOff, Func_ReturnFromSettingsFrame }, // 2xSaI Textures: Off
{ NULL, BTN_A_SEL, FRAME_STRINGS[24], 325.0, 380.0, 75.0, 56.0, 25, 1, 28, 28, Func_FbTexturesOn, Func_ReturnFromSettingsFrame }, // FB Textures: On
{ NULL, BTN_A_SEL, FRAME_STRINGS[25], 420.0, 380.0, 75.0, 56.0, 26, 1, 27, 27, Func_FbTexturesOff, Func_ReturnFromSettingsFrame }, // FB Textures: Off
//Buttons for Input Tab (starts at button[29])
{ NULL, BTN_A_NRM, FRAME_STRINGS[29], 180.0, 100.0, 280.0, 56.0, 2, 30, -1, -1, Func_ConfigureInput, Func_ReturnFromSettingsFrame }, // Configure Mappings
{ NULL, BTN_A_NRM, FRAME_STRINGS[30], 180.0, 170.0, 280.0, 56.0, 29, 31, -1, -1, Func_ConfigurePaks, Func_ReturnFromSettingsFrame }, // Configure Paks
{ NULL, BTN_A_NRM, FRAME_STRINGS[31], 180.0, 240.0, 280.0, 56.0, 30, 32, -1, -1, Func_ConfigureButtons, Func_ReturnFromSettingsFrame }, // Configure Buttons
{ NULL, BTN_A_NRM, FRAME_STRINGS[10], 295.0, 310.0, 55.0, 56.0, 31, 34, 33, 33, Func_SaveButtonsSD, Func_ReturnFromSettingsFrame }, // Save Configuration: SD
{ NULL, BTN_A_NRM, FRAME_STRINGS[11], 360.0, 310.0, 70.0, 56.0, 31, 34, 32, 32, Func_SaveButtonsFAT, Func_ReturnFromSettingsFrame }, // Save Configuration: FAT
{ NULL, BTN_A_NRM, FRAME_STRINGS[34], 295.0, 380.0, 135.0, 56.0, 32, 2, -1, -1, Func_ToggleButtonLoad, Func_ReturnFromSettingsFrame }, // Toggle Button Load Slot
//Buttons for Audio Tab (starts at button[35])
{ NULL, BTN_A_SEL, FRAME_STRINGS[38], 345.0, 100.0, 75.0, 56.0, 3, 38, 36, 36, Func_DisableAudioYes, Func_ReturnFromSettingsFrame }, // Disable Audio: Yes
{ NULL, BTN_A_SEL, FRAME_STRINGS[39], 440.0, 100.0, 75.0, 56.0, 3, 39, 35, 35, Func_DisableAudioNo, Func_ReturnFromSettingsFrame }, // Disable Audio: No
{ NULL, BTN_A_SEL, FRAME_STRINGS[25], 250.0, 170.0, 75.0, 56.0, 35, 40, 39, 38, Func_SpeedLimitOff, Func_ReturnFromSettingsFrame }, // Speed Limit: Off
{ NULL, BTN_A_SEL, FRAME_STRINGS[40], 345.0, 170.0, 75.0, 56.0, 35, 40, 37, 39, Func_SpeedLimitVi, Func_ReturnFromSettingsFrame }, // Speed Limit: VI
{ NULL, BTN_A_SEL, FRAME_STRINGS[41], 440.0, 170.0, 75.0, 56.0, 36, 41, 38, 37, Func_SpeedLimitDl, Func_ReturnFromSettingsFrame }, // Speed Limit: DL
{ NULL, BTN_A_SEL, FRAME_STRINGS[38], 345.0, 240.0, 75.0, 56.0, 38, 3, 41, 41, Func_ScalePitchYes, Func_ReturnFromSettingsFrame }, // Scale Pitch: Yes
{ NULL, BTN_A_SEL, FRAME_STRINGS[39], 440.0, 240.0, 75.0, 56.0, 39, 3, 40, 40, Func_ScalePitchNo, Func_ReturnFromSettingsFrame }, // Scale Pitch: No
//Buttons for Saves Tab (starts at button[42])
{ NULL, BTN_A_SEL, FRAME_STRINGS[38], 375.0, 100.0, 75.0, 56.0, 4, 44, 43, 43, Func_AutoSaveNativeYes, Func_ReturnFromSettingsFrame }, // Auto Save Native: Yes
{ NULL, BTN_A_SEL, FRAME_STRINGS[39], 470.0, 100.0, 75.0, 56.0, 4, 44, 42, 42, Func_AutoSaveNativeNo, Func_ReturnFromSettingsFrame }, // Auto Save Native: No
{ NULL, BTN_A_NRM, FRAME_STRINGS[43], 365.0, 170.0, 190.0, 56.0, 42, 45, -1, -1, Func_CopySaves, Func_ReturnFromSettingsFrame }, // Copy Saves
{ NULL, BTN_A_NRM, FRAME_STRINGS[44], 365.0, 240.0, 190.0, 56.0, 44, 4, -1, -1, Func_DeleteSaves, Func_ReturnFromSettingsFrame }, // Delete Saves
};
struct TextBoxInfo
{
menu::TextBox *textBox;
char* textBoxString;
float x;
float y;
float scale;
bool centered;
} FRAME_TEXTBOXES[NUM_FRAME_TEXTBOXES] =
{ // textBox textBoxString x y scale centered
//TextBoxes for General Tab (starts at textBox[0])
{ NULL, FRAME_STRINGS[5], 155.0, 128.0, 1.0, true }, // Native Save Device: SD/FAT/CardA/CardB
{ NULL, FRAME_STRINGS[6], 155.0, 198.0, 1.0, true }, // Save State Device: SD/FAT
{ NULL, FRAME_STRINGS[7], 155.0, 268.0, 1.0, true }, // CPU Emulator: Interpreter/Recompiler
{ NULL, FRAME_STRINGS[8], 155.0, 338.0, 1.0, true }, // CPU Clock Divider: 1/2/3
{ NULL, FRAME_STRINGS[9], 155.0, 408.0, 1.0, true }, // Save Settings: SD/FAT
//TextBoxes for Video Tab (starts at textBox[4])
{ NULL, FRAME_STRINGS[19], 190.0, 128.0, 1.0, true }, // Show FPS: On/Off
{ NULL, FRAME_STRINGS[20], 130.0, 198.0, 1.0, true }, // ScreenMode: 4:3/16:9/Force 16:9
{ NULL, FRAME_STRINGS[21], 190.0, 268.0, 1.0, true }, // CPU Framebuffer: On/Off
{ NULL, FRAME_STRINGS[22], 190.0, 338.0, 1.0, true }, // 2xSaI Textures: On/Off
{ NULL, FRAME_STRINGS[23], 190.0, 408.0, 1.0, true }, // FB Textures: On/Off
//TextBoxes for Input Tab (starts at textBox[9])
{ NULL, FRAME_STRINGS[32], 155.0, 338.0, 1.0, true }, // Save Configuration: SD/FAT
{ NULL, FRAME_STRINGS[33], 155.0, 408.0, 1.0, true }, // Toggle Button Load Slot
//TextBoxes for Audio Tab (starts at textBox[11])
{ NULL, FRAME_STRINGS[35], 210.0, 128.0, 1.0, true }, // Disable Audio: Yes/No
{ NULL, FRAME_STRINGS[36], 150.0, 198.0, 1.0, true }, // Speed Limit: Off/VI/DL
{ NULL, FRAME_STRINGS[37], 210.0, 268.0, 1.0, true }, // Scale Pitch: Yes/No
//TextBoxes for Saves Tab (starts at textBox[14])
{ NULL, FRAME_STRINGS[42], 200.0, 128.0, 1.0, true }, // Auto Save Native Save: Yes/No
};
SettingsFrame::SettingsFrame()
: activeSubmenu(SUBMENU_GENERAL)
{
for (int i = 0; i < NUM_FRAME_BUTTONS; i++)
FRAME_BUTTONS[i].button = new menu::Button(FRAME_BUTTONS[i].buttonStyle, &FRAME_BUTTONS[i].buttonString,
FRAME_BUTTONS[i].x, FRAME_BUTTONS[i].y,
FRAME_BUTTONS[i].width, FRAME_BUTTONS[i].height);
for (int i = 0; i < NUM_FRAME_BUTTONS; i++)
{
if (FRAME_BUTTONS[i].focusUp != -1) FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_UP, FRAME_BUTTONS[FRAME_BUTTONS[i].focusUp].button);
if (FRAME_BUTTONS[i].focusDown != -1) FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_DOWN, FRAME_BUTTONS[FRAME_BUTTONS[i].focusDown].button);
if (FRAME_BUTTONS[i].focusLeft != -1) FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_LEFT, FRAME_BUTTONS[FRAME_BUTTONS[i].focusLeft].button);
if (FRAME_BUTTONS[i].focusRight != -1) FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_RIGHT, FRAME_BUTTONS[FRAME_BUTTONS[i].focusRight].button);
FRAME_BUTTONS[i].button->setActive(true);
if (FRAME_BUTTONS[i].clickedFunc) FRAME_BUTTONS[i].button->setClicked(FRAME_BUTTONS[i].clickedFunc);
if (FRAME_BUTTONS[i].returnFunc) FRAME_BUTTONS[i].button->setReturn(FRAME_BUTTONS[i].returnFunc);
add(FRAME_BUTTONS[i].button);
menu::Cursor::getInstance().addComponent(this, FRAME_BUTTONS[i].button, FRAME_BUTTONS[i].x,
FRAME_BUTTONS[i].x+FRAME_BUTTONS[i].width, FRAME_BUTTONS[i].y,
FRAME_BUTTONS[i].y+FRAME_BUTTONS[i].height);
}
for (int i = 0; i < NUM_FRAME_TEXTBOXES; i++)
{
FRAME_TEXTBOXES[i].textBox = new menu::TextBox(&FRAME_TEXTBOXES[i].textBoxString,
FRAME_TEXTBOXES[i].x, FRAME_TEXTBOXES[i].y,
FRAME_TEXTBOXES[i].scale, FRAME_TEXTBOXES[i].centered);
add(FRAME_TEXTBOXES[i].textBox);
}
setDefaultFocus(FRAME_BUTTONS[0].button);
setBackFunc(Func_ReturnFromSettingsFrame);
setEnabled(true);
activateSubmenu(SUBMENU_GENERAL);
}
SettingsFrame::~SettingsFrame()
{
for (int i = 0; i < NUM_FRAME_TEXTBOXES; i++)
delete FRAME_TEXTBOXES[i].textBox;
for (int i = 0; i < NUM_FRAME_BUTTONS; i++)
{
menu::Cursor::getInstance().removeComponent(this, FRAME_BUTTONS[i].button);
delete FRAME_BUTTONS[i].button;
}
}
void SettingsFrame::activateSubmenu(int submenu)
{
activeSubmenu = submenu;
//All buttons: hide; unselect
for (int i = 0; i < NUM_FRAME_BUTTONS; i++)
{
FRAME_BUTTONS[i].button->setVisible(false);
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[i].button->setActive(false);
}
//All textBoxes: hide
for (int i = 0; i < NUM_FRAME_TEXTBOXES; i++)
{
FRAME_TEXTBOXES[i].textBox->setVisible(false);
}
switch (activeSubmenu) //Tab buttons: set visible; set focus up/down; set selected
{ //Config buttons: set visible; set selected
case SUBMENU_GENERAL:
setDefaultFocus(FRAME_BUTTONS[0].button);
for (int i = 0; i < NUM_TAB_BUTTONS; i++)
{
FRAME_BUTTONS[i].button->setVisible(true);
FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_DOWN, FRAME_BUTTONS[5].button);
FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_UP, FRAME_BUTTONS[16].button);
FRAME_BUTTONS[i].button->setActive(true);
}
for (int i = 0; i < 5; i++)
FRAME_TEXTBOXES[i].textBox->setVisible(true);
FRAME_BUTTONS[0].button->setSelected(true);
FRAME_BUTTONS[5+nativeSaveDevice].button->setSelected(true);
FRAME_BUTTONS[9+saveStateDevice].button->setSelected(true);
if (dynacore == DYNACORE_PURE_INTERP) FRAME_BUTTONS[11].button->setSelected(true);
else FRAME_BUTTONS[12].button->setSelected(true);
if (count_per_op == COUNT_PER_OP_1) FRAME_BUTTONS[13].button->setSelected(true);
else if (count_per_op == COUNT_PER_OP_2) FRAME_BUTTONS[14].button->setSelected(true);
else FRAME_BUTTONS[15].button->setSelected(true);
for (int i = 5; i < 18; i++)
{
FRAME_BUTTONS[i].button->setVisible(true);
FRAME_BUTTONS[i].button->setActive(true);
}
break;
case SUBMENU_VIDEO:
setDefaultFocus(FRAME_BUTTONS[1].button);
for (int i = 0; i < NUM_TAB_BUTTONS; i++)
{
FRAME_BUTTONS[i].button->setVisible(true);
FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_DOWN, FRAME_BUTTONS[18].button);
FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_UP, FRAME_BUTTONS[27].button);
FRAME_BUTTONS[i].button->setActive(true);
}
for (int i = 5; i < 10; i++)
FRAME_TEXTBOXES[i].textBox->setVisible(true);
FRAME_BUTTONS[1].button->setSelected(true);
if (showFPSonScreen == FPS_SHOW) FRAME_BUTTONS[18].button->setSelected(true);
else FRAME_BUTTONS[19].button->setSelected(true);
if (screenMode == SCREENMODE_4x3) FRAME_BUTTONS[20].button->setSelected(true);
else if (screenMode == SCREENMODE_16x9) FRAME_BUTTONS[21].button->setSelected(true);
else FRAME_BUTTONS[22].button->setSelected(true);
if (renderCpuFramebuffer == CPUFRAMEBUFFER_ENABLE) FRAME_BUTTONS[23].button->setSelected(true);
else FRAME_BUTTONS[24].button->setSelected(true);
if (glN64_use2xSaiTextures == GLN64_2XSAI_ENABLE) FRAME_BUTTONS[25].button->setSelected(true);
else FRAME_BUTTONS[26].button->setSelected(true);
if (glN64_useFrameBufferTextures == GLN64_FBTEX_ENABLE) FRAME_BUTTONS[27].button->setSelected(true);
else FRAME_BUTTONS[28].button->setSelected(true);
for (int i = 18; i < 29; i++)
{
FRAME_BUTTONS[i].button->setVisible(true);
FRAME_BUTTONS[i].button->setActive(true);
}
break;
case SUBMENU_INPUT:
setDefaultFocus(FRAME_BUTTONS[2].button);
for (int i = 0; i < NUM_TAB_BUTTONS; i++)
{
FRAME_BUTTONS[i].button->setVisible(true);
FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_DOWN, FRAME_BUTTONS[29].button);
FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_UP, FRAME_BUTTONS[34].button);
FRAME_BUTTONS[i].button->setActive(true);
}
for (int i = 10; i < 12; i++)
FRAME_TEXTBOXES[i].textBox->setVisible(true);
FRAME_BUTTONS[2].button->setSelected(true);
if (loadButtonSlot == LOADBUTTON_DEFAULT) strcpy(FRAME_STRINGS[34], "Default");
else sprintf(FRAME_STRINGS[34], "Slot %d", loadButtonSlot+1);
for (int i = 29; i < 35; i++)
{
FRAME_BUTTONS[i].button->setVisible(true);
FRAME_BUTTONS[i].button->setActive(true);
}
break;
case SUBMENU_AUDIO:
setDefaultFocus(FRAME_BUTTONS[3].button);
for (int i = 0; i < NUM_TAB_BUTTONS; i++)
{
FRAME_BUTTONS[i].button->setVisible(true);
FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_DOWN, FRAME_BUTTONS[35].button);
FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_UP, FRAME_BUTTONS[40].button);
FRAME_BUTTONS[i].button->setActive(true);
}
for (int i = 12; i < 15; i++)
FRAME_TEXTBOXES[i].textBox->setVisible(true);
FRAME_BUTTONS[3].button->setSelected(true);
if (audioEnabled == AUDIO_DISABLE) FRAME_BUTTONS[35].button->setSelected(true);
else FRAME_BUTTONS[36].button->setSelected(true);
if (Timers.limitVIs == LIMITVIS_NONE) FRAME_BUTTONS[37].button->setSelected(true);
else if (Timers.limitVIs == LIMITVIS_WAIT_FOR_VI) FRAME_BUTTONS[38].button->setSelected(true);
else FRAME_BUTTONS[39].button->setSelected(true);
if (scalePitch == SCALEPITCH_ENABLE) FRAME_BUTTONS[40].button->setSelected(true);
else FRAME_BUTTONS[41].button->setSelected(true);
for (int i = 35; i < 42; i++)
{
FRAME_BUTTONS[i].button->setVisible(true);
FRAME_BUTTONS[i].button->setActive(true);
}
break;
case SUBMENU_SAVES:
setDefaultFocus(FRAME_BUTTONS[4].button);
for (int i = 0; i < NUM_TAB_BUTTONS; i++)
{
FRAME_BUTTONS[i].button->setVisible(true);
FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_DOWN, FRAME_BUTTONS[42].button);
FRAME_BUTTONS[i].button->setNextFocus(menu::Focus::DIRECTION_UP, FRAME_BUTTONS[45].button);
FRAME_BUTTONS[i].button->setActive(true);
}
for (int i = 15; i < 16; i++)
FRAME_TEXTBOXES[i].textBox->setVisible(true);
FRAME_BUTTONS[4].button->setSelected(true);
if (autoSave == AUTOSAVE_ENABLE) FRAME_BUTTONS[42].button->setSelected(true);
else FRAME_BUTTONS[43].button->setSelected(true);
for (int i = 42; i < NUM_FRAME_BUTTONS; i++)
{
FRAME_BUTTONS[i].button->setVisible(true);
FRAME_BUTTONS[i].button->setActive(true);
}
break;
}
}
void SettingsFrame::drawChildren(menu::Graphics &gfx)
{
if(isVisible())
{
#ifdef HW_RVL
WPADData* wpad = menu::Input::getInstance().getWpad();
#endif
for (int i=0; i<4; i++)
{
u16 currentButtonsGC = PAD_ButtonsHeld(i);
#ifdef HW_RVL
u32 currentButtonsWii = WPAD_ButtonsHeld(i);
#endif
if (currentButtonsGC ^ previousButtonsGC[i])
{
u16 currentButtonsDownGC = (currentButtonsGC ^ previousButtonsGC[i]) & currentButtonsGC;
previousButtonsGC[i] = currentButtonsGC;
if (currentButtonsDownGC & PAD_BUTTON_R)
{
//move to next tab
if(activeSubmenu < SUBMENU_SAVES)
{
activateSubmenu(activeSubmenu+1);
menu::Focus::getInstance().clearPrimaryFocus();
}
}
else if (currentButtonsDownGC & PAD_BUTTON_L)
{
//move to the previous tab
if(activeSubmenu > SUBMENU_GENERAL)
{
activateSubmenu(activeSubmenu-1);
menu::Focus::getInstance().clearPrimaryFocus();
}
}
break;
}
#ifdef HW_RVL
else if (currentButtonsWii ^ previousButtonsWii[i])
{
u32 currentButtonsDownWii = (currentButtonsWii ^ previousButtonsWii[i]) & currentButtonsWii;
previousButtonsWii[i] = currentButtonsWii;
switch (wpad[i].exp.type)
{
case WPAD_EXP_CLASSIC:
case WPAD_EXP_WIIUPRO:
if (currentButtonsDownWii & (WPAD_CLASSIC_BUTTON_FULL_R | WPAD_CLASSIC_BUTTON_ZR))
{
//move to next tab
if(activeSubmenu < SUBMENU_SAVES)
{
activateSubmenu(activeSubmenu+1);
menu::Focus::getInstance().clearPrimaryFocus();
}
}
else if (currentButtonsDownWii & (WPAD_CLASSIC_BUTTON_FULL_L | WPAD_CLASSIC_BUTTON_ZL))
{
//move to the previous tab
if(activeSubmenu > SUBMENU_GENERAL)
{
activateSubmenu(activeSubmenu-1);
menu::Focus::getInstance().clearPrimaryFocus();
}
}
break;
case WPAD_EXP_NES:
case WPAD_EXP_SNES:
case WPAD_EXP_N64:
if (currentButtonsDownWii & WPAD_SNES_BUTTON_R)
{
//move to next tab
if(activeSubmenu < SUBMENU_SAVES)
{
activateSubmenu(activeSubmenu+1);
menu::Focus::getInstance().clearPrimaryFocus();
}
}
else if (currentButtonsDownWii & WPAD_SNES_BUTTON_L)
{
//move to the previous tab
if(activeSubmenu > SUBMENU_GENERAL)
{
activateSubmenu(activeSubmenu-1);
menu::Focus::getInstance().clearPrimaryFocus();
}
}
break;
case WPAD_EXP_GC:
if (currentButtonsDownWii & WPAD_GC_BUTTON_R)
{
//move to next tab
if(activeSubmenu < SUBMENU_SAVES)
{
activateSubmenu(activeSubmenu+1);
menu::Focus::getInstance().clearPrimaryFocus();
}
}
else if (currentButtonsDownWii & WPAD_GC_BUTTON_L)
{
//move to the previous tab
if(activeSubmenu > SUBMENU_GENERAL)
{
activateSubmenu(activeSubmenu-1);
menu::Focus::getInstance().clearPrimaryFocus();
}
}
break;
default:
if (currentButtonsDownWii & WPAD_BUTTON_PLUS)
{
//move to next tab
if(activeSubmenu < SUBMENU_SAVES)
{
activateSubmenu(activeSubmenu+1);
menu::Focus::getInstance().clearPrimaryFocus();
}
}
else if (currentButtonsDownWii & WPAD_BUTTON_MINUS)
{
//move to the previous tab
if(activeSubmenu > SUBMENU_GENERAL)
{
activateSubmenu(activeSubmenu-1);
menu::Focus::getInstance().clearPrimaryFocus();
}
}
break;
}
break;
}
#endif //HW_RVL
}
//Draw buttons
menu::ComponentList::const_iterator iteration;
for (iteration = componentList.begin(); iteration != componentList.end(); iteration++)
{
(*iteration)->draw(gfx);
}
}
}
extern MenuContext *pMenuContext;
void Func_TabGeneral()
{
pMenuContext->setActiveFrame(MenuContext::FRAME_SETTINGS,SettingsFrame::SUBMENU_GENERAL);
}
void Func_TabVideo()
{
pMenuContext->setActiveFrame(MenuContext::FRAME_SETTINGS,SettingsFrame::SUBMENU_VIDEO);
}
void Func_TabInput()
{
pMenuContext->setActiveFrame(MenuContext::FRAME_SETTINGS,SettingsFrame::SUBMENU_INPUT);
}
void Func_TabAudio()
{
pMenuContext->setActiveFrame(MenuContext::FRAME_SETTINGS,SettingsFrame::SUBMENU_AUDIO);
}
void Func_TabSaves()
{
pMenuContext->setActiveFrame(MenuContext::FRAME_SETTINGS,SettingsFrame::SUBMENU_SAVES);
}
void Func_NativeSaveSD()
{
for (int i = 5; i <= 8; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[5].button->setSelected(true);
nativeSaveDevice = NATIVESAVEDEVICE_SD;
}
void Func_NativeSaveFAT()
{
for (int i = 5; i <= 8; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[6].button->setSelected(true);
nativeSaveDevice = NATIVESAVEDEVICE_FAT;
}
void Func_NativeSaveCardA()
{
for (int i = 5; i <= 8; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[7].button->setSelected(true);
nativeSaveDevice = NATIVESAVEDEVICE_CARDA;
}
void Func_NativeSaveCardB()
{
for (int i = 5; i <= 8; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[8].button->setSelected(true);
nativeSaveDevice = NATIVESAVEDEVICE_CARDB;
}
void Func_SaveStateSD()
{
for (int i = 9; i <= 10; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[9].button->setSelected(true);
saveStateDevice = SAVESTATEDEVICE_SD;
}
void Func_SaveStateFAT()
{
for (int i = 9; i <= 10; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[10].button->setSelected(true);
saveStateDevice = SAVESTATEDEVICE_FAT;
}
void Func_CpuPureInterp()
{
for (int i = 11; i <= 12; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[11].button->setSelected(true);
dynacore = DYNACORE_PURE_INTERP;
}
void Func_CpuDynarec()
{
for (int i = 11; i <= 12; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[12].button->setSelected(true);
dynacore = DYNACORE_DYNAREC;
}
void Func_ResetROM();
void Func_ClockDivider1()
{
for (int i = 13; i <= 15; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[13].button->setSelected(true);
count_per_op = COUNT_PER_OP_1;
Func_ResetROM();
}
void Func_ClockDivider2()
{
for (int i = 13; i <= 15; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[14].button->setSelected(true);
count_per_op = COUNT_PER_OP_2;
Func_ResetROM();
}
void Func_ClockDivider3()
{
for (int i = 13; i <= 15; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[15].button->setSelected(true);
count_per_op = COUNT_PER_OP_3;
Func_ResetROM();
}
extern void writeConfig(FILE* f);
void Func_SaveSettingsSD()
{
fileBrowser_file* configFile_file;
int (*configFile_init)(fileBrowser_file*) = fileBrowser_libfat_init;
configFile_file = &saveDir_libfat_Default;
if(configFile_init(configFile_file)) { //only if device initialized ok
FILE* f = fopen( "sd:/not64/settings.cfg", "wb" ); //attempt to open file
if(f) {
writeConfig(f); //write out the config
fclose(f);
menu::MessageBox::getInstance().setMessage("Saved settings to SD");
return;
}
}
menu::MessageBox::getInstance().setMessage("Error saving settings to SD");
}
void Func_SaveSettingsFAT()
{
fileBrowser_file* configFile_file;
int (*configFile_init)(fileBrowser_file*) = fileBrowser_libfat_init;
configFile_file = &saveDir_libfat;
if(configFile_init(configFile_file)) { //only if device initialized ok
FILE* f = fopen( "fat:/not64/settings.cfg", "wb" ); //attempt to open file
if(f) {
writeConfig(f); //write out the config
fclose(f);
menu::MessageBox::getInstance().setMessage("Saved settings to FAT");
return;
}
}
menu::MessageBox::getInstance().setMessage("Error saving settings to FAT");
}
void Func_ShowFpsOn()
{
for (int i = 18; i <= 19; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[18].button->setSelected(true);
showFPSonScreen = FPS_SHOW;
}
void Func_ShowFpsOff()
{
for (int i = 18; i <= 19; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[19].button->setSelected(true);
showFPSonScreen = FPS_HIDE;
}
extern GXRModeObj *vmode, *rmode;
void gfx_set_window(int x, int y, int width, int height);
void Func_ScreenMode4_3()
{
for (int i = 20; i <= 22; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[20].button->setSelected(true);
screenMode = SCREENMODE_4x3;
gfx_set_window( 0, 0, 640, rmode->efbHeight);
#ifdef HW_RVL
VIDEO_SetAspectRatio(VI_DISPLAY_BOTH, VI_ASPECT_3_4);
#endif
}
void Func_ScreenMode16_9()
{
for (int i = 20; i <= 22; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[21].button->setSelected(true);
screenMode = SCREENMODE_16x9;
gfx_set_window( 0, 0, 640, rmode->efbHeight);
#ifdef HW_RVL
VIDEO_SetAspectRatio(VI_DISPLAY_BOTH, VI_ASPECT_1_1);
#endif
}
void Func_ScreenForce16_9()
{
for (int i = 20; i <= 22; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[22].button->setSelected(true);
screenMode = SCREENMODE_16x9_PILLARBOX;
gfx_set_window( 80, 0, 480, rmode->efbHeight);
#ifdef HW_RVL
VIDEO_SetAspectRatio(VI_DISPLAY_BOTH, VI_ASPECT_1_1);
#endif
}
void Func_CpuFramebufferOn()
{
for (int i = 23; i <= 24; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[23].button->setSelected(true);
renderCpuFramebuffer = CPUFRAMEBUFFER_ENABLE;
}
void Func_CpuFramebufferOff()
{
for (int i = 23; i <= 24; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[24].button->setSelected(true);
renderCpuFramebuffer = CPUFRAMEBUFFER_DISABLE;
}
void Func_2xSaiTexturesOn()
{
for (int i = 25; i <= 26; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[25].button->setSelected(true);
glN64_use2xSaiTextures = GLN64_2XSAI_ENABLE;
}
void Func_2xSaiTexturesOff()
{
for (int i = 25; i <= 26; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[26].button->setSelected(true);
glN64_use2xSaiTextures = GLN64_2XSAI_DISABLE;
}
void Func_FbTexturesOn()
{
for (int i = 27; i <= 28; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[27].button->setSelected(true);
glN64_useFrameBufferTextures = GLN64_FBTEX_ENABLE;
}
void Func_FbTexturesOff()
{
for (int i = 27; i <= 28; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[28].button->setSelected(true);
glN64_useFrameBufferTextures = GLN64_FBTEX_DISABLE;
}
void Func_ConfigureInput()
{
// menu::MessageBox::getInstance().setMessage("Input configuration not implemented");
pMenuContext->setActiveFrame(MenuContext::FRAME_CONFIGUREINPUT,ConfigureInputFrame::SUBMENU_REINIT);
}
void Func_ConfigurePaks()
{
// menu::MessageBox::getInstance().setMessage("Controller Paks not implemented");
pMenuContext->setActiveFrame(MenuContext::FRAME_CONFIGUREPAKS,ConfigurePaksFrame::SUBMENU_REINIT);
}
void Func_ConfigureButtons()
{
menu::Gui::getInstance().menuLogo->setVisible(false);
pMenuContext->setActiveFrame(MenuContext::FRAME_CONFIGUREBUTTONS,ConfigureButtonsFrame::SUBMENU_N64_PADNONE);
}
void Func_SaveButtonsSD()
{
fileBrowser_file* configFile_file;
int (*configFile_init)(fileBrowser_file*) = fileBrowser_libfat_init;
int num_written = 0;
configFile_file = &saveDir_libfat_Default;
if(configFile_init(configFile_file)) { //only if device initialized ok
FILE* f = fopen( "sd:/not64/controlG.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_GC); //write out GC controller mappings
fclose(f);
num_written++;
}
#ifdef HW_RVL
f = fopen( "sd:/not64/controlD.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_ExtenmoteGC); //write out GC controller mappings
fclose(f);
num_written++;
}
f = fopen( "sd:/not64/controlU.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_ExtenmoteN64); //write out N64 controller mappings
fclose(f);
num_written++;
}
f = fopen( "sd:/not64/controlS.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_ExtenmoteSNES); //write out SNES controller mappings
fclose(f);
num_written++;
}
f = fopen( "sd:/not64/controlF.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_ExtenmoteNES); //write out NES controller mappings
fclose(f);
num_written++;
}
f = fopen( "sd:/not64/controlP.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_WiiUPro); //write out WiiU Pro controller mappings
fclose(f);
num_written++;
}
f = fopen( "sd:/not64/controlC.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_Classic); //write out Classic controller mappings
fclose(f);
num_written++;
}
f = fopen( "sd:/not64/controlN.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_WiimoteNunchuk); //write out WM+NC controller mappings
fclose(f);
num_written++;
}
f = fopen( "sd:/not64/controlW.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_Wiimote); //write out Wiimote controller mappings
fclose(f);
num_written++;
}
#endif //HW_RVL
}
if (num_written == num_controller_t)
menu::MessageBox::getInstance().setMessage("Saved configuration to SD");
else
menu::MessageBox::getInstance().setMessage("Error saving configuration to SD");
}
void Func_SaveButtonsFAT()
{
fileBrowser_file* configFile_file;
int (*configFile_init)(fileBrowser_file*) = fileBrowser_libfat_init;
int num_written = 0;
configFile_file = &saveDir_libfat;
if(configFile_init(configFile_file)) { //only if device initialized ok
FILE* f = fopen( "fat:/not64/controlG.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_GC); //write out GC controller mappings
fclose(f);
num_written++;
}
#ifdef HW_RVL
f = fopen( "fat:/not64/controlD.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_ExtenmoteGC); //write out GC controller mappings
fclose(f);
num_written++;
}
f = fopen( "fat:/not64/controlU.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_ExtenmoteN64); //write out N64 controller mappings
fclose(f);
num_written++;
}
f = fopen( "fat:/not64/controlS.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_ExtenmoteSNES); //write out SNES controller mappings
fclose(f);
num_written++;
}
f = fopen( "fat:/not64/controlF.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_ExtenmoteNES); //write out NES controller mappings
fclose(f);
num_written++;
}
f = fopen( "fat:/not64/controlP.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_WiiUPro); //write out WiiU Pro controller mappings
fclose(f);
num_written++;
}
f = fopen( "fat:/not64/controlC.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_Classic); //write out Classic controller mappings
fclose(f);
num_written++;
}
f = fopen( "fat:/not64/controlN.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_WiimoteNunchuk); //write out WM+NC controller mappings
fclose(f);
num_written++;
}
f = fopen( "fat:/not64/controlW.cfg", "wb" ); //attempt to open file
if(f) {
save_configurations(f, &controller_Wiimote); //write out Wiimote controller mappings
fclose(f);
num_written++;
}
#endif //HW_RVL
}
if (num_written == num_controller_t)
menu::MessageBox::getInstance().setMessage("Saved configuration to FAT");
else
menu::MessageBox::getInstance().setMessage("Error saving configuration to FAT");
}
void Func_ToggleButtonLoad()
{
loadButtonSlot = (loadButtonSlot + 1) % 5;
if (loadButtonSlot == LOADBUTTON_DEFAULT)
strcpy(FRAME_STRINGS[34], "Default");
else
sprintf(FRAME_STRINGS[34], "Slot %d", loadButtonSlot+1);
}
void Func_DisableAudioYes()
{
for (int i = 35; i <= 36; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[35].button->setSelected(true);
audioEnabled = AUDIO_DISABLE;
}
void Func_DisableAudioNo()
{
for (int i = 35; i <= 36; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[36].button->setSelected(true);
audioEnabled = AUDIO_ENABLE;
}
void Func_SpeedLimitOff()
{
for (int i = 37; i <= 39; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[37].button->setSelected(true);
Timers.limitVIs = LIMITVIS_NONE;
}
void Func_SpeedLimitVi()
{
for (int i = 37; i <= 39; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[38].button->setSelected(true);
Timers.limitVIs = LIMITVIS_WAIT_FOR_VI;
}
void Func_SpeedLimitDl()
{
for (int i = 37; i <= 39; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[39].button->setSelected(true);
Timers.limitVIs = LIMITVIS_WAIT_FOR_FRAME;
}
void Func_ScalePitchYes()
{
for (int i = 40; i <= 41; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[40].button->setSelected(true);
scalePitch = SCALEPITCH_ENABLE;
}
void Func_ScalePitchNo()
{
for (int i = 40; i <= 41; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[41].button->setSelected(true);
scalePitch = SCALEPITCH_DISABLE;
}
void Func_AutoSaveNativeYes()
{
for (int i = 42; i <= 43; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[42].button->setSelected(true);
autoSave = AUTOSAVE_ENABLE;
}
void Func_AutoSaveNativeNo()
{
for (int i = 42; i <= 43; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[43].button->setSelected(true);
autoSave = AUTOSAVE_DISABLE;
}
void Func_CopySaves()
{
menu::MessageBox::getInstance().setMessage("Copy Saves not implemented");
}
void Func_DeleteSaves()
{
menu::MessageBox::getInstance().setMessage("Delete Saves not implemented");
}
void Func_ReturnFromSettingsFrame()
{
menu::Gui::getInstance().menuLogo->setLocation(580.0, 70.0, -50.0);
pMenuContext->setActiveFrame(MenuContext::FRAME_MAIN);
}