Compare commits

..

No commits in common. "48e9c14525031d6be42ae40ce0852ca655674055" and "fefc6ebc4f9fd811e0d977afd6bbad4682727a29" have entirely different histories.

9 changed files with 21 additions and 149 deletions

View File

@ -60,12 +60,9 @@ class StricklersList(PamhyrModelList):
return self.lst return self.lst
def new(self, index): def new(self, index):
owner_scenario = (
self._status.scenario_id if self._status is not None else -1
)
s = Stricklers( s = Stricklers(
status=self._status, status=self._status,
owner_scenario=owner_scenario owner_scenario=self._status.scenario_id
) )
self.insert(index, s) self.insert(index, s)
self.modified() self.modified()

View File

@ -120,9 +120,7 @@ class ConfigureWindow(PamhyrDialog):
editable_headers=["name", "comment", "minor", "medium"], editable_headers=["name", "comment", "minor", "medium"],
data=self._stricklers, data=self._stricklers,
undo=self._undo_stack, undo=self._undo_stack,
trad=self._trad_stricklers,
display_manning=self._config.display_manning, display_manning=self._config.display_manning,
unique_names=True,
) )
def setup_data(self): def setup_data(self):

View File

@ -52,58 +52,27 @@ _translate = QCoreApplication.translate
class ComboBoxDelegate(QItemDelegate): class ComboBoxDelegate(QItemDelegate):
def __init__(self, data=None, study=None, application_stricklers=None, def __init__(self, data=None, study=None,
mode="stricklers", trad=None, display_manning=True, mode="stricklers", trad=None, display_manning=True,
parent=None): parent=None):
super(ComboBoxDelegate, self).__init__(parent) super(ComboBoxDelegate, self).__init__(parent)
self._data = data self._data = data
self._study = study self._study = study
self._application_stricklers = application_stricklers or []
self._trad = trad self._trad = trad
self._mode = mode self._mode = mode
self._display_manning = display_manning self._display_manning = display_manning
@staticmethod
def same_strickler(first, second):
return (
first.name == second.name
and first.comment == second.comment
and first.minor == second.minor
and first.medium == second.medium
)
def createEditor(self, parent, option, index): def createEditor(self, parent, option, index):
self.editor = QComboBox(parent) self.editor = QComboBox(parent)
if self._mode == "stricklers": if self._mode == "stricklers":
self.editor.addItem(self._trad["not_defined"], None) self.editor.addItem(self._trad["not_defined"], None)
study_stricklers = self._study.river.stricklers.stricklers for strickler in self._study.river.stricklers.stricklers:
for strickler in study_stricklers:
self.editor.addItem( self.editor.addItem(
display_strickler(strickler, self._display_manning), display_strickler(strickler, self._display_manning),
strickler strickler
) )
application_stricklers = [
application_strickler
for application_strickler in self._application_stricklers
if not any(
self.same_strickler(
application_strickler, study_strickler
)
for study_strickler in study_stricklers
)
]
if application_stricklers:
self.editor.insertSeparator(self.editor.count())
for strickler in application_stricklers:
self.editor.addItem(
display_strickler(
strickler, self._display_manning
),
strickler
)
elif self._mode == "rk": elif self._mode == "rk":
self.editor.addItems( self.editor.addItems(
list(map(str, self._data.reach.get_rk())) list(map(str, self._data.reach.get_rk()))
@ -144,25 +113,6 @@ class FrictionTableModel(PamhyrTableModel):
self._lst = self._data.frictions self._lst = self._data.frictions
self._study = self._opt_data self._study = self._opt_data
def study_strickler(self, strickler):
if strickler is None:
return None
study_stricklers = self._study.river.stricklers
if any(s is strickler for s in study_stricklers.stricklers):
return strickler
for current in study_stricklers.stricklers:
if ComboBoxDelegate.same_strickler(current, strickler):
return current
copied = study_stricklers.new(len(study_stricklers))
copied.name = strickler.name
copied.comment = strickler.comment
copied.minor = strickler.minor
copied.medium = strickler.medium
return copied
def data(self, index, role): def data(self, index, role):
if role != Qt.ItemDataRole.DisplayRole: if role != Qt.ItemDataRole.DisplayRole:
return QVariant() return QVariant()
@ -221,7 +171,6 @@ class FrictionTableModel(PamhyrTableModel):
elif self._headers[column] == "begin_strickler": elif self._headers[column] == "begin_strickler":
strickler = value if hasattr(value, "minor") else \ strickler = value if hasattr(value, "minor") else \
self._study.river.strickler(value) self._study.river.strickler(value)
strickler = self.study_strickler(strickler)
self._undo.push( self._undo.push(
SetBeginStricklerCommand( SetBeginStricklerCommand(
self._lst, row, strickler self._lst, row, strickler
@ -230,7 +179,6 @@ class FrictionTableModel(PamhyrTableModel):
elif self._headers[column] == "end_strickler": elif self._headers[column] == "end_strickler":
strickler = value if hasattr(value, "minor") else \ strickler = value if hasattr(value, "minor") else \
self._study.river.strickler(value) self._study.river.strickler(value)
strickler = self.study_strickler(strickler)
self._undo.push( self._undo.push(
SetEndStricklerCommand( SetEndStricklerCommand(
self._lst, row, strickler self._lst, row, strickler

View File

@ -104,10 +104,6 @@ class FrictionsWindow(PamhyrWindow):
self._delegate_stricklers = ComboBoxDelegate( self._delegate_stricklers = ComboBoxDelegate(
data=self._reach, data=self._reach,
study=self._study, study=self._study,
application_stricklers=(
self._config.stricklers.stricklers
if self._config is not None else []
),
mode="stricklers", mode="stricklers",
trad=self._trad, trad=self._trad,
display_manning=getattr(self._config, "display_manning", False), display_manning=getattr(self._config, "display_manning", False),

View File

@ -31,7 +31,7 @@ from PyQt5.QtWidgets import (
QDialogButtonBox, QPushButton, QLineEdit, QDialogButtonBox, QPushButton, QLineEdit,
QFileDialog, QTableView, QAbstractItemView, QFileDialog, QTableView, QAbstractItemView,
QUndoStack, QShortcut, QAction, QItemDelegate, QUndoStack, QShortcut, QAction, QItemDelegate,
QComboBox, QMessageBox, QComboBox,
) )
from View.Tools.PamhyrTable import PamhyrTableModel from View.Tools.PamhyrTable import PamhyrTableModel
@ -51,55 +51,12 @@ _translate = QCoreApplication.translate
class TableModel(PamhyrTableModel): class TableModel(PamhyrTableModel):
def __init__(self, *args, display_manning=False, unique_names=False, def __init__(self, *args, display_manning=False, **kwargs):
hidden_stricklers=None, **kwargs):
self.display_manning = display_manning self.display_manning = display_manning
self.unique_names = unique_names
self.hidden_stricklers = hidden_stricklers or []
super(TableModel, self).__init__(*args, **kwargs) super(TableModel, self).__init__(*args, **kwargs)
@staticmethod
def same_strickler(first, second):
return (
first.name == second.name
and first.comment == second.comment
and first.minor == second.minor
and first.medium == second.medium
)
@property
def visible_stricklers(self):
return [
strickler
for strickler in self._data.stricklers
if not any(
self.same_strickler(strickler, hidden)
for hidden in self.hidden_stricklers
)
]
def rowCount(self, parent=QModelIndex()):
return len(self.visible_stricklers)
def get_visible(self, row):
return self.visible_stricklers[row]
def get_data_row(self, row):
return self._data.stricklers.index(self.get_visible(row))
def name_is_already_used(self, row, name):
current = self.get_visible(row)
return any(
strickler is not current and strickler.name == name
for strickler in self._data.stricklers
)
def get_true_data_row(self, row): def get_true_data_row(self, row):
visible = self.visible_stricklers el = self._data.get(row)
if row >= len(visible):
return len(self._data._lst)
el = visible[row]
return next( return next(
map( map(
@ -117,19 +74,18 @@ class TableModel(PamhyrTableModel):
row = index.row() row = index.row()
column = index.column() column = index.column()
strickler = self.get_visible(row)
if self._headers[column] == "name": if self._headers[column] == "name":
return strickler.name return self._data.get(row).name
elif self._headers[column] == "comment": elif self._headers[column] == "comment":
return strickler.comment return self._data.get(row).comment
elif self._headers[column] == "minor": elif self._headers[column] == "minor":
return display_coefficient( return display_coefficient(
strickler.minor, self.display_manning self._data.get(row).minor, self.display_manning
) )
elif self._headers[column] == "medium": elif self._headers[column] == "medium":
return display_coefficient( return display_coefficient(
strickler.medium, self.display_manning self._data.get(row).medium, self.display_manning
) )
return QVariant() return QVariant()
@ -145,20 +101,6 @@ class TableModel(PamhyrTableModel):
row = index.row() row = index.row()
column = index.column() column = index.column()
if (
self._headers[column] == "name"
and self.unique_names
and self.name_is_already_used(row, str(value))
):
QMessageBox.warning(
self._table_view,
self._trad["duplicate_name_title"],
self._trad["duplicate_name_message"]
)
return False
row = self.get_data_row(row)
try: try:
if self._headers[column] == "name": if self._headers[column] == "name":
self._undo.push( self._undo.push(
@ -214,7 +156,7 @@ class TableModel(PamhyrTableModel):
DelCommand( DelCommand(
self._data, list( self._data, list(
map( map(
lambda r: self.get_visible(r), lambda r: self._data.get(r),
rows rows
) )
) )

View File

@ -91,18 +91,17 @@ class StricklersWindow(PamhyrWindow):
def setup_table(self): def setup_table(self):
self._table = {} self._table = {}
if self._study.is_editable():
editable_headers = ["name", "comment", "minor", "medium"]
else:
editable_headers = []
for t in ["app", "study"]: for t in ["app", "study"]:
table = self.find(QTableView, f"tableView_{t}") table = self.find(QTableView, f"tableView_{t}")
if t == "study": if t == "study":
data = self._study.river.stricklers data = self._study.river.stricklers
hidden_stricklers = self._config.stricklers.stricklers
else: else:
data = self._config.stricklers data = self._config.stricklers
hidden_stricklers = []
editable_headers = []
if t == "study" and self._study.is_editable():
editable_headers = ["name", "comment", "minor", "medium"]
self._table[t] = TableModel( self._table[t] = TableModel(
table_view=table, table_view=table,
@ -113,7 +112,6 @@ class StricklersWindow(PamhyrWindow):
display_manning=getattr( display_manning=getattr(
self._config, "display_manning", False self._config, "display_manning", False
), ),
hidden_stricklers=hidden_stricklers,
) )
table.setModel(self._table[t]) table.setModel(self._table[t])

View File

@ -45,13 +45,6 @@ class StricklersTranslate(MainTranslate):
self._dict["application_mannings"] = _translate( self._dict["application_mannings"] = _translate(
"Stricklers", "Manning coefficients of the application" "Stricklers", "Manning coefficients of the application"
) )
self._dict["duplicate_name_title"] = _translate(
"Stricklers", "Name already used"
)
self._dict["duplicate_name_message"] = _translate(
"Stricklers",
"This name is already used by another coefficient."
)
self._sub_dict["table_headers"] = { self._sub_dict["table_headers"] = {
"name": self._dict["name"], "name": self._dict["name"],

View File

@ -325,7 +325,7 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="2" column="0"> <item row="1" column="0">
<widget class="QTableView" name="tableView_stricklers"/> <widget class="QTableView" name="tableView_stricklers"/>
</item> </item>
</layout> </layout>

View File

@ -339,10 +339,10 @@ class Config(SQL):
for stricklers in self.stricklers.stricklers: for stricklers in self.stricklers.stricklers:
self.execute(f""" self.execute(f"""
INSERT INTO stricklers VALUES ( INSERT INTO stricklers VALUES (
'{self._db_format(stricklers.name)}', '{self._db_format(stricklers._name)}',
'{self._db_format(stricklers.comment)}', '{self._db_format(stricklers._comment)}',
'{stricklers.minor}', '{stricklers._minor}',
'{stricklers.medium}' '{stricklers._medium}'
) )
""") """)