mirror of https://gitlab.com/pamhyr/pamhyr2
Compare commits
8 Commits
deb9b2069f
...
d47dc0687e
| Author | SHA1 | Date |
|---|---|---|
|
|
d47dc0687e | |
|
|
117e5222e4 | |
|
|
b1c7a77f37 | |
|
|
7b833390f1 | |
|
|
ae08642116 | |
|
|
97ece018aa | |
|
|
7f0102a881 | |
|
|
786923bdbf |
|
|
@ -310,7 +310,7 @@ class Reservoir(SQLSubModel):
|
|||
new_reservoir.set_as_deleted()
|
||||
|
||||
new_reservoir._node = None
|
||||
if node_id != -1:
|
||||
if node_id != -1 and node_id is not None:
|
||||
new_reservoir._node = next(
|
||||
filter(
|
||||
lambda n: n.id == node_id, data["nodes"]
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ from View.GeoTIFF.UndoCommand import (
|
|||
SetCommand
|
||||
)
|
||||
|
||||
from View.Tools.Plot.PamhyrToolbar import PamhyrPlotToolbar
|
||||
from View.Tools.Plot.PamhyrCanvas import MplCanvas
|
||||
from View.PlotXY import PlotXY
|
||||
|
||||
|
|
@ -87,6 +88,11 @@ class EditGeoTIFFWindow(PamhyrWindow):
|
|||
self.canvas.setObjectName("canvas")
|
||||
self.plot_layout = self.find(QVBoxLayout,
|
||||
"verticalLayout_geotiff")
|
||||
self._toolbar = PamhyrPlotToolbar(
|
||||
self.canvas, self,
|
||||
items=["home", "zoom", "save", "iso", "back/forward", "move"]
|
||||
)
|
||||
self.plot_layout.addWidget(self._toolbar)
|
||||
self.plot_layout.addWidget(self.canvas)
|
||||
|
||||
self.plot = PlotXY(
|
||||
|
|
@ -124,16 +130,16 @@ class EditGeoTIFFWindow(PamhyrWindow):
|
|||
def _set_values_from_bounds(self, bounds):
|
||||
self._values = {
|
||||
"bottom": bounds[0],
|
||||
"top": bounds[2],
|
||||
"left": bounds[1],
|
||||
"top": bounds[1],
|
||||
"left": bounds[2],
|
||||
"right": bounds[3],
|
||||
}
|
||||
|
||||
def _set_default_values_from_bounds(self, bounds):
|
||||
self._values_default = {
|
||||
"bottom": bounds[0],
|
||||
"top": bounds[2],
|
||||
"left": bounds[1],
|
||||
"top": bounds[1],
|
||||
"left": bounds[2],
|
||||
"right": bounds[3],
|
||||
}
|
||||
|
||||
|
|
@ -143,8 +149,7 @@ class EditGeoTIFFWindow(PamhyrWindow):
|
|||
|
||||
def _reset_spinbox(self, key):
|
||||
self.set_double_spin_box(
|
||||
f"doubleSpinBox_{key}",
|
||||
self._values_default[key]
|
||||
f"doubleSpinBox_{key}", self._values_default[key]
|
||||
)
|
||||
|
||||
def setup_connection(self):
|
||||
|
|
@ -155,14 +160,31 @@ class EditGeoTIFFWindow(PamhyrWindow):
|
|||
self.find(QPushButton, "pushButton_import")\
|
||||
.clicked.connect(self._import)
|
||||
|
||||
for key in self._values:
|
||||
self.find(QPushButton, f"pushButton_{key}")\
|
||||
.clicked.connect(lambda: self._reset_spinbox(key))
|
||||
self.find(QPushButton, "pushButton_bottom")\
|
||||
.clicked.connect(lambda: self._reset_spinbox("bottom"))
|
||||
self.find(QPushButton, "pushButton_top")\
|
||||
.clicked.connect(lambda: self._reset_spinbox("top"))
|
||||
self.find(QPushButton, f"pushButton_left")\
|
||||
.clicked.connect(lambda: self._reset_spinbox("left"))
|
||||
self.find(QPushButton, f"pushButton_right")\
|
||||
.clicked.connect(lambda: self._reset_spinbox("right"))
|
||||
|
||||
self.find(QDoubleSpinBox, f"doubleSpinBox_{key}")\
|
||||
.valueChanged.connect(
|
||||
lambda: self.update_values_from_spinbox(key)
|
||||
)
|
||||
self.find(QDoubleSpinBox, f"doubleSpinBox_bottom")\
|
||||
.valueChanged.connect(
|
||||
lambda: self.update_values_from_spinbox("bottom")
|
||||
)
|
||||
self.find(QDoubleSpinBox, f"doubleSpinBox_top")\
|
||||
.valueChanged.connect(
|
||||
lambda: self.update_values_from_spinbox("top")
|
||||
)
|
||||
self.find(QDoubleSpinBox, f"doubleSpinBox_left")\
|
||||
.valueChanged.connect(
|
||||
lambda: self.update_values_from_spinbox("left")
|
||||
)
|
||||
self.find(QDoubleSpinBox, f"doubleSpinBox_right")\
|
||||
.valueChanged.connect(
|
||||
lambda: self.update_values_from_spinbox("right")
|
||||
)
|
||||
|
||||
def update_values_from_spinbox(self, key):
|
||||
self._values[key] = self.get_double_spin_box(f"doubleSpinBox_{key}")
|
||||
|
|
@ -180,13 +202,20 @@ class EditGeoTIFFWindow(PamhyrWindow):
|
|||
|
||||
with rasterio.open(self._file_name) as data:
|
||||
img = data.read()
|
||||
b = data.bounds[:]
|
||||
b = data.bounds[:] # left, bottom, right, top
|
||||
|
||||
self._set_values_from_bounds(b)
|
||||
if b[2] > b[0] and b[1] < b[3]:
|
||||
coord = [b[0], b[2], b[1], b[3]]
|
||||
else:
|
||||
xlim = self.canvas.axes.get_xlim()
|
||||
ylim = self.canvas.axes.get_ylim()
|
||||
coord = xlim + ylim
|
||||
|
||||
self._set_values_from_bounds(coord)
|
||||
self._set_default_values_from_bounds(coord)
|
||||
else:
|
||||
with memfile.open() as gt:
|
||||
img = gt.read()
|
||||
b = gt.bounds[:]
|
||||
|
||||
if self._plot_img is not None:
|
||||
self._plot_img.remove()
|
||||
|
|
@ -197,6 +226,7 @@ class EditGeoTIFFWindow(PamhyrWindow):
|
|||
)
|
||||
|
||||
self.plot.idle()
|
||||
self._reset_spinboxes()
|
||||
|
||||
def _import(self):
|
||||
options = QFileDialog.Options()
|
||||
|
|
|
|||
|
|
@ -86,17 +86,14 @@ class GeoTIFFListWindow(PamhyrWindow):
|
|||
self.plot = PlotXY(
|
||||
canvas=self.canvas,
|
||||
data=self._study.river.enable_edges(),
|
||||
geotiff=self._study.river.geotiff,
|
||||
trad=self._trad,
|
||||
toolbar=None,
|
||||
parent=self
|
||||
)
|
||||
|
||||
self.plot.update()
|
||||
|
||||
self._plot_img = {}
|
||||
|
||||
for geotiff in self._study.river.geotiff.lst:
|
||||
self.draw_geotiff(geotiff)
|
||||
|
||||
def setup_connections(self):
|
||||
if self._study.is_editable():
|
||||
self.find(QAction, "action_add").triggered.connect(self.add)
|
||||
|
|
@ -104,39 +101,9 @@ class GeoTIFFListWindow(PamhyrWindow):
|
|||
|
||||
self.find(QAction, "action_edit").triggered.connect(self.edit)
|
||||
|
||||
def draw_geotiff(self, geotiff):
|
||||
if not _rasterio_loaded:
|
||||
return
|
||||
|
||||
memfile = geotiff.memfile
|
||||
if memfile is None:
|
||||
return
|
||||
|
||||
with memfile.open() as gt:
|
||||
img = gt.read()
|
||||
coords = geotiff.coordinates
|
||||
|
||||
if geotiff in self._plot_img:
|
||||
self._plot_img[geotiff].remove()
|
||||
|
||||
self._plot_img[geotiff] = self.canvas.axes.imshow(
|
||||
img.transpose((1, 2, 0)),
|
||||
extent=list(coords.values())
|
||||
)
|
||||
|
||||
self.plot.idle()
|
||||
|
||||
def update(self):
|
||||
self._list.update()
|
||||
|
||||
for geotiff in self._plot_img:
|
||||
self._plot_img[geotiff].remove()
|
||||
|
||||
self._plot_img = {}
|
||||
|
||||
for geotiff in self._study.river.geotiff.files:
|
||||
self.draw_geotiff(geotiff)
|
||||
|
||||
def selected_rows(self):
|
||||
lst = self.find(QListView, f"listView")
|
||||
return list(map(lambda i: i.row(), lst.selectedIndexes()))
|
||||
|
|
|
|||
|
|
@ -27,6 +27,20 @@ from View.Tools.PamhyrWidget import PamhyrWidget
|
|||
|
||||
from PyQt5.QtWidgets import QVBoxLayout
|
||||
|
||||
try:
|
||||
import rasterio
|
||||
import rasterio.control
|
||||
import rasterio.crs
|
||||
import rasterio.sample
|
||||
import rasterio.vrt
|
||||
import rasterio._features
|
||||
|
||||
from rasterio.io import MemoryFile
|
||||
_rasterio_loaded = True
|
||||
except Exception as e:
|
||||
print(f"Module 'rasterio' is not available: {e}")
|
||||
_rasterio_loaded = False
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
||||
|
||||
|
|
@ -104,10 +118,12 @@ class WidgetInfo(PamhyrWidget):
|
|||
self.plot = PlotXY(
|
||||
canvas=self.canvas,
|
||||
data=self._study.river.enable_edges(),
|
||||
geotiff=self._study.river.geotiff,
|
||||
trad=self.parent._trad,
|
||||
toolbar=self._toolbar_xy,
|
||||
parent=self
|
||||
)
|
||||
|
||||
self.plot.update()
|
||||
|
||||
def set_network_values(self):
|
||||
|
|
|
|||
|
|
@ -27,12 +27,26 @@ from PyQt5.QtCore import (
|
|||
)
|
||||
from PyQt5.QtWidgets import QApplication, QTableView
|
||||
|
||||
try:
|
||||
import rasterio
|
||||
import rasterio.control
|
||||
import rasterio.crs
|
||||
import rasterio.sample
|
||||
import rasterio.vrt
|
||||
import rasterio._features
|
||||
|
||||
from rasterio.io import MemoryFile
|
||||
_rasterio_loaded = True
|
||||
except Exception as e:
|
||||
print(f"Module 'rasterio' is not available: {e}")
|
||||
_rasterio_loaded = False
|
||||
|
||||
_translate = QCoreApplication.translate
|
||||
|
||||
|
||||
class PlotXY(PamhyrPlot):
|
||||
def __init__(self, canvas=None, trad=None, data=None, toolbar=None,
|
||||
table=None, parent=None):
|
||||
def __init__(self, canvas=None, trad=None, data=None, geotiff=None,
|
||||
toolbar=None, table=None, parent=None):
|
||||
super(PlotXY, self).__init__(
|
||||
canvas=canvas,
|
||||
trad=trad,
|
||||
|
|
@ -43,10 +57,14 @@ class PlotXY(PamhyrPlot):
|
|||
)
|
||||
|
||||
self._data = data
|
||||
self._geotiff = geotiff
|
||||
|
||||
self.label_x = self._trad["x"]
|
||||
self.label_y = self._trad["y"]
|
||||
self.parent = parent
|
||||
|
||||
self._plot_img = {}
|
||||
|
||||
self._isometric_axis = True
|
||||
|
||||
self._auto_relim_update = True
|
||||
|
|
@ -69,7 +87,12 @@ class PlotXY(PamhyrPlot):
|
|||
if data.reach.number_profiles != 0:
|
||||
self.draw_xy(data.reach)
|
||||
self.draw_lr(data.reach)
|
||||
self.idle()
|
||||
|
||||
if self._geotiff is not None:
|
||||
self.draw_geotiff(self._geotiff.files)
|
||||
|
||||
self.idle()
|
||||
|
||||
return
|
||||
|
||||
def draw_xy(self, reach):
|
||||
|
|
@ -78,9 +101,9 @@ class PlotXY(PamhyrPlot):
|
|||
line_xy.append(np.column_stack(xy))
|
||||
|
||||
line_xy_collection = collections.LineCollection(
|
||||
line_xy,
|
||||
colors=self.color_plot_river_bottom
|
||||
)
|
||||
line_xy,
|
||||
colors=self.color_plot_river_bottom
|
||||
)
|
||||
self.canvas.axes.add_collection(line_xy_collection)
|
||||
|
||||
def draw_lr(self, reach):
|
||||
|
|
@ -113,6 +136,34 @@ class PlotXY(PamhyrPlot):
|
|||
)
|
||||
self.line_lr.append(line)
|
||||
|
||||
def draw_geotiff(self, lst):
|
||||
if not _rasterio_loaded:
|
||||
return
|
||||
|
||||
for img in self._plot_img:
|
||||
self._plot_img[img].remove()
|
||||
|
||||
self._plot_img = {}
|
||||
|
||||
for geotiff in lst:
|
||||
memfile = geotiff.memfile
|
||||
if memfile is None:
|
||||
return
|
||||
|
||||
with memfile.open() as gt:
|
||||
img = gt.read()
|
||||
coords = geotiff.coordinates
|
||||
|
||||
self._plot_img[geotiff] = self.canvas.axes.imshow(
|
||||
img.transpose((1, 2, 0)),
|
||||
extent=list(coords.values())
|
||||
)
|
||||
|
||||
if not geotiff.is_enabled():
|
||||
self._plot_img[geotiff].set(alpha=0.5)
|
||||
|
||||
self.idle()
|
||||
|
||||
@timer
|
||||
def update(self):
|
||||
self.draw()
|
||||
|
|
|
|||
|
|
@ -31,6 +31,20 @@ from PyQt5.QtCore import (
|
|||
)
|
||||
from PyQt5.QtWidgets import QApplication, QTableView
|
||||
|
||||
try:
|
||||
import rasterio
|
||||
import rasterio.control
|
||||
import rasterio.crs
|
||||
import rasterio.sample
|
||||
import rasterio.vrt
|
||||
import rasterio._features
|
||||
|
||||
from rasterio.io import MemoryFile
|
||||
_rasterio_loaded = True
|
||||
except Exception as e:
|
||||
print(f"Module 'rasterio' is not available: {e}")
|
||||
_rasterio_loaded = False
|
||||
|
||||
_translate = QCoreApplication.translate
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
|
@ -52,6 +66,8 @@ class PlotXY(PamhyrPlot):
|
|||
self.line_gl = []
|
||||
self.overflow = []
|
||||
|
||||
self._plot_img = {}
|
||||
|
||||
self._timestamps = parent._timestamps
|
||||
self._current_timestamp = max(self._timestamps)
|
||||
self._current_reach_id = reach_id
|
||||
|
|
@ -153,6 +169,7 @@ class PlotXY(PamhyrPlot):
|
|||
reach = results.river.reach(self._current_reach_id)
|
||||
reaches = results.river.reachs
|
||||
|
||||
self.draw_geotiff()
|
||||
self.draw_profiles(reach, reaches)
|
||||
self.draw_water_elevation(reach)
|
||||
self.draw_water_elevation_max(reach)
|
||||
|
|
@ -166,6 +183,7 @@ class PlotXY(PamhyrPlot):
|
|||
if reach.geometry.number_profiles == 0:
|
||||
self._init = False
|
||||
return
|
||||
|
||||
self.line_xy = []
|
||||
# TODO uncomment to draw all the reaches
|
||||
# self.draw_other_profiles(reaches)
|
||||
|
|
@ -306,6 +324,36 @@ class PlotXY(PamhyrPlot):
|
|||
alpha=0.7
|
||||
)
|
||||
|
||||
def draw_geotiff(self):
|
||||
if not _rasterio_loaded:
|
||||
return
|
||||
|
||||
lst = self._data[0]._study.river._geotiff.lst
|
||||
|
||||
for img in self._plot_img:
|
||||
self._plot_img[img].remove()
|
||||
|
||||
self._plot_img = {}
|
||||
|
||||
for geotiff in lst:
|
||||
memfile = geotiff.memfile
|
||||
if memfile is None:
|
||||
return
|
||||
|
||||
with memfile.open() as gt:
|
||||
img = gt.read()
|
||||
coords = geotiff.coordinates
|
||||
|
||||
self._plot_img[geotiff] = self.canvas.axes.imshow(
|
||||
img.transpose((1, 2, 0)),
|
||||
extent=list(coords.values())
|
||||
)
|
||||
|
||||
if not geotiff.is_enabled():
|
||||
self._plot_img[geotiff].set(alpha=0.5)
|
||||
|
||||
self.idle()
|
||||
|
||||
def set_reach(self, reach_id):
|
||||
self._current_reach_id = reach_id
|
||||
self._current_profile_id = 0
|
||||
|
|
|
|||
|
|
@ -0,0 +1,264 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>896</width>
|
||||
<height>504</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<property name="locale">
|
||||
<locale language="English" country="Europe"/>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="2" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_cancel">
|
||||
<property name="text">
|
||||
<string>Cancel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_ok">
|
||||
<property name="text">
|
||||
<string>Ok</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Informations</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="checkBox">
|
||||
<property name="text">
|
||||
<string>Enabled</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Description</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="lineEdit_description">
|
||||
<property name="toolTip">
|
||||
<string>The relative file path on executable directory</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="lineEdit_name"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>GeoTIFF file</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_import">
|
||||
<property name="text">
|
||||
<string>Import GeoTIFF file</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<widget class="QWidget" name="">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_geotiff"/>
|
||||
</widget>
|
||||
<widget class="QWidget" name="">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="2" column="2">
|
||||
<widget class="QPushButton" name="pushButton_left">
|
||||
<property name="text">
|
||||
<string>Reset</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_right">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Right coordinate</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QPushButton" name="pushButton_right">
|
||||
<property name="text">
|
||||
<string>Reset</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QDoubleSpinBox" name="doubleSpinBox_left">
|
||||
<property name="decimals">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>-99999999.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>99999999.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="pushButton_bottom">
|
||||
<property name="text">
|
||||
<string>Reset</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QPushButton" name="pushButton_top">
|
||||
<property name="text">
|
||||
<string>Reset</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QDoubleSpinBox" name="doubleSpinBox_right">
|
||||
<property name="decimals">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>-99999999.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>99999999.000000000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QDoubleSpinBox" name="doubleSpinBox_top">
|
||||
<property name="decimals">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>-99999999.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>99999999.000000000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_top">
|
||||
<property name="text">
|
||||
<string>Top coordinate</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QDoubleSpinBox" name="doubleSpinBox_bottom">
|
||||
<property name="decimals">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>-99999999.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>99999999.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_left">
|
||||
<property name="text">
|
||||
<string>Left coordinate</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_bottom">
|
||||
<property name="text">
|
||||
<string>Bottom coordinate</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>896</width>
|
||||
<height>504</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<widget class="QListView" name="listView"/>
|
||||
<widget class="QWidget" name="verticalLayoutWidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout"/>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QToolBar" name="toolBar">
|
||||
<property name="windowTitle">
|
||||
<string>toolBar</string>
|
||||
</property>
|
||||
<attribute name="toolBarArea">
|
||||
<enum>TopToolBarArea</enum>
|
||||
</attribute>
|
||||
<attribute name="toolBarBreak">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<addaction name="action_add"/>
|
||||
<addaction name="action_delete"/>
|
||||
<addaction name="action_edit"/>
|
||||
</widget>
|
||||
<action name="action_add">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/add.png</normaloff>ressources/add.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Add</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Add a new file</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_delete">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/del.png</normaloff>ressources/del.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Delete</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Delete selected file(s)</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_edit">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/edit.png</normaloff>ressources/edit.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Edit</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Edit file</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
Loading…
Reference in New Issue