init plugin

This commit is contained in:
2026-03-19 14:06:08 +01:00
commit 5974778b0a
65 changed files with 6606 additions and 0 deletions
View File
+45
View File
@@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
"""
/***************************************************************************
gnToolsSynthese
A QGIS plugin
dlg_gn_tools
Plugin settings form integrated into QGIS 'Options' menu.
-------------------
begin : 2022-08-22
git sha : $Format:%H$
copyright : (C) 2022 by colas
email : colas.geier@cen-isere.org
***************************************************************************/
/***************************************************************************
* *
* 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 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
"""
import os
from qgis.PyQt import uic
from qgis.PyQt import QtWidgets
from datetime import datetime as dt
# This loads your .ui file so that PyQt can populate your plugin with the elements from Qt Designer
FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), 'dlg_gn_synthese.ui'))
class gnToolsSynthese(QtWidgets.QDialog, FORM_CLASS):
def __init__(self, parent=None):
"""Constructor."""
super(gnToolsSynthese, self).__init__(parent)
# Set up the user interface from Designer through FORM_CLASS.
# After self.setupUi() you can access any designer object by doing
# self.<objectname>, and you can use autoconnect slots - see
# http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html
# #widgets-and-dialogs-with-auto-connect
self.setupUi(self)
+209
View File
@@ -0,0 +1,209 @@
<?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>400</width>
<height>341</height>
</rect>
</property>
<property name="windowTitle">
<string>Paramètres de la Synthèse</string>
</property>
<property name="sizeGripEnabled">
<bool>true</bool>
</property>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry">
<rect>
<x>50</x>
<y>290</y>
<width>341</width>
<height>32</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
<widget class="QgsCheckableComboBox" name="jdd_box">
<property name="geometry">
<rect>
<x>149</x>
<y>120</y>
<width>221</width>
<height>27</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="lab_jdd">
<property name="geometry">
<rect>
<x>20</x>
<y>118</y>
<width>121</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Jeu de données</string>
</property>
</widget>
<widget class="QgsCheckableComboBox" name="regne">
<property name="geometry">
<rect>
<x>150</x>
<y>160</y>
<width>221</width>
<height>27</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="lab_regne">
<property name="geometry">
<rect>
<x>20</x>
<y>160</y>
<width>131</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Règne de taxons</string>
</property>
</widget>
<widget class="QLabel" name="lab_dmin">
<property name="geometry">
<rect>
<x>20</x>
<y>200</y>
<width>121</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Date min</string>
</property>
</widget>
<widget class="QLabel" name="lab_dmax">
<property name="geometry">
<rect>
<x>20</x>
<y>240</y>
<width>121</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Date max</string>
</property>
</widget>
<widget class="QgsDateTimeEdit" name="date_min">
<property name="geometry">
<rect>
<x>150</x>
<y>200</y>
<width>221</width>
<height>28</height>
</rect>
</property>
<property name="acceptDrops">
<bool>true</bool>
</property>
</widget>
<widget class="QgsDateTimeEdit" name="date_max">
<property name="geometry">
<rect>
<x>150</x>
<y>240</y>
<width>221</width>
<height>28</height>
</rect>
</property>
<property name="acceptDrops">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="send_to_gn">
<property name="geometry">
<rect>
<x>20</x>
<y>10</y>
<width>351</width>
<height>91</height>
</rect>
</property>
<property name="text">
<string>Pour plus de paramètres, accèder à la plateforme en ligne : </string>
</property>
<property name="textFormat">
<enum>Qt::AutoText</enum>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::TextBrowserInteraction</set>
</property>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>QgsCheckableComboBox</class>
<extends>QComboBox</extends>
<header>qgscheckablecombobox.h</header>
</customwidget>
<customwidget>
<class>QgsDateTimeEdit</class>
<extends>QDateTimeEdit</extends>
<header>qgsdatetimeedit.h</header>
</customwidget>
</customwidgets>
<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>
+45
View File
@@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
"""
/***************************************************************************
gnToolsDialog
A QGIS plugin
dlg_gn_tools
Plugin settings form integrated into QGIS 'Options' menu.
-------------------
begin : 2022-08-22
git sha : $Format:%H$
copyright : (C) 2022 by colas
email : colas.geier@cen-isere.org
***************************************************************************/
/***************************************************************************
* *
* 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 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
"""
import os
from qgis.PyQt import uic
from qgis.PyQt import QtWidgets
from datetime import datetime as dt
# This loads your .ui file so that PyQt can populate your plugin with the elements from Qt Designer
FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), 'dlg_gn_tools.ui'))
class gnToolsDialog(QtWidgets.QDialog, FORM_CLASS):
def __init__(self, parent=None):
"""Constructor."""
super(gnToolsDialog, self).__init__(parent)
# Set up the user interface from Designer through FORM_CLASS.
# After self.setupUi() you can access any designer object by doing
# self.<objectname>, and you can use autoconnect slots - see
# http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html
# #widgets-and-dialogs-with-auto-connect
self.setupUi(self)
+443
View File
@@ -0,0 +1,443 @@
<?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>771</width>
<height>453</height>
</rect>
</property>
<property name="windowTitle">
<string>GéoNature tools</string>
</property>
<property name="autoFillBackground">
<bool>true</bool>
</property>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry">
<rect>
<x>410</x>
<y>410</y>
<width>341</width>
<height>32</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
<widget class="QTabWidget" name="tab">
<property name="geometry">
<rect>
<x>70</x>
<y>110</y>
<width>631</width>
<height>281</height>
</rect>
</property>
<property name="mouseTracking">
<bool>true</bool>
</property>
<property name="tabletTracking">
<bool>true</bool>
</property>
<property name="acceptDrops">
<bool>true</bool>
</property>
<property name="accessibleName">
<string>auth_url</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="import_2">
<attribute name="title">
<string>Import</string>
</attribute>
<widget class="QLabel" name="lab_src_imp">
<property name="geometry">
<rect>
<x>40</x>
<y>30</y>
<width>66</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Source : </string>
</property>
</widget>
<widget class="QComboBox" name="source_import">
<property name="geometry">
<rect>
<x>130</x>
<y>30</y>
<width>241</width>
<height>27</height>
</rect>
</property>
<property name="currentText">
<string/>
</property>
</widget>
<widget class="QPushButton" name="draw_bounds">
<property name="geometry">
<rect>
<x>350</x>
<y>90</y>
<width>251</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>Tracer une emprise</string>
</property>
</widget>
<widget class="QPushButton" name="active_filter_layer">
<property name="geometry">
<rect>
<x>40</x>
<y>90</y>
<width>231</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>Filtrer à partir d'une couche</string>
</property>
</widget>
<widget class="QgsMapLayerComboBox" name="filter_layer">
<property name="geometry">
<rect>
<x>40</x>
<y>150</y>
<width>251</width>
<height>27</height>
</rect>
</property>
<property name="accessibleName">
<string>Couche taxonomique</string>
</property>
<property name="allowEmptyLayer">
<bool>true</bool>
</property>
</widget>
<widget class="QCheckBox" name="use_entity">
<property name="geometry">
<rect>
<x>40</x>
<y>200</y>
<width>271</width>
<height>31</height>
</rect>
</property>
<property name="acceptDrops">
<bool>true</bool>
</property>
<property name="toolTip">
<string>Utilisation de l'emprise</string>
</property>
<property name="text">
<string>Utiliser les entitées sélectionnées</string>
</property>
</widget>
<widget class="QTextEdit" name="bound_log">
<property name="geometry">
<rect>
<x>350</x>
<y>150</y>
<width>251</width>
<height>81</height>
</rect>
</property>
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Ubuntu Sans'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QPushButton" name="clear_filter">
<property name="geometry">
<rect>
<x>467</x>
<y>30</y>
<width>131</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>Clear filter</string>
</property>
</widget>
<widget class="QToolButton" name="syn_tools">
<property name="geometry">
<rect>
<x>380</x>
<y>30</y>
<width>26</width>
<height>26</height>
</rect>
</property>
<property name="toolTip">
<string>Ajouter des filtres</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="popupMode">
<enum>QToolButton::InstantPopup</enum>
</property>
<property name="autoRaise">
<bool>false</bool>
</property>
</widget>
</widget>
<widget class="QWidget" name="status">
<attribute name="title">
<string>Statuts</string>
</attribute>
<widget class="QgsMapLayerComboBox" name="map_layers">
<property name="geometry">
<rect>
<x>238</x>
<y>40</y>
<width>271</width>
<height>27</height>
</rect>
</property>
<property name="accessibleName">
<string>Couche taxonomique</string>
</property>
<property name="allowEmptyLayer">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="lab_lay_tax">
<property name="geometry">
<rect>
<x>45</x>
<y>40</y>
<width>211</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Couche taxonomique :</string>
</property>
</widget>
<widget class="QLabel" name="lab_cd_tax">
<property name="geometry">
<rect>
<x>110</x>
<y>100</y>
<width>151</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Code taxon :</string>
</property>
</widget>
<widget class="QComboBox" name="cd_taxon">
<property name="geometry">
<rect>
<x>240</x>
<y>100</y>
<width>271</width>
<height>27</height>
</rect>
</property>
<property name="toolTip">
<string>Doit correspondre au cd_nom ou cd_ref</string>
</property>
</widget>
<widget class="QLineEdit" name="layer_out">
<property name="geometry">
<rect>
<x>240</x>
<y>160</y>
<width>341</width>
<height>27</height>
</rect>
</property>
<property name="toolTip">
<string>Nom de la couche à créer</string>
</property>
<property name="text">
<string>output</string>
</property>
<property name="clearButtonEnabled">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="lab_lay_out">
<property name="geometry">
<rect>
<x>80</x>
<y>160</y>
<width>191</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Name layer out :</string>
</property>
</widget>
</widget>
</widget>
<widget class="QgsAuthConfigSelect" name="mAuthConfigSelect">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>70</x>
<y>60</y>
<width>292</width>
<height>41</height>
</rect>
</property>
<property name="tabletTracking">
<bool>true</bool>
</property>
<property name="autoFillBackground">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="report_url">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>360</x>
<y>20</y>
<width>341</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QPushButton" name="login_gn">
<property name="geometry">
<rect>
<x>400</x>
<y>60</y>
<width>88</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>Connect</string>
</property>
</widget>
<widget class="QLabel" name="is_connect">
<property name="geometry">
<rect>
<x>500</x>
<y>60</y>
<width>201</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Non connecté..</string>
</property>
</widget>
<widget class="QComboBox" name="src_database">
<property name="geometry">
<rect>
<x>70</x>
<y>20</y>
<width>201</width>
<height>27</height>
</rect>
</property>
<property name="toolTip">
<string>Source de données</string>
</property>
<property name="currentText">
<string/>
</property>
</widget>
<widget class="QRadioButton" name="pub_access">
<property name="geometry">
<rect>
<x>280</x>
<y>20</y>
<width>111</width>
<height>31</height>
</rect>
</property>
<property name="acceptDrops">
<bool>true</bool>
</property>
<property name="text">
<string>Public</string>
</property>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>QgsAuthConfigSelect</class>
<extends>QWidget</extends>
<header>qgsauthconfigselect.h</header>
</customwidget>
<customwidget>
<class>QgsMapLayerComboBox</class>
<extends>QComboBox</extends>
<header>qgsmaplayercombobox.h</header>
</customwidget>
</customwidgets>
<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>
+169
View File
@@ -0,0 +1,169 @@
#! python3 # noqa: E265
"""
Plugin settings form integrated into QGIS 'Options' menu.
"""
# standard
import platform
from functools import partial
from pathlib import Path
from urllib.parse import quote
# PyQGIS
from qgis.core import Qgis, QgsApplication
from qgis.gui import QgsOptionsPageWidget, QgsOptionsWidgetFactory
from qgis.PyQt import uic
from qgis.PyQt.QtCore import QUrl
from qgis.PyQt.QtGui import QDesktopServices, QIcon
# project
from gn_tools.__about__ import (
__icon_path__,
__title__,
__uri_homepage__,
__uri_tracker__,
__version__,
)
from gn_tools.toolbelt import PlgLogger, PlgOptionsManager
from gn_tools.toolbelt.preferences import PlgSettingsStructure
# ############################################################################
# ########## Globals ###############
# ##################################
FORM_CLASS, _ = uic.loadUiType(
Path(__file__).parent / "{}.ui".format(Path(__file__).stem)
)
# ############################################################################
# ########## Classes ###############
# ##################################
class ConfigOptionsPage(FORM_CLASS, QgsOptionsPageWidget):
"""Settings form embedded into QGIS 'options' menu."""
def __init__(self, parent):
super().__init__(parent)
self.log = PlgLogger().log
self.plg_settings = PlgOptionsManager()
# load UI and set objectName
self.setupUi(self)
self.setObjectName("mOptionsPage{}".format(__title__))
report_context_message = quote(
"> Reported from plugin settings\n\n"
f"- operating system: {platform.system()} "
f"{platform.release()}_{platform.version()}\n"
f"- QGIS: {Qgis.QGIS_VERSION}\n"
f"- plugin version: {__version__}\n"
)
# header
self.lbl_title.setText(f"{__title__} - Version {__version__}")
# customization
self.btn_help.setIcon(QIcon(QgsApplication.iconPath("mActionHelpContents.svg")))
self.btn_help.pressed.connect(
partial(QDesktopServices.openUrl, QUrl(__uri_homepage__))
)
self.btn_report.setIcon(
QIcon(QgsApplication.iconPath("console/iconSyntaxErrorConsole.svg"))
)
self.btn_reset.setIcon(QIcon(QgsApplication.iconPath("mActionUndo.svg")))
self.btn_reset.pressed.connect(self.reset_settings)
# load previously saved settings
self.load_settings()
def apply(self):
"""Called to permanently apply the settings shown in the options page (e.g. \
save them to QgsSettings objects). This is usually called when the options \
dialog is accepted."""
settings = self.plg_settings.get_plg_settings()
# misc
settings.debug_mode = self.opt_debug.isChecked()
settings.version = __version__
# param
settings.domain_url = self.edit_url.text()
# dump new settings into QgsSettings
self.plg_settings.save_from_object(settings)
if __debug__:
self.log(
message="DEBUG - Settings successfully saved.",
log_level=Qgis.MessageLevel.NoLevel,
)
def load_settings(self):
"""Load options from QgsSettings into UI form."""
settings = self.plg_settings.get_plg_settings()
# global
self.opt_debug.setChecked(settings.debug_mode)
self.lbl_version_saved_value.setText(settings.version)
# param
self.edit_url.setText(settings.domain_url)
def reset_settings(self):
"""Reset settings to default values (set in preferences.py module)."""
default_settings = PlgSettingsStructure()
# dump default settings into QgsSettings
self.plg_settings.save_from_object(default_settings)
# update the form
self.load_settings()
class PlgOptionsFactory(QgsOptionsWidgetFactory):
"""Factory for options widget."""
def __init__(self):
"""Constructor."""
super().__init__()
def icon(self) -> QIcon:
"""Returns plugin icon, used to as tab icon in QGIS options tab widget.
:return: _description_
:rtype: QIcon
"""
return QIcon(str(__icon_path__))
def createWidget(self, parent) -> ConfigOptionsPage:
"""Create settings widget.
:param parent: Qt parent where to include the options page.
:type parent: QObject
:return: options page for tab widget
:rtype: ConfigOptionsPage
"""
return ConfigOptionsPage(parent)
def title(self) -> str:
"""Returns plugin title, used to name the tab in QGIS options tab widget.
:return: plugin title from about module
:rtype: str
"""
return __title__
def helpId(self) -> str:
"""Returns plugin help URL.
:return: plugin homepage url from about module
:rtype: str
"""
return __uri_homepage__
+255
View File
@@ -0,0 +1,255 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>wdg_gn_tools_settings</class>
<widget class="QWidget" name="wdg_gn_tools_settings">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>638</width>
<height>325</height>
</rect>
</property>
<property name="windowTitle">
<string>gn_tools - Settings</string>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="lbl_title">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;PluginTitle - Version X.X.X&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="openExternalLinks">
<bool>false</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="grp_misc">
<property name="minimumSize">
<size>
<width>0</width>
<height>100</height>
</size>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="title">
<string>Miscellaneous</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="0">
<widget class="QPushButton" name="btn_help">
<property name="minimumSize">
<size>
<width>200</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>500</width>
<height>30</height>
</size>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="text">
<string>Help</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="lbl_version_saved_value">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="text">
<string notr="true">X.X.X</string>
</property>
<property name="textInteractionFlags">
<set>Qt::NoTextInteraction</set>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="lbl_version_saved">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="text">
<string>Version used to save settings:</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QPushButton" name="btn_reset">
<property name="minimumSize">
<size>
<width>200</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<property name="autoFillBackground">
<bool>true</bool>
</property>
<property name="text">
<string>Reset settings to factory defaults</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="opt_debug">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>Enable debug mode.</string>
</property>
<property name="autoFillBackground">
<bool>true</bool>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="text">
<string>Debug mode (degraded performances)</string>
</property>
<property name="tristate">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="btn_report">
<property name="minimumSize">
<size>
<width>200</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>500</width>
<height>30</height>
</size>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="text">
<string>Report an issue</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="edit_url"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="lab_url_gn">
<property name="text">
<string>Url GéoNature :</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>56</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>