diff options
Diffstat (limited to 'apps/gui/list.h')
-rw-r--r-- | apps/gui/list.h | 97 |
1 files changed, 57 insertions, 40 deletions
diff --git a/apps/gui/list.h b/apps/gui/list.h index 3a613d0a67..40a27d1061 100644 --- a/apps/gui/list.h +++ b/apps/gui/list.h @@ -30,10 +30,12 @@ #define SCROLLBAR_WIDTH global_settings.scrollbar_width -enum list_wrap { - LIST_WRAP_ON = 0, - LIST_WRAP_OFF, - LIST_WRAP_UNLESS_HELD, +enum synclist_cursor +{ + SYNCLIST_CURSOR_NOSTYLE = 0, + SYNCLIST_CURSOR_INVERT, + SYNCLIST_CURSOR_COLOR, + SYNCLIST_CURSOR_GRADIENT, }; /* @@ -69,6 +71,35 @@ typedef enum themable_icons list_get_icon(int selected_item, void * data); typedef const char * list_get_name(int selected_item, void * data, char * buffer, size_t buffer_len); /* + * Draw callback + * - display : functions supplied depends on the screen call originated from (typ: MAIN) + * - list_info : a pointer to an internal struct containing item display information + */ +/* owner drawn lists need to know this info */ +struct list_putlineinfo_t { + int x; + int y; + int item_indent; + int item_offset; + int line; + + int icon; + int icon_width; + + struct screen *display; + struct viewport *vp; + struct line_desc *linedes; + struct gui_synclist * list; + const char *dsp_text; + + bool is_selected; + bool is_title; + bool show_cursor; + bool have_icons; +}; + +typedef void list_draw_item(struct list_putlineinfo_t *list_info); +/* * Voice callback * - selected_item : an integer that tells the number of the item to speak * - data : a void pointer to the data you gave to the list when you @@ -110,14 +141,24 @@ struct list_selection_color struct gui_synclist { - /* defines wether the list should stop when reaching the top/bottom - * or should continue (by going to bottom/top) */ - bool limit_scroll; - /* wether the text of the whole items of the list have to be + /*flags to hold settings show: icons, scrollbar etc..*/ + int scrollbar; + int cursor_style; + bool show_icons; + bool keyclick; + bool talk_menu; + bool wraparound; + bool scroll_paginated; + /* whether the text of the whole items of the list have to be * scrolled or only for the selected item */ bool scroll_all; int nb_items; int selected_item; + +#ifdef HAVE_TOUCHSCREEN + /* absolute Y coordinate, used for smooth scrolling */ + int y_pos; +#endif int start_item[NB_SCREENS]; /* the item that is displayed at the top of the screen */ /* the number of lines that are selected at the same time */ int selected_size; @@ -129,14 +170,14 @@ struct gui_synclist list_get_icon *callback_get_item_icon; list_get_name *callback_get_item_name; list_speak_item *callback_speak_item; + list_draw_item *callback_draw_item; /* The data that will be passed to the callback function YOU implement */ void * data; /* The optional title, set to NULL for none */ - char * title; + const char * title; /* Optional title icon */ enum themable_icons title_icon; - bool show_selection_marker; /* set to true by default */ #ifdef HAVE_LCD_COLOR int title_color; @@ -148,11 +189,6 @@ struct gui_synclist extern void list_init(void); -/* parse global setting to static int */ -extern void gui_list_screen_scroll_step(int ofs); - -/* parse global setting to static bool */ -extern void gui_list_screen_scroll_out_of_view(bool enable); extern void gui_synclist_init( struct gui_synclist * lists, @@ -181,13 +217,8 @@ extern void gui_synclist_select_item(struct gui_synclist * lists, int item_number); extern void gui_synclist_add_item(struct gui_synclist * lists); extern void gui_synclist_del_item(struct gui_synclist * lists); -extern void gui_synclist_limit_scroll(struct gui_synclist * lists, bool scroll); -extern void gui_synclist_set_title(struct gui_synclist * lists, char * title, +extern void gui_synclist_set_title(struct gui_synclist * lists, const char * title, enum themable_icons icon); -extern void gui_synclist_hide_selection_marker(struct gui_synclist *lists, - bool hide); -extern bool gui_synclist_item_is_onscreen(struct gui_synclist *lists, - enum screen_type screen, int item); extern bool gui_synclist_keyclick_callback(int action, void* data); /* @@ -195,20 +226,9 @@ extern bool gui_synclist_keyclick_callback(int action, void* data); * returns true if the action was handled. * NOTE: *action may be changed regardless of return value */ -extern bool gui_synclist_do_button(struct gui_synclist * lists, - int *action, - enum list_wrap); +extern bool gui_synclist_do_button(struct gui_synclist * lists, int *action); #if !defined(PLUGIN) -struct listitem_viewport_cfg { - struct wps_data *data; - OFFSETTYPE(char *) label; - int width; - int height; - int xmargin; - int ymargin; - bool tile; - struct skin_viewport selected_item_vp; -}; +struct listitem_viewport_cfg; bool skinlist_get_item(struct screen *display, struct gui_synclist *list, int x, int y, int *item); bool skinlist_draw(struct screen *display, struct gui_synclist *list); @@ -229,7 +249,7 @@ int skinlist_get_line_count(enum screen_type screen, struct gui_synclist *list); /* this needs to be fixed if we ever get more than 1 touchscreen on a target */ extern unsigned gui_synclist_do_touchscreen(struct gui_synclist * gui_list); /* only for private use in gui/list.c */ -extern void _gui_synclist_stop_kinetic_scrolling(void); +extern void _gui_synclist_stop_kinetic_scrolling(struct gui_synclist * gui_list); #endif /* If the list has a pending postponed scheduled announcement, that @@ -240,8 +260,7 @@ extern int list_do_action_timeout(struct gui_synclist *lists, int timeout); list_do_action_timeout) with the gui_synclist_do_button call, for convenience. */ extern bool list_do_action(int context, int timeout, - struct gui_synclist *lists, int *action, - enum list_wrap wrap); + struct gui_synclist *lists, int *action); /** Simplelist implementation. @@ -250,10 +269,9 @@ extern bool list_do_action(int context, int timeout, **/ struct simplelist_info { - char *title; /* title to show on the list */ + const char *title; /* title to show on the list */ int count; /* number of items in the list, each item is selection_size high */ int selection_size; /* list selection size, usually 1 */ - bool hide_selection; bool scroll_all; bool hide_theme; bool speak_onshow; /* list speaks first item or 'empty list' */ @@ -299,7 +317,6 @@ void simplelist_addline(const char *fmt, ...); /* setup the info struct. members not setup in this function need to be assigned manually members set in this function: info.selection_size = 1; - info.hide_selection = false; info.scroll_all = false; info.hide_theme = false; info.speak_onshow = true; |