summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/plugins/calculator.c287
1 files changed, 133 insertions, 154 deletions
diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c
index 3a3947d81a..a5c4277528 100644
--- a/apps/plugins/calculator.c
+++ b/apps/plugins/calculator.c
@@ -890,86 +890,6 @@ static void move_with_wrap_and_shift(
890} 890}
891 891
892/* ----------------------------------------------------------------------- 892/* -----------------------------------------------------------------------
893move button index
894Invert display new button, invert back previous button
895----------------------------------------------------------------------- */
896void moveButton(int button){
897 switch(button){
898 case CALCULATOR_LEFT:
899 case CALCULATOR_LEFT | BUTTON_REPEAT:
900 move_with_wrap_and_shift(
901 &btn_col, -1, BUTTON_COLS,
902 &btn_row, 0, BUTTON_ROWS);
903 break;
904
905 case CALCULATOR_RIGHT:
906 case CALCULATOR_RIGHT | BUTTON_REPEAT:
907 move_with_wrap_and_shift(
908 &btn_col, 1, BUTTON_COLS,
909 &btn_row, 0, BUTTON_ROWS);
910 break;
911
912#ifdef CALCULATOR_UP
913 case CALCULATOR_UP:
914 case CALCULATOR_UP | BUTTON_REPEAT:
915 move_with_wrap_and_shift(
916 &btn_row, -1, BUTTON_ROWS,
917 &btn_col, 0, BUTTON_COLS);
918 break;
919#endif
920#ifdef CALCULATOR_DOWN
921 case CALCULATOR_DOWN:
922 case CALCULATOR_DOWN | BUTTON_REPEAT:
923 move_with_wrap_and_shift(
924 &btn_row, 1, BUTTON_ROWS,
925 &btn_col, 0, BUTTON_COLS);
926 break;
927#endif
928
929#ifdef CALCULATOR_UP_W_SHIFT
930 case CALCULATOR_UP_W_SHIFT:
931 case CALCULATOR_UP_W_SHIFT | BUTTON_REPEAT:
932 move_with_wrap_and_shift(
933 &btn_row, -1, BUTTON_ROWS,
934 &btn_col, -1, BUTTON_COLS);
935 break;
936#endif
937#ifdef CALCULATOR_DOWN_W_SHIFT
938 case CALCULATOR_DOWN_W_SHIFT:
939 case CALCULATOR_DOWN_W_SHIFT | BUTTON_REPEAT:
940 move_with_wrap_and_shift(
941 &btn_row, 1, BUTTON_ROWS,
942 &btn_col, 1, BUTTON_COLS);
943 break;
944#endif
945#ifdef CALCULATOR_LEFT_W_SHIFT
946 case CALCULATOR_LEFT_W_SHIFT:
947 case CALCULATOR_LEFT_W_SHIFT | BUTTON_REPEAT:
948 move_with_wrap_and_shift(
949 &btn_col, -1, BUTTON_COLS,
950 &btn_row, -1, BUTTON_ROWS);
951 break;
952#endif
953#ifdef CALCULATOR_RIGHT_W_SHIFT
954 case CALCULATOR_RIGHT_W_SHIFT:
955 case CALCULATOR_RIGHT_W_SHIFT | BUTTON_REPEAT:
956 move_with_wrap_and_shift(
957 &btn_col, 1, BUTTON_COLS,
958 &btn_row, 1, BUTTON_ROWS);
959 break;
960#endif
961 }
962
963 drawButtons(buttonGroup);
964 drawLines();
965
966 rb->lcd_update();
967
968 prev_btn_row = btn_row;
969 prev_btn_col = btn_col;
970}
971
972/* -----------------------------------------------------------------------
973Print buttons when switching 1st and 2nd 893Print buttons when switching 1st and 2nd
974int group = {basicButtons, sciButtons} 894int group = {basicButtons, sciButtons}
975----------------------------------------------------------------------- */ 895----------------------------------------------------------------------- */
@@ -1536,6 +1456,123 @@ void sciButtonsProcess(void){
1536} 1456}
1537 1457
1538/* ----------------------------------------------------------------------- 1458/* -----------------------------------------------------------------------
1459move button index
1460Invert display new button, invert back previous button
1461----------------------------------------------------------------------- */
1462int handleButton(int button){
1463 switch(button)
1464 {
1465 case CALCULATOR_INPUT:
1466 case CALCULATOR_CALC:
1467#ifdef CALCULATOR_INPUT_CALC_PRE
1468 if (lastbtn != CALCULATOR_INPUT_CALC_PRE)
1469 break;
1470 /* no unconditional break; here! */
1471#endif
1472#ifdef CALCULATOR_OPERATORS
1473 case CALCULATOR_OPERATORS:
1474#endif
1475 switch(buttonGroup){
1476 case basicButtons:
1477 basicButtonsProcess();
1478 break;
1479 case sciButtons:
1480 sciButtonsProcess();
1481 break;
1482 }
1483 break;
1484
1485#ifdef CALCULATOR_CLEAR
1486 case CALCULATOR_CLEAR:
1487 switch(calStatus){
1488 case cal_typing:
1489 case cal_dotted:
1490 doDelete();
1491 break;
1492 default: /* cal_normal, cal_error, cal_exit */
1493 clearMem();
1494 break;
1495 }
1496 printResult();
1497 break;
1498#endif
1499 case CALCULATOR_LEFT:
1500 case CALCULATOR_LEFT | BUTTON_REPEAT:
1501 move_with_wrap_and_shift(
1502 &btn_col, -1, BUTTON_COLS,
1503 &btn_row, 0, BUTTON_ROWS);
1504 break;
1505
1506 case CALCULATOR_RIGHT:
1507 case CALCULATOR_RIGHT | BUTTON_REPEAT:
1508 move_with_wrap_and_shift(
1509 &btn_col, 1, BUTTON_COLS,
1510 &btn_row, 0, BUTTON_ROWS);
1511 break;
1512
1513#ifdef CALCULATOR_UP
1514 case CALCULATOR_UP:
1515 case CALCULATOR_UP | BUTTON_REPEAT:
1516 move_with_wrap_and_shift(
1517 &btn_row, -1, BUTTON_ROWS,
1518 &btn_col, 0, BUTTON_COLS);
1519 break;
1520#endif
1521#ifdef CALCULATOR_DOWN
1522 case CALCULATOR_DOWN:
1523 case CALCULATOR_DOWN | BUTTON_REPEAT:
1524 move_with_wrap_and_shift(
1525 &btn_row, 1, BUTTON_ROWS,
1526 &btn_col, 0, BUTTON_COLS);
1527 break;
1528#endif
1529
1530#ifdef CALCULATOR_UP_W_SHIFT
1531 case CALCULATOR_UP_W_SHIFT:
1532 case CALCULATOR_UP_W_SHIFT | BUTTON_REPEAT:
1533 move_with_wrap_and_shift(
1534 &btn_row, -1, BUTTON_ROWS,
1535 &btn_col, -1, BUTTON_COLS);
1536 break;
1537#endif
1538#ifdef CALCULATOR_DOWN_W_SHIFT
1539 case CALCULATOR_DOWN_W_SHIFT:
1540 case CALCULATOR_DOWN_W_SHIFT | BUTTON_REPEAT:
1541 move_with_wrap_and_shift(
1542 &btn_row, 1, BUTTON_ROWS,
1543 &btn_col, 1, BUTTON_COLS);
1544 break;
1545#endif
1546#ifdef CALCULATOR_LEFT_W_SHIFT
1547 case CALCULATOR_LEFT_W_SHIFT:
1548 case CALCULATOR_LEFT_W_SHIFT | BUTTON_REPEAT:
1549 move_with_wrap_and_shift(
1550 &btn_col, -1, BUTTON_COLS,
1551 &btn_row, -1, BUTTON_ROWS);
1552 break;
1553#endif
1554#ifdef CALCULATOR_RIGHT_W_SHIFT
1555 case CALCULATOR_RIGHT_W_SHIFT:
1556 case CALCULATOR_RIGHT_W_SHIFT | BUTTON_REPEAT:
1557 move_with_wrap_and_shift(
1558 &btn_col, 1, BUTTON_COLS,
1559 &btn_row, 1, BUTTON_ROWS);
1560 break;
1561#endif
1562#ifdef CALCULATOR_RC_QUIT
1563 case CALCULATOR_RC_QUIT:
1564#endif
1565 case CALCULATOR_QUIT:
1566 return -1;
1567 }
1568
1569 return 0;
1570
1571 prev_btn_row = btn_row;
1572 prev_btn_col = btn_col;
1573}
1574
1575/* -----------------------------------------------------------------------
1539Main(); 1576Main();
1540----------------------------------------------------------------------- */ 1577----------------------------------------------------------------------- */
1541enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1578enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter)
@@ -1553,7 +1590,8 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
1553 if(btn & BUTTON_TOUCHSCREEN) 1590 if(btn & BUTTON_TOUCHSCREEN)
1554 { 1591 {
1555 struct ts_raster_result res; 1592 struct ts_raster_result res;
1556 if(touchscreen_map_raster(&calc_raster, rb->button_get_data() >> 16, rb->button_get_data() & 0xffff, &res) == 1) 1593 if(touchscreen_map_raster(&calc_raster, rb->button_get_data() >> 16,
1594 rb->button_get_data() & 0xffff, &res) == 1)
1557 { 1595 {
1558 btn_row = res.y; 1596 btn_row = res.y;
1559 btn_col = res.x; 1597 btn_col = res.x;
@@ -1580,85 +1618,26 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
1580 } 1618 }
1581 } 1619 }
1582#endif 1620#endif
1583 switch (btn) { 1621 if (handleButton(btn) == -1)
1584 case CALCULATOR_INPUT: 1622 {
1585 case CALCULATOR_CALC: 1623 calStatus = cal_exit;
1586#ifdef CALCULATOR_INPUT_CALC_PRE 1624 printResult();
1587 if (lastbtn != CALCULATOR_INPUT_CALC_PRE) 1625 }
1588 break; 1626 else
1589 /* no unconditional break; here! */ 1627 {
1590#endif 1628 drawButtons(buttonGroup);
1591#ifdef CALCULATOR_OPERATORS 1629 drawLines();
1592 case CALCULATOR_OPERATORS: 1630 }
1593#endif
1594 switch(buttonGroup){
1595 case basicButtons:
1596 basicButtonsProcess();
1597 break;
1598 case sciButtons:
1599 sciButtonsProcess();
1600 break;
1601 }
1602 break;
1603 1631
1604#ifdef CALCULATOR_CLEAR 1632 rb->lcd_update();
1605 case CALCULATOR_CLEAR: 1633
1606 switch(calStatus){ 1634 if(rb->default_event_handler(btn) == SYS_USB_CONNECTED)
1607 case cal_typing: 1635 return PLUGIN_USB_CONNECTED;
1608 case cal_dotted:
1609 doDelete();
1610 break;
1611 default: /* cal_normal, cal_error, cal_exit */
1612 clearMem();
1613 break;
1614 }
1615 printResult();
1616 break;
1617#endif
1618 1636
1619 case CALCULATOR_LEFT:
1620 case CALCULATOR_LEFT | BUTTON_REPEAT:
1621 case CALCULATOR_RIGHT:
1622 case CALCULATOR_RIGHT | BUTTON_REPEAT:
1623#ifdef CALCULATOR_UP
1624 case CALCULATOR_UP:
1625 case CALCULATOR_UP | BUTTON_REPEAT:
1626#endif
1627#ifdef CALCULATOR_DOWN
1628 case CALCULATOR_DOWN:
1629 case CALCULATOR_DOWN | BUTTON_REPEAT:
1630#endif
1631#ifdef CALCULATOR_UP_W_SHIFT
1632 case CALCULATOR_UP_W_SHIFT:
1633#endif
1634#ifdef CALCULATOR_DOWN_W_SHIFT
1635 case CALCULATOR_DOWN_W_SHIFT:
1636#endif
1637#ifdef CALCULATOR_LEFT_W_SHIFT
1638 case CALCULATOR_LEFT_W_SHIFT:
1639#endif
1640#ifdef CALCULATOR_RIGHT_W_SHIFT
1641 case CALCULATOR_RIGHT_W_SHIFT:
1642#endif
1643 moveButton(btn);
1644 break;
1645#ifdef CALCULATOR_RC_QUIT
1646 case CALCULATOR_RC_QUIT:
1647#endif
1648 case CALCULATOR_QUIT:
1649 calStatus = cal_exit;
1650 printResult();
1651 break;
1652 default:
1653 if(rb->default_event_handler(btn) == SYS_USB_CONNECTED)
1654 return PLUGIN_USB_CONNECTED;
1655 break;
1656 } /* switch (btn) */
1657 if (btn != BUTTON_NONE) 1637 if (btn != BUTTON_NONE)
1658 lastbtn = btn; 1638 lastbtn = btn;
1659 } /* while (calStatus != cal_exit ) */ 1639 } /* while (calStatus != cal_exit ) */
1660 1640
1661 /* rb->splash(HZ*2, "Hello world!"); */
1662 rb->button_clear_queue(); 1641 rb->button_clear_queue();
1663 return PLUGIN_OK; 1642 return PLUGIN_OK;
1664} 1643}