def test_settings_entry_flag(self): settingsKey = "settingsEntryFlag/flagValue" settingsKeyComplete = self.pluginName + "/" + settingsKey pointAndLine = QgsMapLayerProxyModel.Filters(QgsMapLayerProxyModel.PointLayer | QgsMapLayerProxyModel.LineLayer) pointAndPolygon = QgsMapLayerProxyModel.Filters(QgsMapLayerProxyModel.PointLayer | QgsMapLayerProxyModel.PolygonLayer) hasGeometry = QgsMapLayerProxyModel.Filters(QgsMapLayerProxyModel.HasGeometry) # Make sure settings does not exists QgsSettings().remove(settingsKeyComplete, QgsSettings.Plugins) description = "Flag value functionality test" settingsEntryFlag = QgsSettingsEntryFlag(settingsKey, self.pluginName, pointAndLine, description) # Check default value self.assertEqual(settingsEntryFlag.defaultValue(), pointAndLine) # Check set value success = settingsEntryFlag.setValue(hasGeometry) self.assertEqual(success, True) qgsSettingsValue = QgsSettings().flagValue(settingsKeyComplete, pointAndLine, QgsSettings.Plugins) self.assertEqual(qgsSettingsValue, hasGeometry) # Check get value QgsSettings().setValue(settingsKeyComplete, 'PointLayer|PolygonLayer', QgsSettings.Plugins) self.assertEqual(settingsEntryFlag.value(), pointAndPolygon) # Check settings type self.assertEqual(settingsEntryFlag.settingsType(), QgsSettingsEntryBase.SettingsType.Flag)
def test_flagValue(self): pointAndLine = QgsMapLayerProxyModel.Filters(QgsMapLayerProxyModel.PointLayer | QgsMapLayerProxyModel.LineLayer) pointAndPolygon = QgsMapLayerProxyModel.Filters(QgsMapLayerProxyModel.PointLayer | QgsMapLayerProxyModel.PolygonLayer) self.settings.setValue('flag', 'PointLayer|PolygonLayer') self.assertEqual(self.settings.flagValue('flag', pointAndLine), pointAndPolygon) self.settings.setValue('flag', 'dummy_setting') self.assertEqual(self.settings.flagValue('flag', pointAndLine), pointAndLine) self.assertEqual(type(self.settings.flagValue('enum', pointAndLine)), QgsMapLayerProxyModel.Filters)
def __add_layer_row( self, row_index: int, layer_resource: Optional[SnapshotResource] = None, layer: Optional[QgsVectorLayer] = None, ) -> None: row_uuid = str(uuid.uuid4()) b_rm = QPushButton( text="", icon=QgsApplication.getThemeIcon("/mActionRemove.svg")) b_rm.setToolTip(tr("Remove row")) b_rm.clicked.connect(lambda _: self.__remove_row( row_uuid, self.layer_rows, self.layer_grid)) bx_layer = QgsMapLayerComboBox() bx_layer.setFilters( QgsMapLayerProxyModel.Filters( QgsMapLayerProxyModel.Filter.PointLayer | QgsMapLayerProxyModel.Filter.PolygonLayer | QgsMapLayerProxyModel.Filter.LineLayer)) cb_primary = QCheckBox(text="") combo_box_shape = QComboBox() combo_box_shape.addItems(("automatic", "circle", "square", "line")) # Fill values if layer_resource and layer: bx_layer.setLayer(layer) cb_primary.setChecked(layer_resource.primary) combo_box_shape.setCurrentText(layer_resource.shape) row = { "layer": bx_layer, "primary": cb_primary, "legend_shape": combo_box_shape, "rm": b_rm, "feedback": LoggerProcessingFeedBack(use_logger=True), "context": QgsProcessingContext(), } self.layer_rows[row_uuid] = row self.layer_grid.addWidget(b_rm, row_index, 0) self.layer_grid.addWidget(bx_layer, row_index, 1) self.layer_grid.addWidget(cb_primary, row_index, 2) self.layer_grid.addWidget(combo_box_shape, row_index, 3)
def _add_layer_row(self, row_index: int): row_uuid = str(uuid.uuid4()) b_rm = QPushButton(text='', icon=QgsApplication.getThemeIcon('/mActionRemove.svg')) b_rm.setToolTip(tr('Remove row')) b_rm.clicked.connect(lambda _: self._remove_row(row_uuid, self.layer_rows, self.layer_grid)) bx_layer = QgsMapLayerComboBox() bx_layer.setFilters(QgsMapLayerProxyModel.Filters(QgsMapLayerProxyModel.Filter.PointLayer | QgsMapLayerProxyModel.Filter.PolygonLayer | QgsMapLayerProxyModel.Filter.LineLayer)) cb_primary = QCheckBox(text='') row = { 'layer': bx_layer, 'primary': cb_primary, 'rm': b_rm, 'feedback': LoggerProcessingFeedBack(use_logger=True), 'context': QgsProcessingContext() } self.layer_rows[row_uuid] = row self.layer_grid.addWidget(b_rm, row_index, 0) self.layer_grid.addWidget(bx_layer, row_index, 1) self.layer_grid.addWidget(cb_primary, row_index, 2)
def createWidget(self): if self.dialogType == DIALOG_STANDARD: widget = QWidget() layout = QHBoxLayout() layout.setMargin(0) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(2) self.combo = QgsMapLayerComboBox() layout.addWidget(self.combo) btn = QToolButton() btn.setText('...') btn.setToolTip(self.tr("Select file")) btn.clicked.connect(self.selectFile) layout.addWidget(btn) widget.setLayout(layout) filters = QgsMapLayerProxyModel.Filters() if self.param.datatype == [-1] or -1 in self.param.datatype: filters = QgsMapLayerProxyModel.HasGeometry if QgsWkbTypes.PointGeometry in self.param.datatype: filters |= QgsMapLayerProxyModel.PointLayer if QgsWkbTypes.LineGeometry in self.param.datatype: filters |= QgsMapLayerProxyModel.LineLayer if QgsWkbTypes.PolygonGeometry in self.param.datatype: filters |= QgsMapLayerProxyModel.PolygonLayer if self.param.optional: self.combo.setAllowEmptyLayer(True) if ProcessingConfig.getSetting(ProcessingConfig.SHOW_CRS_DEF): self.combo.setShowCrs(True) self.combo.setFilters(filters) self.combo.setExcludedProviders(['grass']) self.combo.currentIndexChanged.connect(lambda: self.widgetValueHasChanged.emit(self)) self.combo.currentTextChanged.connect(lambda: self.widgetValueHasChanged.emit(self)) return widget elif self.dialogType == DIALOG_BATCH: widget = BatchInputSelectionPanel(self.param, self.row, self.col, self.dialog) widget.valueChanged.connect(lambda: self.widgetValueHasChanged.emit(self)) return widget else: self.combo = QComboBox() layers = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector) self.combo.setEditable(True) for layer in layers: self.combo.addItem(self.dialog.resolveValueDescription(layer), layer) if self.param.optional: self.combo.setEditText("") widget = QWidget() layout = QHBoxLayout() layout.setMargin(0) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(2) layout.addWidget(self.combo) btn = QToolButton() btn.setText('...') btn.setToolTip(self.tr("Select file")) btn.clicked.connect(self.selectFile) layout.addWidget(btn) widget.setLayout(layout) return widget