diff --git a/src/slice/__main__.py b/src/slice/__main__.py index 3970a4c..ab92fa4 100644 --- a/src/slice/__main__.py +++ b/src/slice/__main__.py @@ -17,7 +17,7 @@ import traceback from pathlib import Path -from PyQt5.QtCore import Qt, QThreadPool, QUrl +from PyQt5.QtCore import QPoint, Qt, QThreadPool, QUrl from PyQt5.QtGui import ( QDesktopServices, QFont, @@ -56,7 +56,7 @@ SliceOpenFileDialog, SliceSaveFileDialog, ) -from .ui.widgets import DragDropLineEdit +from .ui.widgets import CollapsibleBox, DragDropLineEdit __VERSION__ = "0.5.0" @@ -81,12 +81,17 @@ def __init__(self, parent=None): self.setUIMainWindow() self.setUIMainLayout() self.setUIAppIconTitle() + self.addStretch() self.setUIFontPathDataEntry() + self.addStretch() self.setUIAxisValueDataEntry() + self.addStretch() self.setUINameTableDataEntry() + self.addStretch() self.setUIBitSettingsDataEntry() + self.addStretch() self.setUISliceButton() - # self.addStretch() + self.addStretch() self.setUIStatusBar() # Define main layout on central widget @@ -221,7 +226,7 @@ def setUIMenuBar(self): def setUIMainWindow(self): self.setWindowTitle("Slice") - self.resize(850, 950) + self.resize(850, 450) def setUIMainLayout(self): self.main_layout = QVBoxLayout() @@ -289,14 +294,11 @@ def setUIFontPathDataEntry(self): # def setUIAxisValueDataEntry(self): - outerVBox = QVBoxLayout() + self.axisVBox = QVBoxLayout() axisEditLabel = QLabel("

Axis Definitions

") axisEditLabel.setStyleSheet("QLabel { padding-left: 5px;}") - axisEditGroupBox = QGroupBox("") - axisEditGroupBox.setMinimumHeight(200) - axisEditGroupBox.setSizePolicy( - QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding - ) + self.axisEditGroupBox = QGroupBox("") + self.axisEditGroupBox.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) self.fvar_table_view = QTableView() self.fvar_table_model = DesignAxisModel() @@ -304,9 +306,10 @@ def setUIAxisValueDataEntry(self): self.fvar_table_view.horizontalHeader().setStretchLastSection(True) self.fvar_table_view.resizeColumnToContents(0) self.fvar_table_view.setAlternatingRowColors(True) - axisEditGroupBox.setLayout(QVBoxLayout()) - axisEditGroupBox.layout().addWidget(self.fvar_table_view) - axisEditGroupBox.setMinimumHeight(205) + self.axisEditGroupBox.setLayout(QVBoxLayout()) + self.axisEditGroupBox.layout().addWidget(self.fvar_table_view) + self.axisEditGroupBox.setMinimumHeight(205) + self.axisEditGroupBox.setMaximumHeight(205) ibmplex_id = QFontDatabase.addApplicationFont(":/font/IBMPlexMono-Regular.ttf") font_family = QFontDatabase.applicationFontFamilies(ibmplex_id)[0] @@ -314,11 +317,11 @@ def setUIAxisValueDataEntry(self): self.fvar_table_view.setFont(ibmplex) self.fvar_table_view.resizeColumnToContents(0) - outerVBox.addWidget(axisEditLabel) - outerVBox.addWidget(axisEditGroupBox) + self.axisVBox.addWidget(axisEditLabel) + self.axisVBox.addWidget(self.axisEditGroupBox) # add to main layout # self.main_layout.addSpacing(10) - self.main_layout.addLayout(outerVBox) + self.main_layout.addLayout(self.axisVBox) # # Name table record editor table view @@ -328,25 +331,27 @@ def setUINameTableDataEntry(self): outerVBox = QVBoxLayout() nameTableLabel = QLabel("

Name Table Definitions

