From 2ecaca91f028fec8bae7b66ffb014f60afd7b34f Mon Sep 17 00:00:00 2001 From: Nick Peskett Date: Mon, 26 Dec 2011 08:26:38 +0000 Subject: 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 --- apps/menus/settings_menu.c | 109 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 103 insertions(+), 6 deletions(-) (limited to 'apps/menus/settings_menu.c') diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c index bcb182ebca..cce5dd751d 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 -- cgit v1.2.3