diff options
Diffstat (limited to 'ui/windows/channels_window.py')
| -rw-r--r-- | ui/windows/channels_window.py | 88 |
1 files changed, 42 insertions, 46 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) |
