not64/menu/SettingsFrame.cpp
Extrems 75c0d1ae96 Added Wii Remote +Control Pad as analog source.
Added AutoLoadSave option.
Fixed regression from 03b282c295.
2021-08-29 11:20:47 -04:00

1125 lines
41 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_AutoLoadSaveYes();
void Func_AutoLoadSaveNo();
void Func_AutoSaveYes();
void Func_AutoSaveNo();
void Func_CopySaves();
void Func_DeleteSaves();
void Func_ReturnFromSettingsFrame();
#define NUM_FRAME_BUTTONS 48
#define NUM_TAB_BUTTONS 5
#define FRAME_BUTTONS settingsFrameButtons
#define FRAME_STRINGS settingsFrameStrings
#define NUM_FRAME_TEXTBOXES 17
#define FRAME_TEXTBOXES settingsFrameTextBoxes
static char FRAME_STRINGS[46][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 Load Native Saves",
"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_AutoLoadSaveYes, Func_ReturnFromSettingsFrame }, // Auto Load Native Saves: Yes
{ NULL, BTN_A_SEL, FRAME_STRINGS[39], 470.0, 100.0, 75.0, 56.0, 4, 45, 42, 42, Func_AutoLoadSaveNo, Func_ReturnFromSettingsFrame }, // Auto Load Native Saves: No
{ NULL, BTN_A_SEL, FRAME_STRINGS[38], 375.0, 170.0, 75.0, 56.0, 42, 46, 45, 45, Func_AutoSaveYes, Func_ReturnFromSettingsFrame }, // Auto Save Native Saves: Yes
{ NULL, BTN_A_SEL, FRAME_STRINGS[39], 470.0, 170.0, 75.0, 56.0, 43, 46, 44, 44, Func_AutoSaveNo, Func_ReturnFromSettingsFrame }, // Auto Save Native Saves: No
{ NULL, BTN_A_NRM, FRAME_STRINGS[44], 365.0, 240.0, 190.0, 56.0, 44, 47, -1, -1, Func_CopySaves, Func_ReturnFromSettingsFrame }, // Copy Saves
{ NULL, BTN_A_NRM, FRAME_STRINGS[45], 365.0, 310.0, 190.0, 56.0, 46, 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 Load Native Saves: Yes/No
{ NULL, FRAME_STRINGS[43], 200.0, 198.0, 1.0, true }, // Auto Save Native Saves: 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[47].button);
FRAME_BUTTONS[i].button->setActive(true);
}
for (int i = 15; i < NUM_FRAME_TEXTBOXES; i++)
FRAME_TEXTBOXES[i].textBox->setVisible(true);
FRAME_BUTTONS[4].button->setSelected(true);
if (autoLoadSave == AUTOLOADSAVE_ENABLE) FRAME_BUTTONS[42].button->setSelected(true);
else FRAME_BUTTONS[43].button->setSelected(true);
if (autoSave == AUTOSAVE_ENABLE) FRAME_BUTTONS[44].button->setSelected(true);
else FRAME_BUTTONS[45].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_AutoLoadSaveYes()
{
for (int i = 42; i <= 43; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[42].button->setSelected(true);
autoLoadSave = AUTOLOADSAVE_ENABLE;
}
void Func_AutoLoadSaveNo()
{
for (int i = 42; i <= 43; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[43].button->setSelected(true);
autoLoadSave = AUTOLOADSAVE_DISABLE;
}
void Func_AutoSaveYes()
{
for (int i = 44; i <= 45; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[44].button->setSelected(true);
autoSave = AUTOSAVE_ENABLE;
}
void Func_AutoSaveNo()
{
for (int i = 44; i <= 45; i++)
FRAME_BUTTONS[i].button->setSelected(false);
FRAME_BUTTONS[45].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);
}