summaryrefslogtreecommitdiff
path: root/apps/plugins/clock/clock_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/clock/clock_menu.c')
-rw-r--r--apps/plugins/clock/clock_menu.c246
1 files changed, 246 insertions, 0 deletions
diff --git a/apps/plugins/clock/clock_menu.c b/apps/plugins/clock/clock_menu.c
new file mode 100644
index 0000000..3310dbf
--- /dev/null
+++ b/apps/plugins/clock/clock_menu.c
@@ -0,0 +1,246 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id: jackpot.c 14034 2007-07-28 05:42:55Z kevin $
+ *
+ * Copyright (C) 2003 Zakk Roberts
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "clock.h"
+#include "clock_bitmaps.h"
+#include "clock_settings.h"
+
+/* Option structs (possible selections per each option) */
+static const struct opt_items noyes_text[] = {
+ { "No", -1 },
+ { "Yes", -1 }
+};
+
+static const struct opt_items backlight_settings_text[] = {
+ { "Always Off", -1 },
+ { "Rockbox setting", -1 },
+ { "Always On", -1 }
+};
+
+static const struct opt_items idle_poweroff_text[] = {
+ { "Disabled", -1 },
+ { "Enabled", -1 }
+};
+
+static const struct opt_items date_format_text[] = {
+ { "No date", -1 },
+ { "English format", -1 },
+ { "European format", -1 },
+ { "Japanese format", -1 },
+};
+
+static const struct opt_items hour_format_text[] = {
+ { "24-hour Format", -1 },
+ { "12-hour Format", -1 }
+};
+
+/***************
+ * Select a mode, returs true when the mode has been selected
+ * (we go back to clock display then)
+ **************/
+bool menu_mode_selector(void){
+ MENUITEM_STRINGLIST(menu,"Mode Selector",NULL, "Analog",
+ "Digital", "Binary");
+ if(rb->do_menu(&menu, &clock_settings.mode) >=0)
+ return(true);
+ return(false);
+}
+
+/**********************
+ * Analog settings menu
+ *********************/
+void menu_analog_settings(void)
+{
+ int selection=0, result=0;
+
+ MENUITEM_STRINGLIST(menu,"Analog Mode Settings",NULL,"Show Date",
+ "Show Second Hand","Show Border");
+
+ while(result>=0){
+ result=rb->do_menu(&menu, &selection);
+ switch(result){
+ case 0:
+ rb->set_option("Show Date", &clock_settings.analog.show_date,
+ BOOL, noyes_text, 2, NULL);
+ break;
+ case 1:
+ rb->set_option("Show Second Hand",
+ &clock_settings.analog.show_seconds,
+ BOOL, noyes_text, 2, NULL);
+ break;
+ case 2:
+ rb->set_option("Show Border",
+ &clock_settings.analog.show_border,
+ BOOL, noyes_text, 2, NULL);
+ break;
+ }
+ }
+}
+
+/***********************
+ * Digital settings menu
+ **********************/
+void menu_digital_settings(void){
+ int selection=0, result=0;
+
+ MENUITEM_STRINGLIST(menu,"Digital Mode Settings",NULL,"Show Seconds",
+ "Blinking Colon");
+
+ while(result>=0){
+ result=rb->do_menu(&menu, &selection);
+ switch(result){
+ case 0:
+ rb->set_option("Show Seconds",
+ &clock_settings.digital.show_seconds,
+ BOOL, noyes_text, 2, NULL);
+ break;
+ case 1:
+ rb->set_option("Blinking Colon",
+ &clock_settings.digital.blinkcolon,
+ BOOL, noyes_text, 2, NULL);
+ break;
+ }
+ }
+}
+
+/***********************************************************
+ * Confirm resetting of settings, used in general_settings()
+ **********************************************************/
+void confirm_reset(void){
+ int result=0;
+
+ rb->set_option("Reset all settings?", &result, INT, noyes_text, 2, NULL);
+
+ if(result == 1){ /* reset! */
+ clock_settings_reset(&clock_settings);
+ rb->splash(HZ, "Settings reset!");
+ }
+ else
+ rb->splash(HZ, "Settings NOT reset.");
+}
+
+/************************************
+ * General settings. Reset, save, etc
+ ***********************************/
+void menu_general_settings(void){
+ int selection=0, result=0;
+
+ MENUITEM_STRINGLIST(menu,"General Settings",NULL,
+ "Hour format","Date format","Show Counter",
+ "Reset Settings","Save Settings Now",
+ "Save On Exit","Backlight Settings",
+ "Idle Poweroff (temporary)");
+
+ while(result>=0){
+ result=rb->do_menu(&menu, &selection);
+ switch(result){
+ case 0:
+ rb->set_option("Hour format",
+ &clock_settings.general.hour_format,
+ INT, hour_format_text, 2, NULL);
+ break;
+ case 1:
+ rb->set_option("Date format",
+ &clock_settings.general.date_format,
+ INT, date_format_text, 4, NULL);
+ break;
+ case 2:
+ rb->set_option("Show Counter", &clock_settings.general.show_counter,
+ BOOL, noyes_text, 2, NULL);
+ break;
+ case 3:
+ confirm_reset();
+ break;
+
+ case 4:
+ save_settings_wo_gui();
+ rb->splash(HZ, "Settings saved");
+ break;
+
+ case 5:
+ rb->set_option("Save On Exit",
+ &clock_settings.general.save_settings,
+ BOOL, noyes_text, 2, NULL);
+
+ /* if we no longer save on exit,
+ we better save now to remember that */
+ if(!clock_settings.general.save_settings)
+ save_settings_wo_gui();
+ break;
+ case 6:
+ rb->set_option("Backlight Settings",
+ &clock_settings.general.backlight,
+ INT, backlight_settings_text, 3, NULL);
+ apply_backlight_setting(clock_settings.general.backlight);
+ break;
+
+ case 7:
+ rb->set_option("Idle Poweroff (temporary)",
+ &clock_settings.general.idle_poweroff,
+ BOOL, idle_poweroff_text, 2, NULL);
+ break;
+ }
+ }
+}
+
+/***********
+ * Main menu
+ **********/
+bool main_menu(void){
+ int selection=0;
+ bool done = false;
+ bool exit_clock=false;
+
+ MENUITEM_STRINGLIST(menu,"Clock Menu",NULL,"View Clock","Mode Selector",
+ "Mode Settings","General Settings","Quit");
+
+ while(!done){
+ switch(rb->do_menu(&menu, &selection)){
+ case 0:
+ done = true;
+ break;
+
+ case 1:
+ done=menu_mode_selector();
+ break;
+
+ case 2:
+ switch(clock_settings.mode){
+ case ANALOG: menu_analog_settings();break;
+ case DIGITAL: menu_digital_settings();break;
+ case BINARY: /* no settings */;break;
+ }
+ break;
+
+ case 3:
+ menu_general_settings();
+ break;
+
+ case 4:
+ exit_clock = true;
+ done = true;
+ break;
+
+ default:
+ done=true;
+ break;
+ }
+ }
+ return(exit_clock);
+}