mirror of https://gitlab.com/pamhyr/pamhyr2
geometry: Prepare duplicate command.
parent
d35f26f362
commit
25b8ff6adf
|
|
@ -23,9 +23,6 @@ class Reach:
|
||||||
self._guidelines_is_valid = False
|
self._guidelines_is_valid = False
|
||||||
self._guidelines = {}
|
self._guidelines = {}
|
||||||
|
|
||||||
# Copy/Paste
|
|
||||||
self.__list_copied_profiles = []
|
|
||||||
|
|
||||||
def profile(self, i):
|
def profile(self, i):
|
||||||
"""Returns profile at index i
|
"""Returns profile at index i
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -367,6 +367,24 @@ class GeometryWindow(QMainWindow, WindowToolKit):
|
||||||
self._tablemodel.move_row_down(row)
|
self._tablemodel.move_row_down(row)
|
||||||
self.select_current_profile()
|
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):
|
def copy(self):
|
||||||
rows = self.tableView\
|
rows = self.tableView\
|
||||||
.selectionModel()\
|
.selectionModel()\
|
||||||
|
|
|
||||||
|
|
@ -128,14 +128,33 @@ class PasteCommand(QUndoCommand):
|
||||||
profiles
|
profiles
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
self._profiles.reverse()
|
||||||
|
|
||||||
def undo(self):
|
def undo(self):
|
||||||
self._reach.delete_profiles(self._profiles)
|
self._reach.delete_profiles(self._profiles)
|
||||||
|
|
||||||
def redo(self):
|
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()
|
self._profiles.reverse()
|
||||||
|
|
||||||
for pro in self._profiles:
|
def undo(self):
|
||||||
self._reach.insert_profile(self._row, pro)
|
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.endMoveRows()
|
||||||
self.layoutChanged.emit()
|
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):
|
def paste(self, row, header, data):
|
||||||
if row > self._reach.number_profiles:
|
if row > self._reach.number_profiles:
|
||||||
return
|
return
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue