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

IC: Add combobox to match kp value on geometry profile kp and fix sort command.

Showing with 71 additions and 7 deletions
+71 -7
......@@ -4,11 +4,13 @@ from copy import copy
from tools import trace, timer
class Data(object):
def __init__(self, status = None):
def __init__(self, reach = None, status = None):
super(Data, self).__init__()
self._status = status
self._reach = reach
self._name = ""
self._comment = ""
......@@ -18,6 +20,10 @@ class Data(object):
self._elevation = 0.0
self._draft = 0.0
@property
def name(self):
return self._name
def __getitem__(self, key):
val = None
......@@ -89,7 +95,7 @@ class InitialConditions(object):
self._status.modified()
def new(self, index):
n = Data(self._status)
n = Data(reach = self._reach, status = self._status)
self._data.insert(index, n)
self._status.modified()
......
......@@ -25,6 +25,48 @@ from View.InitialConditions.translate import *
_translate = QCoreApplication.translate
class ComboBoxDelegate(QItemDelegate):
def __init__(self, reach=None, parent=None):
super(ComboBoxDelegate, self).__init__(parent)
self._reach = reach.reach
def createEditor(self, parent, option, index):
self.editor = QComboBox(parent)
self.editor.addItems(
list(
map(
str,
self._reach.get_kp()
)
)
)
self.editor.setCurrentText(str(index.data(Qt.DisplayRole)))
return self.editor
def setEditorData(self, editor, index):
value = index.data(Qt.DisplayRole)
self.editor.currentTextChanged.connect(self.currentItemChanged)
def setModelData(self, editor, model, index):
text = str(editor.currentText())
model.setData(index, text)
editor.close()
editor.deleteLater()
def updateEditorGeometry(self, editor, option, index):
r = QRect(option.rect)
if self.editor.windowFlags() & Qt.Popup and editor.parent() is not None:
r.setTopLeft(self.editor.parent().mapToGlobal(r.topLeft()))
editor.setGeometry(r)
@pyqtSlot()
def currentItemChanged(self):
self.commitData.emit(self.sender())
class TableModel(QAbstractTableModel):
def __init__(self, river=None, reach=None, undo=None):
super(QAbstractTableModel, self).__init__()
......@@ -35,8 +77,11 @@ class TableModel(QAbstractTableModel):
self._ics = self._river.initial_conditions.get(reach)
def flags(self, index):
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable
options |= Qt.ItemIsEditable
column = index.column()
options = Qt.ItemIsSelectable
if self._headers[column] != "speed":
options |= Qt.ItemIsEnabled | Qt.ItemIsEditable
return options
......@@ -53,7 +98,10 @@ class TableModel(QAbstractTableModel):
row = index.row()
column = index.column()
if self._headers[column] is not None:
if self._headers[column] not in ["name", "comment"]:
v = self._ics.get(row)[self._headers[column]]
return f"{v:.4f}"
else:
return self._ics.get(row)[self._headers[column]]
return QVariant()
......
......@@ -81,7 +81,7 @@ class SortCommand(QUndoCommand):
def redo(self):
self._ics.sort(
reverse=self._reverse,
key=lambda x: x.name
key=lambda x: x["kp"]
)
if self._indexes is None:
self._indexes = list(
......
......@@ -28,7 +28,7 @@ from View.InitialConditions.UndoCommand import (
DuplicateCommand,
)
from View.InitialConditions.Table import TableModel
from View.InitialConditions.Table import TableModel, ComboBoxDelegate
from View.Plot.MplCanvas import MplCanvas
from View.Geometry.PlotXY import PlotXY
......@@ -81,6 +81,16 @@ class InitialConditionsWindow(ASubMainWindow, ListedSubWindow):
)
table.setModel(self._table)
self._delegate_kp = ComboBoxDelegate(
reach = self._reach,
parent=self
)
table.setItemDelegateForColumn(
list(table_headers).index("kp"),
self._delegate_kp
)
table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
table.setAlternatingRowColors(True)
......
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