Compare commits

..

No commits in common. "0076faf03a5c436e9f6478ee29404fb12371da66" and "5e95c286a9a2e5fccc81b6de0b1b961cc790e238" have entirely different histories.

30 changed files with 70 additions and 494 deletions

View File

@ -57,13 +57,6 @@ class InternalMeshing(AMeshingTool):
# we never modify original profiles, we work on the copies # we never modify original profiles, we work on the copies
m_profiles = self.st_to_m(profiles, guide_list) m_profiles = self.st_to_m(profiles, guide_list)
# Adapt the spacing to the kilometre-point direction. The value from
# the dialog is a distance, so only its magnitude is significant.
step = self.signed_step(
step, m_profiles[0].rk, m_profiles[-1].rk
)
new_profiles = self.interpolate_transversal_step(m_profiles, step) new_profiles = self.interpolate_transversal_step(m_profiles, step)
for new_profiles2 in new_profiles: for new_profiles2 in new_profiles:
@ -72,12 +65,6 @@ class InternalMeshing(AMeshingTool):
return new_profiles return new_profiles
@staticmethod
def signed_step(step, begin_rk, end_rk):
if end_rk < begin_rk:
return -abs(step)
return abs(step)
def st_to_m(self, profiles, guide_list): def st_to_m(self, profiles, guide_list):
guide_list = ["un"] + guide_list + ["np"] guide_list = ["un"] + guide_list + ["np"]
max_values = [0] * (len(guide_list) - 1) max_values = [0] * (len(guide_list) - 1)

View File

@ -227,42 +227,3 @@ class InitialConditionsTemperature(SQLSubModel):
x.set_as_not_deleted() x.set_as_not_deleted()
self.modified() self.modified()
def split_reach(self, reach, profile, reach1, reach2):
parts = []
for new_reach in (reach1, reach2):
rks = new_reach.reach.get_rk()
if rks:
parts.append((new_reach.id, min(rks), max(rks)))
specifications = [
specification
for specification in self._data
if (not specification.is_deleted() and
specification.reach == reach.id)
]
clones = []
for specification in specifications:
begin = specification.start_rk
end = specification.end_rk
if begin is None or end is None:
continue
lower, upper = sorted((begin, end))
reverse = begin > end
for new_reach, part_lower, part_upper in parts:
clipped_lower = max(lower, part_lower)
clipped_upper = min(upper, part_upper)
if clipped_lower > clipped_upper:
continue
start_rk = clipped_upper if reverse else clipped_lower
end_rk = clipped_lower if reverse else clipped_upper
clones.append(specification.cloned_for(
new_reach, start_rk, end_rk
))
if clones:
self._data.extend(clones)
self.modified()

View File

@ -62,12 +62,6 @@ class InitialConditionsTemperatureList(PamhyrModelList):
self._status.modified() self._status.modified()
return n return n
def split_reach(self, reach, profile, reach1, reach2):
for initial_condition in self.lst:
initial_condition.split_reach(
reach, profile, reach1, reach2
)
@property @property
def Initial_Conditions_List(self): def Initial_Conditions_List(self):
return self.lst return self.lst

View File

@ -200,15 +200,3 @@ class ICTemperatureSpec(SQLSubModel):
def temperature(self, temperature): def temperature(self, temperature):
self._temperature = temperature self._temperature = temperature
self._status.modified() self._status.modified()
def cloned_for(self, reach, start_rk, end_rk):
new = ICTemperatureSpec(
name=self._name_section,
status=self._status
)
new._reach = reach
new._start_rk = start_rk
new._end_rk = end_rk
new._temperature = self._temperature
new.modified()
return new

View File