") nameTableLabel.setStyleSheet("QLabel { padding-left: 5px;}") - nameTableGroupBox = QGroupBox("") + self.nameTableGroupBox = QGroupBox("") self.nameTableView = QTableView() self.name_table_model = FontNameModel() self.nameTableView.setModel(self.name_table_model) self.nameTableView.horizontalHeader().setStretchLastSection(True) self.nameTableView.setAlternatingRowColors(True) + # self.nameTableView.setMinimumHeight(150) ibmplex_id = QFontDatabase.addApplicationFont(":/font/IBMPlexMono-Regular.ttf") font_family = QFontDatabase.applicationFontFamilies(ibmplex_id)[0] ibmplex = QFont(font_family) self.nameTableView.setFont(ibmplex) - nameTableGroupBox.setLayout(QVBoxLayout()) - nameTableGroupBox.layout().addWidget(self.nameTableView) - nameTableGroupBox.setMinimumHeight(210) + self.nameTableGroupBox.setLayout(QVBoxLayout()) + self.nameTableGroupBox.layout().addWidget(self.nameTableView) + self.nameTableGroupBox.setMinimumHeight(175) + # self.nameTableGroupBox.setMaximumHeight(600) outerVBox.addWidget(nameTableLabel) - outerVBox.addWidget(nameTableGroupBox) + outerVBox.addWidget(self.nameTableGroupBox) # self.main_layout.addSpacing(10) self.main_layout.addLayout(outerVBox) @@ -401,7 +406,12 @@ def setUIBitSettingsDataEntry(self): outerVBox.addWidget(bitSettingsOuterGroupBox) # self.main_layout.addSpacing(10) - self.main_layout.addLayout(outerVBox) + # self.main_layout.addLayout(outerVBox) + + collapsible_box = CollapsibleBox(parent=self, title="Developer Editors") + collapsible_box.setContentLayout(outerVBox) + + self.main_layout.addWidget(collapsible_box) # # Slice execution button @@ -443,7 +453,8 @@ def addStretch(self): def setWindowCenterPosition(self): rect = self.frameGeometry() centerLoc = QDesktopWidget().availableGeometry().center() - rect.moveCenter(centerLoc) + adjCenterLoc = QPoint(centerLoc.x(), centerLoc.y() - 200) + rect.moveCenter(adjCenterLoc) self.move(rect.topLeft()) # diff --git a/src/slice/fontresources.py b/src/slice/fontresources.py index 22c9e77..dcd1666 100644 --- a/src/slice/fontresources.py +++ b/src/slice/fontresources.py @@ -9,184 +9,6 @@ from PyQt5 import QtCore qt_resource_data = b"\ -\x00\x00\x0a\xf4\ -\x00\ -\x01\x00\x00\x00\x0f\x00\x80\x00\x03\x00\x70\x47\x44\x45\x46\x00\ -\x26\x00\x1c\x00\x00\x09\x8c\x00\x00\x00\x22\x47\x50\x4f\x53\x2c\ -\xa4\x24\xdc\x00\x00\x09\xb0\x00\x00\x00\xe0\x47\x53\x55\x42\x2b\ -\xb2\x2b\x90\x00\x00\x0a\x90\x00\x00\x00\x64\x4f\x53\x2f\x32\x66\ -\x9f\xb0\x1e\x00\x00\x07\x20\x00\x00\x00\x60\x63\x6d\x61\x70\x00\ -\xea\x01\xa6\x00\x00\x07\x80\x00\x00\x00\x54\x67\x61\x73\x70\x00\ -\x00\x00\x10\x00\x00\x09\x84\x00\x00\x00\x08\x67\x6c\x79\x66\x4d\ -\x1c\x69\x01\x00\x00\x00\xfc\x00\x00\x05\x5e\x68\x65\x61\x64\x20\ -\x2a\x68\x5c\x00\x00\x06\x98\x00\x00\x00\x36\x68\x68\x65\x61\x0b\ -\xc5\x06\xed\x00\x00\x06\xfc\x00\x00\x00\x24\x68\x6d\x74\x78\x10\ -\xe7\x01\x27\x00\x00\x06\xd0\x00\x00\x00\x2c\x6c\x6f\x63\x61\x09\ -\x70\x07\xf2\x00\x00\x06\x7c\x00\x00\x00\x1a\x6d\x61\x78\x70\x00\ -\x2d\x02\xad\x00\x00\x06\x5c\x00\x00\x00\x20\x6e\x61\x6d\x65\x20\ -\xf8\x37\xf9\x00\x00\x07\xdc\x00\x00\x01\x86\x70\x6f\x73\x74\xff\ -\x54\x00\x6e\x00\x00\x09\x64\x00\x00\x00\x20\x70\x72\x65\x70\x68\ -\x06\x8c\x85\x00\x00\x07\xd4\x00\x00\x00\x07\x00\x01\x00\x3a\xff\ -\xec\x02\x27\x02\xd0\x00\x50\x00\x00\x41\x32\x16\x17\x16\x16\x15\ -\x1c\x02\x15\x06\x06\x23\x22\x26\x35\x34\x3e\x02\x37\x17\x26\x26\ -\x23\x22\x0e\x02\x15\x15\x14\x16\x16\x17\x17\x1e\x03\x15\x15\x14\ -\x06\x06\x23\x22\x26\x26\x27\x26\x26\x35\x34\x36\x36\x37\x33\x16\ -\x16\x33\x32\x36\x37\x35\x34\x26\x26\x27\x27\x2e\x03\x35\x35\x34\ -\x3e\x02\x01\x59\x37\x4e\x18\x0f\x09\x15\x2f\x19\x19\x1c\x01\x03\ -\x04\x02\x18\x12\x1c\x13\x1a\x2e\x24\x15\x0d\x22\x1f\x5e\x30\x3e\ -\x23\x0e\x3b\x72\x56\x2f\x56\x3f\x11\x09\x0c\x01\x01\x01\x0d\x2c\ -\x6b\x49\x2e\x37\x0b\x0e\x1f\x1c\x5d\x36\x44\x25\x0e\x2a\x4a\x64\ -\x02\xd0\x1f\x19\x0e\x23\x16\x12\x2a\x29\x14\x02\x03\x13\x17\x08\ -\x14\x17\x1d\x12\x2b\x08\x06\x0f\x1a\x22\x15\x0c\x11\x17\x12\x0b\ -\x1f\x10\x26\x2b\x30\x1b\x20\x39\x54\x2d\x0e\x18\x10\x0a\x22\x1a\ -\x10\x1f\x1e\x0f\x24\x25\x18\x10\x15\x0f\x18\x15\x09\x1f\x12\x29\ -\x2b\x2e\x19\x20\x2d\x53\x42\x25\x00\x00\x01\x00\x35\xff\xf4\x01\ -\xca\x02\x28\x00\x31\x00\x00\x41\x32\x16\x16\x17\x16\x16\x15\x14\ -\x06\x07\x23\x26\x26\x23\x22\x06\x06\x15\x15\x14\x16\x17\x16\x16\ -\x33\x32\x36\x36\x37\x33\x16\x16\x15\x14\x06\x07\x0e\x02\x23\x22\ -\x2e\x02\x35\x35\x34\x36\x36\x01\x43\x1f\x30\x21\x06\x07\x07\x04\ -\x05\x0d\x1c\x35\x23\x22\x32\x1c\x0b\x0b\x11\x2b\x19\x19\x2c\x29\ -\x15\x0d\x01\x01\x08\x09\x08\x24\x36\x23\x38\x5d\x45\x25\x44\x79\ -\x02\x28\x07\x0b\x08\x06\x13\x10\x1d\x35\x1a\x0f\x0c\x1f\x3b\x2b\ -\x21\x1a\x29\x10\x0c\x0b\x06\x0f\x0c\x15\x2c\x18\x14\x1e\x0a\x07\ -\x0d\x08\x1f\x3f\x5f\x3f\x28\x50\x7b\x45\x00\x00\x01\x00\x3a\xff\ -\xf2\x02\x1d\x02\x2a\x00\x3c\x00\x00\x41\x32\x16\x16\x15\x15\x14\ -\x06\x06\x23\x23\x22\x26\x27\x07\x37\x33\x36\x36\x35\x34\x26\x27\ -\x26\x26\x23\x22\x06\x15\x15\x14\x16\x17\x16\x16\x33\x32\x36\x36\ -\x37\x33\x16\x16\x15\x14\x06\x07\x0e\x02\x23\x22\x2e\x02\x35\x35\ -\x34\x3e\x02\x01\x39\x47\x66\x37\x06\x0b\x06\xd6\x19\x2c\x11\x21\ -\x03\xcd\x01\x01\x09\x0b\x0b\x18\x15\x35\x3a\x09\x08\x13\x36\x26\ -\x22\x3b\x36\x19\x0d\x01\x01\x0a\x0a\x0b\x35\x45\x23\x42\x67\x47\ -\x25\x24\x43\x5f\x02\x2a\x3a\x66\x42\x2e\x16\x15\x06\x09\x07\x05\ -\x4d\x05\x0a\x05\x16\x26\x0e\x07\x06\x45\x49\x41\x19\x27\x0e\x0d\ -\x0a\x07\x0f\x0a\x13\x26\x13\x12\x18\x0a\x0b\x11\x0a\x24\x42\x5d\ -\x39\x3c\x37\x5d\x46\x26\x00\xff\xff\x00\x24\xff\xfd\x01\x21\x03\ -\x11\x06\x26\x00\x06\x00\x00\x00\x07\x00\x07\x00\xbe\x00\x00\x00\ -\x01\x00\x08\xff\xfb\x01\x40\x02\xf3\x00\x3a\x00\x00\x53\x3e\x03\ -\x32\x33\x32\x16\x16\x15\x1c\x04\x15\x14\x16\x17\x16\x16\x33\x32\ -\x36\x37\x33\x16\x16\x15\x14\x06\x06\x07\x0e\x02\x23\x22\x2e\x02\ -\x35\x3c\x04\x35\x27\x0e\x02\x23\x22\x26\x35\x34\x36\x0c\x0a\x22\ -\x28\x28\x20\x0a\x13\x19\x0d\x02\x04\x05\x0c\x0a\x0b\x17\x08\x08\ -\x01\x01\x05\x08\x06\x07\x1b\x1e\x0d\x25\x34\x22\x10\x05\x04\x12\ -\x14\x06\x0a\x0e\x03\x02\xee\x01\x02\x01\x01\x0d\x18\x12\x33\x65\ -\x64\x65\x65\x33\x0f\x16\x09\x04\x04\x05\x05\x14\x2e\x17\x0e\x16\ -\x10\x04\x04\x05\x02\x19\x2b\x3a\x22\x2d\x5a\x5c\x5b\x5b\x2d\x01\ -\x02\x03\x01\x19\x1e\x17\x2f\x00\x01\x00\x24\xff\xfd\x01\x18\x02\ -\x21\x00\x2a\x00\x00\x77\x3c\x04\x35\x23\x0e\x03\x23\x22\x26\x35\ -\x34\x36\x37\x3e\x03\x32\x33\x32\x16\x16\x15\x1c\x03\x15\x14\x16\ -\x16\x17\x06\x06\x23\x22\x26\x78\x05\x04\x0b\x0c\x0e\x07\x0e\x11\ -\x03\x02\x0d\x20\x23\x22\x1e\x0c\x15\x21\x13\x02\x04\x04\x1a\x2d\ -\x1b\x23\x1b\x40\x17\x42\x4a\x4c\x44\x19\x01\x03\x02\x01\x1a\x1a\ -\x19\x33\x17\x01\x02\x01\x01\x0c\x18\x13\x2a\x5f\x63\x5e\x29\x15\ -\x25\x26\x17\x01\x02\x1d\x00\x00\x01\xff\x9d\x02\x76\x00\x64\x03\ -\x11\x00\x11\x00\x00\x43\x3e\x03\x33\x32\x16\x15\x15\x0e\x03\x23\ -\x22\x26\x35\x63\x0f\x22\x25\x24\x11\x1a\x22\x0f\x21\x23\x22\x11\ -\x1c\x25\x03\x09\x02\x03\x02\x01\x12\x17\x6a\x02\x03\x02\x01\x1b\ -\x16\x00\x01\x00\x3a\xff\xf2\x02\x22\x02\x2a\x00\x41\x00\x00\x41\ -\x32\x1e\x02\x15\x15\x14\x06\x06\x23\x22\x26\x26\x27\x07\x35\x1e\ -\x02\x33\x32\x36\x35\x34\x26\x27\x26\x26\x23\x22\x06\x06\x15\x15\ -\x14\x16\x17\x16\x16\x33\x32\x36\x36\x37\x33\x16\x16\x15\x14\x06\ -\x07\x0e\x02\x23\x22\x2e\x02\x35\x35\x34\x3e\x02\x01\x46\x33\x51\ -\x3a\x1e\x28\x51\x3f\x23\x3c\x32\x14\x2e\x1b\x32\x38\x22\x26\x2a\ -\x04\x06\x0b\x1d\x13\x26\x37\x1c\x07\x08\x14\x38\x29\x20\x3b\x36\ -\x19\x0d\x01\x01\x09\x09\x09\x33\x46\x29\x42\x68\x47\x25\x25\x45\ -\x64\x02\x2a\x1c\x32\x42\x27\x05\x31\x3f\x1e\x03\x05\x03\x0e\x61\ -\x02\x03\x02\x1b\x1a\x0f\x17\x09\x06\x06\x1d\x3d\x2f\x41\x19\x26\ -\x0e\x0c\x0b\x09\x11\x0c\x13\x27\x13\x13\x1f\x09\x09\x11\x0b\x24\ -\x42\x5d\x39\x3c\x37\x5d\x46\x26\x00\xff\xff\x00\x1a\xff\xfb\x01\ -\x4d\x03\x11\x06\x26\x00\x0a\x00\x00\x00\x07\x00\x07\x00\xb0\x00\ -\x00\x00\x01\x00\x1a\xff\xfb\x01\x4d\x02\x21\x00\x35\x00\x00\x53\ -\x3e\x02\x33\x32\x16\x16\x15\x1c\x03\x15\x14\x16\x17\x16\x16\x33\ -\x32\x36\x37\x33\x16\x16\x15\x14\x06\x07\x0e\x02\x23\x22\x2e\x02\ -\x35\x3c\x03\x35\x27\x0e\x02\x23\x22\x26\x35\x34\x36\x1d\x12\x27\ -\x35\x24\x1c\x22\x0f\x01\x02\x04\x0d\x08\x0b\x0e\x0d\x0d\x01\x01\ -\x0b\x08\x09\x11\x13\x10\x24\x39\x26\x14\x06\x03\x10\x13\x0a\x0a\ -\x0c\x01\x02\x1c\x02\x02\x01\x0b\x10\x0b\x2c\x51\x4d\x4a\x27\x0e\ -\x18\x09\x03\x03\x04\x05\x14\x2d\x13\x16\x1d\x06\x04\x06\x02\x17\ -\x26\x34\x1c\x29\x46\x3f\x3d\x1f\x01\x02\x04\x03\x1c\x17\x17\x30\ -\x00\x00\x01\x00\x3d\xff\xfb\x01\x39\x02\xf1\x00\x33\x00\x00\x53\ -\x34\x26\x27\x3e\x02\x32\x32\x33\x32\x16\x16\x15\x1c\x04\x15\x14\ -\x16\x17\x16\x16\x33\x32\x3e\x02\x37\x33\x16\x16\x15\x14\x06\x07\ -\x0e\x03\x23\x22\x2e\x02\x35\x3c\x03\x45\x04\x04\x13\x13\x0b\x0b\ -\x14\x14\x10\x19\x11\x02\x04\x04\x0d\x0a\x06\x0f\x0e\x0d\x04\x07\ -\x01\x01\x0a\x0a\x05\x0b\x11\x1a\x14\x26\x36\x24\x11\x02\x7b\x20\ -\x3b\x18\x01\x01\x01\x0d\x1d\x1b\x31\x63\x62\x62\x62\x32\x0e\x16\ -\x09\x04\x04\x01\x03\x03\x03\x14\x2e\x18\x14\x1b\x07\x03\x04\x02\ -\x01\x19\x2b\x3a\x22\x3d\x7a\x79\x76\x00\x00\x00\x01\x00\x00\x00\ -\x0c\x01\x88\x00\x16\x01\x23\x00\x06\x00\x01\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x01\x00\x00\x00\x00\x00\ -\x6f\x00\xb8\x01\x0e\x01\x1a\x01\x66\x01\x9e\x01\xbb\x02\x17\x02\ -\x23\x02\x6b\x02\xaf\x00\x00\x00\x01\x00\x00\x00\x01\x13\xb6\x40\ -\x06\x18\x47\x5f\x0f\x3c\xf5\x00\x03\x03\xe8\x00\x00\x00\x00\xdc\ -\x73\x36\xbf\x00\x00\x00\x00\xdc\x93\xda\x1a\xfe\xd7\xfe\x6a\x09\ -\x35\x04\x80\x00\x00\x00\x06\x00\x02\x00\x00\x00\x00\x00\x00\x02\ -\x58\x00\x00\x02\x58\x00\x3a\x01\xf4\x00\x35\x02\x58\x00\x3a\x01\ -\x5e\x00\x24\x01\x5e\x00\x08\x01\x5e\x00\x24\x00\x00\xff\x9d\x02\ -\x58\x00\x3a\x01\x5e\x00\x1a\x00\x1a\x00\x3d\x00\x01\x00\x00\x03\ -\xb6\xff\x06\x00\x00\x09\x60\xfe\xd7\xfe\x7c\x09\x35\x00\x01\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\ -\x04\x02\x74\x03\x20\x00\x05\x00\x00\x02\x8a\x02\x58\x00\x00\x00\ -\x4b\x02\x8a\x02\x58\x00\x00\x01\x5e\x00\x6e\x01\x42\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x52\x52\x57\x00\x80\x00\ -\x53\x00\x6c\x03\xb6\xff\x06\x00\x00\x04\xb7\x01\x0f\x60\x00\x01\ -\x93\x00\x00\x00\x00\x02\x1c\x02\xbc\x00\x00\x00\x20\x00\x0c\x00\ -\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x14\x00\x03\x00\x01\x00\ -\x00\x00\x14\x00\x04\x00\x40\x00\x00\x00\x0c\x00\x08\x00\x02\x00\ -\x04\x00\x53\x00\x63\x00\x65\x00\x69\x00\x6c\xff\xff\x00\x00\x00\ -\x53\x00\x63\x00\x65\x00\x69\x00\x6c\xff\xff\xff\xae\xff\x9f\xff\ -\x9e\xff\x9b\xff\x99\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\xb8\x01\xff\x85\xb0\x04\x8d\x00\x00\x00\x00\x07\x00\ -\x5a\x00\x03\x00\x01\x04\x09\x00\x00\x00\x9a\x00\x00\x00\x03\x00\ -\x01\x04\x09\x00\x01\x00\x1c\x00\x9a\x00\x03\x00\x01\x04\x09\x00\ -\x02\x00\x0e\x00\xb6\x00\x03\x00\x01\x04\x09\x00\x03\x00\x32\x00\ -\xc4\x00\x03\x00\x01\x04\x09\x00\x04\x00\x1c\x00\x9a\x00\x03\x00\ -\x01\x04\x09\x00\x05\x00\x1a\x00\xf6\x00\x03\x00\x01\x04\x09\x00\ -\x06\x00\x1c\x01\x10\x00\x43\x00\x6f\x00\x70\x00\x79\x00\x72\x00\ -\x69\x00\x67\x00\x68\x00\x74\x00\x20\x00\x32\x00\x30\x00\x31\x00\ -\x39\x00\x20\x00\x54\x00\x68\x00\x65\x00\x20\x00\x52\x00\x65\x00\ -\x63\x00\x75\x00\x72\x00\x73\x00\x69\x00\x76\x00\x65\x00\x20\x00\ -\x50\x00\x72\x00\x6f\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x20\x00\ -\x41\x00\x75\x00\x74\x00\x68\x00\x6f\x00\x72\x00\x73\x00\x20\x00\ -\x28\x00\x67\x00\x69\x00\x74\x00\x68\x00\x75\x00\x62\x00\x2e\x00\ -\x63\x00\x6f\x00\x6d\x00\x2f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\ -\x77\x00\x74\x00\x79\x00\x70\x00\x65\x00\x2f\x00\x72\x00\x65\x00\ -\x63\x00\x75\x00\x72\x00\x73\x00\x69\x00\x76\x00\x65\x00\x29\x00\ -\x52\x00\x65\x00\x63\x00\x75\x00\x72\x00\x73\x00\x69\x00\x76\x00\ -\x65\x00\x20\x00\x53\x00\x61\x00\x6e\x00\x73\x00\x52\x00\x65\x00\ -\x67\x00\x75\x00\x6c\x00\x61\x00\x72\x00\x31\x00\x2e\x00\x30\x00\ -\x37\x00\x37\x00\x3b\x00\x41\x00\x52\x00\x52\x00\x57\x00\x3b\x00\ -\x52\x00\x65\x00\x63\x00\x75\x00\x72\x00\x73\x00\x69\x00\x76\x00\ -\x65\x00\x2d\x00\x53\x00\x61\x00\x6e\x00\x73\x00\x56\x00\x65\x00\ -\x72\x00\x73\x00\x69\x00\x6f\x00\x6e\x00\x20\x00\x31\x00\x2e\x00\ -\x30\x00\x37\x00\x37\x00\x52\x00\x65\x00\x63\x00\x75\x00\x72\x00\ -\x73\x00\x69\x00\x76\x00\x65\x00\x2d\x00\x53\x00\x61\x00\x6e\x00\ -\x73\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\xff\x51\x00\x6e\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x01\x00\x01\xff\xff\x00\x0f\x00\x01\x00\x00\x00\ -\x0c\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00\x01\x00\x05\x00\ -\x01\x00\x08\x00\x09\x00\x01\x00\x0b\x00\x0b\x00\x01\x00\x00\x00\ -\x01\x00\x00\x00\x0a\x00\x24\x00\x32\x00\x02\x44\x46\x4c\x54\x00\ -\x0e\x6c\x61\x74\x6e\x00\x0e\x00\x04\x00\x00\x00\x00\xff\xff\x00\ -\x01\x00\x00\x00\x01\x6b\x65\x72\x6e\x00\x08\x00\x00\x00\x01\x00\ -\x00\x00\x01\x00\x04\x00\x02\x00\x08\x00\x01\x00\x08\x00\x02\x00\ -\x56\x00\x04\x00\x00\x00\x6a\x00\x86\x00\x05\x00\x07\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xe2\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xf6\x00\x00\x00\ -\x00\xff\xec\x00\x01\x00\x08\x00\x01\x00\x02\x00\x03\x00\x04\x00\ -\x05\x00\x08\x00\x09\x00\x0b\x00\x01\x00\x01\x00\x0b\x00\x04\x00\ -\x03\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x02\x00\x01\x00\ -\x00\x00\x01\x00\x01\x00\x01\x00\x0b\x00\x06\x00\x02\x00\x03\x00\ -\x01\x00\x04\x00\x00\x00\x00\x00\x03\x00\x01\x00\x00\x00\x05\x00\ -\x01\x00\x00\x00\x0a\x00\x24\x00\x34\x00\x02\x44\x46\x4c\x54\x00\ -\x0e\x6c\x61\x74\x6e\x00\x0e\x00\x04\x00\x00\x00\x00\xff\xff\x00\ -\x01\x00\x00\x00\x01\x72\x76\x72\x6e\x00\x08\x00\x00\x00\x02\x00\ -\x01\x00\x00\x00\x02\x00\x06\x00\x1c\x00\x01\x00\x00\x00\x01\x00\ -\x08\x00\x01\x00\x06\x00\x05\x00\x01\x00\x02\x00\x03\x00\x04\x00\ -\x01\x00\x00\x00\x01\x00\x08\x00\x01\x00\x06\x00\x06\x00\x01\x00\ -\x01\x00\x05\ \x00\x01\xb6\x0c\ \x00\ \x01\x00\x00\x00\x13\x01\x00\x00\x04\x00\x30\x44\x53\x49\x47\x00\ @@ -7198,6 +7020,184 @@ \x00\x00\x09\x73\x6c\x6e\x67\x00\x00\x00\x31\x00\x00\x00\x09\x43\ \x79\x72\x6c\x2c\x4c\x61\x74\x6e\x43\x79\x72\x6c\x2c\x4c\x61\x74\ \x6e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x0a\xf4\ +\x00\ +\x01\x00\x00\x00\x0f\x00\x80\x00\x03\x00\x70\x47\x44\x45\x46\x00\ +\x26\x00\x1c\x00\x00\x09\x8c\x00\x00\x00\x22\x47\x50\x4f\x53\x2c\ +\xa4\x24\xdc\x00\x00\x09\xb0\x00\x00\x00\xe0\x47\x53\x55\x42\x2b\ +\xb2\x2b\x90\x00\x00\x0a\x90\x00\x00\x00\x64\x4f\x53\x2f\x32\x66\ +\x9f\xb0\x1e\x00\x00\x07\x20\x00\x00\x00\x60\x63\x6d\x61\x70\x00\ +\xea\x01\xa6\x00\x00\x07\x80\x00\x00\x00\x54\x67\x61\x73\x70\x00\ +\x00\x00\x10\x00\x00\x09\x84\x00\x00\x00\x08\x67\x6c\x79\x66\x4d\ +\x1c\x69\x01\x00\x00\x00\xfc\x00\x00\x05\x5e\x68\x65\x61\x64\x20\ +\x2a\x68\x5c\x00\x00\x06\x98\x00\x00\x00\x36\x68\x68\x65\x61\x0b\ +\xc5\x06\xed\x00\x00\x06\xfc\x00\x00\x00\x24\x68\x6d\x74\x78\x10\ +\xe7\x01\x27\x00\x00\x06\xd0\x00\x00\x00\x2c\x6c\x6f\x63\x61\x09\ +\x70\x07\xf2\x00\x00\x06\x7c\x00\x00\x00\x1a\x6d\x61\x78\x70\x00\ +\x2d\x02\xad\x00\x00\x06\x5c\x00\x00\x00\x20\x6e\x61\x6d\x65\x20\ +\xf8\x37\xf9\x00\x00\x07\xdc\x00\x00\x01\x86\x70\x6f\x73\x74\xff\ +\x54\x00\x6e\x00\x00\x09\x64\x00\x00\x00\x20\x70\x72\x65\x70\x68\ +\x06\x8c\x85\x00\x00\x07\xd4\x00\x00\x00\x07\x00\x01\x00\x3a\xff\ +\xec\x02\x27\x02\xd0\x00\x50\x00\x00\x41\x32\x16\x17\x16\x16\x15\ +\x1c\x02\x15\x06\x06\x23\x22\x26\x35\x34\x3e\x02\x37\x17\x26\x26\ +\x23\x22\x0e\x02\x15\x15\x14\x16\x16\x17\x17\x1e\x03\x15\x15\x14\ +\x06\x06\x23\x22\x26\x26\x27\x26\x26\x35\x34\x36\x36\x37\x33\x16\ +\x16\x33\x32\x36\x37\x35\x34\x26\x26\x27\x27\x2e\x03\x35\x35\x34\ +\x3e\x02\x01\x59\x37\x4e\x18\x0f\x09\x15\x2f\x19\x19\x1c\x01\x03\ +\x04\x02\x18\x12\x1c\x13\x1a\x2e\x24\x15\x0d\x22\x1f\x5e\x30\x3e\ +\x23\x0e\x3b\x72\x56\x2f\x56\x3f\x11\x09\x0c\x01\x01\x01\x0d\x2c\ +\x6b\x49\x2e\x37\x0b\x0e\x1f\x1c\x5d\x36\x44\x25\x0e\x2a\x4a\x64\ +\x02\xd0\x1f\x19\x0e\x23\x16\x12\x2a\x29\x14\x02\x03\x13\x17\x08\ +\x14\x17\x1d\x12\x2b\x08\x06\x0f\x1a\x22\x15\x0c\x11\x17\x12\x0b\ +\x1f\x10\x26\x2b\x30\x1b\x20\x39\x54\x2d\x0e\x18\x10\x0a\x22\x1a\ +\x10\x1f\x1e\x0f\x24\x25\x18\x10\x15\x0f\x18\x15\x09\x1f\x12\x29\ +\x2b\x2e\x19\x20\x2d\x53\x42\x25\x00\x00\x01\x00\x35\xff\xf4\x01\ +\xca\x02\x28\x00\x31\x00\x00\x41\x32\x16\x16\x17\x16\x16\x15\x14\ +\x06\x07\x23\x26\x26\x23\x22\x06\x06\x15\x15\x14\x16\x17\x16\x16\ +\x33\x32\x36\x36\x37\x33\x16\x16\x15\x14\x06\x07\x0e\x02\x23\x22\ +\x2e\x02\x35\x35\x34\x36\x36\x01\x43\x1f\x30\x21\x06\x07\x07\x04\ +\x05\x0d\x1c\x35\x23\x22\x32\x1c\x0b\x0b\x11\x2b\x19\x19\x2c\x29\ +\x15\x0d\x01\x01\x08\x09\x08\x24\x36\x23\x38\x5d\x45\x25\x44\x79\ +\x02\x28\x07\x0b\x08\x06\x13\x10\x1d\x35\x1a\x0f\x0c\x1f\x3b\x2b\ +\x21\x1a\x29\x10\x0c\x0b\x06\x0f\x0c\x15\x2c\x18\x14\x1e\x0a\x07\ +\x0d\x08\x1f\x3f\x5f\x3f\x28\x50\x7b\x45\x00\x00\x01\x00\x3a\xff\ +\xf2\x02\x1d\x02\x2a\x00\x3c\x00\x00\x41\x32\x16\x16\x15\x15\x14\ +\x06\x06\x23\x23\x22\x26\x27\x07\x37\x33\x36\x36\x35\x34\x26\x27\ +\x26\x26\x23\x22\x06\x15\x15\x14\x16\x17\x16\x16\x33\x32\x36\x36\ +\x37\x33\x16\x16\x15\x14\x06\x07\x0e\x02\x23\x22\x2e\x02\x35\x35\ +\x34\x3e\x02\x01\x39\x47\x66\x37\x06\x0b\x06\xd6\x19\x2c\x11\x21\ +\x03\xcd\x01\x01\x09\x0b\x0b\x18\x15\x35\x3a\x09\x08\x13\x36\x26\ +\x22\x3b\x36\x19\x0d\x01\x01\x0a\x0a\x0b\x35\x45\x23\x42\x67\x47\ +\x25\x24\x43\x5f\x02\x2a\x3a\x66\x42\x2e\x16\x15\x06\x09\x07\x05\ +\x4d\x05\x0a\x05\x16\x26\x0e\x07\x06\x45\x49\x41\x19\x27\x0e\x0d\ +\x0a\x07\x0f\x0a\x13\x26\x13\x12\x18\x0a\x0b\x11\x0a\x24\x42\x5d\ +\x39\x3c\x37\x5d\x46\x26\x00\xff\xff\x00\x24\xff\xfd\x01\x21\x03\ +\x11\x06\x26\x00\x06\x00\x00\x00\x07\x00\x07\x00\xbe\x00\x00\x00\ +\x01\x00\x08\xff\xfb\x01\x40\x02\xf3\x00\x3a\x00\x00\x53\x3e\x03\ +\x32\x33\x32\x16\x16\x15\x1c\x04\x15\x14\x16\x17\x16\x16\x33\x32\ +\x36\x37\x33\x16\x16\x15\x14\x06\x06\x07\x0e\x02\x23\x22\x2e\x02\ +\x35\x3c\x04\x35\x27\x0e\x02\x23\x22\x26\x35\x34\x36\x0c\x0a\x22\ +\x28\x28\x20\x0a\x13\x19\x0d\x02\x04\x05\x0c\x0a\x0b\x17\x08\x08\ +\x01\x01\x05\x08\x06\x07\x1b\x1e\x0d\x25\x34\x22\x10\x05\x04\x12\ +\x14\x06\x0a\x0e\x03\x02\xee\x01\x02\x01\x01\x0d\x18\x12\x33\x65\ +\x64\x65\x65\x33\x0f\x16\x09\x04\x04\x05\x05\x14\x2e\x17\x0e\x16\ +\x10\x04\x04\x05\x02\x19\x2b\x3a\x22\x2d\x5a\x5c\x5b\x5b\x2d\x01\ +\x02\x03\x01\x19\x1e\x17\x2f\x00\x01\x00\x24\xff\xfd\x01\x18\x02\ +\x21\x00\x2a\x00\x00\x77\x3c\x04\x35\x23\x0e\x03\x23\x22\x26\x35\ +\x34\x36\x37\x3e\x03\x32\x33\x32\x16\x16\x15\x1c\x03\x15\x14\x16\ +\x16\x17\x06\x06\x23\x22\x26\x78\x05\x04\x0b\x0c\x0e\x07\x0e\x11\ +\x03\x02\x0d\x20\x23\x22\x1e\x0c\x15\x21\x13\x02\x04\x04\x1a\x2d\ +\x1b\x23\x1b\x40\x17\x42\x4a\x4c\x44\x19\x01\x03\x02\x01\x1a\x1a\ +\x19\x33\x17\x01\x02\x01\x01\x0c\x18\x13\x2a\x5f\x63\x5e\x29\x15\ +\x25\x26\x17\x01\x02\x1d\x00\x00\x01\xff\x9d\x02\x76\x00\x64\x03\ +\x11\x00\x11\x00\x00\x43\x3e\x03\x33\x32\x16\x15\x15\x0e\x03\x23\ +\x22\x26\x35\x63\x0f\x22\x25\x24\x11\x1a\x22\x0f\x21\x23\x22\x11\ +\x1c\x25\x03\x09\x02\x03\x02\x01\x12\x17\x6a\x02\x03\x02\x01\x1b\ +\x16\x00\x01\x00\x3a\xff\xf2\x02\x22\x02\x2a\x00\x41\x00\x00\x41\ +\x32\x1e\x02\x15\x15\x14\x06\x06\x23\x22\x26\x26\x27\x07\x35\x1e\ +\x02\x33\x32\x36\x35\x34\x26\x27\x26\x26\x23\x22\x06\x06\x15\x15\ +\x14\x16\x17\x16\x16\x33\x32\x36\x36\x37\x33\x16\x16\x15\x14\x06\ +\x07\x0e\x02\x23\x22\x2e\x02\x35\x35\x34\x3e\x02\x01\x46\x33\x51\ +\x3a\x1e\x28\x51\x3f\x23\x3c\x32\x14\x2e\x1b\x32\x38\x22\x26\x2a\ +\x04\x06\x0b\x1d\x13\x26\x37\x1c\x07\x08\x14\x38\x29\x20\x3b\x36\ +\x19\x0d\x01\x01\x09\x09\x09\x33\x46\x29\x42\x68\x47\x25\x25\x45\ +\x64\x02\x2a\x1c\x32\x42\x27\x05\x31\x3f\x1e\x03\x05\x03\x0e\x61\ +\x02\x03\x02\x1b\x1a\x0f\x17\x09\x06\x06\x1d\x3d\x2f\x41\x19\x26\ +\x0e\x0c\x0b\x09\x11\x0c\x13\x27\x13\x13\x1f\x09\x09\x11\x0b\x24\ +\x42\x5d\x39\x3c\x37\x5d\x46\x26\x00\xff\xff\x00\x1a\xff\xfb\x01\ +\x4d\x03\x11\x06\x26\x00\x0a\x00\x00\x00\x07\x00\x07\x00\xb0\x00\ +\x00\x00\x01\x00\x1a\xff\xfb\x01\x4d\x02\x21\x00\x35\x00\x00\x53\ +\x3e\x02\x33\x32\x16\x16\x15\x1c\x03\x15\x14\x16\x17\x16\x16\x33\ +\x32\x36\x37\x33\x16\x16\x15\x14\x06\x07\x0e\x02\x23\x22\x2e\x02\ +\x35\x3c\x03\x35\x27\x0e\x02\x23\x22\x26\x35\x34\x36\x1d\x12\x27\ +\x35\x24\x1c\x22\x0f\x01\x02\x04\x0d\x08\x0b\x0e\x0d\x0d\x01\x01\ +\x0b\x08\x09\x11\x13\x10\x24\x39\x26\x14\x06\x03\x10\x13\x0a\x0a\ +\x0c\x01\x02\x1c\x02\x02\x01\x0b\x10\x0b\x2c\x51\x4d\x4a\x27\x0e\ +\x18\x09\x03\x03\x04\x05\x14\x2d\x13\x16\x1d\x06\x04\x06\x02\x17\ +\x26\x34\x1c\x29\x46\x3f\x3d\x1f\x01\x02\x04\x03\x1c\x17\x17\x30\ +\x00\x00\x01\x00\x3d\xff\xfb\x01\x39\x02\xf1\x00\x33\x00\x00\x53\ +\x34\x26\x27\x3e\x02\x32\x32\x33\x32\x16\x16\x15\x1c\x04\x15\x14\ +\x16\x17\x16\x16\x33\x32\x3e\x02\x37\x33\x16\x16\x15\x14\x06\x07\ +\x0e\x03\x23\x22\x2e\x02\x35\x3c\x03\x45\x04\x04\x13\x13\x0b\x0b\ +\x14\x14\x10\x19\x11\x02\x04\x04\x0d\x0a\x06\x0f\x0e\x0d\x04\x07\ +\x01\x01\x0a\x0a\x05\x0b\x11\x1a\x14\x26\x36\x24\x11\x02\x7b\x20\ +\x3b\x18\x01\x01\x01\x0d\x1d\x1b\x31\x63\x62\x62\x62\x32\x0e\x16\ +\x09\x04\x04\x01\x03\x03\x03\x14\x2e\x18\x14\x1b\x07\x03\x04\x02\ +\x01\x19\x2b\x3a\x22\x3d\x7a\x79\x76\x00\x00\x00\x01\x00\x00\x00\ +\x0c\x01\x88\x00\x16\x01\x23\x00\x06\x00\x01\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x01\x00\x00\x00\x00\x00\ +\x6f\x00\xb8\x01\x0e\x01\x1a\x01\x66\x01\x9e\x01\xbb\x02\x17\x02\ +\x23\x02\x6b\x02\xaf\x00\x00\x00\x01\x00\x00\x00\x01\x13\xb6\x40\ +\x06\x18\x47\x5f\x0f\x3c\xf5\x00\x03\x03\xe8\x00\x00\x00\x00\xdc\ +\x73\x36\xbf\x00\x00\x00\x00\xdc\x93\xda\x1a\xfe\xd7\xfe\x6a\x09\ +\x35\x04\x80\x00\x00\x00\x06\x00\x02\x00\x00\x00\x00\x00\x00\x02\ +\x58\x00\x00\x02\x58\x00\x3a\x01\xf4\x00\x35\x02\x58\x00\x3a\x01\ +\x5e\x00\x24\x01\x5e\x00\x08\x01\x5e\x00\x24\x00\x00\xff\x9d\x02\ +\x58\x00\x3a\x01\x5e\x00\x1a\x00\x1a\x00\x3d\x00\x01\x00\x00\x03\ +\xb6\xff\x06\x00\x00\x09\x60\xfe\xd7\xfe\x7c\x09\x35\x00\x01\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\ +\x04\x02\x74\x03\x20\x00\x05\x00\x00\x02\x8a\x02\x58\x00\x00\x00\ +\x4b\x02\x8a\x02\x58\x00\x00\x01\x5e\x00\x6e\x01\x42\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x52\x52\x57\x00\x80\x00\ +\x53\x00\x6c\x03\xb6\xff\x06\x00\x00\x04\xb7\x01\x0f\x60\x00\x01\ +\x93\x00\x00\x00\x00\x02\x1c\x02\xbc\x00\x00\x00\x20\x00\x0c\x00\ +\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x14\x00\x03\x00\x01\x00\ +\x00\x00\x14\x00\x04\x00\x40\x00\x00\x00\x0c\x00\x08\x00\x02\x00\ +\x04\x00\x53\x00\x63\x00\x65\x00\x69\x00\x6c\xff\xff\x00\x00\x00\ +\x53\x00\x63\x00\x65\x00\x69\x00\x6c\xff\xff\xff\xae\xff\x9f\xff\ +\x9e\xff\x9b\xff\x99\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\xb8\x01\xff\x85\xb0\x04\x8d\x00\x00\x00\x00\x07\x00\ +\x5a\x00\x03\x00\x01\x04\x09\x00\x00\x00\x9a\x00\x00\x00\x03\x00\ +\x01\x04\x09\x00\x01\x00\x1c\x00\x9a\x00\x03\x00\x01\x04\x09\x00\ +\x02\x00\x0e\x00\xb6\x00\x03\x00\x01\x04\x09\x00\x03\x00\x32\x00\ +\xc4\x00\x03\x00\x01\x04\x09\x00\x04\x00\x1c\x00\x9a\x00\x03\x00\ +\x01\x04\x09\x00\x05\x00\x1a\x00\xf6\x00\x03\x00\x01\x04\x09\x00\ +\x06\x00\x1c\x01\x10\x00\x43\x00\x6f\x00\x70\x00\x79\x00\x72\x00\ +\x69\x00\x67\x00\x68\x00\x74\x00\x20\x00\x32\x00\x30\x00\x31\x00\ +\x39\x00\x20\x00\x54\x00\x68\x00\x65\x00\x20\x00\x52\x00\x65\x00\ +\x63\x00\x75\x00\x72\x00\x73\x00\x69\x00\x76\x00\x65\x00\x20\x00\ +\x50\x00\x72\x00\x6f\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x20\x00\ +\x41\x00\x75\x00\x74\x00\x68\x00\x6f\x00\x72\x00\x73\x00\x20\x00\ +\x28\x00\x67\x00\x69\x00\x74\x00\x68\x00\x75\x00\x62\x00\x2e\x00\ +\x63\x00\x6f\x00\x6d\x00\x2f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\ +\x77\x00\x74\x00\x79\x00\x70\x00\x65\x00\x2f\x00\x72\x00\x65\x00\ +\x63\x00\x75\x00\x72\x00\x73\x00\x69\x00\x76\x00\x65\x00\x29\x00\ +\x52\x00\x65\x00\x63\x00\x75\x00\x72\x00\x73\x00\x69\x00\x76\x00\ +\x65\x00\x20\x00\x53\x00\x61\x00\x6e\x00\x73\x00\x52\x00\x65\x00\ +\x67\x00\x75\x00\x6c\x00\x61\x00\x72\x00\x31\x00\x2e\x00\x30\x00\ +\x37\x00\x37\x00\x3b\x00\x41\x00\x52\x00\x52\x00\x57\x00\x3b\x00\ +\x52\x00\x65\x00\x63\x00\x75\x00\x72\x00\x73\x00\x69\x00\x76\x00\ +\x65\x00\x2d\x00\x53\x00\x61\x00\x6e\x00\x73\x00\x56\x00\x65\x00\ +\x72\x00\x73\x00\x69\x00\x6f\x00\x6e\x00\x20\x00\x31\x00\x2e\x00\ +\x30\x00\x37\x00\x37\x00\x52\x00\x65\x00\x63\x00\x75\x00\x72\x00\ +\x73\x00\x69\x00\x76\x00\x65\x00\x2d\x00\x53\x00\x61\x00\x6e\x00\ +\x73\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\xff\x51\x00\x6e\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x01\x00\x01\xff\xff\x00\x0f\x00\x01\x00\x00\x00\ +\x0c\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00\x01\x00\x05\x00\ +\x01\x00\x08\x00\x09\x00\x01\x00\x0b\x00\x0b\x00\x01\x00\x00\x00\ +\x01\x00\x00\x00\x0a\x00\x24\x00\x32\x00\x02\x44\x46\x4c\x54\x00\ +\x0e\x6c\x61\x74\x6e\x00\x0e\x00\x04\x00\x00\x00\x00\xff\xff\x00\ +\x01\x00\x00\x00\x01\x6b\x65\x72\x6e\x00\x08\x00\x00\x00\x01\x00\ +\x00\x00\x01\x00\x04\x00\x02\x00\x08\x00\x01\x00\x08\x00\x02\x00\ +\x56\x00\x04\x00\x00\x00\x6a\x00\x86\x00\x05\x00\x07\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xe2\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xf6\x00\x00\x00\ +\x00\xff\xec\x00\x01\x00\x08\x00\x01\x00\x02\x00\x03\x00\x04\x00\ +\x05\x00\x08\x00\x09\x00\x0b\x00\x01\x00\x01\x00\x0b\x00\x04\x00\ +\x03\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x02\x00\x01\x00\ +\x00\x00\x01\x00\x01\x00\x01\x00\x0b\x00\x06\x00\x02\x00\x03\x00\ +\x01\x00\x04\x00\x00\x00\x00\x00\x03\x00\x01\x00\x00\x00\x05\x00\ +\x01\x00\x00\x00\x0a\x00\x24\x00\x34\x00\x02\x44\x46\x4c\x54\x00\ +\x0e\x6c\x61\x74\x6e\x00\x0e\x00\x04\x00\x00\x00\x00\xff\xff\x00\ +\x01\x00\x00\x00\x01\x72\x76\x72\x6e\x00\x08\x00\x00\x00\x02\x00\ +\x01\x00\x00\x00\x02\x00\x06\x00\x1c\x00\x01\x00\x00\x00\x01\x00\ +\x08\x00\x01\x00\x06\x00\x05\x00\x01\x00\x02\x00\x03\x00\x04\x00\ +\x01\x00\x00\x00\x01\x00\x08\x00\x01\x00\x06\x00\x06\x00\x01\x00\ +\x01\x00\x05\ " qt_resource_name = b"\ @@ -7205,23 +7205,23 @@ \x00\x06\xd6\x54\ \x00\x66\ \x00\x6f\x00\x6e\x00\x74\ -\x00\x11\ -\x06\xf9\x25\xa6\ -\x00\x52\ -\x00\x65\x00\x63\x00\x75\x00\x72\x00\x73\x00\x69\x00\x76\x00\x65\x00\x53\x00\x61\x00\x6e\x00\x73\x00\x2e\x00\x74\x00\x74\x00\x66\ -\ \x00\x17\ \x0f\x8b\xac\x66\ \x00\x49\ \x00\x42\x00\x4d\x00\x50\x00\x6c\x00\x65\x00\x78\x00\x4d\x00\x6f\x00\x6e\x00\x6f\x00\x2d\x00\x52\x00\x65\x00\x67\x00\x75\x00\x6c\ \x00\x61\x00\x72\x00\x2e\x00\x74\x00\x74\x00\x66\ +\x00\x11\ +\x06\xf9\x25\xa6\ +\x00\x52\ +\x00\x65\x00\x63\x00\x75\x00\x72\x00\x73\x00\x69\x00\x76\x00\x65\x00\x53\x00\x61\x00\x6e\x00\x73\x00\x2e\x00\x74\x00\x74\x00\x66\ +\ " qt_resource_struct_v1 = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\ +\x00\x00\x00\x42\x00\x00\x00\x00\x00\x01\x00\x01\xb6\x10\ \x00\x00\x00\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x00\x36\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xf8\ " qt_resource_struct_v2 = b"\ @@ -7229,9 +7229,9 @@ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\x42\x00\x00\x00\x00\x00\x01\x00\x01\xb6\x10\ \x00\x00\x01\x78\xae\x56\x07\xf2\ -\x00\x00\x00\x36\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xf8\ +\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x01\x78\xae\x69\x2f\x80\ " diff --git a/src/slice/ui/widgets.py b/src/slice/ui/widgets.py index 020587c..3f0bcb7 100644 --- a/src/slice/ui/widgets.py +++ b/src/slice/ui/widgets.py @@ -13,7 +13,24 @@ # You should have received a copy of the GNU General Public License # along with Slice. If not, see . -from PyQt5.QtWidgets import QLineEdit, QSizePolicy +from PyQt5 import QtCore +from PyQt5.QtCore import ( + QAbstractAnimation, + QParallelAnimationGroup, + QPropertyAnimation, + Qt, + pyqtSlot, +) +from PyQt5.QtWidgets import ( + QFrame, + QGridLayout, + QLineEdit, + QScrollArea, + QSizePolicy, + QToolButton, + QVBoxLayout, + QWidget, +) class DragDropLineEdit(QLineEdit): @@ -42,3 +59,84 @@ def dropEvent(self, e): self.setText(file_path) # call the parent method to load font on UI self.parent.load_font(file_path) + + +class CollapsibleBox(QWidget): + def __init__(self, parent=None, title="", animationDuration=250): + """ + References: + # Adapted from c++ version + http://stackoverflow.com/questions/32476006/how-to-make-an-expandable-collapsable-section-widget-in-qt + """ + QWidget.__init__(self, parent=parent) + + self.animationDuration = animationDuration + self.toggleAnimation = QtCore.QParallelAnimationGroup() + self.contentArea = QScrollArea() + self.headerLine = QFrame() + self.toggleButton = QToolButton() + self.mainLayout = QGridLayout() + + toggleButton = self.toggleButton + toggleButton.setStyleSheet("QToolButton { border: none; }") + toggleButton.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) + toggleButton.setArrowType(Qt.RightArrow) + toggleButton.setText(str(title)) + toggleButton.setCheckable(True) + toggleButton.setChecked(False) + + headerLine = self.headerLine + headerLine.setFrameShape(QFrame.HLine) + # headerLine.setFrameShadow(QFrame.Sunken) + headerLine.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) + + self.contentArea.setStyleSheet("QScrollArea { border: none; }") + self.contentArea.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + # start out collapsed + self.contentArea.setMaximumHeight(0) + self.contentArea.setMinimumHeight(0) + # let the entire widget grow and shrink with its content + toggleAnimation = self.toggleAnimation + toggleAnimation.addAnimation(QPropertyAnimation(self, b"minimumHeight")) + toggleAnimation.addAnimation(QPropertyAnimation(self, b"maximumHeight")) + toggleAnimation.addAnimation( + QPropertyAnimation(self.contentArea, b"maximumHeight") + ) + + mainLayout = self.mainLayout + mainLayout.setVerticalSpacing(0) + mainLayout.setContentsMargins(0, 0, 0, 0) + row = 0 + mainLayout.addWidget(self.toggleButton, row, 0, 1, 1, Qt.AlignLeft) + mainLayout.addWidget(self.headerLine, row, 2, 1, 1) + row += 1 + mainLayout.addWidget(self.contentArea, row, 0, 1, 3) + self.setLayout(self.mainLayout) + + def start_animation(checked): + arrow_type = Qt.DownArrow if checked else Qt.RightArrow + direction = ( + QAbstractAnimation.Forward if checked else QAbstractAnimation.Backward + ) + toggleButton.setArrowType(arrow_type) + self.toggleAnimation.setDirection(direction) + self.toggleAnimation.start() + + self.toggleButton.clicked.connect(start_animation) + + def setContentLayout(self, contentLayout): + self.contentArea.destroy() + self.contentArea.setLayout(contentLayout) + collapsedHeight = self.sizeHint().height() - self.contentArea.maximumHeight() + contentHeight = contentLayout.sizeHint().height() + for i in range(self.toggleAnimation.animationCount() - 1): + revealAnimation = self.toggleAnimation.animationAt(i) + revealAnimation.setDuration(self.animationDuration) + revealAnimation.setStartValue(collapsedHeight) + revealAnimation.setEndValue(collapsedHeight + contentHeight) + contentAnimation = self.toggleAnimation.animationAt( + self.toggleAnimation.animationCount() - 1 + ) + contentAnimation.setDuration(self.animationDuration) + contentAnimation.setStartValue(0) + contentAnimation.setEndValue(contentHeight)