From 0a5e06c569e6368ba2dbd4eae5f59f402e3ee531 Mon Sep 17 00:00:00 2001 From: "Peter D. Gray" Date: Tue, 30 May 2023 12:49:52 -0400 Subject: [PATCH] number entry --- shared/address_explorer.py | 3 ++- shared/lcd_display.py | 2 -- shared/ux.py | 1 + shared/ux_q1.py | 48 ++++++++++++++------------------------ 4 files changed, 20 insertions(+), 34 deletions(-) diff --git a/shared/address_explorer.py b/shared/address_explorer.py index a951dd90..665076bf 100644 --- a/shared/address_explorer.py +++ b/shared/address_explorer.py @@ -190,11 +190,12 @@ class AddressListMenu(MenuSystem): stash.blank_object(node) items = [] + indent = ' ↳ ' if version.has_qwerty else '↳' for i, (address, path, addr_fmt) in enumerate(choices): axi = address[-4:] # last 4 address characters items.append(MenuItem(addr_fmt_label(addr_fmt), f=self.pick_single, arg=(path, addr_fmt, axi))) - items.append(MenuItem('↳'+address, f=self.pick_single, + items.append(MenuItem(indent+address, f=self.pick_single, arg=(path, addr_fmt, axi))) # some other choices diff --git a/shared/lcd_display.py b/shared/lcd_display.py index 7c5aa7cb..3b1a5e0e 100644 --- a/shared/lcd_display.py +++ b/shared/lcd_display.py @@ -177,8 +177,6 @@ class Display: def text(self, x,y, msg, font=None, invert=0): # Draw at x,y (in cell positions, not pixels) # Use invert=1 to get reverse video - if x not in (-1, 0, None): return - #if y not in (-1, 0, None): return if x is None or x < 0: w = len(msg) diff --git a/shared/ux.py b/shared/ux.py index c0ef5441..bc4ca891 100644 --- a/shared/ux.py +++ b/shared/ux.py @@ -310,6 +310,7 @@ async def ux_enter_bip32_index(prompt, can_cancel=False, unlimited=False): max_value = (2 ** 31) - 1 # we handle hardened else: max_value = 9999 + return await ux_enter_number(prompt=prompt, max_value=max_value, can_cancel=can_cancel) diff --git a/shared/ux_q1.py b/shared/ux_q1.py index b46b110e..20e6b64d 100644 --- a/shared/ux_q1.py +++ b/shared/ux_q1.py @@ -4,11 +4,10 @@ # from uasyncio import sleep_ms import utime, gc -from charcodes import (KEY_LEFT, KEY_RIGHT, KEY_UP, KEY_DOWN, KEY_HOME, - KEY_END, KEY_PAGE_UP, KEY_PAGE_DOWN, KEY_SELECT, KEY_CANCEL) +from charcodes import * class PressRelease: - def __init__(self, need_release='xy'): + def __init__(self, need_release=KEY_SELECT+KEY_CANCEL): # Manage key-repeat: track last key, measure time it's held down, etc. self.need_release = need_release self.last_key = None @@ -67,44 +66,33 @@ async def ux_enter_number(prompt, max_value, can_cancel=False): from glob import dis from math import log - # allow key repeat on X only - press = PressRelease('1234567890y') + # allow key repeat on X only? + press = PressRelease() - y = 26 value = '' max_w = int(log(max_value, 10) + 1) dis.clear() - dis.text(0, 0, prompt) - dis.text(None, -1, ("X to CANCEL, or OK when DONE." if can_cancel else - "X to DELETE, or OK when DONE."), FontTiny) - dis.save() + dis.text(None, -1, "CANCEL or SELECT when done.") while 1: - dis.restore() - - # text centered - if value: - bx = dis.text(None, y, value) - dis.icon(bx+1, y+11, 'space') - else: - dis.icon(64-7, y+11, 'space') - - dis.show() + # TODO: check width, go to two lines if needed? + bx = dis.text(2, 4, prompt + ' ' + value + '█ ') ch = await press.wait() - if ch == 'y' or ch == KEY_SELECT: + if ch == KEY_SELECT: + + if not value: + return 0 - if not value: return 0 return min(max_value, int(value)) - elif ch == 'x' or ch == KEY_CANCEL: + elif ch == KEY_DELETE: if value: value = value[0:-1] - elif can_cancel: - # quit if they press X on empty screen - return None - else: + elif ch == KEY_CANCEL: + return None + elif '0' <= ch <= '9': if len(value) == max_w: value = value[0:-1] + ch else: @@ -116,12 +104,10 @@ async def ux_enter_number(prompt, max_value, can_cancel=False): async def ux_input_numbers(val, validate_func): # collect a series of digits from glob import dis - from display import FontTiny - # allow key repeat on X only - press = PressRelease('1234567890y') + press = PressRelease() - footer = "X to DELETE, or OK when DONE." + footer = "CANCEL or SELECT when done." lx = 6 y = 16 here = ''