1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-01-15 09:50:57 +00:00

move pagination primitives to trezor.ui.scroll

This commit is contained in:
Jan Pochyla 2016-08-05 12:37:26 +02:00 committed by Pavol Rusnak
parent 455a436123
commit 096f3f898f
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
2 changed files with 45 additions and 75 deletions

View File

@ -1,7 +1,6 @@
from trezor import wire, loop, res, ui from trezor import wire, ui
from trezor.ui.swipe import Swipe, SWIPE_UP, SWIPE_DOWN
from trezor.ui.button import Button, CONFIRM_BUTTON, CONFIRM_BUTTON_ACTIVE from trezor.ui.button import Button, CONFIRM_BUTTON, CONFIRM_BUTTON_ACTIVE
from trezor.ui.scroll import Scroll from trezor.ui.scroll import paginate, render_scrollbar, animate_swipe
from trezor.crypto import hashlib, random, bip39 from trezor.crypto import hashlib, random, bip39
from trezor.utils import unimport_gen, chunks from trezor.utils import unimport_gen, chunks
@ -35,51 +34,6 @@ def request_new_pin():
raise Exception() # TODO: wrong PIN should be handled in unified way raise Exception() # TODO: wrong PIN should be handled in unified way
def change_page(page, page_count):
while True:
swipe = yield from Swipe().wait()
if swipe == SWIPE_UP and page < page_count - 1: # Scroll down
return page + 1
elif swipe == SWIPE_DOWN and page > 0: # Scroll up
return page - 1
def paginate(render_page, page_count, page=0):
while True:
changer = change_page(page, page_count)
renderer = render_page(page, page_count)
waiter = loop.Wait([changer, renderer])
result = yield waiter
if changer in waiter.finished:
page = result
else:
return result
def render_scrollbar(page, page_count):
screen_height = const(220)
size = const(8)
padding = 15
if page_count * padding > screen_height:
padding = screen_height // page_count
x = 225
y = (screen_height // 2) - (page_count // 2) * padding
for i in range(0, page_count):
if i != page:
ui.display.bar(x, y + i * padding, size, size, ui.GREY, ui.BLACK, 4)
ui.display.bar(x, y + page * padding, size, size, ui.WHITE, ui.BLACK, 4)
def animate_swipe():
def render(fg):
ui.display.bar(102, 214, 36, 4, fg, ui.BLACK, 2)
ui.display.bar(106, 222, 28, 4, fg, ui.BLACK, 2)
ui.display.bar(110, 230, 20, 4, fg, ui.BLACK, 2)
yield from ui.animate_pulse(render, ui.WHITE, ui.GREY, speed=300000, delay=200000)
def show_mnemonic(mnemonic): def show_mnemonic(mnemonic):
words_per_page = const(4) words_per_page = const(4)
mnemonic_words = list(enumerate(mnemonic.split())) mnemonic_words = list(enumerate(mnemonic.split()))
@ -100,15 +54,14 @@ def show_mnemonic(mnemonic):
ui.display.text_right(40, top, '%d.' % pos, ui.BOLD, ui.LIGHT_GREEN, ui.BLACK) ui.display.text_right(40, top, '%d.' % pos, ui.BOLD, ui.LIGHT_GREEN, ui.BLACK)
ui.display.text(45, top, '%s' % word, ui.BOLD, ui.WHITE, ui.BLACK) ui.display.text(45, top, '%s' % word, ui.BOLD, ui.WHITE, ui.BLACK)
# Finish button
if page + 1 == page_count: if page + 1 == page_count:
# Finish button
finish = Button((0, 240 - 48, 240, 48), 'Finish', finish = Button((0, 240 - 48, 240, 48), 'Finish',
normal_style=CONFIRM_BUTTON, normal_style=CONFIRM_BUTTON,
active_style=CONFIRM_BUTTON_ACTIVE) active_style=CONFIRM_BUTTON_ACTIVE)
yield from finish.wait() yield from finish.wait()
# Swipe icon
else: else:
# Swipe icon
yield from animate_swipe() yield from animate_swipe()
yield from paginate(render, len(mnemonic_pages)) yield from paginate(render, len(mnemonic_pages))

View File

@ -1,32 +1,49 @@
from . import display from .swipe import Swipe, SWIPE_UP, SWIPE_DOWN
from trezor import ui, loop, res from trezor import loop, ui
class Scroll(): def change_page(page, page_count):
while True:
s = yield from Swipe()
if s == SWIPE_UP and page < page_count - 1:
return page + 1 # Scroll down
elif s == SWIPE_DOWN and page > 0:
return page - 1 # Scroll up
def __init__(self, page=0, totale_lines=0, lines_per_page=4):
self.page = page
self.totale_lines = totale_lines
self.lines_per_page = lines_per_page
def render(self): def paginate(render_page, page_count, page=0):
count = self.totale_lines // self.lines_per_page while True:
padding = 20 changer = change_page(page, page_count)
screen_height = const(220) renderer = render_page(page, page_count)
cursor = 8 waiter = loop.Wait([changer, renderer])
result = yield waiter
if count * padding > screen_height: if changer in waiter.finished:
padding = screen_height // count page = result
else:
return result
x = 230
y = ((screen_height // 2)) - ((count // 2) * padding)
for i in range(0, count): def render_scrollbar(page, page_count):
if (i != self.page): screen_height = const(220)
ui.display.bar(x, y + i * padding, cursor, cursor, ui.GREY, ui.BLACK, 4) size = const(8)
ui.display.bar(x, y + self.page * padding, cursor, cursor, ui.WHITE, ui.BLACK, 4)
def wait(self): padding = 15
while True: if page_count * padding > screen_height:
self.render() padding = screen_height // page_count
x = 225
y = (screen_height // 2) - (page_count // 2) * padding
for i in range(0, page_count):
if i != page:
ui.display.bar(x, y + i * padding, size,
size, ui.GREY, ui.BLACK, 4)
ui.display.bar(x, y + page * padding, size, size, ui.WHITE, ui.BLACK, 4)
def animate_swipe():
def render(fg):
ui.display.bar(102, 214, 36, 4, fg, ui.BLACK, 2)
ui.display.bar(106, 222, 28, 4, fg, ui.BLACK, 2)
ui.display.bar(110, 230, 20, 4, fg, ui.BLACK, 2)
yield from ui.animate_pulse(render, ui.WHITE, ui.GREY, speed=300000, delay=200000)