Skip to content

Instantly share code, notes, and snippets.

@ctgPi
Last active July 31, 2023 17:48
Show Gist options
  • Save ctgPi/6e39650d7f64dce5f8822fb34de9ca67 to your computer and use it in GitHub Desktop.
Save ctgPi/6e39650d7f64dce5f8822fb34de9ca67 to your computer and use it in GitHub Desktop.
StreamDeckPedal patch
Command: amixer -D pulse sset Capture 100%
Release: amixer -D pulse sset Capture 0%
--- display_grid.py
+++ .local/lib/python3.8/site-packages/streamdeck_ui/display/display_grid.py
@@ -41,7 +41,10 @@
self.streamdeck = streamdeck
# Reference to the actual device, used to update icons
- self.size = streamdeck.key_image_format()["size"]
+ if streamdeck.is_visual():
+ self.size = streamdeck.key_image_format()["size"]
+ else:
+ self.size = (72, 72)
self.serial_number = streamdeck.get_serial_number()
self.pages: Dict[int, Dict[int, Pipeline]] = {}
@@ -158,7 +161,8 @@
# FIXME: This will be unbounded, old frames will need to be evicted
if hashcode not in frame_cache:
- image = PILHelper.to_native_format(self.streamdeck, image)
+ if self.streamdeck.is_visual():
+ image = PILHelper.to_native_format(self.streamdeck, image)
frame_cache[hashcode] = image
else:
image = frame_cache[hashcode]
--- api.py
+++ .local/lib/python3.8/site-packages/streamdeck_ui/api.py
@@ -373,6 +373,16 @@
"""Returns the command set for the specified button"""
return self._button_state(deck_id, page, button).get("command", "")
+ def set_button_command_release(self, deck_id: str, page: int, button: int, command_release: str) -> None:
+ """Sets the command_release associated with the button"""
+ if self.get_button_command_release(deck_id, page, button) != command_release:
+ self._button_state(deck_id, page, button)["command_release"] = command_release
+ self._save_state()
+
+ def get_button_command_release(self, deck_id: str, page: int, button: int) -> str:
+ """Returns the command_release set for the specified button"""
+ return self._button_state(deck_id, page, button).get("command_release", "")
+
def set_button_switch_page(self, deck_id: str, page: int, button: int, switch_page: int) -> None:
"""Sets the page switch associated with the button"""
if self.get_button_switch_page(deck_id, page, button) != switch_page:
--- gui.py
+++ .local/lib/python3.8/site-packages/streamdeck_ui/gui.py
@@ -219,6 +219,16 @@
api.set_page(deck_id, switch_page - 1)
if _deck_id(ui) == deck_id:
ui.pages.setCurrentIndex(switch_page - 1)
+ else:
+ kb = Controller()
+ page = api.get_page(deck_id)
+
+ command_release = api.get_button_command_release(deck_id, page, key)
+ if command_release:
+ try:
+ Popen(shlex.split(command_release))
+ except Exception as error:
+ print(f"The command '{command_release}' failed: {error}")
def _deck_id(ui) -> str:
@@ -253,6 +263,12 @@
api.set_button_command(deck_id, _page(ui), selected_button.index, command)
+def update_button_command_release(ui, command_release: str) -> None:
+ if selected_button:
+ deck_id = _deck_id(ui)
+ api.set_button_command_release(deck_id, _page(ui), selected_button.index, command_release)
+
+
def update_button_keys(ui, keys: str) -> None:
if selected_button:
deck_id = _deck_id(ui)
@@ -393,6 +409,7 @@
enable_button_configuration(ui, True)
ui.text.setText(api.get_button_text(deck_id, _page(ui), button_id))
ui.command.setText(api.get_button_command(deck_id, _page(ui), button_id))
+ ui.command_release.setText(api.get_button_command_release(deck_id, _page(ui), button_id))
ui.keys.setCurrentText(api.get_button_keys(deck_id, _page(ui), button_id))
ui.write.setPlainText(api.get_button_write(deck_id, _page(ui), button_id))
ui.change_brightness.setValue(api.get_button_change_brightness(deck_id, _page(ui), button_id))
@@ -406,6 +423,7 @@
def enable_button_configuration(ui, enabled: bool):
ui.text.setEnabled(enabled)
ui.command.setEnabled(enabled)
+ ui.command_release.setEnabled(enabled)
ui.keys.setEnabled(enabled)
ui.write.setEnabled(enabled)
ui.change_brightness.setEnabled(enabled)
@@ -421,6 +439,7 @@
"""
ui.text.clear()
ui.command.clear()
+ ui.command_release.clear()
ui.keys.clearEditText()
ui.write.clear()
ui.change_brightness.setValue(0)
@@ -713,6 +732,7 @@
ui = main_window.ui
ui.text.textChanged.connect(partial(queue_update_button_text, ui))
ui.command.textChanged.connect(partial(update_button_command, ui))
+ ui.command_release.textChanged.connect(partial(update_button_command_release, ui))
ui.keys.currentTextChanged.connect(partial(update_button_keys, ui))
ui.write.textChanged.connect(partial(update_button_write, ui))
ui.change_brightness.valueChanged.connect(partial(update_change_brightness, ui))
--- ui_main.py
+++ .local/lib/python3.8/site-packages/streamdeck_ui/ui_main.py
@@ -208,10 +208,20 @@
self.formLayout.setWidget(2, QFormLayout.FieldRole, self.command)
+ self.label_4 = QLabel(self.groupBox)
+ self.label_4.setObjectName(u"label_4")
+
+ self.formLayout.setWidget(3, QFormLayout.LabelRole, self.label_4)
+
+ self.command_release = QLineEdit(self.groupBox)
+ self.command.setObjectName(u"command_release")
+
+ self.formLayout.setWidget(3, QFormLayout.FieldRole, self.command_release)
+
self.label_5 = QLabel(self.groupBox)
self.label_5.setObjectName(u"label_5")
- self.formLayout.setWidget(3, QFormLayout.LabelRole, self.label_5)
+ self.formLayout.setWidget(4, QFormLayout.LabelRole, self.label_5)
self.keys = QComboBox(self.groupBox)
self.keys.addItem(u"")
@@ -233,12 +243,12 @@
self.keys.setObjectName(u"keys")
self.keys.setEditable(True)
- self.formLayout.setWidget(3, QFormLayout.FieldRole, self.keys)
+ self.formLayout.setWidget(4, QFormLayout.FieldRole, self.keys)
self.label_8 = QLabel(self.groupBox)
self.label_8.setObjectName(u"label_8")
- self.formLayout.setWidget(4, QFormLayout.LabelRole, self.label_8)
+ self.formLayout.setWidget(5, QFormLayout.LabelRole, self.label_8)
self.switch_page = QSpinBox(self.groupBox)
self.switch_page.setObjectName(u"switch_page")
@@ -246,28 +256,28 @@
self.switch_page.setMaximum(10)
self.switch_page.setValue(0)
- self.formLayout.setWidget(4, QFormLayout.FieldRole, self.switch_page)
+ self.formLayout.setWidget(5, QFormLayout.FieldRole, self.switch_page)
self.label_7 = QLabel(self.groupBox)
self.label_7.setObjectName(u"label_7")
- self.formLayout.setWidget(5, QFormLayout.LabelRole, self.label_7)
+ self.formLayout.setWidget(6, QFormLayout.LabelRole, self.label_7)
self.change_brightness = QSpinBox(self.groupBox)
self.change_brightness.setObjectName(u"change_brightness")
self.change_brightness.setMinimum(-99)
- self.formLayout.setWidget(5, QFormLayout.FieldRole, self.change_brightness)
+ self.formLayout.setWidget(6, QFormLayout.FieldRole, self.change_brightness)
self.label_6 = QLabel(self.groupBox)
self.label_6.setObjectName(u"label_6")
- self.formLayout.setWidget(6, QFormLayout.LabelRole, self.label_6)
+ self.formLayout.setWidget(7, QFormLayout.LabelRole, self.label_6)
self.write = QPlainTextEdit(self.groupBox)
self.write.setObjectName(u"write")
- self.formLayout.setWidget(6, QFormLayout.FieldRole, self.write)
+ self.formLayout.setWidget(7, QFormLayout.FieldRole, self.write)
self.horizontalLayout_3 = QHBoxLayout()
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
@@ -373,6 +383,7 @@
self.removeButton.setText("")
self.label_2.setText(QCoreApplication.translate("MainWindow", u"Label:", None))
self.label_3.setText(QCoreApplication.translate("MainWindow", u"Command:", None))
+ self.label_4.setText(QCoreApplication.translate("MainWindow", u"Release:", None))
self.label_5.setText(QCoreApplication.translate("MainWindow", u"Press Keys:", None))
self.label_8.setText(QCoreApplication.translate("MainWindow", u"Switch Page:", None))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment