git: Rename some directory.
No files matched your search
@@ -0,0 +1,289 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
|
||||
from PyQt5.QtWidgets import (
|
||||
QMainWindow, QApplication, QDesktopWidget,
|
||||
QMdiArea, QMdiSubWindow, QDialog,
|
||||
QPushButton, QLineEdit, QCheckBox,
|
||||
QTimeEdit, QSpinBox, QTextEdit,
|
||||
QRadioButton, QComboBox, QFileDialog,
|
||||
QMessageBox,
|
||||
)
|
||||
from PyQt5.QtCore import (
|
||||
QTime,
|
||||
)
|
||||
from PyQt5.uic import loadUi
|
||||
|
||||
class ASubWindow(QDialog):
|
||||
def __init__(self, name="", ui="dummy", parent=None):
|
||||
super(ASubWindow, self).__init__(parent=parent)
|
||||
self.ui = loadUi(
|
||||
os.path.join(os.path.dirname(__file__), "ui", f"{ui}.ui"),
|
||||
self
|
||||
)
|
||||
self.name = name
|
||||
self.parent = parent
|
||||
self.parent.sub_win_add(name, self)
|
||||
self.fixed_size()
|
||||
|
||||
def fixed_size(self):
|
||||
width = self.frameGeometry().width()
|
||||
height = self.frameGeometry().height()
|
||||
# self.setFixedSize(width, height)
|
||||
|
||||
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_text_edit_text(self, name:str, text:str):
|
||||
"""Set text of text edit component
|
||||
|
||||
Args:
|
||||
text_edit: The text edit component name
|
||||
text: The text
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
self.find(QTextEdit, name).setText(text)
|
||||
|
||||
def get_text_edit_text(self, name:str):
|
||||
"""Get text of text edit component
|
||||
|
||||
Args:
|
||||
text_edit: The text edit component name
|
||||
|
||||
Returns:
|
||||
Text
|
||||
"""
|
||||
return self.find(QTextEdit, name).toHtml()
|
||||
|
||||
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()
|
||||
|
||||
def set_push_button_checkable(self, name:str, checked:bool):
|
||||
"""Set value of push button component
|
||||
|
||||
Args:
|
||||
name: The push button component name
|
||||
value: The new value
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
self.find(QPushButton, name).setChecked(checked)
|
||||
|
||||
def get_push_button_checkable(self, name:str):
|
||||
"""Get status of push button
|
||||
|
||||
Args:
|
||||
name: The push button component name
|
||||
|
||||
Returns:
|
||||
The status of push button
|
||||
"""
|
||||
return self.find(QPushButton, name).isChecked()
|
||||
|
||||
def set_radio_button(self, name:str, checked:bool):
|
||||
"""Set value of radio button component
|
||||
|
||||
Args:
|
||||
name: The radio button component name
|
||||
checked: Checked
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
self.find(QRadioButton, name).setChecked(checked)
|
||||
|
||||
def get_radio_button(self, name:str):
|
||||
"""Get status of radio button
|
||||
|
||||
Args:
|
||||
name: The radio button component name
|
||||
|
||||
Returns:
|
||||
The status of radio button
|
||||
"""
|
||||
return self.find(QRadioButton, name).isChecked()
|
||||
|
||||
def combobox_add_item(self, name:str, item:str):
|
||||
"""Add item in combo box
|
||||
|
||||
Args:
|
||||
name: The combo box component name
|
||||
item: The item to add
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
self.find(QComboBox, name).addItem(item)
|
||||
|
||||
def set_combobox_text(self, name:str, item:str):
|
||||
"""Set current text of combo box
|
||||
|
||||
Args:
|
||||
name: The combo box component name
|
||||
item: The item to add
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
self.find(QComboBox, name).setCurrentText(item)
|
||||
|
||||
def get_combobox_text(self, name:str):
|
||||
"""Get current text of combo box
|
||||
|
||||
Args:
|
||||
name: The combo box component name
|
||||
|
||||
Returns:
|
||||
Current text
|
||||
"""
|
||||
return self.find(QComboBox, name).currentText()
|
||||
|
||||
|
||||
# Custom dialog
|
||||
def file_dialog(self, select_file=True, callback=lambda x: None):
|
||||
"""Open a new file dialog and send result to callback function
|
||||
|
||||
Args:
|
||||
select_file: Select a file if True, else select a dir
|
||||
callback: The callback function
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
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()
|
||||
callback(file_names)
|
||||
|
||||
def message_box(self, value,
|
||||
text: str,
|
||||
informative_text: str,
|
||||
window_title: str = "Warning"):
|
||||
msg = QMessageBox()
|
||||
msg.setIcon(QMessageBox.Warning)
|
||||
msg.setText(f"{value} : {text}")
|
||||
msg.setInformativeText(f"{informative_text}")
|
||||
msg.setWindowTitle(f"{window_title}")
|
||||
# msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
|
||||
_width = len(f"{text} : {value}")
|
||||
msg.setStyleSheet("QLabel{min-width:200 px; font-size: 13px;} QPushButton{width:10px; font-size: 12px};"
|
||||
"background-color: Ligthgray; color : gray; font-size: 8pt; color: #888a80;")
|
||||
msg.exec_()
|
||||
@@ -0,0 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from View.ASubWindow import ASubWindow
|
||||
|
||||
class AboutWindow(ASubWindow):
|
||||
def __init__(self, title="About", parent=None):
|
||||
super(AboutWindow, self).__init__(name=title, ui="about", parent=parent)
|
||||
self.ui.setWindowTitle(title)
|
||||
@@ -0,0 +1,82 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from View.ASubWindow import ASubWindow
|
||||
from Solver.Solvers import solver_type_list
|
||||
from Solver.GenericSolver import GenericSolver
|
||||
|
||||
from PyQt5.QtWidgets import (
|
||||
QPushButton,
|
||||
)
|
||||
|
||||
class ConfigureAddSolverWindow(ASubWindow):
|
||||
def __init__(self, data=None, title="Configuration : Add Solver", parent=None):
|
||||
super(ConfigureAddSolverWindow, self).__init__(
|
||||
name=title, ui="ConfigureAddSolverDialog", parent=parent
|
||||
)
|
||||
self.ui.setWindowTitle(title)
|
||||
|
||||
# Combo box item
|
||||
for solver in solver_type_list:
|
||||
self.combobox_add_item("comboBox_solver", solver)
|
||||
|
||||
# Data to return
|
||||
self.data = data
|
||||
if not self.data is None:
|
||||
self.copy_data()
|
||||
|
||||
self.connect()
|
||||
|
||||
def copy_data(self):
|
||||
self.set_combobox_text("comboBox_solver", self.data.get_type())
|
||||
self.set_line_edit_text("lineEdit_name", self.data.name)
|
||||
self.set_line_edit_text("lineEdit_description", self.data.description)
|
||||
self.set_line_edit_text("lineEdit_input", self.data.path_input)
|
||||
self.set_line_edit_text("lineEdit_input_cmd", self.data.cmd_input)
|
||||
self.set_line_edit_text("lineEdit_solver", self.data.path_solver)
|
||||
self.set_line_edit_text("lineEdit_solver_cmd", self.data.cmd_solver)
|
||||
self.set_line_edit_text("lineEdit_output", self.data.path_output)
|
||||
self.set_line_edit_text("lineEdit_output_cmd", self.data.cmd_output)
|
||||
|
||||
def connect(self):
|
||||
# File button
|
||||
buttons = {
|
||||
"pushButton_input": (lambda: self.file_dialog(
|
||||
select_file = True,
|
||||
callback = lambda f: self.set_line_edit_text("lineEdit_input", f[0])
|
||||
)),
|
||||
"pushButton_solver": (lambda: self.file_dialog(
|
||||
select_file = True,
|
||||
callback = lambda f: self.set_line_edit_text("lineEdit_solver", f[0])
|
||||
)),
|
||||
"pushButton_output": (lambda: self.file_dialog(
|
||||
select_file = True,
|
||||
callback = lambda f: self.set_line_edit_text("lineEdit_output", f[0])
|
||||
)),
|
||||
}
|
||||
|
||||
for button in buttons:
|
||||
self.find(QPushButton, button).clicked.connect(buttons[button])
|
||||
|
||||
def accept(self):
|
||||
if self.get_line_edit_text("lineEdit_name") == "":
|
||||
self.message_box(
|
||||
"Add solver", "A solver need a name",
|
||||
"Please give a name to your solver"
|
||||
)
|
||||
else:
|
||||
self.data = GenericSolver(self.get_line_edit_text("lineEdit_name"))
|
||||
self.data.set_description(self.get_line_edit_text("lineEdit_description"))
|
||||
self.data.set_input(
|
||||
self.get_line_edit_text("lineEdit_input"),
|
||||
self.get_line_edit_text("lineEdit_input_cmd")
|
||||
)
|
||||
self.data.set_solver(
|
||||
self.get_line_edit_text("lineEdit_solver"),
|
||||
self.get_line_edit_text("lineEdit_solver_cmd")
|
||||
)
|
||||
self.data.set_output(
|
||||
self.get_line_edit_text("lineEdit_output"),
|
||||
self.get_line_edit_text("lineEdit_output_cmd")
|
||||
)
|
||||
|
||||
self.done(True)
|
||||
@@ -0,0 +1,171 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from config import Config
|
||||
from View.ASubWindow import ASubWindow
|
||||
from View.ListedSubWindow import ListedSubWindow
|
||||
from View.ConfigureAddSolverWindow import ConfigureAddSolverWindow
|
||||
|
||||
from PyQt5.QtCore import (
|
||||
Qt, QVariant, QAbstractTableModel,
|
||||
)
|
||||
|
||||
from PyQt5.QtWidgets import (
|
||||
QDialogButtonBox, QPushButton, QLineEdit,
|
||||
QFileDialog, QTableView, QAbstractItemView,
|
||||
QComboBox,
|
||||
)
|
||||
|
||||
|
||||
class SolverTableModel(QAbstractTableModel):
|
||||
def __init__(self, headers=[], rows=[]):
|
||||
super(QAbstractTableModel, self).__init__()
|
||||
self.rows = rows
|
||||
self.headers = headers
|
||||
|
||||
def rowCount(self, parent):
|
||||
return len(self.rows)
|
||||
|
||||
def columnCount(self, parent):
|
||||
return len(self.headers)
|
||||
|
||||
def data(self, index, role):
|
||||
if role != Qt.ItemDataRole.DisplayRole:
|
||||
return QVariant()
|
||||
|
||||
return self.rows[index.row()][self.headers[index.column()]]
|
||||
|
||||
def headerData(self, section, orientation, role):
|
||||
if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal:
|
||||
return self.headers[section].capitalize()
|
||||
|
||||
if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Vertical:
|
||||
return section
|
||||
|
||||
return QVariant()
|
||||
|
||||
def removeRow(self, index):
|
||||
del self.rows[index.row()]
|
||||
self.layoutChanged.emit()
|
||||
|
||||
def add_solver(self, solver):
|
||||
self.rows.append(solver)
|
||||
self.layoutChanged.emit()
|
||||
|
||||
def change_solver(self, solver, index):
|
||||
self.rows[index.row()] = solver
|
||||
self.layoutChanged.emit()
|
||||
|
||||
|
||||
class ConfigureWindow(ASubWindow, ListedSubWindow):
|
||||
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
|
||||
|
||||
# Solver
|
||||
self.solver_table_model = SolverTableModel(
|
||||
headers = ["name", "type", "description"],
|
||||
rows = conf.solvers.copy()
|
||||
)
|
||||
self.find(QTableView, "tableView_solver").setModel(self.solver_table_model)
|
||||
self.find(QTableView, "tableView_solver")\
|
||||
.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||
|
||||
# Mailleur
|
||||
self.set_line_edit_text("lineEdit_mailleur", self.conf.mailleur)
|
||||
|
||||
# Const
|
||||
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.find(QTableView, "tableView_solver").resizeColumnsToContents()
|
||||
self.connect()
|
||||
|
||||
# Language
|
||||
languages = Config.languages()
|
||||
for lang in languages:
|
||||
self.combobox_add_item("comboBox_language", lang)
|
||||
if self.conf.lang == languages[lang]:
|
||||
self.set_combobox_text("comboBox_language", lang)
|
||||
|
||||
def connect(self):
|
||||
buttons = {
|
||||
"pushButton_solver_add": self.add_solver,
|
||||
"pushButton_solver_del": self.remove_solver,
|
||||
"pushButton_solver_edit": self.edit_solver,
|
||||
"pushButton_backup_path": lambda: self.file_dialog(
|
||||
select_file = False,
|
||||
callback = lambda f: self.set_line_edit_text(
|
||||
"lineEdit_backup_path", f[0]
|
||||
)
|
||||
),
|
||||
"pushButton_mailleur" : lambda: self.file_dialog(
|
||||
select_file = True,
|
||||
callback = lambda f: self.set_line_edit_text(
|
||||
"lineEdit_mailleur", f[0]
|
||||
)
|
||||
),
|
||||
}
|
||||
|
||||
for button in buttons:
|
||||
self.find(QPushButton, button).clicked.connect(buttons[button])
|
||||
|
||||
def accept(self):
|
||||
# Solvers
|
||||
self.conf.solvers = self.solver_table_model.rows.copy()
|
||||
|
||||
# Mailleur
|
||||
self.conf.mailleur = self.get_line_edit_text("lineEdit_mailleur")
|
||||
|
||||
# Const
|
||||
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")
|
||||
|
||||
# Language
|
||||
self.conf.lang = Config.languages()[self.get_combobox_text("comboBox_language")]
|
||||
|
||||
self.end()
|
||||
|
||||
def reject(self):
|
||||
# Nothing todo
|
||||
self.end()
|
||||
|
||||
def end(self):
|
||||
self.conf.save()
|
||||
self.close()
|
||||
|
||||
def edit_solver(self):
|
||||
indices = self.find(QTableView, "tableView_solver").selectionModel().selectedRows()
|
||||
for index in indices:
|
||||
self.edit_solver = ConfigureAddSolverWindow(
|
||||
data=self.solver_table_model.rows[index.row()],
|
||||
parent=self
|
||||
)
|
||||
if self.edit_solver.exec_():
|
||||
self.solver_table_model.change_solver(self.edit_solver.data, index)
|
||||
|
||||
def add_solver(self):
|
||||
dialog_solver = ConfigureAddSolverWindow(parent=self)
|
||||
if dialog_solver.exec_():
|
||||
self.solver_table_model.add_solver(dialog_solver.data)
|
||||
|
||||
def remove_solver(self):
|
||||
indices = self.find(QTableView, "tableView_solver").selectionModel().selectedRows()
|
||||
for index in sorted(indices):
|
||||
self.solver_table_model.removeRow(index)
|
||||
@@ -0,0 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from View.ASubWindow import ASubWindow
|
||||
|
||||
class DummyWindow(ASubWindow):
|
||||
def __init__(self, title="Dummy", parent=None):
|
||||
super(DummyWindow, self).__init__(name=title, ui="dummy", parent=parent)
|
||||
self.ui.setWindowTitle(title)
|
||||
@@ -0,0 +1,28 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
class ListedSubWindow(object):
|
||||
def __init__(self):
|
||||
super(ListedSubWindow, self).__init__()
|
||||
self.sub_win_cnt = 0
|
||||
self.sub_win_list = []
|
||||
|
||||
def sub_win_count(self):
|
||||
return self.sub_win_cnt
|
||||
|
||||
def sub_win_list(self):
|
||||
return self.sub_win_list.copy()
|
||||
|
||||
def sub_win_add(self, name, win):
|
||||
self.sub_win_list.append((name, win))
|
||||
self.sub_win_cnt += 1
|
||||
print(f"+ {name} ({self.sub_win_cnt})")
|
||||
|
||||
def sub_win_del(self, name):
|
||||
self.sub_win_list = list(
|
||||
filter(
|
||||
lambda x: x[0] != name,
|
||||
self.sub_win_list
|
||||
)
|
||||
)
|
||||
self.sub_win_cnt = len(self.sub_win_list)
|
||||
print(f"- {name} ({self.sub_win_cnt})")
|
||||
@@ -0,0 +1,304 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
from queue import Queue
|
||||
|
||||
from PyQt5 import QtGui
|
||||
from PyQt5.QtCore import (
|
||||
QTranslator, QEvent
|
||||
)
|
||||
from PyQt5.QtWidgets import (
|
||||
QMainWindow, QApplication, QAction,
|
||||
QFileDialog,
|
||||
)
|
||||
from PyQt5.uic import loadUi
|
||||
|
||||
from View.ListedSubWindow import ListedSubWindow
|
||||
from View.DummyWindow import DummyWindow
|
||||
from View.ConfigureWindow import ConfigureWindow
|
||||
from View.NewStudyWindow import NewStudyWindow
|
||||
from View.NetworkWindow import NetworkWindow
|
||||
from View.AboutWindow import AboutWindow
|
||||
|
||||
from Model.Study import Study
|
||||
|
||||
no_model_action = [
|
||||
"action_menu_new", "action_menu_open", "action_menu_import_mage",
|
||||
"action_menu_import_rubarbe", "action_toolBar_open",
|
||||
]
|
||||
|
||||
model_action = [
|
||||
"action_menu_close", "action_menu_edit", "action_menu_save",
|
||||
"action_menu_save_as", "action_toolBar_close", "action_toolBar_save",
|
||||
]
|
||||
|
||||
other_model_action = [
|
||||
"action_toolBar_run_solver", "action_toolBar_kill_solver"
|
||||
]
|
||||
|
||||
define_model_action = [
|
||||
"action_toolBar_network", "action_toolBar_geometry",
|
||||
"action_toolBar_mesh", "action_toolBar_run_meshing_tool",
|
||||
"action_toolBar_boundary_cond", "action_toolBar_lateral_contrib",
|
||||
"action_toolBar_spills", "action_toolBar_sections",
|
||||
"action_toolBar_frictions", "action_toolBar_building",
|
||||
]
|
||||
|
||||
action = (
|
||||
no_model_action + model_action + define_model_action
|
||||
)
|
||||
|
||||
class ApplicationWindow(QMainWindow, ListedSubWindow):
|
||||
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"),
|
||||
self
|
||||
)
|
||||
|
||||
self.init_callback()
|
||||
self.default_style()
|
||||
|
||||
self.trans = QTranslator(self)
|
||||
#self.ui.retranslateUi()
|
||||
|
||||
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.findChild(QAction, action).setEnabled(enable)
|
||||
|
||||
def init_callback(self):
|
||||
"""Connect action to callback function
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
actions = {
|
||||
# Menu action
|
||||
"action_menu_config": self.open_configure,
|
||||
"action_menu_new": self.open_new_study,
|
||||
"action_menu_edit": self.open_edit_study,
|
||||
"action_menu_open": self.open_model,
|
||||
"action_menu_save": self.save_study,
|
||||
"action_menu_save_as": self.save_as_study,
|
||||
## Help
|
||||
"action_menu_about": self.open_about,
|
||||
# ToolBar action
|
||||
"action_toolBar_quit": self.close,
|
||||
"action_toolBar_open": self.open_model,
|
||||
"action_toolBar_save": self.save_study,
|
||||
"action_toolBar_close": self.close_model,
|
||||
"action_toolBar_run_solver": self.open_dummy,
|
||||
"action_toolBar_kill_solver": self.open_dummy,
|
||||
"action_toolBar_listing": self.open_dummy,
|
||||
## Current actions
|
||||
"action_toolBar_network": self.open_network,
|
||||
"action_toolBar_geometry": lambda: self.open_dummy("Geomerty"),
|
||||
"action_toolBar_mesh": lambda: self.open_dummy("Mesh"),
|
||||
"action_toolBar_run_meshing_tool": lambda: self.open_dummy("Lancement mailleur externe"),
|
||||
"action_toolBar_boundary_cond": lambda: self.open_dummy("Condition Limites"),
|
||||
"action_toolBar_lateral_contrib": lambda: self.open_dummy("Apport Lateraux"),
|
||||
"action_toolBar_spills": lambda: self.open_dummy("Deversement"),
|
||||
"action_toolBar_sections": lambda: self.open_dummy("Tronçons"),
|
||||
"action_toolBar_frictions": lambda: self.open_dummy("Frottements"),
|
||||
"action_toolBar_building": lambda: self.open_dummy("Ouvrages"),
|
||||
}
|
||||
|
||||
for action in actions:
|
||||
self.findChild(QAction, action)\
|
||||
.triggered.connect(actions[action])
|
||||
# action.triggered.connect(actions[action])
|
||||
|
||||
|
||||
def changeEvent(self, event):
|
||||
if event.type() == QEvent.LanguageChange:
|
||||
self.retranslateUi()
|
||||
super(ApplicationWindow, self).changeEvent(event)
|
||||
|
||||
def default_style(self):
|
||||
"""Set default window style
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
self.update_enable_action()
|
||||
# Maximise window
|
||||
self.showMaximized()
|
||||
|
||||
#########
|
||||
# MODEL #
|
||||
#########
|
||||
|
||||
def get_model(self):
|
||||
return self.model
|
||||
|
||||
def set_model(self, model):
|
||||
self.model = model
|
||||
self.update_enable_action()
|
||||
|
||||
def close_model(self):
|
||||
self.model = None
|
||||
self.update_enable_action()
|
||||
|
||||
def update_enable_action(self):
|
||||
"""Update status of action componante
|
||||
|
||||
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)
|
||||
|
||||
############
|
||||
# FEATURES #
|
||||
############
|
||||
|
||||
def save_study(self):
|
||||
"""Save current study
|
||||
|
||||
Save current study, if study as no associate file, open a
|
||||
file dialog.
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
if self.model.filename == "":
|
||||
file_name, _ = QFileDialog.getSaveFileName(
|
||||
self, "Save File",
|
||||
"", "Pamhyr(*.pkl)")
|
||||
if file_name[-4:] == ".pkl":
|
||||
self.model.filename = file_name
|
||||
else:
|
||||
self.model.filename = file_name + ".pkl"
|
||||
|
||||
self.model.save()
|
||||
|
||||
def save_as_study(self):
|
||||
"""Save current study as new file
|
||||
|
||||
Save current study as new file, if study as no associate file,
|
||||
open a file dialog.
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
file_name, _ = QFileDialog.getSaveFileName(
|
||||
self, "Save File",
|
||||
"", "Pamhyr(*.pkl)")
|
||||
if file_name[-4:] == ".pkl":
|
||||
self.model.filename = file_name
|
||||
else:
|
||||
self.model.filename = file_name + ".pkl"
|
||||
|
||||
self.model.save()
|
||||
|
||||
#############
|
||||
# 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()
|
||||
|
||||
def open_model(self):
|
||||
"""Open file dialog to select saved model
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
if self.model is None:
|
||||
dialog = QFileDialog(self)
|
||||
dialog.setFileMode(QFileDialog.FileMode.ExistingFile)
|
||||
dialog.setDefaultSuffix(".pkl")
|
||||
#dialog.setFilter(dialog.filter() | QtCore.QDir.Hidden)
|
||||
dialog.setNameFilters(['PamHyr (*.pkl)'])
|
||||
|
||||
if dialog.exec_():
|
||||
file_name = dialog.selectedFiles()
|
||||
self.set_model(Study.open(file_name[0]))
|
||||
print(f"[MainWindow] Open Study : {self.model.name}")
|
||||
|
||||
def open_new_study(self):
|
||||
"""Open dialog to set new study
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
if self.model is None:
|
||||
self.new_study = NewStudyWindow(parent=self)
|
||||
self.new_study.show()
|
||||
|
||||
def open_edit_study(self):
|
||||
"""Open dialog to set new study
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
if not self.model is None:
|
||||
self.new_study = NewStudyWindow(study=self.model, parent=self)
|
||||
self.new_study.show()
|
||||
|
||||
def open_network(self):
|
||||
"""Open network dialog
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
if not self.model is None:
|
||||
self.network = NetworkWindow(model=self.model, parent=self)
|
||||
self.network.show()
|
||||
|
||||
# TODO: Delete me !
|
||||
###############
|
||||
# DUMMY STUFF #
|
||||
###############
|
||||
|
||||
def open_dummy(self, title="Dummy"):
|
||||
self.dummy = DummyWindow(
|
||||
title=title if type(title) is str else "Dummy",
|
||||
parent=self
|
||||
)
|
||||
self.dummy.show()
|
||||
@@ -0,0 +1,701 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import math
|
||||
|
||||
from PyQt5.QtCore import (
|
||||
Qt, QPoint, QPointF, QSizeF, QLineF, QRectF,
|
||||
pyqtSlot, pyqtSignal,
|
||||
)
|
||||
from PyQt5.QtGui import (
|
||||
QPainter, QColor, QBrush, QPen, QPainterPath,
|
||||
QPolygonF,
|
||||
)
|
||||
from PyQt5.QtWidgets import (
|
||||
QApplication,QGraphicsScene, QGraphicsView,
|
||||
QGraphicsItem, QGraphicsTextItem,
|
||||
)
|
||||
|
||||
from Model.Network.Node import Node
|
||||
from Model.Network.Edge import Edge
|
||||
from Model.Network.Graph import Graph
|
||||
|
||||
class NodeItem(QGraphicsItem):
|
||||
Type = QGraphicsItem.UserType + 1
|
||||
|
||||
def __init__(self, node, graph_widget):
|
||||
super(NodeItem, self).__init__()
|
||||
|
||||
self.node = node
|
||||
self.setPos(QPointF(self.node.pos.x, self.node.pos.y))
|
||||
|
||||
self.graph = graph_widget
|
||||
|
||||
self.setFlag(QGraphicsItem.ItemIsMovable)
|
||||
self.setFlag(QGraphicsItem.ItemSendsGeometryChanges)
|
||||
self.setCacheMode(QGraphicsItem.DeviceCoordinateCache)
|
||||
self.setZValue(1)
|
||||
|
||||
def type(self):
|
||||
return NodeItem.Type
|
||||
|
||||
def boundingRect(self):
|
||||
adjust = 2.0
|
||||
return QRectF(-10 - adjust, -10 - adjust, 20 + adjust, 20 + adjust)
|
||||
|
||||
def shape(self):
|
||||
path = QPainterPath()
|
||||
path.addEllipse(-10, -10, 20, 20)
|
||||
return path
|
||||
|
||||
def paint(self, painter, option, widget):
|
||||
painter.setPen(Qt.NoPen)
|
||||
|
||||
# Select color in function of node position in graph and
|
||||
# status
|
||||
color = Qt.yellow
|
||||
if self.graph.selected_new_edge_src_node() == self:
|
||||
color = Qt.darkRed
|
||||
elif self.graph.selected_item() == self:
|
||||
color = Qt.red
|
||||
elif not self.graph.graph.is_enable_node(self.node):
|
||||
color = Qt.darkGray
|
||||
elif self.graph.graph.is_upstream_node(self.node):
|
||||
color = Qt.blue
|
||||
elif self.graph.graph.is_downstream_node(self.node):
|
||||
color = Qt.green
|
||||
|
||||
painter.setBrush(QBrush(color))
|
||||
painter.drawEllipse(-10, -10, 20, 20)
|
||||
|
||||
def itemChange(self, change, value):
|
||||
if change == QGraphicsItem.ItemPositionHasChanged:
|
||||
self.graph.node_change_position(value, self)
|
||||
|
||||
self.graph.update_edges(self)
|
||||
return super(NodeItem, self).itemChange(change, value)
|
||||
|
||||
def mousePressEvent(self, event):
|
||||
self.update()
|
||||
super(NodeItem, self).mousePressEvent(event)
|
||||
|
||||
def mouseReleaseEvent(self, event):
|
||||
self.update()
|
||||
super(NodeItem, self).mouseReleaseEvent(event)
|
||||
|
||||
class EdgeItem(QGraphicsItem):
|
||||
Type = QGraphicsItem.UserType + 2
|
||||
|
||||
def __init__(self, src_node_item, dest_node_item,
|
||||
edge, graph_widget):
|
||||
super(EdgeItem, self).__init__()
|
||||
|
||||
self.src_node = src_node_item
|
||||
self.dest_node = dest_node_item
|
||||
self.edge = edge
|
||||
|
||||
self.graph = graph_widget
|
||||
|
||||
self.setAcceptedMouseButtons(Qt.NoButton)
|
||||
|
||||
def type(self):
|
||||
return Edge.Type
|
||||
|
||||
def boundingRect(self):
|
||||
# Rectangle of edge for display update
|
||||
pen_width = 2.0
|
||||
extra = (pen_width + 5) / 2.0
|
||||
|
||||
return QRectF(
|
||||
self.src_node.pos(),
|
||||
QSizeF(
|
||||
self.dest_node.pos().x() - self.src_node.pos().x(),
|
||||
self.dest_node.pos().y() - self.src_node.pos().y()
|
||||
)
|
||||
).normalized().adjusted(-extra, -extra, extra, extra)
|
||||
|
||||
def shape(self):
|
||||
# Shape around edge for mouse selection
|
||||
vec = self.dest_node.pos() - self.src_node.pos()
|
||||
vec = vec * (5 / math.sqrt(QPointF.dotProduct(vec, vec)))
|
||||
extra = QPointF(vec.y(), -vec.x())
|
||||
|
||||
result = QPainterPath(self.src_node.pos() - vec + extra)
|
||||
result.lineTo(self.src_node.pos() - vec - extra)
|
||||
result.lineTo(self.dest_node.pos() + vec - extra)
|
||||
result.lineTo(self.dest_node.pos() + vec + extra)
|
||||
result.closeSubpath()
|
||||
|
||||
return result
|
||||
|
||||
def paint(self, painter, option, widget):
|
||||
# Draw shape of the edge
|
||||
# color = QColor(Qt.white)
|
||||
# color.setAlpha(128)
|
||||
# painter.setBrush(color)
|
||||
# painter.drawPath(self.shape())
|
||||
|
||||
line = QLineF(self.src_node.pos(), self.dest_node.pos())
|
||||
if line.length() == 0.0:
|
||||
return
|
||||
|
||||
# Select color
|
||||
color = Qt.blue
|
||||
if self.graph.selected_item() == self:
|
||||
color = Qt.red
|
||||
elif self.graph.current_edge() == self:
|
||||
color = Qt.darkBlue
|
||||
elif not self.graph.graph.is_enable_edge(self.edge):
|
||||
color = Qt.darkGray
|
||||
|
||||
painter.setPen(QPen(color, 2, Qt.SolidLine, Qt.RoundCap,
|
||||
Qt.RoundJoin))
|
||||
# Draw the line
|
||||
painter.drawLine(line)
|
||||
|
||||
line_center = QPointF(
|
||||
(self.src_node.pos().x() + self.dest_node.pos().x()) / 2,
|
||||
(self.src_node.pos().y() + self.dest_node.pos().y()) / 2,
|
||||
)
|
||||
|
||||
# Draw the arrows
|
||||
brush = QBrush()
|
||||
brush.setColor(color)
|
||||
brush.setStyle(Qt.SolidPattern)
|
||||
|
||||
angle = math.acos(line.dx() / line.length())
|
||||
if line.dy() >= 0:
|
||||
angle = (math.pi * 2.0) - angle
|
||||
|
||||
size = 10.0
|
||||
arrow_p1 = line_center + QPointF(
|
||||
math.sin(angle - math.pi / 3) * size,
|
||||
math.cos(angle - math.pi / 3) * size
|
||||
)
|
||||
arrow_p2 = line_center + QPointF(
|
||||
math.sin(angle - math.pi + math.pi / 3) * size,
|
||||
math.cos(angle - math.pi + math.pi / 3) * size
|
||||
)
|
||||
poly = QPolygonF([line_center, arrow_p1, arrow_p2])
|
||||
path = QPainterPath()
|
||||
path.addPolygon(poly)
|
||||
|
||||
painter.drawPolygon(poly)
|
||||
painter.fillPath(path, brush)
|
||||
|
||||
class NodeText(QGraphicsTextItem):
|
||||
def __init__(self, node_item):
|
||||
super(NodeText, self).__init__()
|
||||
|
||||
self.item = node_item
|
||||
self.setPlainText(self.item.node.name)
|
||||
self.setDefaultTextColor(Qt.black)
|
||||
self.set_custom_pos(self.item.pos())
|
||||
self.setZValue(2)
|
||||
|
||||
def set_custom_pos(self, pos):
|
||||
x = pos.x()
|
||||
y = pos.y() - 42 # Dont panic! The answer is 42
|
||||
|
||||
self.setPos(QPointF(x,y))
|
||||
|
||||
def paint(self, painter, option, widget):
|
||||
color = QColor(Qt.white)
|
||||
color.setAlpha(128)
|
||||
|
||||
# Draw text background
|
||||
painter.setBrush(color)
|
||||
painter.drawRect(self.boundingRect())
|
||||
|
||||
# Draw text
|
||||
super(NodeText, self).paint(painter, option, widget)
|
||||
|
||||
def rename(self):
|
||||
# Update the node text
|
||||
self.setPlainText(self.item.node.name)
|
||||
|
||||
class NewEdgeLine(QGraphicsItem):
|
||||
def __init__(self, src, dest):
|
||||
super(NewEdgeLine, self).__init__()
|
||||
|
||||
self.src = src
|
||||
self.dest = dest
|
||||
|
||||
def boundingRect(self):
|
||||
pen_width = 2.0
|
||||
extra = (pen_width + 5) / 2.0
|
||||
|
||||
return QRectF(
|
||||
self.src,
|
||||
QSizeF(
|
||||
self.dest.x() - self.src.x(),
|
||||
self.dest.y() - self.src.y()
|
||||
)
|
||||
).normalized().adjusted(-extra, -extra, extra, extra)
|
||||
|
||||
def paint(self, painter, option, widget):
|
||||
line = QLineF(self.src, self.dest)
|
||||
if line.length() == 0.0:
|
||||
return
|
||||
|
||||
color = Qt.darkGray
|
||||
painter.setPen(QPen(color, 2, Qt.SolidLine, Qt.RoundCap,
|
||||
Qt.RoundJoin))
|
||||
painter.drawLine(line)
|
||||
|
||||
class GraphWidget(QGraphicsView):
|
||||
changeEdge = pyqtSignal(object)
|
||||
changeNode = pyqtSignal(object)
|
||||
|
||||
def __init__(self, graph, parent=None):
|
||||
super(GraphWidget, self).__init__(parent=parent)
|
||||
|
||||
self.timerId = 0
|
||||
self.parent = parent
|
||||
self._state = "move"
|
||||
|
||||
self._selected_item = None
|
||||
self._selected_new_edge_src_node = None
|
||||
self._current_edge = None
|
||||
self.tmp_line = None
|
||||
|
||||
self.node_items = []
|
||||
self.edge_items = []
|
||||
self.texts = {}
|
||||
|
||||
self.m_origin_x = 0.0
|
||||
self.m_origin_y = 0.0
|
||||
self.clicked = False
|
||||
|
||||
scene = QGraphicsScene(self)
|
||||
scene.setItemIndexMethod(QGraphicsScene.NoIndex)
|
||||
scene.setSceneRect(0, 0, 2000, 2000)
|
||||
self.setScene(scene)
|
||||
self.setCacheMode(QGraphicsView.CacheBackground)
|
||||
self.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
|
||||
self.setRenderHint(QPainter.Antialiasing)
|
||||
self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
|
||||
self.setResizeAnchor(QGraphicsView.AnchorViewCenter)
|
||||
|
||||
self.graph = graph
|
||||
|
||||
self.scale(1, 1)
|
||||
self.previousScale = 1
|
||||
self.setMinimumSize(400, 400)
|
||||
|
||||
self.create_items()
|
||||
|
||||
def create_items(self):
|
||||
"""Create all items and draw its
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
self.node_items = []
|
||||
self.edge_items = []
|
||||
self.texts = {}
|
||||
|
||||
for node in self.graph.nodes():
|
||||
inode = NodeItem(node, self)
|
||||
self.texts[inode] = NodeText(inode)
|
||||
self.scene().addItem(self.texts[inode])
|
||||
self.scene().addItem(inode)
|
||||
self.node_items.append(inode)
|
||||
|
||||
for edge in self.graph.edges():
|
||||
n1 = list(
|
||||
filter(
|
||||
lambda n: n.node.name == edge.node1.name,
|
||||
self.node_items
|
||||
)
|
||||
)
|
||||
|
||||
n2 = list(
|
||||
filter(
|
||||
lambda n: n.node.name == edge.node2.name,
|
||||
self.node_items
|
||||
)
|
||||
)
|
||||
|
||||
iedge = EdgeItem(n1[0], n2[0], edge, self)
|
||||
self.scene().addItem(iedge)
|
||||
self.edge_items.append(iedge)
|
||||
|
||||
def state(self, status):
|
||||
"""Set the current status of draw widget
|
||||
|
||||
Set the current status of draw widget, like "move", "add" or
|
||||
"del"
|
||||
|
||||
Args:
|
||||
status: String of current status
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
self._state = status
|
||||
|
||||
def add_node(self, pos):
|
||||
"""Create a new node in graph and draw it
|
||||
|
||||
Args:
|
||||
pos: The position of new node
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
node = self.graph.add_node(pos.x(), pos.y())
|
||||
inode = NodeItem(node, self)
|
||||
self.scene().addItem(inode)
|
||||
self.node_items.append(inode)
|
||||
self.texts[inode] = NodeText(inode)
|
||||
self.scene().addItem(self.texts[inode])
|
||||
|
||||
self.changeNode.emit(self.sender())
|
||||
|
||||
def del_node(self, item):
|
||||
"""Delete a node and update display
|
||||
|
||||
Args:
|
||||
item: The node item to delete
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
node = item.node
|
||||
edges = list(
|
||||
filter(
|
||||
lambda ie: (ie.edge.node1 == node or
|
||||
ie.edge.node2 == node),
|
||||
self.edge_items
|
||||
)
|
||||
)
|
||||
|
||||
self.set_selected_item(None)
|
||||
|
||||
for edge in edges:
|
||||
self.graph.remove_edge(edge.edge.name)
|
||||
|
||||
self.graph.remove_node(node.name)
|
||||
|
||||
self.scene().clear()
|
||||
self.create_items()
|
||||
self.changeNode.emit(self.sender())
|
||||
self.changeEdge.emit(self.sender())
|
||||
|
||||
def rename_nodes(self):
|
||||
"""Update all nodes item name in scene
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
for i in self.texts:
|
||||
if type(i) == NodeItem:
|
||||
self.texts[i].rename()
|
||||
|
||||
def display_update(self):
|
||||
"""Clear the scene and redraw it
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
self.scene().clear()
|
||||
self.create_items()
|
||||
|
||||
def add_edge(self, node1, node2):
|
||||
"""Create a new edge in graph and draw it
|
||||
|
||||
Args:
|
||||
node1: The source node
|
||||
node2: The destination node
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
if node1 == node2:
|
||||
return
|
||||
|
||||
edge = self.graph.add_edge(node1.node, node2.node)
|
||||
self.set_selected_item(None)
|
||||
self.set_selected_new_edge_src_node(None)
|
||||
# Reset the temporary line
|
||||
self.tmp_line = None
|
||||
|
||||
# Clear all scene and redraw it
|
||||
self.scene().clear()
|
||||
self.create_items()
|
||||
|
||||
self.changeEdge.emit(self.sender())
|
||||
|
||||
def del_edge(self, item):
|
||||
"""Delete an edge and update display
|
||||
|
||||
Args:
|
||||
item: The edge item to delete
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
edge = item.edge
|
||||
self.graph.remove_edge(edge.name)
|
||||
|
||||
# Clear all scene and redraw it
|
||||
self.scene().clear()
|
||||
self.create_items()
|
||||
|
||||
self.changeNode.emit(self.sender())
|
||||
self.changeEdge.emit(self.sender())
|
||||
|
||||
|
||||
def update_edges(self, node):
|
||||
"""Update display of all edges linked with the node
|
||||
|
||||
Args:
|
||||
node: The node item linked with edges to update
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
edges = list(
|
||||
filter(
|
||||
lambda ie: (ie.edge.node1 == node.node or
|
||||
ie.edge.node2 == node.node),
|
||||
self.edge_items
|
||||
)
|
||||
)
|
||||
|
||||
for edge in edges:
|
||||
edge.update()
|
||||
|
||||
def node_change_position(self, pos, node):
|
||||
"""Update node position and node text position
|
||||
|
||||
Args:
|
||||
pos: The new position
|
||||
node: The node item
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
node.node.setPos(pos.x(), pos.y())
|
||||
self.texts[node].set_custom_pos(pos)
|
||||
self.texts[node].update()
|
||||
|
||||
def selected_item(self):
|
||||
"""Current selected item
|
||||
|
||||
Returns:
|
||||
Item if item ar selected, otherelse None
|
||||
"""
|
||||
return self._selected_item
|
||||
|
||||
def set_selected_item(self, item):
|
||||
"""Set current selected item
|
||||
|
||||
Args:
|
||||
item: The new item to select
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
previous_item = self._selected_item
|
||||
self._selected_item = item
|
||||
|
||||
if previous_item:
|
||||
previous_item.update()
|
||||
|
||||
if item:
|
||||
item.update()
|
||||
|
||||
def selected_new_edge_src_node(self):
|
||||
"""The current node item selected to add new edge
|
||||
|
||||
Returns:
|
||||
Item if item ar selected, otherelse None
|
||||
"""
|
||||
return self._selected_new_edge_src_node
|
||||
|
||||
def set_selected_new_edge_src_node(self, node):
|
||||
"""Set the current node item selected to add new edge
|
||||
|
||||
Args:
|
||||
node: The new node to select
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
previous_node = self._selected_new_edge_src_node
|
||||
self._selected_new_edge_src_node = node
|
||||
|
||||
if previous_node:
|
||||
previous_node.update()
|
||||
|
||||
def current_edge(self):
|
||||
"""The current selected edge
|
||||
|
||||
Returns:
|
||||
Item if edge are selected, otherelse None
|
||||
"""
|
||||
return self._current_edge
|
||||
|
||||
def setCurrentEdge(self, edge):
|
||||
"""Set the current edge item selected
|
||||
|
||||
Args:
|
||||
edge: The new edge to select
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
previous_edge = self._selected_new_edge_src_node
|
||||
self._current_edge = edge
|
||||
|
||||
if previous_edge:
|
||||
previous_edge.update()
|
||||
|
||||
def reset_selection(self):
|
||||
"""Reset all the selected items
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
self.set_selected_new_edge_src_node(None)
|
||||
if self.tmp_line is not None:
|
||||
self.tmp_line = None
|
||||
self.scene().clear()
|
||||
self.create_items()
|
||||
|
||||
def keyPressEvent(self, event):
|
||||
key = event.key()
|
||||
|
||||
if key == Qt.Key_Plus:
|
||||
self.scaleView(1.2)
|
||||
elif key == Qt.Key_Minus:
|
||||
self.scaleView(1 / 1.2)
|
||||
elif key == Qt.Key_Escape:
|
||||
self.reset_selection()
|
||||
else:
|
||||
super(GraphWidget, self).keyPressEvent(event)
|
||||
|
||||
def drawBackground(self, painter, rect):
|
||||
sceneRect = self.sceneRect()
|
||||
painter.fillRect(
|
||||
rect.intersected(sceneRect),
|
||||
QBrush(Qt.lightGray)
|
||||
)
|
||||
painter.setBrush(Qt.NoBrush)
|
||||
painter.drawRect(sceneRect)
|
||||
|
||||
def wheelEvent(self, event):
|
||||
self.scaleView(math.pow(2.0, -event.angleDelta().y() / 240.0))
|
||||
|
||||
def scaleView(self, scaleFactor):
|
||||
factor = self.transform().scale(
|
||||
scaleFactor, scaleFactor
|
||||
).mapRect(QRectF(0, 0, 1, 1)).width()
|
||||
|
||||
if factor < 0.05 or factor > 1.5:
|
||||
return
|
||||
|
||||
self.scale(scaleFactor, scaleFactor)
|
||||
|
||||
def mousePressEvent(self, event):
|
||||
pos = self.mapToScene(event.pos())
|
||||
self.clicked = True
|
||||
|
||||
# Move item and select edge item
|
||||
if self._state == "move":
|
||||
self._selected_new_edge_src_node = None
|
||||
|
||||
self.mouse_origin_x = pos.x()
|
||||
self.mouse_origin_y = pos.y()
|
||||
|
||||
items = self.items(event.pos())
|
||||
if items and type(items[0]) == EdgeItem:
|
||||
edge = items[0]
|
||||
if edge:
|
||||
self.setCurrentEdge(edge)
|
||||
|
||||
# Add nodes and edges
|
||||
elif self._state == "add":
|
||||
items = self.items(event.pos())
|
||||
nodes = list(filter(lambda i: type(i) == NodeItem, items))
|
||||
if not nodes:
|
||||
self.add_node(pos)
|
||||
else:
|
||||
if self.selected_new_edge_src_node() is None:
|
||||
self.set_selected_new_edge_src_node(nodes[0])
|
||||
else:
|
||||
self.add_edge(self.selected_new_edge_src_node(), nodes[0])
|
||||
|
||||
# Delete nodes and edges
|
||||
elif self._state == "del":
|
||||
self._selected_new_edge_src_node = None
|
||||
items = list(
|
||||
filter(
|
||||
lambda i: type(i) == NodeItem or type(i) == EdgeItem,
|
||||
self.items(event.pos())
|
||||
)
|
||||
)
|
||||
if len(items) > 0:
|
||||
item = items[0]
|
||||
if type(item) == NodeItem:
|
||||
self.del_node(item)
|
||||
elif type(item) == EdgeItem:
|
||||
self.del_edge(item)
|
||||
|
||||
self.update()
|
||||
super(GraphWidget, self).mousePressEvent(event)
|
||||
|
||||
def mouseReleaseEvent(self, event):
|
||||
self.clicked = False
|
||||
|
||||
self.update()
|
||||
super(GraphWidget, self).mouseReleaseEvent(event)
|
||||
|
||||
def mouseMoveEvent(self, event):
|
||||
pos = self.mapToScene(event.pos())
|
||||
|
||||
# Selecte item on the fly
|
||||
items = self.items(event.pos())
|
||||
selectable_items = list(
|
||||
filter(
|
||||
lambda i: (type(i) == NodeItem or
|
||||
type(i) == EdgeItem),
|
||||
items
|
||||
)
|
||||
)
|
||||
|
||||
if selectable_items:
|
||||
self.set_selected_item(selectable_items[0])
|
||||
elif self.clicked == False:
|
||||
self.set_selected_item(None)
|
||||
|
||||
# Update temporary line
|
||||
if self.selected_new_edge_src_node() is not None:
|
||||
if self.tmp_line is None:
|
||||
self.tmp_line = NewEdgeLine(
|
||||
self.selected_new_edge_src_node().pos(),
|
||||
pos
|
||||
)
|
||||
self.scene().addItem(self.tmp_line)
|
||||
else:
|
||||
self.tmp_line.dest = pos
|
||||
self.tmp_line.update()
|
||||
|
||||
# If state is "move"
|
||||
if self._state == "move":
|
||||
# Move on scene
|
||||
if (not self.selected_item() and
|
||||
event.buttons() & Qt.LeftButton):
|
||||
old_p = self.mapToScene(self.m_origin_x, self.m_origin_y)
|
||||
new_p = self.mapToScene(event.pos())
|
||||
translation = new_p - old_p
|
||||
|
||||
self.translate(translation.x(), translation.y())
|
||||
|
||||
self.m_origin_x = event.x()
|
||||
self.m_origin_y = event.y()
|
||||
|
||||
# Propagate event
|
||||
self.update()
|
||||
super(GraphWidget, self).mouseMoveEvent(event)
|
||||
@@ -0,0 +1,168 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from Model.Network.Node import Node
|
||||
from Model.Network.Edge import Edge
|
||||
from Model.Network.Graph import Graph
|
||||
from View.ASubWindow import ASubWindow
|
||||
from View.Network.GraphWidget import GraphWidget
|
||||
|
||||
from PyQt5.QtCore import (
|
||||
Qt, QRect, QVariant, QAbstractTableModel, pyqtSlot, pyqtSignal,
|
||||
QEvent,
|
||||
)
|
||||
|
||||
from PyQt5.QtWidgets import (
|
||||
QTableView, QItemDelegate, QComboBox, QLineEdit, QHBoxLayout, QSlider,
|
||||
QPushButton, QCheckBox, QStyledItemDelegate, QStyleOptionButton, QStyle,
|
||||
QApplication,
|
||||
)
|
||||
|
||||
class ComboBoxDelegate(QItemDelegate):
|
||||
def __init__(self, graph=None, parent=None):
|
||||
super(ComboBoxDelegate, self).__init__(parent)
|
||||
self.graph = graph
|
||||
|
||||
def createEditor(self, parent, option, index):
|
||||
self.editor = QComboBox(parent)
|
||||
self.editor.addItems(self.graph.nodes_names())
|
||||
self.editor.setCurrentText(index.data(Qt.DisplayRole))
|
||||
return self.editor
|
||||
|
||||
def setEditorData(self, editor, index):
|
||||
value = index.data(Qt.DisplayRole)
|
||||
self.editor.currentTextChanged.connect(self.currentItemChanged)
|
||||
|
||||
def setModelData(self, editor, model, index):
|
||||
text = str(editor.currentText())
|
||||
model.setData(index, text)
|
||||
editor.close()
|
||||
editor.deleteLater()
|
||||
|
||||
def updateEditorGeometry(self, editor, option, index):
|
||||
r = QRect(option.rect)
|
||||
if self.editor.windowFlags() & Qt.Popup and editor.parent() is not None:
|
||||
r.setTopLeft(self.editor.parent().mapToGlobal(r.topLeft()))
|
||||
editor.setGeometry(r)
|
||||
|
||||
@pyqtSlot()
|
||||
def currentItemChanged(self):
|
||||
self.commitData.emit(self.sender())
|
||||
|
||||
class TrueFalseComboBoxDelegate(QItemDelegate):
|
||||
def __init__(self, parent=None):
|
||||
super(TrueFalseComboBoxDelegate, self).__init__(parent)
|
||||
|
||||
def createEditor(self, parent, option, index):
|
||||
self.editor = QComboBox(parent)
|
||||
self.editor.addItems(["true", "false"])
|
||||
self.editor.setCurrentText("true" if index.data(Qt.DisplayRole) else "false")
|
||||
return self.editor
|
||||
|
||||
def setEditorData(self, editor, index):
|
||||
value = str(index.data(Qt.DisplayRole))
|
||||
self.editor.currentTextChanged.connect(self.currentItemChanged)
|
||||
|
||||
def setModelData(self, editor, model, index):
|
||||
value = str(editor.currentText()) == "true"
|
||||
model.setData(index, value)
|
||||
editor.close()
|
||||
editor.deleteLater()
|
||||
|
||||
def updateEditorGeometry(self, editor, option, index):
|
||||
r = QRect(option.rect)
|
||||
if self.editor.windowFlags() & Qt.Popup and editor.parent() is not None:
|
||||
r.setTopLeft(self.editor.parent().mapToGlobal(r.topLeft()))
|
||||
editor.setGeometry(r)
|
||||
|
||||
@pyqtSlot()
|
||||
def currentItemChanged(self):
|
||||
self.commitData.emit(self.sender())
|
||||
|
||||
class GraphTableModel(QAbstractTableModel):
|
||||
def __init__(self, headers=[], graph=None, rows_type="nodes"):
|
||||
super(QAbstractTableModel, self).__init__()
|
||||
self.headers = headers
|
||||
self.graph = graph
|
||||
self._type = rows_type
|
||||
|
||||
if self._type == "nodes":
|
||||
self.rows = graph.nodes()
|
||||
elif self._type == "edges":
|
||||
self.rows = graph.edges()
|
||||
|
||||
def flags(self, index):
|
||||
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable
|
||||
|
||||
if self.headers[index.column()] != "type":
|
||||
options |= Qt.ItemIsEditable
|
||||
|
||||
return options
|
||||
|
||||
def rowCount(self, parent):
|
||||
return len(self.rows)
|
||||
|
||||
def columnCount(self, parent):
|
||||
return len(self.headers)
|
||||
|
||||
def data(self, index, role):
|
||||
if role != Qt.ItemDataRole.DisplayRole:
|
||||
return QVariant()
|
||||
|
||||
if self.headers[index.column()] == "type":
|
||||
node = self.rows[index.row()]
|
||||
ret = "internal"
|
||||
|
||||
if not self.graph.is_enable_node(node):
|
||||
ret = "disable"
|
||||
elif self.graph.is_upstream_node(node):
|
||||
ret = "upstream"
|
||||
elif self.graph.is_downstream_node(node):
|
||||
ret = "downstream"
|
||||
|
||||
return ret
|
||||
|
||||
return self.rows[index.row()][self.headers[index.column()]]
|
||||
|
||||
def headerData(self, section, orientation, role):
|
||||
if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal:
|
||||
return self.headers[section].capitalize()
|
||||
|
||||
# if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Vertical:
|
||||
# return section
|
||||
|
||||
return QVariant()
|
||||
|
||||
@pyqtSlot()
|
||||
def setData(self, index, value, role=Qt.EditRole):
|
||||
if index.isValid():
|
||||
if role == Qt.EditRole:
|
||||
if (self.headers[index.column()] == "node1" or
|
||||
self.headers[index.column()] == "node2"):
|
||||
node = self.graph.node(value)
|
||||
self.rows[index.row()][self.headers[index.column()]] = node
|
||||
else:
|
||||
self.rows[index.row()][self.headers[index.column()]] = value
|
||||
|
||||
self.dataChanged.emit(index, index, [Qt.DisplayRole])
|
||||
self.layoutChanged.emit()
|
||||
return True
|
||||
|
||||
self.dataChanged.emit(index, index)
|
||||
else:
|
||||
return False
|
||||
|
||||
def update(self):
|
||||
if self._type == "nodes":
|
||||
self.rows = self.graph.nodes()
|
||||
elif self._type == "edges":
|
||||
self.rows = self.graph.edges()
|
||||
|
||||
self.layoutChanged.emit()
|
||||
|
||||
def reverse_edge(self, index):
|
||||
if self._type == "edges":
|
||||
tmp = self.rows[index.row()].node1
|
||||
self.rows[index.row()].node1 = self.rows[index.row()].node2
|
||||
self.rows[index.row()].node2 = tmp
|
||||
self.dataChanged.emit(index, index, [Qt.DisplayRole])
|
||||
self.layoutChanged.emit()
|
||||
@@ -0,0 +1,126 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from Model.Network.Node import Node
|
||||
from Model.Network.Edge import Edge
|
||||
from Model.Network.Graph import Graph
|
||||
from View.ASubWindow import ASubWindow
|
||||
from View.Network.GraphWidget import GraphWidget
|
||||
from View.Network.TableModel import (
|
||||
GraphTableModel, ComboBoxDelegate, TrueFalseComboBoxDelegate,
|
||||
)
|
||||
|
||||
from PyQt5.QtCore import (
|
||||
Qt, QRect, QVariant, QAbstractTableModel, pyqtSlot, pyqtSignal,
|
||||
QEvent,
|
||||
)
|
||||
|
||||
from PyQt5.QtWidgets import (
|
||||
QTableView, QItemDelegate, QComboBox, QLineEdit, QHBoxLayout, QSlider,
|
||||
QPushButton, QCheckBox, QStyledItemDelegate, QStyleOptionButton, QStyle,
|
||||
QApplication,
|
||||
)
|
||||
|
||||
class NetworkWindow(ASubWindow):
|
||||
def __init__(self, model=None, title="River network", parent=None):
|
||||
super(NetworkWindow, self).__init__(name=title, ui="Network", parent=parent)
|
||||
self.ui.setWindowTitle(title)
|
||||
|
||||
self.model = model
|
||||
if "graph" not in self.model.data:
|
||||
self.graph = Graph()
|
||||
self.model.data["graph"] = self.graph
|
||||
else:
|
||||
self.graph = self.model.data["graph"]
|
||||
|
||||
# Graph Widget
|
||||
|
||||
self.graph_widget = GraphWidget(self.graph, parent=self)
|
||||
self.graph_layout = self.find(QHBoxLayout, "horizontalLayout_graph")
|
||||
self.graph_layout.addWidget(self.graph_widget)
|
||||
|
||||
# Nodes table
|
||||
|
||||
self.nodes_model = GraphTableModel(
|
||||
headers = ["name", "type"],
|
||||
graph = self.graph,
|
||||
rows_type="nodes",
|
||||
)
|
||||
table = self.find(QTableView, "tableView_nodes")
|
||||
table.setModel(self.nodes_model)
|
||||
#table.resizeColumnsToContents()
|
||||
|
||||
# Edges table
|
||||
|
||||
self.reachs_model = GraphTableModel(
|
||||
headers = ["name", "enable", "node1", "node2"],
|
||||
graph = self.graph,
|
||||
rows_type="edges"
|
||||
)
|
||||
self.delegate_combobox = ComboBoxDelegate(
|
||||
graph = self.graph,
|
||||
parent = self,
|
||||
)
|
||||
self.delegate_true_false_combobox = TrueFalseComboBoxDelegate(
|
||||
parent = self,
|
||||
)
|
||||
|
||||
table = self.find(QTableView, "tableView_reachs")
|
||||
table.setModel(self.reachs_model)
|
||||
table.setItemDelegateForColumn(1, self.delegate_true_false_combobox)
|
||||
table.setItemDelegateForColumn(2, self.delegate_combobox)
|
||||
table.setItemDelegateForColumn(3, self.delegate_combobox)
|
||||
#table.resizeColumnsToContents()
|
||||
|
||||
# Connection
|
||||
|
||||
self.nodes_model.dataChanged.connect(self.reachs_model.update)
|
||||
self.nodes_model.dataChanged.connect(self.graph_widget.rename_nodes)
|
||||
self.reachs_model.dataChanged.connect(self.graph_widget.display_update)
|
||||
self.reachs_model.dataChanged.connect(self.nodes_model.update)
|
||||
self.graph_widget.changeEdge.connect(self.reachs_model.update)
|
||||
self.graph_widget.changeNode.connect(self.nodes_model.update)
|
||||
|
||||
self.find(QPushButton, "pushButton_add").clicked.connect(
|
||||
self.clicked_add
|
||||
)
|
||||
self.find(QPushButton, "pushButton_del").clicked.connect(
|
||||
self.clicked_del
|
||||
)
|
||||
self.find(QPushButton, "pushButton_reverse").clicked.connect(
|
||||
self.reverse_edge
|
||||
)
|
||||
|
||||
def clicked_add(self):
|
||||
if self.get_push_button_checkable("pushButton_add"):
|
||||
self.set_push_button_checkable("pushButton_del", False)
|
||||
self.graph_widget.state("add")
|
||||
else:
|
||||
self.graph_widget.state("move")
|
||||
|
||||
def clicked_del(self):
|
||||
if self.get_push_button_checkable("pushButton_del"):
|
||||
self.set_push_button_checkable("pushButton_add", False)
|
||||
self.graph_widget.state("del")
|
||||
else:
|
||||
self.graph_widget.state("move")
|
||||
|
||||
def keyPressEvent(self, event):
|
||||
key = event.key()
|
||||
|
||||
if key == Qt.Key_Escape:
|
||||
self.graph_widget.reset_selection
|
||||
|
||||
def reverse_edge(self):
|
||||
"""Reverse edge direction of selected table rows
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
"""
|
||||
indices = self.find(QTableView, "tableView_reachs").selectionModel().selectedIndexes()
|
||||
indexes = {}
|
||||
|
||||
for index in sorted(indices):
|
||||
indexes[index.row()] = index
|
||||
|
||||
for row in indexes:
|
||||
self.reachs_model.reverse_edge(indexes[row])
|
||||
@@ -0,0 +1,28 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from Model.Study import Study
|
||||
from View.ASubWindow import ASubWindow
|
||||
|
||||
class NewStudyWindow(ASubWindow):
|
||||
def __init__(self, study=None, title="New Study", parent=None):
|
||||
super(NewStudyWindow, self).__init__(name=title, ui="NewStudy", parent=parent)
|
||||
self.ui.setWindowTitle(title)
|
||||
|
||||
self.parent = parent
|
||||
|
||||
self.study = study
|
||||
|
||||
if not self.study is None:
|
||||
self.set_line_edit_text("lineEdit_name", study.name)
|
||||
self.set_text_edit_text("textEdit_description", study.description)
|
||||
|
||||
def accept(self):
|
||||
name = self.get_line_edit_text("lineEdit_name")
|
||||
description = self.get_text_edit_text("textEdit_description")
|
||||
|
||||
if self.study is None:
|
||||
self.parent.set_model(Study.new(name, description))
|
||||
else:
|
||||
self.study.name = name
|
||||
self.study.description = description
|
||||
self.done(True)
|
||||
@@ -0,0 +1,208 @@
|
||||
<?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>741</width>
|
||||
<height>289</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Type</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBox_solver"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Description</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="2">
|
||||
<widget class="QLineEdit" name="lineEdit_name"/>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QLineEdit" name="lineEdit_description"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Solver</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_solver"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_solver">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/open.png</normaloff>ressources/open.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QLineEdit" name="lineEdit_solver_cmd"/>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Path</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Output formater</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="2">
|
||||
<widget class="QLineEdit" name="lineEdit_output_cmd"/>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>Command line</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QLineEdit" name="lineEdit_input_cmd"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Input formater</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_input"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_input">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/open.png</normaloff>ressources/open.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_output"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_output">
|
||||
<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>
|
||||
<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>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -0,0 +1,466 @@
|
||||
<?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>658</width>
|
||||
<height>381</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<property name="locale">
|
||||
<locale language="English" country="Europe"/>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="documentMode">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="tabsClosable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="movable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="tabBarAutoHide">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab_solvers">
|
||||
<attribute name="title">
|
||||
<string>Solvers</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_solver_add">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/gtk_add.png</normaloff>ressources/gtk_add.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_solver_del">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/gtk-remove.png</normaloff>ressources/gtk-remove.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_solver_edit">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/edit.png</normaloff>ressources/edit.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<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>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTableView" name="tableView_solver">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>156</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_mesh">
|
||||
<property name="autoFillBackground">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="title">
|
||||
<string>Meshing tool</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Meshing tool path</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_mailleur_2"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_mailleur_2">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/open.png</normaloff>ressources/open.png</iconset>
|
||||
</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>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_constant">
|
||||
<attribute name="title">
|
||||
<string>Constants</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Segment number</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Listing maximum size</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<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>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<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>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_backup">
|
||||
<attribute name="title">
|
||||
<string>Backup</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_9">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Auto save</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>Path</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>Enable</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>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_3">
|
||||
<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>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_language">
|
||||
<attribute name="title">
|
||||
<string>Language</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_6">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_10">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="font">
|
||||
<font>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Please restart application after language modification</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Language</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBox_language"/>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_4">
|
||||
<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>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</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>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -0,0 +1,884 @@
|
||||
<?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="locale">
|
||||
<locale language="English" country="Europe"/>
|
||||
</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="locale">
|
||||
<locale language="English" country="Europe"/>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>&File</string>
|
||||
</property>
|
||||
<addaction name="action_menu_new"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_menu_open"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_menu_import_mage"/>
|
||||
<addaction name="action_menu_import_rubarbe"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_menu_close"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_menu_edit"/>
|
||||
<addaction name="action_menu_save"/>
|
||||
<addaction name="action_menu_save_as"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_menu_config"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_menu_quit"/>
|
||||
<addaction name="separator"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menu_network">
|
||||
<property name="locale">
|
||||
<locale language="English" country="Europe"/>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>&River Network</string>
|
||||
</property>
|
||||
<addaction name="action_menu_edit_network"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menu_geometry">
|
||||
<property name="locale">
|
||||
<locale language="English" country="Europe"/>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>&Geometry</string>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuCompare">
|
||||
<property name="title">
|
||||
<string>Comparer</string>
|
||||
</property>
|
||||
<widget class="QMenu" name="menu_cross_profile">
|
||||
<property name="title">
|
||||
<string>Profil en travers</string>
|
||||
</property>
|
||||
<addaction name="action_menu_abscisse_cote"/>
|
||||
<addaction name="action_menu_XYZ"/>
|
||||
</widget>
|
||||
<addaction name="menu_cross_profile"/>
|
||||
</widget>
|
||||
<addaction name="action_menu_edit_geometry"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_menu_import_geometry"/>
|
||||
<addaction name="action_menu_export_geometry"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_menu_run_meshing_tool"/>
|
||||
<addaction name="action_menu_view_mesh"/>
|
||||
<addaction name="action_menu_export_mesh"/>
|
||||
<addaction name="action_menu_delete_mesh_for_current_reach"/>
|
||||
<addaction name="action_menu_delete_mesh"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="menuCompare"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menu_run">
|
||||
<property name="locale">
|
||||
<locale language="English" country="Europe"/>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>&Execute</string>
|
||||
</property>
|
||||
<addaction name="action_numerical_parameter_MAGE"/>
|
||||
<addaction name="action_run_solver"/>
|
||||
<addaction name="action_stop_solver"/>
|
||||
<addaction name="action_display_listings"/>
|
||||
<addaction name="action_simulation_directory_management"/>
|
||||
<addaction name="separator"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menu_Hydraulics">
|
||||
<property name="locale">
|
||||
<locale language="English" country="Europe"/>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>&Hydraulics</string>
|
||||
</property>
|
||||
<addaction name="action_boundary_conditions"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_initial_conditions"/>
|
||||
<addaction name="action_initia_conditions_export"/>
|
||||
<addaction name="action_import_final_conditions_as_initial"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_edit_friction"/>
|
||||
<addaction name="action_edit_lateral_contribution"/>
|
||||
<addaction name="action_edit_spills"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_edi_cross_building"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menu_plot">
|
||||
<property name="title">
|
||||
<string>&Plots</string>
|
||||
</property>
|
||||
<addaction name="action_plot_hydrograph"/>
|
||||
<addaction name="action_plot_limnigram"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menu_cartography">
|
||||
<property name="locale">
|
||||
<locale language="English" country="Europe"/>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>&Cartography</string>
|
||||
</property>
|
||||
<addaction name="action_map_current_reach"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menu_help">
|
||||
<property name="title">
|
||||
<string>&Help</string>
|
||||
</property>
|
||||
<addaction name="action_menu_help_pamhyr"/>
|
||||
<addaction name="action_menu_help_mage"/>
|
||||
<addaction name="action_menu_about"/>
|
||||
</widget>
|
||||
<addaction name="menu_File"/>
|
||||
<addaction name="menu_network"/>
|
||||
<addaction name="menu_geometry"/>
|
||||
<addaction name="menu_Hydraulics"/>
|
||||
<addaction name="menu_run"/>
|
||||
<addaction name="menu_plot"/>
|
||||
<addaction name="menu_cartography"/>
|
||||
<addaction name="menu_help"/>
|
||||
</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="action_toolBar_open"/>
|
||||
<addaction name="action_toolBar_save"/>
|
||||
<addaction name="action_toolBar_close"/>
|
||||
<addaction name="action_toolBar_quit"/>
|
||||
<addaction name="action_toolBar_run_solver"/>
|
||||
<addaction name="action_toolBar_kill_solver"/>
|
||||
<addaction name="action_toolBar_listing"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_toolBar_network"/>
|
||||
<addaction name="action_toolBar_geometry"/>
|
||||
<addaction name="action_toolBar_mesh"/>
|
||||
<addaction name="action_toolBar_run_meshing_tool"/>
|
||||
</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="action_toolBar_boundary_cond"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_toolBar_lateral_contrib"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_toolBar_spills"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_toolBar_sections"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_toolBar_frictions"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_toolBar_building"/>
|
||||
<addaction name="separator"/>
|
||||
</widget>
|
||||
<action name="action_menu_new">
|
||||
<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>New study</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="action_toolBar_open">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/open.png</normaloff>ressources/open.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open a study</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open a study</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_open">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normalon>ressources/open.png</normalon>
|
||||
</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open a study</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+O</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_import_mage">
|
||||
<property name="text">
|
||||
<string>Import data from MAGE</string>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string/>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_import_rubarbe">
|
||||
<property name="text">
|
||||
<string>Import data from RubarBE</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_close">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../ressources/menu/gtk-close.png</normaloff>../ressources/menu/gtk-close.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Close</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Close current study</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_save_mesh">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save mesh</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_save">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/gtk-save.png</normaloff>ressources/gtk-save.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+S</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_save_as">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/gtk-save-as.png</normaloff>ressources/gtk-save-as.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save as ...</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+Shift+S</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_archive">
|
||||
<property name="text">
|
||||
<string>Archive</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_config">
|
||||
<property name="text">
|
||||
<string>Pamhyr configuration</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_quit">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../ressources/menu/gtk-quit.png</normaloff>../ressources/menu/gtk-quit.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Quit</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+F4</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_edit_network">
|
||||
<property name="text">
|
||||
<string>Edit river network</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_edit_geometry">
|
||||
<property name="text">
|
||||
<string>Edit geometry</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_import_geometry">
|
||||
<property name="text">
|
||||
<string>Import geometry</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_export_geometry">
|
||||
<property name="text">
|
||||
<string>Export geometry</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_run_meshing_tool">
|
||||
<property name="text">
|
||||
<string>Run extrenal meshing tool</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action">
|
||||
<property name="text">
|
||||
<string>choose meshing tool by reach</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_view_mesh">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View meshed geometry</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_export_mesh">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Export mesh</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_delete_mesh_for_current_reach">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Delete mesh of current reach</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_delete_mesh">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Delete all mesh</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_abscisse_cote">
|
||||
<property name="text">
|
||||
<string>Abscisse - Cote</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_XYZ">
|
||||
<property name="text">
|
||||
<string>XYZ</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_numerical_parameter_MAGE">
|
||||
<property name="text">
|
||||
<string>Numerical parameter for MAGE solver</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_boundary_conditions">
|
||||
<property name="text">
|
||||
<string>Boundary conditions and one-time contributions</string>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_initial_conditions">
|
||||
<property name="text">
|
||||
<string>Initial conditions</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_initia_conditions_export">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Export initial conditions</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_import_final_conditions_as_initial">
|
||||
<property name="text">
|
||||
<string>Import final state as initial condition</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_edit_friction">
|
||||
<property name="text">
|
||||
<string>Edit friction</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_edit_lateral_contribution">
|
||||
<property name="text">
|
||||
<string>Edit lateral contributions</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_edit_spills">
|
||||
<property name="text">
|
||||
<string>Edit spills</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_dition_des_Tron_ons">
|
||||
<property name="text">
|
||||
<string>Édition des Tronçons</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_edi_cross_building">
|
||||
<property name="text">
|
||||
<string>Edit cross building</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_run_solver">
|
||||
<property name="text">
|
||||
<string>Run solver</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_stop_solver">
|
||||
<property name="text">
|
||||
<string>Stop solver</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_display_listings">
|
||||
<property name="text">
|
||||
<string>Display listings</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_simulation_directory_management">
|
||||
<property name="text">
|
||||
<string>Simulation directory management</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_open">
|
||||
<property name="text">
|
||||
<string>Open</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_close">
|
||||
<property name="text">
|
||||
<string>Close</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_plot_hydrograph">
|
||||
<property name="text">
|
||||
<string>Hydrograph</string>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Ubuntu</family>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_plot_limnigram">
|
||||
<property name="text">
|
||||
<string>Limnigram</string>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_map_current_reach">
|
||||
<property name="text">
|
||||
<string>Map current reach</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_help_pamhyr">
|
||||
<property name="text">
|
||||
<string>Help PAMHYR</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_help_mage">
|
||||
<property name="text">
|
||||
<string>help MAGE</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_about">
|
||||
<property name="text">
|
||||
<string>About</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="action_toolBar_save">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/save.png</normaloff>ressources/save.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save current study</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Enrégistrer étude en cours (Ctrl+S)</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string/>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_close">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/gtk-close.png</normaloff>ressources/gtk-close.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Close current study</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="action_toolBar_quit">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/exit_bis.png</normaloff>ressources/exit_bis.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Quit 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="action_toolBar_run_solver">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/gtk-execute.png</normaloff>ressources/gtk-execute.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Run solver</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Run solver on current study</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+X</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_kill_solver">
|
||||
<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>stop solver</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Interrompt la simulation en cours</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+C</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_run_meshing_tool">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/gnome-stock-insert-table.png</normaloff>ressources/gnome-stock-insert-table.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Run external meshing tool</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Run meshing tool on current reach geometry</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_listing">
|
||||
<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>Display simulation listing</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Display current simulation listing</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_network">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/reseau3_24.png</normaloff>ressources/reseau3_24.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>River network</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Edit river network</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_geometry">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/geometrie0.png</normaloff>ressources/geometrie0.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Geometry</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Edit reach geometry</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_mesh">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/mailles-50.png</normaloff>ressources/mailles-50.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Mesh</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Afficher le maillage</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_boundary_cond">
|
||||
<property name="text">
|
||||
<string>Boundary conditions</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Edit boundary conditions and one-time contributions</string>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font/>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_lateral_contrib">
|
||||
<property name="text">
|
||||
<string>Lateral contribution</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Edit lateral contribution</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_spills">
|
||||
<property name="text">
|
||||
<string>Spills</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Edit lateral spills</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_sections">
|
||||
<property name="text">
|
||||
<string>Sections</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Edit section frictions and lateral contributions</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_frictions">
|
||||
<property name="text">
|
||||
<string>Frictions</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Edit friction at the bottom</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_toolBar_building">
|
||||
<property name="text">
|
||||
<string>Building</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Edit building (valve, ...), singularity and pump</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_menu_edit">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/edit.png</normaloff>ressources/edit.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Edit study</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Edit study</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_english">
|
||||
<property name="text">
|
||||
<string>English</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_french">
|
||||
<property name="text">
|
||||
<string>French</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>
|
||||
@@ -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>&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>&Réseau</string>
|
||||
</property>
|
||||
<addaction name="actionEditer_le_r_seau"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuG_om_trie">
|
||||
<property name="title">
|
||||
<string>&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>&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>&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>&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>&Cartographie</string>
|
||||
</property>
|
||||
<addaction name="actionCartographier_le_bief_courant"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuAide">
|
||||
<property name="title">
|
||||
<string>&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 & 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 & 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>
|
||||
@@ -0,0 +1,247 @@
|
||||
<?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>990</width>
|
||||
<height>690</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<property name="sizeGripEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetDefaultConstraint</enum>
|
||||
</property>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_add">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/gtk_add.png</normaloff>ressources/gtk_add.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="autoRepeat">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="default">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_del">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/gtk-remove.png</normaloff>ressources/gtk-remove.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</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>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_graph"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_14">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/gtk-sort-descending.png</normaloff>ressources/gtk-sort-descending.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_15">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/go-up2.png</normaloff>ressources/go-up2.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_16">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/go-down1.png</normaloff>ressources/go-down1.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_reverse">
|
||||
<property name="text">
|
||||
<string>Reverse</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTableView" name="tableView_reachs">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>650</width>
|
||||
<height>150</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>200</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_11">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/gtk-sort-descending.png</normaloff>ressources/gtk-sort-descending.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_12">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/go-up2.png</normaloff>ressources/go-up2.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_13">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>ressources/go-down1.png</normaloff>ressources/go-down1.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTableView" name="tableView_nodes">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>150</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>200</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -0,0 +1,107 @@
|
||||
<?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>560</width>
|
||||
<height>350</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<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="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Description</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="lineEdit_name">
|
||||
<property name="text">
|
||||
<string>MyNewStudy</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QTextEdit" name="textEdit_description">
|
||||
<property name="autoFillBackground">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="tabChangesFocus">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</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>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Form</class>
|
||||
<widget class="QWidget" name="Form">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>362</width>
|
||||
<height>98</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap>ressources/logoCemagref.gif</pixmap>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>16</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>PamHyr</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Version en developpement:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Form</class>
|
||||
<widget class="QWidget" name="Form">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
After Width: | Height: | Size: 286 B |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 531 B |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 7.7 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 605 B |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 312 B |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 964 B |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 904 B |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 672 B |
|
After Width: | Height: | Size: 460 B |
|
After Width: | Height: | Size: 651 B |
|
After Width: | Height: | Size: 266 B |
|
After Width: | Height: | Size: 376 B |
|
After Width: | Height: | Size: 529 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 661 B |
|
After Width: | Height: | Size: 434 B |
|
After Width: | Height: | Size: 507 B |
@@ -0,0 +1 @@
|
||||
゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 672 B |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 784 B |
|
After Width: | Height: | Size: 779 B |
|
After Width: | Height: | Size: 243 B |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 596 B |
|
After Width: | Height: | Size: 546 B |
|
After Width: | Height: | Size: 828 B |
|
After Width: | Height: | Size: 696 B |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1 @@
|
||||
゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚
|
||||
@@ -0,0 +1 @@
|
||||
゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚
|
||||
|
After Width: | Height: | Size: 460 B |
|
After Width: | Height: | Size: 927 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 991 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 345 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 669 B |
|
After Width: | Height: | Size: 197 B |
|
After Width: | Height: | Size: 305 B |
|
After Width: | Height: | Size: 975 B |
|
After Width: | Height: | Size: 266 B |
|
After Width: | Height: | Size: 985 B |
|
After Width: | Height: | Size: 261 B |
|
After Width: | Height: | Size: 983 B |
|
After Width: | Height: | Size: 275 B |
|
After Width: | Height: | Size: 991 B |
|
After Width: | Height: | Size: 272 B |
|
After Width: | Height: | Size: 964 B |