From 13e69c48b28c4b5c355530614854b113398af469 Mon Sep 17 00:00:00 2001 From: David Kincaid Date: Mon, 10 Jun 2024 18:12:22 -0400 Subject: [PATCH] Switch OBS plugin to using SettingsModel and add start/stop buttons --- app/plugins/godot/godot_settings_page.py | 11 +++++++++ app/plugins/godot/godot_status_widget.py | 4 ++-- app/plugins/obs_core/obs_settings_page.py | 17 +++++++++++--- app/plugins/obs_core/obs_status_widget.py | 27 ++++++++++++++--------- 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/app/plugins/godot/godot_settings_page.py b/app/plugins/godot/godot_settings_page.py index 1e9e3f1..265523f 100644 --- a/app/plugins/godot/godot_settings_page.py +++ b/app/plugins/godot/godot_settings_page.py @@ -14,6 +14,12 @@ def __init__(self, name='', changed=None, data=None): self.set_data(data) godot = GodotStatusWidget() + + self.start = QPushButton('Start') + self.start.clicked.connect(godot.open) + self.stop = QPushButton('Stop') + self.stop.clicked.connect(godot.close) + self.stop.setEnabled(False) self.status = QLabel(godot.status_label.text()) self.url = QLineEdit(godot.settings.url) @@ -39,6 +45,7 @@ def __init__(self, name='', changed=None, data=None): with CVBoxLayout(self) as layout: with layout.form(): layout.setFieldGrowthPolicy(QFormLayout.FieldsStayAtSizeHint) + layout.addRow(self.start, self.stop) layout.addRow('Status:', self.status) layout.addRow('Url:', self.url) layout.addRow('Port:', self.port) @@ -54,7 +61,11 @@ def status_changed(self, status, message=''): self.url.setEnabled(False) self.port.setEnabled(False) # self.password.setEnabled(False) + self.start.setEnabled(False) + self.stop.setEnabled(True) elif status == 'inactive': self.url.setEnabled(True) self.port.setEnabled(True) # self.password.setEnabled(True) + self.start.setEnabled(True) + self.stop.setEnabled(False) diff --git a/app/plugins/godot/godot_status_widget.py b/app/plugins/godot/godot_status_widget.py index 6b0bf35..a5702ad 100644 --- a/app/plugins/godot/godot_status_widget.py +++ b/app/plugins/godot/godot_status_widget.py @@ -29,8 +29,8 @@ def __init__(self, *args, **kwargs): self.status_label = QLabel('Not Connected') self.settings = GodotSettings() - self.connect_at_start = PersistentCheckableAction('godot/connect_at_start', 'Connect on Startup') + self.connect_at_start = PersistentCheckableAction('godot/connect_at_start', 'Connect on Startup') if self.connect_at_start.isChecked(): self.open() @@ -83,7 +83,7 @@ def open_settings(self): def open(self): self.set_status('pending') - self.socket.open(self.url, self.port) + self.socket.open(self.settings.url, self.settings.port) def close(self): self.socket.we_closed = True diff --git a/app/plugins/obs_core/obs_settings_page.py b/app/plugins/obs_core/obs_settings_page.py index e085251..c750ecf 100644 --- a/app/plugins/obs_core/obs_settings_page.py +++ b/app/plugins/obs_core/obs_settings_page.py @@ -15,10 +15,16 @@ def __init__(self, name='', changed=None, data=None): obs = ObsStatusWidget() + self.start = QPushButton('Start') + self.start.clicked.connect(obs.open) + self.stop = QPushButton('Stop') + self.stop.clicked.connect(obs.close) + self.stop.setEnabled(False) + self.status = QLabel(obs.status_label.text()) - self.url = QLineEdit(obs.url) - self.port = QLineEdit(obs.port) - self.password = QLineEdit(obs.password) + self.url = QLineEdit(obs.settings.url) + self.port = QLineEdit(obs.settings.port) + self.password = QLineEdit(obs.settings.password) self.password.setEchoMode(QLineEdit.PasswordEchoOnEdit) self.connect_at_start = QCheckBox() self.connect_at_start.setChecked(obs.connect_at_start.isChecked()) @@ -37,6 +43,7 @@ def __init__(self, name='', changed=None, data=None): with CVBoxLayout(self) as layout: with layout.form(): layout.setFieldGrowthPolicy(QFormLayout.FieldsStayAtSizeHint) + layout.addRow(self.start, self.stop) layout.addRow('Status:', self.status) layout.addRow('Url:', self.url) layout.addRow('Port:', self.port) @@ -52,7 +59,11 @@ def status_changed(self, status, message=''): self.url.setEnabled(False) self.port.setEnabled(False) self.password.setEnabled(False) + self.start.setEnabled(False) + self.stop.setEnabled(True) elif status == 'inactive': self.url.setEnabled(True) self.port.setEnabled(True) self.password.setEnabled(True) + self.start.setEnabled(True) + self.stop.setEnabled(False) diff --git a/app/plugins/obs_core/obs_status_widget.py b/app/plugins/obs_core/obs_status_widget.py index fbf6a68..c692f55 100644 --- a/app/plugins/obs_core/obs_status_widget.py +++ b/app/plugins/obs_core/obs_status_widget.py @@ -1,10 +1,21 @@ from qtstrap import * from qtstrap.extras.command_palette import Command +from qtstrap.extras.settings_model import SettingsModel from stagehand.components import StagehandStatusBarItem from stagehand.main_window import MainWindow from .obs_socket import ObsSocket +class ObsSettings(SettingsModel): + url: str = 'localhost' + port: str = '4444' + password: str = 'websocketpassword' + connect_at_start: bool = False + + class Config: + prefix = 'plugins/obs' + + @singleton class ObsStatusWidget(StagehandStatusBarItem): status_changed = Signal(str, str) @@ -17,12 +28,9 @@ def __init__(self, *args, **kwargs): self.status = '' self.status_label = QLabel('Not Connected') - self.url = QSettings().value('obs/url', 'localhost') - self.port = QSettings().value('obs/port', '4444') - self.password = QSettings().value('obs/password', 'websocketpassword') + self.settings = ObsSettings() self.connect_at_start = PersistentCheckableAction('obs/connect_at_start', 'Connect on Startup') - if self.connect_at_start.isChecked(): self.open() @@ -41,16 +49,13 @@ def setText(self, text): self.status_label.setText(text) def set_url(self, url): - QSettings().setValue('obs/url', url) - self.url = url + self.settings.url = url def set_port(self, port): - QSettings().setValue('obs/port', port) - self.port = port + self.settings.port = port def set_password(self, password): - QSettings().setValue('obs/password', password) - self.password = password + self.settings.password = password def set_status(self, status): self.status = status @@ -81,7 +86,7 @@ def open_settings(self): def open(self): self.set_status('pending') - self.socket.open(self.url, self.port, self.password) + self.socket.open(self.settings.url, self.settings.port, self.settings.password) def close(self): self.socket.we_closed = True