From 8ae4daa049c5ae6edd95ffa2c468b376ac73600a Mon Sep 17 00:00:00 2001 From: Tyler Fox Date: Wed, 3 Jul 2024 16:38:29 -0700 Subject: [PATCH] Fix multi-item and group deletion --- simplexui/interfaceModel.py | 2 +- simplexui/items/group.py | 4 +++- simplexui/simplexDialog.py | 14 ++++++++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/simplexui/interfaceModel.py b/simplexui/interfaceModel.py index db47733..2d25e1e 100644 --- a/simplexui/interfaceModel.py +++ b/simplexui/interfaceModel.py @@ -168,7 +168,7 @@ def coerceIndexToRoots(indexes): The coerced list """ indexes = [i for i in indexes if i.column() == 0] - indexes = sorted(indexes, key=lambda x: x.model().itemFromIndex(x), reverse=True) + indexes = sorted(indexes, key=lambda x: x.model().itemFromIndex(x).classDepth, reverse=True) # Check each item to see if any of it's ancestors # are in the selection list. If not, it's a root roots = [] diff --git a/simplexui/items/group.py b/simplexui/items/group.py index 78e1fea..9a857e2 100644 --- a/simplexui/items/group.py +++ b/simplexui/items/group.py @@ -260,12 +260,14 @@ def delete(self): mgrs = [model.removeItemManager(self) for model in self.models] with nested(*mgrs): - gList.remove(self) + # Delete the children first # Gotta iterate over copies of the lists # as .delete removes the items from the list for item in self.items[:]: item.delete() + gList.remove(self) + @stackable def take(self, things): """Remove some items from their current groups and put them in this one diff --git a/simplexui/simplexDialog.py b/simplexui/simplexDialog.py index fd6d66f..a3e9789 100644 --- a/simplexui/simplexDialog.py +++ b/simplexui/simplexDialog.py @@ -673,13 +673,13 @@ def sliderTreeDelete(self): idxs = self.uiSliderTREE.getSelectedIndexes() roots = coerceIndexToRoots(idxs) if not roots: - QMessageBox.warning(self, "Warning", "Nothing Selected") + QMessageBox.warning(self, "Warning", "Nothing Selected in Slider tree") return roots = makeUnique([i.model().itemFromIndex(i) for i in roots]) for r in roots: if isinstance(r, Simplex): QMessageBox.warning( - self, "Warning", "Cannot delete a simplex system this way (for now)" + self, "Warning", "Cannot delete a simplex system this way" ) return @@ -692,7 +692,17 @@ def comboTreeDelete(self): """Delete some objects in the Combo tree""" idxs = self.uiComboTREE.getSelectedIndexes() roots = coerceIndexToRoots(idxs) + if not roots: + QMessageBox.warning(self, "Warning", "Nothing Selected in Combo tree") + return roots = makeUnique([i.model().itemFromIndex(i) for i in roots]) + for r in roots: + if isinstance(r, Simplex): + QMessageBox.warning( + self, "Warning", "Cannot delete a simplex system this way" + ) + return + for r in roots: r.delete() self.uiComboTREE.model().invalidateFilter()