macro_recorder: making UI more dynamic, show current state of changes
parent
e19b0a5a35
commit
7a75e77e9b
|
|
@ -185,6 +185,10 @@ class Keyboard:
|
|||
sz = min(MACRO_CHUNK, self.macro_memory - x)
|
||||
data = self.usb_send(self.dev, struct.pack(">BHB", CMD_VIA_MACRO_GET_BUFFER, x, sz))
|
||||
self.macro += data[4:4+sz]
|
||||
# macros are stored as NUL-separated strings, so let's clean up the buffer
|
||||
# ensuring we only get macro_count strings after we split by NUL
|
||||
macros = self.macro.split(b"\x00") + [b""] * self.macro_count
|
||||
self.macro = b"\x00".join(macros[:self.macro_count]) + b"\x00"
|
||||
|
||||
def set_key(self, layer, row, col, code):
|
||||
key = (layer, row, col)
|
||||
|
|
@ -211,6 +215,7 @@ class Keyboard:
|
|||
for x, chunk in enumerate(chunks(data, MACRO_CHUNK)):
|
||||
off = x * MACRO_CHUNK
|
||||
self.usb_send(self.dev, struct.pack(">BHB", CMD_VIA_MACRO_SET_BUFFER, off, len(chunk)) + chunk)
|
||||
self.macro = data
|
||||
|
||||
def save_layout(self):
|
||||
""" Serializes current layout to a binary """
|
||||
|
|
|
|||
|
|
@ -221,13 +221,22 @@ class MacroRecorder(BasicEditor):
|
|||
for x in range(self.tabs.count()):
|
||||
self.tabs.removeTab(x)
|
||||
for x, w in enumerate(self.macro_tab_w[:self.keyboard.macro_count]):
|
||||
self.tabs.addTab(w, "Macro {}".format(x + 1))
|
||||
self.tabs.addTab(w, "")
|
||||
self.update_tab_titles()
|
||||
|
||||
# deserialize macros that came from keyboard
|
||||
self.deserialize(self.keyboard.macro)
|
||||
|
||||
self.on_change()
|
||||
|
||||
def update_tab_titles(self):
|
||||
macros = self.keyboard.macro.split(b"\x00")
|
||||
for x, w in enumerate(self.macro_tab_w[:self.keyboard.macro_count]):
|
||||
title = "Macro {}".format(x + 1)
|
||||
if macros[x] != self.macro_tabs[x].serialize():
|
||||
title += "*"
|
||||
self.tabs.setTabText(x, title)
|
||||
|
||||
def on_record(self, tab, append):
|
||||
self.recording_tab = tab
|
||||
self.recording_append = append
|
||||
|
|
@ -266,10 +275,12 @@ class MacroRecorder(BasicEditor):
|
|||
self.keystrokes.append(keystroke)
|
||||
|
||||
def on_change(self):
|
||||
memory = len(self.serialize())
|
||||
data = self.serialize()
|
||||
memory = len(data)
|
||||
self.lbl_memory.setText("Memory used by macros: {}/{}".format(memory, self.keyboard.macro_memory))
|
||||
self.btn_save.setEnabled(memory <= self.keyboard.macro_memory)
|
||||
self.btn_save.setEnabled(data != self.keyboard.macro and memory <= self.keyboard.macro_memory)
|
||||
self.lbl_memory.setStyleSheet("QLabel { color: red; }" if memory > self.keyboard.macro_memory else "")
|
||||
self.update_tab_titles()
|
||||
|
||||
def deserialize(self, data):
|
||||
macros = data.split(b"\x00")
|
||||
|
|
@ -291,3 +302,4 @@ class MacroRecorder(BasicEditor):
|
|||
|
||||
def on_save(self):
|
||||
self.keyboard.set_macro(self.serialize())
|
||||
self.on_change()
|
||||
|
|
|
|||
Loading…
Reference in New Issue