@ -192,13 +192,6 @@ class Data(SQLSubModel):
def __setitem__(self, key, value): def __setitem__(self, key, value):
self._data[key] = self._types[key](value) self._data[key] = self._types[key](value)
def cloned(self):
return Data(
self[0], self[1],
types=self._types,
status=self._status
)
class LateralContributionAdisTS(SQLSubModel): class LateralContributionAdisTS(SQLSubModel):
_sub_classes = [Data] _sub_classes = [Data]
@ -484,18 +477,6 @@ class LateralContributionAdisTS(SQLSubModel):
self._end_rk = end_rk self._end_rk = end_rk
self.modified() self.modified()
def cloned_for(self, reach, begin_rk, end_rk):
new = LateralContributionAdisTS(
pollutant=self._pollutant,
status=self._status
)
new._reach = reach
new._begin_rk = begin_rk
new._end_rk = end_rk
new._data = [data.cloned() for data in self.data]
new.modified()
return new
@property @property
def _default_0(self): def _default_0(self):
return self._types[0](0) return self._types[0](0)

View File

@ -68,46 +68,6 @@ class LateralContributionsAdisTSList(PamhyrModelList):
self._status.modified() self._status.modified()
return n return n
def split_reach(self, reach, profile, reach1, reach2):
parts = []
for new_reach in (reach1, reach2):
rks = new_reach.reach.get_rk()
if len(rks) == 0:
continue
parts.append((new_reach.id, min(rks), max(rks)))
contributions = [
contribution
for contribution in self.lst
if contribution.reach == reach.id
]
clones = []
for contribution in contributions:
begin = contribution.begin_rk
end = contribution.end_rk
if begin is None or end is None:
continue
lower, upper = sorted((begin, end))
reverse = begin > end
for new_reach, part_lower, part_upper in parts:
clipped_lower = max(lower, part_lower)
clipped_upper = min(upper, part_upper)
if clipped_lower > clipped_upper:
continue
begin_rk = clipped_upper if reverse else clipped_lower
end_rk = clipped_lower if reverse else clipped_upper
clones.append(contribution.cloned_for(
new_reach, begin_rk, end_rk
))
if len(clones) != 0:
self._lst.extend(clones)
self._status.modified()
@property @property
def Lat_Cont_List(self): def Lat_Cont_List(self):
return self.lst return self.lst

View File

@ -991,14 +991,5 @@ Last export at: @date."""
self._InitialConditionsAdisTS.split_reach( self._InitialConditionsAdisTS.split_reach(
reach, profile, r1, r2 reach, profile, r1, r2
) )
self._LateralContributionsAdisTS.split_reach(
reach, profile, r1, r2
)
self._InitialConditionsTemperature.split_reach(
reach, profile, r1, r2
)
self._WeatherParameters.split_reach(
reach, profile, r1, r2
)
return r1, r2 return r1, r2

View File

@ -216,9 +216,6 @@ class Parameter(SQLSubModel):
return new return new
def _db_save(self, execute, data=None): def _db_save(self, execute, data=None):
if not self.must_be_saved():
return True
ind = data["ind"] ind = data["ind"]
solver = data["solver"] solver = data["solver"]

View File

@ -153,13 +153,6 @@ class Data(SQLSubModel):
def __setitem__(self, key, value): def __setitem__(self, key, value):
self._data[key] = self._types[key](value) self._data[key] = self._types[key](value)
def cloned(self):
return Data(
self[0], self[1],
types=self._types,
status=self._status
)
class WeatherParametersDefault(SQLSubModel): class WeatherParametersDefault(SQLSubModel):
def __init__(self, type: str, value: float = 0.0, def __init__(self, type: str, value: float = 0.0,
@ -587,15 +580,6 @@ class WeatherParameters(SQLSubModel):
self._end_section = section self._end_section = section
self.modified() self.modified()
def cloned_for(self, reach, begin_section, end_section):
new = type(self)(name=self._name, status=self._status)
new._reach = reach
new._begin_section = begin_section
new._end_section = end_section
new._data = [data.cloned() for data in self.data]
new.modified()
return new
@property @property
def header(self): def header(self):
return self._header.copy() return self._header.copy()

View File

@ -161,64 +161,6 @@ class WeatherParametersList(PamhyrModelList):
self._status.modified() self._status.modified()
return n return n
def split_reach(self, reach, profile, reach1, reach2):
profiles = reach.reach.profiles
split_index = profiles.index(profile)
parts = [
(
reach1,
0,
split_index,
dict(zip(
profiles[:split_index + 1],
reach1.reach.profiles
))
),
(
reach2,
split_index,
len(profiles) - 1,
dict(zip(
profiles[split_index:],
reach2.reach.profiles
))
),
]
weather_parameters = [
weather_parameter
for weather_parameter in self.lst
if weather_parameter.reach is reach
]
clones = []
for weather_parameter in weather_parameters:
if (weather_parameter.begin_section not in profiles or
weather_parameter.end_section not in profiles):
continue
begin = profiles.index(weather_parameter.begin_section)
end = profiles.index(weather_parameter.end_section)
lower, upper = sorted((begin, end))
reverse = begin > end
for new_reach, part_lower, part_upper, sections in parts:
clipped_lower = max(lower, part_lower)
clipped_upper = min(upper, part_upper)
if clipped_lower > clipped_upper:
continue
begin_index = clipped_upper if reverse else clipped_lower
end_index = clipped_lower if reverse else clipped_upper
clones.append(weather_parameter.cloned_for(
new_reach,
sections[profiles[begin_index]],
sections[profiles[end_index]]
))
if clones:
self._lst.extend(clones)
self._status.modified()
@property @property
def Weather_Parameters_List(self): def Weather_Parameters_List(self):
return self.lst return self.lst

View File

@ -549,7 +549,7 @@ class AdisTSwc(AdisTS):
for LC in POL_LC: for LC in POL_LC:
reach = next(( reach = next((
edge for edge in study.river.enable_edges() edge for edge in study.river.enable_edges()
if edge.id == LC.reach if edge.id == LC.edge
), None) ), None)
if reach is None: if reach is None:
continue continue

View File

@ -935,8 +935,7 @@ class AdisTTwc(AdisTT):
for weather_parameter in study.river.weather_parameters.lst: for weather_parameter in study.river.weather_parameters.lst:
config = self._weather_files.get(weather_parameter.type) config = self._weather_files.get(weather_parameter.type)
if (config is None or weather_parameter.reach is None if (config is None or weather_parameter.reach is None
or weather_parameter.reach.is_deleted() or weather_parameter.reach.is_deleted()):
or not weather_parameter.reach.is_enable()):
continue continue
_, extension = config _, extension = config
exported = self._export_weather_file( exported = self._export_weather_file(

View File

@ -65,8 +65,6 @@ class Mage(CommandLineSolver):
self._cmd_solver = "@path @input -o @output" self._cmd_solver = "@path @input -o @output"
self._cmd_output = "" self._cmd_output = ""
self._reset_node_names()
@classmethod @classmethod
def default_parameters(cls): def default_parameters(cls):
lst = super(Mage, cls).default_parameters() lst = super(Mage, cls).default_parameters()
@ -127,11 +125,9 @@ class Mage(CommandLineSolver):
_l_alph = len(_alph) _l_alph = len(_alph)
def _reset_node_names(self): _nodes_cnt = 0
"""Reset the node-name registry for a new export.""" _nodes_names = {}
self._nodes_cnt = 0 _nodes_views = set()
self._nodes_names = {}
self._nodes_views = set()
def get_reach_name(self, reach): def get_reach_name(self, reach):
index = self._study.river.get_edge_id(reach) + 1 index = self._study.river.get_edge_id(reach) + 1
@ -1009,7 +1005,6 @@ class Mage8(Mage):
@timer @timer
def export(self, study, repertory, qlog=None, name="0"): def export(self, study, repertory, qlog=None, name="0"):
self._study = study self._study = study
self._reset_node_names()
name = study.name.replace(" ", "_") name = study.name.replace(" ", "_")
# Define GRA file name # Define GRA file name

View File

@ -143,43 +143,21 @@ class TableModel(PamhyrTableModel):
self.update() self.update()
def delete(self, rows, parent=QModelIndex()): def delete(self, rows, parent=QModelIndex()):
if not rows: self.beginRemoveRows(parent, rows[0], rows[-1])
return
rows = sorted(set(rows)) rows = list(map(
rows = [ lambda r: self.get_true_data_row(r),
self.get_true_data_row(row) rows))
for row in rows
]
# A multiple selection may contain non-contiguous rows. A model reset
# accurately represents this atomic undo command, unlike one
# beginRemoveRows() call spanning rows that are not all removed.
self.beginResetModel()
try:
self._undo.push( self._undo.push(
DelCommand( DelCommand(
self._data, rows self._data, rows
) )
) )
finally:
self.endResetModel() self.endRemoveRows()
self.update() self.update()
def undo(self):
self.beginResetModel()
try:
self._undo.undo()
finally:
self.endResetModel()
def redo(self):
self.beginResetModel()
try:
self._undo.redo()
finally:
self.endResetModel()
def sort(self, _reverse, parent=QModelIndex()): def sort(self, _reverse, parent=QModelIndex()):
self.layoutAboutToBeChanged.emit() self.layoutAboutToBeChanged.emit()

View File

@ -97,11 +97,12 @@ class DelCommand(QUndoCommand):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)
self._data = data self._data = data
self._rows = sorted(set(rows)) self._rows = rows
self._bc = [
self._data.get_i(row) self._bc = []
for row in self._rows for row in rows:
] self._bc.append(self._data.get_i(row))
self._bc.sort()
def undo(self): def undo(self):
for el in self._bc: for el in self._bc:
@ -119,17 +120,13 @@ class SortCommand(QUndoCommand):
self._data = data self._data = data
self._reverse = _reverse self._reverse = _reverse
# Keep the order of the complete underlying list, including soft self._old = self._data.data
# deleted items. ``data`` only exposes visible items and therefore self._indexes = None
# cannot reliably restore a sort after a delete/undelete operation.
self._old_positions = {
id(item): index
for index, item in enumerate(self._data._data)
}
def undo(self): def undo(self):
ll = self._data.data
self._data.sort( self._data.sort(
key=lambda item: self._old_positions[id(item)] key=lambda x: self._indexes[ll.index(x)]
) )
def redo(self): def redo(self):
@ -137,6 +134,14 @@ class SortCommand(QUndoCommand):
_reverse=self._reverse, _reverse=self._reverse,
key=lambda x: x[0] key=lambda x: x[0]
) )
if self._indexes is None:
self._indexes = list(
map(
lambda p: self._old.index(p),
self._data.data
)
)
self._old = None
class MoveCommand(QUndoCommand): class MoveCommand(QUndoCommand):

View File

@ -78,7 +78,7 @@ class ComboBoxDelegate(QItemDelegate):
else: else:
val = list( val = list(
map( map(
lambda n: n.name, self._data.enable_edges() lambda n: n.name, self._data.edges()
) )
) )

View File

@ -80,7 +80,7 @@ class ComboBoxDelegate(QItemDelegate):
else: else:
val = list( val = list(
map( map(
lambda n: n.name, self._data.enable_edges() lambda n: n.name, self._data.edges()
) )
) )

View File

@ -259,9 +259,6 @@ class GeometryReachTableModel(PamhyrTableModel):
**data **data
) )
self.apply_meshing(new_profiles, data, tableView)
def apply_meshing(self, new_profiles, data, tableView):
if new_profiles is None: if new_profiles is None:
return return

View File

@ -350,22 +350,14 @@ class GeometryWindow(PamhyrWindow):
tableview = self.tableView tableview = self.tableView
def fn(): def fn():
return mesher.meshing(self._reach, **data) self._table.meshing(mesher, data, tableview)
# self._table.meshing(mesher, data, tableview)
dlg2 = WaitingDialog( dlg2 = WaitingDialog(
payload_fn=fn, payload_fn=fn,
title="waiting_mesh", title="waiting_mesh",
parent=self parent=self
) )
dlg2.exec_() dlg2.exec_()
if dlg2.worker_exception is not None:
raise dlg2.worker_exception
# Models, undo stacks and selections belong to the GUI thread.
self._table.apply_meshing(
dlg2.worker_result, data, tableview
)
self._table.update() self._table.update()
except Exception as e: except Exception as e:

View File

@ -75,7 +75,7 @@ class ComboBoxDelegate(QItemDelegate):
else: else:
val = list( val = list(
map( map(
lambda n: n.name, self._data.enable_edges() lambda n: n.name, self._data.edges()
) )
) )
@ -140,30 +140,13 @@ class InitialConditionTableModel(PamhyrTableModel):
self._data = data self._data = data
def _setup_lst(self): def _setup_lst(self):
enabled_reach_ids = {
reach.id
for reach in self._river.enable_edges()
}
self._lst = list( self._lst = list(
filter( filter(
lambda ica: ( lambda ica: ica._deleted is False,
ica._deleted is False and
(
ica.reach in (None, -1) or
ica.reach in enabled_reach_ids
)
),
self._data._data self._data._data
) )
) )
def refresh(self):
self.beginResetModel()
try:
self._setup_lst()
finally:
self.endResetModel()
def rowCount(self, parent): def rowCount(self, parent):
return len(self._lst) return len(self._lst)
@ -238,30 +221,19 @@ class InitialConditionTableModel(PamhyrTableModel):
) )
) )
else: else:
new_value = value
if self._headers[column] == "reach":
reach = self._river.edge(value)
rks = reach.reach.get_rk()
if not rks:
return False
new_value = (reach.id, min(rks))
self._undo.push( self._undo.push(
SetCommandSpec( SetCommandSpec(
self._lst, row, self._headers[column], self._lst, row, self._headers[column],
new_value (self._river.edge(value).id
if self._headers[column] == "reach"
else value
)
) )
) )
except Exception as e: except Exception as e:
logger.info(e) logger.info(e)
logger.debug(traceback.format_exc()) logger.debug(traceback.format_exc())
if self._headers[column] == "reach":
rk_index = self.index(
row, self._headers.index("rk")
)
self.dataChanged.emit(index, rk_index)
else:
self.dataChanged.emit(index, index) self.dataChanged.emit(index, index)
return True return True

View File

@ -73,8 +73,6 @@ class SetCommandSpec(QUndoCommand):
self._old = self._data[self._row].name self._old = self._data[self._row].name
elif self._column == "reach": elif self._column == "reach":
self._old = self._data[self._row].reach self._old = self._data[self._row].reach
self._old_start_rk = self._data[self._row].start_rk
self._old_end_rk = self._data[self._row].end_rk
elif self._column == "rk": elif self._column == "rk":
self._old = self._data[self._row].start_rk self._old = self._data[self._row].start_rk
elif self._column == "temperature": elif self._column == "temperature":
@ -86,10 +84,6 @@ class SetCommandSpec(QUndoCommand):
elif column == "reach": elif column == "reach":
_type = int _type = int
if column == "reach":
self._new = _type(new_value[0])
self._new_rk = float(new_value[1])
else:
self._new = _type(new_value) self._new = _type(new_value)
def undo(self): def undo(self):
@ -97,8 +91,6 @@ class SetCommandSpec(QUndoCommand):
self._data[self._row].name = self._old self._data[self._row].name = self._old
elif self._column == "reach": elif self._column == "reach":
self._data[self._row].reach = self._old self._data[self._row].reach = self._old
self._data[self._row].start_rk = self._old_start_rk
self._data[self._row].end_rk = self._old_end_rk
elif self._column == "rk": elif self._column == "rk":
self._data[self._row].start_rk = self._old self._data[self._row].start_rk = self._old
self._data[self._row].end_rk = self._old self._data[self._row].end_rk = self._old
@ -110,8 +102,6 @@ class SetCommandSpec(QUndoCommand):
self._data[self._row].name = self._new self._data[self._row].name = self._new
elif self._column == "reach": elif self._column == "reach":
self._data[self._row].reach = self._new self._data[self._row].reach = self._new
self._data[self._row].start_rk = self._new_rk
self._data[self._row].end_rk = self._new_rk
elif self._column == "rk": elif self._column == "rk":
self._data[self._row].start_rk = self._new self._data[self._row].start_rk = self._new
self._data[self._row].end_rk = self._new self._data[self._row].end_rk = self._new

View File

@ -309,10 +309,3 @@ class InitialConditionsTemperatureWindow(PamhyrWindow):
if len(rows) == 0: if len(rows) == 0:
return return
self._table_spec.delete(rows) self._table_spec.delete(rows)
def _propagated_update(self, key=Modules(0)):
if Modules.NETWORK not in key:
return
self._table_spec.refresh()
self.table_spec.clearSelection()

View File

@ -81,10 +81,7 @@ class ComboBoxDelegate(QItemDelegate):
else: else:
self.editor.addItems( self.editor.addItems(
[self._trad['not_associated']] + [self._trad['not_associated']] +
[ self._data.edges_names()
reach.name
for reach in self._data.enable_edges()
]
) )
self.editor.setCurrentText(index.data(Qt.DisplayRole)) self.editor.setCurrentText(index.data(Qt.DisplayRole))
@ -122,11 +119,6 @@ class TableModel(PamhyrTableModel):
self._setup_lst() self._setup_lst()
def _setup_lst(self): def _setup_lst(self):
enabled_reach_ids = {
reach.id
for reach in self._data.enable_edges()
}
if self._lcs_list is not None: if self._lcs_list is not None:
self._lcs_pol_list = [ self._lcs_pol_list = [
lcs for lcs in self._lcs_list._lst lcs for lcs in self._lcs_list._lst
@ -135,13 +127,7 @@ class TableModel(PamhyrTableModel):
self._lst = list( self._lst = list(
filter( filter(
lambda x: ( lambda x: x._deleted is False,
x._deleted is False and
(
x.reach in (None, -1) or
x.reach in enabled_reach_ids
)
),
self._lcs_pol_list self._lcs_pol_list
) )
) )
@ -151,18 +137,6 @@ class TableModel(PamhyrTableModel):
def rowCount(self, parent): def rowCount(self, parent):
return len(self._lst) return len(self._lst)
def get(self, row):
if 0 <= row < len(self._lst):
return self._lst[row]
return None
def refresh(self):
self.beginResetModel()
try:
self._setup_lst()
finally:
self.endResetModel()
def data(self, index, role): def data(self, index, role):
if role != Qt.ItemDataRole.DisplayRole: if role != Qt.ItemDataRole.DisplayRole:
return QVariant() return QVariant()
@ -196,18 +170,11 @@ class TableModel(PamhyrTableModel):
try: try:
if self._headers[column] == "reach": if self._headers[column] == "reach":
reach = self._data.reach(value)
rks = reach.reach.get_rk()
if len(rks) == 0:
return False
self._undo.push( self._undo.push(
SetReachCommand( SetReachCommand(
self._lcs_list, self._lst, self._lcs_list, self._lst,
row, row,
reach.id, self._data.reach(value).id
min(rks),
max(rks)
) )
) )
elif self._headers[column] == "begin_rk": elif self._headers[column] == "begin_rk":
@ -226,12 +193,6 @@ class TableModel(PamhyrTableModel):
logger.info(e) logger.info(e)
logger.debug(traceback.format_exc()) logger.debug(traceback.format_exc())
if self._headers[column] == "reach":
end_index = self.index(
row, self._headers.index("end_rk")
)
self.dataChanged.emit(index, end_index)
else:
self.dataChanged.emit(index, index) self.dataChanged.emit(index, index)
return True return True

View File

@ -64,30 +64,20 @@ class SetEndCommand(QUndoCommand):
class SetReachCommand(QUndoCommand): class SetReachCommand(QUndoCommand):
def __init__(self, lcs, lcs_lst, index, reach, begin_rk, end_rk): def __init__(self, lcs, lcs_lst, index, reach):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)
self._lcs = lcs self._lcs = lcs
self._lcs_lst = lcs_lst self._lcs_lst = lcs_lst
self._index = index self._index = index
self._old = self._lcs_lst[self._index].reach self._old = self._lcs_lst[self._index].reach
self._old_begin_rk = self._lcs_lst[self._index].begin_rk
self._old_end_rk = self._lcs_lst[self._index].end_rk
self._new = reach self._new = reach
self._new_begin_rk = begin_rk
self._new_end_rk = end_rk
def undo(self): def undo(self):
contribution = self._lcs_lst[self._index] self._lcs_lst[self._index].reach = self._old
contribution.reach = self._old
contribution.begin_rk = self._old_begin_rk
contribution.end_rk = self._old_end_rk
def redo(self): def redo(self):
contribution = self._lcs_lst[self._index] self._lcs_lst[self._index].reach = self._new
contribution.reach = self._new
contribution.begin_rk = self._new_begin_rk
contribution.end_rk = self._new_end_rk
class AddCommand(QUndoCommand): class AddCommand(QUndoCommand):

View File

@ -20,7 +20,6 @@ import logging
from tools import trace, timer from tools import trace, timer
from Modules import Modules
from View.Tools.PamhyrWindow import PamhyrWindow from View.Tools.PamhyrWindow import PamhyrWindow
from PyQt5.QtGui import ( from PyQt5.QtGui import (
@ -188,13 +187,12 @@ class LateralContributionAdisTSWindow(PamhyrWindow):
data = None data = None
highlight = None highlight = None
tab = "liquid"
if len(rows) > 0: if len(rows) > 0:
contribution = self._table.get(rows[0]) reach_id = self._study.river\
reach_id = ( .lateral_contributions_adists.lst[rows[0]]\
contribution.reach .reach
if contribution is not None
else None
)
if reach_id: if reach_id:
reach = next( reach = next(
@ -203,10 +201,8 @@ class LateralContributionAdisTSWindow(PamhyrWindow):
self._study.river.reachs())) self._study.river.reachs()))
data = reach.reach data = reach.reach
highlight = ( lc = self._lcs.lst[rows[0]]
contribution.begin_rk, highlight = (lc.begin_rk, lc.end_rk)
contribution.end_rk
)
for delegate in self._delegate_rk: for delegate in self._delegate_rk:
delegate.data = reach delegate.data = reach
@ -258,23 +254,13 @@ class LateralContributionAdisTSWindow(PamhyrWindow):
self._table.redo() self._table.redo()
self._set_current_reach() self._set_current_reach()
def _propagated_update(self, key=Modules(0)):
if Modules.NETWORK not in key:
return
self._table.refresh()
self.find(QTableView, "tableView").clearSelection()
self._set_current_reach()
def edit(self): def edit(self):
rows = self.index_selected_rows() rows = self.index_selected_rows()
if not rows: if not rows:
return return
for row in rows: for row in rows:
data = self._table.get(row) data = self._lcs.lst[row]
if data is None:
continue
if self.sub_window_exists( if self.sub_window_exists(
EditLateralContributionAdisTSWindow, EditLateralContributionAdisTSWindow,

View File

@ -82,9 +82,7 @@ class SelectSolverWindow(PamhyrDialog):
# solvers = self._config.solvers # solvers = self._config.solvers
# solvers mage # solvers mage
solvers = list(filter( solvers = list(filter(
lambda x: "adists" not in x._type lambda x: "adists" not in x._type, self._config.solvers
and "adistt" not in x._type,
self._config.solvers
)) ))
solvers_name = list( solvers_name = list(
map( map(

View File

@ -47,15 +47,9 @@ class Worker(QObject):
super(self.__class__, self).__init__(parent) super(self.__class__, self).__init__(parent)
self._payload_fn = payload_fn self._payload_fn = payload_fn
self.result = None
self.exception = None
def process(self): def process(self):
try: self._payload_fn()
self.result = self._payload_fn()
except Exception as exception:
self.exception = exception
finally:
self.signalStatus.emit('end') self.signalStatus.emit('end')
@ -129,14 +123,6 @@ class WaitingDialog(PamhyrDialog):
self._timer = QTimer(self) self._timer = QTimer(self)
self._timer.timeout.connect(self.update_spinner) self._timer.timeout.connect(self.update_spinner)
@property
def worker_result(self):
return self._worker.result
@property
def worker_exception(self):
return self._worker.exception
def update_spinner(self): def update_spinner(self):
self._spinner_step += 1 self._spinner_step += 1
self._spinner_step %= len(self._spin) self._spinner_step %= len(self._spin)

View File

@ -87,10 +87,7 @@ class ComboBoxDelegate(QItemDelegate):
else: else:
self.editor.addItems( self.editor.addItems(
[self._trad['not_associated']] + [self._trad['not_associated']] +
[ self._data.edges_names()
reach.name
for reach in self._data.enable_edges()
]
) )
self.editor.setCurrentText(str(index.data(Qt.DisplayRole))) self.editor.setCurrentText(str(index.data(Qt.DisplayRole)))
@ -147,28 +144,8 @@ class WeatherParametersTableModel(PamhyrTableModel):
if self._type == "ND" or self._data is None: if self._type == "ND" or self._data is None:
self._lst = [] self._lst = []
return return
enabled_reach_ids = {
reach.id
for reach in self._river.enable_edges()
}
self._lst = self._data.lst self._lst = self._data.lst
self._lst = list(filter( self._lst = list(filter(lambda wp: wp.type == self._type, self._lst))
lambda wp: (
wp.type == self._type and
(
wp.reach is None or
wp.reach.id in enabled_reach_ids
)
),
self._lst
))
def refresh(self):
self.beginResetModel()
try:
self._setup_lst()
finally:
self.endResetModel()
def update_tab_spec(self, type="ND", enabled=True): def update_tab_spec(self, type="ND", enabled=True):
if enabled: if enabled:
@ -262,24 +239,15 @@ class WeatherParametersTableModel(PamhyrTableModel):
) )
) )
elif self._headers[column] == "reach": elif self._headers[column] == "reach":
edge = self._river.edge(value)
if not edge.reach.profiles:
return False
self._undo.push( self._undo.push(
SetEdgeCommand( SetEdgeCommand(
self._data, global_row, edge self._data, global_row, self._river.edge(value)
) )
) )
except Exception as e: except Exception as e:
logger.info(e) logger.info(e)
logger.debug(traceback.format_exc()) logger.debug(traceback.format_exc())
if self._headers[column] == "reach":
end_index = self.index(
row, self._headers.index("end_rk")
)
self.dataChanged.emit(index, end_index)
else:
self.dataChanged.emit(index, index) self.dataChanged.emit(index, index)
return True return True

View File

@ -125,26 +125,14 @@ class SetEdgeCommand(QUndoCommand):
self._wps = wps self._wps = wps
self._index = index self._index = index
weather_parameter = self._wps.get(self._index) self._old = self._wps.get(self._index).reach
self._old = weather_parameter.reach
self._old_begin = weather_parameter.begin_section
self._old_end = weather_parameter.end_section
self._new = edge self._new = edge
profiles = edge.reach.profiles
self._new_begin = min(profiles, key=lambda profile: profile.rk)
self._new_end = max(profiles, key=lambda profile: profile.rk)
def undo(self): def undo(self):
weather_parameter = self._wps.get(self._index) self._wps.get(self._index).reach = self._old
weather_parameter.reach = self._old
weather_parameter.begin_section = self._old_begin
weather_parameter.end_section = self._old_end
def redo(self): def redo(self):
weather_parameter = self._wps.get(self._index) self._wps.get(self._index).reach = self._new
weather_parameter.reach = self._new
weather_parameter.begin_section = self._new_begin
weather_parameter.end_section = self._new_end
class AddCommand(QUndoCommand): class AddCommand(QUndoCommand):

View File

@ -439,10 +439,3 @@ class WeatherParametersWindow(PamhyrWindow):
parent=self parent=self
) )
win.show() win.show()
def _propagated_update(self, key=Modules(0)):
if Modules.NETWORK not in key:
return
self._table_spec.refresh()
self.table_spec.clearSelection()