mirror of
https://github.com/extremscorner/not64.git
synced 2025-04-02 10:52:37 -04:00
1125 lines
41 KiB
C++
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);
|
|
}
|