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

IC: Implement copy/paste command.

Showing with 85 additions and 5 deletions
+85 -5
...@@ -266,6 +266,9 @@ class InitialConditions(SQLSubModel): ...@@ -266,6 +266,9 @@ class InitialConditions(SQLSubModel):
def __len__(self): def __len__(self):
return len(self._data) return len(self._data)
def lst(self):
return self._data
@property @property
def reach(self): def reach(self):
return self._reach return self._reach
...@@ -295,6 +298,15 @@ class InitialConditions(SQLSubModel): ...@@ -295,6 +298,15 @@ class InitialConditions(SQLSubModel):
self._data.insert(index, n) self._data.insert(index, n)
self._status.modified() self._status.modified()
def new_from_data(self, kp, discharge, elevation):
n = Data(reach=self._reach, status=self._status)
n['kp'] = kp
n['discharge'] = discharge
n['elevation'] = elevation
return n
def insert(self, index, data): def insert(self, index, data):
self._data.insert(index, data) self._data.insert(index, data)
self._status.modified() self._status.modified()
......
...@@ -197,7 +197,7 @@ class InitialConditionTableModel(PamhyrTableModel): ...@@ -197,7 +197,7 @@ class InitialConditionTableModel(PamhyrTableModel):
self.endMoveRows() self.endMoveRows()
self.layoutChanged.emit() self.layoutChanged.emit()
def move_down(self, index, parent=QModelIndex()): def move_down(self, row, parent=QModelIndex()):
if row > len(self._lst): if row > len(self._lst):
return return
...@@ -214,6 +214,36 @@ class InitialConditionTableModel(PamhyrTableModel): ...@@ -214,6 +214,36 @@ class InitialConditionTableModel(PamhyrTableModel):
self.endMoveRows() self.endMoveRows()
self.layoutChanged.emit() self.layoutChanged.emit()
def paste(self, index, header, data):
if len(header) != 0:
logger.error("Unexpected header in IC past data")
return
if len(data) == 0:
logger.error("Empty data")
return
if len(data[0]) != 3:
logger.error(f"Unexpected data size: [{data[0]}, ...]")
return
self.layoutAboutToBeChanged.emit()
self._undo.push(
PasteCommand(
self._lst, index,
list(
map(
lambda d: self._lst.new_from_data(*d),
data
)
)
)
)
self.layoutAboutToBeChanged.emit()
self.layoutChanged.emit()
def undo(self): def undo(self):
self._undo.undo() self._undo.undo()
self.layoutChanged.emit() self.layoutChanged.emit()
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
import logging import logging
from tools import trace, timer from tools import trace, timer, logger_exception
from View.Tools.PamhyrWindow import PamhyrWindow from View.Tools.PamhyrWindow import PamhyrWindow
...@@ -241,11 +241,49 @@ class InitialConditionsWindow(PamhyrWindow): ...@@ -241,11 +241,49 @@ class InitialConditionsWindow(PamhyrWindow):
self._update() self._update()
def _copy(self): def _copy(self):
logger.info("TODO: copy") rows = list(
self._update() map(
lambda row: row.row(),
self.tableView.selectionModel().selectedRows()
)
)
table = list(
map(
lambda eic: list(
map(
lambda k: eic[1][k],
["kp", "discharge", "elevation"]
)
),
filter(
lambda eic: eic[0] in rows,
enumerate(self._ics.lst())
)
)
)
self.copyTableIntoClipboard(table)
def _paste(self): def _paste(self):
logger.info("TODO: paste") header, data = self.parseClipboardTable()
if len(data) + len(header) == 0:
return
logger.debug(
"IC: Paste: " +
f"header = {header}, " +
f"data = {data}"
)
try:
row = 0 if len(self._ics.lst()) == 0 else self.index_selected_row()
# self._table.paste(row, header, data)
self._table.paste(row, [], data)
except Exception as e:
logger_exception(e)
self._update() self._update()
def _undo(self): def _undo(self):
......
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