summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/plugins/clock.c671
1 files 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 @@
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/ 7 * \/ \/ \/ \/ \/
8 * $Id: clock.c,v 2.51 2003/12/8 8 * $Id: clock.c,v 2.60 2003/12/8
9 * 9 *
10 * Copyright (C) 2003 Zakk Roberts 10 * Copyright (C) 2003 Zakk Roberts
11 * 11 *
@@ -20,6 +20,10 @@
20/***************************** 20/*****************************
21 * RELEASE NOTES 21 * RELEASE NOTES
22 22
23***** VERSION 2.60 **
24Fixed general settings typo, split up settings function, added cursor animations,
25and updated cursor look (rounded edges).
26
23***** VERSION 2.51 ** 27***** VERSION 2.51 **
24-"Show Counter" option is now saved to disk 28-"Show Counter" option is now saved to disk
25 29
@@ -76,7 +80,13 @@ Original release, featuring analog / digital modes and a few options.
76 80
77#if defined(HAVE_LCD_BITMAP) && defined(HAVE_RTC) 81#if defined(HAVE_LCD_BITMAP) && defined(HAVE_RTC)
78 82
79#define CLOCK_VERSION "2.51" 83#define CLOCK_VERSION "2.60"
84
85#define MODE_ANALOG 1
86#define MODE_DIGITAL 2
87#define MODE_LCD 3
88#define MODE_BINARY 4
89#define MODE_FULLSCREEN 5
80 90
81/************ 91/************
82 * Prototypes 92 * Prototypes
@@ -1279,7 +1289,7 @@ bool show_credits(void)
1279/********************************************************************** 1289/**********************************************************************
1280 * Cleanup on plugin return 1290 * Cleanup on plugin return
1281 **********************************************************************/ 1291 **********************************************************************/
1282 1292
1283void cleanup(void *parameter) 1293void cleanup(void *parameter)
1284{ 1294{
1285 (void)parameter; /* unused */ 1295 (void)parameter; /* unused */
@@ -1291,6 +1301,19 @@ void cleanup(void *parameter)
1291 rb->backlight_set_timeout(rb->global_settings->backlight_timeout); 1301 rb->backlight_set_timeout(rb->global_settings->backlight_timeout);
1292} 1302}
1293 1303
1304/**************
1305 * Draws cursor
1306 *************/
1307void cursor(int x, int y, int w, int h)
1308{
1309 rb->lcd_invertrect(x, y, w, h);
1310
1311 rb->lcd_clearpixel(x, y);
1312 rb->lcd_clearpixel(x+w-1, y);
1313 rb->lcd_clearpixel(x, y+h-1);
1314 rb->lcd_clearpixel(x+w-1, y+h-1);
1315}
1316
1294/****************** 1317/******************
1295 * F1 Screen - HELP 1318 * F1 Screen - HELP
1296 *****************/ 1319 *****************/
@@ -1436,7 +1459,7 @@ bool f1_screen(void)
1436 break; 1459 break;
1437 1460
1438 default: 1461 default:
1439 if(rb->default_event_handler_ex(button, cleanup, NULL) 1462 if(rb->default_event_handler_ex(button, cleanup, NULL)
1440 == SYS_USB_CONNECTED) 1463 == SYS_USB_CONNECTED)
1441 return PLUGIN_USB_CONNECTED; 1464 return PLUGIN_USB_CONNECTED;
1442 break; 1465 break;
@@ -1456,16 +1479,164 @@ void draw_checkbox(bool setting, int x, int y)
1456 rb->lcd_bitmap(checkbox_empty, x, y, 8, 6, true); 1479 rb->lcd_bitmap(checkbox_empty, x, y, 8, 6, true);
1457} 1480}
1458 1481
1482void draw_settings(void)
1483{
1484 if(settings.clock == 1)
1485 {
1486 rb->lcd_puts(0, 0, "OPTIONS (Analog)");
1487
1488 rb->lcd_puts(2, 4, "Digits");
1489
1490 if(settings.analog_date == 0)
1491 rb->lcd_puts(2, 5, "Date: Off");
1492 else if(settings.analog_date == 1)
1493 rb->lcd_puts(2, 5, "Date: American");
1494 else
1495 rb->lcd_puts(2, 5, "Date: European");
1496
1497 if(settings.analog_time == 0)
1498 rb->lcd_puts(2, 6, "Time Readout:Off");
1499 else if(settings.analog_time == 1)
1500 rb->lcd_puts(2, 6, "Time Readout:24h");
1501 else
1502 rb->lcd_puts(2, 6, "Time Readout:12h");
1503
1504 rb->lcd_puts(2, 7, "Second Hand");
1505
1506 /* Draw checkboxes */
1507 draw_checkbox(settings.analog_digits, 1, 33);
1508
1509 if(settings.analog_date == 0)
1510 rb->lcd_bitmap(checkbox_empty, 1, 41, 8, 6, true);
1511 else if(settings.analog_date == 1)
1512 rb->lcd_bitmap(checkbox_half, 1, 41, 8, 6, true);
1513 else
1514 rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true);
1515
1516 if(settings.analog_time == 0)
1517 rb->lcd_bitmap(checkbox_empty, 1, 49, 8, 6, true);
1518 else if(settings.analog_time == 1)
1519 rb->lcd_bitmap(checkbox_half, 1, 49, 8, 6, true);
1520 else
1521 rb->lcd_bitmap(checkbox_full, 1, 49, 8, 6, true);
1522
1523 draw_checkbox(settings.analog_secondhand, 1, 57);
1524 }
1525 else if(settings.clock == 2)
1526 {
1527 rb->lcd_puts(0, 0, "OPTIONS (Digital)");
1528
1529 if(settings.digital_date == 0)
1530 rb->lcd_puts(2, 4, "Date: Off");
1531 else if(settings.digital_date == 1)
1532 rb->lcd_puts(2, 4, "Date: American");
1533 else
1534 rb->lcd_puts(2, 4, "Date: European");
1535
1536 if(settings.digital_seconds == 0)
1537 rb->lcd_puts(2, 5, "Seconds: Off");
1538 else if(settings.digital_seconds == 1)
1539 rb->lcd_puts(2, 5, "Seconds: Text");
1540 else if(settings.digital_seconds == 2)
1541 rb->lcd_puts(2, 5, "Seconds: Bar");
1542 else
1543 rb->lcd_puts(2, 5, "Seconds: Inverse");
1544
1545 rb->lcd_puts(2, 6, "Blinking Colon");
1546 rb->lcd_puts(2, 7, "12-Hour Format");
1547
1548 /* Draw checkboxes */
1549 if(settings.digital_date == 0)
1550 rb->lcd_bitmap(checkbox_empty, 1, 33, 8, 6, true);
1551 else if(settings.digital_date == 1)
1552 rb->lcd_bitmap(checkbox_half, 1, 33, 8, 6, true);
1553 else
1554 rb->lcd_bitmap(checkbox_full, 1, 33, 8, 6, true);
1555
1556 if(settings.digital_seconds == 0)
1557 rb->lcd_bitmap(checkbox_empty, 1, 41, 8, 6, true);
1558 else if(settings.digital_seconds == 1)
1559 rb->lcd_bitmap(checkbox_onethird, 1, 41, 8, 6, true);
1560 else if(settings.digital_seconds == 2)
1561 rb->lcd_bitmap(checkbox_twothird, 1, 41, 8, 6, true);
1562 else
1563 rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true);
1564
1565 draw_checkbox(settings.digital_blinkcolon, 1, 49);
1566 draw_checkbox(settings.digital_12h, 1, 57);
1567 }
1568 else if(settings.clock == 3)
1569 {
1570 rb->lcd_puts(0, 0, "OPTIONS (LCD)");
1571
1572 if(settings.lcd_date == 0)
1573 rb->lcd_puts(2, 4, "Date: Off");
1574 else if(settings.lcd_date == 1)
1575 rb->lcd_puts(2, 4, "Date: American");
1576 else
1577 rb->lcd_puts(2, 4, "Date: European");
1578
1579 if(settings.lcd_seconds == 0)
1580 rb->lcd_puts(2, 5, "Seconds: Off");
1581 else if(settings.lcd_seconds == 1)
1582 rb->lcd_puts(2, 5, "Seconds: Text");
1583 else if(settings.lcd_seconds == 2)
1584 rb->lcd_puts(2, 5, "Seconds: Bar");
1585 else
1586 rb->lcd_puts(2, 5, "Seconds: Inverse");
1587
1588 rb->lcd_puts(2, 6, "Blinking Colon");
1589 rb->lcd_puts(2, 7, "12-Hour Format");
1590
1591 /* Draw checkboxes */
1592 if(settings.lcd_date == 0)
1593 rb->lcd_bitmap(checkbox_empty, 1, 33, 8, 6, true);
1594 else if(settings.lcd_date == 1)
1595 rb->lcd_bitmap(checkbox_half, 1, 33, 8, 6, true);
1596 else
1597 rb->lcd_bitmap(checkbox_full, 1, 33, 8, 6, true);
1598
1599 if(settings.lcd_seconds == 0)
1600 rb->lcd_bitmap(checkbox_empty, 1, 41, 8, 6, true);
1601 else if(settings.lcd_seconds == 1)
1602 rb->lcd_bitmap(checkbox_onethird, 1, 41, 8, 6, true);
1603 else if(settings.lcd_seconds == 2)
1604 rb->lcd_bitmap(checkbox_twothird, 1, 41, 8, 6, true);
1605 else
1606 rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true);
1607
1608 draw_checkbox(settings.lcd_blinkcolon, 1, 49);
1609 draw_checkbox(settings.lcd_12h, 1, 57);
1610 }
1611 else if(settings.clock == 4)
1612 {
1613 rb->lcd_puts(0, 0, "OPTIONS (Full)");
1614
1615 rb->lcd_puts(2, 4, "Border");
1616 rb->lcd_puts(2, 5, "Second Hand");
1617 rb->lcd_puts(2, 6, "Invert Seconds");
1618
1619 draw_checkbox(settings.fullscreen_border, 1, 33);
1620 draw_checkbox(settings.fullscreen_secondhand, 1, 41);
1621 draw_checkbox(settings.fullscreen_invertseconds, 1, 49);
1622 }
1623 else if(settings.clock == 5)
1624 {
1625 rb->lcd_puts(0, 0, "OPTIONS (Binary)");
1626 rb->lcd_puts(2, 4, "-- NO OPTIONS --");
1627 }
1628}
1629
1459/********************* 1630/*********************
1460 * F3 Screen - OPTIONS 1631 * F3 Screen - OPTIONS
1461 ********************/ 1632 ********************/
1462bool f3_screen(void) 1633bool f3_screen(void)
1463{ 1634{
1464 /* cursor positions */ 1635 /* cursor positions */
1465 int invert_analog = 1; 1636 int invert_analog=1,analog_y,analog_dummy;
1466 int invert_digital = 1; 1637 int invert_digital=1,digital_y,digital_dummy;
1467 int invert_lcd = 1; 1638 int invert_lcd=1,lcd_y,lcd_dummy;
1468 int invert_fullscreen = 1; 1639 int invert_full=1,full_y,full_dummy;
1469 1640
1470 done = false; 1641 done = false;
1471 1642
@@ -1476,72 +1647,52 @@ bool f3_screen(void)
1476 rb->lcd_puts(0, 1, "UP/DN: move, L/R:"); 1647 rb->lcd_puts(0, 1, "UP/DN: move, L/R:");
1477 rb->lcd_puts(0, 2, "change, OFF: done"); 1648 rb->lcd_puts(0, 2, "change, OFF: done");
1478 1649
1650 draw_settings();
1651
1479 if(settings.clock == 1) 1652 if(settings.clock == 1)
1480 { 1653 {
1481 rb->lcd_puts(0, 0, "OPTIONS (Analog)");
1482
1483 rb->lcd_puts(2, 4, "Digits");
1484
1485 if(settings.analog_date == 0)
1486 rb->lcd_puts(2, 5, "Date: Off");
1487 else if(settings.analog_date == 1)
1488 rb->lcd_puts(2, 5, "Date: American");
1489 else
1490 rb->lcd_puts(2, 5, "Date: European");
1491
1492 if(settings.analog_time == 0)
1493 rb->lcd_puts(2, 6, "Time Readout:Off");
1494 else if(settings.analog_time == 1)
1495 rb->lcd_puts(2, 6, "Time Readout:24h");
1496 else
1497 rb->lcd_puts(2, 6, "Time Readout:12h");
1498
1499 rb->lcd_puts(2, 7, "Second Hand");
1500
1501 /* Draw checkboxes */
1502 draw_checkbox(settings.analog_digits, 1, 33);
1503
1504 if(settings.analog_date == 0)
1505 rb->lcd_bitmap(checkbox_empty, 1, 41, 8, 6, true);
1506 else if(settings.analog_date == 1)
1507 rb->lcd_bitmap(checkbox_half, 1, 41, 8, 6, true);
1508 else
1509 rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true);
1510
1511 if(settings.analog_time == 0)
1512 rb->lcd_bitmap(checkbox_empty, 1, 49, 8, 6, true);
1513 else if(settings.analog_time == 1)
1514 rb->lcd_bitmap(checkbox_half, 1, 49, 8, 6, true);
1515 else
1516 rb->lcd_bitmap(checkbox_full, 1, 49, 8, 6, true);
1517
1518 draw_checkbox(settings.analog_secondhand, 1, 57);
1519
1520 /* Draw line selector */ 1654 /* Draw line selector */
1521 switch(invert_analog) 1655 switch(invert_analog)
1522 { 1656 {
1523 case 1: rb->lcd_invertrect(0, 32, 112, 8); break; 1657 case 1: cursor(0, 32, 112, 8); break;
1524 case 2: rb->lcd_invertrect(0, 40, 112, 8); break; 1658 case 2: cursor(0, 40, 112, 8); break;
1525 case 3: rb->lcd_invertrect(0, 48, 112, 8); break; 1659 case 3: cursor(0, 48, 112, 8); break;
1526 case 4: rb->lcd_invertrect(0, 56, 112, 8); break; 1660 case 4: cursor(0, 56, 112, 8); break;
1527 } 1661 }
1528
1529 rb->lcd_update(); 1662 rb->lcd_update();
1530 1663
1531 switch(rb->button_get_w_tmo(HZ/4)) 1664 switch(rb->button_get_w_tmo(HZ/4))
1532 { 1665 {
1533 case BUTTON_UP: 1666 case BUTTON_UP:
1534 if(invert_analog > 1) 1667 if(invert_analog > 1)
1668 {
1669 analog_y = 32+(8*(invert_analog-1));
1670 analog_dummy = analog_y;
1671 for(; analog_y>analog_dummy-8; analog_y--)
1672 {
1673 rb->lcd_clearrect(0, 32, 112, 32);
1674 draw_settings();
1675 cursor(0, analog_y, 112, 8);
1676 rb->lcd_update();
1677 }
1535 invert_analog--; 1678 invert_analog--;
1536 else 1679 }
1537 invert_analog = 4;
1538 break; 1680 break;
1539 1681
1540 case BUTTON_DOWN: 1682 case BUTTON_DOWN:
1541 if(invert_analog < 4) 1683 if(invert_analog < 4)
1684 {
1685 analog_y = 32+(8*(invert_analog-1));
1686 analog_dummy = analog_y;
1687 for(; analog_y<analog_dummy+8; analog_y++)
1688 {
1689 rb->lcd_clearrect(0, 32, 112, 32);
1690 draw_settings();
1691 cursor(0, analog_y, 112, 8);
1692 rb->lcd_update();
1693 }
1542 invert_analog++; 1694 invert_analog++;
1543 else 1695 }
1544 invert_analog = 1;
1545 break; 1696 break;
1546 1697
1547 case BUTTON_LEFT: 1698 case BUTTON_LEFT:
@@ -1588,72 +1739,48 @@ bool f3_screen(void)
1588 } 1739 }
1589 else if(settings.clock == 2) 1740 else if(settings.clock == 2)
1590 { 1741 {
1591 rb->lcd_puts(0, 0, "OPTIONS (Digital)");
1592
1593 if(settings.digital_date == 0)
1594 rb->lcd_puts(2, 4, "Date: Off");
1595 else if(settings.digital_date == 1)
1596 rb->lcd_puts(2, 4, "Date: American");
1597 else
1598 rb->lcd_puts(2, 4, "Date: European");
1599
1600 if(settings.digital_seconds == 0)
1601 rb->lcd_puts(2, 5, "Seconds: Off");
1602 else if(settings.digital_seconds == 1)
1603 rb->lcd_puts(2, 5, "Seconds: Text");
1604 else if(settings.digital_seconds == 2)
1605 rb->lcd_puts(2, 5, "Seconds: Bar");
1606 else
1607 rb->lcd_puts(2, 5, "Seconds: Inverse");
1608
1609 rb->lcd_puts(2, 6, "Blinking Colon");
1610 rb->lcd_puts(2, 7, "12-Hour Format");
1611
1612 /* Draw checkboxes */
1613 if(settings.digital_date == 0)
1614 rb->lcd_bitmap(checkbox_empty, 1, 33, 8, 6, true);
1615 else if(settings.digital_date == 1)
1616 rb->lcd_bitmap(checkbox_half, 1, 33, 8, 6, true);
1617 else
1618 rb->lcd_bitmap(checkbox_full, 1, 33, 8, 6, true);
1619
1620 if(settings.digital_seconds == 0)
1621 rb->lcd_bitmap(checkbox_empty, 1, 41, 8, 6, true);
1622 else if(settings.digital_seconds == 1)
1623 rb->lcd_bitmap(checkbox_onethird, 1, 41, 8, 6, true);
1624 else if(settings.digital_seconds == 2)
1625 rb->lcd_bitmap(checkbox_twothird, 1, 41, 8, 6, true);
1626 else
1627 rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true);
1628
1629 draw_checkbox(settings.digital_blinkcolon, 1, 49);
1630 draw_checkbox(settings.digital_12h, 1, 57);
1631
1632 /* Draw a line selector */ 1742 /* Draw a line selector */
1633 switch(invert_digital) 1743 switch(invert_digital)
1634 { 1744 {
1635 case 1: rb->lcd_invertrect(0, 32, 112, 8); break; 1745 case 1: cursor(0, 32, 112, 8); break;
1636 case 2: rb->lcd_invertrect(0, 40, 112, 8); break; 1746 case 2: cursor(0, 40, 112, 8); break;
1637 case 3: rb->lcd_invertrect(0, 48, 112, 8); break; 1747 case 3: cursor(0, 48, 112, 8); break;
1638 case 4: rb->lcd_invertrect(0, 56, 112, 8); break; 1748 case 4: cursor(0, 56, 112, 8); break;
1639 } 1749 }
1640
1641 rb->lcd_update(); 1750 rb->lcd_update();
1642 1751
1643 switch(rb->button_get_w_tmo(HZ/4)) 1752 switch(rb->button_get_w_tmo(HZ/4))
1644 { 1753 {
1645 case BUTTON_UP: 1754 case BUTTON_UP:
1646 if(invert_digital == 1) 1755 if(invert_digital > 1)
1647 invert_digital = 4; 1756 {
1648 else 1757 digital_y = 32+(8*(invert_digital-1));
1758 digital_dummy = digital_y;
1759 for(; digital_y>digital_dummy-8; digital_y--)
1760 {
1761 rb->lcd_clearrect(0, 32, 112, 32);
1762 draw_settings();
1763 cursor(0, digital_y, 112, 8);
1764 rb->lcd_update();
1765 }
1649 invert_digital--; 1766 invert_digital--;
1767 }
1650 break; 1768 break;
1651 1769
1652 case BUTTON_DOWN: 1770 case BUTTON_DOWN:
1653 if(invert_digital == 4) 1771 if(invert_digital < 4)
1654 invert_digital = 1; 1772 {
1655 else 1773 digital_y = 32+(8*(invert_digital-1));
1774 digital_dummy = digital_y;
1775 for(; digital_y<digital_dummy+8; digital_y++)
1776 {
1777 rb->lcd_clearrect(0, 32, 112, 32);
1778 draw_settings();
1779 cursor(0, digital_y, 112, 8);
1780 rb->lcd_update();
1781 }
1656 invert_digital++; 1782 invert_digital++;
1783 }
1657 break; 1784 break;
1658 1785
1659 case BUTTON_LEFT: 1786 case BUTTON_LEFT:
@@ -1700,71 +1827,48 @@ bool f3_screen(void)
1700 } 1827 }
1701 else if(settings.clock == 3) 1828 else if(settings.clock == 3)
1702 { 1829 {
1703 rb->lcd_puts(0, 0, "OPTIONS (LCD)");
1704
1705 if(settings.lcd_date == 0)
1706 rb->lcd_puts(2, 4, "Date: Off");
1707 else if(settings.lcd_date == 1)
1708 rb->lcd_puts(2, 4, "Date: American");
1709 else
1710 rb->lcd_puts(2, 4, "Date: European");
1711
1712 if(settings.lcd_seconds == 0)
1713 rb->lcd_puts(2, 5, "Seconds: Off");
1714 else if(settings.lcd_seconds == 1)
1715 rb->lcd_puts(2, 5, "Seconds: Text");
1716 else if(settings.lcd_seconds == 2)
1717 rb->lcd_puts(2, 5, "Seconds: Bar");
1718 else
1719 rb->lcd_puts(2, 5, "Seconds: Inverse");
1720
1721 rb->lcd_puts(2, 6, "Blinking Colon");
1722 rb->lcd_puts(2, 7, "12-Hour Format");
1723
1724 /* Draw checkboxes */
1725 if(settings.lcd_date == 0)
1726 rb->lcd_bitmap(checkbox_empty, 1, 33, 8, 6, true);
1727 else if(settings.lcd_date == 1)
1728 rb->lcd_bitmap(checkbox_half, 1, 33, 8, 6, true);
1729 else
1730 rb->lcd_bitmap(checkbox_full, 1, 33, 8, 6, true);
1731
1732 if(settings.lcd_seconds == 0)
1733 rb->lcd_bitmap(checkbox_empty, 1, 41, 8, 6, true);
1734 else if(settings.lcd_seconds == 1)
1735 rb->lcd_bitmap(checkbox_onethird, 1, 41, 8, 6, true);
1736 else if(settings.lcd_seconds == 2)
1737 rb->lcd_bitmap(checkbox_twothird, 1, 41, 8, 6, true);
1738 else
1739 rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true);
1740
1741 draw_checkbox(settings.lcd_blinkcolon, 1, 49);
1742 draw_checkbox(settings.lcd_12h, 1, 57);
1743
1744 /* Draw a line selector */ 1830 /* Draw a line selector */
1745 switch(invert_lcd) 1831 switch(invert_lcd)
1746 { 1832 {
1747 case 1: rb->lcd_invertrect(0, 32, 112, 8); break; 1833 case 1: cursor(0, 32, 112, 8); break;
1748 case 2: rb->lcd_invertrect(0, 40, 112, 8); break; 1834 case 2: cursor(0, 40, 112, 8); break;
1749 case 3: rb->lcd_invertrect(0, 48, 112, 8); break; 1835 case 3: cursor(0, 48, 112, 8); break;
1750 case 4: rb->lcd_invertrect(0, 56, 112, 8); break; 1836 case 4: cursor(0, 56, 112, 8); break;
1751 } 1837 }
1752 rb->lcd_update(); 1838 rb->lcd_update();
1753 1839
1754 switch(rb->button_get_w_tmo(HZ/4)) 1840 switch(rb->button_get_w_tmo(HZ/4))
1755 { 1841 {
1756 case BUTTON_UP: 1842 case BUTTON_UP:
1757 if(invert_lcd == 1) 1843 if(invert_lcd > 1)
1758 invert_lcd = 4; 1844 {
1759 else 1845 lcd_y = 32+(8*(invert_lcd-1));
1846 lcd_dummy = lcd_y;
1847 for(; lcd_y>lcd_dummy-8; lcd_y--)
1848 {
1849 rb->lcd_clearrect(0, 32, 112, 32);
1850 draw_settings();
1851 cursor(0, lcd_y, 112, 8);
1852 rb->lcd_update();
1853 }
1760 invert_lcd--; 1854 invert_lcd--;
1855 }
1761 break; 1856 break;
1762 1857
1763 case BUTTON_DOWN: 1858 case BUTTON_DOWN:
1764 if(invert_lcd == 4) 1859 if(invert_lcd < 4)
1765 invert_lcd = 1; 1860 {
1766 else 1861 lcd_y = 32+(8*(invert_lcd-1));
1862 lcd_dummy = lcd_y;
1863 for(; lcd_y<lcd_dummy+8; lcd_y++)
1864 {
1865 rb->lcd_clearrect(0, 32, 112, 32);
1866 draw_settings();
1867 cursor(0, lcd_y, 112, 8);
1868 rb->lcd_update();
1869 }
1767 invert_lcd++; 1870 invert_lcd++;
1871 }
1768 break; 1872 break;
1769 1873
1770 case BUTTON_LEFT: 1874 case BUTTON_LEFT:
@@ -1811,24 +1915,13 @@ bool f3_screen(void)
1811 } 1915 }
1812 else if(settings.clock == 4) 1916 else if(settings.clock == 4)
1813 { 1917 {
1814 rb->lcd_puts(0, 0, "OPTIONS (Full)"); 1918 /* Draw a line selector */
1815 1919 switch(invert_full)
1816 rb->lcd_puts(2, 4, "Border");
1817 rb->lcd_puts(2, 5, "Second Hand");
1818 rb->lcd_puts(2, 6, "Invert Seconds");
1819
1820 draw_checkbox(settings.fullscreen_border, 1, 33);
1821 draw_checkbox(settings.fullscreen_secondhand, 1, 41);
1822 draw_checkbox(settings.fullscreen_invertseconds, 1, 49);
1823
1824 /* Draw a line selector
1825 * There are 4 values here in case we decide to "up" the amount of settings */
1826 switch(invert_fullscreen)
1827 { 1920 {
1828 case 1: rb->lcd_invertrect(0, 32, 112, 8); break; 1921 case 1: cursor(0, 32, 112, 8); break;
1829 case 2: rb->lcd_invertrect(0, 40, 112, 8); break; 1922 case 2: cursor(0, 40, 112, 8); break;
1830 case 3: rb->lcd_invertrect(0, 48, 112, 8); break; 1923 case 3: cursor(0, 48, 112, 8); break;
1831 case 4: rb->lcd_invertrect(0, 56, 112, 8); break; 1924 case 4: cursor(0, 56, 112, 8); break;
1832 } 1925 }
1833 1926
1834 rb->lcd_update(); 1927 rb->lcd_update();
@@ -1836,34 +1929,52 @@ bool f3_screen(void)
1836 switch(rb->button_get_w_tmo(HZ/4)) 1929 switch(rb->button_get_w_tmo(HZ/4))
1837 { 1930 {
1838 case BUTTON_UP: 1931 case BUTTON_UP:
1839 if(invert_fullscreen == 1) 1932 if(invert_full > 1)
1840 invert_fullscreen = 3; 1933 {
1841 else 1934 full_y = 32+(8*(invert_full-1));
1842 invert_fullscreen--; 1935 full_dummy = full_y;
1936 for(; full_y>full_dummy-8; full_y--)
1937 {
1938 rb->lcd_clearrect(0, 32, 112, 32);
1939 draw_settings();
1940 cursor(0, full_y, 112, 8);
1941 rb->lcd_update();
1942 }
1943 invert_full--;
1944 }
1843 break; 1945 break;
1844 1946
1845 case BUTTON_DOWN: 1947 case BUTTON_DOWN:
1846 if(invert_fullscreen == 3) 1948 if(invert_full < 3)
1847 invert_fullscreen = 1; 1949 {
1848 else 1950 full_y = 32+(8*(invert_full-1));
1849 invert_fullscreen++; 1951 full_dummy = full_y;
1952 for(; full_y<full_dummy+8; full_y++)
1953 {
1954 rb->lcd_clearrect(0, 32, 112, 32);
1955 draw_settings();
1956 cursor(0, full_y, 112, 8);
1957 rb->lcd_update();
1958 }
1959 invert_full++;
1960 }
1850 break; 1961 break;
1851 1962
1852 case BUTTON_LEFT: 1963 case BUTTON_LEFT:
1853 if(invert_fullscreen == 1) 1964 if(invert_full == 1)
1854 settings.fullscreen_border = false; 1965 settings.fullscreen_border = false;
1855 else if(invert_fullscreen == 2) 1966 else if(invert_full == 2)
1856 settings.fullscreen_secondhand = false; 1967 settings.fullscreen_secondhand = false;
1857 else if(invert_fullscreen ==3) 1968 else if(invert_full ==3)
1858 settings.fullscreen_invertseconds = false; 1969 settings.fullscreen_invertseconds = false;
1859 break; 1970 break;
1860 1971
1861 case BUTTON_RIGHT: 1972 case BUTTON_RIGHT:
1862 if(invert_fullscreen == 1) 1973 if(invert_full == 1)
1863 settings.fullscreen_border = true; 1974 settings.fullscreen_border = true;
1864 else if(invert_fullscreen == 2) 1975 else if(invert_full == 2)
1865 settings.fullscreen_secondhand = true; 1976 settings.fullscreen_secondhand = true;
1866 else if(invert_fullscreen ==3) 1977 else if(invert_full ==3)
1867 settings.fullscreen_invertseconds = true; 1978 settings.fullscreen_invertseconds = true;
1868 break; 1979 break;
1869 1980
@@ -1877,10 +1988,6 @@ bool f3_screen(void)
1877 } 1988 }
1878 else 1989 else
1879 { 1990 {
1880 rb->lcd_puts(0, 0, "OPTIONS (Binary)");
1881
1882 rb->lcd_puts(2, 4, "-- NO OPTIONS --");
1883
1884 rb->lcd_update(); 1991 rb->lcd_update();
1885 1992
1886 switch(rb->button_get_w_tmo(HZ/4)) 1993 switch(rb->button_get_w_tmo(HZ/4))
@@ -1943,8 +2050,7 @@ void confirm_reset(void)
1943 ***********************************/ 2050 ***********************************/
1944void general_settings(void) 2051void general_settings(void)
1945{ 2052{
1946 int cursorpos = 1; 2053 int cursorpos=1, cursor_y, cursor_dummy;
1947
1948 done = false; 2054 done = false;
1949 2055
1950 while(!done) 2056 while(!done)
@@ -1968,7 +2074,7 @@ void general_settings(void)
1968 rb->snprintf(buf, sizeof(buf), "UP/DOWN to move"); 2074 rb->snprintf(buf, sizeof(buf), "UP/DOWN to move");
1969 rb->lcd_getstringsize(buf, &buf_w, &buf_h); 2075 rb->lcd_getstringsize(buf, &buf_w, &buf_h);
1970 rb->lcd_putsxy(LCD_WIDTH/2-buf_w/2, 48, buf); 2076 rb->lcd_putsxy(LCD_WIDTH/2-buf_w/2, 48, buf);
1971 rb->snprintf(buf, sizeof(buf), "PLAY to select"); 2077 rb->snprintf(buf, sizeof(buf), "L/R to change");
1972 rb->lcd_getstringsize(buf, &buf_w, &buf_h); 2078 rb->lcd_getstringsize(buf, &buf_w, &buf_h);
1973 rb->lcd_putsxy(LCD_WIDTH/2-buf_w/2, 56, buf); 2079 rb->lcd_putsxy(LCD_WIDTH/2-buf_w/2, 56, buf);
1974 2080
@@ -1985,10 +2091,10 @@ void general_settings(void)
1985 2091
1986 switch(cursorpos) 2092 switch(cursorpos)
1987 { 2093 {
1988 case 1: rb->lcd_invertrect(0, 16, 112, 8); break; 2094 case 1: cursor(0, 16, 112, 8); break;
1989 case 2: rb->lcd_invertrect(0, 24, 112, 8); break; 2095 case 2: cursor(0, 24, 112, 8); break;
1990 case 3: rb->lcd_invertrect(0, 32, 112, 8); break; 2096 case 3: cursor(0, 32, 112, 8); break;
1991 case 4: rb->lcd_invertrect(0, 40, 112, 8); break; 2097 case 4: cursor(0, 40, 112, 8); break;
1992 } 2098 }
1993 2099
1994 rb->lcd_update(); 2100 rb->lcd_update();
@@ -2002,15 +2108,75 @@ void general_settings(void)
2002 done = true; 2108 done = true;
2003 break; 2109 break;
2004 2110
2005 case BUTTON_UP: 2111 case BUTTON_UP:
2006 if(cursorpos > 1) 2112 if(cursorpos > 1)
2007 cursorpos--; 2113 {
2008 break; 2114 cursor_y = 16+(8*(cursorpos-1));
2115 cursor_dummy = cursor_y;
2116 for(; cursor_y>cursor_dummy-8; cursor_y--)
2117 {
2118 rb->lcd_clearrect(0, 16, 112, 32);
2119
2120 rb->lcd_puts(2, 2, "Reset Settings");
2121 rb->lcd_puts(2, 3, "Save Settings");
2122 rb->lcd_puts(2, 4, "Show Counter");
2123 if(settings.save_mode == 1) /* save on exit */
2124 rb->lcd_puts(2, 5, "Save: on Exit");
2125 else if(settings.save_mode == 2)
2126 rb->lcd_puts(2, 5, "Save: Automatic");
2127 else
2128 rb->lcd_puts(2, 5, "Save: Manually");
2129 rb->lcd_bitmap(arrow, 1, 17, 8, 6, true);
2130 rb->lcd_bitmap(arrow, 1, 25, 8, 6, true);
2131 draw_checkbox(settings.display_counter, 1, 33);
2132 if(settings.save_mode == 1)
2133 rb->lcd_bitmap(checkbox_onethird, 1, 41, 8, 6, true);
2134 else if(settings.save_mode == 2)
2135 rb->lcd_bitmap(checkbox_twothird, 1, 41, 8, 6, true);
2136 else
2137 rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true);
2138
2139 cursor(0, cursor_y, 112, 8);
2140 rb->lcd_update();
2141 }
2142 cursorpos--;
2143 }
2144 break;
2009 2145
2010 case BUTTON_DOWN: 2146 case BUTTON_DOWN:
2011 if(cursorpos < 4) 2147 if(cursorpos < 4)
2012 cursorpos++; 2148 {
2013 break; 2149 cursor_y = 16+(8*(cursorpos-1));
2150 cursor_dummy = cursor_y;
2151 for(; cursor_y<cursor_dummy+8; cursor_y++)
2152 {
2153 rb->lcd_clearrect(0, 16, 112, 32);
2154
2155 rb->lcd_puts(2, 2, "Reset Settings");
2156 rb->lcd_puts(2, 3, "Save Settings");
2157 rb->lcd_puts(2, 4, "Show Counter");
2158 if(settings.save_mode == 1) /* save on exit */
2159 rb->lcd_puts(2, 5, "Save: on Exit");
2160 else if(settings.save_mode == 2)
2161 rb->lcd_puts(2, 5, "Save: Automatic");
2162 else
2163 rb->lcd_puts(2, 5, "Save: Manually");
2164 rb->lcd_bitmap(arrow, 1, 17, 8, 6, true);
2165 rb->lcd_bitmap(arrow, 1, 25, 8, 6, true);
2166 draw_checkbox(settings.display_counter, 1, 33);
2167 if(settings.save_mode == 1)
2168 rb->lcd_bitmap(checkbox_onethird, 1, 41, 8, 6, true);
2169 else if(settings.save_mode == 2)
2170 rb->lcd_bitmap(checkbox_twothird, 1, 41, 8, 6, true);
2171 else
2172 rb->lcd_bitmap(checkbox_full, 1, 41, 8, 6, true);
2173
2174 cursor(0, cursor_y, 112, 8);
2175 rb->lcd_update();
2176 }
2177 cursorpos++;
2178 }
2179 break;
2014 2180
2015 case BUTTON_LEFT: 2181 case BUTTON_LEFT:
2016 if(cursorpos == 3) 2182 if(cursorpos == 3)
@@ -2213,6 +2379,7 @@ void draw_extras(int year, int day, int month, int hour, int minute, int second)
2213void select_mode(void) 2379void select_mode(void)
2214{ 2380{
2215 int cursorpos = settings.clock; 2381 int cursorpos = settings.clock;
2382 int cursor_dummy, cursor_y;
2216 2383
2217 done = false; 2384 done = false;
2218 2385
@@ -2239,30 +2406,80 @@ void select_mode(void)
2239 /* draw line selector */ 2406 /* draw line selector */
2240 switch(cursorpos) 2407 switch(cursorpos)
2241 { 2408 {
2242 case 1: rb->lcd_invertrect(0, 8, 112, 8); break; 2409 case 1: cursor(0, 8, 112, 8); break;
2243 case 2: rb->lcd_invertrect(0, 16, 112, 8); break; 2410 case 2: cursor(0, 16, 112, 8); break;
2244 case 3: rb->lcd_invertrect(0, 24, 112, 8); break; 2411 case 3: cursor(0, 24, 112, 8); break;
2245 case 4: rb->lcd_invertrect(0, 32, 112, 8); break; 2412 case 4: cursor(0, 32, 112, 8); break;
2246 case 5: rb->lcd_invertrect(0, 40, 112, 8); break; 2413 case 5: cursor(0, 40, 112, 8); break;
2247 } 2414 }
2248 2415
2249 rb->lcd_update(); 2416 rb->lcd_update();
2250 2417
2251 switch(rb->button_get_w_tmo(HZ/4)) 2418 switch(rb->button_get_w_tmo(HZ/4))
2252 { 2419 {
2253 case BUTTON_UP: 2420 case BUTTON_UP:
2254 if(cursorpos > 1) 2421 if(cursorpos > 1)
2255 cursorpos--; 2422 {
2256 else 2423 cursor_y = 8+(8*(cursorpos-1));
2257 cursorpos = 5; 2424 cursor_dummy = cursor_y;
2258 break; 2425 for(; cursor_y>cursor_dummy-8; cursor_y--)
2426 {
2427 rb->lcd_clearrect(0, 8, 112, 40);
2428
2429 rb->lcd_puts(0, 0, "MODE SELECTOR");
2430 rb->lcd_puts(2, 1, "Analog");
2431 rb->lcd_puts(2, 2, "Digital");
2432 rb->lcd_puts(2, 3, "LCD");
2433 rb->lcd_puts(2, 4, "Fullscreen");
2434 rb->lcd_puts(2, 5, "Binary");
2435 rb->lcd_puts(0, 6, "UP/DOWN: Choose");
2436 rb->lcd_puts(0, 7, "PLAY:Go|OFF:Cancel");
2437
2438 /* draw an arrow next to all of them */
2439 rb->lcd_bitmap(arrow, 1, 9, 8, 6, true);
2440 rb->lcd_bitmap(arrow, 1, 17, 8, 6, true);
2441 rb->lcd_bitmap(arrow, 1, 25, 8, 6, true);
2442 rb->lcd_bitmap(arrow, 1, 33, 8, 6, true);
2443 rb->lcd_bitmap(arrow, 1, 41, 8, 6, true);
2444
2445 cursor(0, cursor_y, 112, 8);
2446 rb->lcd_update();
2447 }
2448 cursorpos--;
2449 }
2450 break;
2259 2451
2260 case BUTTON_DOWN: 2452 case BUTTON_DOWN:
2261 if(cursorpos < 5) 2453 if(cursorpos < 5)
2262 cursorpos++; 2454 {
2263 else 2455 cursor_y = 8+(8*(cursorpos-1));
2264 cursorpos = 1; 2456 cursor_dummy = cursor_y;
2265 break; 2457 for(; cursor_y<cursor_dummy+8; cursor_y++)
2458 {
2459 rb->lcd_clearrect(0, 8, 112, 40);
2460
2461 rb->lcd_puts(0, 0, "MODE SELECTOR");
2462 rb->lcd_puts(2, 1, "Analog");
2463 rb->lcd_puts(2, 2, "Digital");
2464 rb->lcd_puts(2, 3, "LCD");
2465 rb->lcd_puts(2, 4, "Fullscreen");
2466 rb->lcd_puts(2, 5, "Binary");
2467 rb->lcd_puts(0, 6, "UP/DOWN: Choose");
2468 rb->lcd_puts(0, 7, "PLAY:Go|OFF:Cancel");
2469
2470 /* draw an arrow next to all of them */
2471 rb->lcd_bitmap(arrow, 1, 9, 8, 6, true);
2472 rb->lcd_bitmap(arrow, 1, 17, 8, 6, true);
2473 rb->lcd_bitmap(arrow, 1, 25, 8, 6, true);
2474 rb->lcd_bitmap(arrow, 1, 33, 8, 6, true);
2475 rb->lcd_bitmap(arrow, 1, 41, 8, 6, true);
2476
2477 cursor(0, cursor_y, 112, 8);
2478 rb->lcd_update();
2479 }
2480 cursorpos++;
2481 }
2482 break;
2266 2483
2267 case BUTTON_PLAY: 2484 case BUTTON_PLAY:
2268 case BUTTON_RIGHT: 2485 case BUTTON_RIGHT:
@@ -2905,7 +3122,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
2905 break; 3122 break;
2906 3123
2907 default: 3124 default:
2908 if(rb->default_event_handler_ex(button, cleanup, NULL) 3125 if(rb->default_event_handler_ex(button, cleanup, NULL)
2909 == SYS_USB_CONNECTED) 3126 == SYS_USB_CONNECTED)
2910 return PLUGIN_USB_CONNECTED; 3127 return PLUGIN_USB_CONNECTED;
2911 break; 3128 break;