diff --git a/preload/apps/personal_state/__init__.py b/preload/apps/personal_state/__init__.py index 7605652c95070dba46cb8e572e48e2ebd2f6c641..f636e0c43cccfe9bd1781833a04b8776021e97ed 100644 --- a/preload/apps/personal_state/__init__.py +++ b/preload/apps/personal_state/__init__.py @@ -1,13 +1,11 @@ """ Personal State Script -=========== -With this script you can +===================== """ -import buttons import color -import display import os import personal_state +import simple_menu states = [ ("No State", personal_state.NO_STATE), @@ -18,75 +16,35 @@ states = [ ] -def button_events(): - """Iterate over button presses (event-loop).""" - yield 0 - button_pressed = False - while True: - v = buttons.read(buttons.BOTTOM_LEFT | buttons.BOTTOM_RIGHT | buttons.TOP_RIGHT) +class StateMenu(simple_menu.Menu): + color_sel = color.WHITE - if v == 0: - button_pressed = False + def on_scroll(self, item, index): + personal_state.set(item[1], False) - if not button_pressed and v & buttons.BOTTOM_LEFT != 0: - button_pressed = True - yield buttons.BOTTOM_LEFT + def on_select(self, item, index): + personal_state.set(item[1], True) + os.exit() - if not button_pressed and v & buttons.BOTTOM_RIGHT != 0: - button_pressed = True - yield buttons.BOTTOM_RIGHT + def draw_entry(self, item, index, offset): + if item[1] == personal_state.NO_CONTACT: + bg = color.RED + fg = color.WHITE + elif item[1] == personal_state.CHAOS: + bg = color.CHAOSBLUE + fg = color.CHAOSBLUE_DARK + elif item[1] == personal_state.COMMUNICATION: + bg = color.COMMYELLOW + fg = color.COMMYELLOW_DARK + elif item[1] == personal_state.CAMP: + bg = color.CAMPGREEN + fg = color.CAMPGREEN_DARK + else: + bg = color.Color(100, 100, 100) + fg = color.Color(200, 200, 200) - if not button_pressed and v & buttons.TOP_RIGHT != 0: - button_pressed = True - yield buttons.TOP_RIGHT - - -COLOR1, COLOR2 = (color.CHAOSBLUE_DARK, color.CHAOSBLUE) - - -def draw_menu(disp, idx, offset): - disp.clear() - - for y, i in enumerate(range(len(states) + idx - 3, len(states) + idx + 4)): - selected = states[i % len(states)] - disp.print( - " " + selected[0] + " " * (11 - len(selected[0])), - posy=offset + y * 20 - 40, - bg=COLOR1 if i % 2 == 0 else COLOR2, - ) - - disp.print(">", posy=20, fg=color.COMMYELLOW, bg=COLOR2 if idx % 2 == 0 else COLOR1) - disp.update() - - -def main(): - disp = display.open() - numstates = len(states) - - current, _ = personal_state.get() - for ev in button_events(): - if ev == buttons.BOTTOM_RIGHT: - # Scroll down - draw_menu(disp, current, -8) - current = (current + 1) % numstates - state = states[current] - personal_state.set(state[1], False) - elif ev == buttons.BOTTOM_LEFT: - # Scroll up - draw_menu(disp, current, 8) - current = (current + numstates - 1) % numstates - state = states[current] - personal_state.set(state[1], False) - elif ev == buttons.TOP_RIGHT: - state = states[current] - personal_state.set(state[1], True) - # Select & start - disp.clear().update() - disp.close() - os.exit(0) - - draw_menu(disp, current, 0) + self.disp.print(" " + str(item[0]) + " " * 9, posy=offset, fg=fg, bg=bg) if __name__ == "__main__": - main() + StateMenu(states).run()