mirror of https://gitlab.com/pamhyr/pamhyr2
Compare commits
2 Commits
7b2c276643
...
afe0217655
| Author | SHA1 | Date |
|---|---|---|
|
|
afe0217655 | |
|
|
516efb64e8 |
|
|
@ -636,14 +636,38 @@ class WeatherParameters(SQLSubModel):
|
||||||
|
|
||||||
def add(self, index: int):
|
def add(self, index: int):
|
||||||
value = Data(self._default_0, self._default_1, status=self._status)
|
value = Data(self._default_0, self._default_1, status=self._status)
|
||||||
self._data.insert(index, value)
|
self.insert(index, value)
|
||||||
self.modified()
|
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def insert(self, index: int, value):
|
def insert(self, index: int, value):
|
||||||
|
visible_data = self.data
|
||||||
|
if index < len(visible_data):
|
||||||
|
index = self._data.index(visible_data[index])
|
||||||
|
else:
|
||||||
|
index = len(self._data)
|
||||||
self._data.insert(index, value)
|
self._data.insert(index, value)
|
||||||
self.modified()
|
self.modified()
|
||||||
|
|
||||||
|
def set_data_value(self, value, column, data):
|
||||||
|
value[column] = self._types[column](data)
|
||||||
|
self.modified()
|
||||||
|
|
||||||
|
def set_deleted(self, values, deleted):
|
||||||
|
for value in values:
|
||||||
|
if deleted:
|
||||||
|
value.set_as_deleted()
|
||||||
|
else:
|
||||||
|
value.set_as_not_deleted()
|
||||||
|
self.modified()
|
||||||
|
|
||||||
|
def reorder(self, values):
|
||||||
|
values = iter(values)
|
||||||
|
self._data = [
|
||||||
|
value if value.is_deleted() else next(values)
|
||||||
|
for value in self._data
|
||||||
|
]
|
||||||
|
self.modified()
|
||||||
|
|
||||||
def delete_i(self, indexes):
|
def delete_i(self, indexes):
|
||||||
self._data = list(
|
self._data = list(
|
||||||
map(
|
map(
|
||||||
|
|
@ -692,10 +716,7 @@ class WeatherParameters(SQLSubModel):
|
||||||
return lst
|
return lst
|
||||||
|
|
||||||
def _set_i_c_v(self, index, column, value):
|
def _set_i_c_v(self, index, column, value):
|
||||||
v = self._data[index]
|
self.set_data_value(self.get_i(index), column, value)
|
||||||
v[column] = self._types[column](value)
|
|
||||||
self._data[index] = v
|
|
||||||
self.modified()
|
|
||||||
|
|
||||||
def set_i_0(self, index: int, value):
|
def set_i_0(self, index: int, value):
|
||||||
self._set_i_c_v(index, 0, value)
|
self._set_i_c_v(index, 0, value)
|
||||||
|
|
@ -726,15 +747,13 @@ class WeatherParameters(SQLSubModel):
|
||||||
return new
|
return new
|
||||||
|
|
||||||
def move_up(self, index):
|
def move_up(self, index):
|
||||||
if index < len(self):
|
if 0 < index < len(self):
|
||||||
next = index - 1
|
data = self.data
|
||||||
d = self._data
|
data[index - 1], data[index] = data[index], data[index - 1]
|
||||||
d[index], d[next] = d[next], d[index]
|
self.reorder(data)
|
||||||
self.modified()
|
|
||||||
|
|
||||||
def move_down(self, index):
|
def move_down(self, index):
|
||||||
if index >= 0:
|
if 0 <= index < len(self) - 1:
|
||||||
prev = index + 1
|
data = self.data
|
||||||
d = self._data
|
data[index], data[index + 1] = data[index + 1], data[index]
|
||||||
d[index], d[prev] = d[prev], d[index]
|
self.reorder(data)
|
||||||
self.modified()
|
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,7 @@ class GeometryWindow(PamhyrWindow):
|
||||||
self.setup_plots()
|
self.setup_plots()
|
||||||
self.setup_statusbar()
|
self.setup_statusbar()
|
||||||
self.setup_connections()
|
self.setup_connections()
|
||||||
|
self.update_meshing_action()
|
||||||
|
|
||||||
def setup_table(self):
|
def setup_table(self):
|
||||||
if self._study.is_read_only():
|
if self._study.is_read_only():
|
||||||
|
|
@ -231,7 +232,16 @@ class GeometryWindow(PamhyrWindow):
|
||||||
def update_redraw(self):
|
def update_redraw(self):
|
||||||
self._update(redraw=True)
|
self._update(redraw=True)
|
||||||
|
|
||||||
|
def update_meshing_action(self):
|
||||||
|
enabled = (
|
||||||
|
not self._study.is_read_only()
|
||||||
|
and self._reach.number_profiles > 0
|
||||||
|
)
|
||||||
|
self.find(QAction, "action_meshing").setEnabled(enabled)
|
||||||
|
|
||||||
def _update(self, redraw=False, propagate=True):
|
def _update(self, redraw=False, propagate=True):
|
||||||
|
self.update_meshing_action()
|
||||||
|
|
||||||
if redraw:
|
if redraw:
|
||||||
self._plot_xy.redraw(data=self._reach)
|
self._plot_xy.redraw(data=self._reach)
|
||||||
self._plot_rkc.redraw(data=self._reach)
|
self._plot_rkc.redraw(data=self._reach)
|
||||||
|
|
@ -302,6 +312,9 @@ class GeometryWindow(PamhyrWindow):
|
||||||
self.tableView.model().blockSignals(False)
|
self.tableView.model().blockSignals(False)
|
||||||
|
|
||||||
def edit_meshing(self):
|
def edit_meshing(self):
|
||||||
|
if self._reach.number_profiles == 0:
|
||||||
|
return
|
||||||
|
|
||||||
rows = list(
|
rows = list(
|
||||||
set(
|
set(
|
||||||
(i.row() for i in self.tableView.selectedIndexes())
|
(i.row() for i in self.tableView.selectedIndexes())
|
||||||
|
|
|
||||||
|
|
@ -145,35 +145,24 @@ class TableModel(PamhyrTableModel):
|
||||||
if row <= 0:
|
if row <= 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
target = row + 2
|
self.layoutAboutToBeChanged.emit()
|
||||||
|
self._undo.push(
|
||||||
self.beginMoveRows(parent, row - 1, row - 1, parent, target)
|
|
||||||
|
|
||||||
self._undo_stack.push(
|
|
||||||
MoveCommand(
|
MoveCommand(
|
||||||
self._data, "up", row
|
self._data, "up", row
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.endMoveRows()
|
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
def move_down(self, index, parent=QModelIndex()):
|
def move_down(self, row, parent=QModelIndex()):
|
||||||
row = index.row()
|
if row < 0 or row >= len(self._data) - 1:
|
||||||
if row >= len(self._data):
|
|
||||||
return
|
return
|
||||||
|
|
||||||
target = row
|
self.layoutAboutToBeChanged.emit()
|
||||||
|
self._undo.push(
|
||||||
self.beginMoveRows(parent, row + 1, row + 1, parent, target)
|
|
||||||
|
|
||||||
self._undo_stack.push(
|
|
||||||
MoveCommand(
|
MoveCommand(
|
||||||
self._data, "down", row
|
self._data, "down", row
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.endMoveRows()
|
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
def paste(self, row, header, data):
|
def paste(self, row, header, data):
|
||||||
|
|
|
||||||
|
|
@ -31,17 +31,17 @@ class SetDataCommand(QUndoCommand):
|
||||||
QUndoCommand.__init__(self)
|
QUndoCommand.__init__(self)
|
||||||
|
|
||||||
self._data = data
|
self._data = data
|
||||||
self._index = index
|
self._value = self._data.get_i(index)
|
||||||
self._column = column
|
self._column = column
|
||||||
self._old = self._data.get_i(self._index)[self._column]
|
self._old = self._value[self._column]
|
||||||
_type = self._data.get_type_column(self._column)
|
_type = self._data.get_type_column(self._column)
|
||||||
self._new = _type(new_value)
|
self._new = _type(new_value)
|
||||||
|
|
||||||
def undo(self):
|
def undo(self):
|
||||||
self._data._set_i_c_v(self._index, self._column, self._old)
|
self._data.set_data_value(self._value, self._column, self._old)
|
||||||
|
|
||||||
def redo(self):
|
def redo(self):
|
||||||
self._data._set_i_c_v(self._index, self._column, self._new)
|
self._data.set_data_value(self._value, self._column, self._new)
|
||||||
|
|
||||||
|
|
||||||
class AddCommand(QUndoCommand):
|
class AddCommand(QUndoCommand):
|
||||||
|
|
@ -53,13 +53,13 @@ class AddCommand(QUndoCommand):
|
||||||
self._new = None
|
self._new = None
|
||||||
|
|
||||||
def undo(self):
|
def undo(self):
|
||||||
self._data.delete_i([self._index])
|
self._data.set_deleted([self._new], True)
|
||||||
|
|
||||||
def redo(self):
|
def redo(self):
|
||||||
if self._new is None:
|
if self._new is None:
|
||||||
self._new = self._data.add(self._index)
|
self._new = self._data.add(self._index)
|
||||||
else:
|
else:
|
||||||
self._data.insert(self._index, self._new)
|
self._data.set_deleted([self._new], False)
|
||||||
|
|
||||||
|
|
||||||
class DelCommand(QUndoCommand):
|
class DelCommand(QUndoCommand):
|
||||||
|
|
@ -75,10 +75,10 @@ class DelCommand(QUndoCommand):
|
||||||
self._wp.sort()
|
self._wp.sort()
|
||||||
|
|
||||||
def undo(self):
|
def undo(self):
|
||||||
self._data.set_as_not_deleted_i(self._rows)
|
self._data.set_deleted([wp for row, wp in self._wp], False)
|
||||||
|
|
||||||
def redo(self):
|
def redo(self):
|
||||||
self._data.set_as_deleted_i(self._rows)
|
self._data.set_deleted([wp for row, wp in self._wp], True)
|
||||||
|
|
||||||
|
|
||||||
class SortCommand(QUndoCommand):
|
class SortCommand(QUndoCommand):
|
||||||
|
|
@ -89,27 +89,17 @@ class SortCommand(QUndoCommand):
|
||||||
self._reverse = _reverse
|
self._reverse = _reverse
|
||||||
|
|
||||||
self._old = self._data.data
|
self._old = self._data.data
|
||||||
self._indexes = None
|
self._new = sorted(
|
||||||
|
self._old,
|
||||||
|
key=lambda value: value[0],
|
||||||
|
reverse=self._reverse
|
||||||
|
)
|
||||||
|
|
||||||
def undo(self):
|
def undo(self):
|
||||||
ll = self._data.data
|
self._data.reorder(self._old)
|
||||||
self._data.sort(
|
|
||||||
key=lambda x: self._indexes[ll.index(x)]
|
|
||||||
)
|
|
||||||
|
|
||||||
def redo(self):
|
def redo(self):
|
||||||
self._data.sort(
|
self._data.reorder(self._new)
|
||||||
_reverse=self._reverse,
|
|
||||||
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):
|
||||||
|
|
@ -117,20 +107,16 @@ class MoveCommand(QUndoCommand):
|
||||||
QUndoCommand.__init__(self)
|
QUndoCommand.__init__(self)
|
||||||
|
|
||||||
self._data = data
|
self._data = data
|
||||||
self._up = up == "up"
|
self._old = self._data.data
|
||||||
self._i = i
|
self._new = self._old.copy()
|
||||||
|
other = i - 1 if up == "up" else i + 1
|
||||||
|
self._new[i], self._new[other] = self._new[other], self._new[i]
|
||||||
|
|
||||||
def undo(self):
|
def undo(self):
|
||||||
if self._up:
|
self._data.reorder(self._old)
|
||||||
self._data.move_up(self._i)
|
|
||||||
else:
|
|
||||||
self._data.move_down(self._i)
|
|
||||||
|
|
||||||
def redo(self):
|
def redo(self):
|
||||||
if self._up:
|
self._data.reorder(self._new)
|
||||||
self._data.move_up(self._i)
|
|
||||||
else:
|
|
||||||
self._data.move_down(self._i)
|
|
||||||
|
|
||||||
|
|
||||||
class PasteCommand(QUndoCommand):
|
class PasteCommand(QUndoCommand):
|
||||||
|
|
@ -141,15 +127,18 @@ class PasteCommand(QUndoCommand):
|
||||||
self._row = row
|
self._row = row
|
||||||
self._wps = list(wps)
|
self._wps = list(wps)
|
||||||
self._wps.reverse()
|
self._wps.reverse()
|
||||||
|
self._inserted = False
|
||||||
|
|
||||||
def undo(self):
|
def undo(self):
|
||||||
self._data.delete_i(
|
self._data.set_deleted(self._wps, True)
|
||||||
range(self._row, self._row + len(self._wps))
|
|
||||||
)
|
|
||||||
|
|
||||||
def redo(self):
|
def redo(self):
|
||||||
for wp in self._wps:
|
if not self._inserted:
|
||||||
self._data.insert(self._row, wp)
|
for wp in self._wps:
|
||||||
|
self._data.insert(self._row, wp)
|
||||||
|
self._inserted = True
|
||||||
|
else:
|
||||||
|
self._data.set_deleted(self._wps, False)
|
||||||
|
|
||||||
|
|
||||||
class DuplicateCommand(QUndoCommand):
|
class DuplicateCommand(QUndoCommand):
|
||||||
|
|
@ -160,10 +149,15 @@ class DuplicateCommand(QUndoCommand):
|
||||||
self._rows = rows
|
self._rows = rows
|
||||||
self._wp = deepcopy(bc)
|
self._wp = deepcopy(bc)
|
||||||
self._wp.reverse()
|
self._wp.reverse()
|
||||||
|
self._inserted = False
|
||||||
|
|
||||||
def undo(self):
|
def undo(self):
|
||||||
self._data.delete(self._wp)
|
self._data.set_deleted(self._wp, True)
|
||||||
|
|
||||||
def redo(self):
|
def redo(self):
|
||||||
for bc in self._wp:
|
if not self._inserted:
|
||||||
self._data.insert(self._rows[0], bc)
|
for bc in self._wp:
|
||||||
|
self._data.insert(self._rows[0], bc)
|
||||||
|
self._inserted = True
|
||||||
|
else:
|
||||||
|
self._data.set_deleted(self._wp, False)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue