Add CrsWidgetWrapper

This commit is contained in:
arnaud.morvan@camptocamp.com 2016-08-24 15:23:25 +02:00 committed by volaya
parent bb0938a5fe
commit 6158e9b340
5 changed files with 30 additions and 8 deletions

View File

@ -162,12 +162,16 @@ class ParameterBoolean(Parameter):
class ParameterCrs(Parameter):
def __init__(self, name='', description='', default=None, optional=False):
default_metadata = {
'widget_wrapper': 'processing.gui.wrappers.CrsWidgetWrapper'
}
def __init__(self, name='', description='', default=None, optional=False, metadata={}):
'''The value is a string that uniquely identifies the
coordinate reference system. Typically it is the auth id of the CRS
(if the authority is EPSG) or proj4 string of the CRS (in case
of other authorities or user defined projections).'''
Parameter.__init__(self, name, description, default, optional)
Parameter.__init__(self, name, description, default, optional, metadata)
def setValue(self, value):
if value is None or value.strip() == '':

View File

@ -55,7 +55,6 @@ from processing.core.parameters import ParameterMultipleInput
from processing.core.parameters import ParameterString
from processing.core.parameters import ParameterNumber
from processing.core.parameters import ParameterFile
from processing.core.parameters import ParameterCrs
from processing.core.parameters import ParameterPoint
from processing.core.parameters import ParameterGeometryPredicate
@ -172,7 +171,7 @@ class AlgorithmDialog(AlgorithmDialogBase):
else:
options = dataobjects.getVectorLayers([param.datatype], sorting=False)
return param.setValue([options[i] for i in widget.selectedoptions])
elif isinstance(param, (ParameterNumber, ParameterFile, ParameterCrs,
elif isinstance(param, (ParameterNumber, ParameterFile,
ParameterExtent, ParameterPoint)):
return param.setValue(widget.getValue())
elif isinstance(param, ParameterString):

View File

@ -39,14 +39,16 @@ WIDGET, BASE = uic.loadUiType(
class CrsSelectionPanel(BASE, WIDGET):
def __init__(self, default):
def __init__(self, default='EPSG:4326'):
super(CrsSelectionPanel, self).__init__(None)
self.setupUi(self)
self.leText.setEnabled(False)
self.btnSelect.clicked.connect(self.browseCRS)
self.crs = QgsCoordinateReferenceSystem(default).authid()
# TODO: Default should be removed
self.crs = default
self.updateText()
def setAuthId(self, authid):

View File

@ -411,8 +411,6 @@ class ParametersPanel(BASE, WIDGET):
item = ExtentSelectionPanel(self.parent, self.alg, param.default)
elif isinstance(param, ParameterPoint):
item = PointSelectionPanel(self.parent, param.default)
elif isinstance(param, ParameterCrs):
item = CrsSelectionPanel(param.default)
elif isinstance(param, ParameterString):
if param.multiline:
verticalLayout = QVBoxLayout()

View File

@ -28,11 +28,14 @@ __revision__ = '$Format:%H$'
from inspect import isclass
from qgis.core import QgsCoordinateReferenceSystem
from qgis.PyQt.QtWidgets import (
QCheckBox,
QComboBox,
)
from processing.gui.CrsSelectionPanel import CrsSelectionPanel
DIALOG_STANDARD = 'standard'
DIALOG_BATCH = 'batch'
DIALOG_MODELER = 'modeler'
@ -115,3 +118,19 @@ class BooleanWidgetWrapper(WidgetWrapper):
if self.dialog in (DIALOG_BATCH, DIALOG_MODELER):
return self.widget.itemData(self.widget.currentIndex())
class CrsWidgetWrapper(WidgetWrapper):
def createWidget(self, extra_values=[]):
return CrsSelectionPanel()
def setValue(self, value):
if isinstance(value, basestring): # authId
self.widget.crs = value
else:
self.widget.crs = QgsCoordinateReferenceSystem(value).authid()
self.widget.updateText()
def value(self):
return self.widget.getValue()