diff --git a/python/plugins/processing/algs/gdal/GdalAlgorithmDialog.py b/python/plugins/processing/algs/gdal/GdalAlgorithmDialog.py index d5f2137f485..e0180754dfe 100644 --- a/python/plugins/processing/algs/gdal/GdalAlgorithmDialog.py +++ b/python/plugins/processing/algs/gdal/GdalAlgorithmDialog.py @@ -40,9 +40,8 @@ class GdalAlgorithmDialog(AlgorithmDialog): AlgorithmDialogBase.__init__(self, alg) self.alg = alg - - self.mainWidget = GdalParametersPanel(self, alg) - self.setMainWidget() + + self.setMainWidget(GdalParametersPanel(self, alg)) cornerWidget = QWidget() layout = QVBoxLayout() @@ -56,10 +55,6 @@ class GdalAlgorithmDialog(AlgorithmDialog): self.mainWidget.parametersHaveChanged() - QgsMapLayerRegistry.instance().layerWasAdded.connect(self.mainWidget.layerAdded) - QgsMapLayerRegistry.instance().layersWillBeRemoved.connect(self.mainWidget.layersWillBeRemoved) - - class GdalParametersPanel(ParametersPanel): def __init__(self, parent, alg): diff --git a/python/plugins/processing/algs/qgis/ui/FieldsMapperDialogs.py b/python/plugins/processing/algs/qgis/ui/FieldsMapperDialogs.py index 8d7f443afe7..c90f46bec1e 100644 --- a/python/plugins/processing/algs/qgis/ui/FieldsMapperDialogs.py +++ b/python/plugins/processing/algs/qgis/ui/FieldsMapperDialogs.py @@ -98,8 +98,7 @@ class FieldsMapperParametersDialog(AlgorithmDialog): self.alg = alg - self.mainWidget = FieldsMapperParametersPanel(self, alg) - self.setMainWidget() + self.setMainWidget(FieldsMapperParametersPanel(self, alg)) def setParamValue(self, param, widget, alg=None): if isinstance(param, ParameterFieldsMapping): diff --git a/python/plugins/processing/gui/AlgorithmDialog.py b/python/plugins/processing/gui/AlgorithmDialog.py index f6f294f45a8..4a6f640cb25 100644 --- a/python/plugins/processing/gui/AlgorithmDialog.py +++ b/python/plugins/processing/gui/AlgorithmDialog.py @@ -69,8 +69,7 @@ class AlgorithmDialog(AlgorithmDialogBase): self.alg = alg - self.mainWidget = ParametersPanel(self, alg) - self.setMainWidget() + self.setMainWidget(ParametersPanel(self, alg)) self.cornerWidget = QWidget() layout = QVBoxLayout() @@ -82,8 +81,6 @@ class AlgorithmDialog(AlgorithmDialogBase): self.cornerWidget.setLayout(layout) self.tabWidget.setCornerWidget(self.cornerWidget) - QgsMapLayerRegistry.instance().layerWasAdded.connect(self.mainWidget.layerRegistryChanged) - QgsMapLayerRegistry.instance().layersWillBeRemoved.connect(self.mainWidget.layerRegistryChanged) def runAsBatch(self): self.close() diff --git a/python/plugins/processing/gui/AlgorithmDialogBase.py b/python/plugins/processing/gui/AlgorithmDialogBase.py index 651e5fea291..53045dd820a 100644 --- a/python/plugins/processing/gui/AlgorithmDialogBase.py +++ b/python/plugins/processing/gui/AlgorithmDialogBase.py @@ -35,7 +35,7 @@ from qgis.PyQt.QtWidgets import QApplication, QDialogButtonBox, QDesktopWidget from qgis.PyQt.QtNetwork import QNetworkRequest, QNetworkReply from qgis.utils import iface -from qgis.core import QgsNetworkAccessManager +from qgis.core import QgsNetworkAccessManager, QgsMapLayerRegistry from processing.core.ProcessingConfig import ProcessingConfig @@ -122,8 +122,15 @@ class AlgorithmDialogBase(BASE, WIDGET): self.settings.setValue("/Processing/dialogBase", self.saveGeometry()) super(AlgorithmDialogBase, self).closeEvent(evt) - def setMainWidget(self): + def setMainWidget(self, widget): + if self.mainWidget is not None: + QgsMapLayerRegistry.instance().layerWasAdded.disconnect(self.mainWidget.layerRegistryChanged) + QgsMapLayerRegistry.instance().layersWillBeRemoved.disconnect(self.mainWidget.layerRegistryChanged) + self.mainWidget = widget self.tabWidget.widget(0).layout().addWidget(self.mainWidget) + QgsMapLayerRegistry.instance().layerWasAdded.connect(self.mainWidget.layerRegistryChanged) + QgsMapLayerRegistry.instance().layersWillBeRemoved.connect(self.mainWidget.layerRegistryChanged) + def error(self, msg): QApplication.restoreOverrideCursor() diff --git a/python/plugins/processing/gui/BatchAlgorithmDialog.py b/python/plugins/processing/gui/BatchAlgorithmDialog.py index 59c8dfdc2ed..dfda489b6c7 100644 --- a/python/plugins/processing/gui/BatchAlgorithmDialog.py +++ b/python/plugins/processing/gui/BatchAlgorithmDialog.py @@ -56,8 +56,7 @@ class BatchAlgorithmDialog(AlgorithmDialogBase): self.setWindowTitle(self.tr('Batch Processing - %s') % self.alg.name) - self.mainWidget = BatchPanel(self, self.alg) - self.setMainWidget() + self.setMainWidget(BatchPanel(self, self.alg)) self.textShortHelp.setVisible(False) diff --git a/python/plugins/processing/gui/BatchPanel.py b/python/plugins/processing/gui/BatchPanel.py index 787008fb074..0968cfb8531 100644 --- a/python/plugins/processing/gui/BatchPanel.py +++ b/python/plugins/processing/gui/BatchPanel.py @@ -88,6 +88,10 @@ class BatchPanel(BASE, WIDGET): self.fillParameterValues) self.initWidgets() + + + def layerRegistryChanged(self): + pass def initWidgets(self): # If there are advanced parameters — show corresponding button