Commit 1179dd0b authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

LC: Add begin and end kp and fix the convertion bug.

Showing with 112 additions and 10 deletions
+112 -10
......@@ -161,7 +161,9 @@ class BoundaryCondition(object):
@timer
def convert(self, cls):
new = cls(name = self.name)
new = cls(name = self.name, status = self._status)
new.node = self.node
for i, _ in self.data:
new.add(i)
......@@ -171,7 +173,6 @@ class BoundaryCondition(object):
for ind, v in self.data:
new._set_i_c_v(ind, j, v[i])
self._status.modified()
return new
def move_up(self, index):
......
......@@ -37,7 +37,7 @@ class BoundaryConditionList(object):
self._status.modified()
def new(self, lst, index):
n = NotDefined()
n = NotDefined(status=self._status)
self._tabs[lst].insert(index, n)
self._status.modified()
return n
......
......@@ -201,6 +201,12 @@ class Reach:
"""
return [profile.kp for profile in self.profiles]
def get_kp_min(self):
return min([profile.kp for profile in self.profiles])
def get_kp_max(self):
return max([profile.kp for profile in self.profiles])
# Guidelines
......
......@@ -13,6 +13,8 @@ class LateralContribution(object):
self._name = name
self._type = ""
self._edge = None
self._begin_kp = 0.0
self._end_kp = 0.0
self._data = []
self._header = []
self._types = [float, float]
......@@ -51,11 +53,48 @@ class LateralContribution(object):
@edge.setter
def edge(self, edge):
self._edge = edge
if edge is not None:
self._begin_kp = self._edge.reach.get_kp_min()
self._end_kp = self._edge.reach.get_kp_max()
self._status.modified()
def has_edge(self):
return self._edge is not None
@property
def begin_kp(self):
return self._begin_kp
@begin_kp.setter
def begin_kp(self, begin_kp):
if self._edge is None:
self._begin_kp = begin_kp
else:
_min = self._edge.reach.get_kp_min()
_max = self._edge.reach.get_kp_max()
if _min <= begin_kp <= _max:
self._begin_kp = begin_kp
self._status.modified()
@property
def end_kp(self):
return self._end_kp
@end_kp.setter
def end_kp(self, end_kp):
if self._edge is None:
self._end_kp = end_kp
else:
_min = self._edge.reach.get_kp_min()
_max = self._edge.reach.get_kp_max()
if _min <= end_kp <= _max:
self._end_kp = end_kp
self._status.modified()
@property
def header(self):
return self._header.copy()
......@@ -160,7 +199,11 @@ class LateralContribution(object):
@timer
def convert(self, cls):
new = cls(name = self.name)
new = cls(name = self.name, status = self._status)
new.edge = self.edge
new.begin_kp = self.begin_kp
new.end_kp = self.end_kp
for i, _ in self.data:
new.add(i)
......
......@@ -35,7 +35,7 @@ class LateralContributionList(object):
self._status.modified()
def new(self, lst, index):
n = NotDefined()
n = NotDefined(status=self._status)
self._tabs[lst].insert(index, n)
self._status.modified()
return n
......
......@@ -52,7 +52,6 @@ class RiverReach(Edge):
class River(Graph):
def __init__(self, status=None):
print(status)
super(River, self).__init__(status=status)
# Replace Node and Edge ctor by custom ctor
......
......@@ -17,6 +17,7 @@ from PyQt5.QtWidgets import (
from View.LateralContribution.UndoCommand import (
SetNameCommand, SetEdgeCommand, SetTypeCommand,
SetBeginCommand, SetEndCommand,
AddCommand, DelCommand, SortCommand,
MoveCommand, PasteCommand, DuplicateCommand,
)
......@@ -120,6 +121,11 @@ class TableModel(QAbstractTableModel):
if n is None:
return _translate("LateralContribution", "Not associate")
return n.name
elif self._headers[column] == "begin_kp":
return self._lcs.get(self._tab, row).begin_kp
elif self._headers[column] == "end_kp":
return self._lcs.get(self._tab, row).end_kp
return QVariant()
......@@ -139,20 +145,32 @@ class TableModel(QAbstractTableModel):
if self._headers[column] == "name":
self._undo.push(
SetNameCommand(
self._lcs, self._tab,row, value
self._lcs, self._tab, row, value
)
)
elif self._headers[column] == "type":
key = next(k for k, v in long_types.items() if v == value)
self._undo.push(
SetTypeCommand(
self._lcs, self._tab,row, LC_types[key]
self._lcs, self._tab, row, LC_types[key]
)
)
elif self._headers[column] == "edge":
self._undo.push(
SetEdgeCommand(
self._lcs, self._tab,row, self._data.edge(value)
self._lcs, self._tab, row, self._data.edge(value)
)
)
elif self._headers[column] == "begin_kp":
self._undo.push(
SetBeginCommand(
self._lcs, self._tab, row, value
)
)
elif self._headers[column] == "end_kp":
self._undo.push(
SetEndCommand(
self._lcs, self._tab, row, value
)
)
......
......@@ -26,6 +26,39 @@ class SetNameCommand(QUndoCommand):
def redo(self):
self._lcs.get(self._tab, self._index).name = self._new
class SetBeginCommand(QUndoCommand):
def __init__(self, lcs, tab, index, new_value):
QUndoCommand.__init__(self)
self._lcs = lcs
self._tab = tab
self._index = index
self._old = self._lcs.get(self._tab, self._index).begin_kp
self._new = new_value
def undo(self):
self._lcs.get(self._tab, self._index).begin_kp = float(self._old)
def redo(self):
self._lcs.get(self._tab, self._index).begin_kp = float(self._new)
class SetEndCommand(QUndoCommand):
def __init__(self, lcs, tab, index, new_value):
QUndoCommand.__init__(self)
self._lcs = lcs
self._tab = tab
self._index = index
self._old = self._lcs.get(self._tab, self._index).end_kp
self._new = new_value
def undo(self):
self._lcs.get(self._tab, self._index).end_kp = float(self._old)
def redo(self):
self._lcs.get(self._tab, self._index).end_kp = float(self._new)
class SetEdgeCommand(QUndoCommand):
def __init__(self, lcs, tab, index, edge):
QUndoCommand.__init__(self)
......
......@@ -18,7 +18,9 @@ long_types = {
table_headers = {
"name": _translate("LateralContribution", "Name"),
"type": _translate("LateralContribution", "Type"),
"edge": _translate("LateralContribution", "Edge")
"edge": _translate("LateralContribution", "Reach"),
"begin_kp": _translate("LateralContribution", "Begin kp (m)"),
"end_kp": _translate("LateralContribution", "End kp (m)")
}
LC_types = {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment