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 ...@@ -4,11 +4,13 @@ from copy import copy
from tools import trace, timer from tools import trace, timer
class Data(object): class Data(object):
def __init__(self, status = None): def __init__(self, reach = None, status = None):
super(Data, self).__init__() super(Data, self).__init__()
self._status = status self._status = status
self._reach = reach
self._name = "" self._name = ""
self._comment = "" self._comment = ""
...@@ -18,6 +20,10 @@ class Data(object): ...@@ -18,6 +20,10 @@ class Data(object):
self._elevation = 0.0 self._elevation = 0.0
self._draft = 0.0 self._draft = 0.0
@property
def name(self):
return self._name
def __getitem__(self, key): def __getitem__(self, key):
val = None val = None
...@@ -89,7 +95,7 @@ class InitialConditions(object): ...@@ -89,7 +95,7 @@ class InitialConditions(object):
self._status.modified() self._status.modified()
def new(self, index): def new(self, index):
n = Data(self._status) n = Data(reach = self._reach, status = self._status)
self._data.insert(index, n) self._data.insert(index, n)
self._status.modified() self._status.modified()
......
...@@ -25,6 +25,48 @@ from View.InitialConditions.translate import * ...@@ -25,6 +25,48 @@ from View.InitialConditions.translate import *
_translate = QCoreApplication.translate _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): class TableModel(QAbstractTableModel):
def __init__(self, river=None, reach=None, undo=None): def __init__(self, river=None, reach=None, undo=None):
super(QAbstractTableModel, self).__init__() super(QAbstractTableModel, self).__init__()
...@@ -35,8 +77,11 @@ class TableModel(QAbstractTableModel): ...@@ -35,8 +77,11 @@ class TableModel(QAbstractTableModel):
self._ics = self._river.initial_conditions.get(reach) self._ics = self._river.initial_conditions.get(reach)
def flags(self, index): def flags(self, index):
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable column = index.column()
options |= Qt.ItemIsEditable
options = Qt.ItemIsSelectable
if self._headers[column] != "speed":
options |= Qt.ItemIsEnabled | Qt.ItemIsEditable
return options return options
...@@ -53,7 +98,10 @@ class TableModel(QAbstractTableModel): ...@@ -53,7 +98,10 @@ class TableModel(QAbstractTableModel):
row = index.row() row = index.row()
column = index.column() 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 self._ics.get(row)[self._headers[column]]
return QVariant() return QVariant()
......
...@@ -81,7 +81,7 @@ class SortCommand(QUndoCommand): ...@@ -81,7 +81,7 @@ class SortCommand(QUndoCommand):
def redo(self): def redo(self):
self._ics.sort( self._ics.sort(
reverse=self._reverse, reverse=self._reverse,
key=lambda x: x.name key=lambda x: x["kp"]
) )
if self._indexes is None: if self._indexes is None:
self._indexes = list( self._indexes = list(
......
...@@ -28,7 +28,7 @@ from View.InitialConditions.UndoCommand import ( ...@@ -28,7 +28,7 @@ from View.InitialConditions.UndoCommand import (
DuplicateCommand, DuplicateCommand,
) )
from View.InitialConditions.Table import TableModel from View.InitialConditions.Table import TableModel, ComboBoxDelegate
from View.Plot.MplCanvas import MplCanvas from View.Plot.MplCanvas import MplCanvas
from View.Geometry.PlotXY import PlotXY from View.Geometry.PlotXY import PlotXY
...@@ -81,6 +81,16 @@ class InitialConditionsWindow(ASubMainWindow, ListedSubWindow): ...@@ -81,6 +81,16 @@ class InitialConditionsWindow(ASubMainWindow, ListedSubWindow):
) )
table.setModel(self._table) 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.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
table.setAlternatingRowColors(True) 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