Skip to content

Commit 167df20

Browse files
author
brushtyler
committed
refresh list of layers when layers in TOC change
git-svn-id: http://svn.osgeo.org/qgis/trunk@15474 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent bf58ae2 commit 167df20

19 files changed

+121
-58
lines changed

python/plugins/GdalTools/GdalTools.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@ def initGui( self ):
7878
+ QCoreApplication.translate( "GdalTools", "This version of Gdal Tools requires at least QGIS version 1.0.0\nPlugin will not be enabled." ) )
7979
return None
8080

81-
from tools.GdalTools_utils import Version, GdalConfig
81+
from tools.GdalTools_utils import Version, GdalConfig, LayerRegistry
8282
self.GdalVersion = Version( GdalConfig.version() )
83+
LayerRegistry.setIface( self.iface )
8384

8485
# find the Raster menu
8586
rasterMenu = None

python/plugins/GdalTools/tools/GdalTools_utils.py

+68-28
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88

99
from PyQt4.QtCore import *
1010
from PyQt4.QtGui import *
11+
1112
from qgis.core import *
1213
from qgis.gui import *
14+
1315
from osgeo import gdal
1416
from osgeo.gdalconst import *
1517
from osgeo import ogr
@@ -90,34 +92,72 @@ def getVectorExtensions():
9092
extensions << FileFilter.getFilterExtensions( f )
9193
return extensions
9294

93-
def getRasterLayers():
94-
# mantein the reference between combobox indexes and canvas layers
95-
layers = dict()
96-
count = 0
97-
names = []
98-
layerMap = QgsMapLayerRegistry.instance().mapLayers()
99-
for name, layer in layerMap.iteritems():
100-
# only raster layers, but not WMS ones
101-
if layer.type() == layer.RasterLayer:
102-
if layer.usesProvider() and layer.providerKey() != 'gdal':
103-
continue
104-
layers[count] = layer
105-
names.append(layer.name())
106-
count = count +1
107-
return (layers, names)
108-
109-
def getVectorLayers():
110-
# mantein the reference between combobox indexes and canvas layers
111-
layers = dict()
112-
count = 0
113-
names = []
114-
layerMap = QgsMapLayerRegistry.instance().mapLayers()
115-
for name, layer in layerMap.iteritems():
116-
if layer.type() == layer.VectorLayer:
117-
layers[count] = layer
118-
names.append(layer.name())
119-
count = count +1
120-
return (layers, names)
95+
class LayerRegistry(QObject):
96+
97+
_instance = None
98+
_iface = None
99+
100+
@staticmethod
101+
def instance():
102+
if LayerRegistry._instance == None:
103+
LayerRegistry._instance = LayerRegistry()
104+
return LayerRegistry._instance
105+
106+
@staticmethod
107+
def setIface(iface):
108+
LayerRegistry._iface = iface
109+
110+
layers = []
111+
112+
def __init__(self):
113+
QObject.__init__(self)
114+
if LayerRegistry._instance != None:
115+
return
116+
117+
LayerRegistry.layers = self.getAllLayers()
118+
LayerRegistry._instance = self
119+
self.connect(QgsMapLayerRegistry.instance(), SIGNAL("removedAll()"), self.removeAllLayers)
120+
self.connect(QgsMapLayerRegistry.instance(), SIGNAL("layerWasAdded(QgsMapLayer *)"), self.layerAdded)
121+
self.connect(QgsMapLayerRegistry.instance(), SIGNAL("layerWillBeRemoved(QString)"), self.removeLayer)
122+
123+
def getAllLayers(self):
124+
if LayerRegistry._iface and hasattr(LayerRegistry._iface, 'legendInterface'):
125+
return LayerRegistry._iface.legendInterface().layers()
126+
return QgsMapLayerRegistry.instance().mapLayers().values()
127+
128+
def layerAdded(self, layer):
129+
LayerRegistry.layers.append( layer )
130+
self.emit( SIGNAL( "layersChanged" ) )
131+
132+
def removeLayer(self, layerId):
133+
LayerRegistry.layers = filter( lambda x: x.getLayerID() != layerId, LayerRegistry.layers)
134+
self.emit( SIGNAL( "layersChanged" ) )
135+
136+
def removeAllLayers(self):
137+
LayerRegistry.layers = []
138+
self.emit( SIGNAL( "layersChanged" ) )
139+
140+
def getRasterLayers(self):
141+
layers = []
142+
names = []
143+
144+
for layer in LayerRegistry.layers:
145+
# only gdal raster layers
146+
if layer.type() == layer.RasterLayer:
147+
if layer.usesProvider() and layer.providerKey() != 'gdal':
148+
continue
149+
layers.append(layer)
150+
names.append(layer.name())
151+
return (layers, names)
152+
153+
def getVectorLayers(self):
154+
layers = []
155+
names = []
156+
for layer in LayerRegistry.layers:
157+
if layer.type() == layer.VectorLayer:
158+
layers.append(layer)
159+
names.append(layer.name())
160+
return (layers, names)
121161

