Add a browse (remote) custom statusbar item in the theme settings.
[kugel-rb.git] / apps / menus / theme_menu.c
blob21ad2b0713e74f9328249d543a8a8f55ffd62c2d
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2007 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 #include <stdbool.h>
23 #include <stddef.h>
24 #include <limits.h>
25 #include "config.h"
26 #include "lang.h"
27 #include "action.h"
28 #include "settings.h"
29 #include "menu.h"
30 #include "tree.h"
31 #include "list.h"
32 #ifdef HAVE_LCD_BITMAP
33 #include "peakmeter.h"
34 #endif
35 #include "color_picker.h"
36 #include "lcd.h"
37 #include "lcd-remote.h"
38 #include "backdrop.h"
39 #include "exported_menus.h"
40 #include "appevents.h"
41 #include "viewport.h"
43 #if LCD_DEPTH > 1
44 /**
45 * Menu to clear the backdrop image
47 static int clear_main_backdrop(void)
49 global_settings.backdrop_file[0]=0;
50 backdrop_unload(BACKDROP_MAIN);
51 backdrop_show(BACKDROP_MAIN);
52 send_event(GUI_EVENT_REFRESH, NULL);
53 settings_save();
54 return 0;
56 MENUITEM_FUNCTION(clear_main_bd, 0, ID2P(LANG_CLEAR_BACKDROP),
57 clear_main_backdrop, NULL, NULL, Icon_NOICON);
58 #endif
59 #ifdef HAVE_LCD_COLOR
61 enum Colors {
62 COLOR_FG = 0,
63 COLOR_BG,
64 COLOR_LSS,
65 COLOR_LSE,
66 COLOR_LST,
67 COLOR_COUNT
69 static struct colour_info
71 int *setting;
72 int lang_id;
73 } colors[COLOR_COUNT] = {
74 [COLOR_FG] = {&global_settings.fg_color, LANG_FOREGROUND_COLOR},
75 [COLOR_BG] = {&global_settings.bg_color, LANG_BACKGROUND_COLOR},
76 [COLOR_LSS] = {&global_settings.lss_color, LANG_SELECTOR_START_COLOR},
77 [COLOR_LSE] = {&global_settings.lse_color, LANG_SELECTOR_END_COLOR},
78 [COLOR_LST] = {&global_settings.lst_color, LANG_SELECTOR_TEXT_COLOR},
81 /**
82 * Menu for fore/back/selection colors
84 static int set_color_func(void* color)
86 int res, c = (intptr_t)color, banned_color=-1;
88 /* Don't let foreground be set the same as background and vice-versa */
89 if (c == COLOR_BG)
90 banned_color = *colors[COLOR_FG].setting;
91 else if (c == COLOR_FG)
92 banned_color = *colors[COLOR_BG].setting;
94 res = (int)set_color(&screens[SCREEN_MAIN],str(colors[c].lang_id),
95 colors[c].setting, banned_color);
96 settings_save();
97 settings_apply(false);
98 send_event(GUI_EVENT_ACTIONUPDATE, (void*)true);
99 return res;
102 static int reset_color(void)
104 global_settings.fg_color = LCD_DEFAULT_FG;
105 global_settings.bg_color = LCD_DEFAULT_BG;
106 global_settings.lss_color = LCD_DEFAULT_LS;
107 global_settings.lse_color = LCD_DEFAULT_BG;
108 global_settings.lst_color = LCD_DEFAULT_FG;
110 settings_save();
111 settings_apply(false);
112 send_event(GUI_EVENT_ACTIONUPDATE, (void*)true);
113 return 0;
115 MENUITEM_FUNCTION(set_bg_col, MENU_FUNC_USEPARAM, ID2P(LANG_BACKGROUND_COLOR),
116 set_color_func, (void*)COLOR_BG, NULL, Icon_NOICON);
117 MENUITEM_FUNCTION(set_fg_col, MENU_FUNC_USEPARAM, ID2P(LANG_FOREGROUND_COLOR),
118 set_color_func, (void*)COLOR_FG, NULL, Icon_NOICON);
119 MENUITEM_FUNCTION(set_lss_col, MENU_FUNC_USEPARAM, ID2P(LANG_SELECTOR_START_COLOR),
120 set_color_func, (void*)COLOR_LSS, NULL, Icon_NOICON);
121 MENUITEM_FUNCTION(set_lse_col, MENU_FUNC_USEPARAM, ID2P(LANG_SELECTOR_END_COLOR),
122 set_color_func, (void*)COLOR_LSE, NULL, Icon_NOICON);
123 MENUITEM_FUNCTION(set_lst_col, MENU_FUNC_USEPARAM, ID2P(LANG_SELECTOR_TEXT_COLOR),
124 set_color_func, (void*)COLOR_LST, NULL, Icon_NOICON);
125 MENUITEM_FUNCTION(reset_colors, 0, ID2P(LANG_RESET_COLORS),
126 reset_color, NULL, NULL, Icon_NOICON);
128 MAKE_MENU(lss_settings, ID2P(LANG_SELECTOR_COLOR_MENU),
129 NULL, Icon_NOICON,
130 &set_lss_col, &set_lse_col, &set_lst_col
133 /* now the actual menu */
134 MAKE_MENU(colors_settings, ID2P(LANG_COLORS_MENU),
135 NULL, Icon_Display_menu,
136 &lss_settings,
137 &set_bg_col, &set_fg_col, &reset_colors
140 #endif /* HAVE_LCD_COLOR */
141 /* LCD MENU */
142 /***********************************/
145 /************************************/
146 /* BARS MENU */
147 /* */
150 #ifdef HAVE_LCD_BITMAP
151 static int statusbar_callback_ex(int action,const struct menu_item_ex *this_item,
152 enum screen_type screen)
154 (void)this_item;
155 /* we save the old statusbar value here, so the old statusbars can get
156 * removed and cleared from the display properly on exiting
157 * (in gui_statusbar_changed() ) */
158 static enum statusbar_values old_bar[NB_SCREENS];
159 switch (action)
161 case ACTION_ENTER_MENUITEM:
162 old_bar[screen] = statusbar_position(screen);
163 break;
164 case ACTION_EXIT_MENUITEM:
165 send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL);
166 send_event(GUI_EVENT_ACTIONUPDATE, (void*)true);
167 if ((old_bar[screen] == STATUSBAR_CUSTOM)
168 || (statusbar_position(screen) == STATUSBAR_CUSTOM))
169 send_event(GUI_EVENT_REFRESH, NULL);
170 else
171 gui_statusbar_changed(screen, old_bar[screen]);
172 break;
174 return ACTION_REDRAW;
177 #ifdef HAVE_REMOTE_LCD
178 static int statusbar_callback_remote(int action,const struct menu_item_ex *this_item)
180 return statusbar_callback_ex(action, this_item, SCREEN_REMOTE);
182 #endif
183 static int statusbar_callback(int action,const struct menu_item_ex *this_item)
185 return statusbar_callback_ex(action, this_item, SCREEN_MAIN);
188 #ifdef HAVE_BUTTONBAR
189 static int buttonbar_callback(int action, const struct menu_item_ex *this_item)
191 (void)this_item;
192 switch (action)
194 case ACTION_EXIT_MENUITEM:
195 viewportmanager_theme_changed(THEME_BUTTONBAR);
196 break;
198 return ACTION_REDRAW;
200 #endif
201 MENUITEM_SETTING(scrollbar_item, &global_settings.scrollbar, NULL);
202 MENUITEM_SETTING(scrollbar_width, &global_settings.scrollbar_width, NULL);
203 MENUITEM_SETTING(statusbar, &global_settings.statusbar,
204 statusbar_callback);
205 #ifdef HAVE_REMOTE_LCD
206 MENUITEM_SETTING(remote_statusbar, &global_settings.remote_statusbar,
207 statusbar_callback_remote);
208 #endif
209 #ifdef HAVE_BUTTONBAR
210 MENUITEM_SETTING(buttonbar, &global_settings.buttonbar, buttonbar_callback);
211 #endif
212 MENUITEM_SETTING(volume_type, &global_settings.volume_type, NULL);
213 MENUITEM_SETTING(battery_display, &global_settings.battery_display, NULL);
214 MAKE_MENU(bars_menu, ID2P(LANG_BARS_MENU), 0, Icon_NOICON,
215 &scrollbar_item, &scrollbar_width, &statusbar,
216 #ifdef HAVE_REMOTE_LCD
217 &remote_statusbar,
218 #endif
219 #if CONFIG_KEYPAD == RECORDER_PAD
220 &buttonbar,
221 #endif
222 &volume_type, &battery_display);
223 #endif /* HAVE_LCD_BITMAP */
225 /* */
226 /* BARS MENU */
227 /************************************/
229 #ifdef HAVE_LCD_BITMAP
230 static struct browse_folder_info fonts = {FONT_DIR, SHOW_FONT};
231 static struct browse_folder_info sbs = {SBS_DIR, SHOW_SBS};
232 #endif
233 static struct browse_folder_info wps = {WPS_DIR, SHOW_WPS};
234 #ifdef HAVE_REMOTE_LCD
235 static struct browse_folder_info rwps = {WPS_DIR, SHOW_RWPS};
236 static struct browse_folder_info rsbs = {SBS_DIR, SHOW_RSBS};
237 #endif
238 static struct browse_folder_info themes = {THEME_DIR, SHOW_CFG};
240 int browse_folder(void *param)
242 const struct browse_folder_info *info =
243 (const struct browse_folder_info*)param;
244 return rockbox_browse(info->dir, info->show_options);
247 #ifdef HAVE_LCD_BITMAP
248 MENUITEM_FUNCTION(browse_fonts, MENU_FUNC_USEPARAM,
249 ID2P(LANG_CUSTOM_FONT),
250 browse_folder, (void*)&fonts, NULL, Icon_Font);
252 MENUITEM_FUNCTION(browse_sbs, MENU_FUNC_USEPARAM,
253 ID2P(LANG_CUSTOM_STATUSBAR),
254 browse_folder, (void*)&sbs, NULL, Icon_Wps);
255 #endif
256 MENUITEM_FUNCTION(browse_wps, MENU_FUNC_USEPARAM,
257 ID2P(LANG_WHILE_PLAYING),
258 browse_folder, (void*)&wps, NULL, Icon_Wps);
259 #ifdef HAVE_REMOTE_LCD
260 MENUITEM_FUNCTION(browse_rwps, MENU_FUNC_USEPARAM,
261 ID2P(LANG_REMOTE_WHILE_PLAYING),
262 browse_folder, (void*)&rwps, NULL, Icon_Wps);
263 MENUITEM_FUNCTION(browse_rsbs, MENU_FUNC_USEPARAM,
264 ID2P(LANG_REMOTE_CUSTOM_STATUSBAR),
265 browse_folder, (void*)&rsbs, NULL, Icon_Wps);
266 #endif
268 MENUITEM_SETTING(show_icons, &global_settings.show_icons, NULL);
269 MENUITEM_FUNCTION(browse_themes, MENU_FUNC_USEPARAM,
270 ID2P(LANG_CUSTOM_THEME),
271 browse_folder, (void*)&themes, NULL, Icon_Config);
272 #ifdef HAVE_LCD_BITMAP
273 MENUITEM_SETTING(cursor_style, &global_settings.cursor_style, NULL);
274 #endif
276 MAKE_MENU(theme_menu, ID2P(LANG_THEME_MENU),
277 NULL, Icon_Wps,
278 &browse_themes,
279 #ifdef HAVE_LCD_BITMAP
280 &browse_fonts,
281 #endif
282 &browse_wps,
283 #ifdef HAVE_REMOTE_LCD
284 &browse_rwps,
285 #endif
286 #ifdef HAVE_LCD_BITMAP
287 &browse_sbs,
288 #endif
289 #ifdef HAVE_REMOTE_LCD
290 &browse_rsbs,
291 #endif
292 &show_icons,
293 #if LCD_DEPTH > 1
294 &clear_main_bd,
295 #endif
296 #ifdef HAVE_LCD_BITMAP
297 &bars_menu,
298 &cursor_style,
299 #endif
300 #ifdef HAVE_LCD_COLOR
301 &colors_settings,
302 #endif