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