# -*- coding: utf-8 -*- from copy import deepcopy from tools import trace, timer from PyQt5.QtWidgets import ( QMessageBox, QUndoCommand, QUndoStack, ) from Model.SedimentLayer.SedimentLayer import SedimentLayer from Model.SedimentLayer.SedimentLayerList import SedimentLayerList class SetNameCommand(QUndoCommand): def __init__(self, sediment_layers_list, index, new_value): QUndoCommand.__init__(self) self._sediment_layers_list = sediment_layers_list self._index = index self._old = self._sediment_layers_list.get(self._index).name self._new = new_value def undo(self): self._sediment_layers_list.get(self._index).name = self._old def redo(self): self._sediment_layers_list.get(self._index).name = self._new class SetCommentCommand(QUndoCommand): def __init__(self, sediment_layers_list, index, new_value): QUndoCommand.__init__(self) self._sediment_layers_list = sediment_layers_list self._index = index self._old = self._sediment_layers_list.get(self._index).comment self._new = new_value def undo(self): self._sediment_layers_list.get(self._index).comment = self._old def redo(self): self._sediment_layers_list.get(self._index).comment = self._new class AddCommand(QUndoCommand): def __init__(self, sediment_layers_list, index): QUndoCommand.__init__(self) self._sediment_layers_list = sediment_layers_list self._index = index self._new = None def undo(self): self._sediment_layers_list.delete_i([self._index]) def redo(self): if self._new is None: self._new = self._sediment_layers_list.new(self._index) else: self._sediment_layers_list.insert(self._index, self._new) class DelCommand(QUndoCommand): def __init__(self, sediment_layers_list, rows): QUndoCommand.__init__(self) self._sediment_layers_list = sediment_layers_list self._rows = rows self._sl_pos = [] for row in rows: self._sl_pos.append((row, self._sediment_layers_list.get(row))) self._sl_pos.sort() def undo(self): for row, el in self._sl_pos: self._sediment_layers_list.insert(row, el) def redo(self): self._sediment_layers_list.delete_i(self._rows) class MoveCommand(QUndoCommand): def __init__(self, sediment_layers_list, up, i): QUndoCommand.__init__(self) self._sediment_layers_list = sediment_layers_list self._up = up == "up" self._i = i def undo(self): if self._up: self._sediment_layers_list.move_up(self._i) else: self._sediment_layers_list.move_down(self._i) def redo(self): if self._up: self._sediment_layers_list.move_up(self._i) else: self._sediment_layers_list.move_down(self._i)