summaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/windows/channels_window.py88
-rw-r--r--ui/windows/devices_window.py2
2 files changed, 43 insertions, 47 deletions
diff --git a/ui/windows/channels_window.py b/ui/windows/channels_window.py
index 4f0860d..f0ea34e 100644
--- a/ui/windows/channels_window.py
+++ b/ui/windows/channels_window.py
@@ -43,7 +43,7 @@ _DERIVED_COLORS = [
"#f77f00","#d62828","#588157","#e9c46a",
]
-_FILTER_KEYS = [k for k in FILTER_CLASSES if k not in ("derivative", "integral")]
+_FILTER_KEYS = [k for k in FILTER_CLASSES if k not in ("derivative", "integral", "scale_offset")]
_MATH_KEYS = ["derivative", "integral"]
@@ -203,7 +203,7 @@ class ChannelPipelineBlock(QFrame):
self.ch_id = ch_id
self.processor = processor
self._filter_rows: List[FilterRow] = []
- self._math_rows: List[FilterRow] = []
+ self._cal_rows: List[FilterRow] = []
self._cur_pipeline: Optional[ChannelPipeline] = None
self._expanded = False
self.setObjectName("plotBlock")
@@ -224,11 +224,6 @@ class ChannelPipelineBlock(QFrame):
self._title_lbl = QLabel(title); self._title_lbl.setObjectName("traceSource")
hl.addWidget(self._title_lbl, 1)
- cal_btn = QPushButton("⚖ Calibrate"); cal_btn.setObjectName("toolbarSectionBtn")
- cal_btn.setFixedHeight(22)
- cal_btn.clicked.connect(self._add_calibrate)
- hl.addWidget(cal_btn)
-
rm_btn = QToolButton(); rm_btn.setText("✕")
rm_btn.setObjectName("traceRemoveBtn"); rm_btn.setFixedSize(22, 22)
rm_btn.clicked.connect(lambda: self.removed.emit(self))
@@ -268,24 +263,21 @@ class ChannelPipelineBlock(QFrame):
div.setObjectName("devWindowDivider")
bl.addWidget(div)
- # ── Math section ──────────────────────────────────────────────────────
- math_lbl = QLabel("Math"); math_lbl.setObjectName("pwmLabel")
- bl.addWidget(math_lbl)
-
- self._math_area = QWidget()
- self._math_lay = QVBoxLayout(self._math_area)
- self._math_lay.setContentsMargins(0, 0, 0, 0); self._math_lay.setSpacing(3)
- bl.addWidget(self._math_area)
-
- math_add_bar = QHBoxLayout()
- deriv_btn = QPushButton("+ Derivative"); deriv_btn.setObjectName("addTraceBtn")
- deriv_btn.clicked.connect(lambda: self._add_math("derivative"))
- integ_btn = QPushButton("+ Integral"); integ_btn.setObjectName("addTraceBtn")
- integ_btn.clicked.connect(lambda: self._add_math("integral"))
- math_add_bar.addWidget(deriv_btn)
- math_add_bar.addWidget(integ_btn)
- math_add_bar.addStretch()
- bl.addLayout(math_add_bar)
+ # ── Calibration section ───────────────────────────────────────────────
+ cal_lbl = QLabel("Calibration"); cal_lbl.setObjectName("pwmLabel")
+ bl.addWidget(cal_lbl)
+
+ self._cal_area = QWidget()
+ self._cal_lay = QVBoxLayout(self._cal_area)
+ self._cal_lay.setContentsMargins(0, 0, 0, 0); self._cal_lay.setSpacing(3)
+ bl.addWidget(self._cal_area)
+
+ cal_add_bar = QHBoxLayout()
+ cal_add_btn = QPushButton("+ Add Calibration"); cal_add_btn.setObjectName("addTraceBtn")
+ cal_add_btn.clicked.connect(self._add_calibrate)
+ cal_add_bar.addWidget(cal_add_btn)
+ cal_add_bar.addStretch()
+ bl.addLayout(cal_add_bar)
ap_row = QHBoxLayout(); ap_row.addStretch()
ap_btn = QPushButton("✓ Apply"); ap_btn.setObjectName("applyButton")
@@ -323,14 +315,14 @@ class ChannelPipelineBlock(QFrame):
self._cur_pipeline = pipeline
pipeline.enabled = True
for f in pipeline.filters:
- if f.name in _MATH_KEYS:
- self._add_math_row(f)
- else:
+ if f.name == "scale_offset":
+ self._add_cal_row(f)
+ elif f.name not in _MATH_KEYS:
self._add_filter_row(f)
def _add_calibrate(self):
filt = FILTER_CLASSES["scale_offset"]()
- self._add_filter_row(filt)
+ self._add_cal_row(filt)
self._push()
if not self._expanded:
self._toggle()
@@ -341,11 +333,6 @@ class ChannelPipelineBlock(QFrame):
self._add_filter_row(filt)
self._push()
- def _add_math(self, key: str):
- filt = FILTER_CLASSES[key]()
- self._add_math_row(filt)
- self._push()
-
def _add_filter_row(self, filt: FilterBase):
row = FilterRow(filt)
row.removed.connect(self._remove_row)
@@ -353,20 +340,20 @@ class ChannelPipelineBlock(QFrame):
self._filter_rows.append(row)
self._filter_lay.addWidget(row)
- def _add_math_row(self, filt: FilterBase):
+ def _add_cal_row(self, filt: FilterBase):
row = FilterRow(filt)
row.removed.connect(self._remove_row)
row.changed.connect(self._push)
- self._math_rows.append(row)
- self._math_lay.addWidget(row)
+ self._cal_rows.append(row)
+ self._cal_lay.addWidget(row)
def _remove_row(self, row: FilterRow):
if row in self._filter_rows:
self._filter_rows.remove(row)
self._filter_lay.removeWidget(row)
- else:
- self._math_rows.remove(row)
- self._math_lay.removeWidget(row)
+ elif row in self._cal_rows:
+ self._cal_rows.remove(row)
+ self._cal_lay.removeWidget(row)
row.deleteLater()
self._push()
@@ -374,7 +361,7 @@ class ChannelPipelineBlock(QFrame):
if self._cur_pipeline:
self._cur_pipeline.filters = (
[r.filt for r in self._filter_rows] +
- [r.filt for r in self._math_rows]
+ [r.filt for r in self._cal_rows]
)
self.processor.set_pipeline(self._cur_pipeline)
self.changed.emit()
@@ -411,7 +398,7 @@ class PipelineTab(QWidget):
phys_bar = QWidget(); phys_bar.setObjectName("cfgGlobalBar")
pb_lay = QHBoxLayout(phys_bar); pb_lay.setContentsMargins(10, 7, 10, 7); pb_lay.setSpacing(6)
- pb_lbl = QLabel("Physical Channels"); pb_lbl.setObjectName("devWindowTitle")
+ pb_lbl = QLabel("Signals"); pb_lbl.setObjectName("devWindowTitle")
pb_lay.addWidget(pb_lbl, 1)
add_btn = QPushButton("+ Add"); add_btn.setObjectName("addTraceBtn")
add_btn.clicked.connect(self._on_add_channel)
@@ -438,9 +425,9 @@ class PipelineTab(QWidget):
virt_bar = QWidget(); virt_bar.setObjectName("cfgGlobalBar")
vb_lay = QHBoxLayout(virt_bar); vb_lay.setContentsMargins(10, 7, 10, 7); vb_lay.setSpacing(6)
- vb_lbl = QLabel("Virtual Channels"); vb_lbl.setObjectName("devWindowTitle")
+ vb_lbl = QLabel("Channels"); vb_lbl.setObjectName("devWindowTitle")
vb_lay.addWidget(vb_lbl, 1)
- add_virt = QPushButton("+ Add Virtual"); add_virt.setObjectName("addTraceBtn")
+ add_virt = QPushButton("+ Add Channel"); add_virt.setObjectName("addTraceBtn")
add_virt.clicked.connect(self._add_virtual)
vb_lay.addWidget(add_virt)
virt_l.addWidget(virt_bar)
@@ -459,7 +446,16 @@ class PipelineTab(QWidget):
virt_l.addWidget(virt_scroll, 1)
splitter.addWidget(virt_w)
- splitter.setSizes([500, 500])
+ splitter.setStretchFactor(0, 0)
+ splitter.setStretchFactor(1, 1)
+
+ def _init_split():
+ min_w = splitter.widget(0).minimumSizeHint().width()
+ w = max(min_w, 280)
+ splitter.setSizes([w, max(1, splitter.width() - w)])
+
+ from PyQt6.QtCore import QTimer
+ QTimer.singleShot(0, _init_split)
for dev in self.registry.all_instances():
for ch in dev.info.channels:
@@ -561,7 +557,7 @@ class PipelineTab(QWidget):
color = _DERIVED_COLORS[self._color_idx % len(_DERIVED_COLORS)]
self._color_idx += 1
n = len(self._derived_blocks) + 1
- dc = DerivedChannel(channel_id=f"CH_V{n}", name=f"Virtual Channel {n}",
+ dc = DerivedChannel(channel_id=f"CH_{n}", name=f"Channel {n}",
kind="expression", color=color)
blk = self._make_derived_block(dc)
self._virt_inner.insertWidget(self._virt_inner.count() - 1, blk)
diff --git a/ui/windows/devices_window.py b/ui/windows/devices_window.py
index 5919938..ac9d13c 100644
--- a/ui/windows/devices_window.py
+++ b/ui/windows/devices_window.py
@@ -144,7 +144,7 @@ class ChannelsTab(QWidget):
self._table.setObjectName("channelTable")
self._table.setColumnCount(7)
self._table.setHorizontalHeaderLabels(
- ["Device", "Channel ID", "On", "Name", "Unit", "Min", "Max"]
+ ["Device", "Signal ID", "On", "Name", "Unit", "Min", "Max"]
)
hdr = self._table.horizontalHeader()
hdr.setSectionResizeMode(self._C_NAME, QHeaderView.ResizeMode.Stretch)