From 8bccd980af91552faca3ecd228ea7dd6ccd3dc4e Mon Sep 17 00:00:00 2001 From: rjbourne <57537928+rjbourne@users.noreply.github.com> Date: Tue, 10 Aug 2021 16:09:58 +0100 Subject: [PATCH 1/2] allows the user to cancel the calculation in the generic scattering calculator --- .../GenericScatteringCalculator.py | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/sas/qtgui/Calculators/GenericScatteringCalculator.py b/src/sas/qtgui/Calculators/GenericScatteringCalculator.py index a43bb5743d..4a0f173a15 100644 --- a/src/sas/qtgui/Calculators/GenericScatteringCalculator.py +++ b/src/sas/qtgui/Calculators/GenericScatteringCalculator.py @@ -609,8 +609,11 @@ def onCompute(self): self._create_default_2d_data() inputs = [self.data.qx_data, self.data.qy_data] logging.info("Computation is in progress...") - self.cmdCompute.setText('Wait...') - self.cmdCompute.setEnabled(False) + self.cmdCompute.setText('Cancel') + self.cmdCompute.clicked.disconnect() + self.cmdCompute.clicked.connect(self.onCancel) + self.cancelCalculation = False + #self.cmdCompute.setEnabled(False) d = threads.deferToThread(self.complete, inputs, self._update) # Add deferred callback for call return #d.addCallback(self.plot_1_2d) @@ -620,6 +623,12 @@ def onCompute(self): log_msg = "{}. stop".format(sys.exc_info()[1]) logging.info(log_msg) return + + def onCancel(self): + """Notify the calculation thread that the user has cancelled the calculation. + """ + self.cancelCalculation = True + self.cmdCompute.setEnabled(False) # don't allow user to start a new calculation until this one finishes cancelling def _update(self, time=None, percentage=None): """ @@ -668,10 +677,22 @@ def complete(self, input, update=None): input[1][ind:ind + chunk_size]] outi = self.model.runXY(inputi) out.append(outi) + if self.cancelCalculation: + update(time=t, percentage=100*(ind + chunk_size)/nq) # ensure final progress shown + self.data_to_plot = numpy.full(nq, numpy.nan) + self.data_to_plot[:ind + chunk_size] = numpy.hstack(out) + logging.info('Gen computation cancelled.') + self.cmdCompute.setText('Compute') + self.cmdCompute.clicked.disconnect() + self.cmdCompute.clicked.connect(self.onCompute) + self.cmdCompute.setEnabled(True) + return out = numpy.hstack(out) self.data_to_plot = out logging.info('Gen computation completed.') self.cmdCompute.setText('Compute') + self.cmdCompute.clicked.disconnect() + self.cmdCompute.clicked.connect(self.onCompute) self.cmdCompute.setEnabled(True) return From 182399b6ffb9027fcf33bd2b2d0bee40887f6f58 Mon Sep 17 00:00:00 2001 From: rjbourne <57537928+rjbourne@users.noreply.github.com> Date: Wed, 11 Aug 2021 08:32:44 +0100 Subject: [PATCH 2/2] added separate tooltip for cancel button --- .../Calculators/GenericScatteringCalculator.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/sas/qtgui/Calculators/GenericScatteringCalculator.py b/src/sas/qtgui/Calculators/GenericScatteringCalculator.py index 4a0f173a15..3441124e8c 100644 --- a/src/sas/qtgui/Calculators/GenericScatteringCalculator.py +++ b/src/sas/qtgui/Calculators/GenericScatteringCalculator.py @@ -610,6 +610,7 @@ def onCompute(self): inputs = [self.data.qx_data, self.data.qy_data] logging.info("Computation is in progress...") self.cmdCompute.setText('Cancel') + self.cmdCompute.setToolTip("

Cancel the computation of the scattering calculation.

") self.cmdCompute.clicked.disconnect() self.cmdCompute.clicked.connect(self.onCancel) self.cancelCalculation = False @@ -682,15 +683,13 @@ def complete(self, input, update=None): self.data_to_plot = numpy.full(nq, numpy.nan) self.data_to_plot[:ind + chunk_size] = numpy.hstack(out) logging.info('Gen computation cancelled.') - self.cmdCompute.setText('Compute') - self.cmdCompute.clicked.disconnect() - self.cmdCompute.clicked.connect(self.onCompute) - self.cmdCompute.setEnabled(True) - return - out = numpy.hstack(out) - self.data_to_plot = out - logging.info('Gen computation completed.') + break + else: + out = numpy.hstack(out) + self.data_to_plot = out + logging.info('Gen computation completed.') self.cmdCompute.setText('Compute') + self.cmdCompute.setToolTip("

Compute the scattering pattern and display 1D or 2D plot depending on the settings.

") self.cmdCompute.clicked.disconnect() self.cmdCompute.clicked.connect(self.onCompute) self.cmdCompute.setEnabled(True)