(PS3) menu code/file browser refactoring
This commit is contained in:
parent
3eddb91750
commit
8e2c3717de
|
@ -29,7 +29,7 @@ const char * path, const char * extensions)
|
|||
dir_list_sort(filebrowser->current_dir.elems, true);
|
||||
}
|
||||
|
||||
void filebrowser_new(filebrowser_t * filebrowser, const char * start_dir,
|
||||
static void filebrowser_new(filebrowser_t * filebrowser, const char * start_dir,
|
||||
const char * extensions)
|
||||
{
|
||||
filebrowser->directory_stack_size = 0;
|
||||
|
@ -38,6 +38,11 @@ const char * extensions)
|
|||
filebrowser_parse_directory(filebrowser, start_dir, extensions);
|
||||
}
|
||||
|
||||
void filebrowser_set_root(filebrowser_t *filebrowser, const char *root_dir)
|
||||
{
|
||||
strlcpy(filebrowser->root_dir, root_dir, sizeof(filebrowser->root_dir));
|
||||
}
|
||||
|
||||
void filebrowser_free(filebrowser_t * filebrowser)
|
||||
{
|
||||
dir_list_free(filebrowser->current_dir.elems);
|
||||
|
@ -47,7 +52,7 @@ void filebrowser_free(filebrowser_t * filebrowser)
|
|||
filebrowser->current_dir.ptr = 0;
|
||||
}
|
||||
|
||||
void filebrowser_push_directory(filebrowser_t * filebrowser, const char * path,
|
||||
static void filebrowser_push_directory(filebrowser_t * filebrowser, const char * path,
|
||||
bool with_extension)
|
||||
{
|
||||
filebrowser->directory_stack_size++;
|
||||
|
@ -57,7 +62,7 @@ bool with_extension)
|
|||
filebrowser_parse_directory(filebrowser, path, "empty");
|
||||
}
|
||||
|
||||
void filebrowser_pop_directory (filebrowser_t * filebrowser)
|
||||
static void filebrowser_pop_directory (filebrowser_t * filebrowser)
|
||||
{
|
||||
if (filebrowser->directory_stack_size > 0)
|
||||
filebrowser->directory_stack_size--;
|
||||
|
@ -86,16 +91,71 @@ void filebrowser_set_current_at (filebrowser_t *filebrowser, size_t pos)
|
|||
filebrowser->current_dir.ptr = pos;
|
||||
}
|
||||
|
||||
void filebrowser_set_current_increment (filebrowser_t *filebrowser, bool allow_wraparound)
|
||||
static void filebrowser_set_current_increment (filebrowser_t *filebrowser, bool allow_wraparound)
|
||||
{
|
||||
filebrowser->current_dir.ptr++;
|
||||
if (filebrowser->current_dir.ptr >= filebrowser->current_dir.size && allow_wraparound)
|
||||
filebrowser->current_dir.ptr = 0;
|
||||
}
|
||||
|
||||
void filebrowser_set_current_decrement (filebrowser_t *filebrowser, bool allow_wraparound)
|
||||
static void filebrowser_set_current_decrement (filebrowser_t *filebrowser, bool allow_wraparound)
|
||||
{
|
||||
filebrowser->current_dir.ptr--;
|
||||
if (filebrowser->current_dir.ptr >= filebrowser->current_dir.size && allow_wraparound)
|
||||
filebrowser->current_dir.ptr = filebrowser->current_dir.size - 1;
|
||||
}
|
||||
|
||||
void filebrowser_iterate(filebrowser_t *filebrowser, filebrowser_action_t action)
|
||||
{
|
||||
int entries_to_scroll = 19;
|
||||
|
||||
switch(action)
|
||||
{
|
||||
case FILEBROWSER_ACTION_UP:
|
||||
filebrowser_set_current_decrement(filebrowser, true);
|
||||
break;
|
||||
case FILEBROWSER_ACTION_DOWN:
|
||||
filebrowser_set_current_increment(filebrowser, true);
|
||||
break;
|
||||
case FILEBROWSER_ACTION_LEFT:
|
||||
if (filebrowser->current_dir.ptr <= 5)
|
||||
filebrowser->current_dir.ptr = 0;
|
||||
else
|
||||
filebrowser->current_dir.ptr -= 5;
|
||||
break;
|
||||
case FILEBROWSER_ACTION_RIGHT:
|
||||
filebrowser->current_dir.ptr = (min(filebrowser->current_dir.ptr + 5,
|
||||
filebrowser->current_dir.size-1));
|
||||
break;
|
||||
case FILEBROWSER_ACTION_SCROLL_UP:
|
||||
if (filebrowser->current_dir.ptr <= entries_to_scroll)
|
||||
filebrowser->current_dir.ptr= 0;
|
||||
else
|
||||
filebrowser->current_dir.ptr -= entries_to_scroll;
|
||||
break;
|
||||
case FILEBROWSER_ACTION_SCROLL_UP_SMOOTH:
|
||||
if (filebrowser->current_dir.ptr <= 50)
|
||||
filebrowser->current_dir.ptr= 0;
|
||||
else
|
||||
filebrowser->current_dir.ptr -= 50;
|
||||
break;
|
||||
case FILEBROWSER_ACTION_SCROLL_DOWN:
|
||||
filebrowser->current_dir.ptr = (min(filebrowser->current_dir.ptr +
|
||||
entries_to_scroll, filebrowser->current_dir.size-1));
|
||||
break;
|
||||
case FILEBROWSER_ACTION_SCROLL_DOWN_SMOOTH:
|
||||
filebrowser->current_dir.ptr = (min(filebrowser->current_dir.ptr + 50,
|
||||
filebrowser->current_dir.size-1));
|
||||
if(!filebrowser->current_dir.ptr) filebrowser->current_dir.ptr = 0;
|
||||
break;
|
||||
case FILEBROWSER_ACTION_OK:
|
||||
filebrowser_push_directory(filebrowser, filebrowser_get_current_path(filebrowser), true);
|
||||
break;
|
||||
case FILEBROWSER_ACTION_CANCEL:
|
||||
filebrowser_pop_directory(filebrowser);
|
||||
break;
|
||||
case FILEBROWSER_ACTION_RESET:
|
||||
filebrowser_new(filebrowser, filebrowser->root_dir, filebrowser->extensions);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,18 +31,32 @@ typedef struct
|
|||
size_t size;
|
||||
size_t ptr;
|
||||
} current_dir;
|
||||
char root_dir[PATH_MAX];
|
||||
char extensions[PATH_MAX];
|
||||
} filebrowser_t;
|
||||
|
||||
void filebrowser_new(filebrowser_t *filebrowser, const char * start_dir, const char * extensions);
|
||||
void filebrowser_free(filebrowser_t *filebrowser);
|
||||
void filebrowser_push_directory(filebrowser_t * filebrowser, const char * path, bool with_extension);
|
||||
void filebrowser_pop_directory (filebrowser_t * filebrowser);
|
||||
typedef enum
|
||||
{
|
||||
FILEBROWSER_ACTION_UP,
|
||||
FILEBROWSER_ACTION_DOWN,
|
||||
FILEBROWSER_ACTION_LEFT,
|
||||
FILEBROWSER_ACTION_RIGHT,
|
||||
FILEBROWSER_ACTION_OK,
|
||||
FILEBROWSER_ACTION_CANCEL,
|
||||
FILEBROWSER_ACTION_SCROLL_UP,
|
||||
FILEBROWSER_ACTION_SCROLL_UP_SMOOTH,
|
||||
FILEBROWSER_ACTION_SCROLL_DOWN,
|
||||
FILEBROWSER_ACTION_SCROLL_DOWN_SMOOTH,
|
||||
FILEBROWSER_ACTION_RESET,
|
||||
FILEBROWSER_ACTION_NOOP
|
||||
} filebrowser_action_t;
|
||||
|
||||
const char * filebrowser_get_current_dir (filebrowser_t *filebrowser);
|
||||
const char * filebrowser_get_current_path (filebrowser_t *filebrowser);
|
||||
size_t filebrowser_get_current_index (filebrowser_t *filebrowser);
|
||||
void filebrowser_set_root(filebrowser_t *filebrowser, const char *root_dir);
|
||||
void filebrowser_free(filebrowser_t *filebrowser);
|
||||
void filebrowser_set_current_at (filebrowser_t *filebrowser, size_t pos);
|
||||
void filebrowser_set_current_increment (filebrowser_t *filebrowser, bool allow_wraparound);
|
||||
void filebrowser_set_current_decrement (filebrowser_t *filebrowser, bool allow_wraparound);
|
||||
void filebrowser_iterate(filebrowser_t *filebrowser, filebrowser_action_t action);
|
||||
|
||||
#endif /* FILEBROWSER_H_ */
|
||||
|
|
366
ps3/menu.c
366
ps3/menu.c
|
@ -205,7 +205,7 @@ static void set_delay_speed(unsigned delaymode)
|
|||
SET_TIMER_EXPIRATION(gl, speed);
|
||||
}
|
||||
|
||||
static void browser_update(filebrowser_t * b)
|
||||
static void browser_update(filebrowser_t * b, const char *extensions)
|
||||
{
|
||||
uint64_t state, diff_state, button_was_pressed;
|
||||
gl_t * gl = driver.video_data;
|
||||
|
@ -217,111 +217,79 @@ static void browser_update(filebrowser_t * b)
|
|||
if(IS_TIMER_EXPIRED(gl))
|
||||
{
|
||||
set_delay = DELAY_NONE;
|
||||
filebrowser_action_t action = FILEBROWSER_ACTION_NOOP;
|
||||
|
||||
if (CTRL_LSTICK_DOWN(state))
|
||||
{
|
||||
if(b->current_dir.ptr < b->current_dir.size-1)
|
||||
{
|
||||
filebrowser_set_current_increment(b, true);
|
||||
set_delay = DELAY_SMALLEST;
|
||||
}
|
||||
}
|
||||
|
||||
if (CTRL_DOWN(state))
|
||||
{
|
||||
if(b->current_dir.ptr < b->current_dir.size-1)
|
||||
{
|
||||
filebrowser_set_current_increment(b, true);
|
||||
set_delay = DELAY_SMALLEST;
|
||||
}
|
||||
}
|
||||
|
||||
if (CTRL_LSTICK_UP(state))
|
||||
{
|
||||
if(b->current_dir.ptr > 0)
|
||||
{
|
||||
filebrowser_set_current_decrement(b, true);
|
||||
set_delay = DELAY_SMALLEST;
|
||||
}
|
||||
}
|
||||
|
||||
if (CTRL_UP(state))
|
||||
{
|
||||
if(b->current_dir.ptr > 0)
|
||||
{
|
||||
filebrowser_set_current_decrement(b, true);
|
||||
set_delay = DELAY_SMALLEST;
|
||||
}
|
||||
}
|
||||
|
||||
if (CTRL_RIGHT(state))
|
||||
{
|
||||
b->current_dir.ptr = (MIN(b->current_dir.ptr + 5, b->current_dir.size-1));
|
||||
set_delay = DELAY_SMALL;
|
||||
}
|
||||
|
||||
if (CTRL_LSTICK_RIGHT(state))
|
||||
{
|
||||
b->current_dir.ptr = (MIN(b->current_dir.ptr + 5, b->current_dir.size-1));
|
||||
action = FILEBROWSER_ACTION_DOWN;
|
||||
set_delay = DELAY_SMALLEST;
|
||||
}
|
||||
|
||||
if (CTRL_LEFT(state))
|
||||
else if (CTRL_DOWN(state))
|
||||
{
|
||||
if (b->current_dir.ptr <= 5)
|
||||
b->current_dir.ptr = 0;
|
||||
else
|
||||
b->current_dir.ptr -= 5;
|
||||
|
||||
set_delay = DELAY_SMALL;
|
||||
}
|
||||
|
||||
if (CTRL_LSTICK_LEFT(state))
|
||||
{
|
||||
if (b->current_dir.ptr <= 5)
|
||||
b->current_dir.ptr = 0;
|
||||
else
|
||||
b->current_dir.ptr -= 5;
|
||||
|
||||
action = FILEBROWSER_ACTION_DOWN;
|
||||
set_delay = DELAY_SMALLEST;
|
||||
}
|
||||
|
||||
if (CTRL_R1(state))
|
||||
else if (CTRL_LSTICK_UP(state))
|
||||
{
|
||||
b->current_dir.ptr = (MIN(b->current_dir.ptr + NUM_ENTRY_PER_PAGE, b->current_dir.size-1));
|
||||
set_delay = DELAY_MEDIUM;
|
||||
action = FILEBROWSER_ACTION_UP;
|
||||
set_delay = DELAY_SMALLEST;
|
||||
}
|
||||
|
||||
if (CTRL_R2(state))
|
||||
else if (CTRL_UP(state))
|
||||
{
|
||||
b->current_dir.ptr = (MIN(b->current_dir.ptr + 50, b->current_dir.size-1));
|
||||
if(!b->current_dir.ptr)
|
||||
b->current_dir.ptr = 0;
|
||||
action = FILEBROWSER_ACTION_UP;
|
||||
set_delay = DELAY_SMALLEST;
|
||||
}
|
||||
else if (CTRL_RIGHT(state))
|
||||
{
|
||||
action = FILEBROWSER_ACTION_RIGHT;
|
||||
set_delay = DELAY_SMALL;
|
||||
}
|
||||
|
||||
if (CTRL_L2(state))
|
||||
else if (CTRL_LSTICK_RIGHT(state))
|
||||
{
|
||||
if (b->current_dir.ptr <= 50)
|
||||
b->current_dir.ptr= 0;
|
||||
else
|
||||
b->current_dir.ptr -= 50;
|
||||
|
||||
action = FILEBROWSER_ACTION_RIGHT;
|
||||
set_delay = DELAY_SMALLEST;
|
||||
}
|
||||
else if (CTRL_LEFT(state))
|
||||
{
|
||||
action = FILEBROWSER_ACTION_LEFT;
|
||||
set_delay = DELAY_SMALL;
|
||||
}
|
||||
|
||||
if (CTRL_L1(state))
|
||||
else if (CTRL_LSTICK_LEFT(state))
|
||||
{
|
||||
if (b->current_dir.ptr <= NUM_ENTRY_PER_PAGE)
|
||||
b->current_dir.ptr= 0;
|
||||
else
|
||||
b->current_dir.ptr -= NUM_ENTRY_PER_PAGE;
|
||||
|
||||
action = FILEBROWSER_ACTION_LEFT;
|
||||
set_delay = DELAY_SMALLEST;
|
||||
}
|
||||
else if (CTRL_R1(state))
|
||||
{
|
||||
action = FILEBROWSER_ACTION_SCROLL_DOWN;
|
||||
set_delay = DELAY_MEDIUM;
|
||||
}
|
||||
else if (CTRL_R2(state))
|
||||
{
|
||||
action = FILEBROWSER_ACTION_SCROLL_DOWN_SMOOTH;
|
||||
set_delay = DELAY_SMALL;
|
||||
}
|
||||
else if (CTRL_L2(state))
|
||||
{
|
||||
action = FILEBROWSER_ACTION_SCROLL_UP_SMOOTH;
|
||||
set_delay = DELAY_SMALL;
|
||||
}
|
||||
else if (CTRL_L1(state))
|
||||
{
|
||||
action = FILEBROWSER_ACTION_SCROLL_UP;
|
||||
set_delay = DELAY_MEDIUM;
|
||||
}
|
||||
else if (CTRL_CIRCLE(button_was_pressed))
|
||||
action = FILEBROWSER_ACTION_CANCEL;
|
||||
else if (CTRL_START(button_was_pressed))
|
||||
{
|
||||
action = FILEBROWSER_ACTION_RESET;
|
||||
filebrowser_set_root(b, "/");
|
||||
strlcpy(b->extensions, extensions, sizeof(b->extensions));
|
||||
}
|
||||
|
||||
if (CTRL_CIRCLE(button_was_pressed))
|
||||
filebrowser_pop_directory(b);
|
||||
if(action != FILEBROWSER_ACTION_NOOP)
|
||||
filebrowser_iterate(b, action);
|
||||
|
||||
old_state = state;
|
||||
}
|
||||
|
@ -873,16 +841,16 @@ static void select_file(uint32_t menu_id)
|
|||
|
||||
if(set_initial_dir_tmpbrowser)
|
||||
{
|
||||
filebrowser_new(&tmpBrowser, dir_path, extensions);
|
||||
strlcpy(tmpBrowser.extensions, extensions, sizeof(tmpBrowser.extensions));
|
||||
filebrowser_set_root(&tmpBrowser, dir_path);
|
||||
filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET);
|
||||
set_initial_dir_tmpbrowser = false;
|
||||
}
|
||||
|
||||
browser_update(&tmpBrowser);
|
||||
|
||||
if(IS_TIMER_EXPIRED(gl))
|
||||
{
|
||||
if (CTRL_START(button_was_pressed))
|
||||
filebrowser_new(&tmpBrowser, "/", extensions);
|
||||
browser_update(&tmpBrowser, extensions);
|
||||
|
||||
if (CTRL_CROSS(button_was_pressed))
|
||||
{
|
||||
|
@ -891,12 +859,9 @@ static void select_file(uint32_t menu_id)
|
|||
/*if 'filename' is in fact '..' - then pop back directory instead of
|
||||
adding '..' to filename path */
|
||||
if(tmpBrowser.current_dir.ptr == 0)
|
||||
filebrowser_pop_directory(&tmpBrowser);
|
||||
filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_CANCEL);
|
||||
else
|
||||
{
|
||||
snprintf(path, sizeof(path), filebrowser_get_current_path(&tmpBrowser));
|
||||
filebrowser_push_directory(&tmpBrowser, path, true);
|
||||
}
|
||||
filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_OK);
|
||||
}
|
||||
else if (path_file_exists(filebrowser_get_current_path(&tmpBrowser)))
|
||||
{
|
||||
|
@ -944,8 +909,7 @@ static void select_file(uint32_t menu_id)
|
|||
menuStackindex--;
|
||||
}
|
||||
}
|
||||
|
||||
if (CTRL_TRIANGLE(button_was_pressed))
|
||||
else if (CTRL_TRIANGLE(button_was_pressed))
|
||||
menuStackindex--;
|
||||
}
|
||||
|
||||
|
@ -961,7 +925,7 @@ static void select_file(uint32_t menu_id)
|
|||
|
||||
static void select_directory(uint32_t menu_id)
|
||||
{
|
||||
char path[1024], newpath[1024];
|
||||
char path[1024];
|
||||
uint64_t state, diff_state, button_was_pressed;
|
||||
gl_t * gl = driver.video_data;
|
||||
|
||||
|
@ -971,16 +935,15 @@ static void select_directory(uint32_t menu_id)
|
|||
|
||||
if(set_initial_dir_tmpbrowser)
|
||||
{
|
||||
filebrowser_new(&tmpBrowser, "/\0", "empty");
|
||||
strlcpy(tmpBrowser.extensions, "empty", sizeof(tmpBrowser.extensions));
|
||||
filebrowser_set_root(&tmpBrowser, "/");
|
||||
filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_RESET);
|
||||
set_initial_dir_tmpbrowser = false;
|
||||
}
|
||||
|
||||
browser_update(&tmpBrowser);
|
||||
|
||||
if(IS_TIMER_EXPIRED(gl))
|
||||
{
|
||||
if (CTRL_START(button_was_pressed))
|
||||
filebrowser_new(&tmpBrowser, "/","empty");
|
||||
browser_update(&tmpBrowser, "empty");
|
||||
|
||||
if (CTRL_SQUARE(button_was_pressed))
|
||||
{
|
||||
|
@ -1005,8 +968,7 @@ static void select_directory(uint32_t menu_id)
|
|||
menuStackindex--;
|
||||
}
|
||||
}
|
||||
|
||||
if (CTRL_TRIANGLE(button_was_pressed))
|
||||
else if (CTRL_TRIANGLE(button_was_pressed))
|
||||
{
|
||||
strlcpy(path, usrDirPath, sizeof(path));
|
||||
switch(menu_id)
|
||||
|
@ -1026,8 +988,7 @@ static void select_directory(uint32_t menu_id)
|
|||
}
|
||||
menuStackindex--;
|
||||
}
|
||||
|
||||
if (CTRL_CROSS(button_was_pressed))
|
||||
else if (CTRL_CROSS(button_was_pressed))
|
||||
{
|
||||
if(path_is_directory(filebrowser_get_current_path(&tmpBrowser)))
|
||||
{
|
||||
|
@ -1035,12 +996,9 @@ static void select_directory(uint32_t menu_id)
|
|||
* adding '..' to filename path */
|
||||
|
||||
if(tmpBrowser.current_dir.ptr == 0)
|
||||
filebrowser_pop_directory(&tmpBrowser);
|
||||
filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_CANCEL);
|
||||
else
|
||||
{
|
||||
snprintf(newpath, sizeof(newpath), filebrowser_get_current_path(&tmpBrowser));
|
||||
filebrowser_push_directory(&tmpBrowser, newpath, false);
|
||||
}
|
||||
filebrowser_iterate(&tmpBrowser, FILEBROWSER_ACTION_OK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1788,24 +1746,40 @@ static void producesettingentry(menu * menu_obj, uint64_t switchvalue)
|
|||
set_setting_label(menu_obj, switchvalue);
|
||||
}
|
||||
|
||||
static void select_setting(menu * menu_obj)
|
||||
typedef enum {
|
||||
SETTINGS_ACTION_DOWN,
|
||||
SETTINGS_ACTION_UP,
|
||||
SETTINGS_ACTION_TAB_PREVIOUS,
|
||||
SETTINGS_ACTION_TAB_NEXT,
|
||||
SETTINGS_ACTION_NOOP
|
||||
} settings_action_t;
|
||||
|
||||
static void settings_iterate(menu * menu_obj, settings_action_t action)
|
||||
{
|
||||
uint64_t state, diff_state, button_was_pressed, i;
|
||||
gl_t * gl = driver.video_data;
|
||||
|
||||
state = cell_pad_input_poll_device(0);
|
||||
diff_state = old_state ^ state;
|
||||
button_was_pressed = old_state & diff_state;
|
||||
|
||||
if(IS_TIMER_EXPIRED(gl))
|
||||
switch(action)
|
||||
{
|
||||
set_delay = DELAY_NONE;
|
||||
/* back to ROM menu if CIRCLE is pressed */
|
||||
if (CTRL_L1(button_was_pressed) || CTRL_CIRCLE(button_was_pressed))
|
||||
menuStackindex--;
|
||||
case SETTINGS_ACTION_DOWN:
|
||||
menu_obj->selected++;
|
||||
|
||||
if (CTRL_R1(button_was_pressed))
|
||||
{
|
||||
if (menu_obj->selected >= menu_obj->max_settings)
|
||||
menu_obj->selected = menu_obj->first_setting;
|
||||
|
||||
if (menu_obj->items[menu_obj->selected].page != menu_obj->page)
|
||||
menu_obj->page = menu_obj->items[menu_obj->selected].page;
|
||||
break;
|
||||
case SETTINGS_ACTION_UP:
|
||||
if (menu_obj->selected == menu_obj->first_setting)
|
||||
menu_obj->selected = menu_obj->max_settings-1;
|
||||
else
|
||||
menu_obj->selected--;
|
||||
|
||||
if (menu_obj->items[menu_obj->selected].page != menu_obj->page)
|
||||
menu_obj->page = menu_obj->items[menu_obj->selected].page;
|
||||
break;
|
||||
case SETTINGS_ACTION_TAB_PREVIOUS:
|
||||
menuStackindex--;
|
||||
break;
|
||||
case SETTINGS_ACTION_TAB_NEXT:
|
||||
switch(menu_obj->enum_id)
|
||||
{
|
||||
case GENERAL_VIDEO_MENU:
|
||||
|
@ -1835,37 +1809,42 @@ static void select_setting(menu * menu_obj)
|
|||
case CONTROLS_MENU:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* down to next setting */
|
||||
static void select_setting(menu * menu_obj)
|
||||
{
|
||||
uint64_t state, diff_state, button_was_pressed, i;
|
||||
gl_t * gl = driver.video_data;
|
||||
|
||||
if (CTRL_DOWN(state) || CTRL_LSTICK_DOWN(state))
|
||||
state = cell_pad_input_poll_device(0);
|
||||
diff_state = old_state ^ state;
|
||||
button_was_pressed = old_state & diff_state;
|
||||
|
||||
if(IS_TIMER_EXPIRED(gl))
|
||||
{
|
||||
settings_action_t action = SETTINGS_ACTION_NOOP;
|
||||
set_delay = DELAY_NONE;
|
||||
|
||||
/* back to ROM menu if CIRCLE is pressed */
|
||||
if (CTRL_L1(button_was_pressed) || CTRL_CIRCLE(button_was_pressed))
|
||||
action = SETTINGS_ACTION_TAB_PREVIOUS;
|
||||
else if (CTRL_R1(button_was_pressed))
|
||||
action = SETTINGS_ACTION_TAB_NEXT;
|
||||
else if (CTRL_DOWN(state) || CTRL_LSTICK_DOWN(state))
|
||||
{
|
||||
menu_obj->selected++;
|
||||
|
||||
if (menu_obj->selected >= menu_obj->max_settings)
|
||||
menu_obj->selected = menu_obj->first_setting;
|
||||
|
||||
if (menu_obj->items[menu_obj->selected].page != menu_obj->page)
|
||||
menu_obj->page = menu_obj->items[menu_obj->selected].page;
|
||||
|
||||
action = SETTINGS_ACTION_DOWN;
|
||||
set_delay = DELAY_SMALL;
|
||||
}
|
||||
else if (CTRL_UP(state) || CTRL_LSTICK_UP(state))
|
||||
{
|
||||
action = SETTINGS_ACTION_UP;
|
||||
set_delay = DELAY_SMALL;
|
||||
}
|
||||
|
||||
/* up to previous setting */
|
||||
|
||||
if (CTRL_UP(state) || CTRL_LSTICK_UP(state))
|
||||
{
|
||||
if (menu_obj->selected == menu_obj->first_setting)
|
||||
menu_obj->selected = menu_obj->max_settings-1;
|
||||
else
|
||||
menu_obj->selected--;
|
||||
|
||||
if (menu_obj->items[menu_obj->selected].page != menu_obj->page)
|
||||
menu_obj->page = menu_obj->items[menu_obj->selected].page;
|
||||
|
||||
set_delay = DELAY_SMALL;
|
||||
}
|
||||
if(action != SETTINGS_ACTION_NOOP)
|
||||
settings_iterate(menu_obj, action);
|
||||
|
||||
producesettingentry(menu_obj, menu_obj->selected);
|
||||
}
|
||||
|
@ -1891,44 +1870,24 @@ static void select_setting(menu * menu_obj)
|
|||
old_state = state;
|
||||
}
|
||||
|
||||
static void select_rom(void)
|
||||
typedef enum {
|
||||
MENU_ROMSELECT_ACTION_OK,
|
||||
MENU_ROMSELECT_ACTION_GOTO_SETTINGS,
|
||||
MENU_ROMSELECT_ACTION_NOOP,
|
||||
} menu_romselect_action_t;
|
||||
|
||||
static void menu_romselect_iterate(filebrowser_t *filebrowser, menu_romselect_action_t action)
|
||||
{
|
||||
char newpath[1024];
|
||||
uint64_t state, diff_state, button_was_pressed;
|
||||
gl_t * gl = driver.video_data;
|
||||
|
||||
state = cell_pad_input_poll_device(0);
|
||||
diff_state = old_state ^ state;
|
||||
button_was_pressed = old_state & diff_state;
|
||||
|
||||
browser_update(&browser);
|
||||
|
||||
if(IS_TIMER_EXPIRED(gl))
|
||||
switch(action)
|
||||
{
|
||||
if (CTRL_SELECT(button_was_pressed))
|
||||
{
|
||||
menuStackindex++;
|
||||
menuStack[menuStackindex] = menu_generalvideosettings;
|
||||
}
|
||||
|
||||
if (CTRL_START(button_was_pressed))
|
||||
filebrowser_new(&browser, "/", rarch_console_get_rom_ext());
|
||||
|
||||
if (CTRL_CROSS(button_was_pressed))
|
||||
{
|
||||
if(path_is_directory(filebrowser_get_current_path(&browser)))
|
||||
case MENU_ROMSELECT_ACTION_OK:
|
||||
if(path_is_directory(filebrowser_get_current_path(filebrowser)))
|
||||
{
|
||||
/*if 'filename' is in fact '..' - then pop back directory instead of adding '..' to filename path */
|
||||
|
||||
if(browser.current_dir.ptr == 0)
|
||||
{
|
||||
filebrowser_pop_directory(&browser);
|
||||
}
|
||||
filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_CANCEL);
|
||||
else
|
||||
{
|
||||
snprintf(newpath, sizeof(newpath), filebrowser_get_current_path(&browser));
|
||||
filebrowser_push_directory(&browser, newpath, true);
|
||||
}
|
||||
filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_OK);
|
||||
}
|
||||
else if (path_file_exists(filebrowser_get_current_path(&browser)))
|
||||
{
|
||||
|
@ -1937,17 +1896,45 @@ static void select_rom(void)
|
|||
retro_get_system_info(&info);
|
||||
bool block_zip_extract = info.block_extract;
|
||||
|
||||
snprintf(rom_path_temp, sizeof(rom_path_temp), filebrowser_get_current_path(&browser));
|
||||
snprintf(rom_path_temp, sizeof(rom_path_temp), filebrowser_get_current_path(filebrowser));
|
||||
|
||||
if((strstr(rom_path_temp, ".zip") || strstr(rom_path_temp, ".ZIP")) && !block_zip_extract)
|
||||
rarch_extract_zipfile(rom_path_temp);
|
||||
else
|
||||
{
|
||||
snprintf(g_console.rom_path, sizeof(g_console.rom_path), filebrowser_get_current_path(&browser));
|
||||
snprintf(g_console.rom_path, sizeof(g_console.rom_path), filebrowser_get_current_path(filebrowser));
|
||||
rarch_settings_change(S_START_RARCH);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MENU_ROMSELECT_ACTION_GOTO_SETTINGS:
|
||||
menuStackindex++;
|
||||
menuStack[menuStackindex] = menu_generalvideosettings;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void select_rom(void)
|
||||
{
|
||||
uint64_t state, diff_state, button_was_pressed;
|
||||
gl_t * gl = driver.video_data;
|
||||
|
||||
state = cell_pad_input_poll_device(0);
|
||||
diff_state = old_state ^ state;
|
||||
button_was_pressed = old_state & diff_state;
|
||||
|
||||
if(IS_TIMER_EXPIRED(gl))
|
||||
{
|
||||
browser_update(&browser, rarch_console_get_rom_ext());
|
||||
menu_romselect_action_t action = MENU_ROMSELECT_ACTION_NOOP;
|
||||
|
||||
if (CTRL_SELECT(button_was_pressed))
|
||||
action = MENU_ROMSELECT_ACTION_GOTO_SETTINGS;
|
||||
else if (CTRL_CROSS(button_was_pressed))
|
||||
action = MENU_ROMSELECT_ACTION_OK;
|
||||
|
||||
if (action != MENU_ROMSELECT_ACTION_NOOP)
|
||||
menu_romselect_iterate(&browser, action);
|
||||
}
|
||||
|
||||
if (path_is_directory(filebrowser_get_current_path(&browser)))
|
||||
|
@ -2456,7 +2443,10 @@ static void ingame_menu(uint32_t menu_id)
|
|||
|
||||
void menu_init (void)
|
||||
{
|
||||
filebrowser_new(&browser, g_console.default_rom_startup_dir, rarch_console_get_rom_ext());
|
||||
filebrowser_set_root(&browser, "/");
|
||||
filebrowser_set_root(&tmpBrowser, "/");
|
||||
strlcpy(browser.extensions, rarch_console_get_rom_ext(), sizeof(browser.extensions));
|
||||
filebrowser_iterate(&browser, FILEBROWSER_ACTION_RESET);
|
||||
}
|
||||
|
||||
void menu_free (void)
|
||||
|
|
Loading…
Reference in New Issue