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 ( from View.Reservoir.UndoCommand import (
SetNameCommand, SetNodeCommand, SetNameCommand, SetNodeCommand,
AddCommand, DelCommand, PasteCommand, AddCommand, DelCommand,
) )
logger = logging.getLogger() logger = logging.getLogger()
@ -103,6 +103,19 @@ class TableModel(PamhyrTableModel):
def _setup_lst(self): def _setup_lst(self):
self._lst = self._data.reservoir 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): def rowCount(self, parent):
return len(self._lst) return len(self._lst)
@ -153,6 +166,8 @@ class TableModel(PamhyrTableModel):
def add(self, row, parent=QModelIndex()): def add(self, row, parent=QModelIndex()):
self.beginInsertRows(parent, row, row - 1) self.beginInsertRows(parent, row, row - 1)
row = self.get_true_data_row(row)
self._undo.push( self._undo.push(
AddCommand( AddCommand(
self._lst, row self._lst, row
@ -167,7 +182,12 @@ class TableModel(PamhyrTableModel):
self._undo.push( self._undo.push(
DelCommand( 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 self._new = None
def undo(self): def undo(self):
self._reservoir_lst.delete_i([self._index]) self._new.set_as_deleted()
self._reservoir_lst.modified()
def redo(self): def redo(self):
if self._new is None: if self._new is None:
@ -84,6 +85,8 @@ class AddCommand(QUndoCommand):
else: else:
self._reservoir_lst.insert(self._index, self._new) self._reservoir_lst.insert(self._index, self._new)
self._reservoir_lst.modified()
class AddAndAssociateCommand(QUndoCommand): class AddAndAssociateCommand(QUndoCommand):
def __init__(self, reservoir_lst, index, node): def __init__(self, reservoir_lst, index, node):
@ -96,7 +99,8 @@ class AddAndAssociateCommand(QUndoCommand):
self._node = node self._node = node
def undo(self): def undo(self):
self._reservoir_lst.delete_i([self._index]) self._reservoir_lst.delete(self._new)
self._reservoir_lst.modified()
def redo(self): def redo(self):
if self._new is None: if self._new is None:
@ -105,45 +109,44 @@ class AddAndAssociateCommand(QUndoCommand):
self._reservoir_lst.insert(self._index, self._new) self._reservoir_lst.insert(self._index, self._new)
self._reservoir_lst.get(self._index).node = self._node self._reservoir_lst.get(self._index).node = self._node
self._reservoir_lst.modified()
class DelCommand(QUndoCommand): class DelCommand(QUndoCommand):
def __init__(self, reservoir_lst, rows): def __init__(self, reservoir_lst, reservoirs):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)
self._reservoir_lst = reservoir_lst self._reservoir_lst = reservoir_lst
self._reservoirs = reservoirs
self._rows = rows
self._reservoir = []
for row in rows:
self._reservoir.append((row, self._reservoir_lst.get(row)))
self._reservoir.sort()
def undo(self): def undo(self):
for row, el in self._reservoir: for reservoir in self._reservoirs:
self._reservoir_lst.insert(row, el) reservoir.set_as_not_deleted()
self._reservoir_lst.modified()
def redo(self): 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): # class PasteCommand(QUndoCommand):
def __init__(self, reservoir_lst, row, reservoir): # def __init__(self, reservoir_lst, row, reservoir):
QUndoCommand.__init__(self) # QUndoCommand.__init__(self)
self._reservoir_lst = reservoir_lst # self._reservoir_lst = reservoir_lst
self._row = row # self._row = row
self._reservoir = deepcopy(reservoir) # self._reservoir = deepcopy(reservoir)
self._reservoir.reverse() # self._reservoir.reverse()
def undo(self): # def undo(self):
self._reservoir_lst.delete_i( # self._reservoir_lst.delete_i(
self._tab, # self._tab,
range(self._row, self._row + len(self._reservoir)) # range(self._row, self._row + len(self._reservoir))
) # )
def redo(self): # def redo(self):
for r in self._reservoir: # for r in self._reservoir:
self._reservoir_lst.insert(self._row, r) # self._reservoir_lst.insert(self._row, r)