diff --git a/src/View/WeatherParameters/Table.py b/src/View/WeatherParameters/Table.py index ef0b16af..02828b35 100644 --- a/src/View/WeatherParameters/Table.py +++ b/src/View/WeatherParameters/Table.py @@ -248,13 +248,18 @@ class WeatherParametersTableModel(PamhyrTableModel): ) elif self._headers[column] == "reach": new_reach = self._river.edge(value) - if self._overlaps_existing_interval( - row, reach=new_reach): + overlaps = self._overlaps_existing_interval( + row, reach=new_reach + ) + current = self._lst[row] + clear_interval = overlaps and current.reach is None + if overlaps and not clear_interval: self._show_overlap_warning() return False self._undo.push( SetEdgeCommand( - self._data, global_row, new_reach + self._data, global_row, new_reach, + clear_interval=clear_interval ) ) except Exception as e: diff --git a/src/View/WeatherParameters/UndoCommand.py b/src/View/WeatherParameters/UndoCommand.py index 18727d99..1f5ed23a 100644 --- a/src/View/WeatherParameters/UndoCommand.py +++ b/src/View/WeatherParameters/UndoCommand.py @@ -120,19 +120,27 @@ class SetEndCommand(QUndoCommand): class SetEdgeCommand(QUndoCommand): - def __init__(self, wps, index, edge): + def __init__(self, wps, index, edge, clear_interval=False): QUndoCommand.__init__(self) self._wps = wps self._index = index self._old = self._wps.get(self._index).reach + self._old_begin = self._wps.get(self._index).begin_section + self._old_end = self._wps.get(self._index).end_section self._new = edge + self._clear_interval = clear_interval def undo(self): self._wps.get(self._index).reach = self._old + self._wps.get(self._index).begin_section = self._old_begin + self._wps.get(self._index).end_section = self._old_end def redo(self): self._wps.get(self._index).reach = self._new + if self._clear_interval: + self._wps.get(self._index).begin_section = None + self._wps.get(self._index).end_section = None class AddCommand(QUndoCommand):