geometry: Prepare duplicate command.

mesh
Pierre-Antoine Rouby 2023-04-27 09:50:09 +02:00
parent d35f26f362
commit 25b8ff6adf
4 changed files with 54 additions and 6 deletions

View File

@ -23,9 +23,6 @@ class Reach:
self._guidelines_is_valid = False
self._guidelines = {}
# Copy/Paste
self.__list_copied_profiles = []
def profile(self, i):
"""Returns profile at index i

View File

@ -367,6 +367,24 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self._tablemodel.move_row_down(row)
self.select_current_profile()
def duplicate(self):
rows = [
row.row() for row in
self.tableView.selectionModel().selectedRows()
]
profiles = []
for row in rows:
profiles.append(
self._reach.profile(row)
)
if len(profiles) == 0:
return
self._tablemodel.duplicate(rows, profiles)
self.select_current_profile()
def copy(self):
rows = self.tableView\
.selectionModel()\

View File

@ -128,14 +128,33 @@ class PasteCommand(QUndoCommand):
profiles
)
)
self._profiles.reverse()
def undo(self):
self._reach.delete_profiles(self._profiles)
def redo(self):
for profile in self._profiles:
self._reach.insert_profile(self._row, profile)
class DuplicateCommand(QUndoCommand):
def __init__(self, reach, rows, profiles):
QUndoCommand.__init__(self)
self._reach = reach
self._rows = rows
self._profiles = list(
map(
lambda p: deepcopy(p),
profiles
)
)
self._profiles.reverse()
for pro in self._profiles:
self._reach.insert_profile(self._row, pro)
def undo(self):
self._reach.delete_profiles(self._profiles)
self._profiles.reverse()
def redo(self):
for profile in self._profiles:
self._reach.insert_profile(self._rows[0], profile)

View File

@ -212,6 +212,20 @@ class TableEditableModel(QAbstractTableModel):
self.endMoveRows()
self.layoutChanged.emit()
def duplicate(self, rows, profiles):
self.layoutAboutToBeChanged.emit()
self._undo_stack.push(
DuplicateCommand(
self._reach, rows,
profiles
)
)
self.layoutAboutToBeChanged.emit()
self.layoutChanged.emit()
def paste(self, row, header, data):
if row > self._reach.number_profiles:
return