Skip to content

Commit f4ec9e2

Browse files
committed
[processing] When an optional output is set to 'skip output', disable
and clear the associated 'add to qgis' checkbox
1 parent cb638b6 commit f4ec9e2

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

python/plugins/processing/gui/DestinationSelectionPanel.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import os
3030

3131
from qgis.PyQt import uic
32-
from qgis.PyQt.QtCore import QCoreApplication, QDir
32+
from qgis.PyQt.QtCore import QCoreApplication, QDir, pyqtSignal
3333
from qgis.PyQt.QtWidgets import QDialog, QMenu, QAction, QFileDialog, QInputDialog
3434
from qgis.PyQt.QtGui import QCursor
3535
from qgis.gui import QgsEncodingSelectionDialog
@@ -62,6 +62,8 @@ class DestinationSelectionPanel(BASE, WIDGET):
6262
SKIP_OUTPUT = QCoreApplication.translate(
6363
'DestinationSelectionPanel', '[Skip output]')
6464

65+
skipOutputChanged = pyqtSignal(bool)
66+
6567
def __init__(self, parameter, alg):
6668
super(DestinationSelectionPanel, self).__init__(None)
6769
self.setupUi(self)
@@ -89,10 +91,17 @@ def __init__(self, parameter, alg):
8991
def textChanged(self):
9092
self.use_temporary = False
9193

94+
def outputIsSkipped(self):
95+
"""
96+
Returns true if output is set to be skipped
97+
signal """
98+
return not self.leText.text() and not self.use_temporary
99+
92100
def skipOutput(self):
93101
self.leText.setPlaceholderText(self.SKIP_OUTPUT)
94102
self.leText.setText('')
95103
self.use_temporary = False
104+
self.skipOutputChanged.emit(True)
96105

97106
def selectOutput(self):
98107
if isinstance(self.parameter, QgsProcessingParameterFolderDestination):
@@ -152,6 +161,7 @@ def saveToTemporary(self):
152161
self.leText.setPlaceholderText(self.SAVE_TO_TEMP_FILE)
153162
self.leText.setText('')
154163
self.use_temporary = True
164+
self.skipOutputChanged.emit(False)
155165

156166
def saveToPostGIS(self):
157167
dlg = PostgisTableSelector(self, self.parameter.name().lower())
@@ -176,6 +186,8 @@ def saveToPostGIS(self):
176186
QgsCredentials.instance().put(connInfo, user, passwd)
177187
self.leText.setText("postgis:" + uri.uri())
178188

189+
self.skipOutputChanged.emit(False)
190+
179191
def saveToGeopackage(self):
180192
file_filter = self.tr('GeoPackage files (*.gpkg);;All files (*.*)', 'OutputFile')
181193

@@ -205,6 +217,8 @@ def saveToGeopackage(self):
205217
'geom' if isinstance(self.parameter, QgsProcessingParameterFeatureSink) and self.parameter.hasGeometry() else None)
206218
self.leText.setText("ogr:" + uri.uri())
207219

220+
self.skipOutputChanged.emit(False)
221+
208222
def selectFile(self):
209223
file_filter = getFileFilter(self.parameter)
210224
settings = QgsSettings()
@@ -245,6 +259,8 @@ def selectFile(self):
245259
if not last_ext_path is None:
246260
settings.setValue(last_ext_path, os.path.splitext(filename)[1].lower())
247261

262+
self.skipOutputChanged.emit(False)
263+
248264
def selectEncoding(self):
249265
dialog = QgsEncodingSelectionDialog(
250266
self, self.tr('File encoding'), self.encoding)
@@ -266,12 +282,15 @@ def selectDirectory(self):
266282
self.leText.setText(QDir.toNativeSeparators(dirName))
267283
settings.setValue('/Processing/LastOutputPath', dirName)
268284

285+
self.skipOutputChanged.emit(False)
286+
269287
def setValue(self, value):
270288
if value == 'memory:':
271289
self.saveToTemporary()
272290
else:
273291
self.leText.setText(value)
274292
self.use_temporary = False
293+
self.skipOutputChanged.emit(False)
275294

276295
def getValue(self):
277296
key = None

python/plugins/processing/gui/ParametersPanel.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
__revision__ = '$Format:%H$'
3131

3232
import os
33+
from functools import partial
3334

3435
from qgis.core import (QgsProcessingParameterDefinition,
3536
QgsProcessingParameterExtent,
@@ -164,7 +165,14 @@ def initWidgets(self):
164165
if isinstance(output, (QgsProcessingParameterRasterDestination, QgsProcessingParameterFeatureSink, QgsProcessingParameterVectorDestination)):
165166
check = QCheckBox()
166167
check.setText(self.tr('Open output file after running algorithm'))
167-
check.setChecked(True)
168+
169+
def skipOutputChanged(checkbox, skipped):
170+
checkbox.setEnabled(not skipped)
171+
if skipped:
172+
checkbox.setChecked(False)
173+
check.setChecked(not widget.outputIsSkipped())
174+
check.setEnabled(not widget.outputIsSkipped())
175+
widget.skipOutputChanged.connect(partial(skipOutputChanged, check))
168176
self.layoutMain.insertWidget(self.layoutMain.count() - 1, check)
169177
self.checkBoxes[output.name()] = check
170178

0 commit comments

Comments
 (0)