(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 **buffer;
const char *label; const char *label;
const char *label_setting;
bool display; bool display;
} keyboard; } 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 (!strcmp(setting->name, "netplay_tcp_udp_port"))
{ {
if (action == MENU_ACTION_OK) 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) else if (action == MENU_ACTION_START)
*setting->value.unsigned_integer = setting->default_value.unsigned_integer; *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; break;
case MENU_SETTINGS_DRIVER_AUDIO_DEVICE: case MENU_SETTINGS_DRIVER_AUDIO_DEVICE:
if (action == MENU_ACTION_OK) 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) else if (action == MENU_ACTION_START)
*g_settings.audio.device = '\0'; *g_settings.audio.device = '\0';
break; break;
@ -3621,7 +3621,7 @@ static int menu_common_setting_set(unsigned id, unsigned action, rarch_setting_t
} }
case MENU_SETTINGS_SHADER_PRESET_SAVE: case MENU_SETTINGS_SHADER_PRESET_SAVE:
if (action == MENU_ACTION_OK) 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; break;
#endif #endif
#ifdef _XBOX1 #ifdef _XBOX1
@ -3668,14 +3668,14 @@ static int menu_common_setting_set(unsigned id, unsigned action, rarch_setting_t
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
case MENU_SETTINGS_NETPLAY_HOST_IP_ADDRESS: case MENU_SETTINGS_NETPLAY_HOST_IP_ADDRESS:
if (action == MENU_ACTION_OK) 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) else if (action == MENU_ACTION_START)
*g_extern.netplay_server = '\0'; *g_extern.netplay_server = '\0';
break; break;
#endif #endif
case MENU_SETTINGS_NETPLAY_NICKNAME: case MENU_SETTINGS_NETPLAY_NICKNAME:
if (action == MENU_ACTION_OK) 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) else if (action == MENU_ACTION_START)
*g_settings.username = '\0'; *g_settings.username = '\0';
break; break;

View File

@ -34,16 +34,17 @@ void menu_common_setting_set_current_string(rarch_setting_t *setting,
const char *str); const char *str);
void menu_key_start_line(void *data, const char *label, 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; menu_handle_t *menu = (menu_handle_t*)data;
if (!menu) if (!menu)
return; return;
menu->keyboard.display = true; menu->keyboard.display = true;
menu->keyboard.label = label; menu->keyboard.label = label;
menu->keyboard.buffer = input_keyboard_start_line(menu, cb); menu->keyboard.label_setting = label_setting;
menu->keyboard.buffer = input_keyboard_start_line(menu, cb);
} }
static void menu_key_end_line(void *data) static void menu_key_end_line(void *data)
@ -53,8 +54,9 @@ static void menu_key_end_line(void *data)
if (!menu) if (!menu)
return; return;
menu->keyboard.display = false; menu->keyboard.display = false;
menu->keyboard.label = NULL; menu->keyboard.label = NULL;
menu->keyboard.label_setting = NULL;
/* Avoid triggering states on pressing return. */ /* Avoid triggering states on pressing return. */
menu->old_input_state = -1ULL; menu->old_input_state = -1ULL;
@ -69,7 +71,7 @@ static void menu_search_callback(void *userdata, const char *str)
menu_key_end_line(menu); 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; menu_handle_t *menu = (menu_handle_t*)userdata;
rarch_setting_t *current_setting = NULL; 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 (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); *current_setting->value.unsigned_integer = strtoul(str, NULL, 0);
} }
menu_key_end_line(menu); 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 #ifdef HAVE_NETPLAY
void netplay_ipaddress_callback(void *userdata, const char *str) void netplay_ipaddress_callback(void *userdata, const char *str)
{ {
@ -94,30 +110,11 @@ void netplay_ipaddress_callback(void *userdata, const char *str)
} }
#endif #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) void audio_device_callback(void *userdata, const char *str)
{ {
menu_handle_t *menu = (menu_handle_t*)userdata; 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) if (str && *str)
strlcpy(g_settings.audio.device, str, sizeof(g_settings.audio.device)); strlcpy(g_settings.audio.device, str, sizeof(g_settings.audio.device));
menu_key_end_line(menu); 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; 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 if (driver.menu_ctx && driver.menu_ctx->backend
&& driver.menu_ctx->backend->shader_manager_save_preset) && driver.menu_ctx->backend->shader_manager_save_preset)
driver.menu_ctx->backend->shader_manager_save_preset(str && *str ? str : NULL, false); driver.menu_ctx->backend->shader_manager_save_preset(str && *str ? str : NULL, false);

View File

@ -20,13 +20,15 @@
#include "menu_common.h" #include "menu_common.h"
#include "../../input/keyboard_line.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_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 audio_device_callback(void *userdata, const char *str);
void preset_filename_callback(void *userdata, const char *str); void preset_filename_callback(void *userdata, const char *str);