mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
* Remove deprecated Qgis::WKBType and API cleanup Renames QgsWKBTypes to QgsWkbTypes Replaces usage of the enums: * Qgis::WKBType with QgsWkbTypes::Type * Qgis::GeometryType with QgsWkbTypes::GeometryType Their values should be forward compatible (a fact that was already explited up to now by casting between the types) Renames some SSLxxx to SslXxx and URIxxx to UriXxx * Fix build warnings and simplify type handling * Add a fixer to rewrite imports * The forgotten rebase conflictThe forgotten rebase conflicts * QgsDataSourcURI > QgsDataSourceUri * QgsWKBTypes > QgsWkbTypes * Qgis.WKBGeom > QgsWkbTypes.Geom * Further python fixes * Guess what... Qgis::wkbDimensions != QgsWkbTypes::wkbDimensions * Fix tests * Python 3 updates * [travis] pull request caching cannot be disabled so at least use it in r/w mode * Fix python3 print in plugins
123 lines
4.6 KiB
Python
123 lines
4.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
***************************************************************************
|
|
PredicatePanel.py
|
|
---------------------
|
|
Date : January 2015
|
|
Copyright : (C) 2015 by Arnaud Morvan
|
|
Email : arnaud dot morvan at camptocamp dot com
|
|
Contributors : Arnaud Morvan
|
|
***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************
|
|
"""
|
|
|
|
__author__ = 'Arnaud Morvan'
|
|
__date__ = 'January 2015'
|
|
__copyright__ = '(C) 2015, Arnaud Morvan'
|
|
|
|
# This will get replaced with a git SHA1 when you do a git archive
|
|
__revision__ = '$Format:%H$'
|
|
|
|
import os
|
|
|
|
from qgis.PyQt import uic
|
|
from qgis.PyQt.QtWidgets import QCheckBox
|
|
from qgis.core import Qgis, QgsVectorLayer, QgsWkbTypes, QgsWkbTypes
|
|
|
|
from processing.core.parameters import ParameterGeometryPredicate
|
|
|
|
pluginPath = os.path.split(os.path.dirname(__file__))[0]
|
|
WIDGET, BASE = uic.loadUiType(
|
|
os.path.join(pluginPath, 'ui', 'widgetGeometryPredicateSelector.ui'))
|
|
|
|
|
|
class GeometryPredicateSelectionPanel(BASE, WIDGET):
|
|
|
|
unusablePredicates = {
|
|
QgsWkbTypes.PointGeometry: {
|
|
QgsWkbTypes.PointGeometry: ('touches', 'crosses'),
|
|
QgsWkbTypes.LineGeometry: ('equals', 'contains', 'overlaps'),
|
|
QgsWkbTypes.PolygonGeometry: ('equals', 'contains', 'overlaps')
|
|
},
|
|
QgsWkbTypes.LineGeometry: {
|
|
QgsWkbTypes.PointGeometry: ('equals', 'within', 'overlaps'),
|
|
QgsWkbTypes.LineGeometry: [],
|
|
QgsWkbTypes.PolygonGeometry: ('equals', 'contains', 'overlaps')
|
|
},
|
|
QgsWkbTypes.PolygonGeometry: {
|
|
QgsWkbTypes.PointGeometry: ('equals', 'within', 'overlaps'),
|
|
QgsWkbTypes.LineGeometry: ('equals', 'within', 'overlaps'),
|
|
QgsWkbTypes.PolygonGeometry: ('crosses')
|
|
}
|
|
}
|
|
|
|
def __init__(self,
|
|
enabledPredicated=ParameterGeometryPredicate.predicates,
|
|
rows=4):
|
|
super(GeometryPredicateSelectionPanel, self).__init__(None)
|
|
self.setupUi(self)
|
|
|
|
self.enabledPredicated = enabledPredicated
|
|
self.leftLayer = None
|
|
self.rightLayer = None
|
|
self.setRows(rows)
|
|
self.updatePredicates()
|
|
|
|
def onLeftLayerChange(self):
|
|
sender = self.sender()
|
|
self.leftLayer = sender.itemData(sender.currentIndex())
|
|
self.updatePredicates()
|
|
|
|
def onRightLayerChange(self):
|
|
sender = self.sender()
|
|
self.rightLayer = sender.itemData(sender.currentIndex())
|
|
self.updatePredicates()
|
|
|
|
def updatePredicates(self):
|
|
if (isinstance(self.leftLayer, QgsVectorLayer)
|
|
and isinstance(self.rightLayer, QgsVectorLayer)):
|
|
leftType = self.leftLayer.geometryType()
|
|
rightType = self.rightLayer.geometryType()
|
|
unusablePredicates = self.unusablePredicates[leftType][rightType]
|
|
else:
|
|
unusablePredicates = []
|
|
for predicate in ParameterGeometryPredicate.predicates:
|
|
widget = self.getWidget(predicate)
|
|
widget.setEnabled(predicate in self.enabledPredicated
|
|
and predicate not in unusablePredicates)
|
|
|
|
def setRows(self, rows):
|
|
widgets = []
|
|
for predicate in ParameterGeometryPredicate.predicates:
|
|
widget = self.getWidget(predicate)
|
|
self.gridLayout.removeWidget(widget)
|
|
widgets.append(widget)
|
|
for i in xrange(0, len(widgets)):
|
|
widget = widgets[i]
|
|
self.gridLayout.addWidget(widget, i % rows, i / rows)
|
|
|
|
def getWidget(self, predicate):
|
|
return self.findChild(QCheckBox, predicate + 'Box')
|
|
|
|
def value(self):
|
|
values = []
|
|
for predicate in ParameterGeometryPredicate.predicates:
|
|
widget = self.getWidget(predicate)
|
|
if widget.isEnabled() and widget.isChecked():
|
|
values.append(predicate)
|
|
return values
|
|
|
|
def setValue(self, values):
|
|
if values:
|
|
for predicate in ParameterGeometryPredicate.predicates:
|
|
widget = self.getWidget(predicate)
|
|
widget.setChecked(predicate in values)
|
|
return True
|