(menu_list.c) Add menu_list_get_size and menu_list_get_stack_size

This commit is contained in:
twinaphex 2014-10-17 21:41:23 +02:00
parent 77a131b0f9
commit 1daf8c354e
10 changed files with 46 additions and 25 deletions

View File

@ -43,7 +43,9 @@ void file_list_push(file_list_t *list,
size_t file_list_get_size(const file_list_t *list) size_t file_list_get_size(const file_list_t *list)
{ {
return list->size; if (list)
return list->size;
return 0;
} }
size_t file_list_get_directory_ptr(const file_list_t *list) size_t file_list_get_directory_ptr(const file_list_t *list)

View File

@ -106,7 +106,7 @@ static int menu_action_ok(menu_file_list_cbs_t *cbs)
const char *path = NULL; const char *path = NULL;
unsigned type = 0; unsigned type = 0;
if (file_list_get_size(driver.menu->selection_buf) == 0) if (menu_list_get_size() == 0)
return 0; return 0;
file_list_get_at_offset(driver.menu->selection_buf, file_list_get_at_offset(driver.menu->selection_buf,
@ -208,12 +208,11 @@ static int menu_settings_iterate(unsigned action,
menu_navigation_decrement(driver.menu); menu_navigation_decrement(driver.menu);
else else
menu_navigation_set(driver.menu, menu_navigation_set(driver.menu,
file_list_get_size(driver.menu->selection_buf) - 1); menu_list_get_size() - 1);
break; break;
case MENU_ACTION_DOWN: case MENU_ACTION_DOWN:
if ((driver.menu->selection_ptr + 1) < if ((driver.menu->selection_ptr + 1) < (menu_list_get_size()))
file_list_get_size(driver.menu->selection_buf))
menu_navigation_increment(driver.menu); menu_navigation_increment(driver.menu);
else else
menu_navigation_clear(driver.menu, false); menu_navigation_clear(driver.menu, false);
@ -489,7 +488,7 @@ static int menu_load_or_open_zip_iterate(unsigned action)
file_list_get_last(driver.menu->menu_stack, &menu_path, &menu_label, file_list_get_last(driver.menu->menu_stack, &menu_path, &menu_label,
NULL); NULL);
if (file_list_get_size(driver.menu->selection_buf) == 0) if (menu_list_get_size() == 0)
return 0; return 0;
file_list_get_at_offset(driver.menu->selection_buf, file_list_get_at_offset(driver.menu->selection_buf,
@ -588,12 +587,11 @@ static int menu_common_iterate(unsigned action)
driver.menu->selection_ptr - scroll_speed); driver.menu->selection_ptr - scroll_speed);
else else
menu_navigation_set(driver.menu, menu_navigation_set(driver.menu,
file_list_get_size(driver.menu->selection_buf) - 1); menu_list_get_size() - 1);
break; break;
case MENU_ACTION_DOWN: case MENU_ACTION_DOWN:
if (driver.menu->selection_ptr + scroll_speed < if (driver.menu->selection_ptr + scroll_speed < (menu_list_get_size()))
file_list_get_size(driver.menu->selection_buf))
menu_navigation_set(driver.menu, menu_navigation_set(driver.menu,
driver.menu->selection_ptr + scroll_speed); driver.menu->selection_ptr + scroll_speed);
else else
@ -609,8 +607,7 @@ static int menu_common_iterate(unsigned action)
break; break;
case MENU_ACTION_RIGHT: case MENU_ACTION_RIGHT:
if (driver.menu->selection_ptr + fast_scroll_speed < if (driver.menu->selection_ptr + fast_scroll_speed < (menu_list_get_size()))
file_list_get_size(driver.menu->selection_buf))
menu_navigation_set(driver.menu, menu_navigation_set(driver.menu,
driver.menu->selection_ptr + fast_scroll_speed); driver.menu->selection_ptr + fast_scroll_speed);
else else

View File

@ -20,6 +20,7 @@
#include <string.h> #include <string.h>
#include <limits.h> #include <limits.h>
#include "../menu_list.h"
#include "../menu_common.h" #include "../menu_common.h"
#include "../menu_driver.h" #include "../menu_driver.h"
#include "menu_display.h" #include "menu_display.h"
@ -240,12 +241,12 @@ static void glui_frame(void)
if (driver.menu->selection_ptr >= glui->term_height / 2) if (driver.menu->selection_ptr >= glui->term_height / 2)
begin = driver.menu->selection_ptr - glui->term_height / 2; begin = driver.menu->selection_ptr - glui->term_height / 2;
end = (driver.menu->selection_ptr + glui->term_height <= end = (driver.menu->selection_ptr + glui->term_height <=
file_list_get_size(driver.menu->selection_buf)) ? menu_list_get_size()) ?
driver.menu->selection_ptr + glui->term_height : driver.menu->selection_ptr + glui->term_height :
file_list_get_size(driver.menu->selection_buf); menu_list_get_size();
/* Do not scroll if all items are visible. */ /* Do not scroll if all items are visible. */
if (file_list_get_size(driver.menu->selection_buf) <= glui->term_height) if (menu_list_get_size() <= glui->term_height)
begin = 0; begin = 0;
if (end - begin > glui->term_height) if (end - begin > glui->term_height)

View File

@ -22,6 +22,7 @@
#include <limits.h> #include <limits.h>
#include "../menu_driver.h" #include "../menu_driver.h"
#include "../menu_list.h"
#include "../menu_common.h" #include "../menu_common.h"
#include "../../../general.h" #include "../../../general.h"
#include "../../../config.def.h" #include "../../../config.def.h"
@ -278,12 +279,12 @@ static void rgui_render(void)
if (driver.menu->selection_ptr >= RGUI_TERM_HEIGHT / 2) if (driver.menu->selection_ptr >= RGUI_TERM_HEIGHT / 2)
begin = driver.menu->selection_ptr - RGUI_TERM_HEIGHT / 2; begin = driver.menu->selection_ptr - RGUI_TERM_HEIGHT / 2;
end = (driver.menu->selection_ptr + RGUI_TERM_HEIGHT <= end = (driver.menu->selection_ptr + RGUI_TERM_HEIGHT <=
file_list_get_size(driver.menu->selection_buf)) ? menu_list_get_size()) ?
driver.menu->selection_ptr + RGUI_TERM_HEIGHT : driver.menu->selection_ptr + RGUI_TERM_HEIGHT :
file_list_get_size(driver.menu->selection_buf); menu_list_get_size();
/* Do not scroll if all items are visible. */ /* Do not scroll if all items are visible. */
if (file_list_get_size(driver.menu->selection_buf) <= RGUI_TERM_HEIGHT) if (menu_list_get_size() <= RGUI_TERM_HEIGHT)
begin = 0; begin = 0;
if (end - begin > RGUI_TERM_HEIGHT) if (end - begin > RGUI_TERM_HEIGHT)

View File

@ -142,11 +142,11 @@ static void rmenu_render(void)
begin = (menu->selection_ptr >= (ENTRIES_HEIGHT / 2)) ? begin = (menu->selection_ptr >= (ENTRIES_HEIGHT / 2)) ?
(menu->selection_ptr - (ENTRIES_HEIGHT / 2)) : 0; (menu->selection_ptr - (ENTRIES_HEIGHT / 2)) : 0;
end = ((menu->selection_ptr + ENTRIES_HEIGHT) <= end = ((menu->selection_ptr + ENTRIES_HEIGHT) <=
file_list_get_size(menu->selection_buf)) ? menu_list_get_size()) ?
menu->selection_ptr + ENTRIES_HEIGHT : menu->selection_ptr + ENTRIES_HEIGHT :
file_list_get_size(menu->selection_buf); menu_list_get_size();
if (file_list_get_size(menu->selection_buf) <= ENTRIES_HEIGHT) if (menu_list_get_size() <= ENTRIES_HEIGHT)
begin = 0; begin = 0;
if (end - begin > ENTRIES_HEIGHT) if (end - begin > ENTRIES_HEIGHT)

View File

@ -365,7 +365,7 @@ static void rmenu_xui_render(void)
return; return;
begin = driver.menu->selection_ptr; begin = driver.menu->selection_ptr;
end = file_list_get_size(driver.menu->selection_buf); end = menu_list_get_size();
rmenu_xui_render_background(); rmenu_xui_render_background();

View File

@ -20,6 +20,7 @@
#include <string.h> #include <string.h>
#include <limits.h> #include <limits.h>
#include "../menu_list.h"
#include "../menu_common.h" #include "../menu_common.h"
#include "../menu_driver.h" #include "../menu_driver.h"
#include "menu_display.h" #include "menu_display.h"
@ -354,7 +355,7 @@ static void xmb_selection_pointer_changed(void)
return; return;
current = driver.menu->selection_ptr; current = driver.menu->selection_ptr;
end = file_list_get_size(driver.menu->selection_buf); end = menu_list_get_size();
for (i = 0; i < end; i++) for (i = 0; i < end; i++)
{ {
@ -392,7 +393,7 @@ static void xmb_populate_entries(void *data, const char *path,
if (!xmb) if (!xmb)
return; return;
xmb->depth = file_list_get_size(driver.menu->menu_stack); xmb->depth = menu_list_get_stack_size();
if (xmb->depth > xmb->old_depth) if (xmb->depth > xmb->old_depth)
{ {
@ -451,7 +452,7 @@ static void xmb_frame(void)
xmb_draw_text(title_msg, xmb->title_margin_left, xmb_draw_text(title_msg, xmb->title_margin_left,
gl->win_height - xmb->title_margin_top/2, 1, 1); gl->win_height - xmb->title_margin_top/2, 1, 1);
end = file_list_get_size(driver.menu->selection_buf); end = menu_list_get_size();
current = driver.menu->selection_ptr; current = driver.menu->selection_ptr;
for (i = 0; i < end; i++) for (i = 0; i < end; i++)

View File

@ -38,6 +38,20 @@ end:
file_list_free(list); file_list_free(list);
} }
size_t menu_list_get_stack_size(void)
{
if (!driver.menu)
return 0;
return file_list_get_size(driver.menu->menu_stack);
}
size_t menu_list_get_size(void)
{
if (!driver.menu)
return 0;
return file_list_get_size(driver.menu->selection_buf);
}
void menu_list_flush_stack(file_list_t *list, void menu_list_flush_stack(file_list_t *list,
unsigned final_type) unsigned final_type)
{ {

View File

@ -38,6 +38,10 @@ void menu_list_pop_stack(file_list_t *list);
void menu_list_pop_stack_by_needle(file_list_t *list, void menu_list_pop_stack_by_needle(file_list_t *list,
const char *needle); const char *needle);
size_t menu_list_get_stack_size(void);
size_t menu_list_get_size(void);
void menu_list_clear(file_list_t *list); void menu_list_clear(file_list_t *list);
void menu_list_push(file_list_t *list, void menu_list_push(file_list_t *list,

View File

@ -21,6 +21,7 @@
#include <limits.h> #include <limits.h>
#include <ctype.h> #include <ctype.h>
#include "menu_common.h" #include "menu_common.h"
#include "menu_list.h"
#include "menu_navigation.h" #include "menu_navigation.h"
void menu_navigation_clear(menu_handle_t *menu, bool pending_push) void menu_navigation_clear(menu_handle_t *menu, bool pending_push)
@ -57,7 +58,7 @@ void menu_navigation_set(menu_handle_t *menu, size_t i)
void menu_navigation_set_last(menu_handle_t *menu) void menu_navigation_set_last(menu_handle_t *menu)
{ {
menu->selection_ptr = file_list_get_size(menu->selection_buf) - 1; menu->selection_ptr = menu_list_get_size() - 1;
if (driver.menu_ctx && driver.menu_ctx->navigation_set_last) if (driver.menu_ctx && driver.menu_ctx->navigation_set_last)
driver.menu_ctx->navigation_set_last(menu); driver.menu_ctx->navigation_set_last(menu);