refresh BuildVRT command when input layers changes, cleanup (follow 9da5d0345)

This commit is contained in:
Giuseppe Sucameli 2012-03-10 05:39:52 +01:00
parent 9da5d0345b
commit d6ea1a037e
3 changed files with 41 additions and 27 deletions

View File

@ -3,7 +3,6 @@ from PyQt4.QtCore import *
from PyQt4.QtGui import * from PyQt4.QtGui import *
from qgis.core import * from qgis.core import *
from qgis.gui import * from qgis.gui import *
from qgis.utils import *
from ui_widgetBuildVRT import Ui_GdalToolsWidget as Ui_Widget from ui_widgetBuildVRT import Ui_GdalToolsWidget as Ui_Widget
from widgetPluginBase import GdalToolsBasePluginWidget as BasePluginWidget from widgetPluginBase import GdalToolsBasePluginWidget as BasePluginWidget
@ -22,6 +21,7 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget):
self.inSelector.setType( self.inSelector.FILE ) self.inSelector.setType( self.inSelector.FILE )
self.outSelector.setType( self.outSelector.FILE ) self.outSelector.setType( self.outSelector.FILE )
self.recurseCheck.hide() self.recurseCheck.hide()
self.visibleRasterLayers = QStringList()
self.setParamsStatus( self.setParamsStatus(
[ [
@ -32,14 +32,38 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget):
(self.inputDirCheck, SIGNAL("stateChanged(int)")), (self.inputDirCheck, SIGNAL("stateChanged(int)")),
(self.separateCheck, SIGNAL("stateChanged(int)"), None, "1.7.0"), (self.separateCheck, SIGNAL("stateChanged(int)"), None, "1.7.0"),
(self.allowProjDiffCheck, 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.inSelector, SIGNAL("selectClicked()"), self.fillInputFilesEdit)
self.connect(self.outSelector, SIGNAL("selectClicked()"), self.fillOutputFileEdit) self.connect(self.outSelector, SIGNAL("selectClicked()"), self.fillOutputFileEdit)
self.connect( self.inputDirCheck, SIGNAL( "stateChanged( int )" ), self.switchToolMode ) 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): def switchToolMode(self):
self.recurseCheck.setVisible( self.inputDirCheck.isChecked() ) self.recurseCheck.setVisible( self.inputDirCheck.isChecked() )
@ -58,7 +82,7 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget):
QObject.disconnect(self.inSelector, SIGNAL("selectClicked()"), self.fillInputDir) QObject.disconnect(self.inSelector, SIGNAL("selectClicked()"), self.fillInputDir)
def switchLayerMode(self): def switchLayerMode(self):
enableInputFiles = not self.useSelectedLayersCheck.isChecked() enableInputFiles = not self.inputSelLayersCheck.isChecked()
self.inputDirCheck.setEnabled( enableInputFiles ) self.inputDirCheck.setEnabled( enableInputFiles )
self.inSelector.setEnabled( enableInputFiles ) self.inSelector.setEnabled( enableInputFiles )
self.recurseCheck.setEnabled( enableInputFiles ) self.recurseCheck.setEnabled( enableInputFiles )
@ -96,10 +120,9 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget):
if self.allowProjDiffCheck.isChecked(): if self.allowProjDiffCheck.isChecked():
arguments << "-allow_projection_difference" arguments << "-allow_projection_difference"
arguments << self.getOutputFileName() arguments << self.getOutputFileName()
if self.useSelectedLayersCheck.isChecked(): if self.inputSelLayersCheck.isChecked():
arguments << self.getInputFileNamesFromSelectedLayers() arguments << self.visibleRasterLayers
else: elif self.inputDirCheck.isChecked():
if self.inputDirCheck.isChecked():
arguments << Utils.getRasterFiles( self.getInputFileName(), self.recurseCheck.isChecked() ) arguments << Utils.getRasterFiles( self.getInputFileName(), self.recurseCheck.isChecked() )
else: else:
arguments << self.getInputFileName() arguments << self.getInputFileName()
@ -113,14 +136,6 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget):
return self.inSelector.filename() return self.inSelector.filename()
return self.inSelector.filename().split(",") 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): def addLayerIntoCanvas(self, fileInfo):
self.iface.addRasterLayer(fileInfo.filePath()) self.iface.addRasterLayer(fileInfo.filePath())

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>348</width> <width>348</width>
<height>238</height> <height>266</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -26,9 +26,9 @@
<enum>QLayout::SetNoConstraint</enum> <enum>QLayout::SetNoConstraint</enum>
</property> </property>
<item row="0" column="0" colspan="2"> <item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="useSelectedLayersCheck"> <widget class="QCheckBox" name="inputSelLayersCheck">
<property name="text"> <property name="text">
<string>Use selected layers for input</string> <string>Use visible raster layers for input</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -30,20 +30,19 @@ class GdalToolsBasePluginWidget:
def onLayersChanged(self): def onLayersChanged(self):
pass pass
def exec_(self): def initialize(self):
if not self.initialized: if not self.initialized:
self.connect(Utils.LayerRegistry.instance(), SIGNAL("layersChanged"), self.onLayersChanged) self.connect(Utils.LayerRegistry.instance(), SIGNAL("layersChanged"), self.onLayersChanged)
self.onLayersChanged() self.onLayersChanged()
self.someValueChanged() self.someValueChanged()
self.initialized = True self.initialized = True
def exec_(self):
self.initialize()
return self.base.exec_() return self.base.exec_()
def show_(self): def show_(self):
if not self.initialized: self.initialize()
self.connect(Utils.LayerRegistry.instance(), SIGNAL("layersChanged"), self.onLayersChanged)
self.onLayersChanged()
self.someValueChanged()
self.initialized = True
return self.base.show() return self.base.show()
def setCommandViewerEnabled(self, enable): def setCommandViewerEnabled(self, enable):