|
8 | 8 |
|
9 | 9 | from PyQt4.QtCore import *
|
10 | 10 | from PyQt4.QtGui import *
|
| 11 | + |
11 | 12 | from qgis.core import *
|
12 | 13 | from qgis.gui import *
|
| 14 | + |
13 | 15 | from osgeo import gdal
|
14 | 16 | from osgeo.gdalconst import *
|
15 | 17 | from osgeo import ogr
|
@@ -90,34 +92,72 @@ def getVectorExtensions():
|
90 | 92 | extensions << FileFilter.getFilterExtensions( f )
|
91 | 93 | return extensions
|
92 | 94 |
|
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) |
121 | 161 |
|
122 | 162 | def getRasterFiles(path, recursive=False):
|
123 | 163 | rasters = QStringList()
|
|
0 commit comments