122162
def getRasterFiles(path, recursive=False):
123163
rasters = QStringList()

python/plugins/GdalTools/tools/dialogBase.py

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class GdalToolsBaseDialog(QDialog, Ui_Dialog):
1717

1818
def __init__(self, parent, iface, pluginBase, pluginName, pluginCommand):
1919
QDialog.__init__(self, parent)
20+
self.setAttribute(Qt.WA_DeleteOnClose)
2021
self.iface = iface
2122

2223
self.process = QProcess(self)

python/plugins/GdalTools/tools/doAbout.py

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class GdalToolsAboutDialog(QDialog, Ui_Dialog):
1313

1414
def __init__(self, iface):
1515
QDialog.__init__(self, iface.mainWindow())
16+
self.setAttribute(Qt.WA_DeleteOnClose)
1617
self.iface = iface
1718
self.setupUi(self)
1819

python/plugins/GdalTools/tools/doContour.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@ def __init__(self, iface):
3333
self.connect(self.selectOutputDirButton, SIGNAL("clicked()"), self.fillOutputDirEdit)
3434

3535
# fill layers combo
36+
self.connect(Utils.LayerRegistry.instance(), SIGNAL("layersChanged"), self.fillInputLayerCombo)
3637
self.fillInputLayerCombo()
3738

3839
def fillInputLayerCombo( self ):
3940
self.inputLayerCombo.clear()
40-
( self.layers, names ) = Utils.getRasterLayers()
41+
( self.layers, names ) = Utils.LayerRegistry.instance().getRasterLayers()
4142
self.inputLayerCombo.addItems( names )
4243

4344
def fillInputFileEdit(self):

python/plugins/GdalTools/tools/doGrid.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@ def __init__(self, iface):
5858
self.connect(self.inputLayerCombo, SIGNAL("currentIndexChanged(int)"), self.fillFieldsCombo)
5959
self.connect(self.extentGroup, SIGNAL("toggled(bool)"), self.onExtentCheckedChenged)
6060

61-
# fill layers combo
62-
self.fillInputLayerCombo()
6361

6462
def onClosing(self):
6563
self.extentSelector.stop()
@@ -68,9 +66,12 @@ def onClosing(self):
6866
def onExtentCheckedChenged(self, enabled):
6967
self.extentSelector.start() if enabled else self.extentSelector.stop()
7068

69+
def onLayersChanged(self):
70+
self.fillInputLayerCombo()
71+
7172
def fillInputLayerCombo(self):
7273
self.inputLayerCombo.clear()
73-
( self.layers, names ) = Utils.getVectorLayers()
74+
( self.layers, names ) = Utils.LayerRegistry.instance().getVectorLayers()
7475
self.inputLayerCombo.addItems( names )
7576

7677
def fillFieldsCombo(self):

python/plugins/GdalTools/tools/doInfo.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ def __init__( self, iface ):
4040
self.copyAll = QAction( self.tr( "Copy all" ), self )
4141
QObject.connect( self.copyAll, SIGNAL( "triggered()" ), self.doCopyAll )
4242

43-
# fill layers combo
44-
self.fillInputLayerCombo()
4543

4644
def doCopyLine( self ):
4745
output = QString()
@@ -71,9 +69,12 @@ def keyPressEvent( self, e ):
7169
else:
7270
QWidget.keyPressEvent( self, e )
7371

72+
def onLayersChanged(self):
73+
self.fillInputLayerCombo()
74+
7475
def fillInputLayerCombo( self ):
7576
self.inputLayerCombo.clear()
76-
( self.layers, names ) = Utils.getRasterLayers()
77+
( self.layers, names ) = Utils.LayerRegistry.instance().getRasterLayers()
7778
self.inputLayerCombo.addItems( names )
7879

7980
def finished( self ):

python/plugins/GdalTools/tools/doNearBlack.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ def __init__(self, iface):
3333
self.connect(self.selectInputFileButton, SIGNAL("clicked()"), self.fillInputFileEdit)
3434
self.connect(self.selectOutputFileButton, SIGNAL("clicked()"), self.fillOutputFileEdit)
3535

36-
# fill layers combo
36+
def onLayersChanged(self):
3737
self.fillInputLayerCombo()
3838

3939
def fillInputLayerCombo( self ):
4040
self.inputLayerCombo.clear()
41-
( self.layers, names ) = Utils.getRasterLayers()
41+
( self.layers, names ) = Utils.LayerRegistry.instance().getRasterLayers()
4242
self.inputLayerCombo.addItems( names )
4343

4444
def fillInputFileEdit(self):

python/plugins/GdalTools/tools/doOverview.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ def __init__( self, iface ):
4444
self.connect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputFile )
4545
self.connect( self.batchCheck, SIGNAL( "stateChanged( int )" ), self.switchToolMode )
4646

47-
# fill layers combo
48-
self.fillInputLayerCombo()
4947

5048
# switch to batch or normal mode
5149
def switchToolMode( self ):
@@ -71,9 +69,12 @@ def switchToolMode( self ):
7169
QObject.disconnect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputDir )
7270
QObject.connect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputFile )
7371

72+
def onLayersChanged(self):
73+
self.fillInputLayerCombo()
74+
7475
def fillInputLayerCombo( self ):
7576
self.inputLayerCombo.clear()
76-
( self.layers, names ) = Utils.getRasterLayers()
77+
( self.layers, names ) = Utils.LayerRegistry.instance().getRasterLayers()
7778
self.inputLayerCombo.addItems( names )
7879

7980
def fillInputFile( self ):

python/plugins/GdalTools/tools/doPctRgb.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ def __init__(self, iface):
3939
self.connect(self.selectOutputFileButton, SIGNAL("clicked()"), self.fillOutputFileEdit)
4040
self.connect( self.batchCheck, SIGNAL( "stateChanged( int )" ), self.switchToolMode )
4141

42-
self.fillInputLayerCombo()
4342

4443
# switch to batch or normal mode
4544
def switchToolMode( self ):
@@ -77,9 +76,12 @@ def switchToolMode( self ):
7776
QObject.connect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputFile )
7877
QObject.connect( self.selectOutputFileButton, SIGNAL( "clicked()" ), self.fillOutputFileEdit )
7978

79+
def onLayersChanged(self):
80+
self.fillInputLayerCombo()
81+
8082
def fillInputLayerCombo(self):
8183
self.inputLayerCombo.clear()
82-
( self.layers, names ) = Utils.getRasterLayers()
84+
( self.layers, names ) = Utils.LayerRegistry.instance().getRasterLayers()
8385
self.inputLayerCombo.addItems( names )
8486

8587
def fillInputFile(self):

python/plugins/GdalTools/tools/doPolygonize.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ def __init__(self, iface):
3131
self.connect(self.selectInputFileButton, SIGNAL("clicked()"), self.fillInputFileEdit)
3232
self.connect(self.selectOutputFileButton, SIGNAL("clicked()"), self.fillOutputFileEdit)
3333

34-
# fill layers combo
34+
def onLayersChanged(self):
3535
self.fillInputLayerCombo()
3636

3737
def fillInputLayerCombo( self ):
3838
self.inputLayerCombo.clear()
39-
( self.layers, names ) = Utils.getRasterLayers()
39+
( self.layers, names ) = Utils.LayerRegistry.instance().getRasterLayers()
4040
self.inputLayerCombo.addItems( names )
4141

4242
def fillInputFileEdit(self):

python/plugins/GdalTools/tools/doProximity.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ def __init__(self, iface):
3737
self.connect(self.selectInputFileButton, SIGNAL("clicked()"), self.fillInputFileEdit)
3838
self.connect(self.selectOutputFileButton, SIGNAL("clicked()"), self.fillOutputFileEdit)
3939

40-
# fill layers combo
40+
def onLayersChanged(self):
4141
self.fillInputLayerCombo()
4242

4343
def fillInputLayerCombo( self ):
4444
self.inputLayerCombo.clear()
45-
( self.layers, names ) = Utils.getRasterLayers()
45+
( self.layers, names ) = Utils.LayerRegistry().getRasterLayers()
4646
self.inputLayerCombo.addItems( names )
4747

4848
def fillInputFileEdit(self):

python/plugins/GdalTools/tools/doRasterize.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ def __init__(self, iface):
3737
self.connect(self.selectOutputFileButton, SIGNAL("clicked()"), self.fillOutputFileEdit)
3838
self.connect(self.inputLayerCombo, SIGNAL("currentIndexChanged(int)"), self.fillFieldsCombo)
3939

40-
# fill layers combo
40+
def onLayersChanged(self):
4141
self.fillInputLayerCombo()
4242

4343
def fillInputLayerCombo( self ):
4444
self.inputLayerCombo.clear()
45-
( self.layers, names ) = Utils.getVectorLayers()
45+
( self.layers, names ) = Utils.LayerRegistry.instance().getVectorLayers()
4646
self.inputLayerCombo.addItems( names )
4747

