From 23c669b3c6fb3bc805887cef00d6c37756e5c41e Mon Sep 17 00:00:00 2001 From: Christian Kolset Date: Wed, 3 Jun 2026 11:38:49 -0600 Subject: Sync Channels window with device/channel changes - Remove redundant Signals tab from Channels window; PipelineTab is now direct content - PipelineTab removes stale blocks when devices are removed or reconfigured - Devices>Signals tab refreshes automatically on device add/remove/configure - Channel name and unit edits in Devices>Signals propagate live to Channels pipeline block headers; missing blocks auto-added if channel is enabled Co-Authored-By: Claude Sonnet 4.6 --- ui/main_window.py | 55 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 22 deletions(-) (limited to 'ui/main_window.py') diff --git a/ui/main_window.py b/ui/main_window.py index abfd585..45e6c95 100644 --- a/ui/main_window.py +++ b/ui/main_window.py @@ -39,7 +39,7 @@ from ui.control_panel import ControlPanel from ui.strip_chart import StripChartWidget from ui.profile_manager_ui import ProfileButton from ui.windows.devices_window import DevicesWindow -from ui.windows.signals_window import SignalsWindow +from ui.windows.signals_window import ChannelsWindow from ui.windows.plot_window import PlotWindow, build_default_layout from ui.windows.settings_window import SettingsWindow @@ -64,7 +64,7 @@ class MainWindow(QMainWindow): self._elapsed = 0 self._win_devices = None - self._win_signals = None + self._win_channels = None self._win_plot = None self._win_settings = None @@ -138,10 +138,10 @@ class MainWindow(QMainWindow): dev_btn.clicked.connect(lambda c: self._toggle_win("devices", c, dev_btn)) tb.addWidget(dev_btn); self._btn_devices = dev_btn - sig_btn = QPushButton("⚗ Signals") + sig_btn = QPushButton("⚗ Channels") sig_btn.setObjectName("toolbarSectionBtn"); sig_btn.setCheckable(True) - sig_btn.clicked.connect(lambda c: self._toggle_win("signals", c, sig_btn)) - tb.addWidget(sig_btn); self._btn_signals = sig_btn + sig_btn.clicked.connect(lambda c: self._toggle_win("channels", c, sig_btn)) + tb.addWidget(sig_btn); self._btn_channels = sig_btn plot_btn = QPushButton("📐 Plot") plot_btn.setObjectName("toolbarSectionBtn"); plot_btn.setCheckable(True) @@ -309,13 +309,13 @@ class MainWindow(QMainWindow): def _toggle_win(self, name: str, checked: bool, btn: QPushButton): creators = { "devices": self._open_devices, - "signals": self._open_signals, + "channels": self._open_channels, "plot": self._open_plot, "settings": self._open_settings, } wins = { "devices": "_win_devices", - "signals": "_win_signals", + "channels": "_win_channels", "plot": "_win_plot", "settings": "_win_settings", } @@ -332,17 +332,17 @@ class MainWindow(QMainWindow): self._win_devices.device_removed.connect(self._on_device_removed) self._win_devices.device_reconfigured.connect(self._on_device_reconfigured) self._win_devices.channel_visibility_changed.connect(self._on_channel_visibility_changed) + self._win_devices.channel_name_changed.connect(self._on_channel_name_changed) + self._win_devices.channel_unit_changed.connect(self._on_channel_unit_changed) self._win_devices.closed.connect(lambda: self._btn_devices.setChecked(False)) self._show_win(self._win_devices, "right") - def _open_signals(self): - if self._win_signals is None: - self._win_signals = SignalsWindow(self.registry, self.processor, self) - self._win_signals.derived_changed.connect(self._on_derived_changed) - self._win_signals.visibility_changed.connect(self._chart.refresh) - self._win_signals.channel_toggled.connect(self._on_channel_visibility_changed) - self._win_signals.closed.connect(lambda: self._btn_signals.setChecked(False)) - self._show_win(self._win_signals, "right") + def _open_channels(self): + if self._win_channels is None: + self._win_channels = ChannelsWindow(self.registry, self.processor, self) + self._win_channels.derived_changed.connect(self._on_derived_changed) + self._win_channels.closed.connect(lambda: self._btn_channels.setChecked(False)) + self._show_win(self._win_channels, "right") def _open_plot(self): if self._win_plot is None: @@ -415,8 +415,8 @@ class MainWindow(QMainWindow): # Refresh open windows if self._win_devices: self._win_devices.refresh() - if self._win_signals: - self._win_signals.refresh_derived() + if self._win_channels: + self._win_channels.refresh_derived() if self._win_plot: self._win_plot.refresh_channels() @@ -463,8 +463,8 @@ class MainWindow(QMainWindow): # Refresh open windows if self._win_devices: self._win_devices.refresh() - if self._win_signals: - self._win_signals.refresh_derived() + if self._win_channels: + self._win_channels.refresh_derived() if self._win_plot: self._win_plot.refresh_channels() self._status.setText(f"Profile loaded: {profile.name}") @@ -474,24 +474,35 @@ class MainWindow(QMainWindow): def _on_device_added(self): self._chart.refresh() if self._win_plot: self._win_plot.refresh_channels() + if self._win_channels: self._win_channels.on_device_added() self._status.setText("Device added.") def _on_device_removed(self, dev_id: str): self._chart.refresh() + if self._win_channels: self._win_channels.on_device_removed(dev_id) self._status.setText(f"Device '{dev_id}' removed.") def _on_device_reconfigured(self, dev_id: str): self._chart.refresh() if self._win_plot: self._win_plot.refresh_channels() + if self._win_channels: self._win_channels.on_device_reconfigured(dev_id) self._status.setText(f"Device '{dev_id}' reconfigured.") def _on_channel_visibility_changed(self, dev_id: str, ch_id: str, enabled: bool): self._chart.on_channel_enabled_changed(dev_id, ch_id, enabled) - if self._win_signals: - self._win_signals.on_channel_enabled_changed(dev_id, ch_id, enabled) + if self._win_channels: + self._win_channels.on_channel_enabled_changed(dev_id, ch_id, enabled) if self._win_plot: self._win_plot.refresh_channels() + def _on_channel_name_changed(self, dev_id: str, ch_id: str, name: str): + if self._win_channels: + self._win_channels.on_channel_name_changed(dev_id, ch_id, name) + + def _on_channel_unit_changed(self, dev_id: str, ch_id: str, unit: str): + if self._win_channels: + self._win_channels.on_channel_unit_changed(dev_id, ch_id, unit) + def _on_derived_changed(self): self._chart.refresh() if self._win_plot: self._win_plot.refresh_channels() @@ -544,7 +555,7 @@ class MainWindow(QMainWindow): self._time_lbl.setText(f"{h:02d}:{m:02d}:{s:02d}") def closeEvent(self, event): - for w in (self._win_devices, self._win_signals, + for w in (self._win_devices, self._win_channels, self._win_plot, self._win_settings): if w: w.close() for plugin in list(self._plugin_mgr.get_loaded()): -- cgit v1.2.3