1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Zakk Roberts 2004-12-14 02:47:59 +00:00
parent eb3b33ede2
commit e232b08681

View file

@ -5,7 +5,7 @@
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/ * \/ \/ \/ \/ \/
* $Id: clock.c,v 2.51 2003/12/8 * $Id: clock.c,v 2.60 2003/12/8
* *
* Copyright (C) 2003 Zakk Roberts * Copyright (C) 2003 Zakk Roberts
* *
@ -20,6 +20,10 @@
/***************************** /*****************************
* RELEASE NOTES * 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 ** ***** VERSION 2.51 **
-"Show Counter" option is now saved to disk -"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) #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 * Prototypes
@ -1291,6 +1301,19 @@ void cleanup(void *parameter)
rb->backlight_set_timeout(rb->global_settings->backlight_timeout); 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 * F1 Screen - HELP
*****************/ *****************/
@ -1456,26 +1479,8 @@ void draw_checkbox(bool setting, int x, int y)
rb->lcd_bitmap(checkbox_empty, x, y, 8, 6, true); rb->lcd_bitmap(checkbox_empty, x, y, 8, 6, true);
} }
/********************* void draw_settings(void)
* 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;
done = false;
while (!done)
{
rb->lcd_clear_display();
rb->lcd_puts(0, 1, "UP/DN: move, L/R:");
rb->lcd_puts(0, 2, "change, OFF: done");
if(settings.clock == 1) if(settings.clock == 1)
{ {
rb->lcd_puts(0, 0, "OPTIONS (Analog)"); rb->lcd_puts(0, 0, "OPTIONS (Analog)");
@ -1516,32 +1521,178 @@ bool f3_screen(void)
rb->lcd_bitmap(checkbox_full, 1, 49, 8, 6, true); rb->lcd_bitmap(checkbox_full, 1, 49, 8, 6, true);
draw_checkbox(settings.analog_secondhand, 1, 57); 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,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;
while (!done)
{
rb->lcd_clear_display();
rb->lcd_puts(0, 1, "UP/DN: move, L/R:");
rb->lcd_puts(0, 2, "change, OFF: done");
draw_settings();
if(settings.clock == 1)
{
/* Draw line selector */ /* Draw line selector */
switch(invert_analog) switch(invert_analog)
{ {
case 1: rb->lcd_invertrect(0, 32, 112, 8); break; case 1: cursor(0, 32, 112, 8); break;
case 2: rb->lcd_invertrect(0, 40, 112, 8); break; case 2: cursor(0, 40, 112, 8); break;
case 3: rb->lcd_invertrect(0, 48, 112, 8); break; case 3: cursor(0, 48, 112, 8); break;
case 4: rb->lcd_invertrect(0, 56, 112, 8); break; case 4: cursor(0, 56, 112, 8); break;
} }
rb->lcd_update(); rb->lcd_update();
switch(rb->button_get_w_tmo(HZ/4)) switch(rb->button_get_w_tmo(HZ/4))
{ {
case BUTTON_UP: case BUTTON_UP:
if(invert_analog > 1) 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--; invert_analog--;
else }
invert_analog = 4;
break; break;
case BUTTON_DOWN: case BUTTON_DOWN:
if(invert_analog < 4) if(invert_analog < 4)
{
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++; invert_analog++;
else }
invert_analog = 1;
break; break;
case BUTTON_LEFT: case BUTTON_LEFT:
@ -1588,72 +1739,48 @@ bool f3_screen(void)
} }
else if(settings.clock == 2) 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 */ /* Draw a line selector */
switch(invert_digital) switch(invert_digital)
{ {
case 1: rb->lcd_invertrect(0, 32, 112, 8); break; case 1: cursor(0, 32, 112, 8); break;
case 2: rb->lcd_invertrect(0, 40, 112, 8); break; case 2: cursor(0, 40, 112, 8); break;
case 3: rb->lcd_invertrect(0, 48, 112, 8); break; case 3: cursor(0, 48, 112, 8); break;
case 4: rb->lcd_invertrect(0, 56, 112, 8); break; case 4: cursor(0, 56, 112, 8); break;
} }
rb->lcd_update(); rb->lcd_update();
switch(rb->button_get_w_tmo(HZ/4)) switch(rb->button_get_w_tmo(HZ/4))
{ {
case BUTTON_UP: case BUTTON_UP:
if(invert_digital == 1) if(invert_digital > 1)
invert_digital = 4; {
else 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--; invert_digital--;
}
break; break;
case BUTTON_DOWN: case BUTTON_DOWN:
if(invert_digital == 4) if(invert_digital < 4)
invert_digital = 1; {
else 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++; invert_digital++;
}
break; break;
case BUTTON_LEFT: case BUTTON_LEFT:
@ -1700,71 +1827,48 @@ bool f3_screen(void)
} }
else if(settings.clock == 3) 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 */ /* Draw a line selector */
switch(invert_lcd) switch(invert_lcd)
{ {
case 1: rb->lcd_invertrect(0, 32, 112, 8); break; case 1: cursor(0, 32, 112, 8); break;
case 2: rb->lcd_invertrect(0, 40, 112, 8); break; case 2: cursor(0, 40, 112, 8); break;
case 3: rb->lcd_invertrect(0, 48, 112, 8); break; case 3: cursor(0, 48, 112, 8); break;
case 4: rb->lcd_invertrect(0, 56, 112, 8); break; case 4: cursor(0, 56, 112, 8); break;
} }
rb->lcd_update(); rb->lcd_update();
switch(rb->button_get_w_tmo(HZ/4)) switch(rb->button_get_w_tmo(HZ/4))
{ {
case BUTTON_UP: case BUTTON_UP:
if(invert_lcd == 1) if(invert_lcd > 1)
invert_lcd = 4; {
else 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--; invert_lcd--;
}
break; break;
case BUTTON_DOWN: case BUTTON_DOWN:
if(invert_lcd == 4) if(invert_lcd < 4)
invert_lcd = 1; {
else 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++; invert_lcd++;
}
break; break;
case BUTTON_LEFT: case BUTTON_LEFT:
@ -1811,24 +1915,13 @@ bool f3_screen(void)
} }
else if(settings.clock == 4) else if(settings.clock == 4)
{ {
rb->lcd_puts(0, 0, "OPTIONS (Full)"); /* Draw a line selector */
switch(invert_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)
{ {
case 1: rb->lcd_invertrect(0, 32, 112, 8); break; case 1: cursor(0, 32, 112, 8); break;
case 2: rb->lcd_invertrect(0, 40, 112, 8); break; case 2: cursor(0, 40, 112, 8); break;
case 3: rb->lcd_invertrect(0, 48, 112, 8); break; case 3: cursor(0, 48, 112, 8); break;
case 4: rb->lcd_invertrect(0, 56, 112, 8); break; case 4: cursor(0, 56, 112, 8); break;
} }
rb->lcd_update(); rb->lcd_update();
@ -1836,34 +1929,52 @@ bool f3_screen(void)
switch(rb->button_get_w_tmo(HZ/4)) switch(rb->button_get_w_tmo(HZ/4))
{ {
case BUTTON_UP: case BUTTON_UP:
if(invert_fullscreen == 1) if(invert_full > 1)
invert_fullscreen = 3; {
else full_y = 32+(8*(invert_full-1));
invert_fullscreen--; 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; break;
case BUTTON_DOWN: case BUTTON_DOWN:
if(invert_fullscreen == 3) if(invert_full < 3)
invert_fullscreen = 1; {
else full_y = 32+(8*(invert_full-1));
invert_fullscreen++; 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; break;
case BUTTON_LEFT: case BUTTON_LEFT:
if(invert_fullscreen == 1) if(invert_full == 1)
settings.fullscreen_border = false; settings.fullscreen_border = false;
else if(invert_fullscreen == 2) else if(invert_full == 2)
settings.fullscreen_secondhand = false; settings.fullscreen_secondhand = false;
else if(invert_fullscreen ==3) else if(invert_full ==3)
settings.fullscreen_invertseconds = false; settings.fullscreen_invertseconds = false;
break; break;
case BUTTON_RIGHT: case BUTTON_RIGHT:
if(invert_fullscreen == 1) if(invert_full == 1)
settings.fullscreen_border = true; settings.fullscreen_border = true;
else if(invert_fullscreen == 2) else if(invert_full == 2)
settings.fullscreen_secondhand = true; settings.fullscreen_secondhand = true;
else if(invert_fullscreen ==3) else if(invert_full ==3)
settings.fullscreen_invertseconds = true; settings.fullscreen_invertseconds = true;
break; break;
@ -1877,10 +1988,6 @@ bool f3_screen(void)
} }
else else
{ {
rb->lcd_puts(0, 0, "OPTIONS (Binary)");
rb->lcd_puts(2, 4, "-- NO OPTIONS --");
rb->lcd_update(); rb->lcd_update();
switch(rb->button_get_w_tmo(HZ/4)) switch(rb->button_get_w_tmo(HZ/4))
@ -1943,8 +2050,7 @@ void confirm_reset(void)
***********************************/ ***********************************/
void general_settings(void) void general_settings(void)
{ {
int cursorpos = 1; int cursorpos=1, cursor_y, cursor_dummy;
done = false; done = false;
while(!done) while(!done)
@ -1968,7 +2074,7 @@ void general_settings(void)
rb->snprintf(buf, sizeof(buf), "UP/DOWN to move"); rb->snprintf(buf, sizeof(buf), "UP/DOWN to move");
rb->lcd_getstringsize(buf, &buf_w, &buf_h); rb->lcd_getstringsize(buf, &buf_w, &buf_h);
rb->lcd_putsxy(LCD_WIDTH/2-buf_w/2, 48, buf); 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_getstringsize(buf, &buf_w, &buf_h);
rb->lcd_putsxy(LCD_WIDTH/2-buf_w/2, 56, buf); rb->lcd_putsxy(LCD_WIDTH/2-buf_w/2, 56, buf);
@ -1985,10 +2091,10 @@ void general_settings(void)
switch(cursorpos) switch(cursorpos)
{ {
case 1: rb->lcd_invertrect(0, 16, 112, 8); break; case 1: cursor(0, 16, 112, 8); break;
case 2: rb->lcd_invertrect(0, 24, 112, 8); break; case 2: cursor(0, 24, 112, 8); break;
case 3: rb->lcd_invertrect(0, 32, 112, 8); break; case 3: cursor(0, 32, 112, 8); break;
case 4: rb->lcd_invertrect(0, 40, 112, 8); break; case 4: cursor(0, 40, 112, 8); break;
} }
rb->lcd_update(); rb->lcd_update();
@ -2004,12 +2110,72 @@ void general_settings(void)
case BUTTON_UP: case BUTTON_UP:
if(cursorpos > 1) 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--; cursorpos--;
}
break; break;
case BUTTON_DOWN: case BUTTON_DOWN:
if(cursorpos < 4) if(cursorpos < 4)
{
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++; cursorpos++;
}
break; break;
case BUTTON_LEFT: case BUTTON_LEFT:
@ -2213,6 +2379,7 @@ void draw_extras(int year, int day, int month, int hour, int minute, int second)
void select_mode(void) void select_mode(void)
{ {
int cursorpos = settings.clock; int cursorpos = settings.clock;
int cursor_dummy, cursor_y;
done = false; done = false;
@ -2239,11 +2406,11 @@ void select_mode(void)
/* draw line selector */ /* draw line selector */
switch(cursorpos) switch(cursorpos)
{ {
case 1: rb->lcd_invertrect(0, 8, 112, 8); break; case 1: cursor(0, 8, 112, 8); break;
case 2: rb->lcd_invertrect(0, 16, 112, 8); break; case 2: cursor(0, 16, 112, 8); break;
case 3: rb->lcd_invertrect(0, 24, 112, 8); break; case 3: cursor(0, 24, 112, 8); break;
case 4: rb->lcd_invertrect(0, 32, 112, 8); break; case 4: cursor(0, 32, 112, 8); break;
case 5: rb->lcd_invertrect(0, 40, 112, 8); break; case 5: cursor(0, 40, 112, 8); break;
} }
rb->lcd_update(); rb->lcd_update();
@ -2252,16 +2419,66 @@ void select_mode(void)
{ {
case BUTTON_UP: case BUTTON_UP:
if(cursorpos > 1) 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--; cursorpos--;
else }
cursorpos = 5;
break; break;
case BUTTON_DOWN: case BUTTON_DOWN:
if(cursorpos < 5) if(cursorpos < 5)
{
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++; cursorpos++;
else }
cursorpos = 1;
break; break;
case BUTTON_PLAY: case BUTTON_PLAY: