def updateUiManyToOnePolymorphic(self): layerFeature = dict() for relation in self._polymorphicRelation.generateRelations(): layer = relation.referencingLayer() request = relation.getRelatedFeaturesRequest(self.feature()) finalLayer = relation.referencedLayer() for feature in layer.getFeatures(request): if finalLayer in layerFeature: layerFeature[finalLayer].append(feature) else: layerFeature[finalLayer] = [feature] for layer in layerFeature: treeWidgetItemLayer = QTreeWidgetItem(self.mFeaturesTreeWidget, [layer.name()]) treeWidgetItemLayer.setData(0, TreeWidgetItemRole.Type, TreeWidgetItemType.Layer) treeWidgetItemLayer.setData(0, TreeWidgetItemRole.Layer, layer) treeWidgetItemLayer.setIcon(0, QgsIconUtils.iconForLayer(layer)) for feature in layerFeature[layer]: treeWidgetItem = QTreeWidgetItem(treeWidgetItemLayer, [ QgsVectorLayerUtils.getFeatureDisplayString( layerFeature, feature) ]) treeWidgetItem.setData(0, TreeWidgetItemRole.Type, TreeWidgetItemType.Feature) treeWidgetItem.setData(0, TreeWidgetItemRole.Layer, layer) treeWidgetItem.setData(0, TreeWidgetItemRole.Feature, feature) treeWidgetItemLayer.setExpanded(True)
def updateUiManyToOne(self): layer = self.relation().referencingLayer() request = self.relation().getRelatedFeaturesRequest(self.feature()) for feature in layer.getFeatures(request): treeWidgetItem = QTreeWidgetItem( self.mFeaturesTreeWidget, [QgsVectorLayerUtils.getFeatureDisplayString(layer, feature)]) treeWidgetItem.setData(0, TreeWidgetItemRole.Type, TreeWidgetItemType.Feature) treeWidgetItem.setData(0, TreeWidgetItemRole.Layer, layer) treeWidgetItem.setData(0, TreeWidgetItemRole.Feature, feature)
def updateUiManyToManyPolymorphic(self): layer = self.relation().referencingLayer() request = self.relation().getRelatedFeaturesRequest(self.feature()) layerFeature = dict() for linkFeature in layer.getFeatures(request): for relation in self._polymorphicRelation.generateRelations(): referencedFeatureRequest = relation.getReferencedFeatureRequest( linkFeature) filterExpression = referencedFeatureRequest.filterExpression() nmRequest = QgsFeatureRequest() nmRequest.setFilterExpression(filterExpression.expression()) finalLayer = relation.referencedLayer() for finalFeature in finalLayer.getFeatures(nmRequest): features = finalFeature, linkFeature if finalLayer in layerFeature: layerFeature[finalLayer].append(features) else: layerFeature[finalLayer] = [features] for layer in layerFeature: treeWidgetItemLayer = QTreeWidgetItem(self.mFeaturesTreeWidget, [layer.name()]) treeWidgetItemLayer.setData(0, TreeWidgetItemRole.Type, TreeWidgetItemType.Layer) treeWidgetItemLayer.setData(0, TreeWidgetItemRole.Layer, layer) treeWidgetItemLayer.setIcon(0, QgsIconUtils.iconForLayer(layer)) for feature, linkFeature in layerFeature[layer]: treeWidgetItem = QTreeWidgetItem(treeWidgetItemLayer, [ QgsVectorLayerUtils.getFeatureDisplayString( layer, feature) ]) treeWidgetItem.setData(0, TreeWidgetItemRole.Type, TreeWidgetItemType.Feature) treeWidgetItem.setData(0, TreeWidgetItemRole.Layer, layer) treeWidgetItem.setData(0, TreeWidgetItemRole.Feature, feature) treeWidgetItem.setData(0, TreeWidgetItemRole.LinkFeature, linkFeature) treeWidgetItemLayer.setExpanded(True)
def updateUiManyToMany(self): layer = self.relation().referencingLayer() request = self.relation().getRelatedFeaturesRequest(self.feature()) filters = [] for feature in layer.getFeatures(request): referencedFeatureRequest = self.nmRelation( ).getReferencedFeatureRequest(feature) filterExpression = referencedFeatureRequest.filterExpression() filters.append("(" + filterExpression.expression() + ")") nmRequest = QgsFeatureRequest() nmRequest.setFilterExpression(" OR ".join(filters)) finalLayer = self.nmRelation().referencedLayer() for finalFeature in finalLayer.getFeatures(nmRequest): treeWidgetItem = QTreeWidgetItem(self.mFeaturesTreeWidget, [ QgsVectorLayerUtils.getFeatureDisplayString( finalLayer, finalFeature) ]) treeWidgetItem.setData(0, TreeWidgetItemRole.Type, TreeWidgetItemType.Feature) treeWidgetItem.setData(0, TreeWidgetItemRole.Layer, finalLayer) treeWidgetItem.setData(0, TreeWidgetItemRole.Feature, feature)