From cb5ee1b9bbe131e997b0299534139bb9ef69cdec Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Tue, 14 Mar 2023 10:11:00 +0100
Subject: [PATCH] Add configuration window and many minor change.

* src/config.py: Application config class.
* src/pamhyr.py: Add app config.
* src/view/ASubWindow.py: Add some methods.
* src/view/ConfigureWindow.py: New app sub window.
* src/view/MainWindow.py: Minor change.
* src/view/ui/ConfigureDialog.ui: New ui.
* src/view/ui/MainWindow.ui: Start rename some component.
* src/view/ui/MainWindow_old.ui: Old version of main UI.
---
 src/config.py                  |  51 ++
 src/model/AModelComponent.py   |  10 +
 src/pamhyr.py                  |   6 +-
 src/view/ASubWindow.py         | 114 ++++-
 src/view/ConfigureWindow.py    |  95 ++++
 src/view/MainWindow.py         |  65 ++-
 src/view/ui/ConfigureDialog.ui | 369 ++++++++++++++
 src/view/ui/MainWindow.ui      | 116 +++--
 src/view/ui/MainWindow_old.ui  | 908 +++++++++++++++++++++++++++++++++
 9 files changed, 1672 insertions(+), 62 deletions(-)
 create mode 100644 src/config.py
 create mode 100644 src/model/AModelComponent.py
 create mode 100644 src/view/ConfigureWindow.py
 create mode 100644 src/view/ui/ConfigureDialog.ui
 create mode 100644 src/view/ui/MainWindow_old.ui

diff --git a/src/config.py b/src/config.py
new file mode 100644
index 00000000..26416b78
--- /dev/null
+++ b/src/config.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+
+import os
+import pickle
+
+config_dir = "/.cache/pamhyr/"
+config_file = "config.pkl"
+
+class Config(object):
+    def __init__(self):
+        super(Config, self).__init__()
+
+        self.filename = Config.filename()
+        self.set_default_value()
+
+    def set_default_value(self):
+        # Mage
+        self.mage_path = ""
+        self.mage_extract_path = ""
+        self.mailleur_path = ""
+
+        # Const
+        self.manning = False
+        self.segment = 1000
+        self.max_listing = 500000
+
+        # Backup
+        self.backup_enable = True
+        self.backup_path = ""
+        self.backup_frequence = "00:05:00"
+        self.backup_max = 10
+
+    @classmethod
+    def filename(cls):
+        return os.environ["HOME"] + config_dir + config_file
+
+    def save(self):
+        os.makedirs(os.path.dirname(self.filename), exist_ok=True)
+        with open(self.filename, 'wb') as out_file:
+            pickle.dump(self, out_file)
+
+    @classmethod
+    def load(cls):
+        filename = cls.filename()
+        if os.path.isfile(filename):
+            with open(filename, 'rb') as in_file:
+                me = pickle.load(in_file)
+                return me
+        else:
+            print("config: New config")
+            return cls()
diff --git a/src/model/AModelComponent.py b/src/model/AModelComponent.py
new file mode 100644
index 00000000..3da2aa6c
--- /dev/null
+++ b/src/model/AModelComponent.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+
+class AbstractModelComponent(object):
+    def __init__(self):
+        super(AbstractModelComponent, self).__init__()
+
+    def new(self, filename):
+
+
+    def export(self, filename):
diff --git a/src/pamhyr.py b/src/pamhyr.py
index 1d7cf0e5..ec9f74f0 100755
--- a/src/pamhyr.py
+++ b/src/pamhyr.py
@@ -4,12 +4,16 @@
 import sys
 
 from PyQt5.QtWidgets import QApplication
+
+from config import Config
 from view.MainWindow import ApplicationWindow
 from model.Study import Study
 
 def main():
+    conf = Config.load()
+
     app = QApplication(sys.argv)
-    application = ApplicationWindow()
+    application = ApplicationWindow(conf=conf)
     application.show()
     sys.exit(app.exec_())
 
diff --git a/src/view/ASubWindow.py b/src/view/ASubWindow.py
index 2739a6a2..3f01e02c 100644
--- a/src/view/ASubWindow.py
+++ b/src/view/ASubWindow.py
@@ -5,7 +5,11 @@ import os
 from PyQt5.QtWidgets import (
     QMainWindow, QApplication, QDesktopWidget,
     QMdiArea, QMdiSubWindow, QDialog,
-    QPushButton
+    QPushButton, QLineEdit, QCheckBox,
+    QTimeEdit, QSpinBox
+)
+from PyQt5.QtCore import (
+    QTime,
 )
 from PyQt5.uic import loadUi
 
@@ -23,3 +27,111 @@ class ASubWindow(QDialog):
     def closeEvent(self, event):
         if not self.parent is None:
             self.parent.sub_win_del(self.name)
+
+    # Commun use features
+
+    def find(self, qtype, name):
+        """Find an ui component
+
+        Args:
+            qtype: Type of QT component
+            name: Name for component
+
+        Returns:
+            return the component
+        """
+        return self.ui.findChild(qtype, name)
+
+    def set_line_edit_text(self, name:str, text:str):
+        """Set text of line edit component
+
+        Args:
+            line_edit: The line edit component name
+            text: The text
+
+        Returns:
+            Nothing
+        """
+        self.find(QLineEdit, name).setText(text)
+
+    def get_line_edit_text(self, name:str):
+        """Get text of line edit component
+
+        Args:
+            line_edit: The line edit component name
+
+        Returns:
+            Text
+        """
+        return self.find(QLineEdit, name).text()
+
+    def set_check_box(self, name:str, checked:bool):
+        """Set status of checkbox component
+
+        Args:
+            name: The check box component name
+            checked: Bool
+
+        Returns:
+            Nothing
+        """
+        self.find(QCheckBox, name).setChecked(checked)
+
+    def get_check_box(self, name:str):
+        """Get status of checkbox component
+
+        Args:
+            name: The check box component name
+
+        Returns:
+            Status of checkbox (bool)
+        """
+        return self.find(QCheckBox, name).isChecked()
+
+
+    def set_time_edit(self, name:str, time:str):
+        """Set time of timeedit component
+
+        Args:
+            name: The timeedit component name
+            time: The new time in format "HH:mm:ss"
+
+        Returns:
+            Nothing
+        """
+        qtime = QTime.fromString(time)
+        self.find(QTimeEdit, name).setTime(qtime)
+
+    def get_time_edit(self, name:str):
+        """Get time of timeedit component
+
+        Args:
+            name: The timeedit component name
+
+        Returns:
+            The time of timeedit in format "HH:mm:ss"
+        """
+        return self.find(QTimeEdit, name).time().toString()
+
+    def set_spin_box(self, name:str, value:int):
+        """Set value of spinbox component
+
+        Args:
+            name: The spinbox component name
+            value: The new value
+
+        Returns:
+            Nothing
+        """
+        self.find(QSpinBox, name).setValue(value)
+
+    def get_spin_box(self, name:str):
+        """Get time of spin box component
+
+        Args:
+            name: The spin box component
+
+        Returns:
+            The value of spin box
+        """
+        return self.find(QSpinBox, name).value()
diff --git a/src/view/ConfigureWindow.py b/src/view/ConfigureWindow.py
new file mode 100644
index 00000000..c633c2ce
--- /dev/null
+++ b/src/view/ConfigureWindow.py
@@ -0,0 +1,95 @@
+# -*- coding: utf-8 -*-
+
+from config import Config
+from view.ASubWindow import ASubWindow
+from PyQt5.QtWidgets import (
+    QDialogButtonBox, QPushButton, QLineEdit,
+    QFileDialog,
+)
+
+class ConfigureWindow(ASubWindow):
+    def __init__(self, conf=None, title="Configure", parent=None):
+        super(ConfigureWindow, self).__init__(name=title, ui="ConfigureDialog", parent=parent)
+        self.ui.setWindowTitle(title)
+
+        if conf is None:
+            self.conf = Config()
+        else:
+            self.conf = conf
+
+        # MAGE
+        self.set_line_edit_text("lineEdit_exec_mage", self.conf.mage_path)
+        self.set_line_edit_text("lineEdit_exec_mage_extract", self.conf.mage_extract_path)
+        self.set_line_edit_text("lineEdit_exec_mailleur", self.conf.mailleur_path)
+
+        # Const
+        self.set_check_box("checkBox_manning", self.conf.manning)
+        self.set_line_edit_text("lineEdit_segment", str(self.conf.segment))
+        self.set_line_edit_text("lineEdit_max_listing", str(self.conf.max_listing))
+
+        # Backup
+        self.set_check_box("checkBox_backup", self.conf.backup_enable)
+        self.set_line_edit_text("lineEdit_backup_path", self.conf.backup_path)
+        self.set_time_edit("timeEdit_backup_frequence", self.conf.backup_frequence)
+        self.set_spin_box("spinBox_backup_max", self.conf.backup_max)
+
+        self.connect()
+
+    def connect(self):
+        # File button
+        buttons = {
+            "pushButton_exec_mage": lambda: self.file_dialog("exec_mage", True),
+            "pushButton_exec_mage_extract": lambda: self.file_dialog("exec_mage_extract", True),
+            "pushButton_exec_mailleur": lambda: self.file_dialog("exec_mailleur", True),
+            "pushButton_backup_path": lambda: self.file_dialog("backup_path", False),
+        }
+
+        for button in buttons:
+            self.find(QPushButton, button).clicked.connect(buttons[button])
+
+    def accept(self):
+        # MAGE
+        self.conf.mage_path = self.get_line_edit_text("lineEdit_exec_mage")
+        self.conf.mage_extract_path = self.get_line_edit_text("lineEdit_exec_mage_extract")
+        self.conf.mailleur_path = self.get_line_edit_text("lineEdit_exec_mailleur")
+
+        # Const
+        self.conf.manning = self.get_check_box("checkBox_manning")
+        self.conf.segment = self.get_line_edit_text("lineEdit_segment")
+        self.conf.max_listing = self.get_line_edit_text("lineEdit_max_listing")
+
+        # Backup
+        self.conf.backup_enable = self.get_check_box("checkBox_backup")
+        self.conf.backup_path = self.get_line_edit_text("lineEdit_backup_path")
+        self.conf.backup_frequence = self.get_time_edit("timeEdit_backup_frequence")
+        self.conf.backup_max = self.get_spin_box("spinBox_backup_max")
+
+        self.end()
+
+    def reject(self):
+        # Nothing todo
+        self.end()
+
+    def end(self):
+        self.conf.save()
+        self.close()
+
+    def file_dialog(self, line_edit, select_file):
+        dialog = QFileDialog(self)
+        if select_file:
+            mode = QFileDialog.FileMode.ExistingFile
+        else:
+            mode = QFileDialog.FileMode.Directory
+
+        dialog.setFileMode(mode)
+
+        if dialog.exec_():
+            file_names = dialog.selectedFiles()
+            if len(file_names) != 1:
+                print("pas bien")
+            else:
+                if line_edit != "":
+                    self.set_line_edit_text(
+                        f"lineEdit_{line_edit}",
+                        file_names[0]
+                    )
diff --git a/src/view/MainWindow.py b/src/view/MainWindow.py
index 66fbbac0..b13bebf0 100644
--- a/src/view/MainWindow.py
+++ b/src/view/MainWindow.py
@@ -10,6 +10,7 @@ from PyQt5.uic import loadUi
 
 from view.ListedSubWindow import ListedSubWindow
 from view.DummyWindow import DummyWindow
+from view.ConfigureWindow import ConfigureWindow
 from view.AboutWindow import AboutWindow
 
 from model.Study import Study
@@ -43,14 +44,17 @@ action = (
 )
 
 class ApplicationWindow(QMainWindow, ListedSubWindow):
-    def __init__(self):
+    def __init__(self, conf=None):
         super(ApplicationWindow, self).__init__()
 
+        # App Configuration
+        self.conf = conf
+
         # Model
         self.model = None
         # UI
         self.ui = loadUi(
-            os.path.join(os.path.dirname(__file__), "ui", "MainWindow.ui"),
+            os.path.join(os.path.dirname(__file__), "ui", "MainWindow_old.ui"),
             self
         )
 
@@ -58,15 +62,27 @@ class ApplicationWindow(QMainWindow, ListedSubWindow):
         self.default_style()
 
     def enable_actions(self, action:str, enable:bool):
+        """Enable of disable an action componant
+
+        Args:
+            action: Action to enable/disable
+            enable: True to Enable, or False to disable
+
+        Returns:
+            Nothing
+        """
         self.ui.findChild(QAction, action).setEnabled(enable)
 
     def init_callback(self):
-        """
-        Connect action to callback function.
+        """Connect action to callback function
+
+        Returns:
+            Nothing
         """
         actions = {
             # Menu action
             "actionA_propos": self.open_about,
+            "actionConfiguration_de_Pamhyr": self.open_configure,
             # ToolBar action
             "actionquitter_application": self.close,
             "actionOuvrir_une_tude": self.dummy_model,
@@ -93,6 +109,11 @@ class ApplicationWindow(QMainWindow, ListedSubWindow):
                    .triggered.connect(actions[action])
 
     def default_style(self):
+        """Set default window style
+
+        Returns:
+            Nothing
+        """
         self.update_enable_action()
         # Maximise window
         self.showMaximized()
@@ -113,15 +134,22 @@ class ApplicationWindow(QMainWindow, ListedSubWindow):
         self.update_enable_action()
 
     def update_enable_action(self):
-        no_model = self.model is None
+        """Update status of action componante
 