4848
def fillFieldsCombo(self):

python/plugins/GdalTools/tools/doRgbPct.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ def __init__(self, iface):
3737
self.connect(self.selectOutputFileButton, SIGNAL("clicked()"), self.fillOutputFileEdit)
3838
self.connect( self.batchCheck, SIGNAL( "stateChanged( int )" ), self.switchToolMode )
3939

40-
self.fillInputLayerCombo()
4140

4241
# switch to batch or normal mode
4342
def switchToolMode( self ):
@@ -75,9 +74,12 @@ def switchToolMode( self ):
7574
QObject.connect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputFile )
7675
QObject.connect( self.selectOutputFileButton, SIGNAL( "clicked()" ), self.fillOutputFileEdit )
7776

77+
def onLayersChanged(self):
78+
self.fillInputLayerCombo()
79+
7880
def fillInputLayerCombo(self):
7981
self.inputLayerCombo.clear()
80-
( self.layers, names ) = Utils.getRasterLayers()
82+
( self.layers, names ) = Utils.LayerRegistry().getRasterLayers()
8183
self.inputLayerCombo.addItems( names )
8284

8385
def fillInputFile(self):

python/plugins/GdalTools/tools/doSettings.py

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
class GdalToolsSettingsDialog( QDialog, Ui_Dialog ):
1212
def __init__( self, iface ):
1313
QDialog.__init__( self, iface.mainWindow() )
14+
self.setAttribute(Qt.WA_DeleteOnClose)
1415
self.iface = iface
1516
self.setupUi( self )
1617

python/plugins/GdalTools/tools/doSieve.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@ def __init__(self, iface):
3232
self.connect(self.selectInputFileButton, SIGNAL("clicked()"), self.fillInputFileEdit)
3333
self.connect(self.selectOutputFileButton, SIGNAL("clicked()"), self.fillOutputFileEdit)
3434

35-
# fill layers combo
35+
def onLayersChanged(self):
3636
self.fillInputLayerCombo()
3737

3838
def fillInputLayerCombo( self ):
3939
self.inputLayerCombo.clear()
40-
( self.layers, names ) = Utils.getRasterLayers()
40+
( self.layers, names ) = Utils.LayerRegistry.instance().getRasterLayers()
4141
self.inputLayerCombo.addItems( names )
4242

4343
def fillInputFileEdit(self):

python/plugins/GdalTools/tools/doTranslate.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ def __init__(self, iface):
6161
# add raster filters to combo
6262
self.formatCombo.addItems( Utils.FileFilter.allRastersFilter().split( ";;" ) )
6363

64-
# add layers to combo
65-
self.fillInputLayerCombo()
6664

6765
def switchToolMode( self ):
6866
self.setCommandViewerEnabled( not self.batchCheck.isChecked() )
@@ -103,9 +101,12 @@ def switchToolMode( self ):
103101
QObject.connect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputFile )
104102
QObject.connect( self.selectOutputFileButton, SIGNAL( "clicked()" ), self.fillOutputFileEdit )
105103

104+
def onLayersChanged(self):
105+
self.fillInputLayerCombo()
106+
106107
def fillInputLayerCombo(self):
107108
self.inputLayerCombo.clear()
108-
( self.layers, names ) = Utils.getRasterLayers()
109+
( self.layers, names ) = Utils.LayerRegistry.instance().getRasterLayers()
109110
self.inputLayerCombo.addItems( names )
110111

111112
def fillInputFile( self ):

python/plugins/GdalTools/tools/doWarp.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ def __init__(self, iface):
5151
self.connect(self.selectTargetSRSButton, SIGNAL("clicked()"), self.fillTargetSRSEdit)
5252
self.connect( self.batchCheck, SIGNAL( "stateChanged( int )" ), self.switchToolMode )
5353

54-
self.fillInputLayerCombo()
5554

5655
# switch to batch or normal mode
5756
def switchToolMode( self ):
@@ -89,9 +88,12 @@ def switchToolMode( self ):
8988
QObject.connect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputFile )
9089
QObject.connect( self.selectOutputFileButton, SIGNAL( "clicked()" ), self.fillOutputFileEdit )
9190

91+
def onLayersChanged(self):
92+
self.fillInputLayerCombo()
93+
9294
def fillInputLayerCombo(self):
9395
self.inputLayerCombo.clear()
94-
( self.layers, names ) = Utils.getRasterLayers()
96+
( self.layers, names ) = Utils.LayerRegistry.instance().getRasterLayers()
9597
self.inputLayerCombo.addItems( names )
9698

9799
def fillInputFile(self):

0 commit comments

Comments
 (0)