diff --git a/src/View/BoundaryCondition/Edit/GenerateDialog.py b/src/View/BoundaryCondition/Edit/GenerateDialog.py new file mode 100644 index 0000000000000000000000000000000000000000..3b07a4d07d8de5166eb3b743fc3fe52ba188b65f --- /dev/null +++ b/src/View/BoundaryCondition/Edit/GenerateDialog.py @@ -0,0 +1,68 @@ +# GenerateDialog.py -- Pamhyr +# Copyright (C) 2023-2024 INRAE +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +# -*- coding: utf-8 -*- + +from View.Tools.PamhyrWindow import PamhyrDialog + +from PyQt5.QtGui import ( + QKeySequence, +) + +from PyQt5.QtCore import ( + Qt, QVariant, QAbstractTableModel, +) + +from PyQt5.QtWidgets import ( + QDialogButtonBox, QComboBox, QUndoStack, QShortcut, + QDoubleSpinBox, QCheckBox, QPushButton +) + + +class GenerateDialog(PamhyrDialog): + _pamhyr_ui = "BoundaryConditionsDialogGenerator" + _pamhyr_name = "Boundary Condition Options" + + def __init__(self, + value, + reach, + title="Boundary Condition Options", + trad=None, + parent=None): + super(GenerateDialog, self).__init__( + title=trad[self._pamhyr_name], + options=[], + trad=trad, + parent=parent + ) + + self.value = value + self.find(QDoubleSpinBox, "doubleSpinBox").setValue(self.value) + self.reach = reach + self.find(QPushButton, "EstimateButton").clicked.connect( + self.estimate + ) + + def accept(self): + self.value = self.find(QDoubleSpinBox, "doubleSpinBox").value() + super().accept() + + def reject(self): + self.close() + + def estimate(self): + self.value = abs(self.reach.get_incline_median_mean()) + self.find(QDoubleSpinBox, "doubleSpinBox").setValue(self.value) diff --git a/src/View/BoundaryCondition/Edit/Window.py b/src/View/BoundaryCondition/Edit/Window.py index d639a3a338c9c23dd650ebc8da7ea9c41c2693b4..168958bd3e4efa4e13f20fd784887d5c7460804e 100644 --- a/src/View/BoundaryCondition/Edit/Window.py +++ b/src/View/BoundaryCondition/Edit/Window.py @@ -50,6 +50,7 @@ from View.BoundaryCondition.Edit.translate import BCETranslate from View.BoundaryCondition.Edit.UndoCommand import SetMetaDataCommand from View.BoundaryCondition.Edit.Table import TableModel from View.BoundaryCondition.Edit.Plot import Plot +from View.BoundaryCondition.Edit.GenerateDialog import GenerateDialog _translate = QCoreApplication.translate @@ -332,7 +333,13 @@ class EditBoundaryConditionWindow(PamhyrWindow): node = self._data.node reach = self._data.reach(self._study.river)[0] profile = reach.profiles[-1] - incline = reach.get_incline_median_mean() + incline = abs(reach.get_incline_median_mean()) + dlg = GenerateDialog(incline, + reach, + trad=self._trad, + parent=self) + if dlg.exec(): + incline = dlg.value frictions = reach._parent.frictions.frictions z_min = profile.z_min() z_max = profile.z_max() @@ -355,7 +362,6 @@ class EditBoundaryConditionWindow(PamhyrWindow): node = self._data.node reach = self._data.reach(self._study.river)[0] profile = reach.profiles[-1] - incline = reach.get_incline_median_mean() z_min = profile.z_min() z_max = profile.z_max() height = [(i)*(z_max-z_min)/50 for i in range(51)] diff --git a/src/View/BoundaryCondition/Edit/translate.py b/src/View/BoundaryCondition/Edit/translate.py index 9d8355505cf0477acafa811fe48d16f33b04f695..006c49df0fc6d97fdf66722fcb825cc48a4af8cf 100644 --- a/src/View/BoundaryCondition/Edit/translate.py +++ b/src/View/BoundaryCondition/Edit/translate.py @@ -32,6 +32,8 @@ class BCETranslate(BCTranslate): self._dict["Edit Boundary Conditions"] = _translate( "BoundaryCondition", "Edit boundary conditions" ) + self._dict["Boundary Condition Options"] = _translate( + "BoundaryCondition", "Boundary Condition Options") self._sub_dict["table_headers"] = { "x": _translate("BoundaryCondition", "X"), diff --git a/src/View/ui/BoundaryConditionsDialogGenerator.ui b/src/View/ui/BoundaryConditionsDialogGenerator.ui new file mode 100644 index 0000000000000000000000000000000000000000..6d3793bf05a657fdfbda15600cd791699db6fe86 --- /dev/null +++ b/src/View/ui/BoundaryConditionsDialogGenerator.ui @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Dialog</class> + <widget class="QDialog" name="Dialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>356</width> + <height>107</height> + </rect> + </property> + <property name="windowTitle"> + <string>Options</string> + </property> + <property name="accessibleName"> + <string/> + </property> + <property name="locale"> + <locale language="English" country="Europe"/> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="2" column="0"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + <item row="0" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Slope</string> + </property> + </widget> + </item> + <item> + <widget class="QDoubleSpinBox" name="doubleSpinBox"> + <property name="decimals"> + <number>6</number> + </property> + <property name="maximum"> + <double>999999.998999999952503</double> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="EstimateButton"> + <property name="text"> + <string>Estimate</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>Dialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>Dialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui>