From 3c1eb0aca9b3b333a459574312e7b0651b115511 Mon Sep 17 00:00:00 2001 From: Etienne Tourigny Date: Thu, 8 Mar 2012 23:20:10 -0300 Subject: [PATCH] allow to use loaded layers as input files (instead of file selector) for GDALTools Build Virtual Raster --- python/plugins/GdalTools/tools/doBuildVRT.py | 25 ++++++++++++++-- .../plugins/GdalTools/tools/widgetBuildVRT.ui | 29 ++++++++++++------- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/python/plugins/GdalTools/tools/doBuildVRT.py b/python/plugins/GdalTools/tools/doBuildVRT.py index 67df116f461b..9dbdca27f33a 100644 --- a/python/plugins/GdalTools/tools/doBuildVRT.py +++ b/python/plugins/GdalTools/tools/doBuildVRT.py @@ -3,6 +3,7 @@ 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 @@ -38,6 +39,7 @@ def __init__(self, iface): 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 ) def switchToolMode(self): self.recurseCheck.setVisible( self.inputDirCheck.isChecked() ) @@ -55,6 +57,12 @@ def switchToolMode(self): QObject.connect(self.inSelector, SIGNAL("selectClicked()"), self.fillInputFilesEdit) QObject.disconnect(self.inSelector, SIGNAL("selectClicked()"), self.fillInputDir) + def switchLayerMode(self): + enableInputFiles = not self.useSelectedLayersCheck.isChecked() + self.inputDirCheck.setEnabled( enableInputFiles ) + self.inSelector.setEnabled( enableInputFiles ) + self.recurseCheck.setEnabled( enableInputFiles ) + def fillInputFilesEdit(self): lastUsedFilter = Utils.FileFilter.lastUsedRasterFilter() files = Utils.FileDialog.getOpenFileNames(self, self.tr( "Select the files for VRT" ), Utils.FileFilter.allRastersFilter(), lastUsedFilter) @@ -88,10 +96,13 @@ def getArguments(self): if self.allowProjDiffCheck.isChecked(): arguments << "-allow_projection_difference" arguments << self.getOutputFileName() - if self.inputDirCheck.isChecked(): - arguments << Utils.getRasterFiles( self.getInputFileName(), self.recurseCheck.isChecked() ) + if self.useSelectedLayersCheck.isChecked(): + arguments << self.getInputFileNamesFromSelectedLayers() else: - arguments << self.getInputFileName() + if self.inputDirCheck.isChecked(): + arguments << Utils.getRasterFiles( self.getInputFileName(), self.recurseCheck.isChecked() ) + else: + arguments << self.getInputFileName() return arguments def getOutputFileName(self): @@ -102,6 +113,14 @@ def getInputFileName(self): 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 2192538ce7d7..b0df5053d616 100644 --- a/python/plugins/GdalTools/tools/widgetBuildVRT.ui +++ b/python/plugins/GdalTools/tools/widgetBuildVRT.ui @@ -26,13 +26,20 @@ QLayout::SetNoConstraint + + + Use selected layers for input + + + + Choose input directory instead of files - + &Input files @@ -42,14 +49,14 @@ - + Recurse subdirectories - + &Output file @@ -59,14 +66,14 @@ - + &Resolution - + @@ -94,14 +101,14 @@ - + &Source No Data - + -100000 @@ -111,20 +118,20 @@ - + Se&parate - + - + - + Allow projection difference