summaryrefslogtreecommitdiff
path: root/apps/menus/settings_menu.c
diff options
context:
space:
mode:
authorNick Peskett <rockbox@peskett.co.uk>2011-12-26 08:26:38 +0000
committerNick Peskett <rockbox@peskett.co.uk>2011-12-26 08:26:38 +0000
commit2ecaca91f028fec8bae7b66ffb014f60afd7b34f (patch)
tree54efdbda16def5680097c11f060e9e5e606dd023 /apps/menus/settings_menu.c
parent3bc771d669676e9295c3f369955b7e46f5b413d2 (diff)
downloadrockbox-2ecaca91f028fec8bae7b66ffb014f60afd7b34f.zip
rockbox-2ecaca91f028fec8bae7b66ffb014f60afd7b34f.tar.gz
rockbox-2ecaca91f028fec8bae7b66ffb014f60afd7b34f.tar.bz2
rockbox-2ecaca91f028fec8bae7b66ffb014f60afd7b34f.tar.xz
New General Settings submenu: Startup/Shutdown
A dedicated submenu for items which are run at startup, or initiate a shutdown. Currently containing: Start Screen, Idle Poweroff, Sleep Timer & Start Sleep Timer on Boot. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31435 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/menus/settings_menu.c')
-rw-r--r--apps/menus/settings_menu.c109
1 files changed, 103 insertions, 6 deletions
diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c
index bcb182e..cce5dd7 100644
--- a/apps/menus/settings_menu.c
+++ b/apps/menus/settings_menu.c
@@ -215,9 +215,6 @@ MAKE_MENU(disk_menu, ID2P(LANG_DISK_MENU), 0, Icon_NOICON,
);
#endif
-/* System menu */
-MENUITEM_SETTING(poweroff, &global_settings.poweroff, NULL);
-
/* Limits menu */
MENUITEM_SETTING(max_files_in_dir, &global_settings.max_files_in_dir, NULL);
MENUITEM_SETTING(max_files_in_playlist, &global_settings.max_files_in_playlist, NULL);
@@ -276,7 +273,6 @@ MENUITEM_SETTING(accessory_supply, &global_settings.accessory_supply, NULL);
#ifdef HAVE_LINEOUT_POWEROFF
MENUITEM_SETTING(lineout_onoff, &global_settings.lineout_active, NULL);
#endif
-MENUITEM_SETTING(start_screen, &global_settings.start_in_screen, NULL);
#ifdef USB_ENABLE_HID
MENUITEM_SETTING(usb_hid, &global_settings.usb_hid, NULL);
MENUITEM_SETTING(usb_keypad_mode, &global_settings.usb_keypad_mode, NULL);
@@ -303,14 +299,12 @@ MENUITEM_SETTING(touchpad_sensitivity, &global_settings.touchpad_sensitivity, NU
MAKE_MENU(system_menu, ID2P(LANG_SYSTEM),
0, Icon_System_menu,
- &start_screen,
#if (BATTERY_CAPACITY_INC > 0) || (BATTERY_TYPES_COUNT > 1)
&battery_menu,
#endif
#if defined(HAVE_DIRCACHE) || defined(HAVE_DISK_STORAGE)
&disk_menu,
#endif
- &poweroff,
&limits_menu,
#ifdef HAVE_MORSE_INPUT
&morse_input,
@@ -354,6 +348,108 @@ MAKE_MENU(system_menu, ID2P(LANG_SYSTEM),
/* SYSTEM MENU */
/***********************************/
+/***********************************/
+/* STARTUP/SHUTDOWN MENU */
+
+/* sleep timer option */
+const char* sleep_timer_formatter(char* buffer, size_t buffer_size,
+ int value, const char* unit)
+{
+ (void) unit;
+ int minutes, hours;
+
+ if (value) {
+ hours = value / 60;
+ minutes = value - (hours * 60);
+ snprintf(buffer, buffer_size, "%d:%02d", hours, minutes);
+ return buffer;
+ } else {
+ return str(LANG_OFF);
+ }
+}
+
+static void sleep_timer_set(int minutes)
+{
+ if (minutes)
+ global_settings.sleeptimer_duration = minutes;
+ set_sleep_timer(minutes * 60);
+}
+
+static int sleep_timer(void)
+{
+ int minutes = global_settings.sleeptimer_duration;
+ if (get_sleep_timer())
+ sleep_timer_set(0);
+ else
+ set_int(str(LANG_SLEEP_TIMER), "", UNIT_MIN, &minutes,
+ &sleep_timer_set, 5, 0, 300, sleep_timer_formatter);
+ return 0;
+}
+
+static int seconds_to_min(int secs)
+{
+ return (secs + 10) / 60; /* round up for 50+ seconds */
+}
+
+static char* sleep_timer_getname(int selected_item, void * data, char *buffer)
+{
+ (void)selected_item;
+ (void)data;
+ int sec = get_sleep_timer();
+ char timer_buf[10];
+ /* we have no sprintf, so MAX_PATH is a guess */
+ if (sec > 0)
+ { /* show cancel and countdown if running */
+ snprintf(buffer, MAX_PATH, "%s (%s)",
+ str(LANG_SLEEP_TIMER_CANCEL_CURRENT),
+ sleep_timer_formatter(timer_buf, sizeof(timer_buf),
+ seconds_to_min(sec), NULL));
+ }
+ else
+ snprintf(buffer, MAX_PATH, "%s", str(LANG_SLEEP_TIMER));
+
+ return buffer;
+}
+
+static int sleep_timer_voice(int selected_item, void*data)
+{
+ (void)selected_item;
+ (void)data;
+ int seconds = get_sleep_timer();
+ if (seconds > 0)
+ {
+ long talk_ids[] = {
+ LANG_SLEEP_TIMER_CANCEL_CURRENT,
+ VOICE_PAUSE,
+ seconds_to_min(seconds) | UNIT_MIN << UNIT_SHIFT,
+ TALK_FINAL_ID
+ };
+ talk_idarray(talk_ids, true);
+ }
+ else
+ talk_id(LANG_SLEEP_TIMER, true);
+ return 0;
+}
+
+MENUITEM_SETTING(start_screen, &global_settings.start_in_screen, NULL);
+MENUITEM_SETTING(poweroff, &global_settings.poweroff, NULL);
+MENUITEM_FUNCTION_DYNTEXT(sleep_timer_call, 0, sleep_timer, NULL,
+ sleep_timer_getname, sleep_timer_voice, NULL, NULL,
+ Icon_Menu_setting);
+ /* make it look like a setting to the user */
+MENUITEM_SETTING(sleeptimer_on_startup,
+ &global_settings.sleeptimer_on_startup, NULL);
+
+MAKE_MENU(startup_shutdown_menu, ID2P(LANG_STARTUP_SHUTDOWN),
+ 0, Icon_System_menu,
+ &start_screen,
+ &poweroff,
+ &sleep_timer_call,
+ &sleeptimer_on_startup
+ );
+
+/* STARTUP/SHUTDOWN MENU */
+/***********************************/
/***********************************/
/* BOOKMARK MENU */
@@ -513,6 +609,7 @@ MAKE_MENU(settings_menu_item, ID2P(LANG_GENERAL_SETTINGS), 0,
&tagcache_menu,
#endif
&display_menu, &system_menu,
+ &startup_shutdown_menu,
&bookmark_settings_menu,
#ifdef HAVE_TAGCACHE
#if CONFIG_CODEC == SWCODEC