git: Rename some directory.

This commit is contained in:
Pierre-Antoine Rouby committed 2023-03-30 09:29:33 +02:00
1 parent b8dd88f4fd
commit d418b57fa0
138 files changed
+40 -41

No files matched your search

+289
View File
@@ -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_()
+8
View File
@@ -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)
+82
View File
@@ -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)
+171
View File
@@ -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)
+8
View File
@@ -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)
+28
View File
@@ -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})")
+304
View File
@@ -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()
+701
View File
@@ -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)
+168
View File
@@ -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()
+126
View File
@@ -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])
+28
View File
@@ -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)
+208
View File
@@ -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>
+466
View File
@@ -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>
+884
View File
@@ -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>&amp;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>&amp;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>&amp;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>&amp;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>&amp;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>&amp;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>&amp;Cartography</string>
</property>
<addaction name="action_map_current_reach"/>
</widget>
<widget class="QMenu" name="menu_help">
<property name="title">
<string>&amp;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>
+908
View File
@@ -0,0 +1,908 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="windowModality">
<enum>Qt::ApplicationModal</enum>
</property>
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>850</width>
<height>646</height>
</rect>
</property>
<property name="font">
<font>
<family>Serif</family>
<weight>75</weight>
<bold>true</bold>
<kerning>false</kerning>
</font>
</property>
<property name="mouseTracking">
<bool>true</bool>
</property>
<property name="contextMenuPolicy">
<enum>Qt::NoContextMenu</enum>
</property>
<property name="acceptDrops">
<bool>true</bool>
</property>
<property name="windowTitle">
<string>PAMHYR</string>
</property>
<property name="windowIcon">
<iconset>
<normaloff>ressources/M_icon.png</normaloff>ressources/M_icon.png</iconset>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="documentMode">
<bool>false</bool>
</property>
<widget class="QWidget" name="centralwidget">
<property name="contextMenuPolicy">
<enum>Qt::NoContextMenu</enum>
</property>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>850</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Sans Serif</family>
</font>
</property>
<widget class="QMenu" name="menu_File">
<property name="title">
<string>&amp;Fichier</string>
</property>
<addaction name="actionR_seau"/>
<addaction name="actionNouvelle_tude_RubarBE"/>
<addaction name="separator"/>
<addaction name="actionOuvrir_une_tude_2"/>
<addaction name="separator"/>
<addaction name="actionImporter_un_jeu_de_donn_es_MAGE"/>
<addaction name="actionImporter_un_jeu_de_donn_es_RubarBE"/>
<addaction name="separator"/>
<addaction name="separator"/>
<addaction name="actionFermer"/>
<addaction name="separator"/>
<addaction name="actionEnregistrer"/>
<addaction name="actionEnregistrer_2"/>
<addaction name="actionEnregistrer_sous"/>
<addaction name="actionArchiver"/>
<addaction name="separator"/>
<addaction name="separator"/>
<addaction name="actionConfiguration_de_Pamhyr"/>
<addaction name="separator"/>
<addaction name="actionQuitter"/>
<addaction name="separator"/>
</widget>
<widget class="QMenu" name="menu_R_seau">
<property name="title">
<string>&amp;Réseau</string>
</property>
<addaction name="actionEditer_le_r_seau"/>
</widget>
<widget class="QMenu" name="menuG_om_trie">
<property name="title">
<string>&amp;Géométrie</string>
</property>
<widget class="QMenu" name="menuComparer">
<property name="title">
<string>Comparer</string>
</property>
<widget class="QMenu" name="menuProfil_en_travers">
<property name="title">
<string>Profil en travers</string>
</property>
<addaction name="actionAbscisse_Cote"/>
<addaction name="actionXYZ"/>
</widget>
<addaction name="menuProfil_en_travers"/>
</widget>
<addaction name="action_diter_la_g_om_trie"/>
<addaction name="separator"/>
<addaction name="actionImporter_la_g_om_trie"/>
<addaction name="actionExporter_la_g_om_trie"/>
<addaction name="separator"/>
<addaction name="actionLancer_le_mailleur_externe"/>
<addaction name="actionChoix_du_maileur_par_bief"/>
<addaction name="actionVisulaiser_la_g_om_trie_maill_e"/>
<addaction name="actionExporter_le_maillage"/>
<addaction name="actionSupprimer_le_maillage_du_bief_courant"/>
<addaction name="actionSupprimer_l_ensemble_du_maillage"/>
<addaction name="separator"/>
<addaction name="separator"/>
<addaction name="menuComparer"/>
</widget>
<widget class="QMenu" name="menu_x_cuter">
<property name="title">
<string>&amp;Exécuter</string>
</property>
<widget class="QMenu" name="menuSous_tude_Rubar3">
<property name="title">
<string>Sous-étude Rubar3</string>
</property>
<addaction name="actionOuvrir"/>
<addaction name="actionFermer_2"/>
</widget>
<addaction name="actionParam_tres_num_riques_du_solveur_MAGE"/>
<addaction name="actionSolveur_MAGE"/>
<addaction name="actionStop_solveur"/>
<addaction name="actionAfficher_les_listings"/>
<addaction name="actionGestion_de_r_pertoire_de_simulation"/>
<addaction name="separator"/>
<addaction name="menuSous_tude_Rubar3"/>
</widget>
<widget class="QMenu" name="menu_Hydraulique">
<property name="title">
<string>&amp;Hydraulique</string>
</property>
<addaction name="actionConditions_aux_limites_Apports_lat_raux"/>
<addaction name="separator"/>
<addaction name="actionConditions_initiales"/>
<addaction name="actionActiver_D_sactiver_l_export"/>
<addaction name="actionImporter_l_tat_final_comme_tat_initial"/>
<addaction name="separator"/>
<addaction name="action_dition_des"/>
<addaction name="action_dition_des_Apports_Lat_raux"/>
<addaction name="action_dition_des_d_versements"/>
<addaction name="separator"/>
<addaction name="action_dition_des_ouvrages_en_travers"/>
</widget>
<widget class="QMenu" name="menuGraphiques">
<property name="title">
<string>&amp;Graphiques</string>
</property>
<addaction name="actionHydrogramme"/>
<addaction name="actionLimnigramme"/>
<addaction name="actionLigne_d_eau"/>
<addaction name="actionLigne_d_eau_finale"/>
<addaction name="actionLigne_d_eau_enveloppe"/>
<addaction name="actionVitesse_Pk_t_fix"/>
<addaction name="actionVitesse_t_Pk_fix"/>
<addaction name="actionCharge_hydraulique_Pk_t_fix"/>
<addaction name="actionCharge_hydraulique_t_Pk_fix"/>
<addaction name="actionVoir_l_animation_MAGE"/>
<addaction name="actionAutres_r_sulats_MAGE"/>
</widget>
<widget class="QMenu" name="menuCartographie">
<property name="title">
<string>&amp;Cartographie</string>
</property>
<addaction name="actionCartographier_le_bief_courant"/>
</widget>
<widget class="QMenu" name="menuAide">
<property name="title">
<string>&amp;Aide</string>
</property>
<addaction name="actionAide_de_PAMHYR"/>
<addaction name="actionAide_de_MAGE"/>
<addaction name="actionA_propos"/>
</widget>
<addaction name="menu_File"/>
<addaction name="menu_R_seau"/>
<addaction name="menuG_om_trie"/>
<addaction name="menu_Hydraulique"/>
<addaction name="menu_x_cuter"/>
<addaction name="menuGraphiques"/>
<addaction name="menuCartographie"/>
<addaction name="menuAide"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<widget class="QToolBar" name="toolBar">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>50</weight>
<bold>false</bold>
<kerning>true</kerning>
</font>
</property>
<property name="mouseTracking">
<bool>true</bool>
</property>
<property name="focusPolicy">
<enum>Qt::ClickFocus</enum>
</property>
<property name="contextMenuPolicy">
<enum>Qt::NoContextMenu</enum>
</property>
<property name="windowTitle">
<string>toolBar</string>
</property>
<property name="whatsThis">
<string/>
</property>
<property name="autoFillBackground">
<bool>true</bool>
</property>
<property name="movable">
<bool>true</bool>
</property>
<property name="floatable">
<bool>false</bool>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="actionOuvrir_une_tude"/>
<addaction name="actionenregistrer_etude_en_cours"/>
<addaction name="actionfermer_etude_en_cours"/>
<addaction name="actionquitter_application"/>
<addaction name="actionlancer_solveur"/>
<addaction name="actioninterrompt_simulation_en_cours"/>
<addaction name="actionafficher_listings_simulation"/>
<addaction name="separator"/>
<addaction name="actionReseau"/>
<addaction name="actionGeometrie"/>
<addaction name="actionMaillage"/>
<addaction name="actionlancer_mailleur_externe"/>
</widget>
<widget class="QToolBar" name="toolBar_2">
<property name="font">
<font>
<family>Sans Serif</family>
<pointsize>9</pointsize>
<weight>50</weight>
<italic>false</italic>
<bold>false</bold>
</font>
</property>
<property name="windowTitle">
<string>toolBar_2</string>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>true</bool>
</attribute>
<addaction name="actionCond_Limites"/>
<addaction name="separator"/>
<addaction name="actionApp_Lat_raux"/>
<addaction name="separator"/>
<addaction name="actionDeversements"/>
<addaction name="separator"/>
<addaction name="actionTroncons"/>
<addaction name="separator"/>
<addaction name="actionFrottements"/>
<addaction name="separator"/>
<addaction name="actionOuvrages"/>
<addaction name="separator"/>
</widget>
<action name="actionR_seau">
<property name="checkable">
<bool>false</bool>
</property>
<property name="icon">
<iconset>
<normaloff>ressources/edit.png</normaloff>ressources/edit.png</iconset>
</property>
<property name="text">
<string>Nouvelle étude MAGE</string>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="shortcut">
<string>Ctrl+N</string>
</property>
</action>
<action name="actionOuvrir_une_tude">
<property name="icon">
<iconset>
<normaloff>ressources/open.png</normaloff>ressources/open.png</iconset>
</property>
<property name="text">
<string>Ouvrir une étude</string>
</property>
</action>
<action name="actionNouvelle_tude_RubarBE">
<property name="text">
<string>Nouvelle étude RubarBE</string>
</property>
<property name="shortcut">
<string>Ctrl+R</string>
</property>
</action>
<action name="actionOuvrir_une_tude_2">
<property name="icon">
<iconset>
<normalon>ressources/open.png</normalon>
</iconset>
</property>
<property name="text">
<string>Ouvrir une étude</string>
</property>
<property name="shortcut">
<string>Ctrl+O</string>
</property>
</action>
<action name="actionImporter_un_jeu_de_donn_es_MAGE">
<property name="text">
<string>Importer un jeu de données MAGE</string>
</property>
<property name="statusTip">
<string/>
</property>
</action>
<action name="actionImporter_un_jeu_de_donn_es_RubarBE">
<property name="text">
<string>Importer un jeu de données RubarBE</string>
</property>
</action>
<action name="actionFermer">
<property name="icon">
<iconset>
<normaloff>../ressources/menu/gtk-close.png</normaloff>../ressources/menu/gtk-close.png</iconset>
</property>
<property name="text">
<string>Fermer</string>
</property>
</action>
<action name="actionEnregistrer">
<property name="checkable">
<bool>true</bool>
</property>
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Enregistrer le maillage</string>
</property>
</action>
<action name="actionEnregistrer_2">
<property name="icon">
<iconset>
<normaloff>ressources/gtk-save.png</normaloff>ressources/gtk-save.png</iconset>
</property>
<property name="text">
<string>Enregistrer</string>
</property>
<property name="shortcut">
<string>Ctrl+S</string>
</property>
</action>
<action name="actionEnregistrer_sous">
<property name="icon">
<iconset>
<normaloff>ressources/gtk-save-as.png</normaloff>ressources/gtk-save-as.png</iconset>
</property>
<property name="text">
<string>Enregistrer sous ...</string>
</property>
<property name="shortcut">
<string>Ctrl+Shift+S</string>
</property>
</action>
<action name="actionArchiver">
<property name="text">
<string>Archiver</string>
</property>
</action>
<action name="actionConfiguration_de_Pamhyr">
<property name="text">
<string>Configuration de Pamhyr</string>
</property>
</action>
<action name="actionQuitter">
<property name="icon">
<iconset>
<normaloff>../ressources/menu/gtk-quit.png</normaloff>../ressources/menu/gtk-quit.png</iconset>
</property>
<property name="text">
<string>Quitter</string>
</property>
<property name="shortcut">
<string>Ctrl+F4</string>
</property>
</action>
<action name="actionEditer_le_r_seau">
<property name="text">
<string> Éditer le réseau</string>
</property>
</action>
<action name="action_diter_la_g_om_trie">
<property name="text">
<string>Éditer la géométrie </string>
</property>
</action>
<action name="actionImporter_la_g_om_trie">
<property name="text">
<string>Importer une géométrie</string>
</property>
</action>
<action name="actionExporter_la_g_om_trie">
<property name="text">
<string>Exporter la géométrie</string>
</property>
</action>
<action name="actionLancer_le_mailleur_externe">
<property name="text">
<string>Lancer le mailleur externe</string>
</property>
</action>
<action name="actionChoix_du_maileur_par_bief">
<property name="text">
<string>Choix du mailleur par bief</string>
</property>
</action>
<action name="actionVisulaiser_la_g_om_trie_maill_e">
<property name="text">
<string>Visualiser la géométrie maillée</string>
</property>
</action>
<action name="actionExporter_le_maillage">
<property name="text">
<string>Exporter le maillage </string>
</property>
</action>
<action name="actionSupprimer_le_maillage_du_bief_courant">
<property name="text">
<string>Supprimer le maillage du bief courant</string>
</property>
</action>
<action name="actionSupprimer_l_ensemble_du_maillage">
<property name="text">
<string>Supprimer l'ensemble des maillages</string>
</property>
</action>
<action name="actionAbscisse_Cote">
<property name="text">
<string>Abscisse - Cote</string>
</property>
</action>
<action name="actionXYZ">
<property name="text">
<string>XYZ</string>
</property>
</action>
<action name="actionParam_tres_num_riques_du_solveur_MAGE">
<property name="text">
<string>Paramètres numériques du solveur MAGE</string>
</property>
</action>
<action name="actionConditions_aux_limites_Apports_lat_raux">
<property name="text">
<string>Conditions aux Limites &amp; Apports Ponctuels</string>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
</action>
<action name="actionConditions_initiales">
<property name="text">
<string>Conditions initiales</string>
</property>
</action>
<action name="actionActiver_D_sactiver_l_export">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Activer/Désactiver l'export des conditions initiales</string>
</property>
</action>
<action name="actionImporter_l_tat_final_comme_tat_initial">
<property name="text">
<string>Importer l'état final comme état initial</string>
</property>
</action>
<action name="action_dition_des">
<property name="text">
<string>Édition des Frottements</string>
</property>
</action>
<action name="action_dition_des_Apports_Lat_raux">
<property name="text">
<string>Édition des Apports Latéraux</string>
</property>
</action>
<action name="action_dition_des_d_versements">
<property name="text">
<string>Édition des déversements</string>
</property>
</action>
<action name="action_dition_des_Tron_ons">
<property name="text">
<string>Édition des Tronçons</string>
</property>
</action>
<action name="action_dition_des_ouvrages_en_travers">
<property name="text">
<string>Édition des ouvrages en travers</string>
</property>
</action>
<action name="actionSolveur_MAGE">
<property name="text">
<string>Solveur MAGE</string>
</property>
</action>
<action name="actionStop_solveur">
<property name="text">
<string>Stop Solveur</string>
</property>
</action>
<action name="actionAfficher_les_listings">
<property name="text">
<string>Afficher les listings</string>
</property>
</action>
<action name="actionGestion_de_r_pertoire_de_simulation">
<property name="text">
<string>Gestion des répertoires de simulation</string>
</property>
</action>
<action name="actionOuvrir">
<property name="text">
<string>Ouvrir</string>
</property>
</action>
<action name="actionFermer_2">
<property name="text">
<string>Fermer</string>
</property>
</action>
<action name="actionHydrogramme">
<property name="text">
<string>Hydrogramme</string>
</property>
<property name="font">
<font>
<family>Ubuntu</family>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
</action>
<action name="actionLimnigramme">
<property name="text">
<string>Limnigramme</string>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
</action>
<action name="actionLigne_d_eau">
<property name="text">
<string>Ligne d'eau</string>
</property>
</action>
<action name="actionLigne_d_eau_finale">
<property name="text">
<string>Ligne d'eau finale</string>
</property>
</action>
<action name="actionLigne_d_eau_enveloppe">
<property name="text">
<string>Ligne d'eau enveloppe</string>
</property>
</action>
<action name="actionVitesse_Pk_t_fix">
<property name="text">
<string>Vitesse(Pk) à t fixé</string>
</property>
</action>
<action name="actionVitesse_t_Pk_fix">
<property name="text">
<string>Vitesse(t) à Pk fixé</string>
</property>
</action>
<action name="actionCharge_hydraulique_Pk_t_fix">
<property name="text">
<string>Charge hydraulique(Pk) à t fixé</string>
</property>
</action>
<action name="actionCharge_hydraulique_t_Pk_fix">
<property name="text">
<string>Charge hydraulique(t) à Pk fixé</string>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
</action>
<action name="actionVoir_l_animation_MAGE">
<property name="text">
<string>Voir l'animation (MAGE)</string>
</property>
</action>
<action name="actionAutres_r_sulats_MAGE">
<property name="text">
<string>Autres résulats MAGE</string>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
</action>
<action name="actionCartographier_le_bief_courant">
<property name="text">
<string>Cartographier le bief courant</string>
</property>
</action>
<action name="actionAide_de_PAMHYR">
<property name="text">
<string>Aide de PAMHYR</string>
</property>
</action>
<action name="actionAide_de_MAGE">
<property name="text">
<string>Aide de MAGE</string>
</property>
</action>
<action name="actionA_propos">
<property name="text">
<string>À propos</string>
</property>
</action>
<action name="actionouvrir">
<property name="icon">
<iconset>
<normaloff>../ressources/menu/open.png</normaloff>../ressources/menu/open.png</iconset>
</property>
<property name="text">
<string>ouvrir</string>
</property>
<property name="toolTip">
<string>Ouvrir une étude</string>
</property>
</action>
<action name="actionenregistrer_etude_en_cours">
<property name="icon">
<iconset>
<normaloff>ressources/save.png</normaloff>ressources/save.png</iconset>
</property>
<property name="text">
<string>enregistrer_etude_en_cours</string>
</property>
<property name="toolTip">
<string>Enrégistrer étude en cours (Ctrl+S)</string>
</property>
<property name="shortcut">
<string/>
</property>
</action>
<action name="actionfermer_etude_en_cours">
<property name="icon">
<iconset>
<normaloff>ressources/gtk-close.png</normaloff>ressources/gtk-close.png</iconset>
</property>
<property name="text">
<string>fermer_etude_en_cours</string>
</property>
<property name="toolTip">
<string>Fermer étude en cours (Ctrl+F)</string>
</property>
<property name="shortcut">
<string>Ctrl+F</string>
</property>
</action>
<action name="actionquitter_application">
<property name="icon">
<iconset>
<normaloff>ressources/exit_bis.png</normaloff>ressources/exit_bis.png</iconset>
</property>
<property name="text">
<string>quitter_application</string>
</property>
<property name="toolTip">
<string>Quitter l'application (Ctrl+Q)</string>
</property>
<property name="shortcut">
<string>Ctrl+Q</string>
</property>
</action>
<action name="actionlancer_solveur">
<property name="icon">
<iconset>
<normaloff>ressources/gtk-execute.png</normaloff>ressources/gtk-execute.png</iconset>
</property>
<property name="text">
<string>lancer_solveur</string>
</property>
<property name="toolTip">
<string>Lancer le solveur pour réaliser une simulation</string>
</property>
<property name="shortcut">
<string>Ctrl+X</string>
</property>
</action>
<action name="actioninterrompt_simulation_en_cours">
<property name="enabled">
<bool>false</bool>
</property>
<property name="icon">
<iconset>
<normaloff>ressources/gtk-stop.png</normaloff>ressources/gtk-stop.png</iconset>
</property>
<property name="text">
<string>interrompt_simulation_en_cours</string>
</property>
<property name="toolTip">
<string>Interrompt la simulation en cours</string>
</property>
<property name="shortcut">
<string>Ctrl+C</string>
</property>
</action>
<action name="actionlancer_mailleur_externe">
<property name="icon">
<iconset>
<normaloff>ressources/gnome-stock-insert-table.png</normaloff>ressources/gnome-stock-insert-table.png</iconset>
</property>
<property name="text">
<string>lancer_mailleur_externe</string>
</property>
<property name="toolTip">
<string>Lancer le mailleur externe sur la géométrie du bief courant</string>
</property>
</action>
<action name="actionafficher_listings_simulation">
<property name="enabled">
<bool>false</bool>
</property>
<property name="icon">
<iconset>
<normaloff>ressources/gnome-stock-edit.png</normaloff>ressources/gnome-stock-edit.png</iconset>
</property>
<property name="text">
<string>afficher_listings_simulation</string>
</property>
<property name="toolTip">
<string>Aficher les listings de la simulation courante</string>
</property>
</action>
<action name="actionReseau">
<property name="icon">
<iconset>
<normaloff>ressources/reseau3_24.png</normaloff>ressources/reseau3_24.png</iconset>
</property>
<property name="text">
<string>Réseau</string>
</property>
<property name="toolTip">
<string>Ouvrir l'éditeur de la topologie du réseau</string>
</property>
</action>
<action name="actionGeometrie">
<property name="icon">
<iconset>
<normaloff>ressources/geometrie0.png</normaloff>ressources/geometrie0.png</iconset>
</property>
<property name="text">
<string>Géométrie</string>
</property>
<property name="toolTip">
<string>Ouvrir l'éditeur de géométrie</string>
</property>
</action>
<action name="actionMaillage">
<property name="icon">
<iconset>
<normaloff>ressources/mailles-50.png</normaloff>ressources/mailles-50.png</iconset>
</property>
<property name="text">
<string>Maillage</string>
</property>
<property name="toolTip">
<string>Afficher le maillage</string>
</property>
</action>
<action name="actionCond_Limites">
<property name="text">
<string>Cond. Limites</string>
</property>
<property name="toolTip">
<string>Ouvir l'éditeur des Conditions aux Limites &amp; Apports Ponctuels</string>
</property>
<property name="font">
<font/>
</property>
</action>
<action name="actionApp_Lat_raux">
<property name="text">
<string>App. Latéraux</string>
</property>
<property name="toolTip">
<string>Ouvrir l'éditeur des Apports Latéraux Distribués</string>
</property>
</action>
<action name="actionDeversements">
<property name="text">
<string>Déversements</string>
</property>
<property name="toolTip">
<string>Ouvrir l'éditeur des Déversements Latéraux</string>
</property>
</action>
<action name="actionTroncons">
<property name="text">
<string>Tronçons</string>
</property>
<property name="toolTip">
<string>Ouvrir l'éditeur des tronçons pour les frottements et Apports Latéraux</string>
</property>
</action>
<action name="actionFrottements">
<property name="text">
<string>Frottements</string>
</property>
<property name="toolTip">
<string>Ouvrir l'éditeur des frottements au fond</string>
</property>
</action>
<action name="actionOuvrages">
<property name="text">
<string>Ouvrages</string>
</property>
<property name="toolTip">
<string>Ouvrir l'éditeur des ouvrages (seuils, vannes, etc.), singularités et pompes</string>
</property>
</action>
</widget>
<resources/>
<connections>
<connection>
<sender>MainWindow</sender>
<signal>customContextMenuRequested(QPoint)</signal>
<receiver>MainWindow</receiver>
<slot>showMaximized()</slot>
<hints>
<hint type="sourcelabel">
<x>346</x>
<y>301</y>
</hint>
<hint type="destinationlabel">
<x>346</x>
<y>301</y>
</hint>
</hints>
</connection>
</connections>
</ui>
+247
View File
@@ -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>
+107
View File
@@ -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>
+63
View File
@@ -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>
+19
View File
@@ -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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 531 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 904 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 672 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 651 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 661 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 B

+1
View File
@@ -0,0 +1 @@
゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 672 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 779 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 828 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

+1
View File
@@ -0,0 +1 @@
゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚
+1
View File
@@ -0,0 +1 @@
゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 927 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 669 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 975 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 985 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Loaded 100 of 138 files, more files were not shown because too many files have changed in this diff. Show more