From e232b0868181e6129e9cc0fdba772abd80e95228 Mon Sep 17 00:00:00 2001 From: Zakk Roberts Date: Tue, 14 Dec 2004 02:47:59 +0000 Subject: Fixed general settings typo, split up general settings function, added cursor animations and updated cursor look (rounded edges). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5483 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/clock.c | 671 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 444 insertions(+), 227 deletions(-) diff --git a/apps/plugins/clock.c b/apps/plugins/clock.c index ab2e05e7c2..03ac0921a1 100644 --- a/apps/plugins/clock.c +++ b/apps/plugins/clock.c @@ -5,7 +5,7 @@ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ - * $Id: clock.c,v 2.51 2003/12/8 + * $Id: clock.c,v 2.60 2003/12/8 * * Copyright (C) 2003 Zakk Roberts * @@ -20,6 +20,10 @@ /***************************** * RELEASE NOTES +***** VERSION 2.60 ** +Fixed general settings typo, split up settings function, added cursor animations, +and updated cursor look (rounded edges). + ***** VERSION 2.51 ** -"Show Counter" option is now saved to disk @@ -76,7 +80,13 @@ Original release, featuring analog / digital modes and a few options. #if defined(HAVE_LCD_BITMAP) && defined(HAVE_RTC) -#define CLOCK_VERSION "2.51" +#define CLOCK_VERSION "2.60" + +#define MODE_ANALOG 1 +#define MODE_DIGITAL 2 +#define MODE_LCD 3 +#define MODE_BINARY 4 +#define MODE_FULLSCREEN 5 /************ * Prototypes @@ -1279,7 +1289,7 @@ bool show_credits(void) /********************************************************************** * Cleanup on plugin return **********************************************************************/ - + void cleanup(void *parameter) { (void)parameter; /* unused */ @@ -1291,6 +1301,19 @@ void cleanup(void *parameter) rb->backlight_set_timeout(rb->global_settings->backlight_timeout); } +/************** + * Draws cursor + *************/ +void cursor(int x, int y, int w, int h) +{ + rb->lcd_invertrect(x, y, w, h); + + rb->lcd_clearpixel(x, y); + rb->lcd_clearpixel(x+w-1, y); + rb->lcd_clearpixel(x, y+h-1); + rb->lcd_clearpixel(x+w-1, y+h-1); +} + /****************** * F1 Screen - HELP *****************/ @@ -1436,7 +1459,7 @@ bool f1_screen(void) break; default: - if(rb->default_event_handler_ex(button, cleanup, NULL) + if(rb->default_event_handler_ex(button, cleanup, NULL) == SYS_USB_CONNECTED) return PLUGIN_USB_CONNECTED; break; @@ -1456,16 +1479,164 @@ void draw_checkbox(bool setting, int x, int y) rb->lcd_bitmap(checkbox_empty, x, y, 8, 6, true); } +void draw_settings(void) +{ + if(settings.clock == 1) + { + rb->lcd_puts(0, 0, "OPTIONS (Analog)"); + + rb->lcd_puts(2, 4, "Digits"); + + if(settings.analog_date == 0) + rb->lcd_puts(2, 5, "Date: Off"); + else if(settings.analog_date == 1) + rb->lcd_puts(2, 5, "Date: American"); + else + rb->lcd_puts(2, 5, "Date: European"); + + if(settings.analog_time == 0) + rb->lcd_puts(2, 6, "Time Readout:Off"); + else if(settings.analog_time == 1) + rb->lcd_puts(2, 6, "Time Readout:24h"); + else + rb->lcd_puts(2, 6, "Time Readout:12h"); + + rb->lcd_puts(2, 7, "Second Hand"); + + /* Draw checkboxes */ + draw_checkbox(settings.analog_digits, 1, 33); + + if(settings.analog_date == 0) + rb->lcd_bitmap(checkbox_empty, 1, 41, 8, 6, true); + else if(settings.analog_date == 1) + rb->lcd_bitmap(checkbox_half, 1, 41, 8, 6, true); + else + rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true); + + if(settings.analog_time == 0) + rb->lcd_bitmap(checkbox_empty, 1, 49, 8, 6, true); + else if(settings.analog_time == 1) + rb->lcd_bitmap(checkbox_half, 1, 49, 8, 6, true); + else + rb->lcd_bitmap(checkbox_full, 1, 49, 8, 6, true); + + draw_checkbox(settings.analog_secondhand, 1, 57); + } + else if(settings.clock == 2) + { + rb->lcd_puts(0, 0, "OPTIONS (Digital)"); + + if(settings.digital_date == 0) + rb->lcd_puts(2, 4, "Date: Off"); + else if(settings.digital_date == 1) + rb->lcd_puts(2, 4, "Date: American"); + else + rb->lcd_puts(2, 4, "Date: European"); + + if(settings.digital_seconds == 0) + rb->lcd_puts(2, 5, "Seconds: Off"); + else if(settings.digital_seconds == 1) + rb->lcd_puts(2, 5, "Seconds: Text"); + else if(settings.digital_seconds == 2) + rb->lcd_puts(2, 5, "Seconds: Bar"); + else + rb->lcd_puts(2, 5, "Seconds: Inverse"); + + rb->lcd_puts(2, 6, "Blinking Colon"); + rb->lcd_puts(2, 7, "12-Hour Format"); + + /* Draw checkboxes */ + if(settings.digital_date == 0) + rb->lcd_bitmap(checkbox_empty, 1, 33, 8, 6, true); + else if(settings.digital_date == 1) + rb->lcd_bitmap(checkbox_half, 1, 33, 8, 6, true); + else + rb->lcd_bitmap(checkbox_full, 1, 33, 8, 6, true); + + if(settings.digital_seconds == 0) + rb->lcd_bitmap(checkbox_empty, 1, 41, 8, 6, true); + else if(settings.digital_seconds == 1) + rb->lcd_bitmap(checkbox_onethird, 1, 41, 8, 6, true); + else if(settings.digital_seconds == 2) + rb->lcd_bitmap(checkbox_twothird, 1, 41, 8, 6, true); + else + rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true); + + draw_checkbox(settings.digital_blinkcolon, 1, 49); + draw_checkbox(settings.digital_12h, 1, 57); + } + else if(settings.clock == 3) + { + rb->lcd_puts(0, 0, "OPTIONS (LCD)"); + + if(settings.lcd_date == 0) + rb->lcd_puts(2, 4, "Date: Off"); + else if(settings.lcd_date == 1) + rb->lcd_puts(2, 4, "Date: American"); + else + rb->lcd_puts(2, 4, "Date: European"); + + if(settings.lcd_seconds == 0) + rb->lcd_puts(2, 5, "Seconds: Off"); + else if(settings.lcd_seconds == 1) + rb->lcd_puts(2, 5, "Seconds: Text"); + else if(settings.lcd_seconds == 2) + rb->lcd_puts(2, 5, "Seconds: Bar"); + else + rb->lcd_puts(2, 5, "Seconds: Inverse"); + + rb->lcd_puts(2, 6, "Blinking Colon"); + rb->lcd_puts(2, 7, "12-Hour Format"); + + /* Draw checkboxes */ + if(settings.lcd_date == 0) + rb->lcd_bitmap(checkbox_empty, 1, 33, 8, 6, true); + else if(settings.lcd_date == 1) + rb->lcd_bitmap(checkbox_half, 1, 33, 8, 6, true); + else + rb->lcd_bitmap(checkbox_full, 1, 33, 8, 6, true); + + if(settings.lcd_seconds == 0) + rb->lcd_bitmap(checkbox_empty, 1, 41, 8, 6, true); + else if(settings.lcd_seconds == 1) + rb->lcd_bitmap(checkbox_onethird, 1, 41, 8, 6, true); + else if(settings.lcd_seconds == 2) + rb->lcd_bitmap(checkbox_twothird, 1, 41, 8, 6, true); + else + rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true); + + draw_checkbox(settings.lcd_blinkcolon, 1, 49); + draw_checkbox(settings.lcd_12h, 1, 57); + } + else if(settings.clock == 4) + { + rb->lcd_puts(0, 0, "OPTIONS (Full)"); + + rb->lcd_puts(2, 4, "Border"); + rb->lcd_puts(2, 5, "Second Hand"); + rb->lcd_puts(2, 6, "Invert Seconds"); + + draw_checkbox(settings.fullscreen_border, 1, 33); + draw_checkbox(settings.fullscreen_secondhand, 1, 41); + draw_checkbox(settings.fullscreen_invertseconds, 1, 49); + } + else if(settings.clock == 5) + { + rb->lcd_puts(0, 0, "OPTIONS (Binary)"); + rb->lcd_puts(2, 4, "-- NO OPTIONS --"); + } +} + /********************* * F3 Screen - OPTIONS ********************/ bool f3_screen(void) { /* cursor positions */ - int invert_analog = 1; - int invert_digital = 1; - int invert_lcd = 1; - int invert_fullscreen = 1; + int invert_analog=1,analog_y,analog_dummy; + int invert_digital=1,digital_y,digital_dummy; + int invert_lcd=1,lcd_y,lcd_dummy; + int invert_full=1,full_y,full_dummy; done = false; @@ -1476,72 +1647,52 @@ bool f3_screen(void) rb->lcd_puts(0, 1, "UP/DN: move, L/R:"); rb->lcd_puts(0, 2, "change, OFF: done"); + draw_settings(); + if(settings.clock == 1) { - rb->lcd_puts(0, 0, "OPTIONS (Analog)"); - - rb->lcd_puts(2, 4, "Digits"); - - if(settings.analog_date == 0) - rb->lcd_puts(2, 5, "Date: Off"); - else if(settings.analog_date == 1) - rb->lcd_puts(2, 5, "Date: American"); - else - rb->lcd_puts(2, 5, "Date: European"); - - if(settings.analog_time == 0) - rb->lcd_puts(2, 6, "Time Readout:Off"); - else if(settings.analog_time == 1) - rb->lcd_puts(2, 6, "Time Readout:24h"); - else - rb->lcd_puts(2, 6, "Time Readout:12h"); - - rb->lcd_puts(2, 7, "Second Hand"); - - /* Draw checkboxes */ - draw_checkbox(settings.analog_digits, 1, 33); - - if(settings.analog_date == 0) - rb->lcd_bitmap(checkbox_empty, 1, 41, 8, 6, true); - else if(settings.analog_date == 1) - rb->lcd_bitmap(checkbox_half, 1, 41, 8, 6, true); - else - rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true); - - if(settings.analog_time == 0) - rb->lcd_bitmap(checkbox_empty, 1, 49, 8, 6, true); - else if(settings.analog_time == 1) - rb->lcd_bitmap(checkbox_half, 1, 49, 8, 6, true); - else - rb->lcd_bitmap(checkbox_full, 1, 49, 8, 6, true); - - draw_checkbox(settings.analog_secondhand, 1, 57); - /* Draw line selector */ switch(invert_analog) { - case 1: rb->lcd_invertrect(0, 32, 112, 8); break; - case 2: rb->lcd_invertrect(0, 40, 112, 8); break; - case 3: rb->lcd_invertrect(0, 48, 112, 8); break; - case 4: rb->lcd_invertrect(0, 56, 112, 8); break; + case 1: cursor(0, 32, 112, 8); break; + case 2: cursor(0, 40, 112, 8); break; + case 3: cursor(0, 48, 112, 8); break; + case 4: cursor(0, 56, 112, 8); break; } - rb->lcd_update(); switch(rb->button_get_w_tmo(HZ/4)) { case BUTTON_UP: if(invert_analog > 1) + { + analog_y = 32+(8*(invert_analog-1)); + analog_dummy = analog_y; + for(; analog_y>analog_dummy-8; analog_y--) + { + rb->lcd_clearrect(0, 32, 112, 32); + draw_settings(); + cursor(0, analog_y, 112, 8); + rb->lcd_update(); + } invert_analog--; - else - invert_analog = 4; + } break; case BUTTON_DOWN: if(invert_analog < 4) + { + analog_y = 32+(8*(invert_analog-1)); + analog_dummy = analog_y; + for(; analog_ylcd_clearrect(0, 32, 112, 32); + draw_settings(); + cursor(0, analog_y, 112, 8); + rb->lcd_update(); + } invert_analog++; - else - invert_analog = 1; + } break; case BUTTON_LEFT: @@ -1588,72 +1739,48 @@ bool f3_screen(void) } else if(settings.clock == 2) { - rb->lcd_puts(0, 0, "OPTIONS (Digital)"); - - if(settings.digital_date == 0) - rb->lcd_puts(2, 4, "Date: Off"); - else if(settings.digital_date == 1) - rb->lcd_puts(2, 4, "Date: American"); - else - rb->lcd_puts(2, 4, "Date: European"); - - if(settings.digital_seconds == 0) - rb->lcd_puts(2, 5, "Seconds: Off"); - else if(settings.digital_seconds == 1) - rb->lcd_puts(2, 5, "Seconds: Text"); - else if(settings.digital_seconds == 2) - rb->lcd_puts(2, 5, "Seconds: Bar"); - else - rb->lcd_puts(2, 5, "Seconds: Inverse"); - - rb->lcd_puts(2, 6, "Blinking Colon"); - rb->lcd_puts(2, 7, "12-Hour Format"); - - /* Draw checkboxes */ - if(settings.digital_date == 0) - rb->lcd_bitmap(checkbox_empty, 1, 33, 8, 6, true); - else if(settings.digital_date == 1) - rb->lcd_bitmap(checkbox_half, 1, 33, 8, 6, true); - else - rb->lcd_bitmap(checkbox_full, 1, 33, 8, 6, true); - - if(settings.digital_seconds == 0) - rb->lcd_bitmap(checkbox_empty, 1, 41, 8, 6, true); - else if(settings.digital_seconds == 1) - rb->lcd_bitmap(checkbox_onethird, 1, 41, 8, 6, true); - else if(settings.digital_seconds == 2) - rb->lcd_bitmap(checkbox_twothird, 1, 41, 8, 6, true); - else - rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true); - - draw_checkbox(settings.digital_blinkcolon, 1, 49); - draw_checkbox(settings.digital_12h, 1, 57); - /* Draw a line selector */ switch(invert_digital) { - case 1: rb->lcd_invertrect(0, 32, 112, 8); break; - case 2: rb->lcd_invertrect(0, 40, 112, 8); break; - case 3: rb->lcd_invertrect(0, 48, 112, 8); break; - case 4: rb->lcd_invertrect(0, 56, 112, 8); break; + case 1: cursor(0, 32, 112, 8); break; + case 2: cursor(0, 40, 112, 8); break; + case 3: cursor(0, 48, 112, 8); break; + case 4: cursor(0, 56, 112, 8); break; } - rb->lcd_update(); switch(rb->button_get_w_tmo(HZ/4)) { case BUTTON_UP: - if(invert_digital == 1) - invert_digital = 4; - else + if(invert_digital > 1) + { + digital_y = 32+(8*(invert_digital-1)); + digital_dummy = digital_y; + for(; digital_y>digital_dummy-8; digital_y--) + { + rb->lcd_clearrect(0, 32, 112, 32); + draw_settings(); + cursor(0, digital_y, 112, 8); + rb->lcd_update(); + } invert_digital--; + } break; case BUTTON_DOWN: - if(invert_digital == 4) - invert_digital = 1; - else + if(invert_digital < 4) + { + digital_y = 32+(8*(invert_digital-1)); + digital_dummy = digital_y; + for(; digital_ylcd_clearrect(0, 32, 112, 32); + draw_settings(); + cursor(0, digital_y, 112, 8); + rb->lcd_update(); + } invert_digital++; + } break; case BUTTON_LEFT: @@ -1700,71 +1827,48 @@ bool f3_screen(void) } else if(settings.clock == 3) { - rb->lcd_puts(0, 0, "OPTIONS (LCD)"); - - if(settings.lcd_date == 0) - rb->lcd_puts(2, 4, "Date: Off"); - else if(settings.lcd_date == 1) - rb->lcd_puts(2, 4, "Date: American"); - else - rb->lcd_puts(2, 4, "Date: European"); - - if(settings.lcd_seconds == 0) - rb->lcd_puts(2, 5, "Seconds: Off"); - else if(settings.lcd_seconds == 1) - rb->lcd_puts(2, 5, "Seconds: Text"); - else if(settings.lcd_seconds == 2) - rb->lcd_puts(2, 5, "Seconds: Bar"); - else - rb->lcd_puts(2, 5, "Seconds: Inverse"); - - rb->lcd_puts(2, 6, "Blinking Colon"); - rb->lcd_puts(2, 7, "12-Hour Format"); - - /* Draw checkboxes */ - if(settings.lcd_date == 0) - rb->lcd_bitmap(checkbox_empty, 1, 33, 8, 6, true); - else if(settings.lcd_date == 1) - rb->lcd_bitmap(checkbox_half, 1, 33, 8, 6, true); - else - rb->lcd_bitmap(checkbox_full, 1, 33, 8, 6, true); - - if(settings.lcd_seconds == 0) - rb->lcd_bitmap(checkbox_empty, 1, 41, 8, 6, true); - else if(settings.lcd_seconds == 1) - rb->lcd_bitmap(checkbox_onethird, 1, 41, 8, 6, true); - else if(settings.lcd_seconds == 2) - rb->lcd_bitmap(checkbox_twothird, 1, 41, 8, 6, true); - else - rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true); - - draw_checkbox(settings.lcd_blinkcolon, 1, 49); - draw_checkbox(settings.lcd_12h, 1, 57); - /* Draw a line selector */ switch(invert_lcd) { - case 1: rb->lcd_invertrect(0, 32, 112, 8); break; - case 2: rb->lcd_invertrect(0, 40, 112, 8); break; - case 3: rb->lcd_invertrect(0, 48, 112, 8); break; - case 4: rb->lcd_invertrect(0, 56, 112, 8); break; + case 1: cursor(0, 32, 112, 8); break; + case 2: cursor(0, 40, 112, 8); break; + case 3: cursor(0, 48, 112, 8); break; + case 4: cursor(0, 56, 112, 8); break; } rb->lcd_update(); switch(rb->button_get_w_tmo(HZ/4)) { case BUTTON_UP: - if(invert_lcd == 1) - invert_lcd = 4; - else + if(invert_lcd > 1) + { + lcd_y = 32+(8*(invert_lcd-1)); + lcd_dummy = lcd_y; + for(; lcd_y>lcd_dummy-8; lcd_y--) + { + rb->lcd_clearrect(0, 32, 112, 32); + draw_settings(); + cursor(0, lcd_y, 112, 8); + rb->lcd_update(); + } invert_lcd--; + } break; case BUTTON_DOWN: - if(invert_lcd == 4) - invert_lcd = 1; - else + if(invert_lcd < 4) + { + lcd_y = 32+(8*(invert_lcd-1)); + lcd_dummy = lcd_y; + for(; lcd_ylcd_clearrect(0, 32, 112, 32); + draw_settings(); + cursor(0, lcd_y, 112, 8); + rb->lcd_update(); + } invert_lcd++; + } break; case BUTTON_LEFT: @@ -1811,24 +1915,13 @@ bool f3_screen(void) } else if(settings.clock == 4) { - rb->lcd_puts(0, 0, "OPTIONS (Full)"); - - rb->lcd_puts(2, 4, "Border"); - rb->lcd_puts(2, 5, "Second Hand"); - rb->lcd_puts(2, 6, "Invert Seconds"); - - draw_checkbox(settings.fullscreen_border, 1, 33); - draw_checkbox(settings.fullscreen_secondhand, 1, 41); - draw_checkbox(settings.fullscreen_invertseconds, 1, 49); - - /* Draw a line selector - * There are 4 values here in case we decide to "up" the amount of settings */ - switch(invert_fullscreen) + /* Draw a line selector */ + switch(invert_full) { - case 1: rb->lcd_invertrect(0, 32, 112, 8); break; - case 2: rb->lcd_invertrect(0, 40, 112, 8); break; - case 3: rb->lcd_invertrect(0, 48, 112, 8); break; - case 4: rb->lcd_invertrect(0, 56, 112, 8); break; + case 1: cursor(0, 32, 112, 8); break; + case 2: cursor(0, 40, 112, 8); break; + case 3: cursor(0, 48, 112, 8); break; + case 4: cursor(0, 56, 112, 8); break; } rb->lcd_update(); @@ -1836,34 +1929,52 @@ bool f3_screen(void) switch(rb->button_get_w_tmo(HZ/4)) { case BUTTON_UP: - if(invert_fullscreen == 1) - invert_fullscreen = 3; - else - invert_fullscreen--; + if(invert_full > 1) + { + full_y = 32+(8*(invert_full-1)); + full_dummy = full_y; + for(; full_y>full_dummy-8; full_y--) + { + rb->lcd_clearrect(0, 32, 112, 32); + draw_settings(); + cursor(0, full_y, 112, 8); + rb->lcd_update(); + } + invert_full--; + } break; case BUTTON_DOWN: - if(invert_fullscreen == 3) - invert_fullscreen = 1; - else - invert_fullscreen++; + if(invert_full < 3) + { + full_y = 32+(8*(invert_full-1)); + full_dummy = full_y; + for(; full_ylcd_clearrect(0, 32, 112, 32); + draw_settings(); + cursor(0, full_y, 112, 8); + rb->lcd_update(); + } + invert_full++; + } break; case BUTTON_LEFT: - if(invert_fullscreen == 1) + if(invert_full == 1) settings.fullscreen_border = false; - else if(invert_fullscreen == 2) + else if(invert_full == 2) settings.fullscreen_secondhand = false; - else if(invert_fullscreen ==3) + else if(invert_full ==3) settings.fullscreen_invertseconds = false; break; case BUTTON_RIGHT: - if(invert_fullscreen == 1) + if(invert_full == 1) settings.fullscreen_border = true; - else if(invert_fullscreen == 2) + else if(invert_full == 2) settings.fullscreen_secondhand = true; - else if(invert_fullscreen ==3) + else if(invert_full ==3) settings.fullscreen_invertseconds = true; break; @@ -1877,10 +1988,6 @@ bool f3_screen(void) } else { - rb->lcd_puts(0, 0, "OPTIONS (Binary)"); - - rb->lcd_puts(2, 4, "-- NO OPTIONS --"); - rb->lcd_update(); switch(rb->button_get_w_tmo(HZ/4)) @@ -1943,8 +2050,7 @@ void confirm_reset(void) ***********************************/ void general_settings(void) { - int cursorpos = 1; - + int cursorpos=1, cursor_y, cursor_dummy; done = false; while(!done) @@ -1968,7 +2074,7 @@ void general_settings(void) rb->snprintf(buf, sizeof(buf), "UP/DOWN to move"); rb->lcd_getstringsize(buf, &buf_w, &buf_h); rb->lcd_putsxy(LCD_WIDTH/2-buf_w/2, 48, buf); - rb->snprintf(buf, sizeof(buf), "PLAY to select"); + rb->snprintf(buf, sizeof(buf), "L/R to change"); rb->lcd_getstringsize(buf, &buf_w, &buf_h); rb->lcd_putsxy(LCD_WIDTH/2-buf_w/2, 56, buf); @@ -1985,10 +2091,10 @@ void general_settings(void) switch(cursorpos) { - case 1: rb->lcd_invertrect(0, 16, 112, 8); break; - case 2: rb->lcd_invertrect(0, 24, 112, 8); break; - case 3: rb->lcd_invertrect(0, 32, 112, 8); break; - case 4: rb->lcd_invertrect(0, 40, 112, 8); break; + case 1: cursor(0, 16, 112, 8); break; + case 2: cursor(0, 24, 112, 8); break; + case 3: cursor(0, 32, 112, 8); break; + case 4: cursor(0, 40, 112, 8); break; } rb->lcd_update(); @@ -2002,15 +2108,75 @@ void general_settings(void) done = true; break; - case BUTTON_UP: - if(cursorpos > 1) - cursorpos--; - break; + case BUTTON_UP: + if(cursorpos > 1) + { + cursor_y = 16+(8*(cursorpos-1)); + cursor_dummy = cursor_y; + for(; cursor_y>cursor_dummy-8; cursor_y--) + { + rb->lcd_clearrect(0, 16, 112, 32); + + rb->lcd_puts(2, 2, "Reset Settings"); + rb->lcd_puts(2, 3, "Save Settings"); + rb->lcd_puts(2, 4, "Show Counter"); + if(settings.save_mode == 1) /* save on exit */ + rb->lcd_puts(2, 5, "Save: on Exit"); + else if(settings.save_mode == 2) + rb->lcd_puts(2, 5, "Save: Automatic"); + else + rb->lcd_puts(2, 5, "Save: Manually"); + rb->lcd_bitmap(arrow, 1, 17, 8, 6, true); + rb->lcd_bitmap(arrow, 1, 25, 8, 6, true); + draw_checkbox(settings.display_counter, 1, 33); + if(settings.save_mode == 1) + rb->lcd_bitmap(checkbox_onethird, 1, 41, 8, 6, true); + else if(settings.save_mode == 2) + rb->lcd_bitmap(checkbox_twothird, 1, 41, 8, 6, true); + else + rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true); + + cursor(0, cursor_y, 112, 8); + rb->lcd_update(); + } + cursorpos--; + } + break; - case BUTTON_DOWN: - if(cursorpos < 4) - cursorpos++; - break; + case BUTTON_DOWN: + if(cursorpos < 4) + { + cursor_y = 16+(8*(cursorpos-1)); + cursor_dummy = cursor_y; + for(; cursor_ylcd_clearrect(0, 16, 112, 32); + + rb->lcd_puts(2, 2, "Reset Settings"); + rb->lcd_puts(2, 3, "Save Settings"); + rb->lcd_puts(2, 4, "Show Counter"); + if(settings.save_mode == 1) /* save on exit */ + rb->lcd_puts(2, 5, "Save: on Exit"); + else if(settings.save_mode == 2) + rb->lcd_puts(2, 5, "Save: Automatic"); + else + rb->lcd_puts(2, 5, "Save: Manually"); + rb->lcd_bitmap(arrow, 1, 17, 8, 6, true); + rb->lcd_bitmap(arrow, 1, 25, 8, 6, true); + draw_checkbox(settings.display_counter, 1, 33); + if(settings.save_mode == 1) + rb->lcd_bitmap(checkbox_onethird, 1, 41, 8, 6, true); + else if(settings.save_mode == 2) + rb->lcd_bitmap(checkbox_twothird, 1, 41, 8, 6, true); + else + rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true); + + cursor(0, cursor_y, 112, 8); + rb->lcd_update(); + } + cursorpos++; + } + break; case BUTTON_LEFT: if(cursorpos == 3) @@ -2213,6 +2379,7 @@ void draw_extras(int year, int day, int month, int hour, int minute, int second) void select_mode(void) { int cursorpos = settings.clock; + int cursor_dummy, cursor_y; done = false; @@ -2239,30 +2406,80 @@ void select_mode(void) /* draw line selector */ switch(cursorpos) { - case 1: rb->lcd_invertrect(0, 8, 112, 8); break; - case 2: rb->lcd_invertrect(0, 16, 112, 8); break; - case 3: rb->lcd_invertrect(0, 24, 112, 8); break; - case 4: rb->lcd_invertrect(0, 32, 112, 8); break; - case 5: rb->lcd_invertrect(0, 40, 112, 8); break; + case 1: cursor(0, 8, 112, 8); break; + case 2: cursor(0, 16, 112, 8); break; + case 3: cursor(0, 24, 112, 8); break; + case 4: cursor(0, 32, 112, 8); break; + case 5: cursor(0, 40, 112, 8); break; } rb->lcd_update(); switch(rb->button_get_w_tmo(HZ/4)) { - case BUTTON_UP: - if(cursorpos > 1) - cursorpos--; - else - cursorpos = 5; - break; + case BUTTON_UP: + if(cursorpos > 1) + { + cursor_y = 8+(8*(cursorpos-1)); + cursor_dummy = cursor_y; + for(; cursor_y>cursor_dummy-8; cursor_y--) + { + rb->lcd_clearrect(0, 8, 112, 40); + + rb->lcd_puts(0, 0, "MODE SELECTOR"); + rb->lcd_puts(2, 1, "Analog"); + rb->lcd_puts(2, 2, "Digital"); + rb->lcd_puts(2, 3, "LCD"); + rb->lcd_puts(2, 4, "Fullscreen"); + rb->lcd_puts(2, 5, "Binary"); + rb->lcd_puts(0, 6, "UP/DOWN: Choose"); + rb->lcd_puts(0, 7, "PLAY:Go|OFF:Cancel"); + + /* draw an arrow next to all of them */ + rb->lcd_bitmap(arrow, 1, 9, 8, 6, true); + rb->lcd_bitmap(arrow, 1, 17, 8, 6, true); + rb->lcd_bitmap(arrow, 1, 25, 8, 6, true); + rb->lcd_bitmap(arrow, 1, 33, 8, 6, true); + rb->lcd_bitmap(arrow, 1, 41, 8, 6, true); + + cursor(0, cursor_y, 112, 8); + rb->lcd_update(); + } + cursorpos--; + } + break; - case BUTTON_DOWN: - if(cursorpos < 5) - cursorpos++; - else - cursorpos = 1; - break; + case BUTTON_DOWN: + if(cursorpos < 5) + { + cursor_y = 8+(8*(cursorpos-1)); + cursor_dummy = cursor_y; + for(; cursor_ylcd_clearrect(0, 8, 112, 40); + + rb->lcd_puts(0, 0, "MODE SELECTOR"); + rb->lcd_puts(2, 1, "Analog"); + rb->lcd_puts(2, 2, "Digital"); + rb->lcd_puts(2, 3, "LCD"); + rb->lcd_puts(2, 4, "Fullscreen"); + rb->lcd_puts(2, 5, "Binary"); + rb->lcd_puts(0, 6, "UP/DOWN: Choose"); + rb->lcd_puts(0, 7, "PLAY:Go|OFF:Cancel"); + + /* draw an arrow next to all of them */ + rb->lcd_bitmap(arrow, 1, 9, 8, 6, true); + rb->lcd_bitmap(arrow, 1, 17, 8, 6, true); + rb->lcd_bitmap(arrow, 1, 25, 8, 6, true); + rb->lcd_bitmap(arrow, 1, 33, 8, 6, true); + rb->lcd_bitmap(arrow, 1, 41, 8, 6, true); + + cursor(0, cursor_y, 112, 8); + rb->lcd_update(); + } + cursorpos++; + } + break; case BUTTON_PLAY: case BUTTON_RIGHT: @@ -2905,7 +3122,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) break; default: - if(rb->default_event_handler_ex(button, cleanup, NULL) + if(rb->default_event_handler_ex(button, cleanup, NULL) == SYS_USB_CONNECTED) return PLUGIN_USB_CONNECTED; break; -- cgit v1.2.3