Skip to content

Commit 5bfec27

Browse files
committedJan 31, 2019
[processing] do not show geometryless layers in extent selector
Fixes #21129
1 parent e670371 commit 5bfec27

File tree

1 file changed

+42
-23
lines changed

1 file changed

+42
-23
lines changed
 

‎python/plugins/processing/gui/ExtentSelectionPanel.py

Lines changed: 42 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,24 @@
2929
import warnings
3030

3131
from qgis.PyQt import uic
32-
from qgis.PyQt.QtWidgets import QMenu, QAction, QInputDialog
32+
from qgis.PyQt.QtWidgets import (
33+
QMenu,
34+
QAction,
35+
QDialog,
36+
QVBoxLayout,
37+
QDialogButtonBox,
38+
QLabel
39+
)
3340
from qgis.PyQt.QtGui import QCursor
3441
from qgis.PyQt.QtCore import QCoreApplication, pyqtSignal
3542

36-
from qgis.gui import QgsMessageBar
43+
from qgis.gui import QgsMapLayerComboBox
3744
from qgis.utils import iface
38-
from qgis.core import (QgsProcessingUtils,
39-
QgsProcessingParameterDefinition,
45+
from qgis.core import (QgsProcessingParameterDefinition,
4046
QgsProcessingParameters,
4147
QgsProject,
42-
QgsCoordinateReferenceSystem,
43-
QgsRectangle,
44-
QgsReferencedRectangle)
48+
QgsReferencedRectangle,
49+
QgsMapLayerProxyModel)
4550
from processing.gui.RectangleMapTool import RectangleMapTool
4651
from processing.core.ProcessingConfig import ProcessingConfig
4752
from processing.tools.dataobjects import createContext
@@ -54,6 +59,32 @@
5459
os.path.join(pluginPath, 'ui', 'widgetBaseSelector.ui'))
5560

5661

62+
class LayerSelectionDialog(QDialog):
63+
64+
def __init__(self, parent=None):
65+
super().__init__(parent)
66+
self.setWindowTitle(self.tr('Select Extent'))
67+
68+
vl = QVBoxLayout()
69+
vl.addWidget(QLabel(self.tr('Use extent from')))
70+
self.combo = QgsMapLayerComboBox()
71+
self.combo.setFilters(
72+
QgsMapLayerProxyModel.HasGeometry | QgsMapLayerProxyModel.RasterLayer | QgsMapLayerProxyModel.MeshLayer)
73+
self.combo.setShowCrs(ProcessingConfig.getSetting(ProcessingConfig.SHOW_CRS_DEF))
74+
vl.addWidget(self.combo)
75+
76+
self.button_box = QDialogButtonBox()
77+
self.button_box.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok)
78+
self.button_box.accepted.connect(self.accept)
79+
self.button_box.rejected.connect(self.reject)
80+
81+
vl.addWidget(self.button_box)
82+
self.setLayout(vl)
83+
84+
def selected_layer(self):
85+
return self.combo.currentLayer()
86+
87+
5788
class ExtentSelectionPanel(BASE, WIDGET):
5889

5990
hasChanged = pyqtSignal()
@@ -133,22 +164,10 @@ def useMinCoveringExtent(self):
133164
self.leText.setText('')
134165

135166
def useLayerExtent(self):
136-
extentsDict = {}
137-
extents = []
138-
layers = QgsProcessingUtils.compatibleLayers(QgsProject.instance())
139-
for layer in layers:
140-
authid = layer.crs().authid()
141-
if ProcessingConfig.getSetting(ProcessingConfig.SHOW_CRS_DEF) \
142-
and authid is not None:
143-
layerName = u'{} [{}]'.format(layer.name(), authid)
144-
else:
145-
layerName = layer.name()
146-
extents.append(layerName)
147-
extentsDict[layerName] = {"extent": layer.extent(), "authid": authid}
148-
(item, ok) = QInputDialog.getItem(self, self.tr('Select Extent'),
149-
self.tr('Use extent from'), extents, 0, False)
150-
if ok:
151-
self.setValueFromRect(QgsReferencedRectangle(extentsDict[item]["extent"], QgsCoordinateReferenceSystem(extentsDict[item]["authid"])))
167+
dlg = LayerSelectionDialog(self)
168+
if dlg.exec_():
169+
layer = dlg.selected_layer()
170+
self.setValueFromRect(QgsReferencedRectangle(layer.extent(), layer.crs()))
152171

153172
def useCanvasExtent(self):
154173
self.setValueFromRect(QgsReferencedRectangle(iface.mapCanvas().extent(),

0 commit comments

Comments
 (0)
Please sign in to comment.