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
This commit is contained in:
Nick Peskett 2011-12-26 08:26:38 +00:00
parent 3bc771d669
commit 2ecaca91f0
11 changed files with 179 additions and 169 deletions

View file

@ -12965,3 +12965,17 @@
*: "Glyphs To Cache"
</voice>
</phrase>
<phrase>
id: LANG_STARTUP_SHUTDOWN
desc: in the general settings menu
user: core
<source>
*: "Startup/Shutdown"
</source>
<dest>
*: "Startup/Shutdown"
</dest>
<voice>
*: "Startup/Shutdown"
</voice>
</phrase>

View file

@ -38,7 +38,6 @@ extern const struct menu_item_ex
sound_settings, /* sound_menu.c */
settings_menu_item, /* settings_menu.c */
bookmark_settings_menu,
sleep_timer_call, /* main_menu.c */
playlist_settings, /* playlist_menu.c */
equalizer_menu, /* eq_menu.c */
#ifdef AUDIOHW_HAVE_EQ

View file

@ -374,97 +374,11 @@ static bool show_info(void)
MENUITEM_FUNCTION(show_info_item, 0, ID2P(LANG_ROCKBOX_INFO),
(menu_function)show_info, NULL, NULL, Icon_NOICON);
/* sleep Menu */
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;
}
#if CONFIG_RTC
int time_screen(void* ignored);
MENUITEM_FUNCTION(timedate_item, MENU_FUNC_CHECK_RETVAL, ID2P(LANG_TIME_MENU),
time_screen, NULL, NULL, Icon_Menu_setting );
#endif
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 */
#if CONFIG_RTC == 0
MENUITEM_SETTING(sleeptimer_on_startup,
&global_settings.sleeptimer_on_startup, NULL);
#endif
MENUITEM_FUNCTION(show_credits_item, 0, ID2P(LANG_CREDITS),
(menu_function)show_credits, NULL, NULL, Icon_NOICON);
@ -511,8 +425,6 @@ MAKE_MENU(main_menu_, ID2P(LANG_SETTINGS), mainmenu_callback,
#endif
#if CONFIG_RTC
&timedate_item,
#else
&sleep_timer_call, &sleeptimer_on_startup,
#endif
&manage_settings,
);

View file

@ -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

View file

@ -28,10 +28,8 @@
#include "lang.h"
#include "action.h"
#include "settings.h"
#include "powermgmt.h"
#include "menu.h"
#include "misc.h"
#include "exported_menus.h"
#include "keyboard.h"
#include "talk.h"
#include "time.h"
@ -136,8 +134,6 @@ MENUITEM_FUNCTION(alarm_wake_up_screen, 0, ID2P(LANG_ALARM_WAKEUP_SCREEN),
#endif /* CONFIG_TUNER || defined(HAVE_RECORDING) */
#endif /* HAVE_RTC_ALARM */
MENUITEM_SETTING(sleeptimer_on_startup,
&global_settings.sleeptimer_on_startup, NULL);
void talk_timedate(void)
{
@ -237,14 +233,14 @@ static int time_menu_callback(int action,
MAKE_MENU(time_menu, ID2P(LANG_TIME_MENU), time_menu_callback, Icon_NOICON,
&time_set, &sleep_timer_call,
&time_set,
#ifdef HAVE_RTC_ALARM
&alarm_screen_call,
#if defined(HAVE_RECORDING) || CONFIG_TUNER
&alarm_wake_up_screen,
#endif
#endif
&sleeptimer_on_startup, &timeformat);
&timeformat);
int time_screen(void* ignored)
{