82 lines
2.8 KiB
Python
82 lines
2.8 KiB
Python
import terminalio
|
|
from adafruit_display_text import label
|
|
from adafruit_displayio_layout.layouts.grid_layout import GridLayout
|
|
from rainbowio import colorwheel
|
|
|
|
from .abstract_app import App
|
|
from .debug_app import rgb_from_int
|
|
|
|
|
|
class OptionsApp(App):
|
|
|
|
def __init__(self, macropad, config):
|
|
super().__init__(macropad, config)
|
|
self.tones = [196, 220, 246, 262, 294, 330, 349, 392, 440, 494, 523, 587]
|
|
self.wheel_offset = 0
|
|
self.send_keyboard_inputs = 0
|
|
self.lit_keys = [False] * 12
|
|
self.labels = []
|
|
self.layout = GridLayout(x=0, y=9, width=128, height=54, grid_size=(4, 1), cell_padding=1)
|
|
self.title = label.Label(
|
|
y=4,
|
|
font=terminalio.FONT,
|
|
color=0x0,
|
|
text=f" OPTIONS MENU ",
|
|
background_color=0xFFFFFF,
|
|
)
|
|
|
|
def on_start(self):
|
|
print("on start from the app!")
|
|
self.lit_keys = [False] * 4
|
|
# self.macropad.display.show(self.display_group)
|
|
for _ in range(4):
|
|
self.labels.append(label.Label(terminalio.FONT, text=""))
|
|
|
|
for index in range(4):
|
|
x = index % 3 + 1
|
|
y = index // 3
|
|
self.layout.add_content(self.labels[index], grid_position=(x, y), cell_size=(1, 1))
|
|
|
|
def on_resume(self):
|
|
print("resume from the options app!")
|
|
self.display_group.append(self.title)
|
|
self.display_group.append(self.layout)
|
|
self.macropad.display.show(self.display_group)
|
|
print(self.display_group)
|
|
print(id(self.display_group))
|
|
|
|
def on_pause(self):
|
|
print("Pausing")
|
|
self.display_group.remove(self.title)
|
|
self.display_group.remove(self.layout)
|
|
|
|
def on_stop(self):
|
|
print("Stopping")
|
|
|
|
def loop(self):
|
|
self.process_key_presses()
|
|
self.light_keys()
|
|
|
|
def process_key_presses(self):
|
|
key_event = self.macropad.keys.events.get()
|
|
if key_event:
|
|
if key_event.key_number < 4:
|
|
if key_event.pressed :
|
|
self.labels[key_event.key_number].text = "KEY{}".format(key_event.key_number)
|
|
print(self.macropad.keys)
|
|
self.lit_keys[key_event.key_number] = not self.lit_keys[key_event.key_number]
|
|
self.macropad.stop_tone()
|
|
self.macropad.start_tone(self.tones[key_event.key_number])
|
|
else:
|
|
self.labels[key_event.key_number].text = ""
|
|
self.macropad.stop_tone()
|
|
|
|
def light_keys(self):
|
|
self.wheel_offset += 1
|
|
for pixel in range(4):
|
|
if self.lit_keys[pixel]:
|
|
(r, g, b) = rgb_from_int(colorwheel((pixel / 4 * 256) + self.wheel_offset))
|
|
self.macropad.pixels[pixel] = (r * .1, g * .1, b * .1)
|
|
else:
|
|
self.macropad.pixels[pixel] = 0
|