Jonathan Gordon | 4718a1e | 2007-02-08 04:33:41 +0000 | [diff] [blame] | 1 | /*************************************************************************** |
| 2 | * __________ __ ___. |
| 3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ |
| 4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / |
| 5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < |
| 6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ |
| 7 | * \/ \/ \/ \/ \/ |
Jonathan Gordon | 4e73b53 | 2007-02-13 00:32:17 +0000 | [diff] [blame] | 8 | * $Id$ |
Jonathan Gordon | 4718a1e | 2007-02-08 04:33:41 +0000 | [diff] [blame] | 9 | * |
| 10 | * Copyright (C) 2007 Jonathan Gordon |
| 11 | * |
| 12 | * All files in this archive are subject to the GNU General Public License. |
| 13 | * See the file COPYING in the source tree root for full license agreement. |
| 14 | * |
| 15 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| 16 | * KIND, either express or implied. |
| 17 | * |
| 18 | ****************************************************************************/ |
| 19 | |
| 20 | #include <stdbool.h> |
| 21 | #include <stddef.h> |
| 22 | #include <limits.h> |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 23 | #include <string.h> |
Jonathan Gordon | 4718a1e | 2007-02-08 04:33:41 +0000 | [diff] [blame] | 24 | #include "config.h" |
| 25 | #include "lang.h" |
| 26 | #include "action.h" |
| 27 | #include "settings.h" |
| 28 | #include "menu.h" |
| 29 | #include "sound_menu.h" |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 30 | #include "exported_menus.h" |
| 31 | #include "tree.h" |
| 32 | #include "tagtree.h" |
| 33 | #include "usb.h" |
| 34 | #include "splash.h" |
| 35 | #include "talk.h" |
| 36 | #include "sprintf.h" |
| 37 | #include "powermgmt.h" |
Thom Johansen | 8fd6d65 | 2007-02-28 21:55:11 +0000 | [diff] [blame] | 38 | #ifdef HAVE_RTC_ALARM |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 39 | #include "alarm_menu.h" |
| 40 | #endif |
Jonathan Gordon | 16d5d1d | 2007-03-07 08:56:20 +0000 | [diff] [blame] | 41 | #if CONFIG_TUNER |
| 42 | #include "radio.h" |
| 43 | #endif |
Jonathan Gordon | 4718a1e | 2007-02-08 04:33:41 +0000 | [diff] [blame] | 44 | |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 45 | /***********************************/ |
| 46 | /* TAGCACHE MENU */ |
| 47 | #ifdef HAVE_TAGCACHE |
Steve Bavin | 8137489 | 2007-03-07 19:56:15 +0000 | [diff] [blame] | 48 | |
| 49 | static void tagcache_rebuild_with_splash(void) |
| 50 | { |
| 51 | tagcache_rebuild(); |
Jens Arnold | 4d6374c | 2007-03-16 21:56:08 +0000 | [diff] [blame] | 52 | gui_syncsplash(HZ*2, str(LANG_TAGCACHE_FORCE_UPDATE_SPLASH)); |
Steve Bavin | 8137489 | 2007-03-07 19:56:15 +0000 | [diff] [blame] | 53 | } |
| 54 | |
| 55 | static void tagcache_update_with_splash(void) |
| 56 | { |
| 57 | tagcache_update(); |
Jens Arnold | 4d6374c | 2007-03-16 21:56:08 +0000 | [diff] [blame] | 58 | gui_syncsplash(HZ*2, str(LANG_TAGCACHE_FORCE_UPDATE_SPLASH)); |
Steve Bavin | 8137489 | 2007-03-07 19:56:15 +0000 | [diff] [blame] | 59 | } |
| 60 | |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 61 | #ifdef HAVE_TC_RAMCACHE |
| 62 | MENUITEM_SETTING(tagcache_ram, &global_settings.tagcache_ram, NULL); |
| 63 | #endif |
| 64 | MENUITEM_SETTING(tagcache_autoupdate, &global_settings.tagcache_autoupdate, NULL); |
Jonathan Gordon | daf6694 | 2007-03-17 12:33:34 +0000 | [diff] [blame] | 65 | MENUITEM_FUNCTION(tc_init, 0, ID2P(LANG_TAGCACHE_FORCE_UPDATE), |
| 66 | (int(*)(void))tagcache_rebuild_with_splash, |
Jonathan Gordon | e54d8e1 | 2007-03-18 07:03:43 +0000 | [diff] [blame] | 67 | NULL, NULL, Icon_NOICON); |
Jonathan Gordon | daf6694 | 2007-03-17 12:33:34 +0000 | [diff] [blame] | 68 | MENUITEM_FUNCTION(tc_update, 0, ID2P(LANG_TAGCACHE_UPDATE), |
| 69 | (int(*)(void))tagcache_update_with_splash, |
Jonathan Gordon | e54d8e1 | 2007-03-18 07:03:43 +0000 | [diff] [blame] | 70 | NULL, NULL, Icon_NOICON); |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 71 | MENUITEM_SETTING(runtimedb, &global_settings.runtimedb, NULL); |
Jonathan Gordon | daf6694 | 2007-03-17 12:33:34 +0000 | [diff] [blame] | 72 | MENUITEM_FUNCTION(tc_export, 0, ID2P(LANG_TAGCACHE_EXPORT), |
Jonathan Gordon | e54d8e1 | 2007-03-18 07:03:43 +0000 | [diff] [blame] | 73 | (int(*)(void))tagtree_export, NULL, |
Jonathan Gordon | daf6694 | 2007-03-17 12:33:34 +0000 | [diff] [blame] | 74 | NULL, Icon_NOICON); |
| 75 | MENUITEM_FUNCTION(tc_import, 0, ID2P(LANG_TAGCACHE_IMPORT), |
Jonathan Gordon | e54d8e1 | 2007-03-18 07:03:43 +0000 | [diff] [blame] | 76 | (int(*)(void))tagtree_import, NULL, |
Jonathan Gordon | daf6694 | 2007-03-17 12:33:34 +0000 | [diff] [blame] | 77 | NULL, Icon_NOICON); |
Jonathan Gordon | 02a8717 | 2007-03-03 13:52:14 +0000 | [diff] [blame] | 78 | MAKE_MENU(tagcache_menu, ID2P(LANG_TAGCACHE), 0, Icon_NOICON, |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 79 | #ifdef HAVE_TC_RAMCACHE |
| 80 | &tagcache_ram, |
| 81 | #endif |
| 82 | &tagcache_autoupdate, &tc_init, &tc_update, &runtimedb, |
| 83 | &tc_export, &tc_import); |
| 84 | #endif /* HAVE_TAGCACHE */ |
| 85 | /* TAGCACHE MENU */ |
| 86 | /***********************************/ |
| 87 | |
| 88 | /***********************************/ |
| 89 | /* FILE VIEW MENU */ |
| 90 | static int fileview_callback(int action,const struct menu_item_ex *this_item); |
| 91 | MENUITEM_SETTING(sort_case, &global_settings.sort_case, NULL); |
| 92 | MENUITEM_SETTING(sort_dir, &global_settings.sort_dir, fileview_callback); |
| 93 | MENUITEM_SETTING(sort_file, &global_settings.sort_file, fileview_callback); |
| 94 | MENUITEM_SETTING(dirfilter, &global_settings.dirfilter, NULL); |
| 95 | MENUITEM_SETTING(browse_current, &global_settings.browse_current, NULL); |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 96 | MENUITEM_SETTING(show_path_in_browser, &global_settings.show_path_in_browser, NULL); |
| 97 | static int fileview_callback(int action,const struct menu_item_ex *this_item) |
| 98 | { |
| 99 | static int oldval; |
| 100 | int *variable = this_item->variable; |
| 101 | switch (action) |
| 102 | { |
| 103 | case ACTION_ENTER_MENUITEM: /* on entering an item */ |
| 104 | oldval = *variable; |
| 105 | break; |
| 106 | case ACTION_EXIT_MENUITEM: /* on exit */ |
| 107 | if (*variable != oldval) |
| 108 | reload_directory(); /* force reload if this has changed */ |
| 109 | break; |
| 110 | } |
| 111 | return action; |
| 112 | } |
| 113 | |
Jonathan Gordon | 02a8717 | 2007-03-03 13:52:14 +0000 | [diff] [blame] | 114 | MAKE_MENU(file_menu, ID2P(LANG_FILE), 0, Icon_file_view_menu, |
Jonathan Gordon | 5599d68 | 2007-02-14 06:58:30 +0000 | [diff] [blame] | 115 | &sort_case, &sort_dir, &sort_file, |
Marcoen Hirschberg | 44c510e | 2007-03-01 17:39:15 +0000 | [diff] [blame] | 116 | &dirfilter, &browse_current, &show_path_in_browser); |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 117 | /* FILE VIEW MENU */ |
| 118 | /***********************************/ |
| 119 | |
| 120 | |
| 121 | /***********************************/ |
| 122 | /* SYSTEM MENU */ |
| 123 | |
| 124 | /* Battery */ |
| 125 | #ifndef SIMULATOR |
Jonathan Gordon | b43bf7e | 2007-07-15 03:56:04 +0000 | [diff] [blame] | 126 | #if BATTERY_CAPACITY_INC > 0 |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 127 | MENUITEM_SETTING(battery_capacity, &global_settings.battery_capacity, NULL); |
Jonathan Gordon | b43bf7e | 2007-07-15 03:56:04 +0000 | [diff] [blame] | 128 | #endif |
| 129 | #if BATTERY_TYPES_COUNT > 1 |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 130 | MENUITEM_SETTING(battery_type, &global_settings.battery_type, NULL); |
Jonathan Gordon | b43bf7e | 2007-07-15 03:56:04 +0000 | [diff] [blame] | 131 | #endif |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 132 | #ifdef HAVE_USB_POWER |
Jonathan Gordon | 9a6f419 | 2007-02-18 05:32:06 +0000 | [diff] [blame] | 133 | #if CONFIG_CHARGING |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 134 | static int usbcharging_callback(int action,const struct menu_item_ex *this_item) |
| 135 | { |
| 136 | (void)this_item; |
| 137 | switch (action) |
| 138 | { |
| 139 | case ACTION_EXIT_MENUITEM: /* on exit */ |
| 140 | usb_charging_enable(global_settings.usb_charging); |
| 141 | break; |
| 142 | } |
| 143 | return action; |
| 144 | } |
| 145 | MENUITEM_SETTING(usb_charging, &global_settings.usb_charging, usbcharging_callback); |
| 146 | #endif |
| 147 | #endif |
Jonathan Gordon | 02a8717 | 2007-03-03 13:52:14 +0000 | [diff] [blame] | 148 | MAKE_MENU(battery_menu, ID2P(LANG_BATTERY_MENU), 0, Icon_NOICON, |
Jonathan Gordon | b43bf7e | 2007-07-15 03:56:04 +0000 | [diff] [blame] | 149 | #if BATTERY_CAPACITY_INC > 0 |
| 150 | &battery_capacity, |
| 151 | #endif |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 152 | #if BATTERY_TYPES_COUNT > 1 |
| 153 | &battery_type, |
| 154 | #endif |
| 155 | #ifdef HAVE_USB_POWER |
Jonathan Gordon | 9a6f419 | 2007-02-18 05:32:06 +0000 | [diff] [blame] | 156 | #if CONFIG_CHARGING |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 157 | &usb_charging, |
| 158 | #endif |
| 159 | #endif |
| 160 | ); |
| 161 | #endif /* SIMULATOR */ |
| 162 | /* Disk */ |
Nils Wallménius | 0bfa3e7 | 2007-08-01 08:50:44 +0000 | [diff] [blame] | 163 | #ifndef HAVE_FLASH_STORAGE |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 164 | MENUITEM_SETTING(disk_spindown, &global_settings.disk_spindown, NULL); |
Nils Wallménius | 0bfa3e7 | 2007-08-01 08:50:44 +0000 | [diff] [blame] | 165 | #endif |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 166 | #ifdef HAVE_DIRCACHE |
| 167 | static int dircache_callback(int action,const struct menu_item_ex *this_item) |
| 168 | { |
| 169 | (void)this_item; |
| 170 | switch (action) |
| 171 | { |
| 172 | case ACTION_EXIT_MENUITEM: /* on exit */ |
| 173 | switch (global_settings.dircache) |
| 174 | { |
| 175 | case true: |
| 176 | if (!dircache_is_enabled()) |
Jens Arnold | 4d6374c | 2007-03-16 21:56:08 +0000 | [diff] [blame] | 177 | gui_syncsplash(HZ*2, str(LANG_PLEASE_REBOOT)); |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 178 | break; |
| 179 | case false: |
| 180 | if (dircache_is_enabled()) |
| 181 | dircache_disable(); |
| 182 | break; |
| 183 | } |
| 184 | break; |
| 185 | } |
| 186 | return action; |
| 187 | } |
| 188 | MENUITEM_SETTING(dircache, &global_settings.dircache, dircache_callback); |
| 189 | #endif |
Nils Wallménius | 0bfa3e7 | 2007-08-01 08:50:44 +0000 | [diff] [blame] | 190 | #if defined(HAVE_DIRCACHE) || !defined(HAVE_FLASH_STORAGE) |
Jonathan Gordon | 02a8717 | 2007-03-03 13:52:14 +0000 | [diff] [blame] | 191 | MAKE_MENU(disk_menu, ID2P(LANG_DISK_MENU), 0, Icon_NOICON, |
Nils Wallménius | 0bfa3e7 | 2007-08-01 08:50:44 +0000 | [diff] [blame] | 192 | #ifndef HAVE_FLASH_STORAGE |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 193 | &disk_spindown, |
Nils Wallménius | 0bfa3e7 | 2007-08-01 08:50:44 +0000 | [diff] [blame] | 194 | #endif |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 195 | #ifdef HAVE_DIRCACHE |
| 196 | &dircache, |
| 197 | #endif |
| 198 | ); |
| 199 | #endif |
| 200 | |
| 201 | /* Time & Date */ |
Jens Arnold | 2c7b127 | 2007-03-16 23:47:03 +0000 | [diff] [blame] | 202 | #if CONFIG_RTC |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 203 | static int timedate_set(void) |
| 204 | { |
| 205 | struct tm tm; |
| 206 | int result; |
| 207 | |
| 208 | /* Make a local copy of the time struct */ |
| 209 | memcpy(&tm, get_time(), sizeof(struct tm)); |
| 210 | |
| 211 | /* do some range checks */ |
| 212 | /* This prevents problems with time/date setting after a power loss */ |
| 213 | if (!valid_time(&tm)) |
| 214 | { |
Robert Kukla | 8f1bc1f | 2007-03-31 13:04:22 +0000 | [diff] [blame] | 215 | /* Macros to convert a 2-digit string to a decimal constant. |
| 216 | (YEAR), MONTH and DAY are set by the date command, which outputs |
| 217 | DAY as 00..31 and MONTH as 01..12. The leading zero would lead to |
| 218 | misinterpretation as an octal constant. */ |
| 219 | #define S100(x) 1 ## x |
| 220 | #define C2DIG2DEC(x) (S100(x)-100) |
| 221 | |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 222 | tm.tm_hour = 0; |
| 223 | tm.tm_min = 0; |
| 224 | tm.tm_sec = 0; |
Robert Kukla | 8f1bc1f | 2007-03-31 13:04:22 +0000 | [diff] [blame] | 225 | tm.tm_mday = C2DIG2DEC(DAY); |
| 226 | tm.tm_mon = C2DIG2DEC(MONTH)-1; |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 227 | tm.tm_wday = 1; |
Robert Kukla | 8f1bc1f | 2007-03-31 13:04:22 +0000 | [diff] [blame] | 228 | tm.tm_year = YEAR-1900; |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 229 | } |
| 230 | |
| 231 | result = (int)set_time_screen(str(LANG_TIME), &tm); |
| 232 | |
| 233 | if(tm.tm_year != -1) { |
| 234 | set_time(&tm); |
| 235 | } |
| 236 | return result; |
| 237 | } |
| 238 | |
Jonathan Gordon | daf6694 | 2007-03-17 12:33:34 +0000 | [diff] [blame] | 239 | MENUITEM_FUNCTION(time_set, 0, ID2P(LANG_TIME), |
Jonathan Gordon | e54d8e1 | 2007-03-18 07:03:43 +0000 | [diff] [blame] | 240 | timedate_set, NULL, NULL, Icon_NOICON); |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 241 | MENUITEM_SETTING(timeformat, &global_settings.timeformat, NULL); |
Jonathan Gordon | 02a8717 | 2007-03-03 13:52:14 +0000 | [diff] [blame] | 242 | MAKE_MENU(time_menu, ID2P(LANG_TIME_MENU), 0, Icon_NOICON, &time_set, &timeformat); |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 243 | #endif |
| 244 | |
| 245 | /* System menu */ |
| 246 | MENUITEM_SETTING(poweroff, &global_settings.poweroff, NULL); |
| 247 | |
Thom Johansen | 8fd6d65 | 2007-02-28 21:55:11 +0000 | [diff] [blame] | 248 | #ifdef HAVE_RTC_ALARM |
Jonathan Gordon | daf6694 | 2007-03-17 12:33:34 +0000 | [diff] [blame] | 249 | MENUITEM_FUNCTION(alarm_screen_call, 0, ID2P(LANG_ALARM_MOD_ALARM_MENU), |
Jonathan Gordon | e54d8e1 | 2007-03-18 07:03:43 +0000 | [diff] [blame] | 250 | (menu_function)alarm_screen, NULL, NULL, Icon_NOICON); |
Jonathan Gordon | d0a7cf0 | 2007-03-07 07:36:04 +0000 | [diff] [blame] | 251 | #if CONFIG_TUNER || defined(HAVE_RECORDING) |
| 252 | |
| 253 | #if CONFIG_TUNER && !defined(HAVE_RECORDING) |
| 254 | /* This need only be shown if we dont have recording, because if we do |
| 255 | then always show the setting item, because there will always be at least |
| 256 | 2 items */ |
| 257 | static int alarm_callback(int action,const struct menu_item_ex *this_item) |
| 258 | { |
| 259 | (void)this_item; |
| 260 | switch (action) |
| 261 | { |
| 262 | case ACTION_REQUEST_MENUITEM: |
| 263 | if (radio_hardware_present() == 0) |
| 264 | return ACTION_EXIT_MENUITEM; |
| 265 | break; |
| 266 | } |
| 267 | return action; |
| 268 | } |
| 269 | #else |
| 270 | #define alarm_callback NULL |
| 271 | #endif /* CONFIG_TUNER && !HAVE_RECORDING */ |
| 272 | /* have to do this manually because the setting screen |
| 273 | doesnt handle variable item count */ |
| 274 | static int alarm_setting(void) |
| 275 | { |
| 276 | struct opt_items items[ALARM_START_COUNT]; |
| 277 | int i = 0; |
| 278 | items[i].string = str(LANG_RESUME_PLAYBACK); |
| 279 | items[i].voice_id = LANG_RESUME_PLAYBACK; |
| 280 | i++; |
| 281 | #if CONFIG_TUNER |
| 282 | if (radio_hardware_present()) |
| 283 | { |
| 284 | items[i].string = str(LANG_FM_RADIO); |
| 285 | items[i].voice_id = LANG_FM_RADIO; |
| 286 | i++; |
| 287 | } |
Jonathan Gordon | 9e554a8 | 2007-03-07 01:16:25 +0000 | [diff] [blame] | 288 | #endif |
Jonathan Gordon | d0a7cf0 | 2007-03-07 07:36:04 +0000 | [diff] [blame] | 289 | #ifdef HAVE_RECORDING |
| 290 | items[i].string = str(LANG_RECORDING); |
| 291 | items[i].voice_id = LANG_RECORDING; |
| 292 | i++; |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 293 | #endif |
Jonathan Gordon | d0a7cf0 | 2007-03-07 07:36:04 +0000 | [diff] [blame] | 294 | return set_option(str(LANG_ALARM_WAKEUP_SCREEN), |
| 295 | &global_settings.alarm_wake_up_screen, |
| 296 | INT, items, i, NULL); |
| 297 | } |
| 298 | |
Jonathan Gordon | daf6694 | 2007-03-17 12:33:34 +0000 | [diff] [blame] | 299 | MENUITEM_FUNCTION(alarm_wake_up_screen, 0, ID2P(LANG_ALARM_WAKEUP_SCREEN), |
Jonathan Gordon | e54d8e1 | 2007-03-18 07:03:43 +0000 | [diff] [blame] | 300 | alarm_setting, NULL, alarm_callback, Icon_Menu_setting); |
Jonathan Gordon | d0a7cf0 | 2007-03-07 07:36:04 +0000 | [diff] [blame] | 301 | #endif /* CONFIG_TUNER || defined(HAVE_RECORDING) */ |
| 302 | #endif /* HAVE_RTC_ALARM */ |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 303 | |
| 304 | /* Limits menu */ |
| 305 | MENUITEM_SETTING(max_files_in_dir, &global_settings.max_files_in_dir, NULL); |
| 306 | MENUITEM_SETTING(max_files_in_playlist, &global_settings.max_files_in_playlist, NULL); |
Jonathan Gordon | 02a8717 | 2007-03-03 13:52:14 +0000 | [diff] [blame] | 307 | MAKE_MENU(limits_menu, ID2P(LANG_LIMITS_MENU), 0, Icon_NOICON, |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 308 | &max_files_in_dir, &max_files_in_playlist); |
| 309 | |
| 310 | #if CONFIG_CODEC == MAS3507D |
| 311 | void dac_line_in(bool enable); |
| 312 | static int linein_callback(int action,const struct menu_item_ex *this_item) |
| 313 | { |
| 314 | (void)this_item; |
| 315 | switch (action) |
| 316 | { |
| 317 | case ACTION_EXIT_MENUITEM: /* on exit */ |
| 318 | #ifndef SIMULATOR |
| 319 | dac_line_in(global_settings.line_in); |
| 320 | #endif |
| 321 | break; |
| 322 | } |
| 323 | return action; |
| 324 | } |
| 325 | MENUITEM_SETTING(line_in, &global_settings.line_in, linein_callback); |
| 326 | #endif |
Jonathan Gordon | 9a6f419 | 2007-02-18 05:32:06 +0000 | [diff] [blame] | 327 | #if CONFIG_CHARGING |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 328 | MENUITEM_SETTING(car_adapter_mode, &global_settings.car_adapter_mode, NULL); |
| 329 | #endif |
Jonathan Gordon | 91cb68a | 2007-03-01 11:14:46 +0000 | [diff] [blame] | 330 | MENUITEM_SETTING(start_screen, &global_settings.start_in_screen, NULL); |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 331 | |
Jonathan Gordon | 4b1d1b4 | 2007-04-22 13:02:24 +0000 | [diff] [blame] | 332 | #ifdef HAVE_BUTTON_LIGHT |
| 333 | MENUITEM_SETTING(button_light_timeout, &global_settings.button_light_timeout, NULL); |
| 334 | #endif |
| 335 | |
Karl Kurbjun | 6f95ab7 | 2007-05-08 06:45:38 +0000 | [diff] [blame] | 336 | #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS |
| 337 | MENUITEM_SETTING(buttonlight_brightness, &global_settings.buttonlight_brightness, NULL); |
| 338 | #endif |
| 339 | |
Jonathan Gordon | 5599d68 | 2007-02-14 06:58:30 +0000 | [diff] [blame] | 340 | MAKE_MENU(system_menu, ID2P(LANG_SYSTEM), |
Jonathan Gordon | 02a8717 | 2007-03-03 13:52:14 +0000 | [diff] [blame] | 341 | 0, Icon_System_menu, |
Jonathan Gordon | 91cb68a | 2007-03-01 11:14:46 +0000 | [diff] [blame] | 342 | &start_screen, |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 343 | #ifndef SIMULATOR |
| 344 | &battery_menu, |
| 345 | #endif |
Nils Wallménius | f7f8ee1 | 2007-08-01 09:05:42 +0000 | [diff] [blame^] | 346 | #if defined(HAVE_DIRCACHE) || !defined(HAVE_FLASH_STORAGE) |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 347 | &disk_menu, |
| 348 | #endif |
Jens Arnold | 2c7b127 | 2007-03-16 23:47:03 +0000 | [diff] [blame] | 349 | #if CONFIG_RTC |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 350 | &time_menu, |
| 351 | #endif |
| 352 | &poweroff, |
Thom Johansen | 8fd6d65 | 2007-02-28 21:55:11 +0000 | [diff] [blame] | 353 | #ifdef HAVE_RTC_ALARM |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 354 | &alarm_screen_call, |
Jonathan Gordon | 9e554a8 | 2007-03-07 01:16:25 +0000 | [diff] [blame] | 355 | #if defined(HAVE_RECORDING) || CONFIG_TUNER |
| 356 | &alarm_wake_up_screen, |
| 357 | #endif |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 358 | #endif |
| 359 | &limits_menu, |
| 360 | #if CONFIG_CODEC == MAS3507D |
| 361 | &line_in, |
| 362 | #endif |
Jonathan Gordon | 9a6f419 | 2007-02-18 05:32:06 +0000 | [diff] [blame] | 363 | #if CONFIG_CHARGING |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 364 | &car_adapter_mode, |
| 365 | #endif |
Jonathan Gordon | 4b1d1b4 | 2007-04-22 13:02:24 +0000 | [diff] [blame] | 366 | #ifdef HAVE_BUTTON_LIGHT |
| 367 | &button_light_timeout, |
| 368 | #endif |
Karl Kurbjun | 6f95ab7 | 2007-05-08 06:45:38 +0000 | [diff] [blame] | 369 | #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS |
| 370 | &buttonlight_brightness |
| 371 | #endif |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 372 | ); |
| 373 | |
| 374 | /* SYSTEM MENU */ |
| 375 | /***********************************/ |
| 376 | |
| 377 | |
| 378 | /***********************************/ |
| 379 | /* BOOKMARK MENU */ |
| 380 | static int bmark_callback(int action,const struct menu_item_ex *this_item) |
| 381 | { |
| 382 | (void)this_item; |
| 383 | switch (action) |
| 384 | { |
| 385 | case ACTION_EXIT_MENUITEM: /* on exit */ |
| 386 | if(global_settings.autocreatebookmark == BOOKMARK_RECENT_ONLY_YES || |
| 387 | global_settings.autocreatebookmark == BOOKMARK_RECENT_ONLY_ASK) |
| 388 | { |
| 389 | if(global_settings.usemrb == BOOKMARK_NO) |
| 390 | global_settings.usemrb = BOOKMARK_YES; |
| 391 | |
| 392 | } |
| 393 | break; |
| 394 | } |
| 395 | return action; |
| 396 | } |
| 397 | MENUITEM_SETTING(autocreatebookmark, |
| 398 | &global_settings.autocreatebookmark, bmark_callback); |
| 399 | MENUITEM_SETTING(autoloadbookmark, &global_settings.autoloadbookmark, NULL); |
| 400 | MENUITEM_SETTING(usemrb, &global_settings.usemrb, NULL); |
| 401 | MAKE_MENU(bookmark_settings_menu, ID2P(LANG_BOOKMARK_SETTINGS), 0, |
Jonathan Gordon | 02a8717 | 2007-03-03 13:52:14 +0000 | [diff] [blame] | 402 | Icon_Bookmark, |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 403 | &autocreatebookmark, &autoloadbookmark, &usemrb); |
| 404 | /* BOOKMARK MENU */ |
| 405 | /***********************************/ |
| 406 | |
| 407 | /***********************************/ |
| 408 | /* VOICE MENU */ |
| 409 | static int talk_callback(int action,const struct menu_item_ex *this_item); |
Steve Bavin | 6fd10ba | 2007-06-07 09:24:53 +0000 | [diff] [blame] | 410 | MENUITEM_SETTING(talk_menu_item, &global_settings.talk_menu, NULL); |
| 411 | MENUITEM_SETTING(talk_dir_item, &global_settings.talk_dir, NULL); |
| 412 | MENUITEM_SETTING(talk_dir_clip_item, &global_settings.talk_dir_clip, talk_callback); |
| 413 | MENUITEM_SETTING(talk_file_item, &global_settings.talk_file, NULL); |
| 414 | MENUITEM_SETTING(talk_file_clip_item, &global_settings.talk_file_clip, talk_callback); |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 415 | static int talk_callback(int action,const struct menu_item_ex *this_item) |
| 416 | { |
| 417 | static int oldval = 0; |
| 418 | switch (action) |
| 419 | { |
| 420 | case ACTION_ENTER_MENUITEM: |
Steve Bavin | 6fd10ba | 2007-06-07 09:24:53 +0000 | [diff] [blame] | 421 | oldval = global_settings.talk_file_clip; |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 422 | break; |
| 423 | case ACTION_EXIT_MENUITEM: |
| 424 | #if CONFIG_CODEC == SWCODEC |
| 425 | audio_set_crossfade(global_settings.crossfade); |
| 426 | #endif |
Steve Bavin | 6fd10ba | 2007-06-07 09:24:53 +0000 | [diff] [blame] | 427 | if (this_item == &talk_dir_clip_item) |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 428 | break; |
Steve Bavin | 6fd10ba | 2007-06-07 09:24:53 +0000 | [diff] [blame] | 429 | if (!oldval && global_settings.talk_file_clip) |
| 430 | { |
| 431 | /* force reload if newly talking thumbnails, |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 432 | because the clip presence is cached only if enabled */ |
| 433 | reload_directory(); |
| 434 | } |
| 435 | break; |
| 436 | } |
| 437 | return action; |
| 438 | } |
Jonathan Gordon | 02a8717 | 2007-03-03 13:52:14 +0000 | [diff] [blame] | 439 | MAKE_MENU(voice_settings_menu, ID2P(LANG_VOICE), 0, Icon_Voice, |
Steve Bavin | 6fd10ba | 2007-06-07 09:24:53 +0000 | [diff] [blame] | 440 | &talk_menu_item, &talk_dir_item, &talk_dir_clip_item, |
| 441 | &talk_file_item, &talk_file_clip_item); |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 442 | /* VOICE MENU */ |
| 443 | /***********************************/ |
| 444 | |
| 445 | /***********************************/ |
| 446 | /* SETTINGS MENU */ |
| 447 | static int language_browse(void) |
| 448 | { |
| 449 | return (int)rockbox_browse(LANG_DIR, SHOW_LNG); |
| 450 | } |
Jonathan Gordon | daf6694 | 2007-03-17 12:33:34 +0000 | [diff] [blame] | 451 | MENUITEM_FUNCTION(browse_langs, 0, ID2P(LANG_LANGUAGE), language_browse, |
Jonathan Gordon | e54d8e1 | 2007-03-18 07:03:43 +0000 | [diff] [blame] | 452 | NULL, NULL, Icon_Language); |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 453 | |
| 454 | MAKE_MENU(settings_menu_item, ID2P(LANG_GENERAL_SETTINGS), 0, |
Jonathan Gordon | 02a8717 | 2007-03-03 13:52:14 +0000 | [diff] [blame] | 455 | Icon_General_settings_menu, |
Jonathan Gordon | 91cb68a | 2007-03-01 11:14:46 +0000 | [diff] [blame] | 456 | &playback_menu_item, &playlist_settings, &file_menu, |
Marcoen Hirschberg | 44c510e | 2007-03-01 17:39:15 +0000 | [diff] [blame] | 457 | #ifdef HAVE_TAGCACHE |
| 458 | &tagcache_menu, |
| 459 | #endif |
Jonathan Gordon | 91cb68a | 2007-03-01 11:14:46 +0000 | [diff] [blame] | 460 | &display_menu, &system_menu, |
Jonathan Gordon | cd2d62c | 2007-02-13 07:50:47 +0000 | [diff] [blame] | 461 | &bookmark_settings_menu, &browse_langs, &voice_settings_menu ); |
| 462 | /* SETTINGS MENU */ |
| 463 | /***********************************/ |