diff options
Diffstat (limited to 'apps/plugins/calculator.c')
-rw-r--r-- | apps/plugins/calculator.c | 287 |
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 | /* ----------------------------------------------------------------------- |
893 | move button index | ||
894 | Invert display new button, invert back previous button | ||
895 | ----------------------------------------------------------------------- */ | ||
896 | void 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 | /* ----------------------------------------------------------------------- | ||
973 | Print buttons when switching 1st and 2nd | 893 | Print buttons when switching 1st and 2nd |
974 | int group = {basicButtons, sciButtons} | 894 | int group = {basicButtons, sciButtons} |
975 | ----------------------------------------------------------------------- */ | 895 | ----------------------------------------------------------------------- */ |
@@ -1536,6 +1456,123 @@ void sciButtonsProcess(void){ | |||
1536 | } | 1456 | } |
1537 | 1457 | ||
1538 | /* ----------------------------------------------------------------------- | 1458 | /* ----------------------------------------------------------------------- |
1459 | move button index | ||
1460 | Invert display new button, invert back previous button | ||
1461 | ----------------------------------------------------------------------- */ | ||
1462 | int 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 | /* ----------------------------------------------------------------------- | ||
1539 | Main(); | 1576 | Main(); |
1540 | ----------------------------------------------------------------------- */ | 1577 | ----------------------------------------------------------------------- */ |
1541 | enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) | 1578 | enum 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 | } |