fix red.
[kugel-rb.git] / apps / menus / settings_menu.c
blobfdc775877aadd0a9d7009aef83f15f6c4ad4c177
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 <string.h>
26 #include "config.h"
27 #include "lang.h"
28 #include "action.h"
29 #include "settings.h"
30 #include "menu.h"
31 #include "sound_menu.h"
32 #include "exported_menus.h"
33 #include "tree.h"
34 #include "tagtree.h"
35 #include "usb.h"
36 #include "splash.h"
37 #include "talk.h"
38 #include "sprintf.h"
39 #include "powermgmt.h"
40 #if CONFIG_CODEC == SWCODEC
41 #include "playback.h"
42 #endif
43 #if CONFIG_RTC
44 #include "screens.h"
45 #endif
46 #include "quickscreen.h"
47 #ifdef HAVE_DIRCACHE
48 #include "dircache.h"
49 #endif
51 /***********************************/
52 /* TAGCACHE MENU */
53 #ifdef HAVE_TAGCACHE
55 static void tagcache_rebuild_with_splash(void)
57 tagcache_rebuild();
58 splash(HZ*2, ID2P(LANG_TAGCACHE_FORCE_UPDATE_SPLASH));
61 static void tagcache_update_with_splash(void)
63 tagcache_update();
64 splash(HZ*2, ID2P(LANG_TAGCACHE_FORCE_UPDATE_SPLASH));
67 #ifdef HAVE_TC_RAMCACHE
68 MENUITEM_SETTING(tagcache_ram, &global_settings.tagcache_ram, NULL);
69 #endif
70 MENUITEM_SETTING(tagcache_autoupdate, &global_settings.tagcache_autoupdate, NULL);
71 MENUITEM_FUNCTION(tc_init, 0, ID2P(LANG_TAGCACHE_FORCE_UPDATE),
72 (int(*)(void))tagcache_rebuild_with_splash,
73 NULL, NULL, Icon_NOICON);
74 MENUITEM_FUNCTION(tc_update, 0, ID2P(LANG_TAGCACHE_UPDATE),
75 (int(*)(void))tagcache_update_with_splash,
76 NULL, NULL, Icon_NOICON);
77 MENUITEM_SETTING(runtimedb, &global_settings.runtimedb, NULL);
78 MENUITEM_FUNCTION(tc_export, 0, ID2P(LANG_TAGCACHE_EXPORT),
79 (int(*)(void))tagtree_export, NULL,
80 NULL, Icon_NOICON);
81 MENUITEM_FUNCTION(tc_import, 0, ID2P(LANG_TAGCACHE_IMPORT),
82 (int(*)(void))tagtree_import, NULL,
83 NULL, Icon_NOICON);
84 MAKE_MENU(tagcache_menu, ID2P(LANG_TAGCACHE), 0, Icon_NOICON,
85 #ifdef HAVE_TC_RAMCACHE
86 &tagcache_ram,
87 #endif
88 &tagcache_autoupdate, &tc_init, &tc_update, &runtimedb,
89 &tc_export, &tc_import);
90 #endif /* HAVE_TAGCACHE */
91 /* TAGCACHE MENU */
92 /***********************************/
94 /***********************************/
95 /* FILE VIEW MENU */
96 static int fileview_callback(int action,const struct menu_item_ex *this_item);
97 MENUITEM_SETTING(sort_case, &global_settings.sort_case, NULL);
98 MENUITEM_SETTING(sort_dir, &global_settings.sort_dir, fileview_callback);
99 MENUITEM_SETTING(sort_file, &global_settings.sort_file, fileview_callback);
100 MENUITEM_SETTING(interpret_numbers, &global_settings.interpret_numbers, fileview_callback);
101 MENUITEM_SETTING(dirfilter, &global_settings.dirfilter, NULL);
102 MENUITEM_SETTING(show_filename_ext, &global_settings.show_filename_ext, NULL);
103 MENUITEM_SETTING(browse_current, &global_settings.browse_current, NULL);
104 #ifdef HAVE_LCD_BITMAP
105 MENUITEM_SETTING(show_path_in_browser, &global_settings.show_path_in_browser, NULL);
106 #endif
107 static int fileview_callback(int action,const struct menu_item_ex *this_item)
109 static int oldval;
110 int *variable = this_item->variable;
111 switch (action)
113 case ACTION_ENTER_MENUITEM: /* on entering an item */
114 oldval = *variable;
115 break;
116 case ACTION_EXIT_MENUITEM: /* on exit */
117 if (*variable != oldval)
118 reload_directory(); /* force reload if this has changed */
119 break;
121 return action;
124 MAKE_MENU(file_menu, ID2P(LANG_FILE), 0, Icon_file_view_menu,
125 &sort_case, &sort_dir, &sort_file, &interpret_numbers,
126 &dirfilter, &show_filename_ext, &browse_current,
127 #ifdef HAVE_LCD_BITMAP
128 &show_path_in_browser
129 #endif
131 /* FILE VIEW MENU */
132 /***********************************/
135 /***********************************/
136 /* SYSTEM MENU */
138 /* Battery */
139 #if BATTERY_CAPACITY_INC > 0
140 MENUITEM_SETTING(battery_capacity, &global_settings.battery_capacity, NULL);
141 #endif
142 #if BATTERY_TYPES_COUNT > 1
143 MENUITEM_SETTING(battery_type, &global_settings.battery_type, NULL);
144 #endif
145 #ifdef HAVE_USB_CHARGING_ENABLE
146 static int usbcharging_callback(int action,const struct menu_item_ex *this_item)
148 (void)this_item;
149 switch (action)
151 case ACTION_EXIT_MENUITEM: /* on exit */
152 usb_charging_enable(global_settings.usb_charging);
153 break;
155 return action;
157 MENUITEM_SETTING(usb_charging, &global_settings.usb_charging, usbcharging_callback);
158 #endif /* HAVE_USB_CHARGING_ENABLE */
159 MAKE_MENU(battery_menu, ID2P(LANG_BATTERY_MENU), 0, Icon_NOICON,
160 #if BATTERY_CAPACITY_INC > 0
161 &battery_capacity,
162 #endif
163 #if BATTERY_TYPES_COUNT > 1
164 &battery_type,
165 #endif
166 #ifdef HAVE_USB_CHARGING_ENABLE
167 &usb_charging,
168 #endif
170 /* Disk */
171 #ifdef HAVE_DISK_STORAGE
172 MENUITEM_SETTING(disk_spindown, &global_settings.disk_spindown, NULL);
173 #endif
174 #ifdef HAVE_DIRCACHE
175 static int dircache_callback(int action,const struct menu_item_ex *this_item)
177 (void)this_item;
178 switch (action)
180 case ACTION_EXIT_MENUITEM: /* on exit */
181 switch (global_settings.dircache)
183 case true:
184 if (!dircache_is_enabled())
185 splash(HZ*2, ID2P(LANG_PLEASE_REBOOT));
186 break;
187 case false:
188 if (dircache_is_enabled())
189 dircache_disable();
190 break;
192 break;
194 return action;
196 MENUITEM_SETTING(dircache, &global_settings.dircache, dircache_callback);
197 #endif
198 #if defined(HAVE_DIRCACHE) || defined(HAVE_DISK_STORAGE)
199 MAKE_MENU(disk_menu, ID2P(LANG_DISK_MENU), 0, Icon_NOICON,
200 #ifdef HAVE_DISK_STORAGE
201 &disk_spindown,
202 #endif
203 #ifdef HAVE_DIRCACHE
204 &dircache,
205 #endif
207 #endif
209 /* System menu */
210 MENUITEM_SETTING(poweroff, &global_settings.poweroff, NULL);
212 /* Limits menu */
213 MENUITEM_SETTING(max_files_in_dir, &global_settings.max_files_in_dir, NULL);
214 MENUITEM_SETTING(max_files_in_playlist, &global_settings.max_files_in_playlist, NULL);
215 MAKE_MENU(limits_menu, ID2P(LANG_LIMITS_MENU), 0, Icon_NOICON,
216 &max_files_in_dir, &max_files_in_playlist);
219 /* Keyclick menu */
220 #if CONFIG_CODEC == SWCODEC
221 MENUITEM_SETTING(keyclick, &global_settings.keyclick, NULL);
222 MENUITEM_SETTING(keyclick_repeats, &global_settings.keyclick_repeats, NULL);
223 MAKE_MENU(keyclick_menu, ID2P(LANG_KEYCLICK), 0, Icon_NOICON,
224 &keyclick, &keyclick_repeats);
225 #endif
228 #if CONFIG_CODEC == MAS3507D
229 void dac_line_in(bool enable);
230 static int linein_callback(int action,const struct menu_item_ex *this_item)
232 (void)this_item;
233 switch (action)
235 case ACTION_EXIT_MENUITEM: /* on exit */
236 #ifndef SIMULATOR
237 dac_line_in(global_settings.line_in);
238 #endif
239 break;
241 return action;
243 MENUITEM_SETTING(line_in, &global_settings.line_in, linein_callback);
244 #endif
245 #if CONFIG_CHARGING
246 MENUITEM_SETTING(car_adapter_mode, &global_settings.car_adapter_mode, NULL);
247 #endif
248 #ifdef IPOD_ACCESSORY_PROTOCOL
249 MENUITEM_SETTING(serial_bitrate, &global_settings.serial_bitrate, NULL);
250 #endif
251 #ifdef HAVE_ACCESSORY_SUPPLY
252 MENUITEM_SETTING(accessory_supply, &global_settings.accessory_supply, NULL);
253 #endif
254 MENUITEM_SETTING(start_screen, &global_settings.start_in_screen, NULL);
256 #ifdef HAVE_BUTTON_LIGHT
257 MENUITEM_SETTING(buttonlight_timeout, &global_settings.buttonlight_timeout, NULL);
258 #endif
260 #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
261 MENUITEM_SETTING(buttonlight_brightness, &global_settings.buttonlight_brightness, NULL);
262 #endif
264 #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
265 MENUITEM_SETTING(touchpad_sensitivity, &global_settings.touchpad_sensitivity, NULL);
266 #endif
268 MAKE_MENU(system_menu, ID2P(LANG_SYSTEM),
269 0, Icon_System_menu,
270 &start_screen,
271 #if (BATTERY_CAPACITY_INC > 0) || (BATTERY_TYPES_COUNT > 1)
272 &battery_menu,
273 #endif
274 #if defined(HAVE_DIRCACHE) || defined(HAVE_DISK_STORAGE)
275 &disk_menu,
276 #endif
277 &poweroff,
278 &limits_menu,
279 #if CONFIG_CODEC == MAS3507D
280 &line_in,
281 #endif
282 #if CONFIG_CHARGING
283 &car_adapter_mode,
284 #endif
285 #ifdef IPOD_ACCESSORY_PROTOCOL
286 &serial_bitrate,
287 #endif
288 #ifdef HAVE_ACCESSORY_SUPPLY
289 &accessory_supply,
290 #endif
291 #ifdef HAVE_BUTTON_LIGHT
292 &buttonlight_timeout,
293 #endif
294 #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
295 &buttonlight_brightness,
296 #endif
297 #if CONFIG_CODEC == SWCODEC
298 &keyclick_menu,
299 #endif
300 #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
301 &touchpad_sensitivity,
302 #endif
305 /* SYSTEM MENU */
306 /***********************************/
309 /***********************************/
310 /* BOOKMARK MENU */
311 static int bmark_callback(int action,const struct menu_item_ex *this_item)
313 (void)this_item;
314 switch (action)
316 case ACTION_EXIT_MENUITEM: /* on exit */
317 if(global_settings.autocreatebookmark == BOOKMARK_RECENT_ONLY_YES ||
318 global_settings.autocreatebookmark == BOOKMARK_RECENT_ONLY_ASK)
320 if(global_settings.usemrb == BOOKMARK_NO)
321 global_settings.usemrb = BOOKMARK_YES;
324 break;
326 return action;
328 MENUITEM_SETTING(autocreatebookmark,
329 &global_settings.autocreatebookmark, bmark_callback);
330 MENUITEM_SETTING(autoloadbookmark, &global_settings.autoloadbookmark, NULL);
331 MENUITEM_SETTING(usemrb, &global_settings.usemrb, NULL);
332 MAKE_MENU(bookmark_settings_menu, ID2P(LANG_BOOKMARK_SETTINGS), 0,
333 Icon_Bookmark,
334 &autocreatebookmark, &autoloadbookmark, &usemrb);
335 /* BOOKMARK MENU */
336 /***********************************/
338 /***********************************/
339 /* VOICE MENU */
340 static int talk_callback(int action,const struct menu_item_ex *this_item);
341 MENUITEM_SETTING(talk_menu_item, &global_settings.talk_menu, NULL);
342 MENUITEM_SETTING(talk_dir_item, &global_settings.talk_dir, NULL);
343 MENUITEM_SETTING(talk_dir_clip_item, &global_settings.talk_dir_clip, talk_callback);
344 MENUITEM_SETTING(talk_file_item, &global_settings.talk_file, NULL);
345 MENUITEM_SETTING(talk_file_clip_item, &global_settings.talk_file_clip, talk_callback);
346 static int talk_callback(int action,const struct menu_item_ex *this_item)
348 static int oldval = 0;
349 switch (action)
351 case ACTION_ENTER_MENUITEM:
352 oldval = global_settings.talk_file_clip;
353 break;
354 case ACTION_EXIT_MENUITEM:
355 #if CONFIG_CODEC == SWCODEC
356 audio_set_crossfade(global_settings.crossfade);
357 #endif
358 if (this_item == &talk_dir_clip_item)
359 break;
360 if (!oldval && global_settings.talk_file_clip)
362 /* force reload if newly talking thumbnails,
363 because the clip presence is cached only if enabled */
364 reload_directory();
366 break;
368 return action;
370 MENUITEM_SETTING(talk_filetype_item, &global_settings.talk_filetype, NULL);
371 MENUITEM_SETTING(talk_battery_level_item,
372 &global_settings.talk_battery_level, NULL);
373 MAKE_MENU(voice_settings_menu, ID2P(LANG_VOICE), 0, Icon_Voice,
374 &talk_menu_item, &talk_dir_item, &talk_dir_clip_item,
375 &talk_file_item, &talk_file_clip_item, &talk_filetype_item,
376 &talk_battery_level_item);
377 /* VOICE MENU */
378 /***********************************/
381 /***********************************/
382 /* SETTINGS MENU */
383 static int language_browse(void)
385 return (int)rockbox_browse(LANG_DIR, SHOW_LNG);
387 MENUITEM_FUNCTION(browse_langs, 0, ID2P(LANG_LANGUAGE), language_browse,
388 NULL, NULL, Icon_Language);
390 MAKE_MENU(settings_menu_item, ID2P(LANG_GENERAL_SETTINGS), 0,
391 Icon_General_settings_menu,
392 &playlist_settings, &file_menu,
393 #ifdef HAVE_TAGCACHE
394 &tagcache_menu,
395 #endif
396 &display_menu, &system_menu,
397 &bookmark_settings_menu, &browse_langs, &voice_settings_menu
399 /* SETTINGS MENU */
400 /***********************************/