def _removeWmtsConnection(): settings = QgsSettings() settings.remove('qgis/connections-wms/TesterPlugin') settings.remove('qgis/WMS/TesterPlugin') iface.browserModel().reload() QgsProject.instance().clear()
def _addWmtsConnection(): settings = QgsSettings() key = 'qgis/connections-wms/TesterPlugin' settings.setValue( key + '/url', 'http://wmts.geo.admin.ch/1.0.0/WMTSCapabilities.xml?lang=fr') settings.setValue(key + '/dpiMode', 7) settings.setValue(key + '/ignoreAxisOrientation', False) settings.setValue(key + '/ignoreGetFeatureInfoURI', False) settings.setValue(key + '/ignoreGetMapURI', False) settings.setValue(key + '/ignoreReportedLayerExtents', False) settings.setValue(key + '/invertAxisOrientation', False) settings.setValue(key + '/referer', '') settings.setValue(key + '/smoothPixmapTransform', False) iface.browserModel().reload()
def __init__(self, layer_name, original_uri, layer_type, parent=None): super().__init__(parent) self.setupUi(self) self.setWindowTitle("Select Source for {}".format(layer_name)) QgsGui.enableAutoGeometryRestore(self) # in case browser panel isn't open, we need to force initialize the model now iface.browserModel().initialize() self.browser_proxy_model = QgsBrowserProxyModel(self) self.browser_proxy_model.setBrowserModel(iface.browserModel()) self.browser_proxy_model.setFilterByLayerType(True) self.browser_proxy_model.setLayerType(layer_type) self.mBrowserTreeView.setHeaderHidden(True) self.mBrowserTreeView.setModel(self.browser_proxy_model) self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False) self.mBrowserTreeView.clicked.connect(self.on_layer_selected) self.uri = None self.description_label = None self.setDescription("Original source: {}".format(original_uri))
def initWidgets(self): # If there are advanced parameters — show corresponding groupbox for param in self.alg.parameterDefinitions(): if param.flags() & QgsProcessingParameterDefinition.FlagAdvanced: self.grpAdvanced.show() break widget_context = QgsProcessingParameterWidgetContext() widget_context.setProject(QgsProject.instance()) if iface is not None: widget_context.setMapCanvas(iface.mapCanvas()) widget_context.setBrowserModel(iface.browserModel()) widget_context.setMessageBar(self.parent.messageBar()) if isinstance(self.alg, QgsProcessingModelAlgorithm): widget_context.setModel(self.alg) # Create widgets and put them in layouts for param in self.alg.parameterDefinitions(): if param.flags() & QgsProcessingParameterDefinition.FlagHidden: continue if param.isDestination(): continue else: wrapper = WidgetWrapperFactory.create_wrapper(param, self.parent) wrapper.setWidgetContext(widget_context) wrapper.registerProcessingContextGenerator(self.context_generator) self.wrappers[param.name()] = wrapper # For compatibility with 3.x API, we need to check whether the wrapper is # the deprecated WidgetWrapper class. If not, it's the newer # QgsAbstractProcessingParameterWidgetWrapper class # TODO QGIS 4.0 - remove is_python_wrapper = issubclass(wrapper.__class__, WidgetWrapper) if not is_python_wrapper: widget = wrapper.createWrappedWidget(self.processing_context) else: widget = wrapper.widget if self.in_place and param.name() in ('INPUT', 'OUTPUT'): # don't show the input/output parameter widgets in in-place mode # we still need to CREATE them, because other wrappers may need to interact # with them (e.g. those parameters which need the input layer for field # selections/crs properties/etc) continue if widget is not None: if is_python_wrapper: widget.setToolTip(param.toolTip()) if isinstance(param, QgsProcessingParameterFeatureSource): layout = QHBoxLayout() layout.setSpacing(6) layout.setMargin(0) layout.addWidget(widget) button = QToolButton() icon = QIcon(os.path.join(pluginPath, 'images', 'iterate.png')) button.setIcon(icon) button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) button.setToolTip(self.tr('Iterate over this layer, creating a separate output for every feature in the layer')) button.setCheckable(True) layout.addWidget(button) layout.setAlignment(button, Qt.AlignTop) self.iterateButtons[param.name()] = button button.toggled.connect(self.buttonToggled) widget = QWidget() widget.setLayout(layout) label = None if not is_python_wrapper: label = wrapper.createWrappedLabel() else: label = wrapper.label if label is not None: if param.flags() & QgsProcessingParameterDefinition.FlagAdvanced: self.layoutAdvanced.addWidget(label) else: self.layoutMain.insertWidget( self.layoutMain.count() - 2, label) elif is_python_wrapper: desc = param.description() if isinstance(param, QgsProcessingParameterExtent): desc += self.tr(' (xmin, xmax, ymin, ymax)') if isinstance(param, QgsProcessingParameterPoint): desc += self.tr(' (x, y)') if param.flags() & QgsProcessingParameterDefinition.FlagOptional: desc += self.tr(' [optional]') widget.setText(desc) if param.flags() & QgsProcessingParameterDefinition.FlagAdvanced: self.layoutAdvanced.addWidget(widget) else: self.layoutMain.insertWidget( self.layoutMain.count() - 2, widget) for output in self.alg.destinationParameterDefinitions(): if output.flags() & QgsProcessingParameterDefinition.FlagHidden: continue if self.in_place and param.name() in ('INPUT', 'OUTPUT'): continue label = QLabel(output.description()) widget = QgsProcessingLayerOutputDestinationWidget(output, False) widget.setWidgetContext(widget_context) self.layoutMain.insertWidget(self.layoutMain.count() - 1, label) self.layoutMain.insertWidget(self.layoutMain.count() - 1, widget) if isinstance(output, (QgsProcessingParameterRasterDestination, QgsProcessingParameterFeatureSink, QgsProcessingParameterVectorDestination)): check = QCheckBox() check.setText(QCoreApplication.translate('ParametersPanel', 'Open output file after running algorithm')) def skipOutputChanged(widget, checkbox, skipped): enabled = not skipped # Do not try to open formats that are write-only. value = widget.value() if value and isinstance(value, QgsProcessingOutputLayerDefinition) and isinstance(output, ( QgsProcessingParameterFeatureSink, QgsProcessingParameterVectorDestination)): filename = value.sink.staticValue() if filename not in ('memory:', ''): path, ext = os.path.splitext(filename) format = QgsVectorFileWriter.driverForExtension(ext) drv = gdal.GetDriverByName(format) if drv: if drv.GetMetadataItem(gdal.DCAP_OPEN) is None: enabled = False checkbox.setEnabled(enabled) checkbox.setChecked(enabled) check.setChecked(not widget.outputIsSkipped()) check.setEnabled(not widget.outputIsSkipped()) widget.skipOutputChanged.connect(partial(skipOutputChanged, widget, check)) self.layoutMain.insertWidget(self.layoutMain.count() - 1, check) self.checkBoxes[output.name()] = check widget.setToolTip(param.toolTip()) self.outputWidgets[output.name()] = widget for wrapper in list(self.wrappers.values()): wrapper.postInitialize(list(self.wrappers.values()))
def initWidgets(self): super().initWidgets() widget_context = QgsProcessingParameterWidgetContext() widget_context.setProject(QgsProject.instance()) if iface is not None: widget_context.setMapCanvas(iface.mapCanvas()) widget_context.setBrowserModel(iface.browserModel()) widget_context.setActiveLayer(iface.activeLayer()) widget_context.setMessageBar(self.parent().messageBar()) if isinstance(self.algorithm(), QgsProcessingModelAlgorithm): widget_context.setModel(self.algorithm()) in_place_input_parameter_name = 'INPUT' if hasattr(self.algorithm(), 'inputParameterName'): in_place_input_parameter_name = self.algorithm( ).inputParameterName() # Create widgets and put them in layouts for param in self.algorithm().parameterDefinitions(): if param.flags() & QgsProcessingParameterDefinition.FlagHidden: continue if param.isDestination(): continue else: if self.in_place and param.name() in ( in_place_input_parameter_name, 'OUTPUT'): # don't show the input/output parameter widgets in in-place mode # we still need to CREATE them, because other wrappers may need to interact # with them (e.g. those parameters which need the input layer for field # selections/crs properties/etc) self.wrappers[ param.name()] = QgsProcessingHiddenWidgetWrapper( param, QgsProcessingGui.Standard, self) self.wrappers[param.name()].setLinkedVectorLayer( self.active_layer) continue wrapper = WidgetWrapperFactory.create_wrapper( param, self.parent()) wrapper.setWidgetContext(widget_context) wrapper.registerProcessingContextGenerator( self.context_generator) wrapper.registerProcessingParametersGenerator(self) self.wrappers[param.name()] = wrapper # For compatibility with 3.x API, we need to check whether the wrapper is # the deprecated WidgetWrapper class. If not, it's the newer # QgsAbstractProcessingParameterWidgetWrapper class # TODO QGIS 4.0 - remove is_python_wrapper = issubclass(wrapper.__class__, WidgetWrapper) stretch = 0 if not is_python_wrapper: widget = wrapper.createWrappedWidget( self.processing_context) stretch = wrapper.stretch() else: widget = wrapper.widget if widget is not None: if is_python_wrapper: widget.setToolTip(param.toolTip()) label = None if not is_python_wrapper: label = wrapper.createWrappedLabel() else: label = wrapper.label if label is not None: self.addParameterLabel(param, label) elif is_python_wrapper: desc = param.description() if isinstance(param, QgsProcessingParameterExtent): desc += self.tr(' (xmin, xmax, ymin, ymax)') if param.flags( ) & QgsProcessingParameterDefinition.FlagOptional: desc += self.tr(' [optional]') widget.setText(desc) self.addParameterWidget(param, widget, stretch) for output in self.algorithm().destinationParameterDefinitions(): if output.flags() & QgsProcessingParameterDefinition.FlagHidden: continue if self.in_place and output.name() in ( in_place_input_parameter_name, 'OUTPUT'): continue wrapper = QgsGui.processingGuiRegistry( ).createParameterWidgetWrapper(output, QgsProcessingGui.Standard) wrapper.setWidgetContext(widget_context) wrapper.registerProcessingContextGenerator(self.context_generator) wrapper.registerProcessingParametersGenerator(self) self.wrappers[output.name()] = wrapper label = wrapper.createWrappedLabel() if label is not None: self.addOutputLabel(label) widget = wrapper.createWrappedWidget(self.processing_context) self.addOutputWidget(widget, wrapper.stretch()) # def skipOutputChanged(widget, checkbox, skipped): # TODO # enabled = not skipped # # # Do not try to open formats that are write-only. # value = widget.value() # if value and isinstance(value, QgsProcessingOutputLayerDefinition) and isinstance(output, ( # QgsProcessingParameterFeatureSink, QgsProcessingParameterVectorDestination)): # filename = value.sink.staticValue() # if filename not in ('memory:', ''): # path, ext = os.path.splitext(filename) # format = QgsVectorFileWriter.driverForExtension(ext) # drv = gdal.GetDriverByName(format) # if drv: # if drv.GetMetadataItem(gdal.DCAP_OPEN) is None: # enabled = False # # checkbox.setEnabled(enabled) # checkbox.setChecked(enabled) for wrapper in list(self.wrappers.values()): wrapper.postInitialize(list(self.wrappers.values()))
def initWidgets(self): super().initWidgets() widget_context = QgsProcessingParameterWidgetContext() widget_context.setProject(QgsProject.instance()) if iface is not None: widget_context.setMapCanvas(iface.mapCanvas()) widget_context.setBrowserModel(iface.browserModel()) widget_context.setMessageBar(self.parent().messageBar()) if isinstance(self.algorithm(), QgsProcessingModelAlgorithm): widget_context.setModel(self.algorithm()) # Create widgets and put them in layouts for param in self.algorithm().parameterDefinitions(): if param.flags() & QgsProcessingParameterDefinition.FlagHidden: continue if param.isDestination(): continue else: wrapper = WidgetWrapperFactory.create_wrapper( param, self.parent()) wrapper.setWidgetContext(widget_context) wrapper.registerProcessingContextGenerator( self.context_generator) self.wrappers[param.name()] = wrapper # For compatibility with 3.x API, we need to check whether the wrapper is # the deprecated WidgetWrapper class. If not, it's the newer # QgsAbstractProcessingParameterWidgetWrapper class # TODO QGIS 4.0 - remove is_python_wrapper = issubclass(wrapper.__class__, WidgetWrapper) if not is_python_wrapper: widget = wrapper.createWrappedWidget( self.processing_context) else: widget = wrapper.widget if self.in_place and param.name() in ('INPUT', 'OUTPUT'): # don't show the input/output parameter widgets in in-place mode # we still need to CREATE them, because other wrappers may need to interact # with them (e.g. those parameters which need the input layer for field # selections/crs properties/etc) continue if widget is not None: if is_python_wrapper: widget.setToolTip(param.toolTip()) label = None if not is_python_wrapper: label = wrapper.createWrappedLabel() else: label = wrapper.label if label is not None: self.addParameterLabel(param, label) elif is_python_wrapper: desc = param.description() if isinstance(param, QgsProcessingParameterExtent): desc += self.tr(' (xmin, xmax, ymin, ymax)') if param.flags( ) & QgsProcessingParameterDefinition.FlagOptional: desc += self.tr(' [optional]') widget.setText(desc) self.addParameterWidget(param, widget) for output in self.algorithm().destinationParameterDefinitions(): if output.flags() & QgsProcessingParameterDefinition.FlagHidden: continue if self.in_place and param.name() in ('INPUT', 'OUTPUT'): continue label = QLabel(output.description()) widget = QgsProcessingLayerOutputDestinationWidget(output, False) widget.setWidgetContext(widget_context) self.addOutputLabel(label) self.addOutputWidget(widget) if isinstance(output, (QgsProcessingParameterRasterDestination, QgsProcessingParameterFeatureSink, QgsProcessingParameterVectorDestination)): check = QCheckBox() check.setText( QCoreApplication.translate( 'ParametersPanel', 'Open output file after running algorithm')) def skipOutputChanged(widget, checkbox, skipped): enabled = not skipped # Do not try to open formats that are write-only. value = widget.value() if value and isinstance( value, QgsProcessingOutputLayerDefinition) and isinstance( output, (QgsProcessingParameterFeatureSink, QgsProcessingParameterVectorDestination)): filename = value.sink.staticValue() if filename not in ('memory:', ''): path, ext = os.path.splitext(filename) format = QgsVectorFileWriter.driverForExtension( ext) drv = gdal.GetDriverByName(format) if drv: if drv.GetMetadataItem(gdal.DCAP_OPEN) is None: enabled = False checkbox.setEnabled(enabled) checkbox.setChecked(enabled) check.setChecked(not widget.outputIsSkipped()) check.setEnabled(not widget.outputIsSkipped()) widget.skipOutputChanged.connect( partial(skipOutputChanged, widget, check)) self.addOutputWidget(check) self.checkBoxes[output.name()] = check self.outputWidgets[output.name()] = widget for wrapper in list(self.wrappers.values()): wrapper.postInitialize(list(self.wrappers.values()))