diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index 4ef27de10fa9e87c2e81f07f8569335020f7aadf..26bb246874412d1e716eefa1a02072c8212f3298 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -99,18 +99,51 @@ class Reach: self._update_profile_numbers() - def delete(self, index: int): + def delete(self, indexes): """Delete some elements in profile list Args: - index: The index to delete + indexes: The list of index to delete Returns: Nothing. """ - self._profiles.pop(index) + profiles = set( + map( + lambda e: e[1], + filter( + lambda e: e[0] in indexes, + enumerate(self.profiles) + ) + ) + ) + + self._profiles = list( + filter( + lambda p: p not in profiles, + self.profiles + ) + ) self._update_profile_numbers() + def delete_profiles(self, profiles): + """Delete some elements in profile list + + Args: + profiles: The list of profile to delete + + Returns: + Nothing. + """ + self._profiles = list( + filter( + lambda p: p not in profiles, + self.profiles + ) + ) + self._update_profile_numbers() + + def move_up_profile(self, index: int): if index < len(self.profiles): next = index - 1 diff --git a/src/View/Geometry/ReachUndoCommand.py b/src/View/Geometry/ReachUndoCommand.py index c783587bd0b68a6322db7bafc0946008ce55aa07..62e992034a424738aa63e1e010b1c63fe2fd2c17 100644 --- a/src/View/Geometry/ReachUndoCommand.py +++ b/src/View/Geometry/ReachUndoCommand.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +from copy import deepcopy from tools import trace, timer from PyQt5.QtWidgets import ( @@ -64,9 +65,7 @@ class DelCommand(QUndoCommand): self._reach.insert_profile(row, pro) def redo(self): - row = self._rows[0] - for _ in self._rows: - self._reach.delete(row) + self._reach.delete(self._rows) class SortCommand(QUndoCommand): def __init__(self, reach, _reverse): @@ -120,11 +119,15 @@ class PasteCommand(QUndoCommand): self._reach = reach self._row = row - self._profiles = profiles + self._profiles = list( + map( + lambda p: deepcopy(p), + profiles + ) + ) def undo(self): - for ind in range(len(self._profiles)): - self._reach.delete(self._row) + self._reach.delete_profiles(self._profiles) def redo(self): self._profiles.reverse()