mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
[processing] more robust layer sorting in multiple selection widget (fixes #11429)
This commit is contained in:
parent
99cec14c5b
commit
b1e7ede36b
@ -175,9 +175,9 @@ class AlgorithmExecutionDialog(QDialog):
|
|||||||
return param.setValue(widget.selectedoptions)
|
return param.setValue(widget.selectedoptions)
|
||||||
else:
|
else:
|
||||||
if param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
|
if param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
|
||||||
options = dataobjects.getVectorLayers()
|
options = dataobjects.getVectorLayers(sorting=False)
|
||||||
else:
|
else:
|
||||||
options = dataobjects.getRasterLayers()
|
options = dataobjects.getRasterLayers(sorting=False)
|
||||||
return param.setValue([options[i] for i in widget.selectedoptions])
|
return param.setValue([options[i] for i in widget.selectedoptions])
|
||||||
elif isinstance(param, (ParameterNumber, ParameterFile, ParameterCrs,
|
elif isinstance(param, (ParameterNumber, ParameterFile, ParameterCrs,
|
||||||
ParameterExtent)):
|
ParameterExtent)):
|
||||||
|
@ -69,13 +69,14 @@ def getSupportedOutputTableExtensions():
|
|||||||
|
|
||||||
|
|
||||||
def getRasterLayers(sorting=True):
|
def getRasterLayers(sorting=True):
|
||||||
layers = QgsMapLayerRegistry.instance().mapLayers().values()
|
layers = QgsProject.instance().layerTreeRoot().findLayers()
|
||||||
raster = []
|
raster = []
|
||||||
|
|
||||||
for layer in layers:
|
for layer in layers:
|
||||||
if layer.type() == layer.RasterLayer:
|
mapLayer = layer.layer()
|
||||||
if layer.providerType() == 'gdal': # only gdal file-based layers
|
if mapLayer.type() == QgsMapLayer.RasterLayer:
|
||||||
raster.append(layer)
|
if mapLayer.providerType() == 'gdal': # only gdal file-based layers
|
||||||
|
raster.append(mapLayer)
|
||||||
if sorting:
|
if sorting:
|
||||||
return sorted(raster, key=lambda layer: layer.name().lower())
|
return sorted(raster, key=lambda layer: layer.name().lower())
|
||||||
else:
|
else:
|
||||||
@ -83,14 +84,15 @@ def getRasterLayers(sorting=True):
|
|||||||
|
|
||||||
|
|
||||||
def getVectorLayers(shapetype=[-1], sorting=True):
|
def getVectorLayers(shapetype=[-1], sorting=True):
|
||||||
layers = QgsMapLayerRegistry.instance().mapLayers().values()
|
layers = QgsProject.instance().layerTreeRoot().findLayers()
|
||||||
vector = []
|
vector = []
|
||||||
for layer in layers:
|
for layer in layers:
|
||||||
if layer.type() == layer.VectorLayer:
|
mapLayer = layer.layer()
|
||||||
if shapetype == ALL_TYPES or layer.geometryType() in shapetype:
|
if mapLayer.type() == QgsMapLayer.VectorLayer:
|
||||||
uri = unicode(layer.source())
|
if shapetype == ALL_TYPES or mapLayer.geometryType() in shapetype:
|
||||||
|
uri = unicode(mapLayer.source())
|
||||||
if not uri.lower().endswith('csv') and not uri.lower().endswith('dbf'):
|
if not uri.lower().endswith('csv') and not uri.lower().endswith('dbf'):
|
||||||
vector.append(layer)
|
vector.append(mapLayer)
|
||||||
if sorting:
|
if sorting:
|
||||||
return sorted(vector, key=lambda layer: layer.name().lower())
|
return sorted(vector, key=lambda layer: layer.name().lower())
|
||||||
else:
|
else:
|
||||||
@ -105,11 +107,12 @@ def getAllLayers():
|
|||||||
|
|
||||||
|
|
||||||
def getTables(sorting=True):
|
def getTables(sorting=True):
|
||||||
layers = QgsMapLayerRegistry.instance().mapLayers().values()
|
layers = QgsProject.instance().layerTreeRoot().findLayers()
|
||||||
tables = list()
|
tables = []
|
||||||
for layer in layers:
|
for layer in layers:
|
||||||
if layer.type() == layer.VectorLayer:
|
mapLayer = layer.layer()
|
||||||
tables.append(layer)
|
if mapLayer.type() == QgsMapLayer.VectorLayer:
|
||||||
|
tables.append(mapLayer)
|
||||||
if sorting:
|
if sorting:
|
||||||
return sorted(tables, key=lambda table: table.name().lower())
|
return sorted(tables, key=lambda table: table.name().lower())
|
||||||
else:
|
else:
|
||||||
@ -119,7 +122,7 @@ def getTables(sorting=True):
|
|||||||
def extent(layers):
|
def extent(layers):
|
||||||
first = True
|
first = True
|
||||||
for layer in layers:
|
for layer in layers:
|
||||||
if not isinstance(layer, (QgsRasterLayer, QgsVectorLayer)):
|
if not isinstance(layer, (QgsMapLayer.QgsRasterLayer, QgsMapLayer.QgsVectorLayer)):
|
||||||
layer = getObjectFromUri(layer)
|
layer = getObjectFromUri(layer)
|
||||||
if layer is None:
|
if layer is None:
|
||||||
continue
|
continue
|
||||||
|
Loading…
x
Reference in New Issue
Block a user