adding macro_utils and then implementing them in the default numpad app.
This commit is contained in:
@@ -8,25 +8,12 @@ from adafruit_hid.keycode import Keycode
|
|||||||
from rainbowio import colorwheel
|
from rainbowio import colorwheel
|
||||||
|
|
||||||
from macropad_os import App
|
from macropad_os import App
|
||||||
from macropad_os.app_utils import rgb_from_int
|
from macropad_os.app_utils import rgb_from_int, MacroSet, Macro
|
||||||
|
|
||||||
|
COLOR_UPDATE_RATE = 33000000 # .033 seconds
|
||||||
|
|
||||||
labels = [
|
SWAP_MODE = lambda x: not x
|
||||||
"7", "8", "9",
|
|
||||||
"4", "5", "6",
|
|
||||||
"1", "2", "3",
|
|
||||||
"0", ".", "SHIFT"
|
|
||||||
]
|
|
||||||
|
|
||||||
modified_labels = [
|
|
||||||
"<", ">", "&",
|
|
||||||
"(", ")", "%",
|
|
||||||
"/", "+", "-",
|
|
||||||
"*", "=", "SHIFT"
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
COLOR_UPDATE_RATE = 33000000 # .033 seconds
|
|
||||||
|
|
||||||
class NumpadApp(App):
|
class NumpadApp(App):
|
||||||
|
|
||||||
@@ -39,6 +26,40 @@ class NumpadApp(App):
|
|||||||
self.title = "Numpad"
|
self.title = "Numpad"
|
||||||
self.modifier_pressed = False
|
self.modifier_pressed = False
|
||||||
self.last_color_update = 0
|
self.last_color_update = 0
|
||||||
|
self.modifier_pressed = False
|
||||||
|
self.macros = MacroSet(
|
||||||
|
[
|
||||||
|
Macro("7", Keycode.KEYPAD_SEVEN), Macro("8", Keycode.KEYPAD_EIGHT), Macro("9", Keycode.KEYPAD_NINE),
|
||||||
|
Macro("4", Keycode.KEYPAD_FOUR), Macro("5", Keycode.KEYPAD_FIVE), Macro("6", Keycode.KEYPAD_SIX),
|
||||||
|
Macro("1", Keycode.KEYPAD_ONE), Macro("2", Keycode.KEYPAD_TWO), Macro("3", Keycode.KEYPAD_THREE),
|
||||||
|
Macro("0", Keycode.KEYPAD_ZERO), Macro(".", Keycode.KEYPAD_PERIOD),
|
||||||
|
Macro("Mod", self.swap_modifier, released=self.swap_modifier)
|
||||||
|
],
|
||||||
|
encoder_up=Macro("+", Keycode.KEYPAD_PLUS),
|
||||||
|
encoder_down=Macro("-", Keycode.KEYPAD_MINUS),
|
||||||
|
)
|
||||||
|
self.mod_macros = MacroSet([
|
||||||
|
Macro("<", Keycode.LEFT_ARROW), Macro(">", Keycode.RIGHT_ARROW), Macro("&", Keycode.SHIFT, Keycode.SEVEN),
|
||||||
|
|
||||||
|
Macro("(", Keycode.SHIFT, Keycode.NINE), Macro(")", Keycode.SHIFT, Keycode.ZERO),Macro("%", Keycode.SHIFT, Keycode.FIVE),
|
||||||
|
|
||||||
|
Macro("/", Keycode.FORWARD_SLASH), Macro("+", Keycode.KEYPAD_PLUS), Macro("-", Keycode.MINUS),
|
||||||
|
|
||||||
|
Macro("*", Keycode.SHIFT, Keycode.EIGHT), Macro("=", Keycode.EQUALS), Macro("Mod", self.swap_modifier, released=self.swap_modifier)
|
||||||
|
],
|
||||||
|
encoder_up=Macro("+", Keycode.KEYPAD_PLUS),
|
||||||
|
encoder_down=Macro("-", Keycode.KEYPAD_MINUS),
|
||||||
|
)
|
||||||
|
self.active_macros = self.macros
|
||||||
|
|
||||||
|
def swap_modifier(self):
|
||||||
|
self.modifier_pressed = not self.modifier_pressed
|
||||||
|
if self.modifier_pressed:
|
||||||
|
self.active_macros = self.mod_macros
|
||||||
|
else:
|
||||||
|
self.active_macros = self.macros
|
||||||
|
for i in range(12):
|
||||||
|
self.labels[i].text = self.active_macros.get_macro_from_key(i).name
|
||||||
|
|
||||||
def on_start(self):
|
def on_start(self):
|
||||||
print("on start from the app!")
|
print("on start from the app!")
|
||||||
@@ -46,7 +67,7 @@ class NumpadApp(App):
|
|||||||
self.set_title(self.title)
|
self.set_title(self.title)
|
||||||
self.lit_keys = [True] * 12
|
self.lit_keys = [True] * 12
|
||||||
for i in range(12):
|
for i in range(12):
|
||||||
self.labels.append(Label(terminalio.FONT, text=labels[i]))
|
self.labels.append(Label(terminalio.FONT, text=self.active_macros.get_macro_from_key(i).name))
|
||||||
for index in range(12):
|
for index in range(12):
|
||||||
x = index % 3
|
x = index % 3
|
||||||
y = index // 3
|
y = index // 3
|
||||||
@@ -82,12 +103,21 @@ class NumpadApp(App):
|
|||||||
colors.append((0, 0, 0))
|
colors.append((0, 0, 0))
|
||||||
self.set_colors(colors)
|
self.set_colors(colors)
|
||||||
|
|
||||||
def process_keys_pressed_callback(self, keyevent):
|
def process_keys_pressed_callback(self, key_event):
|
||||||
print(keyevent)
|
for code in self.active_macros.get_macro_from_key(key_event).codes:
|
||||||
self.keyboard.send(Keycode.SHIFT,Keycode.SHIFT,Keycode.SHIFT, Keycode.A)
|
if code:
|
||||||
|
if callable(code):
|
||||||
|
code()
|
||||||
|
else:
|
||||||
|
self.keyboard.send(code)
|
||||||
|
|
||||||
def process_keys_released_callback(self, keyevent):
|
def process_keys_released_callback(self, key_event):
|
||||||
print(keyevent)
|
release_action = self.active_macros.get_macro_from_key(key_event).released
|
||||||
|
if release_action:
|
||||||
|
if callable(release_action):
|
||||||
|
release_action()
|
||||||
|
else:
|
||||||
|
self.keyboard.send(release_action)
|
||||||
|
|
||||||
def process_enbcoder_changed(self, keyevent):
|
def process_enbcoder_changed(self, key_event):
|
||||||
print(keyevent)
|
print(key_event)
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
from .static_lighting import *
|
from .static_lighting import *
|
||||||
from .helpers import *
|
from .helpers import *
|
||||||
|
from .macro_utils import *
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
from adafruit_hid.keycode import Keycode
|
|
||||||
|
|
||||||
class Key(object):
|
|
||||||
def __init__(self, name, keycode:Keycodes):
|
|
||||||
self.name = name
|
|
||||||
self.code = keycode
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
class Macro(object):
|
||||||
|
def __init__(self, name, *codes, released = None):
|
||||||
|
self.name = name
|
||||||
|
self.codes = codes
|
||||||
|
self.released = released
|
||||||
|
|
||||||
|
|
||||||
|
class MacroSet(object):
|
||||||
|
def __init__(self, key_macros: [Macro], encoder_up: Macro, encoder_down: Macro):
|
||||||
|
if len(key_macros) != 12:
|
||||||
|
raise ValueError("12 keys must be passed to a keyset")
|
||||||
|
self._key_macros = key_macros
|
||||||
|
self.encoder_up = encoder_up
|
||||||
|
self.encoder_down = encoder_down
|
||||||
|
|
||||||
|
def get_macro_from_key(self, key_index) -> Macro:
|
||||||
|
if key_index < 0 or key_index > 11:
|
||||||
|
raise ValueError("Invalid key index")
|
||||||
|
return self._key_macros[key_index]
|
||||||
|
|
||||||
Reference in New Issue
Block a user