Merge branch 'scenarios' of gitlab.com:pamhyr/pamhyr2 into scenarios

scenarios
Theophile Terraz 2025-09-18 11:34:52 +02:00
commit ddc612328e
11 changed files with 83 additions and 36 deletions

View File

@ -275,6 +275,7 @@ class Layer(SQLSubModel):
self._sl.modified() self._sl.modified()
class SedimentLayer(SQLSubModel): class SedimentLayer(SQLSubModel):
_sub_classes = [Layer] _sub_classes = [Layer]

View File

@ -414,7 +414,6 @@ class SQLSubModel(PamhyrID):
""" """
raise NotImplementedMethodeError(self, self._db_save) raise NotImplementedMethodeError(self, self._db_save)
def _data_traversal(self, def _data_traversal(self,
predicate=lambda obj, data: True, predicate=lambda obj, data: True,
modifier=lambda obj, data: None, modifier=lambda obj, data: None,

View File

@ -83,7 +83,7 @@ class PamhyrModelList(SQLSubModel):
return self.lst.index(el) return self.lst.index(el)
def get(self, index): def get(self, index):
if len(self._lst) == 0: if len(self.lst) <= index:
return None return None
return self.lst[index] return self.lst[index]
@ -122,7 +122,10 @@ class PamhyrModelList(SQLSubModel):
raise NotImplementedMethodeError(self, self.new) raise NotImplementedMethodeError(self, self.new)
def insert(self, index, new): def insert(self, index, new):
self._lst.insert(index, new) if new in self._lst:
new.set_as_not_deleted()
else:
self._lst.insert(index, new)
if self._status is not None: if self._status is not None:
self._status.modified() self._status.modified()
@ -165,7 +168,7 @@ class PamhyrModelList(SQLSubModel):
lambda x: x[1], lambda x: x[1],
filter( filter(
lambda x: x[0] in indexes, lambda x: x[0] in indexes,
enumerate(self.lst) enumerate(self._lst)
) )
) )
) )

View File

