mirror of https://gitlab.com/pamhyr/pamhyr2
View: LC: Use PamhyrTableModel.
parent
650df2b56c
commit
602593a6cb
|
|
@ -24,6 +24,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,
|
||||
|
|
@ -150,26 +151,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
|
||||
|
|
@ -187,7 +169,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)
|
||||
|
|
@ -198,12 +180,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
|
||||
|
|
@ -313,12 +289,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()
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ from View.Plot.MplCanvas import MplCanvas
|
|||
from View.Plot.navigation_toolbar_2qt import PamHyrNavigationToolbar2QT
|
||||
|
||||
from View.LateralContribution.translate import long_types
|
||||
from View.LateralContribution.Edit.translate import table_headers
|
||||
from View.LateralContribution.Edit.Table import TableModel, ExTimeDelegate
|
||||
from View.LateralContribution.Edit.Plot import Plot
|
||||
|
||||
|
|
@ -85,23 +86,28 @@ class EditLateralContributionWindow(ASubMainWindow, ListedSubWindow):
|
|||
self.paste_sc = QShortcut(QKeySequence.Paste, self)
|
||||
|
||||
def setup_table(self):
|
||||
table = self.find(QTableView, "tableView")
|
||||
self._table = TableModel(
|
||||
headers = {}
|
||||
for h in self._data.header:
|
||||
headers[h] = table_headers[h]
|
||||
|
||||
self._delegate_time = ExTimeDelegate(
|
||||
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":
|
||||
self._delegate_time = ExTimeDelegate(
|
||||
data = self._data,
|
||||
mode = self._study.time_system,
|
||||
parent = self
|
||||
)
|
||||
|
||||
table.setItemDelegateForColumn(
|
||||
0, self._delegate_time
|
||||
)
|
||||
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,
|
||||
opt_data = self._study.time_system
|
||||
)
|
||||
|
||||
table.setModel(self._table)
|
||||
table.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||
|
|
|
|||
|
|
@ -44,6 +44,8 @@ from View.LateralContribution.UndoCommand import (
|
|||
from Model.LateralContribution.LateralContributionTypes import (
|
||||
NotDefined, LateralContrib, Rain, Evaporation,
|
||||
)
|
||||
|
||||
from View.Tools.PamhyrTable import PamhyrTableModel
|
||||
from View.LateralContribution.translate import *
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
|
@ -102,26 +104,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._lcs = self._data.lateral_contribution
|
||||
|
||||
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.lateral_contribution
|
||||
self._tab = self._opt_data
|
||||
|
||||
def rowCount(self, parent):
|
||||
return self._lcs.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:
|
||||
|
|
@ -131,26 +120,19 @@ class TableModel(QAbstractTableModel):
|
|||
column = index.column()
|
||||
|
||||
if self._headers[column] == "name":
|
||||
return self._lcs.get(self._tab, row).name
|
||||
return self._lst.get(self._tab, row).name
|
||||
elif self._headers[column] == "type":
|
||||
t = self._lcs.get(self._tab, row).lctype
|
||||
t = self._lst.get(self._tab, row).lctype
|
||||
return long_types[t]
|
||||
elif self._headers[column] == "edge":
|
||||
n = self._lcs.get(self._tab, row).edge
|
||||
n = self._lst.get(self._tab, row).edge
|
||||
if n is None:
|
||||
return _translate("LateralContribution", "Not associate")
|
||||
return n.name
|
||||
elif self._headers[column] == "begin_kp":
|
||||
return self._lcs.get(self._tab, row).begin_kp
|
||||
return self._lst.get(self._tab, row).begin_kp
|
||||
elif self._headers[column] == "end_kp":
|
||||
return self._lcs.get(self._tab, row).end_kp
|
||||
|
||||
|
||||
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 self._lst.get(self._tab, row).end_kp
|
||||
|
||||
return QVariant()
|
||||
|
||||
|
|
@ -165,32 +147,32 @@ class TableModel(QAbstractTableModel):
|
|||
if self._headers[column] == "name":
|
||||
self._undo.push(
|
||||
SetNameCommand(
|
||||
self._lcs, 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._lcs, self._tab, row, LC_types[key]
|
||||
self._lst, self._tab, row, LC_types[key]
|
||||
)
|
||||
)
|
||||
elif self._headers[column] == "edge":
|
||||
self._undo.push(
|
||||
SetEdgeCommand(
|
||||
self._lcs, self._tab, row, self._data.edge(value)
|
||||
self._lst, self._tab, row, self._data.edge(value)
|
||||
)
|
||||
)
|
||||
elif self._headers[column] == "begin_kp":
|
||||
self._undo.push(
|
||||
SetBeginCommand(
|
||||
self._lcs, self._tab, row, value
|
||||
self._lst, self._tab, row, value
|
||||
)
|
||||
)
|
||||
elif self._headers[column] == "end_kp":
|
||||
self._undo.push(
|
||||
SetEndCommand(
|
||||
self._lcs, self._tab, row, value
|
||||
self._lst, self._tab, row, value
|
||||
)
|
||||
)
|
||||
except Exception as e:
|
||||
|
|
@ -205,7 +187,7 @@ class TableModel(QAbstractTableModel):
|
|||
|
||||
self._undo.push(
|
||||
AddCommand(
|
||||
self._lcs, self._tab, row
|
||||
self._lst, self._tab, row
|
||||
)
|
||||
)
|
||||
|
||||
|
|
@ -217,7 +199,7 @@ class TableModel(QAbstractTableModel):
|
|||
|
||||
self._undo.push(
|
||||
DelCommand(
|
||||
self._lcs, self._tab, rows
|
||||
self._lst, self._tab, rows
|
||||
)
|
||||
)
|
||||
|
||||
|
|
@ -229,7 +211,7 @@ class TableModel(QAbstractTableModel):
|
|||
|
||||
self._undo.push(
|
||||
SortCommand(
|
||||
self._lcs, self._tab, False
|
||||
self._lst, self._tab, False
|
||||
)
|
||||
)
|
||||
|
||||
|
|
@ -246,7 +228,7 @@ class TableModel(QAbstractTableModel):
|
|||
|
||||
self._undo_stack.push(
|
||||
MoveCommand(
|
||||
self._lcs, self._tab,"up", row
|
||||
self._lst, self._tab, "up", row
|
||||
)
|
||||
)
|
||||
|
||||
|
|
@ -254,7 +236,7 @@ class TableModel(QAbstractTableModel):
|
|||
self.layoutChanged.emit()
|
||||
|
||||
def move_down(self, index, parent=QModelIndex()):
|
||||
if row > len(self._lcs):
|
||||
if row > len(self._lst):
|
||||
return
|
||||
|
||||
target = row
|
||||
|
|
@ -263,17 +245,9 @@ class TableModel(QAbstractTableModel):
|
|||
|
||||
self._undo_stack.push(
|
||||
MoveCommand(
|
||||
self._lcs, self._tab,"down", row
|
||||
self._lst, self._tab, "down", row
|
||||
)
|
||||
)
|
||||
|
||||
self.endMoveRows()
|
||||
self.layoutChanged.emit()
|
||||
|
||||
def undo(self):
|
||||
self._undo.undo()
|
||||
self.layoutChanged.emit()
|
||||
|
||||
def redo(self):
|
||||
self._undo.redo()
|
||||
self.layoutChanged.emit()
|
||||
|
|
|
|||
|
|
@ -93,14 +93,6 @@ class LateralContributionWindow(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 LateralContributionWindow(ASubMainWindow, ListedSubWindow):
|
|||
parent=self
|
||||
)
|
||||
|
||||
table.setItemDelegateForColumn(
|
||||
1, self._delegate_type
|
||||
table = self.find(QTableView, f"tableView_{t}")
|
||||
self._table[t] = TableModel(
|
||||
table_view = table,
|
||||
table_headers = table_headers,
|
||||
editable_headers = True,
|
||||
delegates = {
|
||||
"type": self._delegate_type,
|
||||
"edge": self._delegate_edge,
|
||||
},
|
||||
data = self._study.river,
|
||||
undo = self._undo_stack,
|
||||
opt_data = t,
|
||||
)
|
||||
table.setItemDelegateForColumn(
|
||||
2, self._delegate_edge
|
||||
)
|
||||
|
||||
table.setModel(self._table[t])
|
||||
table.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
||||
table.setAlternatingRowColors(True)
|
||||
|
|
|
|||
|
|
@ -107,7 +107,8 @@ class PamhyrTableModel(QAbstractTableModel):
|
|||
|
||||
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable
|
||||
|
||||
if self._headers[column] in self._editable_headers:
|
||||
if (self._editable_headers or
|
||||
self._headers[column] in self._editable_headers):
|
||||
options |= Qt.ItemIsEditable
|
||||
|
||||
return options
|
||||
|
|
|
|||
Loading…
Reference in New Issue