/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id$ * * Copyright (C) 2003 Zakk Roberts * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * 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" #include "clock_menu.h" #include "lib/playback_control.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 }, { "Use 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 }, { "US (M-D-Y)", -1 }, { "European (D-M-Y)", -1 }, { "Japanese (Y-M-D)", -1 }, }; static const struct opt_items hour_format_text[] = { { "24-Hour", -1 }, { "12-Hour", -1 } }; /*************** * Select a mode, returs true when the mode has been selected * (we go back to clock display then) **************/ static bool menu_mode_selector(void){ MENUITEM_STRINGLIST(menu,"Mode Selector",NULL, "Analog", "Digital", "Binary"); if(rb->do_menu(&menu, &clock_settings.mode, NULL, false) >=0) return(true); return(false); } /********************** * Analog settings menu *********************/ static 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, NULL, false); 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 **********************/ static 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, NULL, false); 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() **********************************************************/ static 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 ***********************************/ static 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, NULL, false); 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","Playback Control", "Quit"); while(!done){ switch(rb->do_menu(&menu, &selection, NULL, false)){ 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: playback_control(NULL); break; case 5: exit_clock = true; done = true; break; default: done=true; break; } } return(exit_clock); } id='n156' href='#n156'>156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331