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

View: BC: Use PamhyrTableModel.

Showing with 61 additions and 115 deletions
+61 -115
......@@ -25,6 +25,7 @@ from tools import trace, timer
from View.ASubWindow import ASubMainWindow, AWidget
from View.ListedSubWindow import ListedSubWindow
from View.Tools.PamhyrTable import PamhyrTableModel
from PyQt5.QtCore import (
Qt, QVariant, QAbstractTableModel,
......@@ -152,26 +153,7 @@ class ExTimeDelegate(QItemDelegate):
self.commitData.emit(self.sender())
class TableModel(QAbstractTableModel):
def __init__(self, data=None, mode="time", undo=None):
super(QAbstractTableModel, self).__init__()
self._headers = data.header
self._data = data
self._mode = mode
self._undo = undo
def flags(self, index):
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable
options |= Qt.ItemIsEditable
return options
def rowCount(self, parent):
return len(self._data)
def columnCount(self, parent):
return len(self._headers)
class TableModel(PamhyrTableModel):
def data(self, index, role):
if role == Qt.TextAlignmentRole:
return Qt.AlignHCenter | Qt.AlignVCenter
......@@ -189,7 +171,7 @@ class TableModel(QAbstractTableModel):
if self._data.get_type_column(column) == float:
value = f"{v:.4f}"
elif self._data.header[column] == "time":
if self._mode == "time":
if self._opt_data == "time":
t0 = datetime.fromtimestamp(0)
t = datetime.fromtimestamp(v)
value = str(t - t0)
......@@ -200,12 +182,6 @@ class TableModel(QAbstractTableModel):
return value
def headerData(self, section, orientation, role):
if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal:
return table_headers[self._headers[section]]
return QVariant()
def setData(self, index, value, role=Qt.EditRole):
if not index.isValid() or role != Qt.EditRole:
return False
......@@ -315,12 +291,3 @@ class TableModel(QAbstractTableModel):
self.layoutAboutToBeChanged.emit()
self.layoutChanged.emit()
def undo(self):
self._undo.undo()
self.layoutChanged.emit()
def redo(self):
self._undo.redo()
self.layoutChanged.emit()
......@@ -16,6 +16,8 @@
# -*- coding: utf-8 -*-
import logging
from tools import timer, trace
from View.ASubWindow import ASubMainWindow, AWidget
......@@ -42,12 +44,15 @@ from View.Plot.MplCanvas import MplCanvas
from View.Plot.navigation_toolbar_2qt import PamHyrNavigationToolbar2QT
from View.BoundaryCondition.translate import long_types
from View.BoundaryCondition.Edit.translate import table_headers
from View.BoundaryCondition.Edit.UndoCommand import SetMetaDataCommand
from View.BoundaryCondition.Edit.Table import TableModel, ExTimeDelegate
from View.BoundaryCondition.Edit.Plot import Plot
_translate = QCoreApplication.translate
logger = logging.getLogger()
class WD50Sigma(AWidget):
d50Changed = pyqtSignal(float)
sigmaChanged = pyqtSignal(float)
......@@ -141,24 +146,29 @@ class EditBoundaryConditionWindow(ASubMainWindow, ListedSubWindow):
self._d50sigma.set_sigma(self._data.sigma)
def setup_table(self):
headers = {}
for h in self._data.header:
headers[h] = table_headers[h]
self._delegate_time = ExTimeDelegate(
data = self._data,
mode = self._study.time_system,
parent = self
)
table = self.find(QTableView, "tableView")
self._table = TableModel(
table_view = table,
table_headers = headers,
editable_headers = self._data.header,
delegates = {
"time": self._delegate_time,
},
data = self._data,
undo = self._undo_stack,
mode = self._study.time_system
opt_data = self._study.time_system
)
if self._data.header[0] == "time":
self._delegate_time = ExTimeDelegate(
data = self._data,
mode = self._study.time_system,
parent = self
)
table.setItemDelegateForColumn(
0, self._delegate_time
)
table.setModel(self._table)
table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
......
......@@ -39,6 +39,8 @@ from Model.BoundaryCondition.BoundaryConditionTypes import (
TimeOverZ, TimeOverDischarge, ZOverDischarge
)
from View.Tools.PamhyrTable import PamhyrTableModel
from View.BoundaryCondition.UndoCommand import (
SetNameCommand, SetNodeCommand, SetTypeCommand,
AddCommand, DelCommand, SortCommand,
......@@ -104,26 +106,13 @@ class ComboBoxDelegate(QItemDelegate):
self.commitData.emit(self.sender())
class TableModel(QAbstractTableModel):
def __init__(self, data=None, undo=None, tab=""):
super(QAbstractTableModel, self).__init__()
self._headers = list(table_headers.keys())
self._data = data
self._undo = undo
self._tab = tab
self._bcs = self._data.boundary_condition
def flags(self, index):
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable
options |= Qt.ItemIsEditable
return options
class TableModel(PamhyrTableModel):
def _setup_lst(self):
self._lst = self._data.boundary_condition
self._tab = self._opt_data
def rowCount(self, parent):
return self._bcs.len(self._tab)
def columnCount(self, parent):
return len(self._headers)
return self._lst.len(self._tab)
def data(self, index, role):
if role != Qt.ItemDataRole.DisplayRole:
......@@ -133,24 +122,18 @@ class TableModel(QAbstractTableModel):
column = index.column()
if self._headers[column] == "name":
return self._bcs.get(self._tab, row).name
return self._lst.get(self._tab, row).name
elif self._headers[column] == "type":
t = self._bcs.get(self._tab, row).bctype
t = self._lst.get(self._tab, row).bctype
return long_types[t]
elif self._headers[column] == "node":
n = self._bcs.get(self._tab, row).node
n = self._lst.get(self._tab, row).node
if n is None:
return _translate("BoundaryCondition", "Not associate")
return n.name
return QVariant()
def headerData(self, section, orientation, role):
if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal:
return table_headers[self._headers[section]]
return QVariant()
def setData(self, index, value, role=Qt.EditRole):
if not index.isValid() or role != Qt.EditRole:
return False
......@@ -162,20 +145,20 @@ class TableModel(QAbstractTableModel):
if self._headers[column] == "name":
self._undo.push(
SetNameCommand(
self._bcs, self._tab,row, value
self._lst, 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._bcs, self._tab,row, BC_types[key]
self._lst, self._tab,row, BC_types[key]
)
)
elif self._headers[column] == "node":
self._undo.push(
SetNodeCommand(
self._bcs, self._tab,row, self._data.node(value)
self._lst, self._tab,row, self._data.node(value)
)
)
except Exception as e:
......@@ -190,7 +173,7 @@ class TableModel(QAbstractTableModel):
self._undo.push(
AddCommand(
self._bcs, self._tab,row
self._lst, self._tab,row
)
)
......@@ -202,7 +185,7 @@ class TableModel(QAbstractTableModel):
self._undo.push(
DelCommand(
self._bcs, self._tab,rows
self._lst, self._tab, rows
)
)
......@@ -214,7 +197,7 @@ class TableModel(QAbstractTableModel):
self._undo.push(
SortCommand(
self._bcs, self._tab,False
self._lst, self._tab, False
)
)
......@@ -231,7 +214,7 @@ class TableModel(QAbstractTableModel):
self._undo_stack.push(
MoveCommand(
self._bcs, self._tab,"up", row
self._lst, self._tab, "up", row
)
)
......@@ -239,7 +222,7 @@ class TableModel(QAbstractTableModel):
self.layoutChanged.emit()
def move_down(self, index, parent=QModelIndex()):
if row > len(self._bcs):
if row > len(self._lst):
return
target = row
......@@ -248,7 +231,7 @@ class TableModel(QAbstractTableModel):
self._undo_stack.push(
MoveCommand(
self._bcs, self._tab,"down", row
self._lst, self._tab, "down", row
)
)
......
......@@ -93,14 +93,6 @@ class BoundaryConditionWindow(ASubMainWindow, ListedSubWindow):
self._table = {}
for t in ["liquid", "solid", "suspenssion"]:
table = self.find(QTableView, f"tableView_{t}")
self._table[t] = TableModel(
data = self._study.river,
undo = self._undo_stack,
tab = t,
)
table.setModel(self._table[t])
self._delegate_type = ComboBoxDelegate(
data = self._study.river,
mode = "type",
......@@ -114,13 +106,20 @@ class BoundaryConditionWindow(ASubMainWindow, ListedSubWindow):
parent=self
)
table.setItemDelegateForColumn(
1, self._delegate_type
)
table.setItemDelegateForColumn(
2, self._delegate_node
table = self.find(QTableView, f"tableView_{t}")
self._table[t] = TableModel(
table_view = table,
table_headers = table_headers,
editable_headers = ["name", "type", "node"],
delegates = {
"type": self._delegate_type,
"node": self._delegate_node,
},
data = self._study.river,
undo = self._undo_stack,
opt_data = t,
)
table.setModel(self._table[t])
table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
table.setAlternatingRowColors(True)
......
......@@ -80,7 +80,8 @@ class PamhyrTableModel(QAbstractTableModel):
editable_headers=[],
delegates = {},
data=None,
undo=None):
undo=None,
opt_data=None):
super(PamhyrTableModel, self).__init__()
self._table_view = table_view
......@@ -91,6 +92,7 @@ class PamhyrTableModel(QAbstractTableModel):
self._delegates = delegates
self._data = data
self._opt_data = opt_data
self._undo = undo
self._lst = []
......@@ -98,7 +100,7 @@ class PamhyrTableModel(QAbstractTableModel):
self._setup_lst()
def _setup_lst(self):
self._lst = self.data
self._lst = self._data
def flags(self, index):
column = index.column()
......@@ -135,18 +137,3 @@ class PamhyrTableModel(QAbstractTableModel):
def redo(self):
self._undo.redo()
self.layoutChanged.emit()
def add(self, row, parent=QModelIndex()):
raise NotImplementedMethodeError(self, self.add)
def delete(self, rows, parent=QModelIndex()):
raise NotImplementedMethodeError(self, self.delete)
def sort(self, _reverse, parent=QModelIndex()):
raise NotImplementedMethodeError(self, self.sort)
def move_up(self, row, parent=QModelIndex()):
raise NotImplementedMethodeError(self, self.move_up)
def move_down(self, index, parent=QModelIndex()):
raise NotImplementedMethodeError(self, self.move_down)
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