diff --git a/src/Model/DB.py b/src/Model/DB.py index eb836c04e07957244dda1204e651cfdfb61b60a8..90869740a42bf6d456fd165851adde995241c4f3 100644 --- a/src/Model/DB.py +++ b/src/Model/DB.py @@ -29,7 +29,6 @@ class SQLModel(SQL): self._create() # Create db # self._save() # Save else: - logger.info("Update database") self._update() # Update db scheme if necessary # self._load() # Load data diff --git a/src/Model/Section/Section.py b/src/Model/Friction/Friction.py similarity index 93% rename from src/Model/Section/Section.py rename to src/Model/Friction/Friction.py index 86bdff48ffa00e9b656411dbf98c7248823f43e1..f7328dd4277ae996261ccb5d63836b160b467116 100644 --- a/src/Model/Section/Section.py +++ b/src/Model/Friction/Friction.py @@ -4,9 +4,9 @@ from tools import trace, timer from Model.DB import SQLSubModel -class Section(SQLSubModel): +class Friction(SQLSubModel): def __init__(self, name:str = "", status = None): - super(Section, self).__init__() + super(Friction, self).__init__() self._status = status @@ -20,7 +20,7 @@ class Section(SQLSubModel): @classmethod def _sql_create(cls, execute): execute(""" - CREATE TABLE section( + CREATE TABLE friction( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ind INTERGER NOT NULL, begin_kp REAL NOT NULL, @@ -49,7 +49,7 @@ class Section(SQLSubModel): table = execute( "SELECT ind, begin_kp, end_kp, begin_strickler, end_strickler " + - f"FROM section WHERE reach = {reach.id}" + f"FROM friction WHERE reach = {reach.id}" ) for _ in table: @@ -61,7 +61,7 @@ class Section(SQLSubModel): bs = next(filter(lambda s: s.id == row[3], stricklers)) es = next(filter(lambda s: s.id == row[4], stricklers)) - # Create section + # Create friction sec = cls(status = status) sec.edge = reach sec.begin_kp = row[1] @@ -77,7 +77,7 @@ class Section(SQLSubModel): ind = data["ind"] execute( "INSERT INTO " + - "section(ind, begin_kp, end_kp, reach, begin_strickler, end_strickler) " + + "friction(ind, begin_kp, end_kp, reach, begin_strickler, end_strickler) " + "VALUES (" + f"{ind}, {self._begin_kp}, {self._end_kp}, " + f"{self._edge.id}, " + diff --git a/src/Model/Section/SectionList.py b/src/Model/Friction/FrictionList.py similarity index 54% rename from src/Model/Section/SectionList.py rename to src/Model/Friction/FrictionList.py index d1f88f0899aa24da0b5972905a45ac99211af0dd..a82c9f22227ae44bc07d0a6e784596d132eefa62 100644 --- a/src/Model/Section/SectionList.py +++ b/src/Model/Friction/FrictionList.py @@ -1,35 +1,47 @@ # -*- coding: utf-8 -*- +import logging + from copy import copy from tools import trace, timer from Model.DB import SQLSubModel -from Model.Section.Section import Section +from Model.Friction.Friction import Friction + +logger = logging.getLogger() -class SectionList(SQLSubModel): +class FrictionList(SQLSubModel): _sub_classes = [ - Section + Friction ] def __init__(self, status = None): - super(SectionList, self).__init__() + super(FrictionList, self).__init__() self._status = status - self._sections = [] + self._frictions = [] @classmethod def _sql_create(cls, execute): return cls._create_submodel(execute) + @classmethod + def _sql_update_0_0_1(cls, execute, version): + execute("ALTER TABLE `section` RENAME TO `friction`") + @classmethod def _sql_update(cls, execute, version): + if version == "0.0.0": + logger.info(f"Update friction TABLE from {version}") + cls._sql_update_0_0_1(execute, version) + return True @classmethod def _sql_load(cls, execute, data = None): new = cls(status = data['status']) - new._sections = Section._sql_load( + new._frictions = Friction._sql_load( execute, data ) @@ -37,67 +49,67 @@ class SectionList(SQLSubModel): def _sql_save(self, execute, data = None): reach = data["reach"] - execute(f"DELETE FROM section WHERE reach = {reach.id}") + execute(f"DELETE FROM friction WHERE reach = {reach.id}") ok = True ind = 0 - for section in self._sections: + for friction in self._frictions: data["ind"] = ind - ok &= section._sql_save(execute, data = data) + ok &= friction._sql_save(execute, data = data) ind += 1 return ok def __len__(self): - return len(self._sections) + return len(self._frictions) @property - def sections(self): - return self._sections.copy() + def frictions(self): + return self._frictions.copy() def get(self, row): - return self._sections[row] + return self._frictions[row] def set(self, row, new): - self._sections[row] = new + self._frictions[row] = new self._status.modified() def new(self, index): - n = Section(status = self._status) - self._sections.insert(index, n) + n = Friction(status = self._status) + self._frictions.insert(index, n) self._status.modified() return n def insert(self, index, new): - self._sections.insert(index, new) + self._frictions.insert(index, new) self._status.modified() - def delete(self, sections): - for section in sections: - self._sections.remove(section) + def delete(self, frictions): + for friction in frictions: + self._frictions.remove(friction) self._status.modified() def delete_i(self, indexes): - sections = list( + frictions = list( map( lambda x: x[1], filter( lambda x: x[0] in indexes, - enumerate(self._sections) + enumerate(self._frictions) ) ) ) - self.delete(sections) + self.delete(frictions) def sort(self, reverse=False, key=None): - self._sections.sort(reverse=reverse, key=key) + self._frictions.sort(reverse=reverse, key=key) self._status.modified() def move_up(self, index): - if index < len(self._sections): + if index < len(self._frictions): next = index - 1 - l = self._sections + l = self._frictions l[index], l[next] = l[next], l[index] self._status.modified() @@ -105,6 +117,6 @@ class SectionList(SQLSubModel): if index >= 0: prev = index + 1 - l = self._sections + l = self._frictions l[index], l[prev] = l[prev], l[index] self._status.modified() diff --git a/src/Model/River.py b/src/Model/River.py index cbc86f196ca7696af4d50d9ea0fc36700e2d5357..a19e6cc32bb2c49ef32f81bc9ba34d1b1bdc0cfb 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -13,7 +13,7 @@ from Model.BoundaryCondition.BoundaryConditionList import BoundaryConditionList from Model.LateralContribution.LateralContributionList import LateralContributionList from Model.InitialConditions.InitialConditionsDict import InitialConditionsDict from Model.Stricklers.StricklersList import StricklersList -from Model.Section.SectionList import SectionList +from Model.Friction.FrictionList import FrictionList from Model.SolverParameters.SolverParametersList import SolverParametersList from Solver.Solvers import solver_type_list @@ -86,7 +86,7 @@ class RiverNode(Node, SQLSubModel): class RiverReach(Edge, SQLSubModel): _sub_classes = [ Reach, - SectionList, + FrictionList, ] def __init__(self, id:str, name:str, @@ -100,7 +100,7 @@ class RiverReach(Edge, SQLSubModel): ) self._reach = Reach(status=self._status, parent=self) - self._sections = SectionList(status = self._status) + self._frictions = FrictionList(status = self._status) @classmethod def _sql_create(cls, execute): @@ -121,7 +121,7 @@ class RiverReach(Edge, SQLSubModel): @classmethod def _sql_update(cls, execute, version): - return True + return cls._update_submodel(execute, version) @classmethod def _sql_load(cls, execute, data = None): @@ -149,7 +149,7 @@ class RiverReach(Edge, SQLSubModel): data["parent"] = new new._reach = Reach._sql_load(execute, data) - new._sections = SectionList._sql_load(execute, data) + new._frictions = FrictionList._sql_load(execute, data) reachs.append(new) @@ -172,7 +172,7 @@ class RiverReach(Edge, SQLSubModel): data["reach"] = self - objs = [self._reach, self._sections] + objs = [self._reach, self._frictions] return self._save_submodel(execute, objs, data) @property @@ -180,8 +180,8 @@ class RiverReach(Edge, SQLSubModel): return self._reach @property - def sections(self): - return self._sections + def frictions(self): + return self._frictions class River(Graph, SQLSubModel): _sub_classes = [ @@ -286,8 +286,8 @@ class River(Graph, SQLSubModel): return self._reach @property - def sections(self): - return self._sections + def frictions(self): + return self._frictions @property def boundary_condition(self): diff --git a/src/Model/Study.py b/src/Model/Study.py index 413838ad5d9b3354a6bb4e98fc4ccb46a779ee63..bdebce474867ca24e46a8ff8731a4e972687dd89 100644 --- a/src/Model/Study.py +++ b/src/Model/Study.py @@ -24,7 +24,7 @@ class Study(SQLModel): def __init__(self, filename = None, init_new = True): # Metadata - self._version = "0.0.0" + self._version = "0.0.1" self.creation_date = datetime.now() self.last_modification_date = datetime.now() self.last_save_date = datetime.now() @@ -194,7 +194,9 @@ class Study(SQLModel): if version[0] == self._version: return True - if self._update_submodel(version): + logger.info("Update database") + + if self._update_submodel(version[0]): self.execute(f"UPDATE info SET value='{self._version}' WHERE key='version'") return True diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py index eedd12154e45f20d7b4bb2383d7e4c1ca36299a6..e7d95811ea25b2312d1e97893eabf1c2734ecf01 100644 --- a/src/Solver/Mage.py +++ b/src/Solver/Mage.py @@ -225,17 +225,17 @@ class Mage(AbstractSolver): id = 1 for edge in edges: - sections = edge.sections + frictions = edge.frictions - for section in sections.sections: + for friction in frictions.frictions: num = f"{id:>3}" - bkp = f"{section.begin_kp:>10.3f}" - ekp = f"{section.end_kp:>10.3f}" + bkp = f"{friction.begin_kp:>10.3f}" + ekp = f"{friction.end_kp:>10.3f}" - # if section.begin_kp != section.end_kp: + # if friction.begin_kp != friction.end_kp: # print("TODO") - strickler = section.begin_strickler + strickler = friction.begin_strickler coef_1 = f"{strickler.minor:>10.3f}" coef_2 = f"{strickler.medium:>10.3f}" diff --git a/src/View/Sections/PlotStricklers.py b/src/View/Frictions/PlotStricklers.py similarity index 88% rename from src/View/Sections/PlotStricklers.py rename to src/View/Frictions/PlotStricklers.py index cdd7730398243b5289b89d52d56e95d50c13597d..8f706782eedafb72a895910dcfd87e6446d3ae8e 100644 --- a/src/View/Sections/PlotStricklers.py +++ b/src/View/Frictions/PlotStricklers.py @@ -17,8 +17,8 @@ class PlotStricklers(APlot): toolbar=toolbar ) - def draw_sections(self, sections, color="r"): - lst = sections + def draw_frictions(self, frictions, color="r"): + lst = frictions lst.sort(key = lambda s: s.begin_kp) coef = flatten( @@ -71,10 +71,10 @@ class PlotStricklers(APlot): left = min(kp), right = max(kp) ) - sections = self.data.sections - if len(sections) != 0: - lst = sections.sections - self.draw_sections(lst) + frictions = self.data.frictions + if len(frictions) != 0: + lst = frictions.frictions + self.draw_frictions(lst) # HightLight kp_min, kp_max = (-1, -1) @@ -85,10 +85,10 @@ class PlotStricklers(APlot): filter( lambda s: (s.begin_kp == kp_min and s.end_kp == kp_max), - sections.sections + frictions.frictions ) ) - self.draw_sections(lst, color="b") + self.draw_frictions(lst, color="b") self.canvas.figure.tight_layout() self.canvas.figure.canvas.draw_idle() diff --git a/src/View/Sections/Table.py b/src/View/Frictions/Table.py similarity index 81% rename from src/View/Sections/Table.py rename to src/View/Frictions/Table.py index 47aff38e1b5050f2054b722ade6c472ac5f1d719..2c96ef97848efe46eed0e5a2bded85efab6bfeba 100644 --- a/src/View/Sections/Table.py +++ b/src/View/Frictions/Table.py @@ -15,14 +15,14 @@ from PyQt5.QtWidgets import ( QComboBox, ) -from View.Sections.UndoCommand import ( +from View.Frictions.UndoCommand import ( SetNameCommand, SetBeginCommand, SetEndCommand, SetBeginStricklerCommand, SetEndStricklerCommand, AddCommand, DelCommand, SortCommand, MoveCommand, PasteCommand, DuplicateCommand, ) -from View.Sections.translate import * +from View.Frictions.translate import * _translate = QCoreApplication.translate @@ -39,7 +39,7 @@ class ComboBoxDelegate(QItemDelegate): if self._mode == "stricklers": self.editor.addItems( - [_translate("Sections", "Not defined")] + + [_translate("Frictions", "Not defined")] + list( map( lambda s: str(s), @@ -79,7 +79,7 @@ class TableModel(QAbstractTableModel): self._data = data self._study = study self._undo = undo - self._sections = self._data.sections + self._frictions = self._data.frictions def flags(self, index): options = Qt.ItemIsEnabled | Qt.ItemIsSelectable @@ -88,7 +88,7 @@ class TableModel(QAbstractTableModel): return options def rowCount(self, parent): - return len(self._sections) + return len(self._frictions) def columnCount(self, parent): return len(self._headers) @@ -101,27 +101,27 @@ class TableModel(QAbstractTableModel): column = index.column() if self._headers[column] == "name": - return self._sections.get(row).name + return self._frictions.get(row).name elif self._headers[column] == "begin_kp": - return self._sections.get(row).begin_kp + return self._frictions.get(row).begin_kp elif self._headers[column] == "end_kp": - return self._sections.get(row).end_kp + return self._frictions.get(row).end_kp elif self._headers[column] == "begin_strickler": - value = self._sections.get(row).begin_strickler + value = self._frictions.get(row).begin_strickler if value == None: - return _translate("Sections", "Not defined") + return _translate("Frictions", "Not defined") return str(value) elif self._headers[column] == "end_strickler": - value = self._sections.get(row).end_strickler + value = self._frictions.get(row).end_strickler if value == None: - return _translate("Sections", "Not defined") + return _translate("Frictions", "Not defined") return str(value) return QVariant() - def headerData(self, section, orientation, role): + def headerData(self, friction, orientation, role): if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal: - return table_headers[self._headers[section]] + return table_headers[self._headers[friction]] return QVariant() @@ -135,31 +135,31 @@ class TableModel(QAbstractTableModel): if self._headers[column] == "name": self._undo.push( SetNameCommand( - self._sections, row, value + self._frictions, row, value ) ) elif self._headers[column] == "begin_kp": self._undo.push( SetBeginCommand( - self._sections, row, value + self._frictions, row, value ) ) elif self._headers[column] == "end_kp": self._undo.push( SetEndCommand( - self._sections, row, value + self._frictions, row, value ) ) elif self._headers[column] == "begin_strickler": self._undo.push( SetBeginStricklerCommand( - self._sections, row, self._study.river.strickler(value) + self._frictions, row, self._study.river.strickler(value) ) ) elif self._headers[column] == "end_strickler": self._undo.push( SetEndStricklerCommand( - self._sections, row, self._study.river.strickler(value) + self._frictions, row, self._study.river.strickler(value) ) ) @@ -171,7 +171,7 @@ class TableModel(QAbstractTableModel): self._undo.push( AddCommand( - self._sections, row, self._data + self._frictions, row, self._data ) ) @@ -183,7 +183,7 @@ class TableModel(QAbstractTableModel): self._undo.push( DelCommand( - self._sections, rows + self._frictions, rows ) ) @@ -195,7 +195,7 @@ class TableModel(QAbstractTableModel): self._undo.push( SortCommand( - self._sections, False + self._frictions, False ) ) @@ -212,7 +212,7 @@ class TableModel(QAbstractTableModel): self._undo_stack.push( MoveCommand( - self._sections, "up", row + self._frictions, "up", row ) ) @@ -220,7 +220,7 @@ class TableModel(QAbstractTableModel): self.layoutChanged.emit() def move_down(self, index, parent=QModelIndex()): - if row > len(self._sections): + if row > len(self._frictions): return target = row @@ -229,7 +229,7 @@ class TableModel(QAbstractTableModel): self._undo_stack.push( MoveCommand( - self._sections, "down", row + self._frictions, "down", row ) ) diff --git a/src/View/Frictions/UndoCommand.py b/src/View/Frictions/UndoCommand.py new file mode 100644 index 0000000000000000000000000000000000000000..0d685ace8ada99c6a63b86a43dca930dc2007dce --- /dev/null +++ b/src/View/Frictions/UndoCommand.py @@ -0,0 +1,226 @@ +# -*- coding: utf-8 -*- + +from copy import deepcopy +from tools import trace, timer + +from PyQt5.QtWidgets import ( + QMessageBox, QUndoCommand, QUndoStack, +) + +from Model.Friction.Friction import Friction +from Model.Friction.FrictionList import FrictionList + +class SetNameCommand(QUndoCommand): + def __init__(self, frictions, index, new_value): + QUndoCommand.__init__(self) + + self._frictions = frictions + self._index = index + self._old = self._frictions.get(self._index).name + self._new = new_value + + def undo(self): + self._frictions.get(self._index).name = self._old + + def redo(self): + self._frictions.get(self._index).name = self._new + +class SetBeginCommand(QUndoCommand): + def __init__(self, frictions, index, new_value): + QUndoCommand.__init__(self) + + self._frictions = frictions + self._index = index + self._old = self._frictions.get(self._index).begin_kp + self._new = new_value + + def undo(self): + self._frictions.get(self._index).begin_kp = float(self._old) + + def redo(self): + self._frictions.get(self._index).begin_kp = float(self._new) + +class SetEndCommand(QUndoCommand): + def __init__(self, frictions, index, new_value): + QUndoCommand.__init__(self) + + self._frictions = frictions + self._index = index + self._old = self._frictions.get(self._index).end_kp + self._new = new_value + + def undo(self): + self._frictions.get(self._index).end_kp = float(self._old) + + def redo(self): + self._frictions.get(self._index).end_kp = float(self._new) + + +class SetBeginStricklerCommand(QUndoCommand): + def __init__(self, frictions, index, new_value): + QUndoCommand.__init__(self) + + self._frictions = frictions + self._index = index + self._old = self._frictions.get(self._index).begin_strickler + self._new = new_value + + def undo(self): + self._frictions.get(self._index).begin_strickler = self._old + + def redo(self): + self._frictions.get(self._index).begin_strickler = self._new + +class SetEndStricklerCommand(QUndoCommand): + def __init__(self, frictions, index, new_value): + QUndoCommand.__init__(self) + + self._frictions = frictions + self._index = index + self._old = self._frictions.get(self._index).end_strickler + self._new = new_value + + def undo(self): + self._frictions.get(self._index).end_strickler = self._old + + def redo(self): + self._frictions.get(self._index).end_strickler = self._new + + +class SetEdgeCommand(QUndoCommand): + def __init__(self, frictions, index, edge): + QUndoCommand.__init__(self) + + self._frictions = frictions + self._index = index + self._old = self._frictions.get(self._index).edge + self._new = edge + + def undo(self): + self._frictions.get(self._index).edge = self._old + + def redo(self): + self._frictions.get(self._index).edge = self._new + +class AddCommand(QUndoCommand): + def __init__(self, frictions, index, reach): + QUndoCommand.__init__(self) + + self._frictions = frictions + self._index = index + self._reach = reach + self._new = None + + def undo(self): + self._frictions.delete_i([self._index]) + + def redo(self): + if self._new is None: + self._new = self._frictions.new(self._index) + self._new.edge = self._reach + else: + self._frictions.insert(self._index, self._new) + +class DelCommand(QUndoCommand): + def __init__(self, frictions, rows): + QUndoCommand.__init__(self) + + self._frictions = frictions + self._rows = rows + + self._friction = [] + for row in rows: + self._friction.append((row, self._frictions.get(row))) + self._friction.sort() + + def undo(self): + for row, el in self._friction: + self._frictions.insert(row, el) + + def redo(self): + self._frictions.delete_i(self._rows) + +class SortCommand(QUndoCommand): + def __init__(self, frictions, _reverse): + QUndoCommand.__init__(self) + + self._frictions = frictions + self._reverse = _reverse + + self._old = self._frictions.frictions + self._indexes = None + + def undo(self): + ll = self._frictions.frictions + self._frictions.sort( + key=lambda x: self._indexes[ll.index(x)] + ) + + def redo(self): + self._frictions.sort( + reverse=self._reverse, + key=lambda x: x.name + ) + if self._indexes is None: + self._indexes = list( + map( + lambda p: self._old.index(p), + self._frictions.frictions + ) + ) + self._old = None + + +class MoveCommand(QUndoCommand): + def __init__(self, frictions, up, i): + QUndoCommand.__init__(self) + + self._frictions = frictions + self._up = up == "up" + self._i = i + + def undo(self): + if self._up: + self._frictions.move_up(self._i) + else: + self._frictions.move_down(self._i) + + def redo(self): + if self._up: + self._frictions.move_up(self._i) + else: + self._frictions.move_down(self._i) + + +class PasteCommand(QUndoCommand): + def __init__(self, frictions, row, friction): + QUndoCommand.__init__(self) + + self._frictions = frictions + self._row = row + self._friction = deepcopy(friction) + self._friction.reverse() + + def undo(self): + self._frictions.delete(self._friction) + + def redo(self): + for friction in self._friction: + self._frictions.insert(self._row, friction) + + +class DuplicateCommand(QUndoCommand): + def __init__(self, frictions, rows, friction): + QUndoCommand.__init__(self) + + self._frictions = frictions + self._rows = rows + self._friction = deepcopy(friction) + self._friction.reverse() + + def undo(self): + self._frictions.delete(self._friction) + + def redo(self): + for friction in self._frictions: + self._frictions.insert(self._rows[0], friction) diff --git a/src/View/Sections/Window.py b/src/View/Frictions/Window.py similarity index 90% rename from src/View/Sections/Window.py rename to src/View/Frictions/Window.py index 63eb4b7e4d6b26325e1b29ecabeb549c05ac4e59..71a3e8e1036d1a96b244f686a8ba13eb378e635b 100644 --- a/src/View/Sections/Window.py +++ b/src/View/Frictions/Window.py @@ -24,18 +24,18 @@ from PyQt5.QtWidgets import ( QComboBox, QVBoxLayout, QHeaderView, QTabWidget, ) -from View.Sections.UndoCommand import ( +from View.Frictions.UndoCommand import ( PasteCommand, DuplicateCommand, ) -from View.Sections.Table import ( +from View.Frictions.Table import ( TableModel, ComboBoxDelegate ) from View.Plot.MplCanvas import MplCanvas from View.Geometry.PlotKPC import PlotKPC -from View.Sections.PlotStricklers import PlotStricklers -from View.Sections.translate import * +from View.Frictions.PlotStricklers import PlotStricklers +from View.Frictions.translate import * from View.Stricklers.Window import StricklersWindow @@ -43,16 +43,16 @@ _translate = QCoreApplication.translate logger = logging.getLogger() -class SectionsWindow(ASubMainWindow, ListedSubWindow): - def __init__(self, title="Sections", study=None, parent=None): +class FrictionsWindow(ASubMainWindow, ListedSubWindow): + def __init__(self, title="Frictions", study=None, parent=None): self._study = study - self._reach = self._study.river._current_reach - self._sections = self._reach.sections + self._reach = self._study.river.current_reach() + self._frictions = self._reach.frictions self.setup_title(title) - super(SectionsWindow, self).__init__( - name=self._title, ui="Sections", parent=parent + super(FrictionsWindow, self).__init__( + name=self._title, ui="Frictions", parent=parent ) self.setup_sc() @@ -174,7 +174,7 @@ class SectionsWindow(ASubMainWindow, ListedSubWindow): if len(rows) > 0: data = self._reach reach = self._reach.reach - sec = self._sections.get(rows[0]) + sec = self._frictions.get(rows[0]) highlight = (sec.begin_kp, sec.end_kp) self.plot = PlotKPC( @@ -194,7 +194,7 @@ class SectionsWindow(ASubMainWindow, ListedSubWindow): def add(self): rows = self.index_selected_rows() - if len(self._sections) == 0 or len(rows) == 0: + if len(self._frictions) == 0 or len(rows) == 0: self._table.add(0) else: self._table.add(rows[0]) diff --git a/src/View/Frictions/translate.py b/src/View/Frictions/translate.py new file mode 100644 index 0000000000000000000000000000000000000000..c404f59c7bf68aee46347dd1d357c19fddc18dcc --- /dev/null +++ b/src/View/Frictions/translate.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- + +from PyQt5.QtCore import QCoreApplication + +_translate = QCoreApplication.translate + +table_headers = { + "name": _translate("Frictions", "Name"), + # "edge": _translate("Frictions", "Reach"), + "begin_kp": _translate("Frictions", "Begin kp (m)"), + "end_kp": _translate("Frictions", "End kp (m)"), + "begin_strickler": _translate("Frictions", "Begin strickler"), + "end_strickler": _translate("Frictions", "End strickler"), +} diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index 024f611fe3e68c51912cea77a4412bf2d91e1b77..10a35a6ed831704789141ab76ddb6ce6f0b43fdf 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -32,7 +32,7 @@ from View.BoundaryCondition.Window import BoundaryConditionWindow from View.LateralContribution.Window import LateralContributionWindow from View.InitialConditions.Window import InitialConditionsWindow from View.Stricklers.Window import StricklersWindow -from View.Sections.Window import SectionsWindow +from View.Frictions.Window import FrictionsWindow from View.SolverParameters.Window import SolverParametersWindow from View.RunSolver.Window import SelectSolverWindow, SolverLogWindow from View.CheckList.Window import CheckListWindow @@ -62,7 +62,7 @@ define_model_action = [ "action_toolBar_network", "action_toolBar_geometry", "action_toolBar_mesh", "action_toolBar_run_meshing_tool", "action_toolBar_boundary_cond", "action_toolBar_lateral_contrib", - "action_toolBar_spills", "action_toolBar_sections", + "action_toolBar_spills", "action_toolBar_frictions", "action_toolBar_stricklers", "action_toolBar_building", "action_toolBar_initial_cond", # Menu @@ -144,7 +144,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): "action_menu_edit_geometry": self.open_geometry, "action_menu_boundary_conditions": self.open_boundary_cond, "action_menu_initial_conditions": self.open_initial_conditions, - "action_menu_edit_friction": self.open_sections, + "action_menu_edit_friction": self.open_frictions, "action_menu_edit_lateral_contribution": self.open_lateral_contrib, "action_menu_run_solver": self.run_solver, ## Help @@ -164,12 +164,13 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): "action_toolBar_lateral_contrib": self.open_lateral_contrib, "action_toolBar_spills": lambda: self.open_dummy("Deversement"), "action_toolBar_stricklers": self.open_stricklers, - "action_toolBar_sections": self.open_sections, + "action_toolBar_frictions": self.open_frictions, "action_toolBar_building": lambda: self.open_dummy("Ouvrages"), "action_toolBar_initial_cond": self.open_initial_conditions, } for action in actions: + logger.debug("Setup connection : " + action) self.findChild(QAction, action)\ .triggered.connect(actions[action]) # action.triggered.connect(actions[action]) @@ -461,14 +462,14 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): ) strick.show() - def open_sections(self): + def open_frictions(self): if (self.model is not None and self.model.river.has_current_reach()): - sections = SectionsWindow( + frictions = FrictionsWindow( study = self.model, parent = self ) - sections.show() + frictions.show() else: self.msg_select_reach() diff --git a/src/View/Sections/UndoCommand.py b/src/View/Sections/UndoCommand.py deleted file mode 100644 index 9ba5cff6131f1d014caa4b3c4996c18a659a18c6..0000000000000000000000000000000000000000 --- a/src/View/Sections/UndoCommand.py +++ /dev/null @@ -1,226 +0,0 @@ -# -*- coding: utf-8 -*- - -from copy import deepcopy -from tools import trace, timer - -from PyQt5.QtWidgets import ( - QMessageBox, QUndoCommand, QUndoStack, -) - -from Model.Section.Section import Section -from Model.Section.SectionList import SectionList - -class SetNameCommand(QUndoCommand): - def __init__(self, sections, index, new_value): - QUndoCommand.__init__(self) - - self._sections = sections - self._index = index - self._old = self._sections.get(self._index).name - self._new = new_value - - def undo(self): - self._sections.get(self._index).name = self._old - - def redo(self): - self._sections.get(self._index).name = self._new - -class SetBeginCommand(QUndoCommand): - def __init__(self, sections, index, new_value): - QUndoCommand.__init__(self) - - self._sections = sections - self._index = index - self._old = self._sections.get(self._index).begin_kp - self._new = new_value - - def undo(self): - self._sections.get(self._index).begin_kp = float(self._old) - - def redo(self): - self._sections.get(self._index).begin_kp = float(self._new) - -class SetEndCommand(QUndoCommand): - def __init__(self, sections, index, new_value): - QUndoCommand.__init__(self) - - self._sections = sections - self._index = index - self._old = self._sections.get(self._index).end_kp - self._new = new_value - - def undo(self): - self._sections.get(self._index).end_kp = float(self._old) - - def redo(self): - self._sections.get(self._index).end_kp = float(self._new) - - -class SetBeginStricklerCommand(QUndoCommand): - def __init__(self, sections, index, new_value): - QUndoCommand.__init__(self) - - self._sections = sections - self._index = index - self._old = self._sections.get(self._index).begin_strickler - self._new = new_value - - def undo(self): - self._sections.get(self._index).begin_strickler = self._old - - def redo(self): - self._sections.get(self._index).begin_strickler = self._new - -class SetEndStricklerCommand(QUndoCommand): - def __init__(self, sections, index, new_value): - QUndoCommand.__init__(self) - - self._sections = sections - self._index = index - self._old = self._sections.get(self._index).end_strickler - self._new = new_value - - def undo(self): - self._sections.get(self._index).end_strickler = self._old - - def redo(self): - self._sections.get(self._index).end_strickler = self._new - - -class SetEdgeCommand(QUndoCommand): - def __init__(self, sections, index, edge): - QUndoCommand.__init__(self) - - self._sections = sections - self._index = index - self._old = self._sections.get(self._index).edge - self._new = edge - - def undo(self): - self._sections.get(self._index).edge = self._old - - def redo(self): - self._sections.get(self._index).edge = self._new - -class AddCommand(QUndoCommand): - def __init__(self, sections, index, reach): - QUndoCommand.__init__(self) - - self._sections = sections - self._index = index - self._reach = reach - self._new = None - - def undo(self): - self._sections.delete_i([self._index]) - - def redo(self): - if self._new is None: - self._new = self._sections.new(self._index) - self._new.edge = self._reach - else: - self._sections.insert(self._index, self._new) - -class DelCommand(QUndoCommand): - def __init__(self, sections, rows): - QUndoCommand.__init__(self) - - self._sections = sections - self._rows = rows - - self._section = [] - for row in rows: - self._section.append((row, self._sections.get(row))) - self._section.sort() - - def undo(self): - for row, el in self._section: - self._sections.insert(row, el) - - def redo(self): - self._sections.delete_i(self._rows) - -class SortCommand(QUndoCommand): - def __init__(self, sections, _reverse): - QUndoCommand.__init__(self) - - self._sections = sections - self._reverse = _reverse - - self._old = self._sections.sections - self._indexes = None - - def undo(self): - ll = self._sections.sections - self._sections.sort( - key=lambda x: self._indexes[ll.index(x)] - ) - - def redo(self): - self._sections.sort( - reverse=self._reverse, - key=lambda x: x.name - ) - if self._indexes is None: - self._indexes = list( - map( - lambda p: self._old.index(p), - self._sections.sections - ) - ) - self._old = None - - -class MoveCommand(QUndoCommand): - def __init__(self, sections, up, i): - QUndoCommand.__init__(self) - - self._sections = sections - self._up = up == "up" - self._i = i - - def undo(self): - if self._up: - self._sections.move_up(self._i) - else: - self._sections.move_down(self._i) - - def redo(self): - if self._up: - self._sections.move_up(self._i) - else: - self._sections.move_down(self._i) - - -class PasteCommand(QUndoCommand): - def __init__(self, sections, row, section): - QUndoCommand.__init__(self) - - self._sections = sections - self._row = row - self._section = deepcopy(section) - self._section.reverse() - - def undo(self): - self._sections.delete(self._section) - - def redo(self): - for section in self._section: - self._sections.insert(self._row, section) - - -class DuplicateCommand(QUndoCommand): - def __init__(self, sections, rows, section): - QUndoCommand.__init__(self) - - self._sections = sections - self._rows = rows - self._section = deepcopy(section) - self._section.reverse() - - def undo(self): - self._sections.delete(self._section) - - def redo(self): - for section in self._sections: - self._sections.insert(self._rows[0], section) diff --git a/src/View/Sections/translate.py b/src/View/Sections/translate.py deleted file mode 100644 index 6868851a7917e04fc8d1a3240858ff971d4685fc..0000000000000000000000000000000000000000 --- a/src/View/Sections/translate.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- - -from PyQt5.QtCore import QCoreApplication - -_translate = QCoreApplication.translate - -table_headers = { - "name": _translate("Sections", "Name"), - # "edge": _translate("Sections", "Reach"), - "begin_kp": _translate("Sections", "Begin kp (m)"), - "end_kp": _translate("Sections", "End kp (m)"), - "begin_strickler": _translate("Sections", "Begin strickler"), - "end_strickler": _translate("Sections", "End strickler"), -} diff --git a/src/View/ui/Sections.ui b/src/View/ui/Frictions.ui similarity index 100% rename from src/View/ui/Sections.ui rename to src/View/ui/Frictions.ui diff --git a/src/View/ui/MainWindow.ui b/src/View/ui/MainWindow.ui index eb64701c2a7f3e66befe88cc401c1388301a4a84..b63f032c2f240e90c328ed4d72b66c96f054ae3b 100644 --- a/src/View/ui/MainWindow.ui +++ b/src/View/ui/MainWindow.ui @@ -292,7 +292,7 @@ <addaction name="separator"/> <addaction name="action_toolBar_spills"/> <addaction name="separator"/> - <addaction name="action_toolBar_sections"/> + <addaction name="action_toolBar_frictions"/> <addaction name="separator"/> <addaction name="action_toolBar_building"/> <addaction name="separator"/> @@ -858,12 +858,12 @@ <string>Edit lateral spills</string> </property> </action> - <action name="action_toolBar_sections"> + <action name="action_toolBar_frictions"> <property name="text"> - <string>Sections</string> + <string>Friction</string> </property> <property name="toolTip"> - <string>Edit section frictions and lateral contributions</string> + <string>Edit friction frictions and lateral contributions</string> </property> </action> <action name="action_toolBar_stricklers">