summaryrefslogtreecommitdiff
path: root/ui/main_window.py
diff options
context:
space:
mode:
authorChristian Kolset <christian.kolset@gmail.com>2026-06-03 11:38:49 -0600
committerChristian Kolset <christian.kolset@gmail.com>2026-06-03 11:38:49 -0600
commit23c669b3c6fb3bc805887cef00d6c37756e5c41e (patch)
treed563ab55c83dd59083fe748347a5e4010b7fa416 /ui/main_window.py
parent3610309b1e5d83049554afe287129c99389d231d (diff)
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 <noreply@anthropic.com>
Diffstat (limited to 'ui/main_window.py')
-rw-r--r--ui/main_window.py55
1 files changed, 33 insertions, 22 deletions
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()):