-        if no_model:
-            for action in define_model_action + other_model_action:
-                self.enable_actions(action, False)
+        Update status of action componant, enable or disable in
+        function of model state
+
+        Returns:
+            Nothing
+        """
+        no_model = self.model is None
 
         for action in no_model_action:
             self.enable_actions(action, no_model)
 
+        for action in define_model_action + other_model_action:
+            self.enable_actions(action, not no_model)
+
         for action in model_action:
             self.enable_actions(action, not no_model)
 
@@ -129,7 +157,25 @@ class ApplicationWindow(QMainWindow, ListedSubWindow):
     # SUBWINDOW #
     #############
 
+    def open_configure(self):
+        """Open configure window
+
+        Open PamHyr configure window
+
+        Returns:
+            Nothing
+        """
+        self.config = ConfigureWindow(conf=self.conf, parent=self)
+        self.config.show()
+
     def open_about(self):
+        """Open about window
+
+        Open a new window with information about PamHyr
+
+        Returns:
+            Nothing
+        """
         self.about = AboutWindow(parent=self)
         self.about.show()
 
@@ -139,9 +185,6 @@ class ApplicationWindow(QMainWindow, ListedSubWindow):
     ###############
 
     def open_dummy(self, title="Dummy"):
-        """
-        Open a dummy dialog window.
-        """
         self.dummy = DummyWindow(
             title=title if type(title) is str else "Dummy",
             parent=self
diff --git a/src/view/ui/ConfigureDialog.ui b/src/view/ui/ConfigureDialog.ui
new file mode 100644
index 00000000..b8316907
--- /dev/null
+++ b/src/view/ui/ConfigureDialog.ui
@@ -0,0 +1,369 @@
+<?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>770</width>
+    <height>351</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <widget class="QWidget" name="">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>20</y>
+     <width>751</width>
+     <height>321</height>
+    </rect>
+   </property>
+   <layout class="QVBoxLayout" name="verticalLayout_8">
+    <item>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QGroupBox" name="groupBox">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+        <property name="title">
+         <string>Executable</string>
+        </property>
+        <widget class="QWidget" name="layoutWidget">
+         <property name="geometry">
+          <rect>
+           <x>10</x>
+           <y>20</y>
+           <width>351</width>
+           <height>111</height>
+          </rect>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout_2">
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_4">
+            <item>
+             <widget class="QLabel" name="label_4">
+              <property name="text">
+               <string>MAGE</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="label_5">
+              <property name="text">
+               <string>MAGE_Extraire</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="label_6">
+              <property name="text">
+               <string>Mailleur</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_5">
+            <item>
+             <layout class="QHBoxLayout" name="horizontalLayout_6">
+              <item>
+               <widget class="QLineEdit" name="lineEdit_exec_mage"/>
+              </item>
+              <item>
+               <widget class="QPushButton" name="pushButton_exec_mage">
+                <property name="text">
+                 <string/>
+                </property>
+                <property name="icon">
+                 <iconset>
+                  <normaloff>ressources/open.png</normaloff>ressources/open.png</iconset>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </item>
+            <item>
+             <layout class="QHBoxLayout" name="horizontalLayout_8">
+              <item>
+               <widget class="QLineEdit" name="lineEdit_exec_mage_extract"/>
+              </item>
+              <item>
+               <widget class="QPushButton" name="pushButton_exec_mage_extract">
+                <property name="text">
+                 <string/>
+                </property>
+                <property name="icon">
+                 <iconset>
+                  <normaloff>ressources/open.png</normaloff>ressources/open.png</iconset>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </item>
+            <item>
+             <layout class="QHBoxLayout" name="horizontalLayout_7">
+              <item>
+               <widget class="QLineEdit" name="lineEdit_exec_mailleur"/>
+              </item>
+              <item>
+               <widget class="QPushButton" name="pushButton_exec_mailleur">
+                <property name="text">
+                 <string/>
+                </property>
+                <property name="icon">
+                 <iconset>
+                  <normaloff>ressources/open.png</normaloff>ressources/open.png</iconset>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </widget>
+       </widget>
+      </item>
+      <item row="0" column="1" rowspan="2">
+       <widget class="QGroupBox" name="groupBox_3">
+        <property name="title">
+         <string>BackUp</string>
+        </property>
+        <widget class="QWidget" name="">
+         <property name="geometry">
+          <rect>
+           <x>10</x>
+           <y>20</y>
+           <width>343</width>
+           <height>125</height>
+          </rect>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout_4">
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_7">
+            <item>
+             <widget class="QLabel" name="label_7">
+              <property name="text">
+               <string>Sauvegarde automatique</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="label_8">
+              <property name="text">
+               <string>Chemin</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="label_9">
+              <property name="text">
+               <string>Frequence</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="label_10">
+              <property name="text">
+               <string>Max. archives</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_6">
+            <item>
+             <widget class="QCheckBox" name="checkBox_backup">
+              <property name="text">
+               <string>Activé</string>
+              </property>
+              <property name="tristate">
+               <bool>false</bool>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <layout class="QHBoxLayout" name="horizontalLayout_3">
+              <item>
+               <widget class="QLineEdit" name="lineEdit_backup_path"/>
+              </item>
+              <item>
+               <widget class="QPushButton" name="pushButton_backup_path">
+                <property name="text">
+                 <string/>
+                </property>
+                <property name="icon">
+                 <iconset>
+                  <normaloff>ressources/open.png</normaloff>ressources/open.png</iconset>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </item>
+            <item>
+             <widget class="QTimeEdit" name="timeEdit_backup_frequence">
+              <property name="minimumTime">
+               <time>
+                <hour>0</hour>
+                <minute>1</minute>
+                <second>0</second>
+               </time>
+              </property>
+              <property name="displayFormat">
+               <string>HH:mm:ss</string>
+              </property>
+              <property name="timeSpec">
+               <enum>Qt::LocalTime</enum>
+              </property>
+              <property name="time">
+               <time>
+                <hour>0</hour>
+                <minute>5</minute>
+                <second>0</second>
+               </time>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QSpinBox" name="spinBox_backup_max">
+              <property name="minimum">
+               <number>1</number>
+              </property>
+              <property name="value">
+               <number>10</number>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </widget>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QGroupBox" name="groupBox_2">
+        <property name="title">
+         <string>Constante numérique</string>
+        </property>
+        <widget class="QWidget" name="">
+         <property name="geometry">
+          <rect>
+           <x>10</x>
+           <y>30</y>
+           <width>268</width>
+           <height>93</height>
+          </rect>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout">
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_3">
+            <item>
+             <widget class="QLabel" name="label">
+              <property name="text">
+               <string>Frottement</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="label_2">
+              <property name="text">
+               <string>Nombre de segment</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="label_3">
+              <property name="text">
+               <string>Taille max. du listing</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout">
+            <item>
+             <widget class="QCheckBox" name="checkBox_manning">
+              <property name="text">
+               <string>Manning</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="lineEdit_segment">
+              <property name="text">
+               <string>1000</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="lineEdit_max_listing">
+              <property name="text">
+               <string>500000</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </widget>
+       </widget>
+      </item>
+     </layout>
+    </item>
+    <item>
+     <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>
+   </layout>
+  </widget>
+ </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>
diff --git a/src/view/ui/MainWindow.ui b/src/view/ui/MainWindow.ui
index 1a014058..d9c42155 100644
--- a/src/view/ui/MainWindow.ui
+++ b/src/view/ui/MainWindow.ui
@@ -75,33 +75,33 @@
     <property name="title">
      <string>&amp;Fichier</string>
     </property>
-    <addaction name="actionR_seau"/>
-    <addaction name="actionNouvelle_tude_RubarBE"/>
+    <addaction name="m_a_new_mage"/>
+    <addaction name="m_a_new_rubarbe"/>
     <addaction name="separator"/>
-    <addaction name="actionOuvrir_une_tude_2"/>
+    <addaction name="m_a_open"/>
     <addaction name="separator"/>
-    <addaction name="actionImporter_un_jeu_de_donn_es_MAGE"/>
-    <addaction name="actionImporter_un_jeu_de_donn_es_RubarBE"/>
+    <addaction name="m_a_import_mage"/>
+    <addaction name="m_a_import_rubarbe"/>
     <addaction name="separator"/>
     <addaction name="separator"/>
-    <addaction name="actionFermer"/>
+    <addaction name="m_a_close"/>
     <addaction name="separator"/>
-    <addaction name="actionEnregistrer"/>
-    <addaction name="actionEnregistrer_2"/>
-    <addaction name="actionEnregistrer_sous"/>
-    <addaction name="actionArchiver"/>
+    <addaction name="m_a_save_maille"/>
+    <addaction name="m_a_save"/>
+    <addaction name="m_a_save_as"/>
+    <addaction name="m_a_archive"/>
     <addaction name="separator"/>
     <addaction name="separator"/>
-    <addaction name="actionConfiguration_de_Pamhyr"/>
+    <addaction name="m_a_config"/>
     <addaction name="separator"/>
-    <addaction name="actionQuitter"/>
+    <addaction name="m_a_quit"/>
     <addaction name="separator"/>
    </widget>
    <widget class="QMenu" name="menu_R_seau">
     <property name="title">
      <string>&amp;Réseau</string>
     </property>
-    <addaction name="actionEditer_le_r_seau"/>
+    <addaction name="m_a_edit_network"/>
    </widget>
    <widget class="QMenu" name="menuG_om_trie">
     <property name="title">
@@ -115,22 +115,22 @@
       <property name="title">
        <string>Profil en travers</string>
       </property>
-      <addaction name="actionAbscisse_Cote"/>
-      <addaction name="actionXYZ"/>
+      <addaction name="m_a_abscisse_cote"/>
+      <addaction name="m_a_XYZ"/>
      </widget>
      <addaction name="menuProfil_en_travers"/>
     </widget>
-    <addaction name="action_diter_la_g_om_trie"/>
+    <addaction name="m_a_edit_geometry"/>
     <addaction name="separator"/>
-    <addaction name="actionImporter_la_g_om_trie"/>
-    <addaction name="actionExporter_la_g_om_trie"/>
+    <addaction name="m_a_import_geometry"/>
+    <addaction name="m_a_export_geometry"/>
     <addaction name="separator"/>
-    <addaction name="actionLancer_le_mailleur_externe"/>
-    <addaction name="actionChoix_du_maileur_par_bief"/>
-    <addaction name="actionVisulaiser_la_g_om_trie_maill_e"/>
-    <addaction name="actionExporter_le_maillage"/>
-    <addaction name="actionSupprimer_le_maillage_du_bief_courant"/>
-    <addaction name="actionSupprimer_l_ensemble_du_maillage"/>
+    <addaction name="m_a_run_mailler"/>
+    <addaction name="m_a_choose_maillieur_by_bief"/>
+    <addaction name="m_a_view_maille"/>
+    <addaction name="m_a_export_maillage"/>
+    <addaction name="m_a_delete_maillage_for_current_bief"/>
+    <addaction name="m_a_delete_maillage"/>
     <addaction name="separator"/>
     <addaction name="separator"/>
     <addaction name="menuComparer"/>
@@ -302,7 +302,7 @@
    <addaction name="actionOuvrages"/>
    <addaction name="separator"/>
   </widget>
-  <action name="actionR_seau">
+  <action name="m_a_new_mage">
    <property name="checkable">
     <bool>false</bool>
    </property>
@@ -332,7 +332,7 @@
     <string>Ouvrir une étude</string>
    </property>
   </action>
-  <action name="actionNouvelle_tude_RubarBE">
+  <action name="m_a_new_rubarbe">
    <property name="text">
     <string>Nouvelle étude RubarBE</string>
    </property>
@@ -340,7 +340,7 @@
     <string>Ctrl+R</string>
    </property>
   </action>
-  <action name="actionOuvrir_une_tude_2">
+  <action name="m_a_open">
    <property name="icon">
     <iconset>
      <normalon>ressources/open.png</normalon>
@@ -353,7 +353,7 @@
     <string>Ctrl+O</string>
    </property>
   </action>
-  <action name="actionImporter_un_jeu_de_donn_es_MAGE">
+  <action name="m_a_import_mage">
    <property name="text">
     <string>Importer un jeu de données MAGE</string>
    </property>
@@ -361,12 +361,12 @@
     <string/>
    </property>
   </action>
-  <action name="actionImporter_un_jeu_de_donn_es_RubarBE">
+  <action name="m_a_import_rubarbe">
    <property name="text">
     <string>Importer un jeu de données RubarBE</string>
    </property>
   </action>
-  <action name="actionFermer">
+  <action name="m_a_close">
    <property name="icon">
     <iconset>
      <normaloff>../ressources/menu/gtk-close.png</normaloff>../ressources/menu/gtk-close.png</iconset>
@@ -375,7 +375,7 @@
     <string>Fermer</string>
    </property>
   </action>
-  <action name="actionEnregistrer">
+  <action name="m_a_save_maille">
    <property name="checkable">
     <bool>true</bool>
    </property>
@@ -386,7 +386,7 @@
     <string>Enregistrer le maillage</string>
    </property>
   </action>
-  <action name="actionEnregistrer_2">
+  <action name="m_a_save">
    <property name="icon">
     <iconset>
      <normaloff>ressources/gtk-save.png</normaloff>ressources/gtk-save.png</iconset>
@@ -398,7 +398,7 @@
     <string>Ctrl+S</string>
    </property>
   </action>
-  <action name="actionEnregistrer_sous">
+  <action name="m_a_save_as">
    <property name="icon">
     <iconset>
      <normaloff>ressources/gtk-save-as.png</normaloff>ressources/gtk-save-as.png</iconset>
@@ -410,17 +410,17 @@
     <string>Ctrl+Shift+S</string>
    </property>
   </action>
-  <action name="actionArchiver">
+  <action name="m_a_archive">
    <property name="text">
     <string>Archiver</string>
    </property>
   </action>
-  <action name="actionConfiguration_de_Pamhyr">
+  <action name="m_a_config">
    <property name="text">
     <string>Configuration de Pamhyr</string>
    </property>
   </action>
-  <action name="actionQuitter">
+  <action name="m_a_quit">
    <property name="icon">
     <iconset>
      <normaloff>../ressources/menu/gtk-quit.png</normaloff>../ressources/menu/gtk-quit.png</iconset>
@@ -432,62 +432,74 @@
     <string>Ctrl+F4</string>
    </property>
   </action>
-  <action name="actionEditer_le_r_seau">
+  <action name="m_a_edit_network">
    <property name="text">
     <string> Éditer le réseau</string>
    </property>
   </action>
-  <action name="action_diter_la_g_om_trie">
+  <action name="m_a_edit_geometry">
    <property name="text">
     <string>Éditer la géométrie </string>
    </property>
   </action>
-  <action name="actionImporter_la_g_om_trie">
+  <action name="m_a_import_geometry">
    <property name="text">
     <string>Importer une géométrie</string>
    </property>
   </action>
-  <action name="actionExporter_la_g_om_trie">
+  <action name="m_a_export_geometry">
    <property name="text">
     <string>Exporter la géométrie</string>
    </property>
   </action>
-  <action name="actionLancer_le_mailleur_externe">
+  <action name="m_a_run_mailler">
    <property name="text">
     <string>Lancer le mailleur externe</string>
    </property>
   </action>
-  <action name="actionChoix_du_maileur_par_bief">
+  <action name="m_a_choose_maillieur_by_bief">
    <property name="text">
     <string>Choix du mailleur par bief</string>
    </property>
   </action>
-  <action name="actionVisulaiser_la_g_om_trie_maill_e">
+  <action name="m_a_view_maille">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
    <property name="text">
     <string>Visualiser la géométrie maillée</string>
    </property>
   </action>
-  <action name="actionExporter_le_maillage">
+  <action name="m_a_export_maillage">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
    <property name="text">
     <string>Exporter le maillage </string>
    </property>
   </action>
-  <action name="actionSupprimer_le_maillage_du_bief_courant">
+  <action name="m_a_delete_maillage_for_current_bief">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
    <property name="text">
     <string>Supprimer le maillage du bief courant</string>
    </property>
   </action>
-  <action name="actionSupprimer_l_ensemble_du_maillage">
+  <action name="m_a_delete_maillage">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
    <property name="text">
     <string>Supprimer l'ensemble des maillages</string>
    </property>
   </action>
-  <action name="actionAbscisse_Cote">
+  <action name="m_a_abscisse_cote">
    <property name="text">
     <string>Abscisse - Cote</string>
    </property>
   </action>
-  <action name="actionXYZ">
+  <action name="m_a_XYZ">
    <property name="text">
     <string>XYZ</string>
    </property>
@@ -705,7 +717,7 @@
     <string>Enrégistrer étude en cours (Ctrl+S)</string>
    </property>
    <property name="shortcut">
-    <string>Ctrl+S</string>
+    <string/>
    </property>
   </action>
   <action name="actionfermer_etude_en_cours">
@@ -754,6 +766,9 @@
    </property>
   </action>
   <action name="actioninterrompt_simulation_en_cours">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
    <property name="icon">
     <iconset>
      <normaloff>ressources/gtk-stop.png</normaloff>ressources/gtk-stop.png</iconset>
@@ -781,6 +796,9 @@
    </property>
   </action>
   <action name="actionafficher_listings_simulation">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
    <property name="icon">
     <iconset>
      <normaloff>ressources/gnome-stock-edit.png</normaloff>ressources/gnome-stock-edit.png</iconset>
diff --git a/src/view/ui/MainWindow_old.ui b/src/view/ui/MainWindow_old.ui
new file mode 100644
index 00000000..3824a981
--- /dev/null
+++ b/src/view/ui/MainWindow_old.ui
@@ -0,0 +1,908 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="windowModality">
+   <enum>Qt::ApplicationModal</enum>
+  </property>
+  <property name="enabled">
+   <bool>true</bool>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>850</width>
+    <height>646</height>
+   </rect>
+  </property>
+  <property name="font">
+   <font>
+    <family>Serif</family>
+    <weight>75</weight>
+    <bold>true</bold>
+    <kerning>false</kerning>
+   </font>
+  </property>
+  <property name="mouseTracking">
+   <bool>true</bool>
+  </property>
+  <property name="contextMenuPolicy">
+   <enum>Qt::NoContextMenu</enum>
+  </property>
+  <property name="acceptDrops">
+   <bool>true</bool>
+  </property>
+  <property name="windowTitle">
+   <string>PAMHYR</string>
+  </property>
+  <property name="windowIcon">
+   <iconset>
+    <normaloff>ressources/M_icon.png</normaloff>ressources/M_icon.png</iconset>
+  </property>
+  <property name="layoutDirection">
+   <enum>Qt::LeftToRight</enum>
+  </property>
+  <property name="autoFillBackground">
+   <bool>false</bool>
+  </property>
+  <property name="styleSheet">
+   <string notr="true"/>
+  </property>
+  <property name="documentMode">
+   <bool>false</bool>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <property name="contextMenuPolicy">
+    <enum>Qt::NoContextMenu</enum>
+   </property>
+  </widget>
+  <widget class="QMenuBar" name="menubar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>850</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="font">
+    <font>
+     <family>Sans Serif</family>
+    </font>
+   </property>
+   <widget class="QMenu" name="menu_File">
+    <property name="title">
+     <string>&amp;Fichier</string>
+    </property>
+    <addaction name="actionR_seau"/>
+    <addaction name="actionNouvelle_tude_RubarBE"/>
+    <addaction name="separator"/>
+    <addaction name="actionOuvrir_une_tude_2"/>
+    <addaction name="separator"/>
+    <addaction name="actionImporter_un_jeu_de_donn_es_MAGE"/>
+    <addaction name="actionImporter_un_jeu_de_donn_es_RubarBE"/>
+    <addaction name="separator"/>
+    <addaction name="separator"/>
+    <addaction name="actionFermer"/>
+    <addaction name="separator"/>
+    <addaction name="actionEnregistrer"/>
+    <addaction name="actionEnregistrer_2"/>
+    <addaction name="actionEnregistrer_sous"/>
+    <addaction name="actionArchiver"/>
+    <addaction name="separator"/>
+    <addaction name="separator"/>
+    <addaction name="actionConfiguration_de_Pamhyr"/>
+    <addaction name="separator"/>
+    <addaction name="actionQuitter"/>
+    <addaction name="separator"/>
+   </widget>
+   <widget class="QMenu" name="menu_R_seau">
+    <property name="title">
+     <string>&amp;Réseau</string>
+    </property>
+    <addaction name="actionEditer_le_r_seau"/>
+   </widget>
+   <widget class="QMenu" name="menuG_om_trie">
+    <property name="title">
+     <string>&amp;Géométrie</string>
+    </property>
+    <widget class="QMenu" name="menuComparer">
+     <property name="title">
+      <string>Comparer</string>
+     </property>
+     <widget class="QMenu" name="menuProfil_en_travers">
+      <property name="title">
+       <string>Profil en travers</string>
+      </property>
+      <addaction name="actionAbscisse_Cote"/>
+      <addaction name="actionXYZ"/>
+     </widget>
+     <addaction name="menuProfil_en_travers"/>
+    </widget>
+    <addaction name="action_diter_la_g_om_trie"/>
+    <addaction name="separator"/>
+    <addaction name="actionImporter_la_g_om_trie"/>
+    <addaction name="actionExporter_la_g_om_trie"/>
+    <addaction name="separator"/>
+    <addaction name="actionLancer_le_mailleur_externe"/>
+    <addaction name="actionChoix_du_maileur_par_bief"/>
+    <addaction name="actionVisulaiser_la_g_om_trie_maill_e"/>
+    <addaction name="actionExporter_le_maillage"/>
+    <addaction name="actionSupprimer_le_maillage_du_bief_courant"/>
+    <addaction name="actionSupprimer_l_ensemble_du_maillage"/>
+    <addaction name="separator"/>
+    <addaction name="separator"/>
+    <addaction name="menuComparer"/>
+   </widget>
+   <widget class="QMenu" name="menu_x_cuter">
+    <property name="title">
+     <string>&amp;Exécuter</string>
+    </property>
+    <widget class="QMenu" name="menuSous_tude_Rubar3">
+     <property name="title">
+      <string>Sous-étude Rubar3</string>
+     </property>
+     <addaction name="actionOuvrir"/>
+     <addaction name="actionFermer_2"/>
+    </widget>
+    <addaction name="actionParam_tres_num_riques_du_solveur_MAGE"/>
+    <addaction name="actionSolveur_MAGE"/>
+    <addaction name="actionStop_solveur"/>
+    <addaction name="actionAfficher_les_listings"/>
+    <addaction name="actionGestion_de_r_pertoire_de_simulation"/>
+    <addaction name="separator"/>
+    <addaction name="menuSous_tude_Rubar3"/>
+   </widget>
+   <widget class="QMenu" name="menu_Hydraulique">
+    <property name="title">
+     <string>&amp;Hydraulique</string>
+    </property>
+    <addaction name="actionConditions_aux_limites_Apports_lat_raux"/>
+    <addaction name="separator"/>
+    <addaction name="actionConditions_initiales"/>
+    <addaction name="actionActiver_D_sactiver_l_export"/>
+    <addaction name="actionImporter_l_tat_final_comme_tat_initial"/>
+    <addaction name="separator"/>
+    <addaction name="action_dition_des"/>
+    <addaction name="action_dition_des_Apports_Lat_raux"/>
+    <addaction name="action_dition_des_d_versements"/>
+    <addaction name="separator"/>
+    <addaction name="action_dition_des_ouvrages_en_travers"/>
+   </widget>
+   <widget class="QMenu" name="menuGraphiques">
+    <property name="title">
+     <string>&amp;Graphiques</string>
+    </property>
+    <addaction name="actionHydrogramme"/>
+    <addaction name="actionLimnigramme"/>
+    <addaction name="actionLigne_d_eau"/>
+    <addaction name="actionLigne_d_eau_finale"/>
+    <addaction name="actionLigne_d_eau_enveloppe"/>
+    <addaction name="actionVitesse_Pk_t_fix"/>
+    <addaction name="actionVitesse_t_Pk_fix"/>
+    <addaction name="actionCharge_hydraulique_Pk_t_fix"/>
+    <addaction name="actionCharge_hydraulique_t_Pk_fix"/>
+    <addaction name="actionVoir_l_animation_MAGE"/>
+    <addaction name="actionAutres_r_sulats_MAGE"/>
+   </widget>
+   <widget class="QMenu" name="menuCartographie">
+    <property name="title">
+     <string>&amp;Cartographie</string>
+    </property>
+    <addaction name="actionCartographier_le_bief_courant"/>
+   </widget>
+   <widget class="QMenu" name="menuAide">
+    <property name="title">
+     <string>&amp;Aide</string>
+    </property>
+    <addaction name="actionAide_de_PAMHYR"/>
+    <addaction name="actionAide_de_MAGE"/>
+    <addaction name="actionA_propos"/>
+   </widget>
+   <addaction name="menu_File"/>
+   <addaction name="menu_R_seau"/>
+   <addaction name="menuG_om_trie"/>
+   <addaction name="menu_Hydraulique"/>
+   <addaction name="menu_x_cuter"/>
+   <addaction name="menuGraphiques"/>
+   <addaction name="menuCartographie"/>
+   <addaction name="menuAide"/>
+  </widget>
+  <widget class="QStatusBar" name="statusbar"/>
+  <widget class="QToolBar" name="toolBar">
+   <property name="enabled">
+    <bool>true</bool>
+   </property>
+   <property name="sizePolicy">
+    <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+     <horstretch>0</horstretch>
+     <verstretch>0</verstretch>
+    </sizepolicy>
+   </property>
+   <property name="font">
+    <font>
+     <weight>50</weight>
+     <bold>false</bold>
+     <kerning>true</kerning>
+    </font>
+   </property>
+   <property name="mouseTracking">
+    <bool>true</bool>
+   </property>
+   <property name="focusPolicy">
+    <enum>Qt::ClickFocus</enum>
+   </property>
+   <property name="contextMenuPolicy">
+    <enum>Qt::NoContextMenu</enum>
+   </property>
+   <property name="windowTitle">
+    <string>toolBar</string>
+   </property>
+   <property name="whatsThis">
+    <string/>
+   </property>
+   <property name="autoFillBackground">
+    <bool>true</bool>
+   </property>
+   <property name="movable">
+    <bool>true</bool>
+   </property>
+   <property name="floatable">
+    <bool>false</bool>
+   </property>
+   <attribute name="toolBarArea">
+    <enum>TopToolBarArea</enum>
+   </attribute>
+   <attribute name="toolBarBreak">
+    <bool>false</bool>
+   </attribute>
+   <addaction name="actionOuvrir_une_tude"/>
+   <addaction name="actionenregistrer_etude_en_cours"/>
+   <addaction name="actionfermer_etude_en_cours"/>
+   <addaction name="actionquitter_application"/>
+   <addaction name="actionlancer_solveur"/>
+   <addaction name="actioninterrompt_simulation_en_cours"/>
+   <addaction name="actionafficher_listings_simulation"/>
+   <addaction name="separator"/>
+   <addaction name="actionReseau"/>
+   <addaction name="actionGeometrie"/>
+   <addaction name="actionMaillage"/>
+   <addaction name="actionlancer_mailleur_externe"/>
+  </widget>
+  <widget class="QToolBar" name="toolBar_2">
+   <property name="font">
+    <font>
+     <family>Sans Serif</family>
+     <pointsize>9</pointsize>
+     <weight>50</weight>
+     <italic>false</italic>
+     <bold>false</bold>
+    </font>
+   </property>
+   <property name="windowTitle">
+    <string>toolBar_2</string>
+   </property>
+   <attribute name="toolBarArea">
+    <enum>TopToolBarArea</enum>
+   </attribute>
+   <attribute name="toolBarBreak">
+    <bool>true</bool>
+   </attribute>
+   <addaction name="actionCond_Limites"/>
+   <addaction name="separator"/>
+   <addaction name="actionApp_Lat_raux"/>
+   <addaction name="separator"/>
+   <addaction name="actionDeversements"/>
+   <addaction name="separator"/>
+   <addaction name="actionTroncons"/>
+   <addaction name="separator"/>
+   <addaction name="actionFrottements"/>
+   <addaction name="separator"/>
+   <addaction name="actionOuvrages"/>
+   <addaction name="separator"/>
+  </widget>
+  <action name="actionR_seau">
+   <property name="checkable">
+    <bool>false</bool>
+   </property>
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/edit.png</normaloff>ressources/edit.png</iconset>
+   </property>
+   <property name="text">
+    <string>Nouvelle étude MAGE</string>
+   </property>
+   <property name="font">
+    <font>
+     <weight>75</weight>
+     <bold>true</bold>
+    </font>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+N</string>
+   </property>
+  </action>
+  <action name="actionOuvrir_une_tude">
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/open.png</normaloff>ressources/open.png</iconset>
+   </property>
+   <property name="text">
+    <string>Ouvrir une étude</string>
+   </property>
+  </action>
+  <action name="actionNouvelle_tude_RubarBE">
+   <property name="text">
+    <string>Nouvelle étude RubarBE</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+R</string>
+   </property>
+  </action>
+  <action name="actionOuvrir_une_tude_2">
+   <property name="icon">
+    <iconset>
+     <normalon>ressources/open.png</normalon>
+    </iconset>
+   </property>
+   <property name="text">
+    <string>Ouvrir une étude</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+O</string>
+   </property>
+  </action>
+  <action name="actionImporter_un_jeu_de_donn_es_MAGE">
+   <property name="text">
+    <string>Importer un jeu de données MAGE</string>
+   </property>
+   <property name="statusTip">
+    <string/>
+   </property>
+  </action>
+  <action name="actionImporter_un_jeu_de_donn_es_RubarBE">
+   <property name="text">
+    <string>Importer un jeu de données RubarBE</string>
+   </property>
+  </action>
+  <action name="actionFermer">
+   <property name="icon">
+    <iconset>
+     <normaloff>../ressources/menu/gtk-close.png</normaloff>../ressources/menu/gtk-close.png</iconset>
+   </property>
+   <property name="text">
+    <string>Fermer</string>
+   </property>
+  </action>
+  <action name="actionEnregistrer">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="enabled">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>Enregistrer le maillage</string>
+   </property>
+  </action>
+  <action name="actionEnregistrer_2">
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/gtk-save.png</normaloff>ressources/gtk-save.png</iconset>
+   </property>
+   <property name="text">
+    <string>Enregistrer</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+S</string>
+   </property>
+  </action>
+  <action name="actionEnregistrer_sous">
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/gtk-save-as.png</normaloff>ressources/gtk-save-as.png</iconset>
+   </property>
+   <property name="text">
+    <string>Enregistrer sous ...</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+Shift+S</string>
+   </property>
+  </action>
+  <action name="actionArchiver">
+   <property name="text">
+    <string>Archiver</string>
+   </property>
+  </action>
+  <action name="actionConfiguration_de_Pamhyr">
+   <property name="text">
+    <string>Configuration de Pamhyr</string>
+   </property>
+  </action>
+  <action name="actionQuitter">
+   <property name="icon">
+    <iconset>
+     <normaloff>../ressources/menu/gtk-quit.png</normaloff>../ressources/menu/gtk-quit.png</iconset>
+   </property>
+   <property name="text">
+    <string>Quitter</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+F4</string>
+   </property>
+  </action>
+  <action name="actionEditer_le_r_seau">
+   <property name="text">
+    <string> Éditer le réseau</string>
+   </property>
+  </action>
+  <action name="action_diter_la_g_om_trie">
+   <property name="text">
+    <string>Éditer la géométrie </string>
+   </property>
+  </action>
+  <action name="actionImporter_la_g_om_trie">
+   <property name="text">
+    <string>Importer une géométrie</string>
+   </property>
+  </action>
+  <action name="actionExporter_la_g_om_trie">
+   <property name="text">
+    <string>Exporter la géométrie</string>
+   </property>
+  </action>
+  <action name="actionLancer_le_mailleur_externe">
+   <property name="text">
+    <string>Lancer le mailleur externe</string>
+   </property>
+  </action>
+  <action name="actionChoix_du_maileur_par_bief">
+   <property name="text">
+    <string>Choix du mailleur par bief</string>
+   </property>
+  </action>
+  <action name="actionVisulaiser_la_g_om_trie_maill_e">
+   <property name="text">
+    <string>Visualiser la géométrie maillée</string>
+   </property>
+  </action>
+  <action name="actionExporter_le_maillage">
+   <property name="text">
+    <string>Exporter le maillage </string>
+   </property>
+  </action>
+  <action name="actionSupprimer_le_maillage_du_bief_courant">
+   <property name="text">
+    <string>Supprimer le maillage du bief courant</string>
+   </property>
+  </action>
+  <action name="actionSupprimer_l_ensemble_du_maillage">
+   <property name="text">
+    <string>Supprimer l'ensemble des maillages</string>
+   </property>
+  </action>
+  <action name="actionAbscisse_Cote">
+   <property name="text">
+    <string>Abscisse - Cote</string>
+   </property>
+  </action>
+  <action name="actionXYZ">
+   <property name="text">
+    <string>XYZ</string>
+   </property>
+  </action>
+  <action name="actionParam_tres_num_riques_du_solveur_MAGE">
+   <property name="text">
+    <string>Paramètres numériques du solveur MAGE</string>
+   </property>
+  </action>
+  <action name="actionConditions_aux_limites_Apports_lat_raux">
+   <property name="text">
+    <string>Conditions aux Limites &amp; Apports Ponctuels</string>
+   </property>
+   <property name="font">
+    <font>
+     <weight>75</weight>
+     <bold>true</bold>
+    </font>
+   </property>
+  </action>
+  <action name="actionConditions_initiales">
+   <property name="text">
+    <string>Conditions initiales</string>
+   </property>
+  </action>
+  <action name="actionActiver_D_sactiver_l_export">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>Activer/Désactiver l'export des conditions initiales</string>
+   </property>
+  </action>
+  <action name="actionImporter_l_tat_final_comme_tat_initial">
+   <property name="text">
+    <string>Importer l'état final comme état initial</string>
+   </property>
+  </action>
+  <action name="action_dition_des">
+   <property name="text">
+    <string>Édition des Frottements</string>
+   </property>
+  </action>
+  <action name="action_dition_des_Apports_Lat_raux">
+   <property name="text">
+    <string>Édition des Apports Latéraux</string>
+   </property>
+  </action>
+  <action name="action_dition_des_d_versements">
+   <property name="text">
+    <string>Édition des déversements</string>
+   </property>
+  </action>
+  <action name="action_dition_des_Tron_ons">
+   <property name="text">
+    <string>Édition des Tronçons</string>
+   </property>
+  </action>
+  <action name="action_dition_des_ouvrages_en_travers">
+   <property name="text">
+    <string>Édition des ouvrages en travers</string>
+   </property>
+  </action>
+  <action name="actionSolveur_MAGE">
+   <property name="text">
+    <string>Solveur MAGE</string>
+   </property>
+  </action>
+  <action name="actionStop_solveur">
+   <property name="text">
+    <string>Stop Solveur</string>
+   </property>
+  </action>
+  <action name="actionAfficher_les_listings">
+   <property name="text">
+    <string>Afficher les listings</string>
+   </property>
+  </action>
+  <action name="actionGestion_de_r_pertoire_de_simulation">
+   <property name="text">
+    <string>Gestion des répertoires de simulation</string>
+   </property>
+  </action>
+  <action name="actionOuvrir">
+   <property name="text">
+    <string>Ouvrir</string>
+   </property>
+  </action>
+  <action name="actionFermer_2">
+   <property name="text">
+    <string>Fermer</string>
+   </property>
+  </action>
+  <action name="actionHydrogramme">
+   <property name="text">
+    <string>Hydrogramme</string>
+   </property>
+   <property name="font">
+    <font>
+     <family>Ubuntu</family>
+     <weight>75</weight>
+     <bold>true</bold>
+    </font>
+   </property>
+  </action>
+  <action name="actionLimnigramme">
+   <property name="text">
+    <string>Limnigramme</string>
+   </property>
+   <property name="font">
+    <font>
+     <weight>75</weight>
+     <bold>true</bold>
+    </font>
+   </property>
+  </action>
+  <action name="actionLigne_d_eau">
+   <property name="text">
+    <string>Ligne d'eau</string>
+   </property>
+  </action>
+  <action name="actionLigne_d_eau_finale">
+   <property name="text">
+    <string>Ligne d'eau finale</string>
+   </property>
+  </action>
+  <action name="actionLigne_d_eau_enveloppe">
+   <property name="text">
+    <string>Ligne d'eau enveloppe</string>
+   </property>
+  </action>
+  <action name="actionVitesse_Pk_t_fix">
+   <property name="text">
+    <string>Vitesse(Pk) à t fixé</string>
+   </property>
+  </action>
+  <action name="actionVitesse_t_Pk_fix">
+   <property name="text">
+    <string>Vitesse(t) à Pk fixé</string>
+   </property>
+  </action>
+  <action name="actionCharge_hydraulique_Pk_t_fix">
+   <property name="text">
+    <string>Charge hydraulique(Pk) à t fixé</string>
+   </property>
+  </action>
+  <action name="actionCharge_hydraulique_t_Pk_fix">
+   <property name="text">
+    <string>Charge hydraulique(t) à Pk fixé</string>
+   </property>
+   <property name="font">
+    <font>
+     <weight>75</weight>
+     <bold>true</bold>
+    </font>
+   </property>
+  </action>
+  <action name="actionVoir_l_animation_MAGE">
+   <property name="text">
+    <string>Voir l'animation (MAGE)</string>
+   </property>
+  </action>
+  <action name="actionAutres_r_sulats_MAGE">
+   <property name="text">
+    <string>Autres résulats MAGE</string>
+   </property>
+   <property name="font">
+    <font>
+     <weight>75</weight>
+     <bold>true</bold>
+    </font>
+   </property>
+  </action>
+  <action name="actionCartographier_le_bief_courant">
+   <property name="text">
+    <string>Cartographier le bief courant</string>
+   </property>
+  </action>
+  <action name="actionAide_de_PAMHYR">
+   <property name="text">
+    <string>Aide de PAMHYR</string>
+   </property>
+  </action>
+  <action name="actionAide_de_MAGE">
+   <property name="text">
+    <string>Aide de MAGE</string>
+   </property>
+  </action>
+  <action name="actionA_propos">
+   <property name="text">
+    <string>À propos</string>
+   </property>
+  </action>
+  <action name="actionouvrir">
+   <property name="icon">
+    <iconset>
+     <normaloff>../ressources/menu/open.png</normaloff>../ressources/menu/open.png</iconset>
+   </property>
+   <property name="text">
+    <string>ouvrir</string>
+   </property>
+   <property name="toolTip">
+    <string>Ouvrir une étude</string>
+   </property>
+  </action>
+  <action name="actionenregistrer_etude_en_cours">
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/save.png</normaloff>ressources/save.png</iconset>
+   </property>
+   <property name="text">
+    <string>enregistrer_etude_en_cours</string>
+   </property>
+   <property name="toolTip">
+    <string>Enrégistrer étude en cours (Ctrl+S)</string>
+   </property>
+   <property name="shortcut">
+    <string/>
+   </property>
+  </action>
+  <action name="actionfermer_etude_en_cours">
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/gtk-close.png</normaloff>ressources/gtk-close.png</iconset>
+   </property>
+   <property name="text">
+    <string>fermer_etude_en_cours</string>
+   </property>
+   <property name="toolTip">
+    <string>Fermer étude en cours (Ctrl+F)</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+F</string>
+   </property>
+  </action>
+  <action name="actionquitter_application">
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/exit_bis.png</normaloff>ressources/exit_bis.png</iconset>
+   </property>
+   <property name="text">
+    <string>quitter_application</string>
+   </property>
+   <property name="toolTip">
+    <string>Quitter l'application (Ctrl+Q)</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+Q</string>
+   </property>
+  </action>
+  <action name="actionlancer_solveur">
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/gtk-execute.png</normaloff>ressources/gtk-execute.png</iconset>
+   </property>
+   <property name="text">
+    <string>lancer_solveur</string>
+   </property>
+   <property name="toolTip">
+    <string>Lancer le solveur pour réaliser une simulation</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+X</string>
+   </property>
+  </action>
+  <action name="actioninterrompt_simulation_en_cours">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/gtk-stop.png</normaloff>ressources/gtk-stop.png</iconset>
+   </property>
+   <property name="text">
+    <string>interrompt_simulation_en_cours</string>
+   </property>
+   <property name="toolTip">
+    <string>Interrompt la simulation en cours</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+C</string>
+   </property>
+  </action>
+  <action name="actionlancer_mailleur_externe">
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/gnome-stock-insert-table.png</normaloff>ressources/gnome-stock-insert-table.png</iconset>
+   </property>
+   <property name="text">
+    <string>lancer_mailleur_externe</string>
+   </property>
+   <property name="toolTip">
+    <string>Lancer le mailleur externe sur la géométrie du bief courant</string>
+   </property>
+  </action>
+  <action name="actionafficher_listings_simulation">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/gnome-stock-edit.png</normaloff>ressources/gnome-stock-edit.png</iconset>
+   </property>
+   <property name="text">
+    <string>afficher_listings_simulation</string>
+   </property>
+   <property name="toolTip">
+    <string>Aficher les listings de la simulation courante</string>
+   </property>
+  </action>
+  <action name="actionReseau">
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/reseau3_24.png</normaloff>ressources/reseau3_24.png</iconset>
+   </property>
+   <property name="text">
+    <string>Réseau</string>
+   </property>
+   <property name="toolTip">
+    <string>Ouvrir l'éditeur de la topologie du réseau</string>
+   </property>
+  </action>
+  <action name="actionGeometrie">
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/geometrie0.png</normaloff>ressources/geometrie0.png</iconset>
+   </property>
+   <property name="text">
+    <string>Géométrie</string>
+   </property>
+   <property name="toolTip">
+    <string>Ouvrir l'éditeur de géométrie</string>
+   </property>
+  </action>
+  <action name="actionMaillage">
+   <property name="icon">
+    <iconset>
+     <normaloff>ressources/mailles-50.png</normaloff>ressources/mailles-50.png</iconset>
+   </property>
+   <property name="text">
+    <string>Maillage</string>
+   </property>
+   <property name="toolTip">
+    <string>Afficher le maillage</string>
+   </property>
+  </action>
+  <action name="actionCond_Limites">
+   <property name="text">
+    <string>Cond. Limites</string>
+   </property>
+   <property name="toolTip">
+    <string>Ouvir l'éditeur des Conditions aux Limites &amp; Apports Ponctuels</string>
+   </property>
+   <property name="font">
+    <font/>
+   </property>
+  </action>
+  <action name="actionApp_Lat_raux">
+   <property name="text">
+    <string>App. Latéraux</string>
+   </property>
+   <property name="toolTip">
+    <string>Ouvrir l'éditeur des Apports Latéraux Distribués</string>
+   </property>
+  </action>
+  <action name="actionDeversements">
+   <property name="text">
+    <string>Déversements</string>
+   </property>
+   <property name="toolTip">
+    <string>Ouvrir l'éditeur des Déversements Latéraux</string>
+   </property>
+  </action>
+  <action name="actionTroncons">
+   <property name="text">
+    <string>Tronçons</string>
+   </property>
+   <property name="toolTip">
+    <string>Ouvrir l'éditeur des tronçons pour les frottements et Apports Latéraux</string>
+   </property>
+  </action>
+  <action name="actionFrottements">
+   <property name="text">
+    <string>Frottements</string>
+   </property>
+   <property name="toolTip">
+    <string>Ouvrir l'éditeur des frottements au fond</string>
+   </property>
+  </action>
+  <action name="actionOuvrages">
+   <property name="text">
+    <string>Ouvrages</string>
+   </property>
+   <property name="toolTip">
+    <string>Ouvrir l'éditeur des ouvrages (seuils, vannes, etc.), singularités et pompes</string>
+   </property>
+  </action>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>MainWindow</sender>
+   <signal>customContextMenuRequested(QPoint)</signal>
+   <receiver>MainWindow</receiver>
+   <slot>showMaximized()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>346</x>
+     <y>301</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>346</x>
+     <y>301</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
-- 
GitLab