diff --git a/preload/personal_state.py b/preload/personal_state.py new file mode 100644 index 0000000000000000000000000000000000000000..7605652c95070dba46cb8e572e48e2ebd2f6c641 --- /dev/null +++ b/preload/personal_state.py @@ -0,0 +1,92 @@ +""" +Personal State Script +=========== +With this script you can +""" +import buttons +import color +import display +import os +import personal_state + +states = [ + ("No State", personal_state.NO_STATE), + ("No Contact", personal_state.NO_CONTACT), + ("Chaos", personal_state.CHAOS), + ("Communication", personal_state.COMMUNICATION), + ("Camp", personal_state.CAMP), +] + + +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) + + if v == 0: + button_pressed = False + + if not button_pressed and v & buttons.BOTTOM_LEFT != 0: + button_pressed = True + yield buttons.BOTTOM_LEFT + + if not button_pressed and v & buttons.BOTTOM_RIGHT != 0: + button_pressed = True + yield buttons.BOTTOM_RIGHT + + 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) + + +if __name__ == "__main__": + main()