Reservoir: Fix index for add and delete undo command.

scenarios
Pierre-Antoine 2025-09-09 10:44:40 +02:00
parent 89a5d78ced
commit 05f3f0fc7e
2 changed files with 53 additions and 30 deletions

View File

@ -38,7 +38,7 @@ from View.Tools.PamhyrTable import PamhyrTableModel
from View.Reservoir.UndoCommand import (
SetNameCommand, SetNodeCommand,
AddCommand, DelCommand, PasteCommand,
AddCommand, DelCommand,
)
logger = logging.getLogger()
@ -103,6 +103,19 @@ class TableModel(PamhyrTableModel):
def _setup_lst(self):
self._lst = self._data.reservoir
def get_true_data_row(self, row):
resvervoir = self._lst.get(row)
return next(
map(
lambda e: e[0],
filter(
lambda e: e[1] == resvervoir,
enumerate(self._lst.lst)
)
), 0
)
def rowCount(self, parent):
return len(self._lst)
@ -153,6 +166,8 @@ class TableModel(PamhyrTableModel):
def add(self, row, parent=QModelIndex()):
self.beginInsertRows(parent, row, row - 1)
row = self.get_true_data_row(row)
self._undo.push(
AddCommand(
self._lst, row
@ -167,7 +182,12 @@ class TableModel(PamhyrTableModel):
self._undo.push(
DelCommand(
self._lst, rows
self._lst, list(
map(
lambda r: self._lst.get(r),
rows
)
)
)
)

View File

@ -76,7 +76,8 @@ class AddCommand(QUndoCommand):
self._new = None
def undo(self):
self._reservoir_lst.delete_i([self._index])
self._new.set_as_deleted()
self._reservoir_lst.modified()
def redo(self):
if self._new is None:
@ -84,6 +85,8 @@ class AddCommand(QUndoCommand):
else:
self._reservoir_lst.insert(self._index, self._new)
self._reservoir_lst.modified()
class AddAndAssociateCommand(QUndoCommand):
def __init__(self, reservoir_lst, index, node):
@ -96,7 +99,8 @@ class AddAndAssociateCommand(QUndoCommand):
self._node = node
def undo(self):
self._reservoir_lst.delete_i([self._index])
self._reservoir_lst.delete(self._new)
self._reservoir_lst.modified()
def redo(self):
if self._new is None:
@ -105,45 +109,44 @@ class AddAndAssociateCommand(QUndoCommand):
self._reservoir_lst.insert(self._index, self._new)
self._reservoir_lst.get(self._index).node = self._node
self._reservoir_lst.modified()
class DelCommand(QUndoCommand):
def __init__(self, reservoir_lst, rows):
def __init__(self, reservoir_lst, reservoirs):
QUndoCommand.__init__(self)
self._reservoir_lst = reservoir_lst
self._rows = rows
self._reservoir = []
for row in rows:
self._reservoir.append((row, self._reservoir_lst.get(row)))
self._reservoir.sort()
self._reservoirs = reservoirs
def undo(self):
for row, el in self._reservoir:
self._reservoir_lst.insert(row, el)
for reservoir in self._reservoirs:
reservoir.set_as_not_deleted()
self._reservoir_lst.modified()
def redo(self):
self._reservoir_lst.delete_i(self._rows)
for reservoir in self._reservoirs:
reservoir.set_as_deleted()
self._reservoir_lst.modified()
class PasteCommand(QUndoCommand):
def __init__(self, reservoir_lst, row, reservoir):
QUndoCommand.__init__(self)
# class PasteCommand(QUndoCommand):
# def __init__(self, reservoir_lst, row, reservoir):
# QUndoCommand.__init__(self)
self._reservoir_lst = reservoir_lst
# self._reservoir_lst = reservoir_lst
self._row = row
self._reservoir = deepcopy(reservoir)
self._reservoir.reverse()
# self._row = row
# self._reservoir = deepcopy(reservoir)
# self._reservoir.reverse()
def undo(self):
self._reservoir_lst.delete_i(
self._tab,
range(self._row, self._row + len(self._reservoir))
)
# def undo(self):
# self._reservoir_lst.delete_i(
# self._tab,
# range(self._row, self._row + len(self._reservoir))
# )
def redo(self):
for r in self._reservoir:
self._reservoir_lst.insert(self._row, r)
# def redo(self):
# for r in self._reservoir:
# self._reservoir_lst.insert(self._row, r)