mirror of
https://gitlab.com/pamhyr/pamhyr2.git
synced 2026-10-30 03:20:41 +01:00
Scenarios: Merge branch 'master' into scenarios.
This commit is contained in:
commit
0f6709075f
25 files changed
+597
-122
No files matched your search
@@ -302,7 +302,6 @@ class GeometryWindow(PamhyrWindow):
|
||||
self.tableView.model().blockSignals(False)
|
||||
|
||||
def edit_meshing(self):
|
||||
|
||||
rows = list(
|
||||
set(
|
||||
(i.row() for i in self.tableView.selectedIndexes())
|
||||
@@ -326,6 +325,25 @@ class GeometryWindow(PamhyrWindow):
|
||||
logger_exception(e)
|
||||
return
|
||||
|
||||
ind = []
|
||||
for i in range(self._reach.number_profiles):
|
||||
if self._reach.profile(i).rk in selected_rk:
|
||||
ind.append(i)
|
||||
self.tableView.setFocus()
|
||||
selection = self.tableView.selectionModel()
|
||||
index = QItemSelection()
|
||||
if len(ind) > 0:
|
||||
for i in ind:
|
||||
index.append(QItemSelectionRange(
|
||||
self.tableView.model().index(i, 0))
|
||||
)
|
||||
selection.select(
|
||||
index,
|
||||
QItemSelectionModel.Rows |
|
||||
QItemSelectionModel.ClearAndSelect |
|
||||
QItemSelectionModel.Select
|
||||
)
|
||||
|
||||
def _edit_meshing(self, data):
|
||||
try:
|
||||
mesher = InternalMeshing()
|
||||
@@ -371,9 +389,6 @@ class GeometryWindow(PamhyrWindow):
|
||||
except Exception as e:
|
||||
logger_exception(e)
|
||||
raise ExternFileMissingError(
|
||||
module="mage",
|
||||
filename="MailleurTT",
|
||||
path=MeshingWithMageMailleurTT._path(),
|
||||
src_except=e
|
||||
)
|
||||
|
||||
|
||||
@@ -53,7 +53,8 @@ class LCTranslate(MainTranslate):
|
||||
self._dict["y"] = _translate("Geometry", "Y (m)")
|
||||
self._dict["z"] = _translate("Geometry", "Z (m)")
|
||||
self._dict["file_lat"] = _translate(
|
||||
"LateralContribution", "Shapefile (*.LAT *.lat)")
|
||||
"LateralContribution",
|
||||
"Mage lateral contributions file (*.LAT *.lat)")
|
||||
self._dict["file_all"] = _translate(
|
||||
"LateralContribution", "All files (*)")
|
||||
|
||||
|
||||
@@ -2006,6 +2006,13 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
|
||||
if res.river.reach(r).has_bedload():
|
||||
res.river.reach(r).bufferize(ts, "zfd")
|
||||
|
||||
for res in (result3, result4, result5):
|
||||
for r in range(int(res.get("nb_reach"))):
|
||||
for key in ["Z", "Q", "V"]:
|
||||
res.river.reach(r).bufferize(ts, key)
|
||||
if res.river.reach(r).has_bedload():
|
||||
res.river.reach(r).bufferize(ts, "zfd")
|
||||
|
||||
return [result4, result5, result3]
|
||||
|
||||
def open_results_adists(self):
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
from View.Tools.PamhyrWindow import PamhyrDialog
|
||||
|
||||
from PyQt5.QtWidgets import (
|
||||
QRadioButton, QCheckBox, QVBoxLayout, QLabel,
|
||||
QRadioButton, QCheckBox, QVBoxLayout, QLabel, QFrame
|
||||
)
|
||||
|
||||
from View.Results.translate import ResultsTranslate
|
||||
@@ -43,6 +43,7 @@ class CustomExportDialog(PamhyrDialog):
|
||||
|
||||
self.setup_radio_buttons_x()
|
||||
self.setup_radio_buttons_res()
|
||||
self.setup_label()
|
||||
self.setup_envelop_box()
|
||||
self.setup_check_boxes()
|
||||
|
||||
@@ -87,6 +88,22 @@ class CustomExportDialog(PamhyrDialog):
|
||||
|
||||
layout.addStretch()
|
||||
|
||||
def setup_label(self):
|
||||
self._label = self.find(QLabel, "label_4")
|
||||
self._label.setFrameStyle(QFrame.StyledPanel)
|
||||
self._label.setStyleSheet('background-color: white')
|
||||
self.set_label()
|
||||
for r in self._radio:
|
||||
r[1].clicked.connect(self.set_label)
|
||||
|
||||
def set_label(self):
|
||||
if self._radio[0][1].isChecked():
|
||||
self._label.setText(self._parent.text_bief() + "\n" +
|
||||
self._parent.text_time())
|
||||
else:
|
||||
self._label.setText(self._parent.text_bief() + "\n" +
|
||||
self._parent.text_profile())
|
||||
|
||||
def setup_envelop_box(self):
|
||||
layout = self.find(QVBoxLayout, "verticalLayout_x")
|
||||
self._envelop = QCheckBox(
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
from View.Tools.PamhyrWindow import PamhyrDialog
|
||||
|
||||
from PyQt5.QtWidgets import (
|
||||
QRadioButton, QCheckBox, QVBoxLayout,
|
||||
QRadioButton, QCheckBox, QVBoxLayout, QLabel, QFrame
|
||||
)
|
||||
|
||||
from View.Results.translate import ResultsTranslate
|
||||
@@ -50,6 +50,7 @@ class CustomExportAdisDialog(PamhyrDialog):
|
||||
|
||||
self.setup_radio_buttons_x()
|
||||
self.setup_radio_buttons_pol()
|
||||
self.setup_label()
|
||||
self.setup_check_boxes()
|
||||
|
||||
self.value = None
|
||||
@@ -84,6 +85,22 @@ class CustomExportAdisDialog(PamhyrDialog):
|
||||
self._radio2[0][1].setChecked(True)
|
||||
layout.addStretch()
|
||||
|
||||
def setup_label(self):
|
||||
self._label = self.find(QLabel, "label_4")
|
||||
self._label.setFrameStyle(QFrame.StyledPanel)
|
||||
self._label.setStyleSheet('background-color: white')
|
||||
self.set_label()
|
||||
for r in self._radio:
|
||||
r[1].clicked.connect(self.set_label)
|
||||
|
||||
def set_label(self):
|
||||
if self._radio[0][1].isChecked():
|
||||
self._label.setText(self._parent.text_bief() + "\n" +
|
||||
self._parent.text_time())
|
||||
else:
|
||||
self._label.setText(self._parent.text_bief() + "\n" +
|
||||
self._parent.text_profile())
|
||||
|
||||
def setup_check_boxes(self):
|
||||
self._check = []
|
||||
layout = self.find(QVBoxLayout, "verticalLayout_y")
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
from View.Tools.PamhyrWindow import PamhyrDialog
|
||||
|
||||
from PyQt5.QtWidgets import (
|
||||
QRadioButton, QCheckBox, QVBoxLayout,
|
||||
QRadioButton, QCheckBox, QVBoxLayout, QLabel, QFrame
|
||||
)
|
||||
|
||||
from View.Results.CustomPlot.Translate import CustomPlotTranslate
|
||||
@@ -38,10 +38,12 @@ class CustomPlotValuesSelectionDialog(PamhyrDialog):
|
||||
parent=parent
|
||||
)
|
||||
|
||||
self._parent = parent
|
||||
self._available_values_x = self._trad.get_dict("values_x")
|
||||
self._available_values_y = self._trad.get_dict("values_y")
|
||||
|
||||
self.setup_radio_buttons()
|
||||
self.setup_label()
|
||||
self.setup_envelop_box()
|
||||
self.setup_check_boxs()
|
||||
|
||||
@@ -62,6 +64,22 @@ class CustomPlotValuesSelectionDialog(PamhyrDialog):
|
||||
self._radio[0][1].setChecked(True)
|
||||
layout.addStretch()
|
||||
|
||||
def setup_label(self):
|
||||
self._label = self.find(QLabel, "label_3")
|
||||
self._label.setFrameStyle(QFrame.StyledPanel)
|
||||
self._label.setStyleSheet('background-color: white')
|
||||
self.set_label()
|
||||
for r in self._radio:
|
||||
r[1].clicked.connect(self.set_label)
|
||||
|
||||
def set_label(self):
|
||||
if self._radio[0][1].isChecked():
|
||||
self._label.setText(self._parent.text_bief() + "\n" +
|
||||
self._parent.text_time())
|
||||
else:
|
||||
self._label.setText(self._parent.text_bief() + "\n" +
|
||||
self._parent.text_profile())
|
||||
|
||||
def setup_envelop_box(self):
|
||||
self._envelop = []
|
||||
layout = self.find(QVBoxLayout, "verticalLayout_x")
|
||||
|
||||
@@ -204,7 +204,8 @@ class CustomPlot(PamhyrPlot):
|
||||
|
||||
e = list(
|
||||
map(
|
||||
lambda p: max(self.get_ts_zmin(p, res_id)),
|
||||
lambda p: max(self.get_ts_zmin(
|
||||
p, self._current_res_id)),
|
||||
range(len(reach))
|
||||
)
|
||||
)
|
||||
@@ -217,7 +218,8 @@ class CustomPlot(PamhyrPlot):
|
||||
|
||||
e = list(
|
||||
map(
|
||||
lambda p: min(self.get_ts_zmin(p, res_id)),
|
||||
lambda p: min(self.get_ts_zmin(
|
||||
p, self._current_res_id)),
|
||||
range(len(reach))
|
||||
)
|
||||
)
|
||||
|
||||
+70
-36
@@ -314,16 +314,12 @@ class ResultsWindow(PamhyrWindow):
|
||||
super(ResultsWindow, self).closeEvent(event)
|
||||
|
||||
def _compute_status_label(self):
|
||||
# Timestamp
|
||||
ts = self._timestamps[self._slider_time.value()]
|
||||
|
||||
t0 = datetime.fromtimestamp(0)
|
||||
fts = str(
|
||||
datetime.fromtimestamp(ts) - t0
|
||||
)
|
||||
fts.replace("days", _translate("Results", "days"))\
|
||||
.replace("day", _translate("Results", "day"))
|
||||
return (self.text_bief() + " | " +
|
||||
self.text_profile() + " | " +
|
||||
self.text_time())
|
||||
|
||||
def text_bief(self):
|
||||
# Reach
|
||||
table = self.find(QTableView, f"tableView_reach")
|
||||
indexes = table.selectedIndexes()
|
||||
@@ -331,7 +327,16 @@ class ResultsWindow(PamhyrWindow):
|
||||
reach = self._study.river.enable_edges()[0]
|
||||
else:
|
||||
reach = self._study.river.enable_edges()[indexes[0].row()]
|
||||
return f"{self._trad['reach']}: {reach.name}"
|
||||
|
||||
def text_profile(self):
|
||||
# Reach
|
||||
table = self.find(QTableView, f"tableView_reach")
|
||||
indexes = table.selectedIndexes()
|
||||
if len(indexes) == 0:
|
||||
reach = self._study.river.enable_edges()[0]
|
||||
else:
|
||||
reach = self._study.river.enable_edges()[indexes[0].row()]
|
||||
# Profile
|
||||
table = self.find(QTableView, f"tableView_profile")
|
||||
indexes = table.selectedIndexes()
|
||||
@@ -341,10 +346,22 @@ class ResultsWindow(PamhyrWindow):
|
||||
profile = reach.reach.profile(indexes[0].row())
|
||||
|
||||
pname = profile.name if profile.name != "" else profile.rk
|
||||
return f"{self._trad['cross_section']}: {pname}"
|
||||
|
||||
return (f"{self._trad['reach']}: {reach.name} | " +
|
||||
f"{self._trad['cross_section']}: {pname} | " +
|
||||
f"{self._trad['unit_time_s']} : {fts} ({ts} sec)")
|
||||
def text_time(self):
|
||||
# Timestamp
|
||||
ts = self._timestamps[self._slider_time.value()]
|
||||
|
||||
t0 = datetime.fromtimestamp(0)
|
||||
fts = str(
|
||||
datetime.fromtimestamp(ts) - t0
|
||||
)
|
||||
fts = str(
|
||||
datetime.fromtimestamp(ts) - t0
|
||||
)
|
||||
fts.replace("days", _translate("Results", "days"))\
|
||||
.replace("day", _translate("Results", "day"))
|
||||
return f"{self._trad['time']} : {fts} ({ts} sec)"
|
||||
|
||||
def setup_statusbar(self):
|
||||
txt = self._compute_status_label()
|
||||
@@ -779,20 +796,29 @@ class ResultsWindow(PamhyrWindow):
|
||||
first_line.append(f"Profile: {pname}")
|
||||
val_dict = self._export_time(profile_id, y, solver_id)
|
||||
|
||||
with open(filename, 'w', newline='') as csvfile:
|
||||
writer = csv.writer(csvfile, delimiter=',',
|
||||
quotechar='|', quoting=csv.QUOTE_MINIMAL)
|
||||
dict_x = self._trad.get_dict("values_x")
|
||||
header = []
|
||||
writer.writerow(first_line)
|
||||
for text in val_dict.keys():
|
||||
header.append(text)
|
||||
writer.writerow(header)
|
||||
for row in range(len(val_dict[dict_x[x]])):
|
||||
line = []
|
||||
for var in val_dict.keys():
|
||||
line.append(val_dict[var][row])
|
||||
writer.writerow(line)
|
||||
try:
|
||||
with open(filename, 'w', newline='') as csvfile:
|
||||
writer = csv.writer(csvfile, delimiter=',',
|
||||
quotechar='|', quoting=csv.QUOTE_MINIMAL)
|
||||
dict_x = self._trad.get_dict("values_x")
|
||||
header = []
|
||||
writer.writerow(first_line)
|
||||
for text in val_dict.keys():
|
||||
header.append(text)
|
||||
writer.writerow(header)
|
||||
for row in range(len(val_dict[dict_x[x]])):
|
||||
line = []
|
||||
for var in val_dict.keys():
|
||||
line.append(val_dict[var][row])
|
||||
writer.writerow(line)
|
||||
self._timer.stop()
|
||||
except Exception as e:
|
||||
self.message_box(
|
||||
window_title=self._trad["Warning"],
|
||||
text=self._trad["mb_write_error"],
|
||||
informative_text=self._trad["mb_close_file"]
|
||||
)
|
||||
logger_exception(e)
|
||||
|
||||
def export_all(self, reach, directory, timestamps):
|
||||
name = reach.name
|
||||
@@ -805,17 +831,25 @@ class ResultsWindow(PamhyrWindow):
|
||||
f"reach_{name}.csv"
|
||||
)
|
||||
|
||||
with open(file_name, 'w', newline='') as csvfile:
|
||||
writer = csv.writer(csvfile, delimiter=',',
|
||||
quotechar='|', quoting=csv.QUOTE_MINIMAL)
|
||||
ts = timestamps[0]
|
||||
writer.writerow(self._table["raw_data"]._headers)
|
||||
for row in range(self._table["raw_data"].rowCount()):
|
||||
line = []
|
||||
for column in range(self._table["raw_data"].columnCount()):
|
||||
index = self._table["raw_data"].index(row, column)
|
||||
line.append(self._table["raw_data"].data(index))
|
||||
writer.writerow(line)
|
||||
try:
|
||||
with open(file_name, 'w', newline='') as csvfile:
|
||||
writer = csv.writer(csvfile, delimiter=',',
|
||||
quotechar='|', quoting=csv.QUOTE_MINIMAL)
|
||||
ts = timestamps[0]
|
||||
writer.writerow(self._table["raw_data"]._headers)
|
||||
for row in range(self._table["raw_data"].rowCount()):
|
||||
line = []
|
||||
for column in range(self._table["raw_data"].columnCount()):
|
||||
index = self._table["raw_data"].index(row, column)
|
||||
line.append(self._table["raw_data"].data(index))
|
||||
writer.writerow(line)
|
||||
except Exception as e:
|
||||
self.message_box(
|
||||
window_title=self._trad["Warning"],
|
||||
text=self._trad["mb_write_errore"],
|
||||
informative_text=self._trad["mb_close_file"]
|
||||
)
|
||||
logger_exception(e)
|
||||
|
||||
def export_current(self):
|
||||
self.file_dialog(
|
||||
|
||||
@@ -345,24 +345,29 @@ class ResultsWindowAdisTS(PamhyrWindow):
|
||||
super(ResultsWindowAdisTS, self).closeEvent(event)
|
||||
|
||||
def _compute_status_label(self):
|
||||
# Timestamp
|
||||
ts = self._timestamps[self._slider_time.value()]
|
||||
|
||||
t0 = datetime.fromtimestamp(0)
|
||||
fts = str(
|
||||
datetime.fromtimestamp(ts) - t0
|
||||
)
|
||||
fts.replace("days", _translate("Results", "days"))\
|
||||
.replace("day", _translate("Results", "day"))
|
||||
return (self.text_bief() + " | " +
|
||||
self.text_profile() + " | " +
|
||||
self.text_pollutant() + " | " +
|
||||
self.text_time())
|
||||
|
||||
def text_bief(self):
|
||||
# Reach
|
||||
table = self.find(QTableView, f"tableView_reach")
|
||||
indexes = table.selectedIndexes()
|
||||
if len(indexes) == 0:
|
||||
reach = self._study.river.edges()[0]
|
||||
reach = self._study.river.enable_edges()[0]
|
||||
else:
|
||||
reach = self._study.river.edges()[indexes[0].row()]
|
||||
reach = self._study.river.enable_edges()[indexes[0].row()]
|
||||
return f"{self._trad['reach']}: {reach.name}"
|
||||
|
||||
def text_profile(self):
|
||||
# Reach
|
||||
table = self.find(QTableView, f"tableView_reach")
|
||||
indexes = table.selectedIndexes()
|
||||
if len(indexes) == 0:
|
||||
reach = self._study.river.enable_edges()[0]
|
||||
else:
|
||||
reach = self._study.river.enable_edges()[indexes[0].row()]
|
||||
# Profile
|
||||
table = self.find(QTableView, f"tableView_profile")
|
||||
indexes = table.selectedIndexes()
|
||||
@@ -372,7 +377,24 @@ class ResultsWindowAdisTS(PamhyrWindow):
|
||||
profile = reach.reach.profile(indexes[0].row())
|
||||
|
||||
pname = profile.name if profile.name != "" else profile.rk
|
||||
return f"{self._trad['cross_section']}: {pname}"
|
||||
|
||||
def text_time(self):
|
||||
# Timestamp
|
||||
ts = self._timestamps[self._slider_time.value()]
|
||||
|
||||
t0 = datetime.fromtimestamp(0)
|
||||
fts = str(
|
||||
datetime.fromtimestamp(ts) - t0
|
||||
)
|
||||
fts = str(
|
||||
datetime.fromtimestamp(ts) - t0
|
||||
)
|
||||
fts.replace("days", _translate("Results", "days"))\
|
||||
.replace("day", _translate("Results", "day"))
|
||||
return f"{self._trad['time']} : {fts} ({ts} sec)"
|
||||
|
||||
def text_pollutant(self):
|
||||
# Pollutant
|
||||
table = self.find(QTableView, f"tableView_pollutants")
|
||||
indexes = table.selectedIndexes()
|
||||
@@ -381,10 +403,7 @@ class ResultsWindowAdisTS(PamhyrWindow):
|
||||
self._results.pollutants_list[i.row()+1] for i in indexes
|
||||
]
|
||||
|
||||
return (f"{self._trad['reach']}: {reach.name} | " +
|
||||
f"{self._trad['cross_section']}: {pname} | " +
|
||||
f"Pollutant: {', '.join(self.pollutant_label)} | " +
|
||||
f"{self._trad['unit_time_s']} : {fts} ({ts} sec)")
|
||||
return (f"Pollutant: {', '.join(self.pollutant_label)}")
|
||||
|
||||
def setup_statusbar(self):
|
||||
txt = self._compute_status_label()
|
||||
|
||||
@@ -56,6 +56,13 @@ class ResultsTranslate(MainTranslate):
|
||||
self._dict["ImageCoordinates"] = _translate(
|
||||
"Results", "Image coordinates"
|
||||
)
|
||||
self._dict["mb_write_error"] = _translate(
|
||||
"Results", "An error occured when writing to file"
|
||||
)
|
||||
self._dict["mb_close_file"] = _translate(
|
||||
"Results",
|
||||
"If the file is in use, close it and try again"
|
||||
)
|
||||
|
||||
self._sub_dict["table_headers_reach"] = {
|
||||
"name": _translate("Results", "Reach name"),
|
||||
|
||||
@@ -94,7 +94,8 @@ class SelectSolverWindowAdisTS(PamhyrDialog):
|
||||
)
|
||||
|
||||
solvers_mage = list(filter(
|
||||
lambda x: "mage" in x._type.lower(), self._config.solvers
|
||||
lambda x: "mage" or "rubar" in x._type.lower(),
|
||||
self._config.solvers
|
||||
))
|
||||
solvers_mage_names = list(map(lambda x: x._name, solvers_mage))
|
||||
|
||||
|
||||
@@ -7,23 +7,13 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>194</width>
|
||||
<height>70</height>
|
||||
<height>126</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="4" 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="3" column="0">
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
@@ -64,6 +54,23 @@
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" 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="4" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
||||
@@ -7,14 +7,24 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>414</width>
|
||||
<height>70</height>
|
||||
<height>132</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<item row="3" 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="1" column="0">
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
@@ -43,13 +53,10 @@
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Upstream height (m)</string>
|
||||
<string>Upstream elevation (m)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -70,7 +70,7 @@
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Downstream height (m)</string>
|
||||
<string>Downstream elevation (m)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
Reference in new issue
Block a user