Skip to content

Commit d6ea1a0

Browse files
committedMar 10, 2012
refresh BuildVRT command when input layers changes, cleanup (follow 9da5d03)
1 parent 9da5d03 commit d6ea1a0

File tree

3 files changed

+41
-27
lines changed

3 files changed

+41
-27
lines changed
 

‎python/plugins/GdalTools/tools/doBuildVRT.py

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from PyQt4.QtGui import *
44
from qgis.core import *
55
from qgis.gui import *
6-
from qgis.utils import *
76

87
from ui_widgetBuildVRT import Ui_GdalToolsWidget as Ui_Widget
98
from widgetPluginBase import GdalToolsBasePluginWidget as BasePluginWidget
@@ -22,6 +21,7 @@ def __init__(self, iface):
2221
self.inSelector.setType( self.inSelector.FILE )
2322
self.outSelector.setType( self.outSelector.FILE )
2423
self.recurseCheck.hide()
24+
self.visibleRasterLayers = QStringList()
2525

2626
self.setParamsStatus(
2727
[
@@ -32,14 +32,38 @@ def __init__(self, iface):
3232
(self.inputDirCheck, SIGNAL("stateChanged(int)")),
3333
(self.separateCheck, SIGNAL("stateChanged(int)"), None, "1.7.0"),
3434
(self.allowProjDiffCheck, SIGNAL("stateChanged(int)"), None, "1.7.0"),
35-
(self.recurseCheck, SIGNAL("stateChanged(int)"), self.inputDirCheck)
35+
(self.recurseCheck, SIGNAL("stateChanged(int)"), self.inputDirCheck),
36+
(self.inputSelLayersCheck, SIGNAL("stateChanged(int)"))
3637
]
3738
)
3839

3940
self.connect(self.inSelector, SIGNAL("selectClicked()"), self.fillInputFilesEdit)
4041
self.connect(self.outSelector, SIGNAL("selectClicked()"), self.fillOutputFileEdit)
4142
self.connect( self.inputDirCheck, SIGNAL( "stateChanged( int )" ), self.switchToolMode )
42-
self.connect( self.useSelectedLayersCheck, SIGNAL( "stateChanged( int )" ), self.switchLayerMode )
43+
self.connect( self.inputSelLayersCheck, SIGNAL( "stateChanged( int )" ), self.switchLayerMode )
44+
self.connect( self.iface.mapCanvas(), SIGNAL( "stateChanged( int )" ), self.switchLayerMode )
45+
46+
47+
def initialize(self):
48+
# connect to mapCanvas.layerChanged() signal
49+
self.connect(self.iface.mapCanvas(), SIGNAL("layersChanged()"), self.onVisibleLayersChanged)
50+
BasePluginWidget.initialize(self)
51+
52+
def onClosing(self):
53+
# disconnect from mapCanvas.layerChanged() signal
54+
self.disconnect(self.iface.mapCanvas(), SIGNAL("layersChanged()"), self.onVisibleLayersChanged)
55+
BasePluginWidget.onClosing(self)
56+
57+
58+
def onVisibleLayersChanged(self):
59+
# refresh list of visible raster layers
60+
self.visibleRasterLayers = QStringList()
61+
for layer in self.iface.mapCanvas().layers():
62+
if Utils.LayerRegistry.isRaster( layer ):
63+
self.visibleRasterLayers << layer.source()
64+
65+
# refresh the text in the command viewer
66+
self.someValueChanged()
4367

4468
def switchToolMode(self):
4569
self.recurseCheck.setVisible( self.inputDirCheck.isChecked() )
@@ -58,7 +82,7 @@ def switchToolMode(self):
5882
QObject.disconnect(self.inSelector, SIGNAL("selectClicked()"), self.fillInputDir)
5983

6084
def switchLayerMode(self):
61-
enableInputFiles = not self.useSelectedLayersCheck.isChecked()
85+
enableInputFiles = not self.inputSelLayersCheck.isChecked()
6286
self.inputDirCheck.setEnabled( enableInputFiles )
6387
self.inSelector.setEnabled( enableInputFiles )
6488
self.recurseCheck.setEnabled( enableInputFiles )
@@ -96,13 +120,12 @@ def getArguments(self):
96120
if self.allowProjDiffCheck.isChecked():
97121
arguments << "-allow_projection_difference"
98122
arguments << self.getOutputFileName()
99-
if self.useSelectedLayersCheck.isChecked():
100-
arguments << self.getInputFileNamesFromSelectedLayers()
123+
if self.inputSelLayersCheck.isChecked():
124+
arguments << self.visibleRasterLayers
125+
elif self.inputDirCheck.isChecked():
126+
arguments << Utils.getRasterFiles( self.getInputFileName(), self.recurseCheck.isChecked() )
101127
else:
102-
if self.inputDirCheck.isChecked():
103-
arguments << Utils.getRasterFiles( self.getInputFileName(), self.recurseCheck.isChecked() )
104-
else:
105-
arguments << self.getInputFileName()
128+
arguments << self.getInputFileName()
106129
return arguments
107130

108131
def getOutputFileName(self):
@@ -113,14 +136,6 @@ def getInputFileName(self):
113136
return self.inSelector.filename()
114137
return self.inSelector.filename().split(",")
115138

116-
def getInputFileNamesFromSelectedLayers(self):
117-
layers = iface.mapCanvas().layers()
118-
files = list()
119-
for layer in layers:
120-
if layer.type() == QgsMapLayer.RasterLayer and layer.providerType() == "gdal":
121-
files.append( str(layer.source()) )
122-
return files
123-
124139
def addLayerIntoCanvas(self, fileInfo):
125140
self.iface.addRasterLayer(fileInfo.filePath())
126141

‎python/plugins/GdalTools/tools/widgetBuildVRT.ui

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<x>0</x>
88
<y>0</y>
99
<width>348</width>
10-
<height>238</height>
10+
<height>266</height>
1111
</rect>
1212
</property>
1313
<property name="sizePolicy">
@@ -26,9 +26,9 @@
2626
<enum>QLayout::SetNoConstraint</enum>
2727
</property>
2828
<item row="0" column="0" colspan="2">
29-
<widget class="QCheckBox" name="useSelectedLayersCheck">
29+
<widget class="QCheckBox" name="inputSelLayersCheck">
3030
<property name="text">
31-
<string>Use selected layers for input</string>
31+
<string>Use visible raster layers for input</string>
3232
</property>
3333
</widget>
3434
</item>

‎python/plugins/GdalTools/tools/widgetPluginBase.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,19 @@ def someValueChanged(self):
3030
def onLayersChanged(self):
3131
pass
3232

33-
def exec_(self):
33+
def initialize(self):
3434
if not self.initialized:
3535
self.connect(Utils.LayerRegistry.instance(), SIGNAL("layersChanged"), self.onLayersChanged)
3636
self.onLayersChanged()
3737
self.someValueChanged()
3838
self.initialized = True
39+
40+
def exec_(self):
41+
self.initialize()
3942
return self.base.exec_()
4043

4144
def show_(self):
42-
if not self.initialized:
43-
self.connect(Utils.LayerRegistry.instance(), SIGNAL("layersChanged"), self.onLayersChanged)
44-
self.onLayersChanged()
45-
self.someValueChanged()
46-
self.initialized = True
45+
self.initialize()
4746
return self.base.show()
4847

4948
def setCommandViewerEnabled(self, enable):

0 commit comments

Comments
 (0)
Please sign in to comment.