From d6ea1a037ef3755f7989bbf4c44c320f12eeba43 Mon Sep 17 00:00:00 2001 From: Giuseppe Sucameli Date: Sat, 10 Mar 2012 05:39:52 +0100 Subject: [PATCH] refresh BuildVRT command when input layers changes, cleanup (follow 9da5d0345) --- python/plugins/GdalTools/tools/doBuildVRT.py | 51 ++++++++++++------- .../plugins/GdalTools/tools/widgetBuildVRT.ui | 6 +-- .../GdalTools/tools/widgetPluginBase.py | 11 ++-- 3 files changed, 41 insertions(+), 27 deletions(-) diff --git a/python/plugins/GdalTools/tools/doBuildVRT.py b/python/plugins/GdalTools/tools/doBuildVRT.py index 9dbdca27f33..d2483a91c9e 100644 --- a/python/plugins/GdalTools/tools/doBuildVRT.py +++ b/python/plugins/GdalTools/tools/doBuildVRT.py @@ -3,7 +3,6 @@ from PyQt4.QtCore import * from PyQt4.QtGui import * from qgis.core import * from qgis.gui import * -from qgis.utils import * from ui_widgetBuildVRT import Ui_GdalToolsWidget as Ui_Widget from widgetPluginBase import GdalToolsBasePluginWidget as BasePluginWidget @@ -22,6 +21,7 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget): self.inSelector.setType( self.inSelector.FILE ) self.outSelector.setType( self.outSelector.FILE ) self.recurseCheck.hide() + self.visibleRasterLayers = QStringList() self.setParamsStatus( [ @@ -32,14 +32,38 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget): (self.inputDirCheck, SIGNAL("stateChanged(int)")), (self.separateCheck, SIGNAL("stateChanged(int)"), None, "1.7.0"), (self.allowProjDiffCheck, SIGNAL("stateChanged(int)"), None, "1.7.0"), - (self.recurseCheck, SIGNAL("stateChanged(int)"), self.inputDirCheck) + (self.recurseCheck, SIGNAL("stateChanged(int)"), self.inputDirCheck), + (self.inputSelLayersCheck, SIGNAL("stateChanged(int)")) ] ) self.connect(self.inSelector, SIGNAL("selectClicked()"), self.fillInputFilesEdit) self.connect(self.outSelector, SIGNAL("selectClicked()"), self.fillOutputFileEdit) self.connect( self.inputDirCheck, SIGNAL( "stateChanged( int )" ), self.switchToolMode ) - self.connect( self.useSelectedLayersCheck, SIGNAL( "stateChanged( int )" ), self.switchLayerMode ) + self.connect( self.inputSelLayersCheck, SIGNAL( "stateChanged( int )" ), self.switchLayerMode ) + self.connect( self.iface.mapCanvas(), SIGNAL( "stateChanged( int )" ), self.switchLayerMode ) + + + def initialize(self): + # connect to mapCanvas.layerChanged() signal + self.connect(self.iface.mapCanvas(), SIGNAL("layersChanged()"), self.onVisibleLayersChanged) + BasePluginWidget.initialize(self) + + def onClosing(self): + # disconnect from mapCanvas.layerChanged() signal + self.disconnect(self.iface.mapCanvas(), SIGNAL("layersChanged()"), self.onVisibleLayersChanged) + BasePluginWidget.onClosing(self) + + + def onVisibleLayersChanged(self): + # refresh list of visible raster layers + self.visibleRasterLayers = QStringList() + for layer in self.iface.mapCanvas().layers(): + if Utils.LayerRegistry.isRaster( layer ): + self.visibleRasterLayers << layer.source() + + # refresh the text in the command viewer + self.someValueChanged() def switchToolMode(self): self.recurseCheck.setVisible( self.inputDirCheck.isChecked() ) @@ -58,7 +82,7 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget): QObject.disconnect(self.inSelector, SIGNAL("selectClicked()"), self.fillInputDir) def switchLayerMode(self): - enableInputFiles = not self.useSelectedLayersCheck.isChecked() + enableInputFiles = not self.inputSelLayersCheck.isChecked() self.inputDirCheck.setEnabled( enableInputFiles ) self.inSelector.setEnabled( enableInputFiles ) self.recurseCheck.setEnabled( enableInputFiles ) @@ -96,13 +120,12 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget): if self.allowProjDiffCheck.isChecked(): arguments << "-allow_projection_difference" arguments << self.getOutputFileName() - if self.useSelectedLayersCheck.isChecked(): - arguments << self.getInputFileNamesFromSelectedLayers() + if self.inputSelLayersCheck.isChecked(): + arguments << self.visibleRasterLayers + elif self.inputDirCheck.isChecked(): + arguments << Utils.getRasterFiles( self.getInputFileName(), self.recurseCheck.isChecked() ) else: - if self.inputDirCheck.isChecked(): - arguments << Utils.getRasterFiles( self.getInputFileName(), self.recurseCheck.isChecked() ) - else: - arguments << self.getInputFileName() + arguments << self.getInputFileName() return arguments def getOutputFileName(self): @@ -113,14 +136,6 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget): return self.inSelector.filename() return self.inSelector.filename().split(",") - def getInputFileNamesFromSelectedLayers(self): - layers = iface.mapCanvas().layers() - files = list() - for layer in layers: - if layer.type() == QgsMapLayer.RasterLayer and layer.providerType() == "gdal": - files.append( str(layer.source()) ) - return files - def addLayerIntoCanvas(self, fileInfo): self.iface.addRasterLayer(fileInfo.filePath()) diff --git a/python/plugins/GdalTools/tools/widgetBuildVRT.ui b/python/plugins/GdalTools/tools/widgetBuildVRT.ui index b0df5053d61..b8ced3889ba 100644 --- a/python/plugins/GdalTools/tools/widgetBuildVRT.ui +++ b/python/plugins/GdalTools/tools/widgetBuildVRT.ui @@ -7,7 +7,7 @@ 0 0 348 - 238 + 266 @@ -26,9 +26,9 @@ QLayout::SetNoConstraint - + - Use selected layers for input + Use visible raster layers for input diff --git a/python/plugins/GdalTools/tools/widgetPluginBase.py b/python/plugins/GdalTools/tools/widgetPluginBase.py index 75ab85b1c59..5f593181839 100644 --- a/python/plugins/GdalTools/tools/widgetPluginBase.py +++ b/python/plugins/GdalTools/tools/widgetPluginBase.py @@ -30,20 +30,19 @@ class GdalToolsBasePluginWidget: def onLayersChanged(self): pass - def exec_(self): + def initialize(self): if not self.initialized: self.connect(Utils.LayerRegistry.instance(), SIGNAL("layersChanged"), self.onLayersChanged) self.onLayersChanged() self.someValueChanged() self.initialized = True + + def exec_(self): + self.initialize() return self.base.exec_() def show_(self): - if not self.initialized: - self.connect(Utils.LayerRegistry.instance(), SIGNAL("layersChanged"), self.onLayersChanged) - self.onLayersChanged() - self.someValueChanged() - self.initialized = True + self.initialize() return self.base.show() def setCommandViewerEnabled(self, enable):