@ -38,6 +38,19 @@ logger = logging.getLogger()
class ListModel(PamhyrListModel): class ListModel(PamhyrListModel):
def get_true_data_row(self, row):
el = self._data.get(row)
return next(
map(
lambda e: e[0],
filter(
lambda e: e[1] == el,
enumerate(self._data._lst)
)
), 0
)
def data(self, index, role): def data(self, index, role):
row = index.row() row = index.row()
column = index.column() column = index.column()
@ -65,6 +78,8 @@ class ListModel(PamhyrListModel):
return QVariant() return QVariant()
def add(self, row): def add(self, row):
row = self.get_true_data_row(row)
self._undo.push( self._undo.push(
AddCommand( AddCommand(
self._data, row self._data, row
@ -75,7 +90,7 @@ class ListModel(PamhyrListModel):
def delete(self, row): def delete(self, row):
self._undo.push( self._undo.push(
DelCommand( DelCommand(
self._data, row self._data, self._data.files[row]
) )
) )
self.update() self.update()

View File

@ -58,27 +58,24 @@ class AddCommand(QUndoCommand):
self._new = None self._new = None
def undo(self): def undo(self):
self._files.delete([self._new]) self._new.set_as_deleted()
def redo(self): def redo(self):
if self._new is None: if self._new is None:
self._new = self._files.new(self._row) self._new = self._files.new(self._row)
else: else:
self._files.undelete([self._new]) self._new.set_as_not_deleted()
# self._files.insert(self._row, self._new)
class DelCommand(QUndoCommand): class DelCommand(QUndoCommand):
def __init__(self, files, row): def __init__(self, files, line):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)
self._files = files self._files = files
self._row = row self._line = line
self._old = self._files.get(row)
def undo(self): def undo(self):
self._files.undelete([self._old]) self._line.set_as_not_deleted()
# self._files.insert(self._row, self._old)
def redo(self): def redo(self):
self._files.delete_i([self._row]) self._line.set_as_deleted()

View File

@ -134,6 +134,7 @@ class AddCommand(QUndoCommand):
else: else:
self._new.set_as_not_deleted() self._new.set_as_not_deleted()
class DelCommand(QUndoCommand): class DelCommand(QUndoCommand):
def __init__(self, lcs, tab, rows): def __init__(self, lcs, tab, rows):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)

View File

@ -38,6 +38,19 @@ logger = logging.getLogger()
class ListModel(PamhyrListModel): class ListModel(PamhyrListModel):
def get_true_data_row(self, row):
el = self._data.get(row)
return next(
map(
lambda e: e[0],
filter(
lambda e: e[1] == el,
enumerate(self._data._lst)
)
), 0
)
def data(self, index, role): def data(self, index, role):
row = index.row() row = index.row()
column = index.column() column = index.column()
@ -65,17 +78,20 @@ class ListModel(PamhyrListModel):
return QVariant() return QVariant()
def add(self, row): def add(self, row):
row = self.get_true_data_row(row)
self._undo.push( self._undo.push(
AddCommand( AddCommand(
self._data, row self._data, row
) )
) )
self.update() self.update()
def delete(self, row): def delete(self, row):
self._undo.push( self._undo.push(
DelCommand( DelCommand(
self._data, row self._data, self._data.lines[row]
) )
) )
self.update() self.update()

View File

@ -58,25 +58,24 @@ class AddCommand(QUndoCommand):
self._new = None self._new = None
def undo(self): def undo(self):
self._lines.delete([self._new]) self._new.set_as_deleted()
def redo(self): def redo(self):
if self._new is None: if self._new is None:
self._new = self._lines.new(self._row) self._new = self._lines.new(self._row)
else: else:
self._lines.insert(self._row, self._new) self._new.set_as_not_deleted()
class DelCommand(QUndoCommand): class DelCommand(QUndoCommand):
def __init__(self, lines, row): def __init__(self, lines, data):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)
self._lines = lines self._lines = lines
self._row = row self._data = data
self._old = self._lines.get(row)
def undo(self): def undo(self):
self._lines.insert(self._row, self._old) self._data.set_as_not_deleted()
def redo(self): def redo(self):
self._lines.delete_i([self._row]) self._data.set_as_deleted()

View File

@ -71,7 +71,7 @@ class ScenarioMenu(AbstractMenu):
) )
action = self._exec() action = self._exec()
if action == None: if action is None:
return return
elif action == select: elif action == select:
self._parent.select_scenario(item) self._parent.select_scenario(item)

View File

@ -48,6 +48,19 @@ _translate = QCoreApplication.translate
class TableModel(PamhyrTableModel): class TableModel(PamhyrTableModel):
def get_true_data_row(self, row):
el = self._data.get(row)
return next(
map(
lambda e: e[0],
filter(
lambda e: e[1] == el,
enumerate(self._data._lst)
)
), 0
)
def data(self, index, role): def data(self, index, role):
if role != Qt.ItemDataRole.DisplayRole: if role != Qt.ItemDataRole.DisplayRole:
return QVariant() return QVariant()
@ -109,6 +122,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._data, row self._data, row
@ -123,7 +138,12 @@ class TableModel(PamhyrTableModel):
self._undo.push( self._undo.push(
DelCommand( DelCommand(
self._data, rows self._data, list(
map(
lambda r: self._data.get(r),
rows
)
)
) )
) )

View File

@ -102,33 +102,29 @@ class AddCommand(QUndoCommand):
self._new = None self._new = None
def undo(self): def undo(self):
self._data.delete_i([self._index]) self._new.set_as_deleted()
def redo(self): def redo(self):
if self._new is None: if self._new is None:
self._new = self._data.new(self._index) self._new = self._data.new(self._index)
else: else:
self._data.undelete([self._new]) self._new.set_as_not_deleted()
# self._data.insert(self._index, self._new)
class DelCommand(QUndoCommand): class DelCommand(QUndoCommand):
def __init__(self, data, rows): def __init__(self, data, lines):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)
self._data = data self._data = data
self._rows = rows self._lines = lines
self._el = []
for row in rows:
self._el.append(self._data.get(row))
self._el.sort()
def undo(self): def undo(self):
self._data.undelete(self._el) for line in self._lines:
line.set_as_not_deleted()
def redo(self): def redo(self):
self._data.delete(self._el) for line in self._lines:
line.set_as_deleted()
class SortCommand(QUndoCommand): class SortCommand(QUndoCommand):