mirror of
https://gitlab.com/pamhyr/pamhyr2.git
synced 2026-10-30 03:20:41 +01:00
geometry: Prepare duplicate command.
This commit is contained in:
1 parent
d35f26f362
commit
25b8ff6adf
4 files changed
+54
-6
No files matched your search
@@ -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
|
||||
|
||||
|
||||
@@ -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()\
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user