|
@@ -70,6 +70,18 @@ void ui_msg(const char *txt)
|
|
|
static uint8_t display_cur_v = 0;
|
|
|
static uint8_t menu_selection = 0;
|
|
|
|
|
|
+void ui_menu_autoscroll(void)
|
|
|
+{
|
|
|
+ int lines = CurrentMenu->entry_n;
|
|
|
+ if ((lines < 5) || (menu_selection < 2))
|
|
|
+ display_cur_v = 0;
|
|
|
+ else if (menu_selection > lines - 2)
|
|
|
+ display_cur_v = 0x40 - ((lines - 4) * 8);
|
|
|
+ else
|
|
|
+ display_cur_v = 0x40 - ((menu_selection - 2) * 8);
|
|
|
+ display_scroll(NULL, display_cur_v);
|
|
|
+}
|
|
|
+
|
|
|
static void ui_display_menu_refresh(void)
|
|
|
{
|
|
|
const struct display_menu *menu = CurrentMenu;
|
|
@@ -78,8 +90,8 @@ static void ui_display_menu_refresh(void)
|
|
|
display_scroll(NULL, display_cur_v);
|
|
|
display_clear(NULL);
|
|
|
|
|
|
- for (i = menu->entry_n - 1; i >= 0; i--) {
|
|
|
- vline = i + 5;
|
|
|
+ for (i = 0; i < menu->entry_n; i++) {
|
|
|
+ vline = i + 4;
|
|
|
if (vline > 7)
|
|
|
vline -= 8;
|
|
|
if (i == menu_selection)
|
|
@@ -118,30 +130,17 @@ void ui_button_press(uint8_t b, int hold)
|
|
|
if (b == '-') {
|
|
|
if (menu_selection > 0) {
|
|
|
menu_selection--;
|
|
|
- if ((display_cur_v / 8) - (menu_selection > 2)) {
|
|
|
- int s;
|
|
|
- s = display_cur_v + 8;
|
|
|
- if (s > 0x3f)
|
|
|
- s = 0;
|
|
|
- display_cur_v = (uint8_t)s;
|
|
|
- display_scroll(NULL, display_cur_v);
|
|
|
- }
|
|
|
+ ui_menu_autoscroll();
|
|
|
+ ui_display_menu_refresh();
|
|
|
}
|
|
|
}
|
|
|
if (b == '+') {
|
|
|
if (menu_selection < CurrentMenu->entry_n - 1) {
|
|
|
menu_selection++;
|
|
|
- if ((menu_selection - display_cur_v / 8) > 2) {
|
|
|
- int s;
|
|
|
- s = display_cur_v - 8;
|
|
|
- if (s < 0)
|
|
|
- s = 0x40 - 8;
|
|
|
- display_cur_v = (uint8_t)s;
|
|
|
- display_scroll(NULL, display_cur_v);
|
|
|
- }
|
|
|
+ ui_menu_autoscroll();
|
|
|
+ ui_display_menu_refresh();
|
|
|
}
|
|
|
}
|
|
|
- ui_display_menu_refresh();
|
|
|
}
|
|
|
|
|
|
void ui_init(void)
|