diff --git a/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTS.py b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTS.py index d8bab3263ec224fc82a1fae8585d2cb116049ea3..f21d1591ddf0b156c3c8072efdf569d8cd93b5b6 100644 --- a/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTS.py +++ b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTS.py @@ -62,7 +62,7 @@ class InitialConditionsAdisTS(SQLSubModel): @classmethod def _db_create(cls, execute): execute(""" - CREATE TABLE initial_conditions( + CREATE TABLE initial_conditions_adists( id INTEGER NOT NULL PRIMARY KEY, pollutant INTEGER NOT NULL, name TEXT NOT NULL, @@ -93,9 +93,11 @@ class InitialConditionsAdisTS(SQLSubModel): table = execute( "SELECT id, pollutant, name, concentration, eg, em, ed, " + "enabled " + - "FROM initial_conditions" + "FROM initial_conditions_adists" ) + print("db load ic adists : ", table) + if table is not None: for row in table: IC_id = row[0] @@ -113,6 +115,7 @@ class InitialConditionsAdisTS(SQLSubModel): status=data['status'] ) + IC.pollutant = pollutant IC.concentration = concentration IC.eg = eg IC.em = em @@ -127,31 +130,31 @@ class InitialConditionsAdisTS(SQLSubModel): return new def _db_save(self, execute, data=None): - execute(f"DELETE FROM initial_conditions WHERE id = {self.id}") + execute(f"DELETE FROM initial_conditions_adists WHERE id = {self.id}") pollutant = -1 if self.pollutant is not None: pollutant = self.pollutant - concentration = -1 + concentration = -1. if self.concentration is not None: concentration = self.concentration - eg = -1 + eg = -1. if self.eg is not None: eg = self.eg - em = -1 + em = -1. if self.em is not None: em = self.em - ed = -1 + ed = -1. if self.ed is not None: ed = self.ed sql = ( "INSERT INTO " + - "initial_conditions(" + + "initial_conditions_adists(" + "id, pollutant, name, concentration, " + "eg, em, ed, enabled" + ") " + @@ -160,6 +163,7 @@ class InitialConditionsAdisTS(SQLSubModel): f"{concentration}, {eg}, {em}, {ed}, {self._enabled}" + ")" ) + execute(sql) data['ic_default_id'] = self.id diff --git a/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSList.py b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSList.py index e45aba048da24c1e082d114572a5a148532c68fc..6430f738e6534cb73612e5559712f545e02c7c4e 100644 --- a/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSList.py +++ b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSList.py @@ -41,6 +41,7 @@ class InitialConditionsAdisTSList(PamhyrModelList): return new def _db_save(self, execute, data=None): + print("db save ic adists") execute("DELETE FROM initial_conditions") if data is None: diff --git a/src/Model/River.py b/src/Model/River.py index 420a8c709617030a439e370efbc9ad238e9b944c..96dfb6b01260977e40c9749ebe53a3a8df051986 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -234,6 +234,7 @@ class River(Graph, SQLSubModel): REPLineList, OutputKpAdistsList, PollutantsList, + InitialConditionsAdisTSList, ] def __init__(self, status=None): diff --git a/src/View/InitialConditions/UndoCommand.py b/src/View/InitialConditions/UndoCommand.py index fecb6c6d4a0c2f7341047889ee424e4b61876e39..4a87c87932d2f8c17048ba2aea247d30665a67ce 100644 --- a/src/View/InitialConditions/UndoCommand.py +++ b/src/View/InitialConditions/UndoCommand.py @@ -138,7 +138,6 @@ class MoveCommand(QUndoCommand): else: self._ics.move_down(self._i) - class InsertCommand(QUndoCommand): def __init__(self, ics, row, ic): QUndoCommand.__init__(self) @@ -155,7 +154,6 @@ class InsertCommand(QUndoCommand): for ic in self._ic: self._ics.insert(self._row, ic) - class DuplicateCommand(QUndoCommand): def __init__(self, ics, rows, ic): QUndoCommand.__init__(self) diff --git a/src/View/InitialConditionsAdisTS/TableDefault.py b/src/View/InitialConditionsAdisTS/TableDefault.py index 03c90b09cf9d46c36e634817cfaaa19ea37172d1..67363647d1faceecf3e063c96f17bf1d857527c3 100644 --- a/src/View/InitialConditionsAdisTS/TableDefault.py +++ b/src/View/InitialConditionsAdisTS/TableDefault.py @@ -36,9 +36,7 @@ from PyQt5.QtWidgets import ( from View.Tools.PamhyrTable import PamhyrTableModel from View.InitialConditionsAdisTS.UndoCommand import ( - SetCommand, AddCommand, DelCommand, - SortCommand, MoveCommand, InsertCommand, - DuplicateCommand, GenerateCommand, + SetCommand, ) logger = logging.getLogger() @@ -92,7 +90,7 @@ class InitialConditionTableDefaultModel(PamhyrTableModel): if self._headers[column] is not None: self._undo.push( SetCommand( - self._lst, row, self._headers[column], value + self._data, row, self._headers[column], value ) ) except Exception as e: @@ -102,36 +100,6 @@ class InitialConditionTableDefaultModel(PamhyrTableModel): self.dataChanged.emit(index, index) return True - def paste(self, index, header, data): - if len(header) != 0: - logger.error("Unexpected header in IC past data") - return - - if len(data) == 0: - logger.error("Empty data") - return - - if len(data[0]) != 3: - logger.error(f"Unexpected data size: [{data[0]}, ...]") - return - - self.layoutAboutToBeChanged.emit() - - self._undo.push( - InsertCommand( - self._lst, index, - list( - map( - lambda d: self._lst.new_from_data(*d), - data - ) - ) - ) - ) - - self.layoutAboutToBeChanged.emit() - self.layoutChanged.emit() - def undo(self): self._undo.undo() self.layoutChanged.emit() @@ -140,10 +108,3 @@ class InitialConditionTableDefaultModel(PamhyrTableModel): self._undo.redo() self.layoutChanged.emit() - def generate(self, generator, param): - self._undo.push( - GenerateCommand( - self._lst, generator, param - ) - ) - self.layoutChanged.emit() diff --git a/src/View/InitialConditionsAdisTS/UndoCommand.py b/src/View/InitialConditionsAdisTS/UndoCommand.py index fecb6c6d4a0c2f7341047889ee424e4b61876e39..444a199565db1cca2207a9fd37e35c8a38aa330b 100644 --- a/src/View/InitialConditionsAdisTS/UndoCommand.py +++ b/src/View/InitialConditionsAdisTS/UndoCommand.py @@ -23,170 +23,57 @@ from PyQt5.QtWidgets import ( QMessageBox, QUndoCommand, QUndoStack, ) -from Model.InitialConditions.InitialConditions import InitialConditions -from Model.InitialConditions.InitialConditionsDict import InitialConditionsDict +from Model.InitialConditionsAdisTS.InitialConditionsAdisTS import InitialConditionsAdisTS +from Model.InitialConditionsAdisTS.InitialConditionsAdisTSList import InitialConditionsAdisTSList class SetCommand(QUndoCommand): - def __init__(self, ics, row, column, new_value): + def __init__(self, data, row, column, new_value): QUndoCommand.__init__(self) - self._ics = ics + self._data = data self._row = row self._column = column - self._old = self._ics.get(self._row)[column] + + if self._column == "name": + self._old = self._data[self._row].name + elif self._column == "concentration": + print(self._column, self._data[self._row].concentration, new_value) + self._old = self._data[self._row].concentration + elif self._column == "eg": + self._old = self._data[self._row].eg + elif self._column == "em": + self._old = self._data[self._row].em + elif self._column == "ed": + self._old = self._data[self._row].ed _type = float - if column == "name" or column == "comment": + if column == "name": _type = str self._new = _type(new_value) def undo(self): - self._ics.get(self._row)[self._column] = self._old - - def redo(self): - self._ics.get(self._row)[self._column] = self._new - - -class AddCommand(QUndoCommand): - def __init__(self, ics, index): - QUndoCommand.__init__(self) - - self._ics = ics - self._index = index - self._new = None - - def undo(self): - self._ics.delete_i([self._index]) - - def redo(self): - if self._new is None: - self._new = self._ics.new(self._index) - else: - self._ics.insert(self._index, self._new) - - -class DelCommand(QUndoCommand): - def __init__(self, ics, rows): - QUndoCommand.__init__(self) - - self._ics = ics - self._rows = rows - - self._ic = [] - for row in rows: - self._ic.append((row, self._ics.get(row))) - self._ic.sort() - - def undo(self): - for row, el in self._ic: - self._ics.insert(row, el) + if self._column == "name": + self._data[self._row].name = self._old + elif self._column == "concentration": + self._data[self._row].concentration = self._old + elif self._column == "eg": + self._data[self._row].eg = self._old + elif self._column == "em": + self._data[self._row].em = self._old + elif self._column == "ed": + self._data[self._row].ed = self._old def redo(self): - self._ics.delete_i(self._rows) - - -class SortCommand(QUndoCommand): - def __init__(self, ics, _reverse): - QUndoCommand.__init__(self) - - self._ics = ics - self._reverse = _reverse - - self._old = self._ics.data - self._indexes = None - - def undo(self): - ll = self._ics.data - self._ics.sort( - key=lambda x: self._indexes[ll.index(x)] - ) - - def redo(self): - self._ics.sort( - reverse=self._reverse, - key=lambda x: x["kp"] - ) - if self._indexes is None: - self._indexes = list( - map( - lambda p: self._old.index(p), - self._ics.data - ) - ) - self._old = None - - -class MoveCommand(QUndoCommand): - def __init__(self, ics, up, i): - QUndoCommand.__init__(self) + if self._column == "name": + self._data[self._row].name = self._new + elif self._column == "concentration": + self._data[self._row].concentration = self._new + elif self._column == "eg": + self._data[self._row].eg = self._new + elif self._column == "em": + self._data[self._row].em = self._new + elif self._column == "ed": + self._data[self._row].ed = self._new - self._ics = ics - self._up = up == "up" - self._i = i - - def undo(self): - if self._up: - self._ics.move_up(self._i) - else: - self._ics.move_down(self._i) - - def redo(self): - if self._up: - self._ics.move_up(self._i) - else: - self._ics.move_down(self._i) - - -class InsertCommand(QUndoCommand): - def __init__(self, ics, row, ic): - QUndoCommand.__init__(self) - - self._ics = ics - self._row = row - self._ic = deepcopy(ic) - self._ic.reverse() - - def undo(self): - self._ics.delete(self._ic) - - def redo(self): - for ic in self._ic: - self._ics.insert(self._row, ic) - - -class DuplicateCommand(QUndoCommand): - def __init__(self, ics, rows, ic): - QUndoCommand.__init__(self) - - self._ics = ics - self._rows = rows - self._ic = deepcopy(ic) - self._ic.reverse() - - def undo(self): - self._ics.delete(self._ic) - - def redo(self): - for ic in self._ics: - self._ics.insert(self._rows[0], ic) - - -class GenerateCommand(QUndoCommand): - def __init__(self, ics, generator, param): - QUndoCommand.__init__(self) - - self._ics = ics - self._param = param - self._copy = self._ics.data - self._generator = generator - - def undo(self): - self._ics.data = self._copy - - def redo(self): - if self._generator == "growing": - self._ics.generate_growing_constante_height(self._param) - elif self._generator == "discharge": - self._ics.generate_discharge(self._param) diff --git a/src/View/InitialConditionsAdisTS/Window.py b/src/View/InitialConditionsAdisTS/Window.py index 93630c45e17ce9680a51994434ad2dae95f7f4de..2880915a8108ae3ab6bd98586eb3261430bc71c7 100644 --- a/src/View/InitialConditionsAdisTS/Window.py +++ b/src/View/InitialConditionsAdisTS/Window.py @@ -43,9 +43,7 @@ from PyQt5.QtWidgets import ( from Modules import Modules from View.InitialConditionsAdisTS.UndoCommand import ( - SetCommand, AddCommand, DelCommand, - SortCommand, MoveCommand, InsertCommand, - DuplicateCommand, + SetCommand, ) from View.InitialConditionsAdisTS.TableDefault import ( @@ -68,7 +66,6 @@ class InitialConditionsAdisTSWindow(PamhyrWindow): def __init__(self, data=None, study=None, config=None, parent=None): self._data = [] self._data.append(data) - #print(self._data.name, self._data.concentration, self._data.eg, self._data.em, self._data.ed) trad = IcAdisTSTranslate() name = ( @@ -108,7 +105,6 @@ class InitialConditionsAdisTSWindow(PamhyrWindow): table.setModel(self._table) table.setSelectionBehavior(QAbstractItemView.SelectRows) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) - #table.verticalHeader() table.setAlternatingRowColors(True) def index_selected_row(self): diff --git a/src/View/Pollutants/Window.py b/src/View/Pollutants/Window.py index 8ad0deb11f3325dfff413222f8467708e3f01d17..93b091474dfcb411655d67b22d713af58599f473 100644 --- a/src/View/Pollutants/Window.py +++ b/src/View/Pollutants/Window.py @@ -194,6 +194,7 @@ class PollutantsWindow(PamhyrWindow): for row in rows: pollutant_id = self._pollutants_lst.get(row).id + ics_adists = next(filter(lambda x: x.pollutant == pollutant_id, self._study.river.initial_conditions_adists.lst)) diff --git a/tests_cases/Enlargement/Enlargement.pamhyr b/tests_cases/Enlargement/Enlargement.pamhyr index 8a4f35c6a2cdb182b55fbfeb16d26ec8cf662e67..23c74b0ec7ff7612c35329d1b7d396a763c65546 100644 Binary files a/tests_cases/Enlargement/Enlargement.pamhyr and b/tests_cases/Enlargement/Enlargement.pamhyr differ