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

View: LC: Use PamhyrTableModel.

Showing with 59 additions and 112 deletions
+59 -112
...@@ -24,6 +24,7 @@ from tools import trace, timer ...@@ -24,6 +24,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,
...@@ -150,26 +151,7 @@ class ExTimeDelegate(QItemDelegate): ...@@ -150,26 +151,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
...@@ -187,7 +169,7 @@ class TableModel(QAbstractTableModel): ...@@ -187,7 +169,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)
...@@ -198,12 +180,6 @@ class TableModel(QAbstractTableModel): ...@@ -198,12 +180,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
...@@ -313,12 +289,3 @@ class TableModel(QAbstractTableModel): ...@@ -313,12 +289,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()
...@@ -40,6 +40,7 @@ from View.Plot.MplCanvas import MplCanvas ...@@ -40,6 +40,7 @@ from View.Plot.MplCanvas import MplCanvas
from View.Plot.navigation_toolbar_2qt import PamHyrNavigationToolbar2QT from View.Plot.navigation_toolbar_2qt import PamHyrNavigationToolbar2QT
from View.LateralContribution.translate import long_types 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.Table import TableModel, ExTimeDelegate
from View.LateralContribution.Edit.Plot import Plot from View.LateralContribution.Edit.Plot import Plot
...@@ -85,24 +86,29 @@ class EditLateralContributionWindow(ASubMainWindow, ListedSubWindow): ...@@ -85,24 +86,29 @@ class EditLateralContributionWindow(ASubMainWindow, ListedSubWindow):
self.paste_sc = QShortcut(QKeySequence.Paste, self) self.paste_sc = QShortcut(QKeySequence.Paste, self)
def setup_table(self): 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") table = self.find(QTableView, "tableView")
self._table = TableModel( self._table = TableModel(
table_view = table,
table_headers = headers,
editable_headers = self._data.header,
delegates = {
"time": self._delegate_time,
},
data = self._data, data = self._data,
undo = self._undo_stack, 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.setModel(self._table)
table.setSelectionBehavior(QAbstractItemView.SelectRows) table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
......
...@@ -44,6 +44,8 @@ from View.LateralContribution.UndoCommand import ( ...@@ -44,6 +44,8 @@ from View.LateralContribution.UndoCommand import (
from Model.LateralContribution.LateralContributionTypes import ( from Model.LateralContribution.LateralContributionTypes import (
NotDefined, LateralContrib, Rain, Evaporation, NotDefined, LateralContrib, Rain, Evaporation,
) )
from View.Tools.PamhyrTable import PamhyrTableModel
from View.LateralContribution.translate import * from View.LateralContribution.translate import *
logger = logging.getLogger() logger = logging.getLogger()
...@@ -102,26 +104,13 @@ class ComboBoxDelegate(QItemDelegate): ...@@ -102,26 +104,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.lateral_contribution
self._headers = list(table_headers.keys()) self._tab = self._opt_data
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
def rowCount(self, parent): def rowCount(self, parent):
return self._lcs.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:
...@@ -131,26 +120,19 @@ class TableModel(QAbstractTableModel): ...@@ -131,26 +120,19 @@ class TableModel(QAbstractTableModel):
column = index.column() column = index.column()
if self._headers[column] == "name": 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": 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] return long_types[t]
elif self._headers[column] == "edge": 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: if n is None:
return _translate("LateralContribution", "Not associate") return _translate("LateralContribution", "Not associate")
return n.name return n.name
elif self._headers[column] == "begin_kp": 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": elif self._headers[column] == "end_kp":
return self._lcs.get(self._tab, row).end_kp return self._lst.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 QVariant() return QVariant()
...@@ -165,32 +147,32 @@ class TableModel(QAbstractTableModel): ...@@ -165,32 +147,32 @@ class TableModel(QAbstractTableModel):
if self._headers[column] == "name": if self._headers[column] == "name":
self._undo.push( self._undo.push(
SetNameCommand( SetNameCommand(
self._lcs, 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._lcs, self._tab, row, LC_types[key] self._lst, self._tab, row, LC_types[key]
) )
) )
elif self._headers[column] == "edge": elif self._headers[column] == "edge":
self._undo.push( self._undo.push(
SetEdgeCommand( 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": elif self._headers[column] == "begin_kp":
self._undo.push( self._undo.push(
SetBeginCommand( SetBeginCommand(
self._lcs, self._tab, row, value self._lst, self._tab, row, value
) )
) )
elif self._headers[column] == "end_kp": elif self._headers[column] == "end_kp":
self._undo.push( self._undo.push(
SetEndCommand( SetEndCommand(
self._lcs, self._tab, row, value self._lst, self._tab, row, value
) )
) )
except Exception as e: except Exception as e:
...@@ -205,7 +187,7 @@ class TableModel(QAbstractTableModel): ...@@ -205,7 +187,7 @@ class TableModel(QAbstractTableModel):
self._undo.push( self._undo.push(
AddCommand( AddCommand(
self._lcs, self._tab, row self._lst, self._tab, row
) )
) )
...@@ -217,7 +199,7 @@ class TableModel(QAbstractTableModel): ...@@ -217,7 +199,7 @@ class TableModel(QAbstractTableModel):
self._undo.push( self._undo.push(
DelCommand( DelCommand(
self._lcs, self._tab, rows self._lst, self._tab, rows
) )
) )
...@@ -229,7 +211,7 @@ class TableModel(QAbstractTableModel): ...@@ -229,7 +211,7 @@ class TableModel(QAbstractTableModel):
self._undo.push( self._undo.push(
SortCommand( SortCommand(
self._lcs, self._tab, False self._lst, self._tab, False
) )
) )
...@@ -246,7 +228,7 @@ class TableModel(QAbstractTableModel): ...@@ -246,7 +228,7 @@ class TableModel(QAbstractTableModel):
self._undo_stack.push( self._undo_stack.push(
MoveCommand( MoveCommand(
self._lcs, self._tab,"up", row self._lst, self._tab, "up", row
) )
) )
...@@ -254,7 +236,7 @@ class TableModel(QAbstractTableModel): ...@@ -254,7 +236,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._lcs): if row > len(self._lst):
return return
target = row target = row
...@@ -263,17 +245,9 @@ class TableModel(QAbstractTableModel): ...@@ -263,17 +245,9 @@ class TableModel(QAbstractTableModel):
self._undo_stack.push( self._undo_stack.push(
MoveCommand( MoveCommand(
self._lcs, self._tab,"down", row self._lst, self._tab, "down", row
) )
) )
self.endMoveRows() self.endMoveRows()
self.layoutChanged.emit() 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): ...@@ -93,14 +93,6 @@ class LateralContributionWindow(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 LateralContributionWindow(ASubMainWindow, ListedSubWindow): ...@@ -114,13 +106,20 @@ class LateralContributionWindow(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.setItemDelegateForColumn( table_headers = table_headers,
2, self._delegate_edge editable_headers = True,
delegates = {
"type": self._delegate_type,
"edge": self._delegate_edge,
},
data = self._study.river,
undo = self._undo_stack,
opt_data = t,
) )
table.setModel(self._table[t])
table.setSelectionBehavior(QAbstractItemView.SelectRows) table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
table.setAlternatingRowColors(True) table.setAlternatingRowColors(True)
......
...@@ -107,7 +107,8 @@ class PamhyrTableModel(QAbstractTableModel): ...@@ -107,7 +107,8 @@ class PamhyrTableModel(QAbstractTableModel):
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable 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 options |= Qt.ItemIsEditable
return options return options
......
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