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 testMeshLayer(self): m = QgsMapLayerProxyModel() l1 = create_mesh_layer("l1") QgsProject.instance().addMapLayer(l1) l2 = create_layer('l2') QgsProject.instance().addMapLayer(l2) m.setFilters(QgsMapLayerProxyModel.MeshLayer) self.assertEqual(m.filters(), QgsMapLayerProxyModel.MeshLayer) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'l1') self.assertTrue(m.acceptsLayer(l1)) self.assertFalse(m.acceptsLayer(l2))
def _get_view_config(self): # TODO Load help_strings from wizard_config help_strings = HelpStrings() refactor_fields_filter = self._wizard_config[WIZARD_MAP_LAYER_PROXY_MODEL] \ if WIZARD_MAP_LAYER_PROXY_MODEL in self._wizard_config \ else QgsMapLayerProxyModel.Filter(QgsMapLayerProxyModel.NoGeometry) return { WIZARD_STRINGS: self._wizard_config[WIZARD_STRINGS], WIZARD_REFACTOR_FIELDS_RECENT_MAPPING_OPTIONS: self.refactor_field_mapping, WIZARD_REFACTOR_FIELDS_LAYER_FILTERS: refactor_fields_filter, WIZARD_HELP_PAGES: self._wizard_config[WIZARD_HELP_PAGES], WIZARD_HELP: self._wizard_config[WIZARD_HELP], WIZARD_FINISH_BUTTON_TEXT: { EnumFeatureCreationMode.REFACTOR_FIELDS: QCoreApplication.translate("WizardTranslations", "Import"), EnumFeatureCreationMode.MANUALLY: QCoreApplication.translate("WizardTranslations", "Create") }, WIZARD_SELECT_SOURCE_HELP: { EnumFeatureCreationMode.REFACTOR_FIELDS: help_strings.get_refactor_help_string(self._db, self._editing_layer), EnumFeatureCreationMode.MANUALLY: self._wizard_config[WIZARD_HELP_PAGES][WIZARD_HELP1] } }
def init_gui(self): # Auxiliary data to set nonlinear next pages self.pages = [self.wizardPage1, self.wizardPage2] self.dict_pages_ids = { self.pages[idx]: pid for idx, pid in enumerate(self.pageIds()) } self.restore_settings() self.rad_create_manually.toggled.connect(self.adjust_page_1_controls) self.rad_conventional.toggled.connect( self.building_unit_qualification_option_changed) self.building_unit_qualification_option_changed() # Initialize it self.button(QWizard.FinishButton).clicked.connect(self.finished_dialog) self.button(QWizard.HelpButton).clicked.connect(self.show_help) self.currentIdChanged.connect(self.current_page_changed) self.rejected.connect(self.close_wizard) self.mMapLayerComboBox.setFilters( QgsMapLayerProxyModel.Filter( self.wizard_config[WIZARD_MAP_LAYER_PROXY_MODEL])) self.txt_help_page_2.setHtml( self.wizard_config[WIZARD_HELP_PAGES][WIZARD_HELP1]) self.wizardPage2.setButtonText( QWizard.FinishButton, QCoreApplication.translate("WizardTranslations", "Import"))
def init_gui(self): self.restore_settings() self.rad_create_manually.toggled.connect(self.adjust_page_1_controls) self.adjust_page_1_controls() self.button(QWizard.FinishButton).clicked.connect(self.finished_dialog) self.button(QWizard.HelpButton).clicked.connect(self.show_help) self.rejected.connect(self.close_wizard) self.mMapLayerComboBox.setFilters(QgsMapLayerProxyModel.Filter(self.wizard_config[WIZARD_MAP_LAYER_PROXY_MODEL]))
def testMeshLayer(self): m = QgsMapLayerProxyModel() l1 = create_mesh_layer("l1") QgsProject.instance().addMapLayer(l1) l2 = create_layer('l2') QgsProject.instance().addMapLayer(l2) m.setFilters(QgsMapLayerProxyModel.MeshLayer) self.assertEqual(m.filters(), QgsMapLayerProxyModel.MeshLayer) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'l1')
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 testFilterByLayer(self): """ test filtering by layer""" QgsProject.instance().clear() m = QgsMapLayerProxyModel() l1 = QgsVectorLayer("Point?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'layer 1', "memory") QgsProject.instance().addMapLayer(l1) l2 = QgsVectorLayer("Polygon?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'lAyEr 2', "memory") QgsProject.instance().addMapLayer(l2) l3 = QgsVectorLayer("None?field=fldtxt:string&field=fldint:integer", 'another', "memory") QgsProject.instance().addMapLayer(l3) l4 = QgsVectorLayer("LineString?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'final layer', "memory") QgsProject.instance().addMapLayer(l4) self.assertEqual(m.rowCount(), 4) self.assertEqual(m.data(m.index(0, 0)), 'another') self.assertEqual(m.data(m.index(1, 0)), 'final layer') self.assertEqual(m.data(m.index(2, 0)), 'layer 1') self.assertEqual(m.data(m.index(3, 0)), 'lAyEr 2') m.setExceptedLayerList([l1, l3]) self.assertEqual(m.rowCount(), 2) self.assertEqual(m.data(m.index(0, 0)), 'final layer') self.assertEqual(m.data(m.index(1, 0)), 'lAyEr 2') m.setExceptedLayerIds([l2.id(), l4.id()]) self.assertEqual(m.rowCount(), 2) self.assertEqual(m.data(m.index(0, 0)), 'another') self.assertEqual(m.data(m.index(1, 0)), 'layer 1') m.setLayerWhitelist([l1]) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'layer 1') m.setExceptedLayerIds([]) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'layer 1') m.setLayerWhitelist([l2, l3]) self.assertEqual(m.rowCount(), 2) self.assertEqual(m.data(m.index(0, 0)), 'another') self.assertEqual(m.data(m.index(1, 0)), 'lAyEr 2') m.setLayerWhitelist([]) self.assertEqual(m.rowCount(), 4)
def testFilterGeometryType(self): """ test filtering by geometry type """ QgsProject.instance().clear() m = QgsMapLayerProxyModel() l1 = QgsVectorLayer( "Point?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'layer 1', "memory") QgsProject.instance().addMapLayer(l1) l2 = QgsVectorLayer( "Polygon?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'layer 2', "memory") QgsProject.instance().addMapLayer(l2) l3 = QgsVectorLayer("None?field=fldtxt:string&field=fldint:integer", 'layer 3', "memory") QgsProject.instance().addMapLayer(l3) l4 = QgsVectorLayer( "LineString?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'layer 4', "memory") QgsProject.instance().addMapLayer(l4) m.setFilters(QgsMapLayerProxyModel.PolygonLayer) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'layer 2') m.setFilters(QgsMapLayerProxyModel.PointLayer) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'layer 1') m.setFilters(QgsMapLayerProxyModel.LineLayer) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'layer 4') m.setFilters(QgsMapLayerProxyModel.NoGeometry) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'layer 3') m.setFilters(QgsMapLayerProxyModel.HasGeometry) self.assertEqual(m.rowCount(), 3) self.assertEqual(m.data(m.index(0, 0)), 'layer 1') self.assertEqual(m.data(m.index(1, 0)), 'layer 2') self.assertEqual(m.data(m.index(2, 0)), 'layer 4') m.setFilters(QgsMapLayerProxyModel.VectorLayer) self.assertEqual(m.rowCount(), 4) self.assertEqual(m.data(m.index(0, 0)), 'layer 1') self.assertEqual(m.data(m.index(1, 0)), 'layer 2') self.assertEqual(m.data(m.index(2, 0)), 'layer 3') self.assertEqual(m.data(m.index(3, 0)), 'layer 4') m.setFilters(QgsMapLayerProxyModel.PluginLayer) self.assertEqual(m.rowCount(), 0) m.setFilters(QgsMapLayerProxyModel.RasterLayer) self.assertEqual(m.rowCount(), 0)
def testGettersSetters(self): """ test model getters/setters """ m = QgsMapLayerProxyModel() l1 = create_layer('l1') QgsProject.instance().addMapLayer(l1) l2 = create_layer('l2') QgsProject.instance().addMapLayer(l2) m.setFilters(QgsMapLayerProxyModel.LineLayer | QgsMapLayerProxyModel.WritableLayer) self.assertEqual( m.filters(), QgsMapLayerProxyModel.LineLayer | QgsMapLayerProxyModel.WritableLayer) m.setExceptedLayerIds([l2.id()]) self.assertEqual(m.exceptedLayerIds(), [l2.id()]) m.setExceptedLayerList([l2]) self.assertEqual(m.exceptedLayerList(), [l2]) m.setExcludedProviders(['a', 'b']) self.assertEqual(m.excludedProviders(), ['a', 'b']) m.setFilterString('c') self.assertEqual(m.filterString(), 'c')
def testFilterString(self): """ test filtering by string""" QgsProject.instance().clear() m = QgsMapLayerProxyModel() l1 = QgsVectorLayer( "Point?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'layer 1', "memory") QgsProject.instance().addMapLayer(l1) l2 = QgsVectorLayer( "Polygon?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'lAyEr 2', "memory") QgsProject.instance().addMapLayer(l2) l3 = QgsVectorLayer("None?field=fldtxt:string&field=fldint:integer", 'another', "memory") QgsProject.instance().addMapLayer(l3) l4 = QgsVectorLayer( "LineString?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'final layer', "memory") QgsProject.instance().addMapLayer(l4) m.setFilterString('layer') self.assertEqual(m.rowCount(), 3) self.assertEqual(m.data(m.index(0, 0)), 'final layer') self.assertEqual(m.data(m.index(1, 0)), 'layer 1') self.assertEqual(m.data(m.index(2, 0)), 'lAyEr 2') m.setFilterString('') self.assertEqual(m.rowCount(), 4)
def testFilterGeometryType(self): """ test filtering by geometry type """ QgsProject.instance().clear() m = QgsMapLayerProxyModel() l1 = QgsVectorLayer("Point?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'layer 1', "memory") QgsProject.instance().addMapLayer(l1) l2 = QgsVectorLayer("Polygon?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'layer 2', "memory") QgsProject.instance().addMapLayer(l2) l3 = QgsVectorLayer("None?field=fldtxt:string&field=fldint:integer", 'layer 3', "memory") QgsProject.instance().addMapLayer(l3) l4 = QgsVectorLayer("LineString?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'layer 4', "memory") QgsProject.instance().addMapLayer(l4) m.setFilters(QgsMapLayerProxyModel.PolygonLayer) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'layer 2') m.setFilters(QgsMapLayerProxyModel.PointLayer) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'layer 1') m.setFilters(QgsMapLayerProxyModel.LineLayer) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'layer 4') m.setFilters(QgsMapLayerProxyModel.NoGeometry) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'layer 3') m.setFilters(QgsMapLayerProxyModel.HasGeometry) self.assertEqual(m.rowCount(), 3) self.assertEqual(m.data(m.index(0, 0)), 'layer 1') self.assertEqual(m.data(m.index(1, 0)), 'layer 2') self.assertEqual(m.data(m.index(2, 0)), 'layer 4') m.setFilters(QgsMapLayerProxyModel.VectorLayer) self.assertEqual(m.rowCount(), 4) self.assertEqual(m.data(m.index(0, 0)), 'layer 1') self.assertEqual(m.data(m.index(1, 0)), 'layer 2') self.assertEqual(m.data(m.index(2, 0)), 'layer 3') self.assertEqual(m.data(m.index(3, 0)), 'layer 4') m.setFilters(QgsMapLayerProxyModel.PluginLayer) self.assertEqual(m.rowCount(), 0) m.setFilters(QgsMapLayerProxyModel.RasterLayer) self.assertEqual(m.rowCount(), 0)
def testGettersSetters(self): """ test model getters/setters """ m = QgsMapLayerProxyModel() l1 = create_layer('l1') QgsProject.instance().addMapLayer(l1) l2 = create_layer('l2') QgsProject.instance().addMapLayer(l2) m.setFilters(QgsMapLayerProxyModel.LineLayer | QgsMapLayerProxyModel.WritableLayer) self.assertEqual(m.filters(), QgsMapLayerProxyModel.LineLayer | QgsMapLayerProxyModel.WritableLayer) m.setExceptedLayerIds([l2.id()]) self.assertEqual(m.exceptedLayerIds(), [l2.id()]) m.setExceptedLayerList([l2]) self.assertEqual(m.exceptedLayerList(), [l2]) m.setExcludedProviders(['a', 'b']) self.assertEqual(m.excludedProviders(), ['a', 'b']) m.setFilterString('c') self.assertEqual(m.filterString(), 'c')
def testFilterString(self): """ test filtering by string""" QgsProject.instance().clear() m = QgsMapLayerProxyModel() l1 = QgsVectorLayer("Point?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'layer 1', "memory") QgsProject.instance().addMapLayer(l1) l2 = QgsVectorLayer("Polygon?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'lAyEr 2', "memory") QgsProject.instance().addMapLayer(l2) l3 = QgsVectorLayer("None?field=fldtxt:string&field=fldint:integer", 'another', "memory") QgsProject.instance().addMapLayer(l3) l4 = QgsVectorLayer("LineString?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer", 'final layer', "memory") QgsProject.instance().addMapLayer(l4) m.setFilterString('layer') self.assertEqual(m.rowCount(), 3) self.assertEqual(m.data(m.index(0, 0)), 'final layer') self.assertEqual(m.data(m.index(1, 0)), 'layer 1') self.assertEqual(m.data(m.index(2, 0)), 'lAyEr 2') m.setFilterString('') self.assertEqual(m.rowCount(), 4)
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
def testAnnotationLayer(self): """ Test filtering annotation layers """ QgsProject.instance().clear() m = QgsMapLayerProxyModel() options = QgsAnnotationLayer.LayerOptions( QgsProject.instance().transformContext()) l1 = QgsAnnotationLayer('annotation 1', options) QgsProject.instance().addMapLayer(l1) l2 = create_layer('l2') QgsProject.instance().addMapLayer(l2) m.setFilters(QgsMapLayerProxyModel.AnnotationLayer) self.assertEqual(m.filters(), QgsMapLayerProxyModel.AnnotationLayer) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'annotation 1') self.assertTrue(m.acceptsLayer(l1)) self.assertFalse(m.acceptsLayer(l2)) m.setFilters(QgsMapLayerProxyModel.VectorLayer) self.assertEqual(m.rowCount(), 1) self.assertEqual(m.data(m.index(0, 0)), 'l2') self.assertFalse(m.acceptsLayer(l1)) self.assertTrue(m.acceptsLayer(l2)) m.setFilters(QgsMapLayerProxyModel.All) self.assertEqual(m.rowCount(), 2) self.assertEqual(m.data(m.index(0, 0)), 'annotation 1') self.assertEqual(m.data(m.index(1, 0)), 'l2') self.assertTrue(m.acceptsLayer(l1)) self.assertTrue(m.acceptsLayer(l2))