diff --git a/src/Model/Geometry/Profile.py b/src/Model/Geometry/Profile.py index 2a4e690bb220b65586b079754e13b16e762ffd23..ae0eef4bde634199c6bb662812606d55d94f9b22 100644 --- a/src/Model/Geometry/Profile.py +++ b/src/Model/Geometry/Profile.py @@ -140,19 +140,47 @@ class Profile(object): self._points.insert(index, point) - def delete(self, index: int): - """Delete the point at index + def delete(self, indexes: int): + """Delete points at index Args: - index: Index of point. + indexes: List of index of points. Returns: Nothing. """ - try: - self._points.pop(index) - except IndexError: - raise IndexError(f"Invalid point index: {index}") + points = set( + map( + lambda e: e[1], + filter( + lambda e: e[0] in indexes, + enumerate(self.points) + ) + ) + ) + + self._points = list( + filter( + lambda p: p not in points, + self.points + ) + ) + + def delete_points(self, points): + """Delete some elements in profile list + + Args: + points: The list of profile to delete + + Returns: + Nothing. + """ + self._points = list( + filter( + lambda p: p not in points, + self.points + ) + ) # Move diff --git a/src/View/Geometry/Profile/ProfileUndoCommand.py b/src/View/Geometry/Profile/ProfileUndoCommand.py index 5394510607ad2ef1b6182af4b1e364b038ec42bc..0797c6a530d37464ffff6aafaf627fe573d1d4f9 100644 --- a/src/View/Geometry/Profile/ProfileUndoCommand.py +++ b/src/View/Geometry/Profile/ProfileUndoCommand.py @@ -69,18 +69,15 @@ class DelCommand(QUndoCommand): self._points = [] for row in rows: - self._points.append(self._profile.point(row)) - self._points.reverse() + self._points.append((row, self._profile.point(row))) + self._points.sort() # Sort by row index def undo(self): - row = self._rows[0] - for point in self._points: + for row, point in self._points: self._profile.insert_point(row, point) def redo(self): - row = self._rows[0] - for _ in self._rows: - self._profile.delete(row) + self._profile.delete(self._rows) class SortCommand(QUndoCommand): def __init__(self, profile, column, _reverse): diff --git a/src/View/Geometry/Profile/qtableview_profile.py b/src/View/Geometry/Profile/qtableview_profile.py index d103e35b15b3a9c76ac0236f22108e408dcc07d1..7ba364e96641a4761ef53ee15f96cc1df5f696a6 100644 --- a/src/View/Geometry/Profile/qtableview_profile.py +++ b/src/View/Geometry/Profile/qtableview_profile.py @@ -201,7 +201,7 @@ class TableEditableModel(QAbstractTableModel): self.layoutChanged.emit() def remove_rows(self, rows, parent=QModelIndex()): - self.beginRemoveRows(parent, rows[0], row[-1]) + self.beginRemoveRows(parent, rows[0], rows[-1]) self._undo_stack.push( DelCommand( diff --git a/src/tools.py b/src/tools.py index c26e9fe9385102b9c5e275b2e78aedc3764ea6da..6ae8996b133570388631ba32ff365fea0674dec6 100644 --- a/src/tools.py +++ b/src/tools.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import time +import traceback from colorama import Fore from colorama import Back @@ -59,6 +60,7 @@ def timer(func): print(f"[{Fore.RED}ERROR{Style.RESET_ALL}]" + f"[{func.__module__}.{Fore.GREEN}{func.__qualname__}{Style.RESET_ALL}]: " + f"{Fore.RED}{e}{Style.RESET_ALL}") + traceback.print_exc() end_time = time.perf_counter() run_time = end_time - start_time