Merge pull request #83 from davea/multitap-keypad

Multitap keypad text entry
sammachin-gprs
Marek Ventur 2018-09-02 14:14:02 +01:00 committed by GitHub
commit f01e399ee4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 43 additions and 12 deletions

View File

@ -4,6 +4,7 @@ ___license___ = "MIT"
___dependencies___ = ["buttons", "sleep"]
import ugfx, buttons, sleep
import time
default_style_badge = ugfx.Style()
default_style_badge.set_focus(ugfx.RED)
@ -100,18 +101,7 @@ def prompt_text(description, init_text="", true_text="OK", false_text="Back", fo
if buttons.is_triggered(buttons.Buttons.BTN_A): return edit.text()
if buttons.is_triggered(buttons.Buttons.BTN_B): return None
if buttons.is_triggered(buttons.Buttons.BTN_Menu): return edit.text()
if buttons.is_triggered(buttons.Buttons.BTN_0): edit.text(edit.text() + "0")
if buttons.is_triggered(buttons.Buttons.BTN_1): edit.text(edit.text() + "1")
if buttons.is_triggered(buttons.Buttons.BTN_2): edit.text(edit.text() + "2")
if buttons.is_triggered(buttons.Buttons.BTN_3): edit.text(edit.text() + "3")
if buttons.is_triggered(buttons.Buttons.BTN_4): edit.text(edit.text() + "4")
if buttons.is_triggered(buttons.Buttons.BTN_5): edit.text(edit.text() + "5")
if buttons.is_triggered(buttons.Buttons.BTN_6): edit.text(edit.text() + "6")
if buttons.is_triggered(buttons.Buttons.BTN_7): edit.text(edit.text() + "7")
if buttons.is_triggered(buttons.Buttons.BTN_8): edit.text(edit.text() + "8")
if buttons.is_triggered(buttons.Buttons.BTN_9): edit.text(edit.text() + "9")
if buttons.is_triggered(buttons.Buttons.BTN_Hash): edit.text(edit.text() + "#")
if buttons.is_triggered(buttons.Buttons.BTN_Star): edit.text(edit.text() + "*")
handle_keypad(edit)
finally:
window.hide()
@ -123,6 +113,47 @@ def prompt_text(description, init_text="", true_text="OK", false_text="Back", fo
edit.destroy();
return
last_key = None
last_keytime = None
def handle_keypad(edit):
global last_key, last_keytime
threshold = 1000
keymap = {
buttons.Buttons.BTN_0: [" ", "0"],
buttons.Buttons.BTN_1: ["1"],
buttons.Buttons.BTN_2: ["a", "b", "c", "2"],
buttons.Buttons.BTN_3: ["d", "e", "f", "3"],
buttons.Buttons.BTN_4: ["g", "h", "i", "4"],
buttons.Buttons.BTN_5: ["j", "k", "l", "5"],
buttons.Buttons.BTN_6: ["m", "n", "o", "6"],
buttons.Buttons.BTN_7: ["p", "q", "r", "s", "7"],
buttons.Buttons.BTN_8: ["t", "u", "v", "8"],
buttons.Buttons.BTN_9: ["w", "x", "y", "9"],
buttons.Buttons.BTN_Hash: ["#"],
buttons.Buttons.BTN_Star: ["*", "+"],
}
for key, chars in keymap.items():
if buttons.is_triggered(key):
if key != last_key:
edit.text(edit.text() + chars[0])
else:
if last_keytime is None or (time.ticks_ms() - last_keytime) > threshold:
edit.text(edit.text() + chars[0])
else:
last_char = edit.text()[-1]
try:
last_index = chars.index(last_char)
except ValueError:
# not sure how we get here...
return
next_index = (last_index+1) % len(chars)
edit.text(edit.text()[:-1] + chars[next_index])
last_key = key
last_keytime = time.ticks_ms()
def prompt_option(options, index=0, text = None, title=None, select_text="OK", none_text=None):
"""Shows a dialog prompting for one of multiple options