diff --git a/src/View/Configure/Window.py b/src/View/Configure/Window.py index c5ba5821..95307fd5 100644 --- a/src/View/Configure/Window.py +++ b/src/View/Configure/Window.py @@ -120,7 +120,9 @@ class ConfigureWindow(PamhyrDialog): editable_headers=["name", "comment", "minor", "medium"], data=self._stricklers, undo=self._undo_stack, + trad=self._trad_stricklers, display_manning=self._config.display_manning, + unique_names=True, ) def setup_data(self): diff --git a/src/View/Stricklers/Table.py b/src/View/Stricklers/Table.py index 1e4a4c9a..32731b8e 100644 --- a/src/View/Stricklers/Table.py +++ b/src/View/Stricklers/Table.py @@ -31,7 +31,7 @@ from PyQt5.QtWidgets import ( QDialogButtonBox, QPushButton, QLineEdit, QFileDialog, QTableView, QAbstractItemView, QUndoStack, QShortcut, QAction, QItemDelegate, - QComboBox, + QComboBox, QMessageBox, ) from View.Tools.PamhyrTable import PamhyrTableModel @@ -51,10 +51,19 @@ _translate = QCoreApplication.translate class TableModel(PamhyrTableModel): - def __init__(self, *args, display_manning=False, **kwargs): + def __init__(self, *args, display_manning=False, unique_names=False, + **kwargs): self.display_manning = display_manning + self.unique_names = unique_names super(TableModel, self).__init__(*args, **kwargs) + def name_is_already_used(self, row, name): + current = self._data.get(row) + return any( + strickler is not current and strickler.name == name + for strickler in self._data.stricklers + ) + def get_true_data_row(self, row): el = self._data.get(row) @@ -101,6 +110,18 @@ class TableModel(PamhyrTableModel): row = index.row() 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 + try: if self._headers[column] == "name": self._undo.push( diff --git a/src/View/Stricklers/translate.py b/src/View/Stricklers/translate.py index 5f50c535..ad2305d4 100644 --- a/src/View/Stricklers/translate.py +++ b/src/View/Stricklers/translate.py @@ -45,6 +45,13 @@ class StricklersTranslate(MainTranslate): self._dict["application_mannings"] = _translate( "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"] = { "name": self._dict["name"],