Skip to content

Commit f6e63d7

Browse files
committedDec 1, 2017
Fixes and cleanups to algorithm dialogs
1 parent ce17091 commit f6e63d7

12 files changed

+90
-314
lines changed
 

‎python/gui/processing/qgsprocessingalgorithmdialogbase.sip

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,12 @@ class QgsProcessingAlgorithmDialogBase : QDialog
146146
:rtype: QDialogButtonBox
147147
%End
148148

149+
QTabWidget *tabWidget();
150+
%Docstring
151+
Returns the dialog's tab widget.
152+
:rtype: QTabWidget
153+
%End
154+
149155
void clearProgress();
150156
%Docstring
151157
Clears any current progress from the dialog.
@@ -172,6 +178,11 @@ class QgsProcessingAlgorithmDialogBase : QDialog
172178
:rtype: QgsMessageBar
173179
%End
174180

181+
void hideShortHelp();
182+
%Docstring
183+
Hides the short help panel.
184+
%End
185+
175186
protected slots:
176187

177188
virtual void finished( bool successful, const QVariantMap &result, QgsProcessingContext &context, QgsProcessingFeedback *feedback );

‎python/plugins/processing/algs/gdal/GdalAlgorithmDialog.py

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
4040
from qgis.core import (QgsProcessingFeedback,
4141
QgsProcessingParameterDefinition)
4242
from qgis.gui import (QgsMessageBar,
43-
QgsProjectionSelectionWidget)
43+
QgsProjectionSelectionWidget,
44+
QgsProcessingAlgorithmDialogBase)
4445

4546
from processing.gui.AlgorithmDialog import AlgorithmDialog
4647
from processing.gui.AlgorithmDialogBase import AlgorithmDialogBase
@@ -53,22 +54,11 @@
5354
class GdalAlgorithmDialog(AlgorithmDialog):
5455

5556
def __init__(self, alg):
56-
AlgorithmDialogBase.__init__(self, alg)
57+
super().__init__(alg)
58+
self.mainWidget().parametersHaveChanged()
5759

58-
self.alg = alg
59-
60-
self.bar = QgsMessageBar()
61-
self.bar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
62-
self.layout().insertWidget(0, self.bar)
63-
64-
self.setMainWidget(GdalParametersPanel(self, alg))
65-
66-
self.runAsBatchButton = QPushButton(QCoreApplication.translate("AlgorithmDialog", "Run as Batch Process…"))
67-
self.runAsBatchButton.clicked.connect(self.runAsBatch)
68-
self.buttonBox.addButton(self.runAsBatchButton,
69-
QDialogButtonBox.ResetRole) # reset role to ensure left alignment
70-
71-
self.mainWidget.parametersHaveChanged()
60+
def getParametersPanel(self, alg, parent):
61+
return GdalParametersPanel(parent, alg)
7262

7363

7464
class GdalParametersPanel(ParametersPanel):
@@ -117,7 +107,7 @@ def parametersHaveChanged(self):
117107
context = createContext()
118108
feedback = QgsProcessingFeedback()
119109
try:
120-
parameters = self.parent.getParamValues()
110+
parameters = self.parent.getParameterValues()
121111
for output in self.alg.destinationParameterDefinitions():
122112
if not output.name() in parameters or parameters[output.name()] is None:
123113
parameters[output.name()] = self.tr("[temporary file]")

‎python/plugins/processing/gui/AlgorithmDialog.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def runAsBatch(self):
8080
dlg.show()
8181
dlg.exec_()
8282

83-
def getParamValues(self):
83+
def getParameterValues(self):
8484
parameters = {}
8585

8686
if self.mainWidget() is None:
@@ -152,7 +152,7 @@ def accept(self):
152152

153153
checkCRS = ProcessingConfig.getSetting(ProcessingConfig.WARN_UNMATCHING_CRS)
154154
try:
155-
parameters = self.getParamValues()
155+
parameters = self.getParameterValues()
156156

157157
if checkCRS and not self.algorithm().validateInputCrs(parameters, context):
158158
reply = QMessageBox.question(self, self.tr("Unmatching CRS's"),

‎python/plugins/processing/gui/AlgorithmDialogBase.py

Lines changed: 1 addition & 245 deletions
Original file line numberDiff line numberDiff line change
@@ -25,252 +25,8 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
import os
29-
import webbrowser
30-
import html
3128

32-
from qgis.PyQt import uic
33-
from qgis.PyQt.QtCore import pyqtSignal, Qt, QCoreApplication, QByteArray, QUrl
34-
from qgis.PyQt.QtWidgets import QApplication, QDialogButtonBox, QVBoxLayout, QToolButton
35-
36-
from qgis.utils import iface
37-
from qgis.core import (QgsProject,
38-
QgsProcessingFeedback,
39-
QgsSettings)
40-
from qgis.gui import QgsHelp
41-
42-
from processing.core.ProcessingConfig import ProcessingConfig
43-
44-
pluginPath = os.path.split(os.path.dirname(__file__))[0]
45-
WIDGET, BASE = uic.loadUiType(
46-
os.path.join(pluginPath, 'ui', 'DlgAlgorithmBase.ui'))
47-
48-
49-
class AlgorithmDialogFeedback(QgsProcessingFeedback):
50-
51-
"""
52-
Directs algorithm feedback to an algorithm dialog
53-
"""
54-
55-
error = pyqtSignal(str)
56-
progress_text = pyqtSignal(str)
57-
info = pyqtSignal(str)
58-
command_info = pyqtSignal(str)
59-
debug_info = pyqtSignal(str)
60-
console_info = pyqtSignal(str)
61-
62-
def __init__(self, dialog):
63-
QgsProcessingFeedback.__init__(self)
64-
self.dialog = dialog
65-
66-
def reportError(self, msg):
67-
self.error.emit(msg)
68-
69-
def setProgressText(self, text):
70-
self.progress_text.emit(text)
71-
72-
def pushInfo(self, msg):
73-
self.info.emit(msg)
74-
75-
def pushCommandInfo(self, msg):
76-
self.command_info.emit(msg)
77-
78-
def pushDebugInfo(self, msg):
79-
self.debug_info.emit(msg)
80-
81-
def pushConsoleInfo(self, msg):
82-
self.console_info.emit(msg)
83-
84-
85-
class AlgorithmDialogBase(BASE, WIDGET):
86-
87-
def __init__(self, alg):
88-
super(AlgorithmDialogBase, self).__init__(iface.mainWindow() if iface else None)
89-
self.setupUi(self)
90-
91-
# don't collapse parameters panel
92-
self.splitter.setCollapsible(0, False)
93-
94-
# add collapse button to splitter
95-
splitterHandle = self.splitter.handle(1)
96-
handleLayout = QVBoxLayout()
97-
handleLayout.setContentsMargins(0, 0, 0, 0)
98-
self.btnCollapse = QToolButton(splitterHandle)
99-
self.btnCollapse.setAutoRaise(True)
100-
self.btnCollapse.setFixedSize(12, 12)
101-
self.btnCollapse.setCursor(Qt.ArrowCursor)
102-
handleLayout.addWidget(self.btnCollapse)
103-
handleLayout.addStretch()
104-
splitterHandle.setLayout(handleLayout)
105-
106-
self.settings = QgsSettings()
107-
self.splitter.restoreState(self.settings.value("/Processing/dialogBaseSplitter", QByteArray()))
108-
self.restoreGeometry(self.settings.value("/Processing/dialogBase", QByteArray()))
109-
self.splitterState = self.splitter.saveState()
110-
self.splitterChanged(0, 0)
111-
112-
self.executed = False
113-
self.mainWidget = None
114-
self.alg = alg
115-
116-
self.setWindowTitle(self.alg.displayName())
117-
118-
self.buttonBox.rejected.connect(self.reject)
119-
self.buttonBox.accepted.connect(self.accept)
120-
121-
# Rename OK button to Run
122-
self.btnRun = self.buttonBox.button(QDialogButtonBox.Ok)
123-
self.btnRun.setText(self.tr('Run'))
124-
125-
self.buttonCancel.setEnabled(False)
126-
127-
self.btnClose = self.buttonBox.button(QDialogButtonBox.Close)
128-
129-
self.buttonBox.helpRequested.connect(self.openHelp)
130-
131-
self.btnCollapse.clicked.connect(self.toggleCollapsed)
132-
self.splitter.splitterMoved.connect(self.splitterChanged)
133-
134-
# desktop = QDesktopWidget()
135-
# if desktop.physicalDpiX() > 96:
136-
# self.txtHelp.setZoomFactor(desktop.physicalDpiX() / 96)
137-
138-
algHelp = self.formatHelp(self.alg)
139-
if algHelp is None:
140-
self.textShortHelp.hide()
141-
else:
142-
self.textShortHelp.document().setDefaultStyleSheet('''.summary { margin-left: 10px; margin-right: 10px; }
143-
h2 { color: #555555; padding-bottom: 15px; }
144-
a { text-decoration: none; color: #3498db; font-weight: bold; }
145-
p { color: #666666; }
146-
b { color: #333333; }
147-
dl dd { margin-bottom: 5px; }''')
148-
self.textShortHelp.setHtml(algHelp)
149-
150-
def linkClicked(url):
151-
webbrowser.open(url.toString())
152-
153-
self.textShortHelp.anchorClicked.connect(linkClicked)
154-
155-
self.showDebug = ProcessingConfig.getSetting(
156-
ProcessingConfig.SHOW_DEBUG_IN_DIALOG)
157-
158-
def createFeedback(self):
159-
feedback = AlgorithmDialogFeedback(self)
160-
feedback.progressChanged.connect(self.setPercentage)
161-
feedback.error.connect(self.error)
162-
feedback.progress_text.connect(self.setText)
163-
feedback.info.connect(self.setInfo)
164-
feedback.command_info.connect(self.setCommand)
165-
feedback.debug_info.connect(self.setDebugInfo)
166-
feedback.console_info.connect(self.setConsoleInfo)
167-
168-
self.buttonCancel.clicked.connect(feedback.cancel)
169-
return feedback
170-
171-
def formatHelp(self, alg):
172-
text = alg.shortHelpString()
173-
if not text:
174-
return None
175-
return "<h2>%s</h2>%s" % (alg.displayName(), "".join(["<p>%s</p>" % s for s in text.split("\n")]))
176-
177-
def closeEvent(self, event):
178-
self._saveGeometry()
179-
super(AlgorithmDialogBase, self).closeEvent(event)
180-
181-
def setMainWidget(self, widget):
182-
if self.mainWidget is not None:
183-
QgsProject.instance().layerWasAdded.disconnect(self.mainWidget.layerRegistryChanged)
184-
QgsProject.instance().layersWillBeRemoved.disconnect(self.mainWidget.layerRegistryChanged)
185-
self.mainWidget = widget
186-
self.tabWidget.widget(0).layout().addWidget(self.mainWidget)
187-
QgsProject.instance().layerWasAdded.connect(self.mainWidget.layerRegistryChanged)
188-
QgsProject.instance().layersWillBeRemoved.connect(self.mainWidget.layerRegistryChanged)
189-
190-
def error(self, msg):
191-
self.setInfo(msg, True)
192-
self.resetGUI()
193-
self.tabWidget.setCurrentIndex(1)
194-
195-
def resetGUI(self):
196-
self.lblProgress.setText('')
197-
self.progressBar.setMaximum(100)
198-
self.progressBar.setValue(0)
199-
self.btnRun.setEnabled(True)
200-
self.btnClose.setEnabled(True)
201-
202-
def setInfo(self, msg, error=False, escape_html=True):
203-
if error:
204-
self.txtLog.append('<span style="color:red">{}</span><br />'.format(msg, quote=False))
205-
elif escape_html:
206-
self.txtLog.append(html.escape(msg))
207-
else:
208-
self.txtLog.append(msg)
209-
210-
def setCommand(self, cmd):
211-
if self.showDebug:
212-
self.txtLog.append('<code>{}<code>'.format(html.escape(cmd, quote=False)))
213-
214-
def setDebugInfo(self, msg):
215-
if self.showDebug:
216-
self.txtLog.append('<span style="color:blue">{}</span>'.format(html.escape(msg, quote=False)))
217-
218-
def setConsoleInfo(self, msg):
219-
if self.showDebug:
220-
self.txtLog.append('<code><span style="color:darkgray">{}</span></code>'.format(html.escape(msg, quote=False)))
221-
222-
def setPercentage(self, value):
223-
if self.progressBar.maximum() == 0:
224-
self.progressBar.setMaximum(100)
225-
self.progressBar.setValue(value)
226-
227-
def setText(self, text):
228-
self.lblProgress.setText(text)
229-
self.setInfo(text, False)
230-
231-
def getParamValues(self):
232-
return {}
233-
234-
def accept(self):
235-
pass
236-
237-
def reject(self):
238-
self._saveGeometry()
239-
super(AlgorithmDialogBase, self).reject()
240-
241-
def finish(self, successful, result, context, feedback):
242-
pass
243-
244-
def toggleCollapsed(self):
245-
if self.helpCollapsed:
246-
self.splitter.restoreState(self.splitterState)
247-
self.btnCollapse.setArrowType(Qt.RightArrow)
248-
else:
249-
self.splitterState = self.splitter.saveState()
250-
self.splitter.setSizes([1, 0])
251-
self.btnCollapse.setArrowType(Qt.LeftArrow)
252-
self.helpCollapsed = not self.helpCollapsed
253-
254-
def splitterChanged(self, pos, index):
255-
if self.splitter.sizes()[1] == 0:
256-
self.helpCollapsed = True
257-
self.btnCollapse.setArrowType(Qt.LeftArrow)
258-
else:
259-
self.helpCollapsed = False
260-
self.btnCollapse.setArrowType(Qt.RightArrow)
261-
262-
def openHelp(self):
263-
algHelp = self.alg.helpUrl()
264-
if not algHelp:
265-
algHelp = QgsHelp.helpUrl("processing_algs/{}/{}".format(
266-
self.alg.provider().id(), self.alg.id())).toString()
267-
268-
if algHelp not in [None, ""]:
269-
webbrowser.open(algHelp)
270-
271-
def _saveGeometry(self):
272-
self.settings.setValue("/Processing/dialogBaseSplitter", self.splitter.saveState())
273-
self.settings.setValue("/Processing/dialogBase", self.saveGeometry())
29+
class AlgorithmDialogBase:
27430

27531
class InvalidParameterValue(Exception):
27632

‎python/plugins/processing/gui/BatchAlgorithmDialog.py

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -61,30 +61,30 @@
6161
class BatchAlgorithmDialog(QgsProcessingAlgorithmDialogBase):
6262

6363
def __init__(self, alg):
64-
AlgorithmDialogBase.__init__(self, alg)
64+
super().__init__()
6565

66-
self.alg = alg
66+
self.setAlgorithm(alg)
6767

68-
self.setWindowTitle(self.tr('Batch Processing - {0}').format(self.alg.displayName()))
69-
self.setMainWidget(BatchPanel(self, self.alg))
70-
self.textShortHelp.setVisible(False)
68+
self.setWindowTitle(self.tr('Batch Processing - {0}').format(self.algorithm().displayName()))
69+
self.setMainWidget(BatchPanel(self, self.algorithm()))
70+
self.hideShortHelp()
7171

7272
def accept(self):
7373
alg_parameters = []
7474
load = []
7575

7676
feedback = self.createFeedback()
7777

78-
load_layers = self.mainWidget.checkLoadLayersOnCompletion.isChecked()
78+
load_layers = self.mainWidget().checkLoadLayersOnCompletion.isChecked()
7979
project = QgsProject.instance() if load_layers else None
8080

81-
for row in range(self.mainWidget.tblParameters.rowCount()):
81+
for row in range(self.mainWidget().tblParameters.rowCount()):
8282
col = 0
8383
parameters = {}
84-
for param in self.alg.parameterDefinitions():
84+
for param in self.algorithm().parameterDefinitions():
8585
if param.flags() & QgsProcessingParameterDefinition.FlagHidden or param.isDestination():
8686
continue
87-
wrapper = self.mainWidget.wrappers[row][col]
87+
wrapper = self.mainWidget().wrappers[row][col]
8888
parameters[param.name()] = wrapper.value()
8989
if not param.checkValueIsAcceptable(wrapper.value()):
9090
self.messageBar().pushMessage("", self.tr('Wrong or missing parameter value: {0} (row {1})').format(
@@ -93,12 +93,12 @@ def accept(self):
9393
return
9494
col += 1
9595
count_visible_outputs = 0
96-
for out in self.alg.destinationParameterDefinitions():
96+
for out in self.algorithm().destinationParameterDefinitions():
9797
if out.flags() & QgsProcessingParameterDefinition.FlagHidden:
9898
continue
9999

100100
count_visible_outputs += 1
101-
widget = self.mainWidget.tblParameters.cellWidget(row, col)
101+
widget = self.mainWidget().tblParameters.cellWidget(row, col)
102102
text = widget.getValue()
103103
if out.checkValueIsAcceptable(text):
104104
if isinstance(out, (QgsProcessingParameterRasterDestination,
@@ -118,12 +118,12 @@ def accept(self):
118118

119119
with OverrideCursor(Qt.WaitCursor):
120120

121-
self.mainWidget.setEnabled(False)
122-
self.buttonCancel.setEnabled(True)
121+
self.mainWidget().setEnabled(False)
122+
self.cancelButton().setEnabled(True)
123123

124124
# Make sure the Log tab is visible before executing the algorithm
125125
try:
126-
self.tabWidget.setCurrentIndex(1)
126+
self.showLog()
127127
self.repaint()
128128
except:
129129
pass
@@ -134,8 +134,8 @@ def accept(self):
134134
for count, parameters in enumerate(alg_parameters):
135135
if feedback.isCanceled():
136136
break
137-
self.setText(self.tr('\nProcessing algorithm {0}/{1}...').format(count + 1, len(alg_parameters)))
138-
self.setInfo(self.tr('<b>Algorithm {0} starting...</b>').format(self.alg.displayName()), escape_html=False)
137+
self.setProgressText(self.tr('\nProcessing algorithm {0}/{1}...').format(count + 1, len(alg_parameters)))
138+
self.setInfo(self.tr('<b>Algorithm {0} starting...</b>').format(self.algorithm().displayName()), escapeHtml=False)
139139

140140
feedback.pushInfo(self.tr('Input parameters:'))
141141
feedback.pushCommandInfo(pformat(parameters))
@@ -148,9 +148,9 @@ def accept(self):
148148
context = dataobjects.createContext(feedback)
149149

150150
alg_start_time = time.time()
151-
ret, results = execute(self.alg, parameters, context, feedback)
151+
ret, results = execute(self.algorithm(), parameters, context, feedback)
152152
if ret:
153-
self.setInfo(self.tr('Algorithm {0} correctly executed...').format(self.alg.displayName()), escape_html=False)
153+
self.setInfo(self.tr('Algorithm {0} correctly executed...').format(self.algorithm().displayName()), escapeHtml=False)
154154
feedback.setProgress(100)
155155
feedback.pushInfo(
156156
self.tr('Execution completed in {0:0.2f} seconds'.format(time.time() - alg_start_time)))
@@ -161,32 +161,32 @@ def accept(self):
161161
else:
162162
break
163163

164-
handleAlgorithmResults(self.alg, context, feedback, False)
164+
handleAlgorithmResults(self.algorithm(), context, feedback, False)
165165

166166
feedback.pushInfo(self.tr('Batch execution completed in {0:0.2f} seconds'.format(time.time() - start_time)))
167167

168168
self.finish(algorithm_results)
169-
self.buttonCancel.setEnabled(False)
169+
self.cancelButton().setEnabled(False)
170170

171171
def finish(self, algorithm_results):
172172
for count, results in enumerate(algorithm_results):
173173
self.loadHTMLResults(results, count)
174174

175175
self.createSummaryTable(algorithm_results)
176-
self.mainWidget.setEnabled(True)
176+
self.mainWidget().setEnabled(True)
177177
QMessageBox.information(self, self.tr('Batch processing'),
178178
self.tr('Batch processing completed'))
179179

180180
def loadHTMLResults(self, results, num):
181-
for out in self.alg.outputDefinitions():
181+
for out in self.algorithm().outputDefinitions():
182182
if isinstance(out, QgsProcessingOutputHtml) and out.name() in results and results[out.name()]:
183-
resultsList.addResult(icon=self.alg.icon(), name='{} [{}]'.format(out.description(), num),
183+
resultsList.addResult(icon=self.algorithm().icon(), name='{} [{}]'.format(out.description(), num),
184184
result=results[out.name()])
185185

186186
def createSummaryTable(self, algorithm_results):
187187
createTable = False
188188

189-
for out in self.alg.outputDefinitions():
189+
for out in self.algorithm().outputDefinitions():
190190
if isinstance(out, (QgsProcessingOutputNumber, QgsProcessingOutputString)):
191191
createTable = True
192192
break
@@ -198,10 +198,10 @@ def createSummaryTable(self, algorithm_results):
198198
with codecs.open(outputFile, 'w', encoding='utf-8') as f:
199199
for res in algorithm_results:
200200
f.write('<hr>\n')
201-
for out in self.alg.outputDefinitions():
201+
for out in self.algorithm().outputDefinitions():
202202
if isinstance(out, (QgsProcessingOutputNumber, QgsProcessingOutputString)) and out.name() in res:
203203
f.write('<p>{}: {}</p>\n'.format(out.description(), res[out.name()]))
204204
f.write('<hr>\n')
205205

206-
resultsList.addResult(self.alg.icon(),
207-
'{} [summary]'.format(self.alg.name()), outputFile)
206+
resultsList.addResult(self.algorithm().icon(),
207+
'{} [summary]'.format(self.algorithm().name()), outputFile)

‎python/plugins/processing/gui/BatchInputSelectionPanel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def __init__(self, param, row, col, dialog):
7676
self.setLayout(self.horizontalLayout)
7777

7878
def _panel(self):
79-
return self.dialog.mainWidget
79+
return self.dialog.mainWidget()
8080

8181
def _table(self):
8282
return self._panel().tblParameters

‎python/plugins/processing/gui/ParametersPanel.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@
3939
QgsProcessingOutputRasterLayer,
4040
QgsProcessingParameterRasterDestination,
4141
QgsProcessingParameterFeatureSink,
42-
QgsProcessingParameterVectorDestination)
42+
QgsProcessingParameterVectorDestination,
43+
QgsProject)
4344
from qgis.PyQt import uic
4445
from qgis.PyQt.QtCore import QCoreApplication, Qt
4546
from qgis.PyQt.QtWidgets import (QWidget, QHBoxLayout, QToolButton,
@@ -79,6 +80,9 @@ def __init__(self, parent, alg):
7980

8081
self.initWidgets()
8182

83+
QgsProject.instance().layerWasAdded.connect(self.layerRegistryChanged)
84+
QgsProject.instance().layersWillBeRemoved.connect(self.layerRegistryChanged)
85+
8286
def layerRegistryChanged(self, layers):
8387
for wrapper in list(self.wrappers.values()):
8488
wrapper.refresh()

‎python/plugins/processing/preconfigured/PreconfiguredAlgorithmDialog.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -46,27 +46,26 @@ class PreconfiguredAlgorithmDialog(AlgorithmDialog):
4646
def __init__(self, alg, toolbox):
4747
AlgorithmDialog.__init__(self, alg)
4848
self.toolbox = toolbox
49-
self.cornerWidget.setVisible(False)
50-
self.btnRun.setText(self.tr("OK"))
51-
self.tabWidget.removeTab(1)
49+
self.runButton().setText(self.tr("OK"))
50+
self.tabWidget().removeTab(1)
5251
self.settingsPanel = SettingsPanel()
53-
self.tabWidget.addTab(self.settingsPanel, "Description")
52+
self.tabWidget().addTab(self.settingsPanel, "Description")
5453

5554
def accept(self):
5655
context = dataobjects.createContext()
5756
try:
58-
parameters = self.getParamValues()
57+
parameters = self.getParameterValues()
5958
self.setOutputValues()
60-
ok, msg = self.alg.checkParameterValues(parameters, context)
59+
ok, msg = self.algorithm().checkParameterValues(parameters, context)
6160
if not ok:
6261
QMessageBox.warning(
6362
self, self.tr('Unable to execute algorithm'), msg)
6463
return
65-
description = algAsDict(self.alg)
64+
description = algAsDict(self.algorithm())
6665
description["name"] = self.settingsPanel.txtName.text().strip()
6766
description["group"] = self.settingsPanel.txtGroup.text().strip()
6867
if not (description["name"] and description["group"]):
69-
self.tabWidget.setCurrentIndex(self.tabWidget.count() - 1)
68+
self.tabWidget().setCurrentIndex(self.tabWidget().count() - 1)
7069
return
7170
validChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:'
7271
filename = ''.join(c for c in description["name"] if c in validChars).lower() + ".json"
@@ -76,13 +75,13 @@ def accept(self):
7675
QgsApplication.processingRegistry().providerById('preconfigured').refreshAlgorithms()
7776
except AlgorithmDialogBase.InvalidParameterValue as e:
7877
try:
79-
self.buttonBox.accepted.connect(lambda: e.widget.setPalette(QPalette()))
78+
self.buttonBox().accepted.connect(lambda: e.widget.setPalette(QPalette()))
8079
palette = e.widget.palette()
8180
palette.setColor(QPalette.Base, QColor(255, 255, 0))
8281
e.widget.setPalette(palette)
83-
self.parent.bar.pushMessage("", self.tr('Missing parameter value: {0}').format(
84-
e.parameter.description()),
85-
level=QgsMessageBar.WARNING, duration=5)
82+
self.messageBar().pushMessage("", self.tr('Missing parameter value: {0}').format(
83+
e.parameter.description()),
84+
level=QgsMessageBar.WARNING, duration=5)
8685
return
8786
except:
8887
QMessageBox.critical(self,

‎python/plugins/processing/tests/GuiTest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class AlgorithmDialogTest(unittest.TestCase):
4343
def testCreation(self):
4444
alg = QgsApplication.processingRegistry().algorithmById('native:centroids')
4545
a = AlgorithmDialog(alg)
46-
self.assertEqual(a.mainWidget.alg, alg)
46+
self.assertEqual(a.mainWidget().alg, alg)
4747

4848

4949
class WrappersTest(unittest.TestCase):

‎src/gui/processing/qgsprocessingalgorithmdialogbase.cpp

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,15 +139,11 @@ void QgsProcessingAlgorithmDialogBase::setMainWidget( QWidget *widget )
139139
{
140140
if ( mMainWidget )
141141
{
142-
//QgsProject.instance().layerWasAdded.disconnect( self.mainWidget.layerRegistryChanged )
143-
//QgsProject.instance().layersWillBeRemoved.disconnect( self.mainWidget.layerRegistryChanged )
144142
mMainWidget->deleteLater();
145143
}
146144

147145
mMainWidget = widget;
148-
tabWidget->widget( 0 )->layout()->addWidget( mMainWidget );
149-
//QgsProject.instance().layerWasAdded.connect( self.mainWidget.layerRegistryChanged )
150-
//QgsProject.instance().layersWillBeRemoved.connect( self.mainWidget.layerRegistryChanged )
146+
mTabWidget->widget( 0 )->layout()->addWidget( mMainWidget );
151147
}
152148

153149
QWidget *QgsProcessingAlgorithmDialogBase::mainWidget()
@@ -173,9 +169,14 @@ QDialogButtonBox *QgsProcessingAlgorithmDialogBase::buttonBox()
173169
return mButtonBox;
174170
}
175171

172+
QTabWidget *QgsProcessingAlgorithmDialogBase::tabWidget()
173+
{
174+
return mTabWidget;
175+
}
176+
176177
void QgsProcessingAlgorithmDialogBase::showLog()
177178
{
178-
tabWidget->setCurrentIndex( 1 );
179+
mTabWidget->setCurrentIndex( 1 );
179180
}
180181

181182
void QgsProcessingAlgorithmDialogBase::closeEvent( QCloseEvent *e )
@@ -270,7 +271,7 @@ void QgsProcessingAlgorithmDialogBase::reportError( const QString &error )
270271
{
271272
setInfo( error, true );
272273
resetGui();
273-
tabWidget->setCurrentIndex( 1 );
274+
mTabWidget->setCurrentIndex( 1 );
274275
}
275276

276277
void QgsProcessingAlgorithmDialogBase::pushInfo( const QString &info )
@@ -343,6 +344,11 @@ QgsMessageBar *QgsProcessingAlgorithmDialogBase::messageBar()
343344
return mMessageBar;
344345
}
345346

347+
void QgsProcessingAlgorithmDialogBase::hideShortHelp()
348+
{
349+
textShortHelp->setVisible( false );
350+
}
351+
346352
void QgsProcessingAlgorithmDialogBase::setInfo( const QString &message, bool isError, bool escapeHtml )
347353
{
348354
if ( isError )

‎src/gui/processing/qgsprocessingalgorithmdialogbase.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,11 @@ class GUI_EXPORT QgsProcessingAlgorithmDialogBase : public QDialog, private Ui::
185185
*/
186186
QDialogButtonBox *buttonBox();
187187

188+
/**
189+
* Returns the dialog's tab widget.
190+
*/
191+
QTabWidget *tabWidget();
192+
188193
/**
189194
* Clears any current progress from the dialog.
190195
*/
@@ -210,6 +215,11 @@ class GUI_EXPORT QgsProcessingAlgorithmDialogBase : public QDialog, private Ui::
210215
*/
211216
QgsMessageBar *messageBar();
212217

218+
/**
219+
* Hides the short help panel.
220+
*/
221+
void hideShortHelp();
222+
213223
protected slots:
214224

215225
/**

‎src/ui/processing/qgsprocessingalgorithmdialogbase.ui

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<property name="handleWidth">
2929
<number>16</number>
3030
</property>
31-
<widget class="QTabWidget" name="tabWidget">
31+
<widget class="QTabWidget" name="mTabWidget">
3232
<property name="sizePolicy">
3333
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
3434
<horstretch>2</horstretch>

0 commit comments

Comments
 (0)
Please sign in to comment.