diff --git a/BEdit/.gitignore b/BEdit/.gitignore new file mode 100644 index 0000000..4dde1fc --- /dev/null +++ b/BEdit/.gitignore @@ -0,0 +1,10 @@ +.venv/ +__pycache__/ +*.py[cod] +*.egg-info/ +build/ +dist/ +.pytest_cache/ +.idea/ +.vscode/* +!.vscode/tasks.json diff --git a/BEdit/.vscode/tasks.json b/BEdit/.vscode/tasks.json new file mode 100644 index 0000000..5cdaa1b --- /dev/null +++ b/BEdit/.vscode/tasks.json @@ -0,0 +1,121 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Qt: Open Main Window in Designer", + "type": "shell", + "command": "pyside6-designer", + "args": [ + "${workspaceFolder}/ui/main_window.ui" + ], + "options": { + "cwd": "${workspaceFolder}", + "env": { + "QT_QPA_PLATFORMTHEME" :"qt6ct", + "QT_QPA_PLATFORM": "xcb" + } + }, + "problemMatcher": [], + "presentation": { + "reveal": "always", + "panel": "dedicated" + } + }, + { + "label": "Qt: Open Settings Dialog in Designer", + "type": "shell", + "command": "pyside6-designer", + "args": [ + "${workspaceFolder}/ui/settings_dialog.ui" + ], + "options": { + "cwd": "${workspaceFolder}", + "env": { + "QT_QPA_PLATFORMTHEME": "qt6ct", + "QT_QPA_PLATFORM": "xcb" + } + }, + "problemMatcher": [], + "presentation": { + "reveal": "always", + "panel": "dedicated" + } + }, + { + "label": "Qt: Compile Resources to Python", + "type": "shell", + "command": "pyside6-rcc", + "args": [ + "${workspaceFolder}/resources/resources.qrc", + "-o", + "${workspaceFolder}/src/bedit/resources_rc.py" + ], + "options": { + "cwd": "${workspaceFolder}" + }, + "problemMatcher": [], + "presentation": { + "reveal": "silent", + "panel": "shared", + "clear": true + } + }, + { + "label": "Qt: Compile UI to Python", + "type": "shell", + "command": "pyside6-uic", + "args": [ + "--from-imports", + "${workspaceFolder}/ui/main_window.ui", + "-o", + "${workspaceFolder}/src/bedit/ui_main_window.py" + ], + "options": { + "cwd": "${workspaceFolder}" + }, + "problemMatcher": [], + "presentation": { + "reveal": "silent", + "panel": "shared" + } + }, + { + "label": "Qt: Compile Settings UI to Python", + "type": "shell", + "command": "pyside6-uic", + "args": [ + "--from-imports", + "${workspaceFolder}/ui/settings_dialog.ui", + "-o", + "${workspaceFolder}/src/bedit/ui_settings_dialog.py" + ], + "options": { + "cwd": "${workspaceFolder}" + }, + "problemMatcher": [], + "presentation": { + "reveal": "silent", + "panel": "shared" + } + }, + { + "label": "Qt: Build Designer Files", + "dependsOrder": "sequence", + "dependsOn": [ + "Qt: Compile Resources to Python", + "Qt: Compile UI to Python", + "Qt: Compile Settings UI to Python" + ], + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "reveal": "silent", + "panel": "shared", + "clear": true + } + } + ] +} diff --git a/BEdit/README.md b/BEdit/README.md new file mode 100644 index 0000000..aa62d5a --- /dev/null +++ b/BEdit/README.md @@ -0,0 +1,102 @@ +# BEdit Qt starter + +A small desktop application scaffold using Python and PySide6 (the official Qt +bindings). Its interface is maintained in Qt Designer and it includes a main +window, menu bar, blank central workspace, common keyboard shortcuts, and +persisted window geometry. The application forces Qt's light Fusion palette, so +it remains light even when the operating-system theme is dark. + +## Run it + +Python 3.10 or newer is required. From this directory: + +```bash +python -m venv .venv +``` + +Activate the environment: + +- Windows PowerShell: `.venv\Scripts\Activate.ps1` +- Windows Command Prompt: `.venv\Scripts\activate.bat` +- Linux/macOS: `source .venv/bin/activate` + +Then install and launch: + +```bash +python -m pip install --upgrade pip +python -m pip install -e ".[dev]" +python -m bedit +``` + +After installation, the `bedit` command also launches the application. + +## Project layout + +```text +. +├── pyproject.toml dependencies, package metadata, and `bedit` command +├── README.md +├── ui/main_window.ui editable Qt Designer source +└── src/bedit + ├── __main__.py supports `python -m bedit` + ├── app.py starts Qt and applies the forced light palette + ├── main_window.py behavior and signal connections + └── ui_main_window.py generated from the Designer file; do not hand-edit +``` + +## Designing the UI further + +The project now uses Qt Designer. It is included with PySide6 on most +installations. Open the existing form with: + +```bash +pyside6-designer ui/main_window.ui +``` + +In Designer, use the Widget Box to add controls, the Object Inspector to select +them, and the Property Editor to name and configure them. Always put widgets in +a layout (horizontal, vertical, grid, or form) so the window resizes correctly. + +Save the form, close the running application if necessary, then regenerate its +Python wrapper: + +```bash +pyside6-uic ui/main_window.ui -o src/bedit/ui_main_window.py +``` + +Do not hand-edit the generated Python file; change the `.ui` file and regenerate +it. Add behavior and signal connections in `main_window.py`. Widget names from +Designer are available there through `self.ui`, such as `self.ui.editor`. + +In VS Code, the same commands are available through **Terminal → Run Task**: + +- **Qt: Open Main Window in Designer** opens the form for visual editing. +- **Qt: Build Designer Files** compiles resources and then regenerates the UI + wrapper. It is the default build task, available with `Ctrl+Shift+B`. +- The separate resource and UI compilation tasks remain available when only one + generated file needs rebuilding. + +## A sensible next design pass + +1. Sketch the main tasks and screens before choosing widgets. +2. Turn each major area into its own widget class in `src/bedit/widgets/`. +3. Use a `QStackedWidget` for page-like navigation, or `QDockWidget` for movable + tool panels in an editor-style application. +4. Use reusable `QAction` objects for menu commands and any future toolbars. +5. Keep file/data operations outside widget classes as the application grows. +6. Add icons through a Qt resource file (`.qrc`) so packaging is reliable. +7. Test on Windows regularly; fonts, scaling, and native dialogs vary by platform. + +## Optional tools + +You do not need another GUI framework. Useful additions are: + +- **Qt Designer** for drag-and-drop form layout. +- **Ruff** for formatting/linting (`ruff check .`). +- **pytest-qt** later for GUI interaction tests. +- **PyInstaller** or **Nuitka** later to produce a Windows `.exe`. + +The light colors are defined in `apply_light_theme()` in `src/bedit/app.py`. +Adjust that palette if you want different light colors. Avoid a large stylesheet +unless the application needs highly customized controls; palettes preserve more +of Qt's standard behavior. diff --git a/BEdit/pyproject.toml b/BEdit/pyproject.toml new file mode 100644 index 0000000..ff845ed --- /dev/null +++ b/BEdit/pyproject.toml @@ -0,0 +1,30 @@ +[build-system] +requires = ["setuptools>=69"] +build-backend = "setuptools.build_meta" + +[project] +name = "bedit" +version = "0.1.0" +description = "A starter Qt desktop application" +readme = "README.md" +requires-python = ">=3.10" +dependencies = [ + "PySide6>=6.7,<7", +] + +[project.optional-dependencies] +dev = [ + "pytest>=8", + "ruff>=0.5", +] + +[project.gui-scripts] +bedit = "bedit.app:main" + +[tool.setuptools.packages.find] +where = ["src"] + +[tool.ruff] +line-length = 100 +target-version = "py310" + diff --git a/BEdit/resources/icons/AUTHORS b/BEdit/resources/icons/AUTHORS new file mode 100644 index 0000000..d30e6a1 --- /dev/null +++ b/BEdit/resources/icons/AUTHORS @@ -0,0 +1,24 @@ +Oxygen Icon Theme has been developed by The Oxygen Team. + +Art Directors: +Nuno F. Pinheiro +David Vignoni + +Naming Coordinator +Jakob Petsovits + +Designers: +David J. Miller +David Vignoni +Johann Ollivier Lapeyre +Kenneth Wimer +Nuno F. Pinheiro +Riccardo Iaconelli +David J. Miller + +Thanks to: +Lee Olson: Contributed drawing used in application-x-bittorent icon. +Marco Aurélio "Coré": Improved audio-input-microphone icon. +Matthias Kretz: Contributed "audio-input-line" device icon. +Mauricio Piacentini : game icons mashup +Erlend Hamberg: "text-x-haskell" mimetype icon. \ No newline at end of file diff --git a/BEdit/resources/icons/COPYING b/BEdit/resources/icons/COPYING new file mode 100644 index 0000000..338cbf7 --- /dev/null +++ b/BEdit/resources/icons/COPYING @@ -0,0 +1,216 @@ +The Oxygen Icon Theme + Copyright (C) 2007 Nuno Pinheiro + Copyright (C) 2007 David Vignoni + Copyright (C) 2007 David Miller + Copyright (C) 2007 Johann Ollivier Lapeyre + Copyright (C) 2007 Kenneth Wimer + Copyright (C) 2007 Riccardo Iaconelli + + +and others + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see . + +Clarification: + + The GNU Lesser General Public License or LGPL is written for + software libraries in the first place. We expressly want the LGPL to + be valid for this artwork library too. + + KDE Oxygen theme icons is a special kind of software library, it is an + artwork library, it's elements can be used in a Graphical User Interface, or + GUI. + + Source code, for this library means: + - where they exist, SVG; + - otherwise, if applicable, the multi-layered formats xcf or psd, or + otherwise png. + + The LGPL in some sections obliges you to make the files carry + notices. With images this is in some cases impossible or hardly useful. + + With this library a notice is placed at a prominent place in the directory + containing the elements. You may follow this practice. + + The exception in section 5 of the GNU Lesser General Public License covers + the use of elements of this art library in a GUI. + + kde-artists [at] kde.org + +----- + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/BEdit/resources/icons/README b/BEdit/resources/icons/README new file mode 100644 index 0000000..004a5c9 --- /dev/null +++ b/BEdit/resources/icons/README @@ -0,0 +1 @@ +Oxygen Icons is a freedesktop.org compatible icon theme originally developed for the KDE Plasma desktop environment in combination with the Oxygen Style. It features smooth gradients, soft shadows, and a slightly glossy look. \ No newline at end of file diff --git a/BEdit/resources/icons/document-new.png b/BEdit/resources/icons/document-new.png new file mode 100644 index 0000000..3d0f5cc Binary files /dev/null and b/BEdit/resources/icons/document-new.png differ diff --git a/BEdit/resources/icons/document-open.png b/BEdit/resources/icons/document-open.png new file mode 100644 index 0000000..8ba5441 Binary files /dev/null and b/BEdit/resources/icons/document-open.png differ diff --git a/BEdit/resources/icons/document-save-as.png b/BEdit/resources/icons/document-save-as.png new file mode 100644 index 0000000..9695a56 Binary files /dev/null and b/BEdit/resources/icons/document-save-as.png differ diff --git a/BEdit/resources/icons/document-save.png b/BEdit/resources/icons/document-save.png new file mode 100644 index 0000000..7fa489c Binary files /dev/null and b/BEdit/resources/icons/document-save.png differ diff --git a/BEdit/resources/icons/edit-copy.png b/BEdit/resources/icons/edit-copy.png new file mode 100644 index 0000000..d4180c6 Binary files /dev/null and b/BEdit/resources/icons/edit-copy.png differ diff --git a/BEdit/resources/icons/edit-cut.png b/BEdit/resources/icons/edit-cut.png new file mode 100644 index 0000000..0732328 Binary files /dev/null and b/BEdit/resources/icons/edit-cut.png differ diff --git a/BEdit/resources/icons/edit-paste.png b/BEdit/resources/icons/edit-paste.png new file mode 100644 index 0000000..6788b02 Binary files /dev/null and b/BEdit/resources/icons/edit-paste.png differ diff --git a/BEdit/resources/icons/edit-redo.png b/BEdit/resources/icons/edit-redo.png new file mode 100644 index 0000000..d759f13 Binary files /dev/null and b/BEdit/resources/icons/edit-redo.png differ diff --git a/BEdit/resources/icons/edit-undo.png b/BEdit/resources/icons/edit-undo.png new file mode 100644 index 0000000..c893a1a Binary files /dev/null and b/BEdit/resources/icons/edit-undo.png differ diff --git a/BEdit/resources/resources.qrc b/BEdit/resources/resources.qrc new file mode 100644 index 0000000..20135ca --- /dev/null +++ b/BEdit/resources/resources.qrc @@ -0,0 +1,13 @@ + + + icons/edit-paste.png + icons/edit-redo.png + icons/edit-cut.png + icons/edit-copy.png + icons/edit-undo.png + icons/document-save.png + icons/document-save-as.png + icons/document-open.png + icons/document-new.png + + diff --git a/BEdit/src/bedit/__init__.py b/BEdit/src/bedit/__init__.py new file mode 100644 index 0000000..0fafd12 --- /dev/null +++ b/BEdit/src/bedit/__init__.py @@ -0,0 +1,4 @@ +"""BEdit desktop application.""" + +__version__ = "0.1.0" + diff --git a/BEdit/src/bedit/__main__.py b/BEdit/src/bedit/__main__.py new file mode 100644 index 0000000..5127970 --- /dev/null +++ b/BEdit/src/bedit/__main__.py @@ -0,0 +1,6 @@ +from bedit.app import main + + +if __name__ == "__main__": + raise SystemExit(main()) + diff --git a/BEdit/src/bedit/app.py b/BEdit/src/bedit/app.py new file mode 100644 index 0000000..6024441 --- /dev/null +++ b/BEdit/src/bedit/app.py @@ -0,0 +1,51 @@ +import sys + +from PySide6.QtCore import QCoreApplication, Qt +from PySide6.QtGui import QColor, QPalette, QIcon +from PySide6.QtWidgets import QApplication, QStyleFactory + +from bedit.main_window import MainWindow + + +def apply_light_theme(app: QApplication) -> None: + """Use a predictable light Qt theme, independent of the desktop theme.""" + app.setStyle(QStyleFactory.create("Fusion")) + + palette = QPalette() + palette.setColor(QPalette.ColorRole.Window, QColor(240, 240, 240)) + palette.setColor(QPalette.ColorRole.WindowText, Qt.GlobalColor.black) + palette.setColor(QPalette.ColorRole.Base, Qt.GlobalColor.white) + palette.setColor(QPalette.ColorRole.AlternateBase, QColor(233, 233, 233)) + palette.setColor(QPalette.ColorRole.ToolTipBase, Qt.GlobalColor.white) + palette.setColor(QPalette.ColorRole.ToolTipText, Qt.GlobalColor.black) + palette.setColor(QPalette.ColorRole.Text, Qt.GlobalColor.black) + palette.setColor(QPalette.ColorRole.Button, QColor(240, 240, 240)) + palette.setColor(QPalette.ColorRole.ButtonText, Qt.GlobalColor.black) + palette.setColor(QPalette.ColorRole.BrightText, Qt.GlobalColor.red) + palette.setColor(QPalette.ColorRole.Link, QColor(0, 102, 204)) + palette.setColor(QPalette.ColorRole.Highlight, QColor(0, 120, 215)) + palette.setColor(QPalette.ColorRole.HighlightedText, Qt.GlobalColor.white) + palette.setColor( + QPalette.ColorGroup.Disabled, + QPalette.ColorRole.Text, + QColor(109, 109, 109), + ) + palette.setColor( + QPalette.ColorGroup.Disabled, + QPalette.ColorRole.ButtonText, + QColor(109, 109, 109), + ) + app.setPalette(palette) + + +def main() -> int: + app = QApplication(sys.argv) + app.setApplicationName("BEdit") + app.setApplicationDisplayName("BEdit") + app.setOrganizationName("BEdit") + QCoreApplication.setApplicationVersion("0.1.0") + + apply_light_theme(app) + window = MainWindow() + window.show() + return app.exec() diff --git a/BEdit/src/bedit/main_window.py b/BEdit/src/bedit/main_window.py new file mode 100644 index 0000000..79325b3 --- /dev/null +++ b/BEdit/src/bedit/main_window.py @@ -0,0 +1,58 @@ +from PySide6.QtCore import QSettings, Qt, Slot +from PySide6.QtGui import QCloseEvent +from PySide6.QtWidgets import QMainWindow, QMessageBox + +from bedit.settings_dialog import SettingsDialog +from bedit.ui_main_window import Ui_MainWindow + + +class MainWindow(QMainWindow): + """Application shell for the window laid out in Qt Designer.""" + + def __init__(self) -> None: + super().__init__() + self.ui = Ui_MainWindow() + self.ui.setupUi(self) + self.settings = QSettings() + + self._populate_view_menu() + self.ui.actionExit.triggered.connect(self.close) + self.ui.actionSettings.triggered.connect(self.show_settings) + self.ui.actionAbout.triggered.connect(self.show_about) + self.ui.actionAboutQt.triggered.connect(lambda: QMessageBox.aboutQt(self, "About Qt Framework")) + self._restore_window_geometry() + self.ui.leftDockHost.setWindowFlags(Qt.WindowType.Widget) + self.ui.leftDockHost.show() + self.ui.panel_libraries.show() + self.ui.workspaceSplitter.setSizes([280, 720]) + + def _populate_view_menu(self) -> None: + """Add checked show/hide actions for panels and toolbars.""" + panels = (self.ui.panel_libraries,) + for panel in panels: + self.ui.menuPanels.addAction(panel.toggleViewAction()) + + toolbars = (self.ui.fileToolbar, self.ui.editToolbar) + for toolbar in toolbars: + self.ui.menuToolbars.addAction(toolbar.toggleViewAction()) + + def _restore_window_geometry(self) -> None: + geometry = self.settings.value("window/geometry") + if geometry is not None: + self.restoreGeometry(geometry) + + @Slot() + def show_settings(self) -> None: + SettingsDialog(self).exec() + + @Slot() + def show_about(self) -> None: + QMessageBox.about( + self, + "About BEdit", + "

BEdit

A starter desktop application built with Python and Qt.

", + ) + + def closeEvent(self, event: QCloseEvent) -> None: # noqa: N802 (Qt API name) + self.settings.setValue("window/geometry", self.saveGeometry()) + event.accept() diff --git a/BEdit/src/bedit/resources_rc.py b/BEdit/src/bedit/resources_rc.py new file mode 100644 index 0000000..f652626 --- /dev/null +++ b/BEdit/src/bedit/resources_rc.py @@ -0,0 +1,974 @@ +# Resource object code (Python 3) +# Created by: object code +# Created by: The Resource Compiler for Qt version 6.11.1 +# WARNING! All changes made in this file will be lost! + +from PySide6 import QtCore + +qt_resource_data = b"\ +\x00\x00\x05\x82\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ +\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\ +\x00\x00\x00\x09pHYs\x00\x00\x03v\x00\x00\x03v\ +\x01}\xd5\x82\xcc\x00\x00\x00\x19tEXtSof\ +tware\x00www.inksca\ +pe.org\x9b\xee<\x1a\x00\x00\x04\xffID\ +ATx\xda\xbd\x95[hTW\x14\x86\xbf=s\xe6\ +\x96I\x1ac\x1c\x93\x0cTB\xd3H\xcc\x93\xd8V\xa5\ +\x90\xa0\x14)\x81B\x85<\x14\xdf\xa4\x17D)\xd8\x22\ +\xda\x82\xa4\x08\x8d\xad\xc6K\x0cDQ\xdbZ\xa4\x88\xd0\ +\x17\xa1O-A\xbcTm!\x16\xa57\x94\x18\x9dz\ +\xc9\xe4b.\x93\xb9\x9e9gfw\xdc8\x19=\x99\ +L\x0e\xa1\xf4\x83\xc5\xde\xfbp\x98\xff_k\xeduF\ +\x93R\xf2_\x22z\xc52*\xd8\x8dA\x0b&\x958\ +)Cc\x9c$\x17\xa8\xa2Kn\x92\x03P@\x83\x02\ +B\x88z\xa0\x9e\x85\xe0Gc7\xbb(g]km\ +\xabk\xc3\x8b\x1bh\xa8h\x00\x01\x83\xd3\x83\x8b\xfa\x1e\ +\xf45\x5c\x1e\xbc\xfc\x9e8,~\xe0W\xda\xe5\xf72\ +c1\xa0\xa8\xd7u\xfdB*\xa5\x83\x00\x81\xb0\xac\xca\ +%j\xa5\xb0\xcfd3\xb4\xfd\xd4F\x7f\xbc\x9f\xed\xaf\ +n\xa7\xe9\x85&\xf5\xecq\xf21\x08\xa8\xad\xa8e\xf3\ +\x8a\xcd\xac\xad[+z\xfe\xecy[_\xa7_\x10'\ +\xc4\x1br\x8b44,<\x11\x8f\xc6b8\x1c\x02!\ +\x8a\x04\xc0\xd3}\x9e\x0f\xae\xbe\xcf\xd5\xc4U65m\ +\xc2\xeb\xf5\xf2\xc0\x081=6\xce\xc1\xd7z\x01\xf8\xf4\ +\xb7\x0f\xa9\x0aTS\xe6\xf7\xd2\xbe\xbc\x9d\xb3\x7f\x9fm\ +\x91\x11yF\x08\xf1\xce,\x03B@A\xdc\xf1dU\ +g o\xa2\xb0\x07nEns\xee\xfe9\x82\xcb\x82\ +h\xe5\x1a\xe1t\x88\x0a\x0d&\xa3\xa3\xe4\x99\x8a\x0e\xe2\ +\xa9\x8e\x12\x03|e\x1a\xc1\xba \x8f\x22\x8f6\xd2A\ +\x83\x86\x95\xa7\xc2\xb3*\x00`\xd9\x03\x1c\xf9\xbd\x1b\xe9\ +\x95\xf8\x17\xfby\xa8\x87X\xe2\x06\xb7\x13\xe2\x89q\xf2\ +$\x93\x0f\xc8\x92@\x97\x10\x05\xca]~X\x84\x0b\xc9\ +\xde\xd9\x15@\x14/?\x80\xe5l\x98&\x17\xc3\x17!\ +\x08\x03c\x03<\x0e\xffC\xd0[F\xb5K\x90\x0c\x1b\ +\xf0\x16\x8a\xd0\xad\xfbD\xa2a&\x0dIXO0R\ +\x9b\x06\x09dx\xbdX\x0b\xe6\xea\xbdZ)\x9c\xc9d\ +2D\x1dQH\x83\xbc#\x19\xdf\x95\xa2\x18\x97>\x9e\ +\xe6Y^8$\xe0%`\x02\xff\x1c-\x10\xf3\x9b\x00\ +\x90\x12Mj\x90\x05\x04\xb6q\x0a\xc0\x05\xf8\xf1\x16i\ +\x01\xf6\x0c\xa8\xcb\xe9\xc0\xe3\xf3\x80\x0fh\x84\xea\xe3\x82\ +\x80\x1b\x02\x1e0\x87\xe1\x97\x1d\x12\x807{\x04\x15A\ +\x18I\xc3\x98\x0e\xce& \x098I,\xa4\x02*x\ +j`\x85g\x05c\xc6\x98\xcaH\xbc\x0c~?,\xf5\ +\x81\xe1g\x86\x9a\x06X\xbc\x1cd\x02\x12I\xb87\x85\ +z\x9fQn.\xa8\x02\xf9\xd04\x8d\xad\x8b\xb6r-\ +u\x0d3k\x12\x89\xc1\x84\x04_\x06\xb4,3L\x00\ +\xf1\x08\x8c\xe8\xf0(\x06i\x03\x00\xc9%N\xda\xad@\ +Qc\x1e\x8f\x87\x96\xe6\x16V^Y\xc9\xf5\xaa\xeb\x98\ +\x09\x18\x9e\x02\xd2P\x96a\x86Q\x132S0\xa4\xc3\ +h\x0a\xf0\x02w\xe8\xe7G~.R\x01k\x94\xaeJ\ +ee%\x9d\xd5\x9dl\x8bn\xe3n\xc5]R)\xb8\ +?\x09~\x01ug\x04\x0e\xc0t\xc2T\x12\xd2\x1e\xa0\ +\x12x\xc8 ;\xf9\x04\x98\xd0\x98\x85\x12\xb3\x15\x00n\ +\xb7\x9b\xd5\xaf\xac\xa6\xfbJ7{&\xf7pc\xc9\x0d\ +\xb2\x1e\x88N\xe4\xc2\x098\xf2\xb3\x07\x1a\x1a\xe6Ms\ +\x80\x0ev`r\x1dH\x17m\x81\x0a\x1b\xe2\x80\xba\x88\ +\xe5\xe5\xe5\xb4\xb6\xb4r\xe8\xc6!\xfa\xfe\xe8\xe3|\xe0\ +<\xb7kn\xa3gu\x5cN\x17n\xd3M\xfdh=\ +\x1bc\x1b\xe9\xd8\xd9q\x0c\xb8\x04\xc4e\x8e\x92\x97\x90\ +\x12\xe2\xc5L\xacY\xb3\x86\xc6\xc6F\xda\xee\xb5\x11\x0a\ +\x85\x88\xc7\xe3\xaaB>\x9f\x8f\xba`\x1d\xcd\xcd\xcdt\ +l\xe9\xf8\x0b\x88\xca\x1c\x00\xc5[P\x88Y&,<\ +kH\xfd\x13\xd6\xd6\xd6\x12\x08\x04X\xb5j\xd5s\xef\ +8\x9dN\x5c.\x17\x80\x91\x17/n\xc0\x9a9\x94\x12\ +\xb5>S\xd5\xc8\x89\xa9\xcc\xed0\xe7\x14(\x8a\x97\xbe\ +\xa4\x09+*\xd9\xc2\x0b\xf3\x18\xb0\x0a\xc3|\xa2\x16\xf1\ +\x82h6\x9b}n\x05\x10\x0e\xa7=\x03\xc22\x8e\xb3\ +(a,\x93\xc9(\xd1t:\x8da\x18O\xce*\x00\ +\xe2i3\x06$\xedV\xc0\xb6h\x9e\x9c\x90\x12\xd5u\ +]M@$\x12\xc9\xad\x09\xf5{\x15\x95U\xc6\x97\xfb\ +;{\x80\xfe\x92\x06\x94\xf8\x1c\x82%PY\x9b\xa6I\ +*\x95\x22\x1c\x1efdd\x18\x8f\xc7\xcb\xd2\x9a\xa58\ +\x1dN\xd9\xb9o\xdf\xf1\xd3_\x9f\xfaLJ\x99-e\ +\xa0\xa8x\xe9\x16\x14\x0c\xe42WY\x0f\x0d\x0d\xb1~\ +\xfd:2\x19S\x99\xd9{\xa0\xeb\xf47'\x8e\x7f\xa4\ +\xc4m]B\x98w\xe6\xad\xd9\xe7\xcb?>>\x81\xdb\ +\xed\x99\x11?\xd0s\xe4\xdc\xc9\xde\xa3\xef\xe6g\xdf\xf6\ +\x14\xd8G\xddzU\xfeX,\xc6\xf4\xf44\xc1`p\ +F\xbc\xf7pw\xbbE\xdc^\x05\xb0\xd7\x0aK\x0b\xd2\ +d\x01\x97\xdb%;\xbb\xf6\x9f\xfe\xea\xe8\xb1b\x99\xdb\ +\x1fC\x9b\xe6T\x05r\xa1\xca\x1e\xa8\xa93?\xdf\xb7\ +\xff\xd8\xb7\xaa\xe7yq\xfb\x06\xd4gTM\x82\xa5\xe7\ +\xa5>:\xc2\xe1\x00\x87\x86\xe1p\xc7\x0ev}q\xe4\ +\xbbS\xea\xb6\xcb\x85|\x8aC9\x03\xebY8\x09\xa0\ +\xdf\x22n\xd7\x80\xca&\x04\x84\xf8\x1f\xf9\x17g\x93$\ +jH\x9d\xf5+\x00\x00\x00\x00IEND\xaeB`\ +\x82\ +\x00\x00\x08h\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ +\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\ +\x00\x00\x00\x09pHYs\x00\x00\x03v\x00\x00\x03v\ +\x01}\xd5\x82\xcc\x00\x00\x00\x19tEXtSof\ +tware\x00www.inksca\ +pe.org\x9b\xee<\x1a\x00\x00\x07\xe5ID\ +ATx\xda\xc5WkpU\xd5\x15\xfe\xce\xf3\xbeo\ +nn\x12\x12C\x12\x02I\x0cv4\x12E\xb4Z\xf1\ +1\xe8L[\x19\xabV[0\xb5\xc2\x80\xb4\xc5JC\ +\xcb\x80\x19m;@\xcb mGej\x09-M\x7f\ +t\x1c*\xb6\xe3\xa8\xa5*L\xb5\x9a\x0c\x0de\x1aZ\ +0$\x12%\x0fBH\xcc\xe3>rO\xee=\xe7\x9e\ +\xb3\xbb\xf6\xb9w\x0e&\xb96\xf8\xcb5\xb3\xb2Ov\ +\xce\xde\xdf\xb7\xd6\xfa\xd6\xd9;2c\x0c\x9f\xa7\xc9\x98\ +n\x029\xfb<\x09\xb0\xcd\x8d\x8dG\x98\xc5V k\ +\xcbnY\x8eE5\x8b\xa1H\xe2,j\x82\x90\xe1,\ +\x8a\x02\xff\x09\xf0\xd1\xb2 \xc8\x12\xf8\x0c\xff\xbbH\x0e\ +\xf2t\xda\xc4\xfb\xa7\xff\x8b\x7f\xb6\xbe\xeb\xac\x0f\x87\xc3\ +Gg\x12\xc0\x946\xb5\xe2\xd4\xe9S(..\xc1\xbc\ +\xa2\x22\x14\xcc\x9b\x87\xf2\xf2\x05p\xa9\x0arY\x86C\ +f\x8c\x1f:\x88\xf1\xdf\xed\x83Z]\x83\xa2\xef>\x0e\ +\xcf\x92\xfa,\x09\x01ZJ\xc7\xc7#\xc3H&\x93\xce\ +\xda\xb1\xb1\xb1\x15\xb3\x08X\x14\x81\xcf\xe7\x83\x22\xcb\xf6\ +\xb3\x08fG\xd8?\x12\xc9\x05\xeeX\xb4\xff(\x16L\ +\xfc\x15RA\x01\x94\xbe^t\xddu\x07\x02?j\x82\ +\xf4\xc8z\xfb\xc5\xb2\xc2\x00\x0d\x8c\xef9\x0d+'\x81\ +P^\x08.\x97\xcbyY\x92\x04\xd4\xcc\xcf\xcf\xd4h\ +&8E\x17\xb9x\x12\xe5\xd6\x16\xf8nRq\xb6\xbd\ +\x0a\x0b;\xcfS\xc9$L\xec\xfc1\xbeP\x7f5\xc2\ +\xf7\xdc\x83\xa9\xa4\x0e\xb2\xb9\x09\xf0\xae\x08\x04\x02\xce\xb3\ +@\x00\x12e@\xa5\xba\xe62-:\x00w\xcf7\x10\ +\xf4{\xb1\xff5\x15\xcfv\xf4a-\xad\xb95\x1eG\ +BU\xf1\xc1\x0f6\xe1\x96\x95+a1\x02\x84\xc5\xf7\ +\x9c\x86\x95+\x033\xd2\xcc\xc0\xf5'\xcb\x02f\xa6@\ +OFa\x9c\xfa\x1a\x0aB.\xbcu\x9c\xe1\xb9C\x06\ +\x22\x91\x08\x9aFGq\xf0\xdeJ\xc4\xdf\x1c\xc2d\x22\ +\x01\x83\x04\x986M0kz\x09L\xcb\x9c\x9b\x80\xc5\ +\x887-<\xd3;:=S\x96\x01\xffG\xabP\x91\ +o\xe0\xc4\x19\x03\x9b\xf7\x0a\x98\x9c\x9c\xb4\x09l\xdf\xb8\ +\x10\xd7\xdc8\x80\xe4\xad\x95\x88\xd5\xb5\xa0\xab\x7f\x0c%\ +a\x1f\x01\xce(\x01M\xccM\xc0\x02\x0cz\xb1\xbc8\ +\xc8\xcb\xed\xd8`\xdbz\xcc\x0f\xeb\xe8\x1b4\xb0a\x8f\ +\x80\x84\x96\xb2\xc1\xd7\xdeW\x82\xfb\x09<\x10\xca\x07\xab\ +{\x0e\x15\x05\xd5TR?R\xba\x09\xd34/O\x03\ +\x9f43m!\xcd]\xba\xb4\xf0\xc3c\xbbPW\xd0\ +\x8b\x89\x98\x81\xd5\xdb\xd3\x88k\x82\x0d~\xdbu><\ +\xber\x14yy^\x8c\x17\xed\x02\x5c\xb5\x10E\x89\xd2\ +\xcf\xc8-\x98\x8c}v\x0d\xa4\xa9N\x06oG\xc3\x04\ +\xb7\x81\xd3/\xe2\xeap\x1bRi7\xd6\xec\xfc\x18c\ +1\x89\xc0\xc7QY\xc2\xb0k}\x0a\xe1\xa0\x88a\xff\ +\x0f\x91\x94o@@\x94\x01r\xdd\xc8h\xc0\xb4r\xb4\ +\xe1\xdc\x1a`\xb6\x88.\x8eNB\xd4\xbap\x95\xf7U\ +0\xa5\x10\x9b\x9e\xe9\xc6\xd9\x01\x13qR\xbbKJ`\ +\xdf\x16\x0f\x0a\x82)\xf4\xe3!\x9c\x8b\x7f\x09~AG\ +\x8a<\xae'\xc0-?\xe8\xa2l^N\x09f\x100\ +-\xcbN\x9fj\xf4\xa2J\xd8\x0f\xd5W\x89\x9f\xef\xeb\ +@\xdbI\xcd\xfe\xaa\xe9\xc9\x18\x0e\xee\x0c\xa2\xac \x86\ +\x88r'\xce\xa3\x81\xb2\x10\xa0\xba\x07\x91\x97\x1fr:\ +\x87\xf6\xb0\x01\xd94\x11\xe6\xea\x82Y\x1a`H\xc4\x87\ +\xb0\xd0<\x00ox1\x0e\xbd\xd6\x81\x13=\xf9\xb4\xd9\ +0b\xb1\x08\x9a\xb7\x06\xb1\xb84\x02M\xadCGb\ +\x1d\xfc\x01\x09\xa2$\xc3\xed\xf3\x92\xe82}\xcf2\x05\ +\xe7\x1a\x98\xb6\xbfu9\x1aho{\x0b7\x86G\x11\ +Z\xb4\x14\xed\xed\xff\xc2\xcf\xf6\x7f\x08]\xcf\xf6{\x83\ +\x84/\xd6N a\x15\xe3\xd7o\xd4\x83\xc9\xc7\xe0\xf1\ +x\xed\xe8U\x97;\x13z\x06\x1b\x1e\xaf\x17}=]\ +\x9f\xad\x04\x02\x18\xbe~\xfd)T\x5c\xd9\x80\xee\xce\x0e\ +\xbc\xf4\x8f\x10\x07\xb7\xeb\xfe\xe0r\x0d\xdf\xbc\x93\x94\x0d\ +\x1f\x9a\x0e\x14c\x22q\x06\x8a\xa2\xc2\xedv\xc3\xedr\ +\x81\xe5P\xfc,\xac\xb9D\xb8\xea\xf6Q,\xbb\xe3\x09\ +\x8cE\x93\xf8\xceO\xdb08\x14\xb5\xeb~\xd3\x95Q\ +lk\xb0\xe0\xa2(\x1b\x9b\xe7\xe3\xe2\xb8D\xe0\x1c \ +s\xf2\x19\x86\x81\xcb1\xd3\xfa?\x1a\xb8\xa1z\x18\x0f\ +|\xebI\xc4\xa3CxxC3\x81k\xf6\x87\xa4\xb2\ +p\x02{62\x04\xfd.4\xb5\x5c\x81\x9e!7\x81\ +\xf3;\x81\x08\x97\x9b\x22w\xa2\x9d\xdb,\x8b\xe5.A\ +Yx\x04[\xb7l\xb4#Y\xd7\xb8\x0f\x1f\x9d\x9f\x02\ +\xb7\x802\x8e\x17\x1a\xd3\x98\x17V\xf0\xcb\x97\x0bq\xbc\ +\xcbC\xe0\x80\x08\x01^\x8f\x07\x02\xe3\xe0\xd6\x1c\xb0s\ +\x94 \xe4\x19\xc3\x8eG\x87 \xb8+\xb1y\xd3f\xfc\ +\xa7;\x03.ZQ\x1cx\x92\xa1\xa2TA{\xdfR\ +\x08%\xcb\xb1\xba!`\x9f\x9c555\xfcv3+\ +\xf2\xf1\xf1q4m\xdb\xc6\xb3\xc3\xa3\xb5[\xba\xb8\xa8\ +\xe8\xd3E\xf8\xfb\xa7\xdd\xb5\xcf<\xb1\x1c\xf9K\xfe\x82\ +\xedO}\x1fG\xdb\xe3\xd9V\xd4(r\x035\x15\x16\ +:\x87\xaa\xf0\xc6\xfb\xf5\xf0\xfbY\xe6\xee\x10\x0aAU\ +U$\x12\x09~tswDG\x17\x1b[\x94\x92$\ +\x81sK\xa5RH\xa7\xd3\x0e\x1e#w\x08\xbc\xbe\xf7\ +\x11\xd7\x8a\xa5\xfe\xbf\x15V\xde\x85gw\xacBkg\ +%\x8f\x01\x8c\x84\xf2\xd4\xea\x09,\xbbJ\xc2\xf9\x89\x12\ +l\xd8\x9d\x84\xc9\xde\x84\x22+\xf6M\xe9\xf9\xbd{y\ +\x8460c\x19R|t\x0e\x1e\x9b\x94\xc8\xf3\xcd\xdf\ +\xe7\xf3\xb9/\xa5\xa1\x92\xaa\x87'\xf3\x1b+\xffx\xe0\ +W\xf8\xed\xeby\xf4b?\xb8\xad\xbd{\x18\xf7\xdf&\ +\x22\x92\xccC\xf3\xdb7#\x16\x7f\x07\xb2$\x83\xa9\x16\ +\xdf\xcci7\x8a\x8c\x00\xed9\xc7\xf9|V\x95\xc8\x0e\ +\x9fN\xc0\x1b*Y\x1f,]\x22\x84ki\x8a\xb5\x80\ +\xdb\x97\xebG\xf0\xbd\xfb\x04$\x0d\x15\xbb_\xa9'P\ +/\xc0\xec\xa0l\xd1M%\x93\x1c\x94\xa7\x96\x8f\x5c\xb4\ +\x1c`Z\x168\xaaC\x94\x13\xa3\xc5\x1eZ\xeb\xf3\xfb\ +1A\x1a\x91\xb3\xe9\x97\xaa\x97\xdd{\xbd\x16\xe9AE\ +\xb1\x81\xad\x8f]\x83W\x0f\xb7\xe2'kMH\x94\xea\ +5;\x5c\x08\x95\xf9Q\xe4S\x00pp/\x98}H\ +\x19\x98\x9a\x9ar\x00ht2A\xa3\xed:\x91\x92%\ +)3G\x0e\xfe\xae\x00N\xde>!\xe5L\xf4\xc5_\ +\x81\xa8)\x89h/\xb4\xe89\xcc\xcf\x1f\xc5\x1a\xbaX\ +\x0cG\x06\xb0\xbd\x85\xa1{\xc0\x85\x07o\xae@UU\ +\x15\xfe~\xe4\x08\x81\xf1hu\x0e\xea\x08\x8b\xa2wJ\ +\x90\x05\xcf\x90\xd4);\xb6\x083w\x02\x81FY\x94\ +\x10\x8bF\x11\x08\x063\x04N\x9c\x8d\xed\xbe\xce\xd3\x05\ +\xaf4\x82\xd4\xe4\x05$4R\xfb\xb9\x02<\x7fP\xc0\ +X\xd4DYi\x00\xd7\xd6]\x8b`^\x10S)\x1d\ +\x1a)\xde\xccv\x80\xa6i\x0eh6\xfd\xce\xa8\xeb:\ +\x11\xe3\xf3\x96#P1\xdb\x9e\x85\x85\x85\x18\x19\x19\xc9\ +\x10x\xa7\xfd\x83\xc5/\x1f>\x86\xc7\x1e\x98\xcf\x0a\x02\ +\xbe\x7f\xff\xe6\xa5\xf1E\xa3\x91H\xfe'\xfa\xd5I\xf7\ +\x9e_\xec\x01\x99#4\xba\x07\xe6\x12\xa1\xf3l\xe8:\ +oC\x87\x80$\x8a\xf6\xfc\xe0\xe0\xa0\xdd=\xf2\xe6u\ +_}\xf4\xc2\xd0\xb0P[\xee\xee|\xbb\xf5\xe2C/\ +\x1e>9\x9e\x17\x0c~\xbb\xac\xb4\xf4iI\x94\xbc \ +\xd3\x0d\xdd\x06\x92eyZ\x9ai\xb4S\x9fM\xff\xb4\ +C\x87oN\xc6\xeb\xec\xcc9\xc2\xbc\x14\x98.k\x93\ +\x93\xe7\xea\xab\x02\xc5\x7fx\xe5x\x04\x80\x9b\x92\xb6HEM\xdb|H\xa5VQ\ +\x9b\x84\x846<\x02\xa6\x84\x87\x036`\x9b5\xbbk\ +\xf65\xbb;3\xf7\xde\xd3\x1bwea\x84\x8d\x1b>\ +\xe4'\xfdt\xe6\xcb\xcc\xf9\xdfs\xe6\xc3\x0c13n\ +\x0d\x22\xe0\xe3?d\xd6\x01\xf6\xef\xdfl\xf5\xa5\x06\xee\ +\x8b\xda-\x9b\x1cw\xfez\xd7\xed\xe9\x8e\xc4\x17t\xd8\ +v\x1b\x05\xfe\x95b\xe8]\xcaH\xef\xd2{~yp\ +_\xc6myc\xc3\x86\x7f\xc8Y\x07\x18\x1d\xfd\xc5]\ +~\xf5Lyq\xef\xcf\x86p\x1dG\x8e\xac\x89;U\ +\xf5m0\xedH\xba=\x1d\x89\xb8\x83X2\x0a;\x96\ +\x82\x15o\x07!\x0a\xe5\x87\xd0\x81BP\xae\xc1\x1b\xbf\ +\x82|\xe6\xc0U\x84\xea\xa7\xca\xab\xee^\xf1\xc5\x8cw\ +\xd3\x00\xe7\x07\xb6\x0fF\xb5X\x94+\x1e\xd8\xbdr\xed\ +\xbfw\xa0A\xff\xdb\xab\x1e$\xf0\xee\xb6hj^\xe7\ +\xc2;a\xb9\x0a`\x1f3B\x11\x13\xa6\x03\xc5\x8b\xe7\ +\x90\x1b|k\x8cX~w\xd9\xa6\xe1Wf\x0cp\xec\ +\xf0\xbd\xc5\xa5=\x1b[FG\x8e\xa2\x223O\xadX\ +w\xf8\xb1\xe3\xef\xae~\xd2\xd5\xf6\xf7\xe7u-F\xb4\ +5\x09\x80\xf1\xff! \xab\xcd\x18;}\x00\xc5\xec\xd0\ +\xb3w\xbb\xa3\x8fb\x13\xab\x1b\x068~h]1=\ +o}\x8b\xd6\xc0\xe5\xcc\x19x\xe1\xd8\x99\xa4\xdb\x9b\xee\ +\xec\xec\x06Y5\xdc\x12\x9c\xc0\xc8\xc9S\x188u\xf8\ +o\xb1R\xf6\x81\x0d;\xa7\x86\xb0\x01\x03\x03\xdaW`\ +\xf217\xb5\x0ca\xb04\x1d\x89\x02\xac\xabF`\x12\ +\x86\x81\x1b\x95\x00\xe5\x80\x1c\x0b\xac\xeb3L\xa8\x82\xee\ +t\x1f\x8a\xa5\xda\xc6S\xf9c/\x01\xd8:5@\x03\ +\xa5\xd4\xe4\x0d\x96\x00TH\x00Mm\xae\xc3\x00\xb5\xd1\ +\x8b\x08\xc73\x90\xf9,d9\x0b\xb2,D\xda{`\ +\xb7\xce\x81\xdb\xb5\x08\x91\x8e6\xe0\xbaI3\xaa\xe8[\ +~\x07\x06\x07\xc7\x1ez\xe1\xd1\x96\x13_\xdb]zf\ +\xea\x0a\xfe\xb5\xb6\xb8\xa8yU\x0bC\x81D\xa3\xab)\ +\xdc\xc8\xc0\xc6`|\x04\x85s\xefA\xd7\xab@\xa8A\ +F\x0e\x19\xac\x196K\xa0A\xacg9\x9a\xd2kA\ +\xf6\x0dfQ\x92x\xe1\x97\x7f.\xcf\x8d\x89\xdb\xbe\xb1\ +\xa7P\xb8f\x05\x0c%%\x88\x18\x9a\xc9T\x00D\x13\ +\x01\x98%*#\xef\xa3\x9e?\x0fX\x80o\xdb81\ +b\xe1|\x86\x90)\xa0Z\xab+P\x18\xc6\xbb\x13\x0a\ +\x9fI\x87\xe8\x1a>\x09?;\x84\x96\xe5\x1b\xe1\xb46\ +\xe3Z\x12.!\xdd\x97n>r\xf4\xe4^\x00\x0f\xc2\ + \xd0\x08\xa0\x95\x842\xb2\x0a\xa1\xb5\x91C\xb0\xb1<\ +v\x14~m\x08\x14\x17\xb8\x5c\x14x\xf5\x90[\x1f\x1c\ +\x8f\xee&\xc7M\xef\xd9\x97O\xfc\xeaO\x85D\xcf\xdc\ +\xc4\xa7J\x22\xf6\xdc\xee7]\xff\x9f\xe7l\xa8\xba\x87\ +R\xff_!=\x1f\xda\x0f\xa6x\xdf\xda^\x5c\xcc\xf2\ +gw}\x99\xdc\xc9\x09\x10\xf3\xc4~\xc9&0\xd1\xe4\ +\xfb\x14V/#\x0c.\x98\xe6\x04\xdfc\xf4\x8f4\x15\ +\xbb{\xac\xf5\x0f?~\xe1\x03\x5c\xc3\x8f^\xbcr\x1c\ +\xc0\xb7\x9e\xdf\x91\xda54\xee\xbc\xd1\x9e\xab-_\x91\ +\xaa\x8b\xca\xc0Aj\xea[\xc7`-&Wd\x01w\ +,\x99\x1b\x09j\x99/\x00xQ\xc0P\xf75\x94\x0a\ +\x1a\x9a\xd4\x1c\x80\x8d\xb0\x08vS\x0b\x84\xcb\x88\xa5\x18\ +K\x17\xaa\xd6dLo\xc74l{&\x9b_\xbe\xc8\ +\xfdt\xd1I\x5c\xf0\x94U\x0c\xaf^\xbcT\xcf\x9c\xcb\ +\xe9\xc0/\x1bC\xa36\xaa\xbb\xd3\xed\xba\xea\xf3\xe7'\ +WP\xae(\xf2F\xfb\x11\x14\x86\xa1\x83:\xb4\x09\xa2\ +u\x00\x11mB\x22\xb5\x0a\x89\x8e;\xe1\xb44\xa1\xef\ +\x9e*\x96t\xab\xaf\xbc\xf3\xbb\x85?\xc64l\xd9\x99\ +\xf1z{\x22\xdb\xcav\xec \x80sAvp\xd04\ +\x1d5\xe6\x8d%c}A\xca\xad\x14=^<\x19\xa0\ +V\x95\xc3~9\x83j\xee$\xca\xa3o\xa1\x9a5{\ +/_\x80\xf2\xc7\xa1\x82\x02\xd8&D\x9a\x17!\xd6\xd6\ +\x85\xee5\x15\xb4\xb6\xe8\x1f|\xf8\xf6\xfd}\x98\x86y\ +I\xbck\xbbN\x06\xc0\x98\xaa\x153\xca\xaf\x8f\xea\xff\ +9f\xcc\xc6,])y\xcc\x93\xef\x80_\xd7[\x8e\ +x]\xaf\xfa\xe3ja\xe8+H\xc9\xd0*\x07B\x96\ +-bv,\x13\xc0\x01\xc5\x1c\x12n\xa4\x95;\xe7\xa4\ +\x8a\xa9V\x9e\x07`\x007\xa0oK\xa6<\xfa\x5c\xe7\ +\x98dJ\xda\xa4k\xca\xbb*\x85\xe3\x06\x00<\xa3\x9b\ +\xb09Z\xf2\xb4\xbfk\x17\x09\x1b\x86\xcfm=}\x0c\ +\xc0\x12L\xc3\xcb?\xe9\xc1\x97\x1e\x1b\xc6\xec!\xb0j\ +/\x13&\x88\xc9JF\x0a\xcb\x0d\x98U\x8d\xb5t\xa5\ +T\x81\xd4\x88\xee\xdc\xc9\xda\xc6\x0c\xfcp[\x17I\xc9\ +B\x10h\xcf\xae\x1e\xf9\xcd\x9d\xb3\x0b\xf1\xc1oS\xe6\ +\x90\xb2f\x11k\x00u\xe5\xe5\x02\x05\x04\x00\x5ccx\ +\xa5,\xa2\xf1\x88h\xac\xe0:\xf6~'I1H4\ +[\x92\xee\xefP\x94\x8c\x83\x0e\xe7\xdbD\xbe\x18\x0a\x00\ +\x1a\xb3@\x91\xb5 \x1aA\x05\x92j`v\x01\x04\x0d\ +\xa3\xc6\xb0P\xb3#\xf1\x88\xf2a\x10\xb8\x8e\xaf?]\ +\xe0\x87\x9e\xae\xf0]\x1d>\xf7$\x99\x131\x81\x95\xf3\ +|\x1a+Z\xd1\x9f\xef\xea\xc6\xcd8\xb1o\xbe\xa3-\ +\xd1\xdbl\xeb\x12;v\x15B\x14\x00\x14\x8dW\x8d\xc3\ +0u g\x17:\x9a\xe9\xc3F\x80\x1b\xd3\xf7=f\ +\xb6-\xc0\xb6\xa85\xae\xc5\xbdK,kx\x8c\xdd\x97\ +\x9f\xec\xc2t\x1c\xda\xdf#\x02\xc7Z\x16A\xb4N\xba\ +^1\xf7\x96\xcc3\xaa\xb0D\x09\xc0\xe5F\x90\xe2\xe9\ +\x8c]hk\xa6C0\xd8\x98\x86\xb3\xcfF\x89-\x1b\ +0!\xd8\x12zEwU\x89h\x92\x8f\x0f\xd7\xad\xbd\ +Ot\xeb\xf6\x16\x877?r\x010\xfc\xfd7\xb7\x91\ +\xeb\x88\x88\x9b\x88\xa5\x1c\xaf\x02\x11\xd4=s_\xc8\x80\ +C@`*\x13\xc3\x81\xd6\xceU\xdfu\xf2\x9e\xb4V\ +/\x0cO\xcd\xf8Qz\xf6\xf98\xb1m\x1b-\xc0\xfa\ +(\x84\xc5\xb0\x04\xaa\x1c\xa7\x13\xc3U(\xa7](\xd4\ +ES\x9cDg2f%P\xb2\xdb\xa31\x17\xd5B\ ++\x94\x8a\x93R\x0eI\xe5@*ej\x84\xa4\x8cB\ +Jz\xed\xec\x1c;s%\x9fy\xea/\xf2\xfd\x19'\ +`\x1a\x22\xfdpI\x9f\xfeu'-\xdd\x9a\xe3\xc97\ +\xfc\x8f\x0bq\xcf\xed. \xea\x9a\xac\xa8\xa9\x168\xf0\ +\x00&\xb0\xaa\x86\xb0-\x9f\x88\xc0 \x07\x0cE\x0c\x9b\ +\x99C\xb0\x08\xf3\xf56\xfb\xfce\x8fV\xceW\xfd3\ +~\x96\x1f\x7fi\x11\xb9\xfa*\xd2_-2\xa6\xe1?\ +\xaf\xdfN \x12`\x10\x98\x05i-\xa0t\x84\x94\x8a\ +A\xa9(I\xa9!\x95E\xa1\xb4\xcc\xb5\xa3\xa4\x15y\ +\xbd?j\x85\xe5\xf1\xcc\xe3\xbf\x0f30L;\x813\ +%\x81\xcd\xdbM\xf3\x19`\xc7\x06\x884\x18\x02\xcc\x1a\ +Z\x03BI\x10B\x02\x87lFH\x9a\x05,a\x81\ +\x1dy&\x97\x94\xa2>\xecM6\x9f2\x81\x8fI\xff\ +\x9b+\x09\x131\x98\xa0\x14\x9191\xa4\x12$\xe5G\ +'\x17\x13\xc2\x16cy\xdb\x1e85\xa2Zsa~\ +\xd3\x1f\x18\xb7\x1a`j\x88wV\x13\xb4\x86iN0\ +^\xd3\x9c\x22N\x8c\xbclU\x8c\x9c\xbf\x22\x1fx\xc2\ +\xaf\x03<\xcd\xaf\xd9-r\xfc\xe0\x1a\xa2p\xe2\xd3\xcc\ +\xa8D\xcc\x8e\x8a\xe0\xe2%\x8aH\xd6\x15\xcf\xd3+\xb7\ +\xfbz\x96\xff\x86\xb7\xce\xd0ki\x92\xd9\x1cI\xdfg\ +[y\xdc\xfb\x08\xdf\xfc\xdf\xf0\x93D\xe0\x13\xe6\xbf\x92\ +r\x1f*A9\x0fr\x00\x00\x00\x00IEND\xae\ +B`\x82\ +\x00\x00\x03|\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x04\x00\x00\x00\xd9s\xb2\x7f\ +\x00\x00\x00\x02sBIT\x08\x08U\xecF\x04\x00\x00\ +\x00\x09pHYs\x00\x00\x03v\x00\x00\x03v\x01}\ +\xd5\x82\xcc\x00\x00\x00\x19tEXtSoftw\ +are\x00www.inkscape\ +.org\x9b\xee<\x1a\x00\x00\x02\xfbIDAT\ +x\xda\xa5\xd4YH\x94a\x14\x06\xe03\x95\x06\x0af\ +:\x83(\x819Y\x9a\x9a{\xa9\x98\xbbcY!\x99\ +\xa3\x95\xedA\xa1FV$\x96\x8a\xde\xa4\xb9TDF\ +Z\x11ZD\xab1\x04I\xbb\x95\xa6\x92E\xa1\x91]\ +\xe8hi\x13\xb9\xa4\xe8\xec\xcb?\xf3\x86\x17\x8a3\x8e\ +\xb3\x10\xef\xd5{\xf8\xbe\xe7\xff8\x17?A/\xda\xb0\ +\xf4\x85\xa0\xf9C,M\x84\xc1D\xbf\xde\xaa{z\xdf\ +\x14\xf0\xa0\xac\xf1\xb5I\xc03ux\xac0n\xbe\xeb\ +\xbb=DCIy&\x01r~\xfe\xb1\xeb+\xd9\x1a\ +}>\xb5\xbe\xe9\x12\x92\x97I\x00\x94yF\xa5\xbdW\ +i\x0c\xb8~H\xaa(\xbeM,3\x00\xad\xe9\x11\x8d\ +\x8cn\xe2\x1a\xceC\x96\x08\xfbF\xa5K7\x80\xcc\x01\ +\x8b\xaa\x04J\xb4\xb7\x18~\xe9\xd9=\x15\x1a\x9a\xc9\xd1\ +,\x00\xe2\xa6\x8d)\xe5\xaa\x9a\xac\xd9\xb3\xf2\xc4\x89\x09\ +\x99.\xb9\x00d\x01@\x9c\xc6\x0f\x0a\x0c\x0c89\xcc\ +Ll:;\x95\xf8\xd2G\xab-\x02@\x19eb\xa8\ +\xf1\xf2\xd1to\xa8R1\x12\x94\xdc\xa5\x05\x16\x02\xe4\ +\xfdI(\x83DR\x920\xd5\xb2\xbd\x86\x86\x14\xf81\ +\xee\x14\x0f\xb2\x14\xa0\xfd\xd5\x93P\xa1\xbb\x9bl\x89\xd5\ +\xfaV\x0d1\xca\x05\xb4\xd8b\x00D\x81\x1f\x85Rh\ +\xb4\x0d\x17n\xe4\xc8\x952\xf4\x8d;n\x02Y\x03,\ +\xd8{e\x02J\x8c\x8d\xbd\x14\xa90\x89\xb3\x02\xb2\xb7\ +\x0a\x00Qx\x87P\x02\x0d\x9e\xa0\x17\xc2q\x87\xad \ +k\x01\x9b]W\xc7!\x87\x14\xb5(\x15\x90\xa3\xd5\x00\ +\x88\xc2\xbeH;\xf0\x1d\xedZ\x874\x90\xd5\x80\xbd\x7f\ +^\xd3;]3~B\x8b\xeb\xcdn\xdb\xad\x04\xc86\ +\xac\xb9\x09j4bj\x95\xddL\xc2or\xb4\x0a\xf0\ +\x89<\xa0\xe9@\x8f\xb8\xa2\xe2b\xee\xb7\xc1_8\x8e\ +\x80R\xb2\x06\x88\xef?\x8c:\xac)\x00\x81\xbc}j\ +\xb5iH\x95\xaet\xb0\x18\x088v\x0cIp\xed\x9f\ +\xee.\xcfbq\x02\xe1/\xcc\x02\xfe\xcb\x83\xae\x85>\ +\x0a*\xdc!\xe3\xc3[\xcdI\x9c\x01\xec\x97M&\xe3\ +\x08\x13p9\xa4>\xf8ap\xe4<@D`\x8a\xa4\ +\x08\xa7q\x12Y\x88\x05\xa7m\xf61v\xe5Z\xec\xc4\ +)\xe4\xa3\x18{4Q\xd9F\x80\x88\x90-\xd2\x14\xac\ +\x17\xf3t;\xb0\x11\xee2\xb6\x9b\xfeS]D<\xa4\ +\x83\x8f\xe5\x8a8]\x86&\xea\xe8\x1c \xaa\x97\x0f\x8f\ +\xf7\xc4\xf2\x1dLA8\xd8\xf5 \xfd8o\xf3a6\ +c\x9d\xdc\xcd\x8e{.\x81I\x92\x1a\x00\xc4\x8a\x96\x85\ +\x0eO\xb5\xa0a\x1e\x5cF\x8d\xfd:8\x9fc\x11\xc9\ +x\xb1A\xfe\xed)\x08\x0c\xd7\x03\xbc\xf9\xa9\x08h\x02\ +\xf9\x1d\x8c\xd1\xf9\xea\xd89\xa0\xb9a{\xba+x\xf0\ +}\x08\x0a*\xca\x80\xdfM=\x80\x9b\x9f\x89\xe4\xbfq\ +\x8f\xf9j\x1e\x9cZ@\xc6\xe3T\x15\xcc\xec\xd3E\xb7\ +E\xf7\xe6\x82\xfbJ\x0fp\xb3[\xa5\xb8\x84j\xf0\xe1\ +lp\xdd\x90\x88d\xce\xa3\x061\xcc\x8am\x06K\xe4\ +n\xe4\x0e\xb8\x8e\xb0\xef\x80L\x87S\xe0\x22\xe2\xfe\xf1\ +(\xd6[\xe2\xff\xe4\x1f\x0bb\x1dd\xf9kV\xc6\x00\ +\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x03\x5c\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\ +\x00\x00\x00\x03sBIT\x08\x08\x08\xdb\xe1O\xe0\x00\ +\x00\x00\x09pHYs\x00\x00\x03v\x00\x00\x03v\x01\ +}\xd5\x82\xcc\x00\x00\x00\x19tEXtSoft\ +ware\x00www.inkscap\ +e.org\x9b\xee<\x1a\x00\x00\x012PLT\ +E\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00CEE\x00\ +\x00\x00MQO_bbcfeZ^\x5cgl\ +jjnk\xb8\xbc\xbd\xdb\xdd\xde\xc2\xc3\xc3\xcf\xd0\xd0\ +\x8d\x90\x8d\x8e\x90\x90\x92\x96\x94\x99\x9b\x9b\x99\x9c\x9a\xa0\ +\xa1\xa1\xa5\xa6\xa6\xa9\xa9\xa9\xaa\xab\xab\xab\xab\xab\xad\xad\ +\xad\xae\xae\xae\xaf\xaf\xaf\xb0\xb0\xb0\xb2\xb2\xb2\xb6\xb6\xb6\ +\xb9\xb9\xb9\xba\xbe\xbf\xbb\xbb\xbb\xc1\xc1\xc1\xc2\xc2\xc2\xc3\ +\xc4\xc3\xc8\xc8\xc8\xcb\xcb\xcb\xcd\xcd\xcd\xce\xce\xce\xcf\xd0\ +\xd0\xd6\xd6\xd6\xd8\xd8\xd8\xdb\xdb\xdb\xdb\xdd\xde\xdc\xdc\xdb\ +\xe1\xe1\xe1\xe2\xe2\xe2\xe3\xe3\xe3\xe4\xe4\xe4\xe5\xe5\xe5\xe7\ +\xe8\xe8\xe8\xe9\xe9\xe9\xe9\xe9\xe9\xea\xea\xe9\xea\xeb\xea\xeb\ +\xeb\xeb\xeb\xeb\xeb\xec\xec\xec\xec\xec\xec\xed\xed\xed\xed\xed\ +\xed\xee\xee\xee\xee\xee\xee\xef\xef\xee\xf0\xf1\xef\xef\xef\xef\ +\xf0\xf0\xf0\xf0\xf0\xf0\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf2\xf1\xf2\ +\xf2\xf2\xf2\xf2\xf2\xf3\xf3\xf3\xf3\xf3\xf3\xf4\xf4\xf4\xf4\xf4\ +\xf4\xf5\xf5\xf5\xf5\xf5\xf5\xf6\xf6\xf6\xf6\xf6\xf6\xf7\xf7\xf7\ +\xf7\xf7\xf7\xf8\xf8\xf8\xf8\xf8\xf9\xf9\xf8\xf9\xf9\xf9\xfa\xfa\ +\xf9\xfa\xfa\xfa\xfa\xfb\xfb\xfb\xfb\xfb\xfc\xfc\xfc\xfd\xfd\xfd\ +\xfe\xfe\xfe\x08\xd9\xcd\xca\x00\x00\x00\x15tRNS\x00\ +\x01\x02\x03%;EKLx\x81\x92\x98\xa6\xae\xb6\xc4\ +\xf7\xfa\xfe\xfe\xd1\x91\xf4\x89\x00\x00\x01{IDAT\ +x\xda\x8d\x93]K\x02Q\x10\x86g\xe6\x08\x09u\x1b\ +\xfd\x97$\xba\x0d,\xba\xe87\xf6\x93B\xcd\x0b#J\ +$#\xfcHM={N3g\xc6Y\xb3\x8b\x9a]\ +\xc4\xe5yxyg\xd9\x03\x7f\x0dB# \xfc\x9a\x5c\ +E\xfb\xd7\x80p7\xa3\x80<,\xeb/O\xf3\xbe\x16\ +`\xf6\x81\x81\x0d\x22*\x1ai0\xb8\xc0\x94\xca _\ +\x9a\x80\x19\xb1\x16@y`L\x92P\x18Q\xd3\xaa\xb0\ +\x80\x14\x04\x8b\x81<%\x9fN[VE\x84\x10\x0ag\ +L\xbb\x0eT-\xac\x0a\x0b\xc4\x5c0\x11\x81\x5cr#\ +\x06\xad\x22\x020\xb7\x96\xc2u0\x94*\x9a\xc0\x5cn\ +\xc5\xaaH\x02\xba\x80\xc6I\xa9d\x17`\x82\xedi\x01\ +\xa8\x06\xf8SY\x13kn\x0aZ\x96\x09\xc6\x1d[\xba\ +%h\x84\xf2\xda@\xad\xe2%a\x9fg\xd9\xa2\x18*\ +0#\x0bD\xa6)-\x13\x1d[\x95z\x1b\xb2\xec\xb4\ +\x1d\xcfc\xc2\xa8\x1d=\xc1\x03\xd2j8\x899\xe0\xf8\ +\x0a]Pn\x01\xd5ht\x91co\xd0&\xad\x92u\ +\x0b_*M>c\xde\xf6\x06\xd7\xb4\xab\xa2\x82/\x96\ +g1\xaf\xbbO\xb7hU\xfa\x9aPO\xda\xe4F\xe7\ +\x99\xb9V\x19n*\x16\xf2\x0f%\x86\xd7\x1b\xdcUY\ +/\x93~\x93\xfe\x8a\xe8\xe4m\xd1\xf6*\x9dE\xda;\ +8t\x96\xc5;j\x01\x07]ZQ\xfc\x81c\x03_\xef\xe8k{\x9c\ +\x91\x04\x13\x1a\xb2\xd4\x0e\xc6\xccDT\x91\x83+J\x09\ +\xf8\xd2\x05\xe2\x08\x99(F\xb6X_4`\x93e9\ +pJ\x9e\xf0\xc3DP\xd1#\x90\xebJ\xcfk\xd2-\ +/\xf6#\x8fl\x9c\xc0\x0a\xf8\xdc\x99\x87z\x87\xba\x0b\ +\xdf3b\x80%\x95\x93\xd6\x88;\x96\x00'B\xc0\x95\ +\x09\x11\xa2\xce\x1d\x84\xe0h\xd2\xb2\x88\xefN\xf3t\x97\xc5\ +\xad\x1eC\x8cYEi\xf5\xe8r6\xaaa\xf4\xc1)\ +yj\xffU\xa9~+LRd\x9aT\xeb\xef\xec\xa9\ +8\xf3\x1d+\xbf\xa3\xaf\xafwfm-\x9e\x8d\x16\xb8\ +\xaa\x84[\xa4\xc8\x12\xaa$H\x8f\xd4\x86\xbe2\x16\xe9\ +\xa4q\x9dH\x10\x91$\x90Lpl\xef\xc5ec^\ +\xf7r\x1b\xedh\xed\xc7\xd1\x1d\xa3r\xc5\x04\x128\xdf\ +\x08\xe6NN\x8dO\x8d\xc4]nNO\xb9:\x98\xa7\ +S\x83JT\x0b\x0c\xc6BU\x952\xd10%,f\ +\xc8\x143\x84\xcd\xf4\x15\xc5\x13\x5c~\x7fYz\x93\xfe\ +\x9d\xdf\x0b\xb2\x87\x8d\xd6\x03\xf7n5\xa6XE\x94\xc3\ +z\x22 \x12A{1\x89H%!\x92\x88U\x12R\ +#\x86\x17w\xbdq\xf7oF\x99\xe7R\xd6\xbe\x0d\x03\ +f\xbe5%\xceWf\x92\x83%mf\xf0\x86\x19\xd2\ +D\xf2\xd9`\x1a^\xd8\xf9\xda\xd2\x06w\xfdj\xd6z\ +\xd4fm\xad\x19-\x04\xc7\x07\x0a\x9b\xe4\xbf+s\xd2\ +$&\x93\xc8\x7f\xb3\xe7\xcc*\xc2w\xf1nHG\x09\ +\xf9\x5c\x8a\xda\xed\x0c\xf6t\xf6\xe1\xf9-'\x97\x16\xdc\ +5\x03\xef$\x18\xdea\xfc\x07;\x00\xdf\x09\xb1\xdb|\ +\x84\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x07\x06\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ +\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\ +\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\xd7\x01\ +B(\x9bx\x00\x00\x00\x07tIME\x07\xdb\x05\x02\ +\x16\x024\xdd\xedHB\x00\x00\x06\x86IDATX\ +\xc3\xa5\x97]\x88]W\x15\xc7\x7fk\xed}?\x92I\ +2C\xbeD[m XM\x8d\x9a\x07\x05i$\x1a\ +4\x94\xfa \x92\x8e_P_E\xa4\x0f\x82\xe2\x8bJ\ +\x11\x0aA\x11\x8c\xf8$-\xbeY\xc4\x88\x22\x8a\xa8\x89\ +\x11#TI\x03M\x8b\x09\xfd\xc8\x84&\xc1$\x9dd\ +&3w\xe6\xce\xdc{\xcf\xd9{\xf9\xb0\xf7\xb9\xe7\xf4\ +N*)n\xe6r\xce\xd9g\x9d\xbd\xfek\xfd\xffk\ +\xed=Bc\xec\xdd\xbb\xb7377\xb7\x1bh\xf3\xd6\ +\xc3\x1a\xf7\x92\x9f\xe7\x8f\x1c9\xb2z\xf2\xe4I\xfe\xdf\ +q\xc0\xde\xc6\x08ei\xab++v\xf9\xf2\xe5\xab{\ +\xf6\xecy\xe4\xe0\xc1\x83\xfav\x1d\xca\xc4\xf3'\xcd\xec\ +ok\xfd~m \xb5\x89\x99af\x84\x10(\xcb\x92\ +\xe1pH\xaf\xd7cqq\xd1>|\xe0\x80\x1c|\xf8\ +\xe1\xd9m\xd3\xd3\xbf=s\xe6L\xbcW\x00o\x89X\ +DPUD\xa4\xfe5A\x89 \xaa\xf8V\x0b@.\ +^\xbch\xa7N\x9d\xfa\xb5\xf7\xfe\xe8\xa1C\x87\xee9\ +\x13\xfa\xa5\xa7\xfe\xdc|\xeeW\x0e\xc6\x91\x9b\xd5\xa47\ +\x00i\xfe9UZ\xad\x16\x8b\x0b\x0b2=3c?\ +\x7f\xe6\x99\x13\xdb\xb7o?\xba\x7f\xff\xfe{\x02\xa1\xbf\ +\xfc\xee#|\xf1\xa9\xbf\x9e\xfc\xdc\x93\x7f\xb4\x07\x1f\xfd\ +\xe6\xd9\xb1\xc8*\xc7\xcd,Ldh\x0cF\x95\x95\x95\ +\x15\xbc\xf7\xe2\x9c\xb3\x9f\x1e?~b\xffC\xfb\x1e\xbb\ +\x17\x00\x1e`\xf9\xce\xfc\xa7\x1f\x9f}\x94\xdf\xad^\xad\ +u\xd1\xc8\x82d@\x93\xf3\xe3{\x11b~\xbfyj\ +J\xd6\xfa};v\xec\x07\xbf\x0a\xef\xfe\x14\xe5\xd4{\ +P\x84\x80\xe1\x80\xd2@\xc5\x0a)\x06G~s\xec\xb1\ +\xbf{\x80a\x7f\x99\x97^\xefq\xe9z\x7f\xbc0\x0d\ +\x0a\x10\x01U,FD\x04\xcb\xfck\xb6SUbL\ +\xbak\xb7\xdb`&kk}~\xf8\xb5\xc3<\xfd\xa7\ +\xd7\xd8\xb1\xe7\x83\xb4\x9d\x07\x01\x15\xa1\x14\xf3\xff:w\ +\xe1[@\x02\x10F\x03\xe6\x17\xfa`\xc5F1\xaab\ +f\x1b\xca\xa5\x02Z\x09U5Q\xee[-\x10\xc1\x80\ +53\xber\xf8\x01\x9e|\xf69\xfc\xce\xf7\xe1\x9d\x12\ +\x02\xec\x9c\xee\xca\xed\x9b\xff\xd1\xba\x0a\x9c\xa3\x1c\xae3\ +\x1a\x8d6TBu5\xb37q\xae\xaa8\xe7p\xce\ +\xd1j\xb5\xd8\xb2e\xcb\xd8\xd6{O\xbb\xd3a\xf3\xe6\ +)\xba\x9b\xa6\xf8\xce\xec{\xe9];\xcfp\xb0\x8e\x95\ +C\x16W\x07\xac,\xdd\xb4\xb1\x06\xcc\x8c\xf5\xd1\x80\xb2\ +\x1c\xdd\xb5\xf6+\xa7f\xb6a\xce9G\xb7\xdbez\ +z\x1a\x80N\xa7\x03@\xb7\xdb\x85\xad[\xd9\xb1k\x17\ +eq\x1f?\xf9\xfa4_\xfd\xd1_\x98\xb9\xff\x03\xb8\ +h\x14\x83\xf50\x06P\x8e\x0a\xcabH,G\x1bz\ +l\x15urn\x84`\x181kRp\xce\xd3\xedn\ +b\xe7\xae]<\x7f\xee\x1cEQ\x82\x19\xa2\x99\x16K\ +\xba\x98\xde\xb6\x8d_|\xff\xf3|\xe1{'\x98\xb9\xef\ +!\xb0X\x03\x88aD(F\xc4\xb2\xa8\x85\xa7\x8aT\ +@\xa2Q\x84\x92\xa5^\x9f\xe5\xde\x1aEY\x12b\xc4\ +\xcc\x88!P\x86@Y\x94\x94\xc1\x88!U\x84a\x98\ +%0\xb17\xe0\xda\xcdEF\xc5\x88'>\xbb\x8f\xe3\ +\xbf\xbfD\x88\xe6\xc6\x00\x8a\xa2`0Xg\x905\x10\ +,\x22\xc1\x10IX\xa2\xc1\xcd[K\x9c}\xf1\x15.\ +\xbcv\x85\xfe\xda \xe7\xc7\xd2\x9f%Z\xa2\x19X\xca\ +\x8e\x8d\xdf\x19\x16\x0d\x13#\x84\xc8\xee]\xdby\xf9\xfc\ +st;\x9d\xd1\x18\xc0h\xb4F\x7fy\x9eP\x0c\xb9\ +z\xfd\x16\xb7\x17\x97k\xd5\x0b\x94\xa1d\xee\xca\x1b\x9c\ +\xfe\xe7\x8b\xcc>\xfee\xda\xdd.w\xfa%\x22\xff{\ +\x93\xb1\xbb\xcd\x9b\xf0\xb1\xcf\x1c\x05\x98\xbdq\xed\x89\xd3\ +\x1e\xe0\x8d\x1b\xd7Y\xec\xad\xd3[^\xe4g\xcf\xfe\x81\ +~\x7f\x1d\xcd\xf97 \x04\xe3N\xafO\x7fX\xe0|\ +\x97\xb3/-\xe0\xf2;i8s\xf9\x1a\x1b \xe2\x04\ +\x18\xcd\xf7-u\xbc|\xfe\xf9\xc3\xfe\xdbO\x9f>\xfb\ +\x89\x8f\x7f\x84\xb2(\x11\xa0(#&\x96\xd1\xe6\x0f\x05\ +\x14\xc1\x0c.\x5cZ\xc0\x11q\x02!\x82\x0a\x04\x03'\ +PV\xa7\x85L\x9d\x0a\xa8\xd56*\x102\xd0\x02%\ +D\xc3\xcf]\xb9\xfd\xd1w\xed^\xa0_\x94\xe3\x08&\ +\xd1V\xcf\x16\x0d\xa7\xa9*\xca\x98\xa2\x8bc\x0dd\x9b\ +\x1c\xae\x90\x00:I\xed7\x92@di\xa4\x00\x0c<\ +\x06E4\x1c\x96\xd0\xe5h\xaa\xc5[\x0a\x85%\xd4h\ +\x16\x15)\x12\xb1\xdc\xc9$S!P\xc6\xdc\xc5\xabu\ +\xaa,Zm3\xa6\xce\xc0\x1b\xa4\xb2\xc9\x11\x89\xa6\x8f\ +\xa8R\x96\xe7\xadq\x18\xd3\xea^\xeb\xa8\x84D\xb85\ +*\xc7\xe7 $\x7f\x14b\x9a3 \xc4\x08f\xb9\x13\ +\x02\x11K)\x0f\x10$\x19\x16\xb1\xd6\x80\x00-I\xd9\ +\xb0\x9c\xda\x10\x92C\xa1Nm\x15\x9d\xe6\x94\x8f\x05\x18\ +3-\x96S\x9f\xa9\xf1f\x10\xa3!V\x7f \x96\xc5\ +\x22\xf5\x8a\xa3X\x9f\xdfT\x12\xb8\xa6m'sJ\xe5\ +$\x8b-J\xb2\xa9F\x09l\x12(,\xd1\xee\x05C\ +\x0d\x06\xd1\xf09B\x80\xb6\xd6\xe9'\xd4\xe5\x16\xf3\x9e\ +n\x99\xcf\x22\xebd\x10\x19\xef\xf7\xbey|\xce`\xaa\ +J\xf0\xd9V\xc7\xb6\x22\xa8w\xb4%\x1d\x18\x5c3\x8d\ +\xbe\xe67S\xfe\xa6\x9a\xf6\xd4\xce\xc4\xa5\xf7\x15\xc7m\ +`\xd4\xe8\x0f>\x0b\xb7\xb2u\xeaq\x22\xf8\x17\xe6\xe6\ +\xf9\xf7\x8d\x7f \x16\x93\xb2'\x1a\xc8\xe4\xd1\xb9\x02r\ +\xb7f\xb3a#k\xdc\xc7\x89\xb5\x1d\xca\xda\x9dy\xfc\ +\xfd;6\xb1}\xf7;\x89\x96t \xb9t\x94Z\x07\ +\xd5sl,\xa0Y|fuF\xaa\xbdc\xb2\x0dK\ +\xb6\x8dV\x03\x14\xa7\xdc\x1c]\xc3\x87`\x0c\x86E\xda\ +\x80&\x9aP\x988\xb7[c\xdegA\xc9]\xa2\x9e\ +\xfc\x17\xaa\x99\xb1\x8a\x12T)B\xc4\xbf\xff\x81\xdd|\ +h\xdf>,\x04\xa2\x82d\x81\x14@G\x1b\xa5\x98W\ +\x8a\x11Z\xa4UB\xc8\xb5^5\xa9X_c\xf2\x81\ +\x8b\x89\xf3\x22$\xc7UO\x88\xa2\xbc\xbey\x09\x7fk\ +i\x8d^\x7f\xc8j\x11\xe8d\xc7M\xe4\x9a#\xad2\ +\xe1r?\xd7F\xdd\x87\x86\x18c\xc3\xb6\x02\xa1\x19P\ +Sc\xa8r\xeb\xce*\x1e\x81\x85\xfe:N\x8c\xa1\xa5\ +\xb3\xbf\xcby,-\x95\xe3(\xa6:/\x1ay\x0d\xcd\ +\x8a\xc9\x1bQ\xd5\x8a}\xae\x7f2\xd0\xd0\xa0H\xa5j\ +\xc7\xe9\xe0\xea\x05]\x9a_\x5c\x99\x11\x97#\x91\xba\xb9\ +\x18\xd0\x01\x06\x0d\xe4\x15\x9f\xd5b\xce\xf2.\xd8\xd0E\ +%V\xdf\xc8\x9e\xe5\x9d\xb1\x02/\xd1\xd8:\xf3\x8e9\ +\x01\xda[\x1f<\xf4\x0d\x8c\xa9\xa4\xea\xa8\x06\x22\x22*\ +f\x1a,\x8a\x80X4A\xac\x12\xbf`\xa6`bf\ +\x22\xaa\x11\xb0\x181U\xa2\xa5\xfd<\x22b*\x12M\ +0A\xd2IM\xc4D$\x22\xb2\xbe\xf2\xea\x99\x1f\xff\ +\x17\x07v\xb3_\x89\xda\xcfC\x00\x00\x00\x00IEN\ +D\xaeB`\x82\ +\x00\x00\x05~\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ +\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\ +\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\xd7\x01\ +B(\x9bx\x00\x00\x00\x07tIME\x07\xdb\x0c\x1e\ +\x16\x0e\x06\xaeP\xdc\x98\x00\x00\x04\xfeIDATX\ +\xc3\x9d\x97\xc1k\x14W\x1c\xc7?\xbf7o\xb2\x9b\xec\ +&n1E\x8a\x87\x12\xb4\x16\x92\x94TE\xdb\x88\x85\ +z\x11*\x0aF\xea\xc1\x92\xe0\xc9\x92\xfe\x0b\xdez\x10\ +\xa1\xd0C\xe9%x\xf2\x22\x88\xb7\xe2!\x81^\xdah\ +h\x14$i\xd2jm\xb4.ID\x93\x22I\x93\xc9\ +\xc6\xcd\xce\xcc\xebaw\xc6\xb7\xbb\xb3k\xf4\xc1\xf0f\ +\xde\xbcy\xbf\xef\xef\xfb\xfb\xfe~\xef\x0dl\xa3\x1d9\ +rD\x03\xdd@O\xd2\xd5\xdf\xdf\xafy\xcb&\xdb\x9c\ +\xf7\xa11\xe6/\x80\x9f\x7f\x1d\xc7\xd5\x9a \x08\xf8\xec\ +\xd3O\xd0Z\xe38\xceG\xc0\x1fo\x03`\xbb\xc87\ +&&&(\x14\x0a\xf4\xf7\xf7\x13\x86!\x8e\xe3p\xeb\ +\xd6-\xda\xda\xda\x006\xde\x96\x01\x0dp\xec\xd8\xb1\xcf\ +766n\xae\xae\xaef=\xcf\xc3\xf3<|\xdf\xa7\ +P(\xc4\x13\x1f=zd6\x0b\x05\xf9it\x0cG\ +)\x820\xa4\xf7\x83\xbd\xb4\xb6\xb5\x19\xe0\x1f\x00\x11\xa1\ +\xb5\xb5\x95T*E6\x9b\xa5\xbd\xbd\x9d\x5c.\xe7i\ +\xadO\x8d\x8f\x8f\xff\xd2\x10\x80\xef\xfb7O\x9c8\x91\ +9|\xf80ZkZZZ\x98\x9d\x9dexx\x98\ +\x97/_\xd2\xda\xda\xca\xd0\xd0\x90\xb4\xa4R\xec\xdd\xb3\ +\x07\x13\x86\x88RL\xde\xbd\xcbV\xb1(\xbe\xef\xb3\xb9\ +\xb9I*\x95\xe2\xc6\x8d\x1b\xec\xde\xbd\x9bb\xb1\x88\xef\ +\xfb\xdc\xbbw/3::z\x13ho\x06 \xbb\xb4\ +\xb4\xc4\xe5\xcb\x97)\x14\x0a\xa4\xd3i\x16\x17\x17\xd9\xb5\ +k\x17\x85B\x01\x11a``\x00c\x0c\xc6\x98\xf8\xe3\ +}\xfb\xf6!\x22\x5c\xbbv\x0dc\x0c\xe9t\x9aK\x97\ +.\xd1\xd1\xd1A\xb1X$\x93\xc9\xd0\xdb\xdb+A\x10\ +d\x9b\x8a\xf0\xe8\xd1\xa3Fk\xcd\xea\xea*SSS\ +\x00\x5c\xbdz\x95\xe3\xc7\x8f\xb3\xb9\xb9\xb9\xedx\xba\xae\ +\xcb\xd2\xd2\x12\x87\x0e\x1d\x02\xa0\xaf\xaf\x8f\x1d;vP\ +*\x95\x98\x9c\x9c\x94\x86\x0c\x84a\x88\x88\x10\x04\x01\x00\ ++++h\xady\xfc\xf81\xbe\xef\xd7}d\xb3P\ +\xe5ME\x03\x9e\xe7\x91\xcd\x96\x9dVJ\x11\x86as\ +\x11\x86a\x88R\x0a\x91W \xf7\xef\xdf\xcf\xc8\xc8\x08\ +\xae\xeb\xc6cJ\xa9\x18\xe0\xdc\xdc\x5c\xd5|\x11\xc1\x18\ +\xc3\xd9\xb3gy\xf0\xe0\x01\xb9\x5c\x8e|>\xcf\x8b\x17\ +/\x22\x16\xbf\x04\xdal?\x5c\xd7\x9d\x16\x80\x03\x07\x0e\ +\x98\x9d;w\xb2\xbc\xbc\xcc\xf4\xf44+++(\xa5\ +p]76b\xf7\xd7\xaf_\xe7\xfc\xf9\xf3o\x92m\ +&\xa9\xe6\x88\xc8`$BD\xa4\xca#c\x0c[[\ +[U\x86\xa3\xfbR\xa9\x04\xc0\xc2\xe2S\x94Hyu\ +%\x08\xe59JI\xd9\x9a\xc4\xbd\xa0T\x8c\xc0\x84!\ +\xefvvVeA\x95\x81F\xbd\x1d\x86\xe8;\xc7\xd1\ +(\x05\x18AT\xc5\xb8T_v\x98\x00Bk\x0d\x0d\ +\x10\x04A\xd5\xc4F \x92\xe68\x8e\xaa\x18U\xaf\xbc\ +\xb7\x8dWX\x88\x18\x01\x10K\xc4UY\x10y\xd7\x08\ +y\xed;\xc7Q\xb1aG\xa9r\x18$\x99\x01\x1b\x80\ +\xa9\x05\x10\x0d4\xa3>\xe9^)\x85\xd6e\x00\xa2\x14\ +\x0a\x90J6\xc5\x97\xfdm\xd47\x02`\x0b\xd0f#\ +\xc9\xfb\x08@\x94\xbeJ\x04\x22\x10\x91\xf1\x8a\xf0l\x00\ +\x92\xc4@T\x80js:\x09\x84\xddb\xe3\x15C\xaa\ +\x12\xf3\xe8\xb9\x16@\xd2:q\x16$\x090\x09\x84\xcd\ +\x82\xcd@t\xd5>'e\x97I\x12\xa1\xfd\xc26l\ +\x8c\xa93\x1e\x8b\xd0\xf2PE:P\xaa\xccB\x03\xe3\ +\x0dK\xb1\xddo7\x04\xd8\x0c(\x85c\xb1\xf0:Q\ +\xd7\x01\xa8\x15b\xd2d\xa91P\x15s[\x0f5\x8c\ +\xd9,\x96qK5\x80\xda\xd84\xd2@d\xc0\x9e\x17\ +\x83\xb0DY\xeb\xb1]=k\x1dS6\xe5\xb6\x06j\ +\xd1\xdb\x8b\xd6\x81\xaa\xa4`\xb3JZ;\xb6\xb6\xb6\xf6\ +\x8a\x81h\xcfn\xb4\xcf'eGT\xddl\x10I\xf5\ +_\xd5\x00\x8b\xda\xfa\xfa:\x80\xd1\xe5\x92\xea4=d\ +4\x1a\x93&J\x8f\x98\x1a\x1b\x1b\xe3\xf9\xf3g\xf8~\ +@\xa9T\xc2\xf7}\xb4\xd6&\x97{G\x80\xe5\x18@\ +\x18\x86MO.\x0d\xd0\x95\xab[\x93\xbd#\x9f\x7f\xc2\ +\xf0\xf07U\x85vaa^.|}\xe1\x0a\xf0\xbb\ +\x06\xd0Z\xd7i \x8a}\x920\xed\x03\xa5\xbc\x86\xb1\ + \x08\xed5\xcd\xdc\xdc\xdfr\xee\xdc\xb9\xef\xa7\xa6\xa6\ +\xbf\x03\xfe\x8d\x01\xd8\xe5\xb8\xa3\xa3\xa3\xa9\xe3\x99L\xe6\ +\xb5\xa1\x8a\x9e\xb7\xb6\xb6\xa2\x1acffg\xe4\xf4\xc0\ +\xe9o\xe7\xf3\xf3?\x02/b\x11F!\xe8\xec\xec\xa4\ +\xa7\xa7'>\x8e\xb9\xae[Wn\x1d\xc7\xe1\xe1\xc3\x87\ +\x9c9s\xe6M\xf4b\xee\xdc\x99\x0cN\x9e\xdf0\x14\xf1\xcf\xe4\xc6\x06kkk\ +x\x9e\xc7\xe0\xe0\xd0o\x0b\xf9\xfc\x0f\xc0V\x1dC\xdd\ +\xdd\xdd\xdc\xbf\x7f\xffM\xff)\xfb\x80\xf7\xb6\xf1w]\ +\x00\x16\x81'@b\x8a\xfd\x0fg\xea\x16`\x16W\xbd\ +\x9b\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x04\xef\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ +\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\ +\x00\x00\x00\x09pHYs\x00\x00\x03v\x00\x00\x03v\ +\x01}\xd5\x82\xcc\x00\x00\x00\x19tEXtSof\ +tware\x00www.inksca\ +pe.org\x9b\xee<\x1a\x00\x00\x04lID\ +ATx\xda\xc5V\xdfo\x1bE\x10\x9e\xfbm\xc7v\ +b\xb7v\x13\x0a\x11\x22\x05\xa9\xa2\xef\xbc \xf1\x14\xde\ +\xf87\x80g\xd4\x97\x0a\x89\xf2\x04\xadT\xf8\x7f\x90\x8a\ +\x04\xaa*\xb5oE4\x84\x22\x88\xd4\x22L\x8c\x93\xda\ +q\xb1\xef\xec\xbb\xdb[fF\x1e\xfbzw\xe6B\xa4\ +\xd2M\xd63\xbbw7\xf3\xed7\xdf\xee\x9d\xad\xb5\x86\ +\x97\xd9\xec\xb95\xb0\xeb\x97\x09@_\xfd\xe4\xea\xedD\ +\xab]\xb9\xf0\xce\xbb\xef\xc1\xce\x9b\x97\xc1\xb1,\x80\x0c\ +K\x86\x81x\xb1\x9b\xa6\x01\xfcgH\xe7\x8bl\xf1\x12\ +\xcf\xc5Q\x0c{?\xfd\x08\xf7\xef\xde\x01i\xad\xd6\xb9\ +o\xaf\x7f~\xfd\xfd4\x00\xf0\xfd\xc9\xee\xc3\xbd\x87\xb0\ +\xb9\xb9\x05\x17:\x1d8\xdf\xb9\x00\xdb\xdb\xaf\x83\xe7:\ +\x85\xc8\x8d\xf9\x0fYN\x9e\xf5\x19\x84\x01\xfe,\x84~\ +\xff/\x98\x06S\x906H\x9e\xeef\x19\x80$I\xa0\ +V\xab\x81c\xdb\xec\x9b\xa0y\x85\xbf\xf7O\x8a\x92g\ +\x18y~`\xa4\x00\xbe\xd6n\xa0\xd1\x1c3\x9d\xab\x10\ +@s\xa3\x09\x9e\xe7-n\xb0,\x03\xdez\xb5\xc5\xbe\ +\xce&\xe7D\xe2\x8a\xe59a\x80\xc7\xc14\xa4K\xe5\ +\x00h74\x1a\x0d\xf1\xf9a\x0b\x19pm\x0bV\xd5\ +`5\x00\x89\x89\xc9\xa8C\xc21S\xb9\x0a\x19\xc8\xc4\ +\xd7\x08\x00o\xb0%\x9a\x5c(.\x83\x9e\x07\xa6\x84\x1a\ +\x7f\xd0\xe5q\xac\x14\x8f\xd3\xf1\x95R\xe5\x00\x12\x8d\xb8\ +\xf1\xc1\x9f\x1f\x1fCQ\xd3\x99\x91\xd6\xe21\x12\xb2<\ +\xd8:W\x03\x95\xe4JP\x0e\x80\x86\x11>\xb9\xbd\xb9\ +\xfe\xbc\xc84\xff\xe7\xe8$\xa3\x19\xc8\x82\x0d\xee\xb3P\ +\xd1\x8aO\xa7\x81tSq\x021u+\x0d\xac\x00\x88\ +\xac^\x92\xb2]\xfa1.Bi\xfd\xdf5\x10'\x0a\ +\x22\xda\x8e\x91Z]\x02Y\xbd\xb89\x06\x805\xa0\x12\ +}\x86\x12\xe0\xd3Q\xac\xa0w<\x96\xa92-H\xed\ +\xc5\xe5\xd6Z\xf7\x90MU.B\x9d\x01\xa0pL\xf4\ +5\x1b\x15\xd9W\xf9D\x99d<\xbb`\x80\x1d\x8a\xc1\ +\xc9\xd3\xf1u!\x039\x0dh\x16\xa1Q\xb2t\x9d\x06\ +%\xe3\xa5\x06\xc8a\x0d\xa4\xe3'\xa7\xd1\xc0\xbd\xbb\xdf\ +C\xaf\xd7\x83\xc0\xf7K\xe8/\x16\xa60S][\x83\ +'\xbf=\xcaj\xa0\xbc\x04O~\xfd\x85z\xfa\x0d\x98\ +\xb5\xc5\xa0V+\xbe\xa4\x048\xf9\x82[\xc9I\xf8\xff\ +}\x19\x15k@\xbfX\x06\xce^\x82\x0f?\xfe\x08\xde\ +\xd8\xd9)\xaa\xe5\xca:\x0f\x06\x03\xf8\xf4\xda50M\ +\x13\xe3j\xde\xd2\x9b\x9d\xce\xbf\x8b0\x8e\xe3\x5c`\xaf\ +\xe2\xb1\x8a\xc7\xe3\xb1\x08/+0\x9a\x93.s\xfca\ +S\xa9T\xc0\xb2,\xde\x09\xb3\xd9,\x1f_\x00\x14\x09\ +CZ\xfa\x04\xbb\xf1\xc5\x97t\xac\xca\xe7\x1b\xdc\xb8y\ +\x93V(\xa0\xe8>\xb2\xcb\x17\x0f\x832\x89o\xfa\xb2\ +\xa2\xf93\x00\x98\x07\xa5\xf6\xf4\xf8\x18\xa4\x0dON(\ +\x09\x01\xa0\x95\x91\xcf\xcfK\xd7\xcb\x17\x82\x98S\x00(\ +\xa0(\x9cN)x\x16 QK\xf3D-\xdb(\x8a\ +d\xe5\xc2\x02g\x150\x9a\x80!#\xd5j\x15j\xf5\ +:\x0c\x07\x83\x02\x0d\x14 \xb4l\xbb\x10@\x14G\x10\ +\x04\x81$ +L\x90\xe5\x1e\x22({\x0e4\xa6\x18\ +t\xaf\x01\x10\xe0\xa2\xa28>\x1d\x03\xe0\xba\x1c|\x8a\ +\x0f\xc5q$\xe5 +\xc2\xa2\xd5K\x09$9_\x8f\ +Bd\x87E\xa8\xf9\x85d\xa0\xb5M\x0b\x9e\x8dF\xd0\ +X_/\x02\xa0z`\xc0V\xf6\xc4\x0a\xfc\x00\x1c\xc7\ +\x811Z\x7f2a]4\x9bM\x14\xa2/I\x85\xfe\ +\x85\x0d\xc3\x10\x81\xd1|\xb2\x10\xa89\xdf\x9e\xedv\x1b\ +\xfa\xfd>\x18\xd846\x02\xc0\x83\xcb\x97.}P\xa9\ +\xd6\xbe\xc1R\xb5\xd3\xfbU\xe8\xbe\xf5\xd5-\x01E\x9d\ +\xb6&\x05\xcf\x89P\xfc(\x0cY+\x02\xc02M\x9e\ +\xefv\xbb,^lUL\x1b\x08\x03\xc6\xa3\x83\x83?\ +766\xbe\xde~\xe5\xe2gx\xc3\x1a\x8b0\x0a9\ +\x91=\xd7Bj\xc5D\xbd\xd0\x9f>\x8c(\xb8h*\ +]2\xd1\x90\x8cC4\xe7\xb1w\x05\x00\xdd\xf9\xf7h\ +4\xfa\x0e\x95\xdf\xf2<\xef\x22\x11\xf0\xf6\x95+\xd6\x0f\ +\x0f\x1e\xec\xb8\xae\xeb\xb9\x8e\xe3\xa2(]\x04\xe3a\x12\ +\x87\xca'\x87\x80\xe6/8\x15\x22\x980\xc26\x1c\x0e\ +}\xdb\xb1\x0f\x0e\x0f\x0fgx\xd5X\xe6`\xba\x15:\ +\xf7\xd0\x9ba\xe7\x12p\x0c\x8c\xe5\xa3\xbb\x17\xccf\x8f\ +\xb1;4\xfdG\xb7\x9bT\xaa\xd5\x10O\xb5D\xd0#\ +K\x80@\x89\x15\x8d\xc04\xd5\xb5^\xaf\x1bx\xfa\x19\ +\x84\xe7\x04\xcf\x88\xfd\xfd\xfd\xe4\xe8\xe8\xc8\x9dL&\x14\ +\xc7\xcc\x7f5p\xf2g\x94\xf7\x1f\xdf\x9a\xd2\x93\xfbC\ +\xb7\xa7\x00\x00\x00\x00IEND\xaeB`\x82\ +" + +qt_resource_name = b"\ +\x00\x05\ +\x00o\xa6S\ +\x00i\ +\x00c\x00o\x00n\x00s\ +\x00\x10\ +\x0c\xbc.g\ +\x00d\ +\x00o\x00c\x00u\x00m\x00e\x00n\x00t\x00-\x00n\x00e\x00w\x00.\x00p\x00n\x00g\ +\x00\x14\ +\x0b\xa9\xab'\ +\x00d\ +\x00o\x00c\x00u\x00m\x00e\x00n\x00t\x00-\x00s\x00a\x00v\x00e\x00-\x00a\x00s\x00.\ +\x00p\x00n\x00g\ +\x00\x0d\ +\x03\xd2\xbeg\ +\x00e\ +\x00d\x00i\x00t\x00-\x00u\x00n\x00d\x00o\x00.\x00p\x00n\x00g\ +\x00\x0c\ +\x07\xb1Y'\ +\x00e\ +\x00d\x00i\x00t\x00-\x00c\x00u\x00t\x00.\x00p\x00n\x00g\ +\x00\x0d\ +\x01\x1c\xb1\xa7\ +\x00e\ +\x00d\x00i\x00t\x00-\x00c\x00o\x00p\x00y\x00.\x00p\x00n\x00g\ +\x00\x0d\ +\x0c\xd2\xbf\xe7\ +\x00e\ +\x00d\x00i\x00t\x00-\x00r\x00e\x00d\x00o\x00.\x00p\x00n\x00g\ +\x00\x11\ +\x01\xa6\xc4\x87\ +\x00d\ +\x00o\x00c\x00u\x00m\x00e\x00n\x00t\x00-\x00o\x00p\x00e\x00n\x00.\x00p\x00n\x00g\ +\ +\x00\x0e\ +\x0c\xaa\xc0\xa7\ +\x00e\ +\x00d\x00i\x00t\x00-\x00p\x00a\x00s\x00t\x00e\x00.\x00p\x00n\x00g\ +\x00\x11\ +\x0f\xe3\xd5g\ +\x00d\ +\x00o\x00c\x00u\x00m\x00e\x00n\x00t\x00-\x00s\x00a\x00v\x00e\x00.\x00p\x00n\x00g\ +\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x03\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x19Z\ +\x00\x00\x01\x9f{C\xf1'\ +\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x01\x00\x00$\x8c\ +\x00\x00\x01\x9f{0\xc99\ +\x00\x00\x00d\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xf2\ +\x00\x00\x01\x9f{C\xf1\x18\ +\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x15\xda\ +\x00\x00\x01\x9f{C\xf1.\ +\x00\x00\x006\x00\x00\x00\x00\x00\x01\x00\x00\x05\x86\ +\x00\x00\x01\x9f{0\xc9B\ +\x00\x00\x01\x0a\x00\x00\x00\x00\x00\x01\x00\x00+\x96\ +\x00\x00\x01\x9f{C\xf1N\ +\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x9f{0\xc9+\ +\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x1c\xba\ +\x00\x00\x01\x9f{C\xf1=\ +\x00\x00\x01,\x00\x00\x00\x00\x00\x01\x00\x001\x18\ +\x00\x00\x01\x9f{0\xc9R\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/BEdit/src/bedit/settings_dialog.py b/BEdit/src/bedit/settings_dialog.py new file mode 100644 index 0000000..f557fc7 --- /dev/null +++ b/BEdit/src/bedit/settings_dialog.py @@ -0,0 +1,30 @@ +from PySide6.QtCore import QSettings +from PySide6.QtWidgets import QDialog + +from bedit.ui_settings_dialog import Ui_SettingsDialog + + +class SettingsDialog(QDialog): + """Edit application preferences defined in the Designer form.""" + + def __init__(self, parent=None) -> None: + super().__init__(parent) + self.ui = Ui_SettingsDialog() + self.ui.setupUi(self) + self.settings = QSettings() + self._load_settings() + + def _load_settings(self) -> None: + self.ui.autosaveGroupBox.setChecked( + self.settings.value("general/autosaveEnabled", False, type=bool) + ) + self.ui.autosaveIntervalSpinBox.setValue( + self.settings.value("general/autosaveInterval", 5, type=int) + ) + + def accept(self) -> None: + self.settings.setValue("general/autosaveEnabled", self.ui.autosaveGroupBox.isChecked()) + self.settings.setValue( + "general/autosaveInterval", self.ui.autosaveIntervalSpinBox.value() + ) + super().accept() diff --git a/BEdit/src/bedit/ui_main_window.py b/BEdit/src/bedit/ui_main_window.py new file mode 100644 index 0000000..e41f54e --- /dev/null +++ b/BEdit/src/bedit/ui_main_window.py @@ -0,0 +1,277 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'main_window.ui' +## +## Created by: Qt User Interface Compiler version 6.11.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient, + QCursor, QFont, QFontDatabase, QGradient, + QIcon, QImage, QKeySequence, QLinearGradient, + QPainter, QPalette, QPixmap, QRadialGradient, + QTransform) +from PySide6.QtWidgets import (QApplication, QDockWidget, QHBoxLayout, QHeaderView, + QMainWindow, QMenu, QMenuBar, QSizePolicy, + QSplitter, QToolBar, QTreeView, QVBoxLayout, + QWidget) +from . import resources_rc + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + if not MainWindow.objectName(): + MainWindow.setObjectName(u"MainWindow") + MainWindow.resize(1000, 700) + self.actionNew = QAction(MainWindow) + self.actionNew.setObjectName(u"actionNew") + icon = QIcon() + icon.addFile(u":/icons/icons/document-new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionNew.setIcon(icon) + self.actionOpen = QAction(MainWindow) + self.actionOpen.setObjectName(u"actionOpen") + icon1 = QIcon() + icon1.addFile(u":/icons/icons/document-open.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionOpen.setIcon(icon1) + self.actionSave = QAction(MainWindow) + self.actionSave.setObjectName(u"actionSave") + icon2 = QIcon() + icon2.addFile(u":/icons/icons/document-save.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionSave.setIcon(icon2) + self.actionSaveAs = QAction(MainWindow) + self.actionSaveAs.setObjectName(u"actionSaveAs") + icon3 = QIcon() + icon3.addFile(u":/icons/icons/document-save-as.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionSaveAs.setIcon(icon3) + self.actionExit = QAction(MainWindow) + self.actionExit.setObjectName(u"actionExit") + self.actionUndo = QAction(MainWindow) + self.actionUndo.setObjectName(u"actionUndo") + icon4 = QIcon() + icon4.addFile(u":/icons/icons/edit-undo.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionUndo.setIcon(icon4) + self.actionRedo = QAction(MainWindow) + self.actionRedo.setObjectName(u"actionRedo") + icon5 = QIcon() + icon5.addFile(u":/icons/icons/edit-redo.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionRedo.setIcon(icon5) + self.actionCut = QAction(MainWindow) + self.actionCut.setObjectName(u"actionCut") + icon6 = QIcon() + icon6.addFile(u":/icons/icons/edit-cut.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionCut.setIcon(icon6) + self.actionCopy = QAction(MainWindow) + self.actionCopy.setObjectName(u"actionCopy") + icon7 = QIcon() + icon7.addFile(u":/icons/icons/edit-copy.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionCopy.setIcon(icon7) + self.actionPaste = QAction(MainWindow) + self.actionPaste.setObjectName(u"actionPaste") + icon8 = QIcon() + icon8.addFile(u":/icons/icons/edit-paste.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionPaste.setIcon(icon8) + self.actionSelectAll = QAction(MainWindow) + self.actionSelectAll.setObjectName(u"actionSelectAll") + self.actionAbout = QAction(MainWindow) + self.actionAbout.setObjectName(u"actionAbout") + self.actionSettings = QAction(MainWindow) + self.actionSettings.setObjectName(u"actionSettings") + self.actionAboutQt = QAction(MainWindow) + self.actionAboutQt.setObjectName(u"actionAboutQt") + self.centralwidget = QWidget(MainWindow) + self.centralwidget.setObjectName(u"centralwidget") + self.workspaceLayout = QHBoxLayout(self.centralwidget) + self.workspaceLayout.setSpacing(0) + self.workspaceLayout.setObjectName(u"workspaceLayout") + self.workspaceLayout.setContentsMargins(0, 0, 0, 0) + self.workspaceSplitter = QSplitter(self.centralwidget) + self.workspaceSplitter.setObjectName(u"workspaceSplitter") + sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.workspaceSplitter.sizePolicy().hasHeightForWidth()) + self.workspaceSplitter.setSizePolicy(sizePolicy) + self.workspaceSplitter.setOrientation(Qt.Orientation.Horizontal) + self.workspaceSplitter.setChildrenCollapsible(False) + self.leftDockHost = QMainWindow(self.workspaceSplitter) + self.leftDockHost.setObjectName(u"leftDockHost") + self.leftDockHost.setMinimumSize(QSize(220, 0)) + self.panel_libraries = QDockWidget(self.leftDockHost) + self.panel_libraries.setObjectName(u"panel_libraries") + self.panel_libraries.setMinimumSize(QSize(220, 91)) + self.dockWidgetContents = QWidget() + self.dockWidgetContents.setObjectName(u"dockWidgetContents") + self.librariesLayout = QVBoxLayout(self.dockWidgetContents) + self.librariesLayout.setSpacing(0) + self.librariesLayout.setObjectName(u"librariesLayout") + self.librariesLayout.setContentsMargins(0, 0, 0, 0) + self.treeView = QTreeView(self.dockWidgetContents) + self.treeView.setObjectName(u"treeView") + self.treeView.setAlternatingRowColors(True) + self.treeView.setUniformRowHeights(True) + + self.librariesLayout.addWidget(self.treeView) + + self.panel_libraries.setWidget(self.dockWidgetContents) + self.leftDockHost.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.panel_libraries) + self.workspaceSplitter.addWidget(self.leftDockHost) + self.workspace = QWidget(self.workspaceSplitter) + self.workspace.setObjectName(u"workspace") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) + sizePolicy1.setHorizontalStretch(1) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.workspace.sizePolicy().hasHeightForWidth()) + self.workspace.setSizePolicy(sizePolicy1) + self.workspace.setStyleSheet(u"QWidget#workspace {\n" +" background-color: rgb(198, 198, 198);\n" +"}") + self.workspaceSplitter.addWidget(self.workspace) + + self.workspaceLayout.addWidget(self.workspaceSplitter) + + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QMenuBar(MainWindow) + self.menubar.setObjectName(u"menubar") + self.menubar.setGeometry(QRect(0, 0, 1000, 24)) + self.menuFile = QMenu(self.menubar) + self.menuFile.setObjectName(u"menuFile") + self.menuEdit = QMenu(self.menubar) + self.menuEdit.setObjectName(u"menuEdit") + self.menuView = QMenu(self.menubar) + self.menuView.setObjectName(u"menuView") + self.menuPanels = QMenu(self.menuView) + self.menuPanels.setObjectName(u"menuPanels") + self.menuToolbars = QMenu(self.menuView) + self.menuToolbars.setObjectName(u"menuToolbars") + self.menuHelp = QMenu(self.menubar) + self.menuHelp.setObjectName(u"menuHelp") + MainWindow.setMenuBar(self.menubar) + self.fileToolbar = QToolBar(MainWindow) + self.fileToolbar.setObjectName(u"fileToolbar") + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.fileToolbar.sizePolicy().hasHeightForWidth()) + self.fileToolbar.setSizePolicy(sizePolicy2) + self.fileToolbar.setMinimumSize(QSize(0, 40)) + self.fileToolbar.setMaximumSize(QSize(16777215, 40)) + self.fileToolbar.setIconSize(QSize(24, 24)) + MainWindow.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.fileToolbar) + self.editToolbar = QToolBar(MainWindow) + self.editToolbar.setObjectName(u"editToolbar") + MainWindow.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.editToolbar) + + self.menubar.addAction(self.menuFile.menuAction()) + self.menubar.addAction(self.menuEdit.menuAction()) + self.menubar.addAction(self.menuView.menuAction()) + self.menubar.addAction(self.menuHelp.menuAction()) + self.menuFile.addAction(self.actionNew) + self.menuFile.addAction(self.actionOpen) + self.menuFile.addSeparator() + self.menuFile.addAction(self.actionSave) + self.menuFile.addAction(self.actionSaveAs) + self.menuFile.addSeparator() + self.menuFile.addAction(self.actionExit) + self.menuEdit.addAction(self.actionUndo) + self.menuEdit.addAction(self.actionRedo) + self.menuEdit.addSeparator() + self.menuEdit.addAction(self.actionCopy) + self.menuEdit.addAction(self.actionCut) + self.menuEdit.addAction(self.actionPaste) + self.menuEdit.addSeparator() + self.menuEdit.addAction(self.actionSettings) + self.menuView.addAction(self.menuPanels.menuAction()) + self.menuView.addAction(self.menuToolbars.menuAction()) + self.menuHelp.addAction(self.actionAbout) + self.menuHelp.addAction(self.actionAboutQt) + self.fileToolbar.addAction(self.actionNew) + self.fileToolbar.addAction(self.actionOpen) + self.fileToolbar.addAction(self.actionSave) + self.fileToolbar.addAction(self.actionSaveAs) + self.editToolbar.addAction(self.actionUndo) + self.editToolbar.addAction(self.actionRedo) + self.editToolbar.addAction(self.actionCopy) + self.editToolbar.addAction(self.actionCut) + self.editToolbar.addAction(self.actionPaste) + + self.retranslateUi(MainWindow) + + QMetaObject.connectSlotsByName(MainWindow) + # setupUi + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"BEdit", None)) + self.actionNew.setText(QCoreApplication.translate("MainWindow", u"&New", None)) +#if QT_CONFIG(statustip) + self.actionNew.setStatusTip(QCoreApplication.translate("MainWindow", u"Create a new document", None)) +#endif // QT_CONFIG(statustip) +#if QT_CONFIG(shortcut) + self.actionNew.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+N", None)) +#endif // QT_CONFIG(shortcut) + self.actionOpen.setText(QCoreApplication.translate("MainWindow", u"&Open\u2026", None)) +#if QT_CONFIG(statustip) + self.actionOpen.setStatusTip(QCoreApplication.translate("MainWindow", u"Open a document", None)) +#endif // QT_CONFIG(statustip) +#if QT_CONFIG(shortcut) + self.actionOpen.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+O", None)) +#endif // QT_CONFIG(shortcut) + self.actionSave.setText(QCoreApplication.translate("MainWindow", u"&Save", None)) +#if QT_CONFIG(statustip) + self.actionSave.setStatusTip(QCoreApplication.translate("MainWindow", u"Save the current document", None)) +#endif // QT_CONFIG(statustip) +#if QT_CONFIG(shortcut) + self.actionSave.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+S", None)) +#endif // QT_CONFIG(shortcut) + self.actionSaveAs.setText(QCoreApplication.translate("MainWindow", u"Save &As\u2026", None)) +#if QT_CONFIG(shortcut) + self.actionSaveAs.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+Shift+S", None)) +#endif // QT_CONFIG(shortcut) + self.actionExit.setText(QCoreApplication.translate("MainWindow", u"E&xit", None)) +#if QT_CONFIG(shortcut) + self.actionExit.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+Q", None)) +#endif // QT_CONFIG(shortcut) + self.actionUndo.setText(QCoreApplication.translate("MainWindow", u"&Undo", None)) +#if QT_CONFIG(shortcut) + self.actionUndo.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+Z", None)) +#endif // QT_CONFIG(shortcut) + self.actionRedo.setText(QCoreApplication.translate("MainWindow", u"&Redo", None)) +#if QT_CONFIG(shortcut) + self.actionRedo.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+Y", None)) +#endif // QT_CONFIG(shortcut) + self.actionCut.setText(QCoreApplication.translate("MainWindow", u"Cu&t", None)) +#if QT_CONFIG(shortcut) + self.actionCut.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+X", None)) +#endif // QT_CONFIG(shortcut) + self.actionCopy.setText(QCoreApplication.translate("MainWindow", u"&Copy", None)) +#if QT_CONFIG(shortcut) + self.actionCopy.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+C", None)) +#endif // QT_CONFIG(shortcut) + self.actionPaste.setText(QCoreApplication.translate("MainWindow", u"&Paste", None)) +#if QT_CONFIG(shortcut) + self.actionPaste.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+V", None)) +#endif // QT_CONFIG(shortcut) + self.actionSelectAll.setText(QCoreApplication.translate("MainWindow", u"Select &All", None)) +#if QT_CONFIG(shortcut) + self.actionSelectAll.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+A", None)) +#endif // QT_CONFIG(shortcut) + self.actionAbout.setText(QCoreApplication.translate("MainWindow", u"&About BEdit", None)) + self.actionSettings.setText(QCoreApplication.translate("MainWindow", u"&Settings\u2026", None)) +#if QT_CONFIG(statustip) + self.actionSettings.setStatusTip(QCoreApplication.translate("MainWindow", u"Configure BEdit", None)) +#endif // QT_CONFIG(statustip) + self.actionAboutQt.setText(QCoreApplication.translate("MainWindow", u"About &Qt", None)) + self.panel_libraries.setWindowTitle(QCoreApplication.translate("MainWindow", u"Libraries", None)) + self.menuFile.setTitle(QCoreApplication.translate("MainWindow", u"&File", None)) + self.menuEdit.setTitle(QCoreApplication.translate("MainWindow", u"&Edit", None)) + self.menuView.setTitle(QCoreApplication.translate("MainWindow", u"&View", None)) + self.menuPanels.setTitle(QCoreApplication.translate("MainWindow", u"&Panels", None)) + self.menuToolbars.setTitle(QCoreApplication.translate("MainWindow", u"&Toolbars", None)) + self.menuHelp.setTitle(QCoreApplication.translate("MainWindow", u"&Help", None)) + self.fileToolbar.setWindowTitle(QCoreApplication.translate("MainWindow", u"File", None)) + self.editToolbar.setWindowTitle(QCoreApplication.translate("MainWindow", u"Edit", None)) + # retranslateUi + diff --git a/BEdit/src/bedit/ui_settings_dialog.py b/BEdit/src/bedit/ui_settings_dialog.py new file mode 100644 index 0000000..488ee94 --- /dev/null +++ b/BEdit/src/bedit/ui_settings_dialog.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'settings_dialog.ui' +## +## Created by: Qt User Interface Compiler version 6.11.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, + QFormLayout, QGroupBox, QSizePolicy, QSpacerItem, + QSpinBox, QTabWidget, QVBoxLayout, QWidget) + +class Ui_SettingsDialog(object): + def setupUi(self, SettingsDialog): + if not SettingsDialog.objectName(): + SettingsDialog.setObjectName(u"SettingsDialog") + SettingsDialog.resize(480, 300) + SettingsDialog.setModal(True) + self.dialogLayout = QVBoxLayout(SettingsDialog) + self.dialogLayout.setObjectName(u"dialogLayout") + self.settingsTabs = QTabWidget(SettingsDialog) + self.settingsTabs.setObjectName(u"settingsTabs") + self.generalTab = QWidget() + self.generalTab.setObjectName(u"generalTab") + self.generalLayout = QVBoxLayout(self.generalTab) + self.generalLayout.setObjectName(u"generalLayout") + self.autosaveGroupBox = QGroupBox(self.generalTab) + self.autosaveGroupBox.setObjectName(u"autosaveGroupBox") + self.autosaveGroupBox.setCheckable(True) + self.autosaveGroupBox.setChecked(False) + self.autosaveLayout = QFormLayout(self.autosaveGroupBox) + self.autosaveLayout.setObjectName(u"autosaveLayout") + self.autosaveIntervalSpinBox = QSpinBox(self.autosaveGroupBox) + self.autosaveIntervalSpinBox.setObjectName(u"autosaveIntervalSpinBox") + self.autosaveIntervalSpinBox.setMinimum(1) + self.autosaveIntervalSpinBox.setMaximum(120) + self.autosaveIntervalSpinBox.setValue(5) + + self.autosaveLayout.setWidget(0, QFormLayout.ItemRole.FieldRole, self.autosaveIntervalSpinBox) + + + self.generalLayout.addWidget(self.autosaveGroupBox) + + self.generalSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.generalLayout.addItem(self.generalSpacer) + + self.settingsTabs.addTab(self.generalTab, "") + + self.dialogLayout.addWidget(self.settingsTabs) + + self.buttonBox = QDialogButtonBox(SettingsDialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setOrientation(Qt.Orientation.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Cancel|QDialogButtonBox.StandardButton.Ok) + + self.dialogLayout.addWidget(self.buttonBox) + + + self.retranslateUi(SettingsDialog) + self.buttonBox.accepted.connect(SettingsDialog.accept) + self.buttonBox.rejected.connect(SettingsDialog.reject) + + self.settingsTabs.setCurrentIndex(0) + + + QMetaObject.connectSlotsByName(SettingsDialog) + # setupUi + + def retranslateUi(self, SettingsDialog): + SettingsDialog.setWindowTitle(QCoreApplication.translate("SettingsDialog", u"Settings", None)) + self.autosaveGroupBox.setTitle(QCoreApplication.translate("SettingsDialog", u"Automatic saving", None)) + self.autosaveIntervalSpinBox.setSuffix(QCoreApplication.translate("SettingsDialog", u" minutes", None)) + self.settingsTabs.setTabText(self.settingsTabs.indexOf(self.generalTab), QCoreApplication.translate("SettingsDialog", u"General", None)) + # retranslateUi + diff --git a/BEdit/ui/main_window.ui b/BEdit/ui/main_window.ui new file mode 100644 index 0000000..83d38c7 --- /dev/null +++ b/BEdit/ui/main_window.ui @@ -0,0 +1,389 @@ + + + MainWindow + + + + 0 + 0 + 1000 + 700 + + + + BEdit + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Qt::Orientation::Horizontal + + + false + + + + + 220 + 0 + + + + + + 220 + 91 + + + + Libraries + + + 1 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + true + + + true + + + + + + + + + + + 1 + 0 + + + + QWidget#workspace { + background-color: rgb(198, 198, 198); +} + + + + + + + + + + 0 + 0 + 1000 + 24 + + + + + &File + + + + + + + + + + + + &Edit + + + + + + + + + + + + + &View + + + + &Panels + + + + + &Toolbars + + + + + + + + &Help + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + 16777215 + 40 + + + + File + + + + 24 + 24 + + + + TopToolBarArea + + + false + + + + + + + + + Edit + + + TopToolBarArea + + + false + + + + + + + + + + + :/icons/icons/document-new.png:/icons/icons/document-new.png + + + &New + + + Create a new document + + + Ctrl+N + + + + + + :/icons/icons/document-open.png:/icons/icons/document-open.png + + + &Open… + + + Open a document + + + Ctrl+O + + + + + + :/icons/icons/document-save.png:/icons/icons/document-save.png + + + &Save + + + Save the current document + + + Ctrl+S + + + + + + :/icons/icons/document-save-as.png:/icons/icons/document-save-as.png + + + Save &As… + + + Ctrl+Shift+S + + + + + E&xit + + + Ctrl+Q + + + + + + :/icons/icons/edit-undo.png:/icons/icons/edit-undo.png + + + &Undo + + + Ctrl+Z + + + + + + :/icons/icons/edit-redo.png:/icons/icons/edit-redo.png + + + &Redo + + + Ctrl+Y + + + + + + :/icons/icons/edit-cut.png:/icons/icons/edit-cut.png + + + Cu&t + + + Ctrl+X + + + + + + :/icons/icons/edit-copy.png:/icons/icons/edit-copy.png + + + &Copy + + + Ctrl+C + + + + + + :/icons/icons/edit-paste.png:/icons/icons/edit-paste.png + + + &Paste + + + Ctrl+V + + + + + Select &All + + + Ctrl+A + + + + + &About BEdit + + + + + &Settings… + + + Configure BEdit + + + + + About &Qt + + + + + + + + diff --git a/BEdit/ui/settings_dialog.ui b/BEdit/ui/settings_dialog.ui new file mode 100644 index 0000000..2329a64 --- /dev/null +++ b/BEdit/ui/settings_dialog.ui @@ -0,0 +1,125 @@ + + + SettingsDialog + + + + 0 + 0 + 480 + 300 + + + + Settings + + + true + + + + + + 0 + + + + General + + + + + + Automatic saving + + + true + + + false + + + + + + minutes + + + 1 + + + 120 + + + 5 + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + Qt::Orientation::Horizontal + + + QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok + + + + + + + + + buttonBox + accepted() + SettingsDialog + accept() + + + 390 + 275 + + + 240 + 150 + + + + + buttonBox + rejected() + SettingsDialog + reject() + + + 390 + 275 + + + 240 + 150 + + + + +