Skip to content

Commit

Permalink
Merge pull request #46 from opengisch/multiedit
Browse files Browse the repository at this point in the history
Fix multiple multiedit issues
  • Loading branch information
domi4484 authored Mar 9, 2024
2 parents 603ab7e + f27075c commit ba29415
Show file tree
Hide file tree
Showing 3 changed files with 281 additions and 38 deletions.
10 changes: 5 additions & 5 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
repos:
# Fix end of files
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
rev: v4.5.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
Expand All @@ -11,7 +11,7 @@ repos:

# Remove unused imports/variables
- repo: https://github.com/myint/autoflake
rev: v2.0.1
rev: v2.3.0
hooks:
- id: autoflake
args:
Expand All @@ -22,7 +22,7 @@ repos:

# Sort imports
- repo: https://github.com/pycqa/isort
rev: "5.12.0"
rev: "5.13.2"
hooks:
- id: isort
args:
Expand All @@ -31,7 +31,7 @@ repos:

# Black formatting
- repo: https://github.com/psf/black
rev: 23.1.0
rev: 24.2.0
hooks:
- id: black
language_version: python3
Expand All @@ -40,7 +40,7 @@ repos:

# Flake8 linter
- repo: https://github.com/pycqa/flake8
rev: 6.0.0
rev: 7.0.0
hooks:
- id: flake8
args:
Expand Down
67 changes: 34 additions & 33 deletions linking_relation_editor/gui/linking_relation_editor_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

import os
from enum import IntEnum
import copy

from qgis.core import (
Qgis,
Expand Down Expand Up @@ -426,10 +427,10 @@ def updateUiMultiEdit(self):
treeWidgetItem.addChild(treeWidgetItemChild)
featureIdsMixedValues.add(featureChildChild.id())

if treeWidgetItem in multimapChildFeatures:
multimapChildFeatures[treeWidgetItem].append(featureChildChild.id())
if id(treeWidgetItem) in multimapChildFeatures:
multimapChildFeatures[id(treeWidgetItem)].append(featureChildChild.id())
else:
multimapChildFeatures[treeWidgetItem] = [featureChildChild.id()]
multimapChildFeatures[id(treeWidgetItem)] = [featureChildChild.id()]

else:
treeWidgetItemChild = self.createMultiEditTreeWidgetItem(
Expand All @@ -453,10 +454,10 @@ def updateUiMultiEdit(self):
# See https://github.com/qgis/QGIS/pull/45703
#
if self.nmRelation().isValid():
for featureIdMixedValue in featureIdsMixedValues[:]:
for featureIdMixedValue in set(featureIdsMixedValues):
mixedValues = True
for parentTreeWidgetItem in parentTreeWidgetItems:
if featureIdMixedValue in multimapChildFeatures[parentTreeWidgetItem]:
if featureIdMixedValue in multimapChildFeatures[id(parentTreeWidgetItem)]:
mixedValues = True
break

Expand Down Expand Up @@ -553,7 +554,7 @@ def addFeatureGeometry(self):
self.editorContext().mainMessageBar().pushItem(self.mMessageBarItem)

def deleteSelectedFeatures(self):
self.deleteFeatures(self.selectedChildFeatureIds())
self.deleteFeatures(list(self.selectedChildFeatureIds()))

def duplicateFeatures(self, fids):
layer = self.relation().referencingLayer()
Expand Down Expand Up @@ -689,35 +690,35 @@ def multiEditItemSelectionChanged(self):
if len(selectedItems) == 1 and len(self.mMultiEditPreviousSelectedItems) <= 1:
selectedItem = selectedItems[0]
if selectedItem.data(0, self.MultiEditTreeWidgetRole.FeatureType) == self.MultiEditFeatureType.Child:
self.mMultiEditTreeWidget.blockSignals(True)

featureIdSelectedItem = selectedItem.data(0, self.MultiEditTreeWidgetRole.FeatureId)

for indexTopLevelItem in range(self.mMultiEditTreeWidget.topLevelItemCount()):
treeWidgetTopLevelItem = self.mMultiEditTreeWidget.topLevelItem(indexTopLevelItem)

for indexItem in range(treeWidgetTopLevelItem.childCount()):
treeWidgetItem = treeWidgetTopLevelItem.child(indexItem)

if (
treeWidgetItem.data(0, self.MultiEditTreeWidgetRole.FeatureType)
!= self.MultiEditFeatureType.Child
):
QgsLogger.warning(self.tr("Not a child item"))
continue

featureIdCurrentItem = treeWidgetItem.data(0, self.MultiEditTreeWidgetRole.FeatureId)
if self.nmRelation().isValid():
if featureIdSelectedItem == featureIdCurrentItem:
treeWidgetItem.setSelected(True)
else:
if featureIdSelectedItem not in self.mMultiEdit1NJustAddedIds:
break
if featureIdSelectedItem in self.mMultiEdit1NJustAddedIds:
self.mMultiEditTreeWidget.blockSignals(True)
for indexTopLevelItem in range(self.mMultiEditTreeWidget.topLevelItemCount()):
treeWidgetTopLevelItem = self.mMultiEditTreeWidget.topLevelItem(indexTopLevelItem)

if featureIdCurrentItem not in self.mMultiEdit1NJustAddedIds:
treeWidgetItem.setSelected(True)

self.mMultiEditTreeWidget.blockSignals(False)
for indexItem in range(treeWidgetTopLevelItem.childCount()):
treeWidgetItem = treeWidgetTopLevelItem.child(indexItem)

if (
treeWidgetItem.data(0, self.MultiEditTreeWidgetRole.FeatureType)
!= self.MultiEditFeatureType.Child
):
QgsLogger.warning(self.tr("Not a child item"))
continue

featureIdCurrentItem = treeWidgetItem.data(0, self.MultiEditTreeWidgetRole.FeatureId)
if self.nmRelation().isValid():
if featureIdSelectedItem == featureIdCurrentItem:
treeWidgetItem.setSelected(True)
else:
if featureIdSelectedItem not in self.mMultiEdit1NJustAddedIds:
break

if featureIdCurrentItem in self.mMultiEdit1NJustAddedIds:
treeWidgetItem.setSelected(True)

self.mMultiEditTreeWidget.blockSignals(False)

self.mMultiEditPreviousSelectedItems = selectedItems
self.updateButtons()
Expand Down Expand Up @@ -757,7 +758,7 @@ def showContextMenu(self, menu, fid):
qAction.triggered.connect(lambda state, fid=fid: self.unlinkFeature(fid))

def unlinkSelectedFeatures(self):
self.unlinkFeatures(self.selectedChildFeatureIds())
self.unlinkFeatures(list(self.selectedChildFeatureIds()))

def zoomToSelectedFeatures(self):
if self.editorContext().mapCanvas():
Expand Down
Loading

0 comments on commit ba29415

Please sign in to comment.