Skip to content

Commit

Permalink
Merge pull request #459 from KrahJohlito/settings
Browse files Browse the repository at this point in the history
Add Controller Settings to menu
  • Loading branch information
AKuHAK committed Jul 31, 2021
2 parents 7b7b8ce + a8c2125 commit c2c0f53
Show file tree
Hide file tree
Showing 10 changed files with 127 additions and 52 deletions.
2 changes: 2 additions & 0 deletions include/dialogs.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ enum UI_ITEMS {
NETUPD_BTN_START,
NETUPD_BTN_CANCEL,
#ifdef PADEMU
PADEMU_GLOBAL_BUTTON,
PADCFG_PADEMU_SOURCE,
PADCFG_PADEMU_CONFIG,
PADCFG_PADEMU_ENABLE,
Expand Down Expand Up @@ -182,6 +183,7 @@ extern struct UIItem diaPadEmuInfo[];
extern struct UIItem diaNetConfig[];
extern struct UIItem diaUIConfig[];
extern struct UIItem diaAudioConfig[];
extern struct UIItem diaControllerConfig[];
extern struct UIItem diaCompatConfig[];
extern struct UIItem diaVMCConfig[];
extern struct UIItem diaGSConfig[];
Expand Down
1 change: 1 addition & 0 deletions include/gui.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ void guiShowAbout();
void guiShowConfig();
void guiShowUIConfig();
void guiShowAudioConfig();
void guiShowControllerConfig();
void guiShowNetConfig();
void guiShowParentalLockConfig();

Expand Down
6 changes: 5 additions & 1 deletion include/guigame.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ void guiGameShowVMCMenu(int id, item_list_t *support);
void guiGameShowCompatConfig(int id, item_list_t *support, config_set_t *configSet);
void guiGameShowGSConfig(void);
void guiGameShowCheatConfig(void);
void guiGameShowPadEmuConfig(void);

#ifdef PADEMU
void guiGameShowPadEmuConfig(int forceGlobal);
void guiGameSavePadEmuGlobalConfig(config_set_t *configGame);
#endif

void guiGameLoadConfig(item_list_t *support, config_set_t *configSet);
int guiGameSaveConfig(config_set_t *configSet, item_list_t *support);
Expand Down
1 change: 1 addition & 0 deletions include/lang.h
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ enum _STR_IDS {
_STR_INFO_DESCRIPTION,
_STR_BDM_GAMES,
_STR_BLOCKDEVICE_SETTINGS,
_STR_CONTROLLER_SETTINGS,

LANG_STR_COUNT
};
Expand Down
3 changes: 2 additions & 1 deletion lng/lang_English.lng
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ Games List
Game Settings
Remove Settings
Removed all keys for the game.
Scrolling
Scrolling Speed
Slow
Medium
Fast
Expand Down Expand Up @@ -302,3 +302,4 @@ Developer
Description
BDM Games
Select Block Devices
Controller Settings
35 changes: 25 additions & 10 deletions src/dialogs.c
Original file line number Diff line number Diff line change
Expand Up @@ -199,11 +199,6 @@ struct UIItem diaConfig[] = {
{UI_LABEL, CFG_LBL_AUTOSTARTLAST, 1, 1, -1, 0, 0, {.label = {NULL, _STR_AUTOSTARTLAST}}},
{UI_SPACER},
{UI_INT, CFG_AUTOSTARTLAST, 1, 1, _STR_HINT_AUTOSTARTLAST, 0, 0, {.intvalue = {0, 0, 0, 9}}},
{UI_BREAK},

{UI_LABEL, 0, 1, 1, -1, -40, 0, {.label = {NULL, _STR_SELECTBUTTON}}},
{UI_SPACER},
{UI_ENUM, CFG_SELECTBUTTON, 1, 1, -1, 0, 0, {.intvalue = {0, 0}}},
{UI_SPLITTER},

{UI_LABEL, 0, 1, 1, -1, -40, 0, {.label = {NULL, _STR_BDM_PREFIX}}},
Expand Down Expand Up @@ -270,11 +265,6 @@ struct UIItem diaUIConfig[] = {
{UI_ENUM, UICFG_LANG, 1, 1, -1, 0, 0, {.intvalue = {0, 0}}},
{UI_BREAK},

{UI_LABEL, 0, 1, 1, -1, -40, 0, {.label = {NULL, _STR_SCROLLING}}},
{UI_SPACER},
{UI_ENUM, UICFG_SCROLL, 1, 1, -1, 0, 0, {.intvalue = {0, 0}}},
{UI_BREAK},

{UI_LABEL, 0, 1, 1, -1, -40, 0, {.label = {NULL, _STR_AUTOSORT}}},
{UI_SPACER},
{UI_BOOL, UICFG_AUTOSORT, 1, 1, -1, 0, 0, {.intvalue = {0, 0}}},
Expand Down Expand Up @@ -937,3 +927,28 @@ struct UIItem diaAudioConfig[] = {
{UI_BREAK},
// end of dialog
{UI_TERMINATOR}};

// Controller Settings Menu
struct UIItem diaControllerConfig[] = {
{UI_LABEL, 0, 1, 1, -1, 0, 0, {.label = {NULL, _STR_CONTROLLER_SETTINGS}}},
{UI_SPLITTER},

{UI_LABEL, 0, 1, 1, -1, -40, 0, {.label = {NULL, _STR_SCROLLING}}},
{UI_SPACER},
{UI_ENUM, UICFG_SCROLL, 1, 1, -1, 0, 0, {.intvalue = {0, 0}}},
{UI_BREAK},

{UI_LABEL, 0, 1, 1, -1, -40, 0, {.label = {NULL, _STR_SELECTBUTTON}}},
{UI_SPACER},
{UI_ENUM, CFG_SELECTBUTTON, 1, 1, -1, 0, 0, {.intvalue = {0, 0}}},
{UI_BREAK},
#ifdef PADEMU
{UI_BREAK},
{UI_BUTTON, PADEMU_GLOBAL_BUTTON, 1, 1, -1, 0, 0, {.label = {NULL, _STR_PADEMUCONFIG}}},
{UI_BREAK},
#endif
// buttons
{UI_OK, 0, 1, 1, -1, 0, 0, {.label = {NULL, _STR_OK}}},
{UI_BREAK},
// end of dialog
{UI_TERMINATOR}};
44 changes: 30 additions & 14 deletions src/gui.c
Original file line number Diff line number Diff line change
Expand Up @@ -448,14 +448,10 @@ static int guiUpdater(int modified)

void guiShowConfig()
{
int value;

// configure the enumerations
const char *selectButtons[] = {_l(_STR_CIRCLE), _l(_STR_CROSS), NULL};
const char *deviceNames[] = {_l(_STR_BDM_GAMES), _l(_STR_NET_GAMES), _l(_STR_HDD_GAMES), NULL};
const char *deviceModes[] = {_l(_STR_OFF), _l(_STR_MANUAL), _l(_STR_AUTO), NULL};

diaSetEnum(diaConfig, CFG_SELECTBUTTON, selectButtons);
diaSetEnum(diaConfig, CFG_DEFDEVICE, deviceNames);
diaSetEnum(diaConfig, CFG_BDMMODE, deviceModes);
diaSetEnum(diaConfig, CFG_HDDMODE, deviceModes);
Expand All @@ -475,7 +471,6 @@ void guiShowConfig()
diaSetVisible(diaConfig, CFG_AUTOSTARTLAST, gRememberLastPlayed);
diaSetVisible(diaConfig, CFG_LBL_AUTOSTARTLAST, gRememberLastPlayed);

diaSetInt(diaConfig, CFG_SELECTBUTTON, gSelectButton == KEY_CIRCLE ? 0 : 1);
diaSetInt(diaConfig, CFG_DEFDEVICE, gDefaultDevice);
diaSetInt(diaConfig, CFG_BDMMODE, gBDMStartMode);
diaSetVisible(diaConfig, BLOCKDEVICE_BUTTON, gBDMStartMode);
Expand All @@ -496,10 +491,6 @@ void guiShowConfig()
diaGetInt(diaConfig, CFG_LASTPLAYED, &gRememberLastPlayed);
diaGetInt(diaConfig, CFG_AUTOSTARTLAST, &gAutoStartLastPlayed);
DisableCron = 1; // Disable Auto Start Last Played counter (we don't want to call it right after enable it on GUI)
if (diaGetInt(diaConfig, CFG_SELECTBUTTON, &value))
gSelectButton = value == 0 ? KEY_CIRCLE : KEY_CROSS;
else
gSelectButton = KEY_CIRCLE;
diaGetInt(diaConfig, CFG_DEFDEVICE, &gDefaultDevice);
diaGetInt(diaConfig, CFG_HDDMODE, &gHDDStartMode);
diaGetInt(diaConfig, CFG_ETHMODE, &gETHStartMode);
Expand Down Expand Up @@ -590,8 +581,6 @@ void guiShowUIConfig(void)
showCfgPopup = 0;
guiResetNotifications();

// configure the enumerations
const char *scrollSpeeds[] = {_l(_STR_SLOW), _l(_STR_MEDIUM), _l(_STR_FAST), NULL};
// clang-format off
const char *vmodeNames[] = {_l(_STR_AUTO)
, "PAL 640x512i @50Hz 24bit"
Expand All @@ -611,11 +600,9 @@ void guiShowUIConfig(void)

reselect_video_mode:
previousVMode = gVMode;
diaSetEnum(diaUIConfig, UICFG_SCROLL, scrollSpeeds);
diaSetEnum(diaUIConfig, UICFG_THEME, (const char **)thmGetGuiList());
diaSetEnum(diaUIConfig, UICFG_LANG, (const char **)lngGetGuiList());
diaSetEnum(diaUIConfig, UICFG_VMODE, vmodeNames);
diaSetInt(diaUIConfig, UICFG_SCROLL, gScrollSpeed);
diaSetInt(diaUIConfig, UICFG_THEME, thmGetGuiValue());
diaSetInt(diaUIConfig, UICFG_LANG, lngGetGuiValue());
diaSetInt(diaUIConfig, UICFG_AUTOSORT, gAutosort);
Expand All @@ -631,7 +618,6 @@ void guiShowUIConfig(void)

int ret = diaExecuteDialog(diaUIConfig, -1, 1, guiUIUpdater);
if (ret) {
diaGetInt(diaUIConfig, UICFG_SCROLL, &gScrollSpeed);
diaGetInt(diaUIConfig, UICFG_LANG, &langID);
diaGetInt(diaUIConfig, UICFG_THEME, &themeID);
if (themeID == 0) {
Expand Down Expand Up @@ -841,6 +827,36 @@ void guiShowAudioConfig(void)
diaExecuteDialog(diaAudioConfig, -1, 1, guiAudioUpdater);
}

void guiShowControllerConfig(void)
{
int value;

// configure the enumerations
const char *scrollSpeeds[] = {_l(_STR_SLOW), _l(_STR_MEDIUM), _l(_STR_FAST), NULL};
const char *selectButtons[] = {_l(_STR_CIRCLE), _l(_STR_CROSS), NULL};

diaSetEnum(diaControllerConfig, UICFG_SCROLL, scrollSpeeds);
diaSetEnum(diaControllerConfig, CFG_SELECTBUTTON, selectButtons);

diaSetInt(diaControllerConfig, UICFG_SCROLL, gScrollSpeed);
diaSetInt(diaControllerConfig, CFG_SELECTBUTTON, gSelectButton == KEY_CIRCLE ? 0 : 1);

int result = diaExecuteDialog(diaControllerConfig, -1, 1, NULL);
if (result) {
diaGetInt(diaControllerConfig, UICFG_SCROLL, &gScrollSpeed);

if (diaGetInt(diaControllerConfig, CFG_SELECTBUTTON, &value))
gSelectButton = value == 0 ? KEY_CIRCLE : KEY_CROSS;
else
gSelectButton = KEY_CIRCLE;
#ifdef PADEMU
if (result == PADEMU_GLOBAL_BUTTON)
guiGameShowPadEmuConfig(1);
#endif
applyConfig(-1, -1);
}
}

int guiShowKeyboard(char *value, int maxLength)
{
char tmp[maxLength];
Expand Down
73 changes: 49 additions & 24 deletions src/guigame.c
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,8 @@ static int dgmacset = 0;
static int dg_discon = 0;
static int ver_set = 0, feat_set = 0;

static int forceGlobalPadEmu;

static char *bdaddr_to_str(u8 *bdaddr, char *addstr)
{
snprintf(addstr, 18, "%02X:%02X:%02X:%02X:%02X:%02X", bdaddr[0], bdaddr[1], bdaddr[2], bdaddr[3], bdaddr[4], bdaddr[5]);
Expand Down Expand Up @@ -662,13 +664,19 @@ static int guiGamePadEmuInfoUpdater(int modified)
return 0;
}

void guiGameShowPadEmuConfig(void)
void guiGameShowPadEmuConfig(int forceGlobal)
{
const char *settingsSource[] = {_l(_STR_GLOBAL_SETTINGS), _l(_STR_PERGAME_SETTINGS), NULL};
const char *PadEmuModes[] = {_l(_STR_DS34USB_MODE), _l(_STR_DS34BT_MODE), NULL};

int PadEmuMtap, PadEmuMtapPort, i;

forceGlobalPadEmu = forceGlobal;
diaSetEnabled(diaPadEmuConfig, PADCFG_PADEMU_SOURCE, !forceGlobalPadEmu);

if (forceGlobalPadEmu)
guiGameLoadPadEmuConfig(NULL, configGetByType(CONFIG_GAME));

diaSetEnum(diaPadEmuConfig, PADCFG_PADEMU_SOURCE, settingsSource);
diaSetEnum(diaPadEmuConfig, PADCFG_PADEMU_MODE, PadEmuModes);

Expand Down Expand Up @@ -731,6 +739,36 @@ void guiGameShowPadEmuConfig(void)
break;
}
}

static int guiGameSavePadEmuGameConfig(config_set_t *configSet, int result)
{
if (gPadEmuSource == SETTINGS_PERGAME) {
diaGetInt(diaPadEmuConfig, PADCFG_PADEMU_ENABLE, &EnablePadEmu);

result = configSetInt(configSet, CONFIG_ITEM_PADEMUSOURCE, gPadEmuSource);
if (EnablePadEmu != 0)
result = configSetInt(configSet, CONFIG_ITEM_ENABLEPADEMU, EnablePadEmu);
else
configRemoveKey(configSet, CONFIG_ITEM_ENABLEPADEMU);

if (PadEmuSettings != 0)
result = configSetInt(configSet, CONFIG_ITEM_PADEMUSETTINGS, PadEmuSettings);
else
configRemoveKey(configSet, CONFIG_ITEM_PADEMUSETTINGS);
}

return result;
}

void guiGameSavePadEmuGlobalConfig(config_set_t *configGame)
{
if (gPadEmuSource == SETTINGS_GLOBAL) {
diaGetInt(diaPadEmuConfig, PADCFG_PADEMU_ENABLE, &EnablePadEmu);

configSetInt(configGame, CONFIG_ITEM_ENABLEPADEMU, EnablePadEmu);
configSetInt(configGame, CONFIG_ITEM_PADEMUSETTINGS, PadEmuSettings);
}
}
#endif

void guiGameShowCompatConfig(int id, item_list_t *support, config_set_t *configSet)
Expand Down Expand Up @@ -861,23 +899,8 @@ int guiGameSaveConfig(config_set_t *configSet, item_list_t *support)

#ifdef PADEMU
/// PADEMU ///
diaGetInt(diaPadEmuConfig, PADCFG_PADEMU_ENABLE, &EnablePadEmu);

if (gPadEmuSource == SETTINGS_PERGAME) {
result = configSetInt(configSet, CONFIG_ITEM_PADEMUSOURCE, gPadEmuSource);
if (EnablePadEmu != 0)
result = configSetInt(configSet, CONFIG_ITEM_ENABLEPADEMU, EnablePadEmu);
else
configRemoveKey(configSet, CONFIG_ITEM_ENABLEPADEMU);

if (PadEmuSettings != 0)
result = configSetInt(configSet, CONFIG_ITEM_PADEMUSETTINGS, PadEmuSettings);
else
configRemoveKey(configSet, CONFIG_ITEM_PADEMUSETTINGS);
} else if (gPadEmuSource == SETTINGS_GLOBAL) {
configSetInt(configGame, CONFIG_ITEM_ENABLEPADEMU, EnablePadEmu);
configSetInt(configGame, CONFIG_ITEM_PADEMUSETTINGS, PadEmuSettings);
}
result = guiGameSavePadEmuGameConfig(configSet, result);
guiGameSavePadEmuGlobalConfig(configGame);
#endif

diaGetString(diaCompatConfig, COMPAT_GAMEID, hexid, sizeof(hexid));
Expand Down Expand Up @@ -1039,12 +1062,14 @@ static void guiGameLoadPadEmuConfig(config_set_t *configSet, config_set_t *confi
configGetInt(configGame, CONFIG_ITEM_PADEMUSETTINGS, &PadEmuSettings);

// override global with per-game settings if available and selected.
configGetInt(configSet, CONFIG_ITEM_PADEMUSOURCE, &gPadEmuSource);
if (gPadEmuSource == SETTINGS_PERGAME) {
if (!configGetInt(configSet, CONFIG_ITEM_ENABLEPADEMU, &EnablePadEmu))
EnablePadEmu = 0;
if (!configGetInt(configSet, CONFIG_ITEM_PADEMUSETTINGS, &PadEmuSettings))
PadEmuSettings = 0;
if (!forceGlobalPadEmu) {
configGetInt(configSet, CONFIG_ITEM_PADEMUSOURCE, &gPadEmuSource);
if (gPadEmuSource == SETTINGS_PERGAME) {
if (!configGetInt(configSet, CONFIG_ITEM_ENABLEPADEMU, &EnablePadEmu))
EnablePadEmu = 0;
if (!configGetInt(configSet, CONFIG_ITEM_PADEMUSETTINGS, &PadEmuSettings))
PadEmuSettings = 0;
}
}
// set gui settings.
int PadEmuMtap = (PadEmuSettings >> 24) & 1;
Expand Down
3 changes: 2 additions & 1 deletion src/lang.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ static char *internalEnglish[LANG_STR_COUNT] = {
"Game Settings",
"Remove Settings",
"Removed all keys for the game.",
"Scrolling",
"Scrolling Speed",
"Slow",
"Medium",
"Fast",
Expand Down Expand Up @@ -289,6 +289,7 @@ static char *internalEnglish[LANG_STR_COUNT] = {
"Description",
"BDM Games",
"Select Block Devices",
"Controller Settings",
};

static int guiLangID = 0;
Expand Down
11 changes: 10 additions & 1 deletion src/menusys.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ enum MENU_IDs {
MENU_SETTINGS = 0,
MENU_GFX_SETTINGS,
MENU_AUDIO_SETTINGS,
MENU_CONTROLLER_SETTINGS,
MENU_PARENTAL_LOCK,
MENU_NET_CONFIG,
MENU_NET_UPDATE,
Expand Down Expand Up @@ -205,6 +206,7 @@ static void menuInitMainMenu(void)
submenuAppendItem(&mainMenu, -1, NULL, MENU_SETTINGS, _STR_SETTINGS);
submenuAppendItem(&mainMenu, -1, NULL, MENU_GFX_SETTINGS, _STR_GFX_SETTINGS);
submenuAppendItem(&mainMenu, -1, NULL, MENU_AUDIO_SETTINGS, _STR_AUDIO_SETTINGS);
submenuAppendItem(&mainMenu, -1, NULL, MENU_CONTROLLER_SETTINGS, _STR_CONTROLLER_SETTINGS);
submenuAppendItem(&mainMenu, -1, NULL, MENU_PARENTAL_LOCK, _STR_PARENLOCKCONFIG);
submenuAppendItem(&mainMenu, -1, NULL, MENU_NET_CONFIG, _STR_NETCONFIG);
submenuAppendItem(&mainMenu, -1, NULL, MENU_NET_UPDATE, _STR_NET_UPDATE);
Expand Down Expand Up @@ -830,6 +832,9 @@ void menuHandleInputMenu()
} else if (id == MENU_AUDIO_SETTINGS) {
if (menuCheckParentalLock() == 0)
guiShowAudioConfig();
} else if (id == MENU_CONTROLLER_SETTINGS) {
if (menuCheckParentalLock() == 0)
guiShowControllerConfig();
} else if (id == MENU_PARENTAL_LOCK) {
if (menuCheckParentalLock() == 0)
guiShowParentalLockConfig();
Expand All @@ -847,6 +852,10 @@ void menuHandleInputMenu()
} else if (id == MENU_SAVE_CHANGES) {
if (menuCheckParentalLock() == 0) {
saveConfig(CONFIG_OPL | CONFIG_NETWORK, 1);
#ifdef PADEMU
guiGameSavePadEmuGlobalConfig(configGetByType(CONFIG_GAME));
saveConfig(CONFIG_GAME, 0);
#endif
menuSetParentalLockCheckState(1); // Re-enable parental lock check.
}
} else if (id == MENU_EXIT) {
Expand Down Expand Up @@ -1062,7 +1071,7 @@ void menuHandleInputGameMenu()
guiGameShowVMCMenu(selected_item->item->current->item.id, selected_item->item->userdata);
#ifdef PADEMU
} else if (menuID == GAME_PADEMU_SETTINGS) {
guiGameShowPadEmuConfig();
guiGameShowPadEmuConfig(0);
#endif
} else if (menuID == GAME_SAVE_CHANGES) {
if (guiGameSaveConfig(itemConfig, selected_item->item->userdata))
Expand Down

0 comments on commit c2c0f53

Please sign in to comment.