mirror of https://gitlab.com/pamhyr/pamhyr2
IC: Add combobox to match kp value on geometry profile kp and fix sort command.
parent
8daaef56a5
commit
16742b0319
|
|
@ -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):
|
||||||
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):
|
||||||
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 *
|
||||||
|
|
||||||
_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):
|
||||||
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):
|
||||||
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):
|
||||||
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 (
|
||||||
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):
|
||||||
)
|
)
|
||||||
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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue