(Menu) Refactor menu_key_start_line

This commit is contained in:
twinaphex 2014-08-25 14:53:03 +02:00
parent dc086d62b5
commit f939fb3684
4 changed files with 36 additions and 42 deletions

View File

@ -118,6 +118,7 @@ typedef struct
{
const char **buffer;
const char *label;
const char *label_setting;
bool display;
} keyboard;

View File

@ -1976,7 +1976,7 @@ static void menu_common_setting_set_current_unsigned_integer(rarch_setting_t *se
if (!strcmp(setting->name, "netplay_tcp_udp_port"))
{
if (action == MENU_ACTION_OK)
menu_key_start_line(driver.menu, "TCP/UDP Port: ", netplay_port_callback);
menu_key_start_line(driver.menu, "TCP/UDP Port: ", setting->name, st_uint_callback);
else if (action == MENU_ACTION_START)
*setting->value.unsigned_integer = setting->default_value.unsigned_integer;
}
@ -3413,7 +3413,7 @@ static int menu_common_setting_set(unsigned id, unsigned action, rarch_setting_t
break;
case MENU_SETTINGS_DRIVER_AUDIO_DEVICE:
if (action == MENU_ACTION_OK)
menu_key_start_line(driver.menu, "Audio Device Name / IP: ", audio_device_callback);
menu_key_start_line(driver.menu, "Audio Device Name / IP: ", "audio_device", audio_device_callback);
else if (action == MENU_ACTION_START)
*g_settings.audio.device = '\0';
break;
@ -3621,7 +3621,7 @@ static int menu_common_setting_set(unsigned id, unsigned action, rarch_setting_t
}
case MENU_SETTINGS_SHADER_PRESET_SAVE:
if (action == MENU_ACTION_OK)
menu_key_start_line(driver.menu, "Preset Filename: ", preset_filename_callback);
menu_key_start_line(driver.menu, "Preset Filename: ", "shader_preset_save", preset_filename_callback);
break;
#endif
#ifdef _XBOX1
@ -3668,14 +3668,14 @@ static int menu_common_setting_set(unsigned id, unsigned action, rarch_setting_t
#ifdef HAVE_NETPLAY
case MENU_SETTINGS_NETPLAY_HOST_IP_ADDRESS:
if (action == MENU_ACTION_OK)
menu_key_start_line(driver.menu, "IP Address: ", netplay_ipaddress_callback);
menu_key_start_line(driver.menu, "IP Address: ", "netplay_ip_address", netplay_ipaddress_callback);
else if (action == MENU_ACTION_START)
*g_extern.netplay_server = '\0';
break;
#endif
case MENU_SETTINGS_NETPLAY_NICKNAME:
if (action == MENU_ACTION_OK)
menu_key_start_line(driver.menu, "Username: ", netplay_nickname_callback);
menu_key_start_line(driver.menu, "Username: ", "netplay_nickname", st_string_callback);
else if (action == MENU_ACTION_START)
*g_settings.username = '\0';
break;

View File

@ -34,16 +34,17 @@ void menu_common_setting_set_current_string(rarch_setting_t *setting,
const char *str);
void menu_key_start_line(void *data, const char *label,
input_keyboard_line_complete_t cb)
const char *label_setting, input_keyboard_line_complete_t cb)
{
menu_handle_t *menu = (menu_handle_t*)data;
if (!menu)
return;
menu->keyboard.display = true;
menu->keyboard.label = label;
menu->keyboard.buffer = input_keyboard_start_line(menu, cb);
menu->keyboard.display = true;
menu->keyboard.label = label;
menu->keyboard.label_setting = label_setting;
menu->keyboard.buffer = input_keyboard_start_line(menu, cb);
}
static void menu_key_end_line(void *data)
@ -53,8 +54,9 @@ static void menu_key_end_line(void *data)
if (!menu)
return;
menu->keyboard.display = false;
menu->keyboard.label = NULL;
menu->keyboard.display = false;
menu->keyboard.label = NULL;
menu->keyboard.label_setting = NULL;
/* Avoid triggering states on pressing return. */
menu->old_input_state = -1ULL;
@ -69,7 +71,7 @@ static void menu_search_callback(void *userdata, const char *str)
menu_key_end_line(menu);
}
void netplay_port_callback(void *userdata, const char *str)
void st_uint_callback(void *userdata, const char *str)
{
menu_handle_t *menu = (menu_handle_t*)userdata;
rarch_setting_t *current_setting = NULL;
@ -77,12 +79,26 @@ void netplay_port_callback(void *userdata, const char *str)
if (str && *str && setting_data)
{
if ((current_setting = (rarch_setting_t*)setting_data_find_setting(setting_data, "netplay_tcp_udp_port")))
if ((current_setting = (rarch_setting_t*)setting_data_find_setting(setting_data, menu->keyboard.label_setting)))
*current_setting->value.unsigned_integer = strtoul(str, NULL, 0);
}
menu_key_end_line(menu);
}
void st_string_callback(void *userdata, const char *str)
{
menu_handle_t *menu = (menu_handle_t*)userdata;
rarch_setting_t *current_setting = NULL;
rarch_setting_t *setting_data = (rarch_setting_t *)setting_data_get_list();
if (str && *str && setting_data)
{
if ((current_setting = (rarch_setting_t*)setting_data_find_setting(setting_data, menu->keyboard.label_setting)))
menu_common_setting_set_current_string(current_setting, str);
}
menu_key_end_line(menu);
}
#ifdef HAVE_NETPLAY
void netplay_ipaddress_callback(void *userdata, const char *str)
{
@ -94,30 +110,11 @@ void netplay_ipaddress_callback(void *userdata, const char *str)
}
#endif
void netplay_nickname_callback(void *userdata, const char *str)
{
menu_handle_t *menu = (menu_handle_t*)userdata;
rarch_setting_t *current_setting = NULL;
rarch_setting_t *setting_data = (rarch_setting_t *)setting_data_get_list();
if (str && *str && setting_data)
{
if ((current_setting = (rarch_setting_t*)setting_data_find_setting(setting_data, "netplay_nickname")))
menu_common_setting_set_current_string(current_setting, str);
}
menu_key_end_line(menu);
}
void audio_device_callback(void *userdata, const char *str)
{
menu_handle_t *menu = (menu_handle_t*)userdata;
if (!menu)
{
RARCH_ERR("Cannot invoke audio device setting callback, menu handle is not initialized.\n");
return;
}
if (str && *str)
strlcpy(g_settings.audio.device, str, sizeof(g_settings.audio.device));
menu_key_end_line(menu);
@ -128,12 +125,6 @@ void preset_filename_callback(void *userdata, const char *str)
{
menu_handle_t *menu = (menu_handle_t*)userdata;
if (!menu)
{
RARCH_ERR("Cannot invoke preset setting callback, menu handle is not initialized.\n");
return;
}
if (driver.menu_ctx && driver.menu_ctx->backend
&& driver.menu_ctx->backend->shader_manager_save_preset)
driver.menu_ctx->backend->shader_manager_save_preset(str && *str ? str : NULL, false);

View File

@ -20,13 +20,15 @@
#include "menu_common.h"
#include "../../input/keyboard_line.h"
void menu_key_event(bool down, unsigned keycode, uint32_t character, uint16_t key_modifiers);
void menu_key_event(bool down, unsigned keycode, uint32_t character,
uint16_t key_modifiers);
void menu_key_start_line(void *data, const char *label,
const char *label_setting, input_keyboard_line_complete_t cb);
void menu_key_start_line(void *data, const char *label, input_keyboard_line_complete_t cb);
void st_uint_callback(void *userdata, const char *str);
void st_string_callback(void *userdata, const char *str);
void netplay_port_callback(void *userdata, const char *str);
void netplay_ipaddress_callback(void *userdata, const char *str);
void netplay_nickname_callback(void *userdata, const char *str);
void audio_device_callback(void *userdata, const char *str);
void preset_filename_callback(void *userdata, const char *str);