Keep interpolation results when sources are hidden and allow individual removal
This commit is contained in:
@@ -145,6 +145,10 @@ class SignalProcessingPanel(QWidget):
|
||||
for result in self._results:
|
||||
request = result.request
|
||||
source = replace(snapshot, x_range=request.x_range) if self.preserve_on_view_change else snapshot
|
||||
# Visibility selects inputs for NEW calculations; existing results
|
||||
# depend on samples/units, not the source curve's checkbox.
|
||||
source = replace(source, series=tuple(replace(series, visible=True)
|
||||
for series in source.series))
|
||||
if prepare(source, request.series.key, request.method, request.output_count, request.degree) == request:
|
||||
retained.append(result)
|
||||
if len(retained) != len(self._results):
|
||||
@@ -185,6 +189,25 @@ class SignalProcessingPanel(QWidget):
|
||||
self.status.setText("Нажмите «Рассчитать», чтобы добавить кривую. Предыдущие результаты сохраняются.")
|
||||
self._update_actions()
|
||||
|
||||
def remove_curve(self, key):
|
||||
for curve in self._results:
|
||||
index = self._result_ids[id(curve)]
|
||||
curve_key = self.RESULT_KEY if index == 0 else f"{self.RESULT_KEY}_{index}"
|
||||
if curve_key != key:
|
||||
continue
|
||||
if self._job is not None and self._job.signature == curve.request:
|
||||
self._revision += 1
|
||||
self._results.remove(curve)
|
||||
del self._result_ids[id(curve)]
|
||||
if self._result is curve:
|
||||
self._result = self._results[-1] if self._results else None
|
||||
self._result_signature = self._result.request if self._result is not None else None
|
||||
self.status.setText(f"Расчётная кривая удалена. Осталось: {len(self._results)}.")
|
||||
self._update_actions()
|
||||
self.changed.emit()
|
||||
return True
|
||||
return False
|
||||
|
||||
def calculate(self):
|
||||
if self._job is not None or self._snapshot.blocked_reason:
|
||||
return
|
||||
|
||||
@@ -112,6 +112,16 @@ class ProcessingQtTests(unittest.TestCase):
|
||||
self.panel._finished(self.panel._job.signature, None, "test error")
|
||||
self.assertEqual((previous,), self.panel.curves)
|
||||
|
||||
def test_hidden_source_preserves_result_but_changed_samples_invalidate_it(self):
|
||||
self.calculate()
|
||||
curve = self.panel.curve
|
||||
hidden = replace(self.snapshot, series=(replace(self.snapshot.series[0], visible=False),))
|
||||
self.panel.set_snapshot(hidden)
|
||||
self.assertEqual((curve,), self.panel.curves)
|
||||
self.assertTrue(self.panel.export_button.isEnabled())
|
||||
self.panel.set_snapshot(replace(hidden, series=(replace(hidden.series[0], points=((0, 2), (1, 3))),)))
|
||||
self.assertEqual((), self.panel.curves)
|
||||
|
||||
def test_source_units_and_blocking_invalidate_result(self):
|
||||
for changed in (replace(self.snapshot, axis=Axis("Frequency", "Hz")),
|
||||
replace(self.snapshot, source="new file"),
|
||||
|
||||
Reference in New Issue
Block a user