Last active
July 31, 2023 17:48
-
-
Save ctgPi/6e39650d7f64dce5f8822fb34de9ca67 to your computer and use it in GitHub Desktop.
Revisions
-
ctgPi revised this gist
Jun 1, 2022 . 2 changed files with 166 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,2 @@ Command: amixer -D pulse sset Capture 100% Release: amixer -D pulse sset Capture 0% This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -22,3 +22,167 @@ 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)) -
ctgPi created this gist
Jun 1, 2022 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,24 @@ --- 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]