Bubbles: Don't save scores when quit without saving is selected and reduce splash...
[kugel-rb.git] / apps / gui / charcell / list.c
blob2374156f0b149cc3ce42a26467d0994500192a44
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2007 by Jonathan Gordon
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 /* This file contains the code to draw the list widget on BITMAP LCDs. */
24 #include "config.h"
25 #include "lcd.h"
26 #include "font.h"
27 #include "button.h"
28 #include "sprintf.h"
29 #include "string.h"
30 #include "settings.h"
31 #include "kernel.h"
32 #include "system.h"
33 #include "file.h"
35 #include "list.h"
36 #include "screen_access.h"
37 #include "scrollbar.h"
38 #include "lang.h"
39 #include "sound.h"
40 #include "misc.h"
42 void list_draw(struct screen *display, struct gui_synclist *gui_list)
44 int text_pos;
45 bool draw_icons = (gui_list->callback_get_item_icon != NULL &&
46 global_settings.show_icons);
47 bool draw_cursor;
48 int i;
49 int lines;
50 int start, end;
52 display->set_viewport(NULL);
53 lines = display->getnblines();
55 display->clear_display();
56 start = 0;
57 end = display->getnblines();
58 gui_list->last_displayed_start_item[display->screen_type] =
59 gui_list->start_item[display->screen_type];
61 gui_list->last_displayed_selected_item = gui_list->selected_item;
63 /* Adjust the position of icon, cursor, text for the list */
64 draw_cursor = true;
65 if(draw_icons)
66 text_pos = 2; /* here it's in chars */
67 else
68 text_pos = 1;
70 for (i = start; i < end; i++)
72 unsigned const char *s;
73 char entry_buffer[MAX_PATH];
74 unsigned char *entry_name;
75 int current_item = gui_list->start_item[display->screen_type] + i;
77 /* When there are less items to display than the
78 * current available space on the screen, we stop*/
79 if(current_item >= gui_list->nb_items)
80 break;
81 s = gui_list->callback_get_item_name(current_item,
82 gui_list->data,
83 entry_buffer,
84 sizeof(entry_buffer));
85 entry_name = P2STR(s);
88 if(gui_list->show_selection_marker &&
89 current_item >= gui_list->selected_item &&
90 current_item < gui_list->selected_item + gui_list->selected_size)
91 {/* The selected item must be displayed scrolling */
92 display->puts_scroll(text_pos, i, entry_name);
94 if (draw_cursor)
96 screen_put_icon_with_offset(display, 0, i,
97 (draw_scrollbar || SHOW_LIST_TITLE)?
98 SCROLLBAR_WIDTH: 0,
99 0, Icon_Cursor);
102 else
103 {/* normal item */
104 if(gui_list->scroll_all)
106 display->puts_scroll(text_pos, i, entry_name);
108 else
110 display->puts(text_pos, i, entry_name);
113 /* Icons display */
114 if(draw_icons)
116 enum themable_icons icon;
117 icon = gui_list->callback_get_item_icon(current_item,
118 gui_list->data);
119 if(icon > Icon_NOICON)
121 screen_put_icon(display, 1, i, icon);
126 display->update_viewport();
127 display->update();