Strickler: dont display duplicated strickler from application database into study data tab

manning
Dylan Jeannin 2026-07-27 17:13:16 +02:00
parent db62af6f71
commit 48e9c14525
2 changed files with 48 additions and 8 deletions

View File

@ -52,20 +52,54 @@ _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, unique_names=False,
**kwargs): hidden_stricklers=None, **kwargs):
self.display_manning = display_manning self.display_manning = display_manning
self.unique_names = unique_names 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): def name_is_already_used(self, row, name):
current = self._data.get(row) current = self.get_visible(row)
return any( return any(
strickler is not current and strickler.name == name strickler is not current and strickler.name == name
for strickler in self._data.stricklers for strickler in self._data.stricklers
) )
def get_true_data_row(self, row): def get_true_data_row(self, row):
el = self._data.get(row) visible = self.visible_stricklers
if row >= len(visible):
return len(self._data._lst)
el = visible[row]
return next( return next(
map( map(
@ -83,18 +117,19 @@ 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 self._data.get(row).name return strickler.name
elif self._headers[column] == "comment": elif self._headers[column] == "comment":
return self._data.get(row).comment return strickler.comment
elif self._headers[column] == "minor": elif self._headers[column] == "minor":
return display_coefficient( return display_coefficient(
self._data.get(row).minor, self.display_manning strickler.minor, self.display_manning
) )
elif self._headers[column] == "medium": elif self._headers[column] == "medium":
return display_coefficient( return display_coefficient(
self._data.get(row).medium, self.display_manning strickler.medium, self.display_manning
) )
return QVariant() return QVariant()
@ -122,6 +157,8 @@ class TableModel(PamhyrTableModel):
) )
return False 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(
@ -177,7 +214,7 @@ class TableModel(PamhyrTableModel):
DelCommand( DelCommand(
self._data, list( self._data, list(
map( map(
lambda r: self._data.get(r), lambda r: self.get_visible(r),
rows rows
) )
) )

View File

@ -95,8 +95,10 @@ class StricklersWindow(PamhyrWindow):
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 = [] editable_headers = []
if t == "study" and self._study.is_editable(): if t == "study" and self._study.is_editable():
@ -111,6 +113,7 @@ 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])