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:
|
for result in self._results:
|
||||||
request = result.request
|
request = result.request
|
||||||
source = replace(snapshot, x_range=request.x_range) if self.preserve_on_view_change else snapshot
|
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:
|
if prepare(source, request.series.key, request.method, request.output_count, request.degree) == request:
|
||||||
retained.append(result)
|
retained.append(result)
|
||||||
if len(retained) != len(self._results):
|
if len(retained) != len(self._results):
|
||||||
@@ -185,6 +189,25 @@ class SignalProcessingPanel(QWidget):
|
|||||||
self.status.setText("Нажмите «Рассчитать», чтобы добавить кривую. Предыдущие результаты сохраняются.")
|
self.status.setText("Нажмите «Рассчитать», чтобы добавить кривую. Предыдущие результаты сохраняются.")
|
||||||
self._update_actions()
|
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):
|
def calculate(self):
|
||||||
if self._job is not None or self._snapshot.blocked_reason:
|
if self._job is not None or self._snapshot.blocked_reason:
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -112,6 +112,16 @@ class ProcessingQtTests(unittest.TestCase):
|
|||||||
self.panel._finished(self.panel._job.signature, None, "test error")
|
self.panel._finished(self.panel._job.signature, None, "test error")
|
||||||
self.assertEqual((previous,), self.panel.curves)
|
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):
|
def test_source_units_and_blocking_invalidate_result(self):
|
||||||
for changed in (replace(self.snapshot, axis=Axis("Frequency", "Hz")),
|
for changed in (replace(self.snapshot, axis=Axis("Frequency", "Hz")),
|
||||||
replace(self.snapshot, source="new file"),
|
replace(self.snapshot, source="new file"),
|
||||||
|
|||||||
Reference in New Issue
Block a user