From 5df2f8e34b965d18e03901d1b9ecd9815aadf1f0 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Wed, 14 Dec 2022 14:25:38 +0800 Subject: [PATCH 01/26] UI Update: - Frameless window widget --- FinalProject/framelesswindow.cpp | 372 +++++++++++++++++++++++++++++++ FinalProject/framelesswindow.h | 82 +++++++ 2 files changed, 454 insertions(+) create mode 100644 FinalProject/framelesswindow.cpp create mode 100644 FinalProject/framelesswindow.h diff --git a/FinalProject/framelesswindow.cpp b/FinalProject/framelesswindow.cpp new file mode 100644 index 0000000..c23f88e --- /dev/null +++ b/FinalProject/framelesswindow.cpp @@ -0,0 +1,372 @@ +#include +#include +#include +#include + +#include "framelesswindow.h" +#include "logger.h" + +#define MAX_MOUSE_MOVEMENT 300 + +FramelessWidget::FramelessWidget(int cornerRadius, unsigned int attributes, QWidget* parent) + : _cornerRadius(cornerRadius), _attributes((LUI_WINDOW_ATTRIBUTES)attributes), QWidget(parent) +{ + setAttribute(Qt::WA_TranslucentBackground); + setWindowFlags(Qt::FramelessWindowHint); + setMouseTracking(true); + setFocusPolicy(Qt::StrongFocus); + setFocus(); + + // Create and properly set real displayed window widget + _stretchLayout = new QVBoxLayout(this); + _stretchLayout->setContentsMargins(30, 30, 30, 30); + _windowWidget = new QWidget(this); + _windowWidget->setObjectName("windowWidget"); + _windowWidget->setMouseTracking(true); + _stretchLayout->addWidget(_windowWidget); + _windowWidget->show(); + setLayout(_stretchLayout); + + // Set style sheet for window widget + QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_cornerRadius) + "px;}"; + _windowWidget->setStyleSheet(windowWidgetStyleSheet); + + // Set shadow for window widget + _windowShadow = new QGraphicsDropShadowEffect(_windowWidget); + _windowShadow->setBlurRadius(30); + _windowShadow->setColor(QColor(0, 0, 0)); + _windowShadow->setOffset(0, 0); + _windowWidget->setGraphicsEffect(_windowShadow); + + // Create window control buttons container widget & its layout + _windowBtnWidget = new QWidget(_windowWidget); + _windowBtnWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + _windowBtnWidget->setMouseTracking(true); + _windowBtnLayout = new QHBoxLayout(_windowBtnWidget); + _windowBtnLayout->setContentsMargins(0, 0, 0, 0); + _windowBtnLayout->setSpacing(10); + _windowBtnLayout->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + _windowBtnWidget->setLayout(_windowBtnLayout); + + // Create window control buttons + _minimizeBtn = new QPushButton(_windowBtnWidget); + _maximizeBtn = new QPushButton(_windowBtnWidget); + _closeBtn = new QPushButton(_windowBtnWidget); + + _minimizeBtn->setFixedSize(12, 12); + _maximizeBtn->setFixedSize(12, 12); + _closeBtn->setFixedSize(12, 12); + + _minimizeBtn->setStyleSheet("QPushButton{border-radius: 6px; background-color: #c2c2c2;}" + "QPushButton:hover{background-color: #e98b2a;}"); + _maximizeBtn->setStyleSheet("QPushButton{border-radius: 6px; background-color: #c2c2c2;}" + "QPushButton:hover{background-color: #2d6d4b;}"); + _closeBtn->setStyleSheet("QPushButton{border-radius: 6px; background-color: #c2c2c2;}" + "QPushButton:hover{background-color: #ab3b3a;}"); + + _windowBtnLayout->addWidget(_minimizeBtn); + _windowBtnLayout->addWidget(_maximizeBtn); + _windowBtnLayout->addWidget(_closeBtn); + if ((_attributes & LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_DISABLE_MINIMIZE) == 0) { + _minimizeBtn->show(); + } + if ((_attributes & LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_DISABLE_MAXIMIZE) == 0) { + _maximizeBtn->show(); + } + if ((_attributes & LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_DISABLE_CLOSE) == 0) { + _closeBtn->show(); + } + + // Connect window control buttons + connect(_minimizeBtn, &QPushButton::clicked, this, &QWidget::showMinimized); + connect(_maximizeBtn, &QPushButton::clicked, this, &FramelessWidget::controlWindowScale); + connect(_closeBtn, &QPushButton::clicked, this, &QWidget::close); +} + +FramelessWidget::FramelessWidget(QWidget* parent) + : FramelessWidget(0, LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_NO_ATTRIBUTES, parent) +{ +} + +FramelessWidget::FramelessWidget(int cornerRadius, QWidget* parent) + : FramelessWidget(cornerRadius, LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_NO_ATTRIBUTES, parent) +{ +} + +FramelessWidget::FramelessWidget(unsigned int attributes, QWidget* parent) + : FramelessWidget(0, attributes, parent) +{ +} + +FramelessWidget::~FramelessWidget() {} + +void FramelessWidget::showEvent(QShowEvent* event) { + // Initialize window UI after window is shown + initializeWindowUI(); +} + +void FramelessWidget::initializeWindowUI() { + if (_initialized) { + return; + } + + // Create a round cornered mask for window widget + QPainterPath path; + path.addRoundedRect(_windowWidget->rect(), _cornerRadius - 1, _cornerRadius - 1); + QRegion region(path.toFillPolygon().toPolygon()); + _windowWidget->setMask(region); + + // Create a border for window widget (in order to hide zigzagged edges) + _windowBorder = new QWidget(this); + _windowBorder->setObjectName("windowBorder"); + QString windowBorderStyleSheet = + "QWidget#windowBorder{background-color:#00FFFFFF;border:1.5px solid " + _borderColor.name() + ";border-radius:" + QString::number(_cornerRadius) + "px;}"; + _windowBorder->setStyleSheet(windowBorderStyleSheet); + _windowBorder->setAttribute(Qt::WA_TransparentForMouseEvents); + _windowBorder->move(_windowWidget->pos() - QPoint(1, 1)); + _windowBorder->resize(_windowWidget->size() + QSize(2, 2)); + _windowBorder->show(); + + // Move button widget to the top right of the window widget + _windowBtnWidget->move(_windowWidget->width() - _windowBtnWidget->width() - 18, 18); + _windowBtnWidget->show(); + + // Set initialized state + _initialized = true; +} + +void FramelessWidget::resizeEvent(QResizeEvent* event) { + // Resize window border + if (_windowBorder != nullptr) { + _windowBorder->move(_windowWidget->pos() - QPoint(1, 1)); + _windowBorder->resize(_windowWidget->size() + QSize(2, 2)); + } + + // Resize window mask + QPainterPath path; + path.addRoundedRect(_windowWidget->rect(), _cornerRadius - 1, _cornerRadius - 1); + QRegion region(path.toFillPolygon().toPolygon()); + _windowWidget->setMask(region); + + // Move button widget to the top right of the window widget + _windowBtnWidget->move(_windowWidget->width() - _windowBtnWidget->width() - 18, 18); +} + +void FramelessWidget::controlWindowScale() { + if ((_attributes & LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_DISABLE_MAXIMIZE) != 0) { + return; + } + if (!_maximized) { + _lastWindowGeometry = frameGeometry(); + + Logger::debug("Maximizing window:"); + Logger::debug("[+] current window position: " + std::to_string(x()) + ", " + std::to_string(y())); + Logger::debug("[+] current window size: " + std::to_string(width()) + ", " + std::to_string(height())); + Logger::debug("[+] current geometry: " + std::to_string(_lastWindowGeometry.x()) + ", " + std::to_string(_lastWindowGeometry.y()) + ", " + std::to_string(_lastWindowGeometry.width()) + ", " + std::to_string(_lastWindowGeometry.height())); + Logger::debug("[+] current window widget position: " + std::to_string(_windowWidget->x()) + ", " + std::to_string(_windowWidget->y())); + Logger::debug("[+] current window widget size: " + std::to_string(_windowWidget->width()) + ", " + std::to_string(_windowWidget->height())); + Logger::debug("[+] current window border position: " + std::to_string(_windowBorder->x()) + ", " + std::to_string(_windowBorder->y())); + Logger::debug("[+] current window border size: " + std::to_string(_windowBorder->width()) + ", " + std::to_string(_windowBorder->height())); + + _windowShadow->setEnabled(false); + _windowBorder->hide(); + QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name() + ";}"; + _windowWidget->setStyleSheet(windowWidgetStyleSheet); + + _stretchLayout->setContentsMargins(0, 0, 0, 0); + + showMaximized(); + + QPainterPath path; + path.addRect(_windowWidget->rect()); + QRegion mask(path.toFillPolygon().toPolygon()); + _windowWidget->setMask(mask); + + _maximized = true; + } + else { + _stretchLayout->setContentsMargins(30, 30, 30, 30); + + showNormal(); + + resize(_lastWindowGeometry.size()); + move(_lastWindowGeometry.topLeft()); + + _windowShadow->setEnabled(true); + _windowBorder->show(); + QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_cornerRadius) + "px;}"; + _windowWidget->setStyleSheet(windowWidgetStyleSheet); + + QPainterPath path; + path.addRoundedRect(_windowWidget->rect(), _cornerRadius - 1, _cornerRadius - 1); + QRegion mask(path.toFillPolygon().toPolygon()); + _windowWidget->setMask(mask); + + Logger::debug("Restoring window:"); + Logger::debug("[+] current window position: " + std::to_string(x()) + ", " + std::to_string(y())); + Logger::debug("[+] current window size: " + std::to_string(width()) + ", " + std::to_string(height())); + Logger::debug("[+] current geometry: " + std::to_string(frameGeometry().x()) + ", " + std::to_string(frameGeometry().y()) + ", " + std::to_string(frameGeometry().width()) + ", " + std::to_string(frameGeometry().height())); + Logger::debug("[+] current window widget position: " + std::to_string(_windowWidget->x()) + ", " + std::to_string(_windowWidget->y())); + Logger::debug("[+] current window widget size: " + std::to_string(_windowWidget->width()) + ", " + std::to_string(_windowWidget->height())); + + _maximized = false; + } +} + +void FramelessWidget::updateMouseState(QMouseEvent* event) { + _mouseState = MOUSE_STATE_NONE; + if ((_attributes & LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_DISABLE_RESIZE) != 0) { + return; + } + if (_maximized) { + setCursor(Qt::ArrowCursor); + return; + } + // Set mouse state according to abs distance from window border + if (abs(event->globalPos().x() - (_windowWidget->frameGeometry().left() + frameGeometry().left())) < 5) { + _mouseState |= MOUSE_STATE_RESIZE_LEFT; + } + if (abs(event->globalPos().x() - (_windowWidget->frameGeometry().right() + frameGeometry().left())) < 5) { + _mouseState |= MOUSE_STATE_RESIZE_RIGHT; + } + if (abs(event->globalPos().y() - (_windowWidget->frameGeometry().top() + frameGeometry().top())) < 5) { + _mouseState |= MOUSE_STATE_RESIZE_TOP; + } + if (abs(event->globalPos().y() - (_windowWidget->frameGeometry().bottom() + frameGeometry().top())) < 5) { + _mouseState |= MOUSE_STATE_RESIZE_BOTTOM; + } + // Set cursor shape according to mouse state + switch (_mouseState) { + case MOUSE_STATE_RESIZE_LEFT: + case MOUSE_STATE_RESIZE_RIGHT: + setCursor(Qt::SizeHorCursor); + break; + case MOUSE_STATE_RESIZE_TOP: + case MOUSE_STATE_RESIZE_BOTTOM: + setCursor(Qt::SizeVerCursor); + break; + case MOUSE_STATE_RESIZE_LEFT | MOUSE_STATE_RESIZE_TOP: + case MOUSE_STATE_RESIZE_RIGHT | MOUSE_STATE_RESIZE_BOTTOM: + setCursor(Qt::SizeFDiagCursor); + break; + case MOUSE_STATE_RESIZE_LEFT | MOUSE_STATE_RESIZE_BOTTOM: + case MOUSE_STATE_RESIZE_RIGHT | MOUSE_STATE_RESIZE_TOP: + setCursor(Qt::SizeBDiagCursor); + break; + default: + setCursor(Qt::ArrowCursor); + break; + } +} + +void FramelessWidget::mousePressEvent(QMouseEvent* event) { + if (event->button() == Qt::LeftButton) { + _mousePressed = true; + _lastMousePosition = event->globalPos().toPointF(); + } +} + +void FramelessWidget::mouseReleaseEvent(QMouseEvent* event) { + _mousePressed = false; + QScreen* screen = QGuiApplication::screenAt(event->globalPos()); + Logger::debug("Current screen geometry:"); + Logger::debug("[+] screen position: " + std::to_string(screen->geometry().x()) + ", " + std::to_string(screen->geometry().y())); + Logger::debug("[+] screen size: " + std::to_string(screen->geometry().width()) + ", " + std::to_string(screen->geometry().height())); + if (abs(event->globalPos().y() - screen->geometry().top()) < 5) { + controlWindowScale(); + } + updateMouseState(event); +} + +void FramelessWidget::mouseMoveEvent(QMouseEvent* event) { + Logger::debug("Detected mouse move"); + Logger::debug("[+] mouse global position : " + std::to_string(event->globalPos().x()) + ", " + std::to_string(event->globalPos().y())); + Logger::debug("[+] window geometry: " + std::to_string(frameGeometry().x()) + ", " + std::to_string(frameGeometry().y()) + ", " + std::to_string(frameGeometry().width()) + ", " + std::to_string(frameGeometry().height())); + Logger::debug("[+] widget frame geometry: " + std::to_string(_windowWidget->frameGeometry().x()) + ", " + std::to_string(_windowWidget->frameGeometry().y())); + Logger::debug("[+] widget frame size: " + std::to_string(_windowWidget->frameGeometry().width()) + ", " + std::to_string(_windowWidget->frameGeometry().height())); + if (event->buttons() == Qt::NoButton) { + _mousePressed = false; + } + if (abs(event->globalPos().x() - _lastMousePosition.x()) > MAX_MOUSE_MOVEMENT) { + // Maybe moving window across monitors, avoid window disappear + _lastMousePosition = event->globalPos().toPointF(); + } + if (abs(event->globalPos().y() - _lastMousePosition.y()) > MAX_MOUSE_MOVEMENT) { + // Maybe moving window across monitors, avoid window disappear + _lastMousePosition = event->globalPos().toPointF(); + } + if (!_mousePressed) { + updateMouseState(event); + } + else { + // Resize window according to mouse state + switch (_mouseState) { + case MOUSE_STATE_RESIZE_LEFT: + resize(frameGeometry().width() - event->globalPos().x() + frameGeometry().left() + _windowWidget->frameGeometry().left(), frameGeometry().height()); + move(event->globalPos().x() - _windowWidget->frameGeometry().left(), frameGeometry().top()); + break; + case MOUSE_STATE_RESIZE_RIGHT: + resize(event->globalPos().x() - frameGeometry().left() + _windowWidget->frameGeometry().left(), frameGeometry().height()); + break; + case MOUSE_STATE_RESIZE_TOP: + resize(frameGeometry().width(), frameGeometry().height() - event->globalPos().y() + frameGeometry().top() + _windowWidget->frameGeometry().top()); + move(frameGeometry().left(), event->globalPos().y() - _windowWidget->frameGeometry().top()); + break; + case MOUSE_STATE_RESIZE_BOTTOM: + resize(frameGeometry().width(), event->globalPos().y() - frameGeometry().top() + _windowWidget->frameGeometry().top()); + break; + case MOUSE_STATE_RESIZE_LEFT | MOUSE_STATE_RESIZE_TOP: + resize(frameGeometry().width() - event->globalPos().x() + frameGeometry().left() + _windowWidget->frameGeometry().left(), frameGeometry().height() - event->globalPos().y() + frameGeometry().top() + _windowWidget->frameGeometry().top()); + move(event->globalPos().x() - _windowWidget->frameGeometry().left(), event->globalPos().y() - _windowWidget->frameGeometry().top()); + break; + case MOUSE_STATE_RESIZE_LEFT | MOUSE_STATE_RESIZE_BOTTOM: + resize(frameGeometry().width() - event->globalPos().x() + frameGeometry().left() + _windowWidget->frameGeometry().left(), event->globalPos().y() - frameGeometry().top() + _windowWidget->frameGeometry().top()); + move(event->globalPos().x() - _windowWidget->frameGeometry().left(), frameGeometry().top()); + break; + case MOUSE_STATE_RESIZE_RIGHT | MOUSE_STATE_RESIZE_TOP: + resize(event->globalPos().x() - frameGeometry().left() + _windowWidget->frameGeometry().left(), frameGeometry().height() - event->globalPos().y() + frameGeometry().top() + _windowWidget->frameGeometry().top()); + move(frameGeometry().left(), event->globalPos().y() - _windowWidget->frameGeometry().top()); + break; + case MOUSE_STATE_RESIZE_RIGHT | MOUSE_STATE_RESIZE_BOTTOM: + resize(event->globalPos().x() - frameGeometry().left() + _windowWidget->frameGeometry().left(), event->globalPos().y() - frameGeometry().top() + _windowWidget->frameGeometry().top()); + break; + default: + if (_maximized) { + qreal wRatio = (qreal)event->pos().x() / (qreal)_windowWidget->width(); + controlWindowScale(); + move(event->globalPos().x() - _windowWidget->width() * wRatio, event->globalPos().y() - 52); + } + else { + move(frameGeometry().left() + event->globalPos().x() - _lastMousePosition.x(), frameGeometry().top() + event->globalPos().y() - _lastMousePosition.y()); + } + break; + } + _lastMousePosition = event->globalPos().toPointF(); + } +} + +FramelessWidget::LUI_WINDOW_ATTRIBUTES FramelessWidget::getWindowAttributes() { + return _attributes; +} + +void FramelessWidget::setWindowAttributes(unsigned int attributes) { + _attributes = (LUI_WINDOW_ATTRIBUTES)attributes; + if ((_attributes & LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_DISABLE_MINIMIZE) == 0) { + _minimizeBtn->show(); + } + else { + _minimizeBtn->hide(); + } + if ((_attributes & LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_DISABLE_MAXIMIZE) == 0) { + _maximizeBtn->show(); + } + else { + _maximizeBtn->hide(); + } + if ((_attributes & LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_DISABLE_CLOSE) == 0) { + _closeBtn->show(); + } + else { + _closeBtn->hide(); + } +} diff --git a/FinalProject/framelesswindow.h b/FinalProject/framelesswindow.h new file mode 100644 index 0000000..072017f --- /dev/null +++ b/FinalProject/framelesswindow.h @@ -0,0 +1,82 @@ +#pragma once + +#include +#include +#include +#include +#include + +class FramelessWidget : public QWidget { + + Q_OBJECT + +public: + // Window attributes + enum LUI_WINDOW_ATTRIBUTES { + LUI_WINDOW_NO_ATTRIBUTES = 0, + LUI_WINDOW_DISABLE_CLOSE = 1 << 0, + LUI_WINDOW_DISABLE_MAXIMIZE = 1 << 1, + LUI_WINDOW_DISABLE_MINIMIZE = 1 << 2, + LUI_WINDOW_DISABLE_RESIZE = 1 << 3 + }; + +public: + FramelessWidget(QWidget* parent = 0); + FramelessWidget(int cornerRadius, QWidget* parent = 0); + FramelessWidget(unsigned int attributes, QWidget* parent = 0); + FramelessWidget(int cornerRadius, unsigned int attributes, QWidget* parent = 0); + ~FramelessWidget(); + +private: + // UI control variables + const int _cornerRadius = 0; + const QColor _backgroundColor = QColor(251, 251, 251); + const QColor _borderColor = QColor(104, 104, 104); + + // Window initialize + bool _initialized = false; // prevent double initialization when restore from minimized state + void initializeWindowUI(); + virtual void showEvent(QShowEvent* event) override; + + // Widget list + QVBoxLayout* _stretchLayout = nullptr; + + QWidget* _windowWidget = nullptr; + QWidget* _windowBorder = nullptr; + QGraphicsDropShadowEffect* _windowShadow = nullptr; + + QWidget* _windowBtnWidget = nullptr; + QHBoxLayout* _windowBtnLayout = nullptr; + QPushButton* _minimizeBtn = nullptr; + QPushButton* _maximizeBtn = nullptr; + QPushButton* _closeBtn = nullptr; + + // Window size control + LUI_WINDOW_ATTRIBUTES _attributes = LUI_WINDOW_NO_ATTRIBUTES; + bool _maximized = false; + QRect _lastWindowGeometry; + + virtual void resizeEvent(QResizeEvent* event) override; + void controlWindowScale(); + + // User interaction control + enum MOUSE_STATE { + MOUSE_STATE_NONE = 0, + MOUSE_STATE_RESIZE_LEFT = 1 << 0, + MOUSE_STATE_RESIZE_TOP = 1 << 1, + MOUSE_STATE_RESIZE_RIGHT = 1 << 2, + MOUSE_STATE_RESIZE_BOTTOM = 1 << 3 + }; + bool _mousePressed = false; + int _mouseState = MOUSE_STATE_NONE; + QPointF _lastMousePosition; + void updateMouseState(QMouseEvent* event); + virtual void mousePressEvent(QMouseEvent* event) override; + virtual void mouseReleaseEvent(QMouseEvent* event) override; + virtual void mouseMoveEvent(QMouseEvent* event) override; + +public: + QWidget* windowWidget() const { return _windowWidget; } + LUI_WINDOW_ATTRIBUTES getWindowAttributes(); + void setWindowAttributes(unsigned int attributes); +}; \ No newline at end of file From d19374f24eaf6a0c65f352596173a2fc70058eb1 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Wed, 14 Dec 2022 14:26:05 +0800 Subject: [PATCH 02/26] UI Update - Push Button widget --- FinalProject/pushbutton.cpp | 761 ++++++++++++++++++++++++++++++++++++ FinalProject/pushbutton.h | 94 +++++ 2 files changed, 855 insertions(+) create mode 100644 FinalProject/pushbutton.cpp create mode 100644 FinalProject/pushbutton.h diff --git a/FinalProject/pushbutton.cpp b/FinalProject/pushbutton.cpp new file mode 100644 index 0000000..8bf28be --- /dev/null +++ b/FinalProject/pushbutton.cpp @@ -0,0 +1,761 @@ +#include +#include +#include +#include + +#include "pushbutton.h" + +PushButton::PushButton(QWidget* child, QWidget* parent) + : QWidget(parent), _childWidget(child) +{ + initializeUI(); +} + +PushButton::~PushButton() +{ +} + +void PushButton::initializeUI() { + // Add margin for the child widget + _stretchLayout = new QHBoxLayout(this); + _stretchLayout->setContentsMargins(_contentMargin); + _stretchLayout->setSpacing(0); + _stretchLayout->addWidget(_childWidget); + setLayout(_stretchLayout); + + // Initialize background widget + _backgroundWidget = new QWidget(this); + _backgroundWidget->resize(size()); + _backgroundWidget->setObjectName("backgroundWidget"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->lower(); + _backgroundWidget->show(); + + // Initialize indicator + _indicator = new QWidget(this); + switch (_indicatorPosition) { + case LUI_BTN_POS_LEFT: + _indicator->resize(_indicatorWidth, _activatedLengthRatio * height()); + _indicator->move(_indicatorSpacing, (0.5 - _activatedLengthRatio / 2) * height()); + break; + case LUI_BTN_POS_RIGHT: + _indicator->resize(_indicatorWidth, _activatedLengthRatio * height()); + _indicator->move(width() - _indicatorWidth - _indicatorSpacing, (0.5 - _activatedLengthRatio / 2) * height()); + break; + case LUI_BTN_POS_TOP: + _indicator->resize(_activatedLengthRatio * width(), _indicatorWidth); + _indicator->move((0.5 - _activatedLengthRatio / 2) * width(), _indicatorSpacing); + break; + case LUI_BTN_POS_BOTTOM: + _indicator->resize(_activatedLengthRatio * width(), _indicatorWidth); + _indicator->move((0.5 - _activatedLengthRatio / 2) * width(), height() - _indicatorWidth - _indicatorSpacing); + break; + } + _indicator->setObjectName("indicator"); + _indicator->setStyleSheet("QWidget#indicator{background-color:" + _indicatorColor.name() + ";" + "border-radius:" + QString::number((float)_indicatorWidth / 2) + "px;}"); + _indicatorEffect = new QGraphicsOpacityEffect(_indicator); + _indicatorEffect->setOpacity(0); + _indicator->setGraphicsEffect(_indicatorEffect); + + // Enable mouse tracking + setMouseTracking(true); +} + +void PushButton::generateColor(QColor colorScheme) { + _hoverColor = colorScheme.lighter(120); + _hoverColor.setAlpha(50); + _pressedColor = colorScheme; + _pressedColor.setAlpha(100); + _selectedColor = colorScheme.lighter(120); + _selectedColor.setAlpha(20); + _indicatorColor = colorScheme; +} + +void PushButton::enterEvent(QEnterEvent* event) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + + QParallelAnimationGroup* indicatorEnterAnimation = new QParallelAnimationGroup(this); + QPropertyAnimation* indicatorGrowLength = new QPropertyAnimation(_indicator, "geometry", this); + QPropertyAnimation* indicatorFadeIn = new QPropertyAnimation(_indicatorEffect, "opacity", this); + indicatorGrowLength->setDuration(150); + indicatorGrowLength->setEasingCurve(QEasingCurve::OutQuad); + indicatorFadeIn->setDuration(100); + indicatorFadeIn->setEasingCurve(QEasingCurve::OutQuad); + indicatorGrowLength->setStartValue(_indicator->geometry()); + switch (_indicatorPosition) { + case LUI_BTN_POS_LEFT: + indicatorGrowLength->setEndValue(QRect( + _indicatorSpacing, + (0.5 - _hoveredLengthRatio / 2) * height(), + _indicatorWidth, + _hoveredLengthRatio * height() + )); + break; + case LUI_BTN_POS_RIGHT: + indicatorGrowLength->setEndValue(QRect( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _hoveredLengthRatio / 2) * height(), + _indicatorWidth, + _hoveredLengthRatio * height() + )); + break; + case LUI_BTN_POS_TOP: + indicatorGrowLength->setEndValue(QRect( + (0.5 - _hoveredLengthRatio / 2) * width(), + _indicatorSpacing, + _hoveredLengthRatio * width(), + _indicatorWidth + )); + break; + case LUI_BTN_POS_BOTTOM: + indicatorGrowLength->setEndValue(QRect( + (0.5 - _hoveredLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _hoveredLengthRatio * width(), + _indicatorWidth + )); + break; + } + indicatorFadeIn->setStartValue(_indicatorEffect->opacity()); + indicatorFadeIn->setEndValue(0.999); + indicatorEnterAnimation->addAnimation(indicatorGrowLength); + indicatorEnterAnimation->addAnimation(indicatorFadeIn); + indicatorEnterAnimation->start(QAbstractAnimation::DeleteWhenStopped); + + _hovered = true; +} + +void PushButton::leaveEvent(QEvent* event) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + + QParallelAnimationGroup* indicatorLeaveAnimation = new QParallelAnimationGroup(this); + QPropertyAnimation* indicatorShrinkLength = new QPropertyAnimation(_indicator, "geometry", this); + QPropertyAnimation* indicatorFadeOut = new QPropertyAnimation(_indicatorEffect, "opacity", this); + indicatorShrinkLength->setDuration(150); + indicatorShrinkLength->setEasingCurve(QEasingCurve::OutQuad); + indicatorFadeOut->setDuration(100); + indicatorFadeOut->setEasingCurve(QEasingCurve::OutQuad); + indicatorShrinkLength->setStartValue(_indicator->geometry()); + switch (_indicatorPosition) { + case LUI_BTN_POS_LEFT: + indicatorShrinkLength->setEndValue(QRect( + _indicatorSpacing, + (0.5 - _activatedLengthRatio / 2) * height(), + _indicatorWidth, + _activatedLengthRatio * height() + )); + break; + case LUI_BTN_POS_RIGHT: + indicatorShrinkLength->setEndValue(QRect( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _activatedLengthRatio / 2) * height(), + _indicatorWidth, + _activatedLengthRatio * height() + )); + break; + case LUI_BTN_POS_TOP: + indicatorShrinkLength->setEndValue(QRect( + (0.5 - _activatedLengthRatio / 2) * width(), + _indicatorSpacing, + _activatedLengthRatio * width(), + _indicatorWidth + )); + break; + case LUI_BTN_POS_BOTTOM: + indicatorShrinkLength->setEndValue(QRect( + (0.5 - _activatedLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _activatedLengthRatio * width(), + _indicatorWidth + )); + break; + } + indicatorFadeOut->setStartValue(_indicatorEffect->opacity()); + indicatorFadeOut->setEndValue(_selected ? 0.999 : 0); + indicatorLeaveAnimation->addAnimation(indicatorShrinkLength); + indicatorLeaveAnimation->addAnimation(indicatorFadeOut); + indicatorLeaveAnimation->start(QAbstractAnimation::DeleteWhenStopped); + + _pressed = false; + _hovered = false; +} + +void PushButton::mousePressEvent(QMouseEvent* event) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + + QPropertyAnimation* indicatorShrinkLength = new QPropertyAnimation(_indicator, "geometry", this); + indicatorShrinkLength->setDuration(100); + indicatorShrinkLength->setEasingCurve(QEasingCurve::OutQuad); + indicatorShrinkLength->setStartValue(_indicator->geometry()); + switch (_indicatorPosition) { + case LUI_BTN_POS_LEFT: + indicatorShrinkLength->setEndValue(QRect( + _indicatorSpacing, + (0.5 - _pressedLengthRatio / 2) * height(), + _indicatorWidth, + _pressedLengthRatio * height() + )); + break; + case LUI_BTN_POS_RIGHT: + indicatorShrinkLength->setEndValue(QRect( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _pressedLengthRatio / 2) * height(), + _indicatorWidth, + _pressedLengthRatio * height() + )); + break; + case LUI_BTN_POS_TOP: + indicatorShrinkLength->setEndValue(QRect( + (0.5 - _pressedLengthRatio / 2) * width(), + _indicatorSpacing, + _pressedLengthRatio * width(), + _indicatorWidth + )); + break; + case LUI_BTN_POS_BOTTOM: + indicatorShrinkLength->setEndValue(QRect( + (0.5 - _pressedLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _pressedLengthRatio * width(), + _indicatorWidth + )); + break; + } + indicatorShrinkLength->start(QAbstractAnimation::DeleteWhenStopped); + + _pressed = true; +} + +void PushButton::mouseReleaseEvent(QMouseEvent* event) { + if (!_pressed) { + return; + } + + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + + QPropertyAnimation* indicatorGrowLength = new QPropertyAnimation(_indicator, "geometry", this); + indicatorGrowLength->setDuration(100); + indicatorGrowLength->setEasingCurve(QEasingCurve::OutQuad); + indicatorGrowLength->setStartValue(_indicator->geometry()); + switch (_indicatorPosition) { + case LUI_BTN_POS_LEFT: + indicatorGrowLength->setEndValue(QRect( + _indicatorSpacing, + (0.5 - _hoveredLengthRatio / 2) * height(), + _indicatorWidth, + _hoveredLengthRatio * height() + )); + break; + case LUI_BTN_POS_RIGHT: + indicatorGrowLength->setEndValue(QRect( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _hoveredLengthRatio / 2) * height(), + _indicatorWidth, + _hoveredLengthRatio * height() + )); + break; + case LUI_BTN_POS_TOP: + indicatorGrowLength->setEndValue(QRect( + (0.5 - _hoveredLengthRatio / 2) * width(), + _indicatorSpacing, + _hoveredLengthRatio * width(), + _indicatorWidth + )); + break; + case LUI_BTN_POS_BOTTOM: + indicatorGrowLength->setEndValue(QRect( + (0.5 - _hoveredLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _hoveredLengthRatio * width(), + _indicatorWidth + )); + break; + } + indicatorGrowLength->start(QAbstractAnimation::DeleteWhenStopped); + + _pressed = false; + + emit onClick(); +} + +void PushButton::resizeEvent(QResizeEvent* event) { + _backgroundWidget->setGeometry(0, 0, width(), height()); + switch (_indicatorPosition) { + case LUI_BTN_POS_LEFT: + if (_pressed) { + _indicator->setGeometry(QRect( + _indicatorSpacing, + (0.5 - _pressedLengthRatio / 2) * height(), + _indicatorWidth, + _pressedLengthRatio * height() + )); + } + else if (_hovered) { + _indicator->setGeometry(QRect( + _indicatorSpacing, + (0.5 - _hoveredLengthRatio / 2) * height(), + _indicatorWidth, + _hoveredLengthRatio * height() + )); + } + else { + _indicator->setGeometry(QRect( + _indicatorSpacing, + (0.5 - _activatedLengthRatio / 2) * height(), + _indicatorWidth, + _activatedLengthRatio * height() + )); + } + break; + case LUI_BTN_POS_RIGHT: + if (_pressed) { + _indicator->setGeometry(QRect( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _pressedLengthRatio / 2) * height(), + _indicatorWidth, + _pressedLengthRatio * height() + )); + } + else if (_hovered) { + _indicator->setGeometry(QRect( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _hoveredLengthRatio / 2) * height(), + _indicatorWidth, + _hoveredLengthRatio * height() + )); + } + else { + _indicator->setGeometry(QRect( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _activatedLengthRatio / 2) * height(), + _indicatorWidth, + _activatedLengthRatio * height() + )); + } + break; + case LUI_BTN_POS_TOP: + if (_pressed) { + _indicator->setGeometry(QRect( + (0.5 - _pressedLengthRatio / 2) * width(), + _indicatorSpacing, + _pressedLengthRatio * width(), + _indicatorWidth + )); + } + else if (_hovered) { + _indicator->setGeometry(QRect( + (0.5 - _hoveredLengthRatio / 2) * width(), + _indicatorSpacing, + _hoveredLengthRatio * width(), + _indicatorWidth + )); + } + else { + _indicator->setGeometry(QRect( + (0.5 - _activatedLengthRatio / 2) * width(), + _indicatorSpacing, + _activatedLengthRatio * width(), + _indicatorWidth + )); + } + break; + case LUI_BTN_POS_BOTTOM: + if (_pressed) { + _indicator->setGeometry(QRect( + (0.5 - _pressedLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _pressedLengthRatio * width(), + _indicatorWidth + )); + } + else if (_hovered) { + _indicator->setGeometry(QRect( + (0.5 - _hoveredLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _hoveredLengthRatio * width(), + _indicatorWidth + )); + } + else { + _indicator->setGeometry(QRect( + (0.5 - _activatedLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _activatedLengthRatio * width(), + _indicatorWidth + )); + } + break; + } +} + +void PushButton::select() { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _selectedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + + // First shrink then length the indicator, also fade in + QSequentialAnimationGroup* indicatorSelectAnimation = new QSequentialAnimationGroup(this); + QParallelAnimationGroup* indicatorShrinkAnimation = new QParallelAnimationGroup(this); + QPropertyAnimation* indicatorFadeIn = new QPropertyAnimation(_indicator, "opacity", this); + QPropertyAnimation* indicatorShrinkLength = new QPropertyAnimation(_indicator, "geometry", this); + QPropertyAnimation* indicatorGrowLength = new QPropertyAnimation(_indicator, "geometry", this); + indicatorFadeIn->setDuration(100); + indicatorFadeIn->setEasingCurve(QEasingCurve::OutQuad); + indicatorShrinkLength->setDuration(100); + indicatorShrinkLength->setEasingCurve(QEasingCurve::OutQuad); + indicatorGrowLength->setDuration(100); + indicatorGrowLength->setEasingCurve(QEasingCurve::OutQuad); + indicatorFadeIn->setStartValue(_indicatorEffect->opacity()); + indicatorFadeIn->setEndValue(0.999); + indicatorShrinkLength->setStartValue(_indicator->geometry()); + switch (_indicatorPosition) { + case LUI_BTN_POS_LEFT: + indicatorShrinkLength->setEndValue(QRect( + _indicatorSpacing, + (0.5 - _pressedLengthRatio / 2) * height(), + _indicatorWidth, + _pressedLengthRatio * height() + )); + indicatorGrowLength->setStartValue(QRect( + _indicatorSpacing, + (0.5 - _pressedLengthRatio / 2) * height(), + _indicatorWidth, + _pressedLengthRatio * height() + )); + indicatorGrowLength->setEndValue(QRect( + _indicatorSpacing, + (0.5 - _activatedLengthRatio / 2) * height(), + _indicatorWidth, + _activatedLengthRatio * height() + )); + break; + case LUI_BTN_POS_RIGHT: + indicatorShrinkLength->setEndValue(QRect( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _pressedLengthRatio / 2) * height(), + _indicatorWidth, + _pressedLengthRatio * height() + )); + indicatorGrowLength->setStartValue(QRect( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _pressedLengthRatio / 2) * height(), + _indicatorWidth, + _pressedLengthRatio * height() + )); + indicatorGrowLength->setEndValue(QRect( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _activatedLengthRatio / 2) * height(), + _indicatorWidth, + _activatedLengthRatio * height() + )); + break; + case LUI_BTN_POS_TOP: + indicatorShrinkLength->setEndValue(QRect( + (0.5 - _pressedLengthRatio / 2) * width(), + _indicatorSpacing, + _pressedLengthRatio * width(), + _indicatorWidth + )); + indicatorGrowLength->setStartValue(QRect( + (0.5 - _pressedLengthRatio / 2) * width(), + _indicatorSpacing, + _pressedLengthRatio * width(), + _indicatorWidth + )); + indicatorGrowLength->setEndValue(QRect( + (0.5 - _activatedLengthRatio / 2) * width(), + _indicatorSpacing, + _activatedLengthRatio * width(), + _indicatorWidth + )); + break; + case LUI_BTN_POS_BOTTOM: + indicatorShrinkLength->setEndValue(QRect( + (0.5 - _pressedLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _pressedLengthRatio * width(), + _indicatorWidth + )); + indicatorGrowLength->setStartValue(QRect( + (0.5 - _pressedLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _pressedLengthRatio * width(), + _indicatorWidth + )); + indicatorGrowLength->setEndValue(QRect( + (0.5 - _activatedLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _activatedLengthRatio * width(), + _indicatorWidth + )); + break; + } + indicatorShrinkAnimation->addAnimation(indicatorShrinkLength); + indicatorShrinkAnimation->addAnimation(indicatorFadeIn); + indicatorSelectAnimation->addAnimation(indicatorShrinkAnimation); + indicatorSelectAnimation->addAnimation(indicatorGrowLength); + indicatorSelectAnimation->start(QAbstractAnimation::DeleteWhenStopped); + + // Set selected state + _selected = true; +} + +void PushButton::deselect() { + if (!_selected) { + return; + } + + if (_pressed) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + } + else if (_hovered) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + } + else { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + + // Cursor is currently not in the button, shrink and fade out the indicator + QParallelAnimationGroup* indicatorDeselectAnimation = new QParallelAnimationGroup(this); + QPropertyAnimation* indicatorFadeOut = new QPropertyAnimation(_indicator, "opacity", this); + QPropertyAnimation* indicatorShrinkLength = new QPropertyAnimation(_indicator, "geometry", this); + indicatorFadeOut->setDuration(100); + indicatorFadeOut->setEasingCurve(QEasingCurve::OutQuad); + indicatorShrinkLength->setDuration(100); + indicatorShrinkLength->setEasingCurve(QEasingCurve::OutQuad); + indicatorFadeOut->setStartValue(_indicatorEffect->opacity()); + indicatorFadeOut->setEndValue(0); + indicatorShrinkLength->setStartValue(_indicator->geometry()); + switch (_indicatorPosition) { + case LUI_BTN_POS_LEFT: + indicatorShrinkLength->setEndValue(QRect( + _indicatorSpacing, + (0.5 - _pressedLengthRatio / 2) * height(), + _indicatorWidth, + _pressedLengthRatio * height() + )); + break; + case LUI_BTN_POS_RIGHT: + indicatorShrinkLength->setEndValue(QRect( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _pressedLengthRatio / 2) * height(), + _indicatorWidth, + _pressedLengthRatio * height() + )); + break; + case LUI_BTN_POS_TOP: + indicatorShrinkLength->setEndValue(QRect( + (0.5 - _pressedLengthRatio / 2) * width(), + _indicatorSpacing, + _pressedLengthRatio * width(), + _indicatorWidth + )); + break; + case LUI_BTN_POS_BOTTOM: + indicatorShrinkLength->setEndValue(QRect( + (0.5 - _pressedLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _pressedLengthRatio * width(), + _indicatorWidth + )); + break; + } + indicatorDeselectAnimation->addAnimation(indicatorFadeOut); + indicatorDeselectAnimation->addAnimation(indicatorShrinkLength); + indicatorDeselectAnimation->start(QAbstractAnimation::DeleteWhenStopped); + } + + // Set selected state + _selected = false; +} + +void PushButton::setRadius(int radius) { + // get current style sheet + QString styleSheet = _backgroundWidget->styleSheet(); + // remove old border radius + styleSheet.remove(QRegularExpression("border-radius:\\d+px;")); + // add new border radius + styleSheet.append("border-radius: " + QString::number(radius) + "px;"); + // set new style sheet + _backgroundWidget->setStyleSheet(styleSheet); +} + +void PushButton::setBackgroundColor(QColor color) { + _backgroundColor = color; + if (!_selected && !_hovered && !_pressed) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + } +} + +void PushButton::setHoverColor(QColor color) { + _hoverColor = color; + if (_hovered && !_pressed) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + } +} + +void PushButton::setPressedColor(QColor color) { + _pressedColor = color; + if (_pressed) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + } +} + +void PushButton::setSelectedColor(QColor color) { + _selectedColor = color; + if (_selected && !_pressed && !_hovered) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _selectedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + } +} + +void PushButton::setIndicatorColor(QColor color) { + _indicatorColor = color; + _indicator->setStyleSheet("QWidget#indicator{background-color:" + _indicatorColor.name() + ";" + "border-radius:" + QString::number((float)_indicatorWidth / 2) + "px;}"); +} + +void PushButton::setColorScheme(QColor color) { + generateColor(color); + if (_pressed) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + } + else if (_hovered) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + } + else if (_selected) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _selectedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + } + else { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + } + _indicator->setStyleSheet("QWidget#indicator{background-color:" + _indicatorColor.name() + ";" + "border-radius:" + QString::number((float)_indicatorWidth / 2) + "px;}"); +} + +void PushButton::setMargin(QMargins margin) { + _stretchLayout->setContentsMargins(margin); +} + +void PushButton::setMargin(int left, int top, int right, int bottom) { + _stretchLayout->setContentsMargins(left, top, right, bottom); +} + +void PushButton::setIndicatorPosition(LUI_BTN_INDICATOR_POS pos) { + _indicatorPosition = pos; + switch (pos) { + case LUI_BTN_POS_LEFT: + if (_pressed) { + _indicator->setGeometry( + _indicatorSpacing, + (0.5 - _pressedLengthRatio / 2) * height(), + _indicatorWidth, + _pressedLengthRatio * height() + ); + } + else if (_hovered) { + _indicator->setGeometry( + _indicatorSpacing, + (0.5 - _hoveredLengthRatio / 2) * height(), + _indicatorWidth, + _hoveredLengthRatio * height() + ); + } + else { + _indicator->setGeometry( + _indicatorSpacing, + (0.5 - _activatedLengthRatio / 2) * height(), + _indicatorWidth, + _activatedLengthRatio * height() + ); + } + break; + case LUI_BTN_POS_RIGHT: + if (_pressed) { + _indicator->setGeometry( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _pressedLengthRatio / 2) * height(), + _indicatorWidth, + _pressedLengthRatio * height() + ); + } + else if (_hovered) { + _indicator->setGeometry( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _hoveredLengthRatio / 2) * height(), + _indicatorWidth, + _hoveredLengthRatio * height() + ); + } + else { + _indicator->setGeometry( + width() - _indicatorWidth - _indicatorSpacing, + (0.5 - _activatedLengthRatio / 2) * height(), + _indicatorWidth, + _activatedLengthRatio * height() + ); + } + break; + case LUI_BTN_POS_TOP: + if (_pressed) { + _indicator->setGeometry( + (0.5 - _pressedLengthRatio / 2) * width(), + _indicatorSpacing, + _pressedLengthRatio * width(), + _indicatorWidth + ); + } + else if (_hovered) { + _indicator->setGeometry( + (0.5 - _hoveredLengthRatio / 2) * width(), + _indicatorSpacing, + _hoveredLengthRatio * width(), + _indicatorWidth + ); + } + else { + _indicator->setGeometry( + (0.5 - _activatedLengthRatio / 2) * width(), + _indicatorSpacing, + _activatedLengthRatio * width(), + _indicatorWidth + ); + } + break; + case LUI_BTN_POS_BOTTOM: + if (_pressed) { + _indicator->setGeometry( + (0.5 - _pressedLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _pressedLengthRatio * width(), + _indicatorWidth + ); + } + else if (_hovered) { + _indicator->setGeometry( + (0.5 - _hoveredLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _hoveredLengthRatio * width(), + _indicatorWidth + ); + } + else { + _indicator->setGeometry( + (0.5 - _activatedLengthRatio / 2) * width(), + height() - _indicatorWidth - _indicatorSpacing, + _activatedLengthRatio * width(), + _indicatorWidth + ); + } + break; + } +} + +QWidget* PushButton::childWidget() { + return _childWidget; +} + +void PushButton::setChildWidget(QWidget* widget) { + _childWidget = widget; + for (int i = 0; i < _stretchLayout->count(); i++) { + _stretchLayout->removeItem(_stretchLayout->itemAt(i)); + } + _stretchLayout->addWidget(_childWidget); +} diff --git a/FinalProject/pushbutton.h b/FinalProject/pushbutton.h new file mode 100644 index 0000000..20ed3e0 --- /dev/null +++ b/FinalProject/pushbutton.h @@ -0,0 +1,94 @@ +#pragma once + +#include +#include +#include +#include +#include + +class PushButton : public QWidget { + + Q_OBJECT + +public: + enum LUI_BTN_INDICATOR_POS { + LUI_BTN_POS_LEFT, + LUI_BTN_POS_RIGHT, + LUI_BTN_POS_TOP, + LUI_BTN_POS_BOTTOM + }; + +public: + PushButton(QWidget* child, QWidget* parent = 0); + ~PushButton(); + +private: + // Button Layout + QWidget* _childWidget; + QHBoxLayout* _stretchLayout; + QMargins _contentMargin = QMargins(10, 10, 10, 10); + + // Button ui + int _radius = 5; + + QWidget* _backgroundWidget; + const QColor _defaultColorScheme = QColor(255, 255, 255); + QColor _backgroundColor = QColor(255, 255, 255, 0); + QColor _hoverColor; + QColor _pressedColor; + QColor _selectedColor; + + QWidget* _indicator; + LUI_BTN_INDICATOR_POS _indicatorPosition = LUI_BTN_POS_LEFT; + const int _indicatorWidth = 6; + const int _indicatorSpacing = 4; + const float _activatedLengthRatio = 0.4; + const float _hoveredLengthRatio = 0.5; + const float _pressedLengthRatio = 0.2; + QColor _indicatorColor = QColor(0, 0, 0, 0); + QGraphicsOpacityEffect* _indicatorEffect; + + // Button state + bool _hovered = false; + bool _pressed = false; + bool _selected = false; + +private: + // UI util functions + void initializeUI(); + void generateColor(QColor colorScheme); + +private: + // Interactions + virtual void enterEvent(QEnterEvent* event) override; + virtual void leaveEvent(QEvent* event) override; + virtual void mousePressEvent(QMouseEvent* event) override; + virtual void mouseReleaseEvent(QMouseEvent* event) override; + virtual void resizeEvent(QResizeEvent* event) override; + +public: + // Operation APIs + void select(); + void deselect(); + + // Attribute setter APIs + void setRadius(int radius); + + void setBackgroundColor(QColor color); + void setHoverColor(QColor color); + void setPressedColor(QColor color); + void setSelectedColor(QColor color); + void setIndicatorColor(QColor color); + void setColorScheme(QColor primaryColor); + + void setMargin(QMargins margin); + void setMargin(int left, int top, int right, int bottom); + + void setIndicatorPosition(LUI_BTN_INDICATOR_POS position); + + QWidget* childWidget(); + void setChildWidget(QWidget* widget); + +signals: + void onClick(); +}; From 02f6ec97e6ac0ca9c340a1881c1c82a7563423e8 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Wed, 14 Dec 2022 15:19:27 +0800 Subject: [PATCH 03/26] Modulization - Abstract out frameless window --- FinalProject/main.cpp | 6 +- FinalProject/mainwindow.cpp | 321 ++---------------------------------- FinalProject/mainwindow.h | 60 +------ FinalProject/mainwindow.ui | 23 --- 4 files changed, 21 insertions(+), 389 deletions(-) delete mode 100644 FinalProject/mainwindow.ui diff --git a/FinalProject/main.cpp b/FinalProject/main.cpp index fddc5d1..dd14077 100644 --- a/FinalProject/main.cpp +++ b/FinalProject/main.cpp @@ -1,13 +1,13 @@ -#include "mainwindow.h" #include +#include "mainwindow.h" + int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; - w.setWindowFlag(Qt::FramelessWindowHint); - w.setAttribute(Qt::WA_TranslucentBackground); w.setMouseTracking(true); + w.resize(900, 600); w.show(); return a.exec(); } diff --git a/FinalProject/mainwindow.cpp b/FinalProject/mainwindow.cpp index 8c67927..a132387 100644 --- a/FinalProject/mainwindow.cpp +++ b/FinalProject/mainwindow.cpp @@ -1,318 +1,29 @@ #include #include +#include #include "mainwindow.h" -#include "sceneviewer.h" +#include "pushbutton.h" #include "logger.h" #define MAX_MOUSE_MOVEMENT 300 MainWindow::MainWindow(QWidget *parent) - : QMainWindow(parent) + : FramelessWidget(20, parent) { - ui.setupUi(this); - ui.centralWidget->setMouseTracking(true); - - // Create and properly set real displayed window widget - _stretchLayout = new QVBoxLayout(this); - _stretchLayout->setContentsMargins(30, 30, 30, 30); - _windowWidget = new QWidget(this); - _windowWidget->setObjectName("windowWidget"); - _windowWidget->setMouseTracking(true); - _windowLayout = new QVBoxLayout(_windowWidget); - _windowLayout->setContentsMargins(0, 0, 0, 0); - _windowLayout->setSpacing(0); - _windowLayout->setAlignment(Qt::AlignTop); - _windowWidget->setLayout(_windowLayout); - _stretchLayout->addWidget(_windowWidget); - _windowWidget->show(); - ui.centralWidget->setLayout(_stretchLayout); - - // Set style sheet for window widget - QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_cornerRadius) + "px;}"; - _windowWidget->setStyleSheet(windowWidgetStyleSheet); - - // Set shadow for window widget - _windowShadow = new QGraphicsDropShadowEffect(_windowWidget); - _windowShadow->setBlurRadius(30); - _windowShadow->setColor(QColor(0, 0, 0)); - _windowShadow->setOffset(0, 0); - _windowWidget->setGraphicsEffect(_windowShadow); - - // Create title bar widget - _titleBar = new QWidget(_windowWidget); - _titleBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - _titleBar->setMouseTracking(true); - _titleBarLayout = new QHBoxLayout(_titleBar); - _titleBarLayout->setContentsMargins(18, 18, 18, 18); - _titleBarLayout->setSpacing(0); - _titleBarLayout->setAlignment(Qt::AlignRight | Qt::AlignVCenter); - _titleBar->setLayout(_titleBarLayout); - _windowLayout->addWidget(_titleBar); - _titleBar->show(); - - // Create window control buttons container widget & its layout - _windowBtnWidget = new QWidget(_titleBar); - _windowBtnWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - _windowBtnLayout = new QHBoxLayout(_windowBtnWidget); - _windowBtnLayout->setContentsMargins(0, 0, 0, 0); - _windowBtnLayout->setSpacing(8); - _windowBtnWidget->setLayout(_windowBtnLayout); - _titleBarLayout->addWidget(_windowBtnWidget); - _windowBtnWidget->show(); - - // Create window control buttons - _minimizeBtn = new QPushButton(_windowBtnWidget); - _maximizeBtn = new QPushButton(_windowBtnWidget); - _closeBtn = new QPushButton(_windowBtnWidget); - - _minimizeBtn->setFixedSize(12, 12); - _maximizeBtn->setFixedSize(12, 12); - _closeBtn->setFixedSize(12, 12); - - _minimizeBtn->setStyleSheet("QPushButton{border-radius: 6px; background-color: #828282;}" - "QPushButton:hover{background-color: #e98b2a;}"); - _maximizeBtn->setStyleSheet("QPushButton{border-radius: 6px; background-color: #828282;}" - "QPushButton:hover{background-color: #2d6d4b;}"); - _closeBtn->setStyleSheet("QPushButton{border-radius: 6px; background-color: #828282;}" - "QPushButton:hover{background-color: #ab3b3a;}"); - - _windowBtnLayout->addWidget(_minimizeBtn); - _windowBtnLayout->addWidget(_maximizeBtn); - _windowBtnLayout->addWidget(_closeBtn); - _minimizeBtn->show(); - _maximizeBtn->show(); - _closeBtn->show(); - - // Connect window control buttons - connect(_minimizeBtn, &QPushButton::clicked, this, &MainWindow::showMinimized); - connect(_maximizeBtn, &QPushButton::clicked, this, [=]() {controlWindowScale(); }); - connect(_closeBtn, &QPushButton::clicked, qApp, &QApplication::quit); + PushButton* btn = new PushButton(new QLabel("Button"), this); + btn->setFixedSize(100, 100); + btn->move(100, 100); + btn->show(); + connect(btn, &PushButton::onClick, this, [=]() { + if (btn->isSelected()) { + btn->deselect(); + } + else { + btn->select(); + } + }); } MainWindow::~MainWindow() { -} - -void MainWindow::showEvent(QShowEvent* event) { - // Initialize window UI after window is shown - initializeWindowUI(); -} - -void MainWindow::initializeWindowUI() { - // Create a round cornered mask for window widget - QPainterPath path; - path.addRoundedRect(_windowWidget->rect(), _cornerRadius - 1, _cornerRadius - 1); - QRegion region(path.toFillPolygon().toPolygon()); - _windowWidget->setMask(region); - - // Create a border for window widget (in order to hide zigzagged edges) - _windowBorder = new QWidget(this); - _windowBorder->setObjectName("windowBorder"); - QString windowBorderStyleSheet = - "QWidget#windowBorder{background-color:#00FFFFFF;border:1.5px solid " + _borderColor.name() + ";border-radius:" + QString::number(_cornerRadius) + "px;}"; - _windowBorder->setStyleSheet(windowBorderStyleSheet); - _windowBorder->setAttribute(Qt::WA_TransparentForMouseEvents); - _windowBorder->move(_windowWidget->pos() - QPoint(1, 1)); - _windowBorder->resize(_windowWidget->size() + QSize(2, 2)); - _windowBorder->show(); -} - -void MainWindow::resizeEvent(QResizeEvent* event) { - // Resize window border - if (_windowBorder != nullptr) { - _windowBorder->move(_windowWidget->pos() - QPoint(1, 1)); - _windowBorder->resize(_windowWidget->size() + QSize(2, 2)); - } - - // Resize window mask - QPainterPath path; - path.addRoundedRect(_windowWidget->rect(), _cornerRadius - 1, _cornerRadius - 1); - QRegion region(path.toFillPolygon().toPolygon()); - _windowWidget->setMask(region); -} - -void MainWindow::controlWindowScale() { - if (!_maximized) { - _lastWindowGeometry = frameGeometry(); - - Logger::debug("Maximizing window:"); - Logger::debug("[+] current window position: " + std::to_string(x()) + ", " + std::to_string(y())); - Logger::debug("[+] current window size: " + std::to_string(width()) + ", " + std::to_string(height())); - Logger::debug("[+] current geometry: " + std::to_string(_lastWindowGeometry.x()) + ", " + std::to_string(_lastWindowGeometry.y()) + ", " + std::to_string(_lastWindowGeometry.width()) + ", " + std::to_string(_lastWindowGeometry.height())); - Logger::debug("[+] current window widget position: " + std::to_string(_windowWidget->x()) + ", " + std::to_string(_windowWidget->y())); - Logger::debug("[+] current window widget size: " + std::to_string(_windowWidget->width()) + ", " + std::to_string(_windowWidget->height())); - Logger::debug("[+] current window border position: " + std::to_string(_windowBorder->x()) + ", " + std::to_string(_windowBorder->y())); - Logger::debug("[+] current window border size: " + std::to_string(_windowBorder->width()) + ", " + std::to_string(_windowBorder->height())); - - _windowShadow->setEnabled(false); - _windowBorder->hide(); - QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name() + ";}"; - _windowWidget->setStyleSheet(windowWidgetStyleSheet); - - _stretchLayout->setContentsMargins(0, 0, 0, 0); - - showMaximized(); - - QPainterPath path; - path.addRect(_windowWidget->rect()); - QRegion mask(path.toFillPolygon().toPolygon()); - _windowWidget->setMask(mask); - - _maximized = true; - } - else { - _stretchLayout->setContentsMargins(30, 30, 30, 30); - - showNormal(); - - resize(_lastWindowGeometry.size()); - move(_lastWindowGeometry.topLeft()); - - _windowShadow->setEnabled(true); - _windowBorder->show(); - QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_cornerRadius) + "px;}"; - _windowWidget->setStyleSheet(windowWidgetStyleSheet); - - QPainterPath path; - path.addRoundedRect(_windowWidget->rect(), _cornerRadius - 1, _cornerRadius - 1); - QRegion mask(path.toFillPolygon().toPolygon()); - _windowWidget->setMask(mask); - - Logger::debug("Restoring window:"); - Logger::debug("[+] current window position: " + std::to_string(x()) + ", " + std::to_string(y())); - Logger::debug("[+] current window size: " + std::to_string(width()) + ", " + std::to_string(height())); - Logger::debug("[+] current geometry: " + std::to_string(frameGeometry().x()) + ", " + std::to_string(frameGeometry().y()) + ", " + std::to_string(frameGeometry().width()) + ", " + std::to_string(frameGeometry().height())); - Logger::debug("[+] current window widget position: " + std::to_string(_windowWidget->x()) + ", " + std::to_string(_windowWidget->y())); - Logger::debug("[+] current window widget size: " + std::to_string(_windowWidget->width()) + ", " + std::to_string(_windowWidget->height())); - - _maximized = false; - } -} - -void MainWindow::updateMouseState(QMouseEvent* event) { - _mouseState = MOUSE_STATE_NONE; - if (_maximized) { - return; - } - // Set mouse state according to abs distance from window border - if (abs(event->globalPos().x() - (_windowWidget->frameGeometry().left() + frameGeometry().left())) < 5) { - _mouseState |= MOUSE_STATE_RESIZE_LEFT; - } - if (abs(event->globalPos().x() - (_windowWidget->frameGeometry().right() + frameGeometry().left())) < 5) { - _mouseState |= MOUSE_STATE_RESIZE_RIGHT; - } - if (abs(event->globalPos().y() - (_windowWidget->frameGeometry().top() + frameGeometry().top())) < 5) { - _mouseState |= MOUSE_STATE_RESIZE_TOP; - } - if (abs(event->globalPos().y() - (_windowWidget->frameGeometry().bottom() + frameGeometry().top())) < 5) { - _mouseState |= MOUSE_STATE_RESIZE_BOTTOM; - } - // Set cursor shape according to mouse state - switch (_mouseState) { - case MOUSE_STATE_RESIZE_LEFT: - case MOUSE_STATE_RESIZE_RIGHT: - setCursor(Qt::SizeHorCursor); - break; - case MOUSE_STATE_RESIZE_TOP: - case MOUSE_STATE_RESIZE_BOTTOM: - setCursor(Qt::SizeVerCursor); - break; - case MOUSE_STATE_RESIZE_LEFT | MOUSE_STATE_RESIZE_TOP: - case MOUSE_STATE_RESIZE_RIGHT | MOUSE_STATE_RESIZE_BOTTOM: - setCursor(Qt::SizeFDiagCursor); - break; - case MOUSE_STATE_RESIZE_LEFT | MOUSE_STATE_RESIZE_BOTTOM: - case MOUSE_STATE_RESIZE_RIGHT | MOUSE_STATE_RESIZE_TOP: - setCursor(Qt::SizeBDiagCursor); - break; - default: - setCursor(Qt::ArrowCursor); - break; - } -} - -void MainWindow::mousePressEvent(QMouseEvent* event) { - if (event->button() == Qt::LeftButton) { - _mousePressed = true; - _lastMousePosition = event->globalPos().toPointF(); - } -} - -void MainWindow::mouseReleaseEvent(QMouseEvent* event) { - _mousePressed = false; - QScreen* screen = QGuiApplication::screenAt(event->globalPos()); - Logger::debug("Current screen geometry:"); - Logger::debug("[+] screen position: " + std::to_string(screen->geometry().x()) + ", " + std::to_string(screen->geometry().y())); - Logger::debug("[+] screen size: " + std::to_string(screen->geometry().width()) + ", " + std::to_string(screen->geometry().height())); - if (abs(event->globalPos().y() - screen->geometry().top()) < 5) { - controlWindowScale(); - } - updateMouseState(event); -} - -void MainWindow::mouseMoveEvent(QMouseEvent* event) { - Logger::debug("Detected mouse move"); - Logger::debug("[+] mouse global position : " + std::to_string(event->globalPos().x()) + ", " + std::to_string(event->globalPos().y())); - Logger::debug("[+] window geometry: " + std::to_string(frameGeometry().x()) + ", " + std::to_string(frameGeometry().y()) + ", " + std::to_string(frameGeometry().width()) + ", " + std::to_string(frameGeometry().height())); - Logger::debug("[+] widget frame geometry: " + std::to_string(_windowWidget->frameGeometry().x()) + ", " + std::to_string(_windowWidget->frameGeometry().y())); - Logger::debug("[+] widget frame size: " + std::to_string(_windowWidget->frameGeometry().width()) + ", " + std::to_string(_windowWidget->frameGeometry().height())); -; if (event->buttons() == Qt::NoButton) { - _mousePressed = false; - } - if (abs(event->globalPos().x() - _lastMousePosition.x()) > MAX_MOUSE_MOVEMENT) { - // Maybe moving window across monitors, avoid window disappear - _lastMousePosition = event->globalPos().toPointF(); - } - if (abs(event->globalPos().y() - _lastMousePosition.y()) > MAX_MOUSE_MOVEMENT) { - // Maybe moving window across monitors, avoid window disappear - _lastMousePosition = event->globalPos().toPointF(); - } - if (!_mousePressed) { - updateMouseState(event); - } - else { - // Resize window according to mouse state - switch (_mouseState) { - case MOUSE_STATE_RESIZE_LEFT: - resize(frameGeometry().width() - event->globalPos().x() + frameGeometry().left() + _windowWidget->frameGeometry().left(), frameGeometry().height()); - move(event->globalPos().x() - _windowWidget->frameGeometry().left(), frameGeometry().top()); - break; - case MOUSE_STATE_RESIZE_RIGHT: - resize(event->globalPos().x() - frameGeometry().left() + _windowWidget->frameGeometry().left(), frameGeometry().height()); - break; - case MOUSE_STATE_RESIZE_TOP: - resize(frameGeometry().width(), frameGeometry().height() - event->globalPos().y() + frameGeometry().top() + _windowWidget->frameGeometry().top()); - move(frameGeometry().left(), event->globalPos().y() - _windowWidget->frameGeometry().top()); - break; - case MOUSE_STATE_RESIZE_BOTTOM: - resize(frameGeometry().width(), event->globalPos().y() - frameGeometry().top() + _windowWidget->frameGeometry().top()); - break; - case MOUSE_STATE_RESIZE_LEFT | MOUSE_STATE_RESIZE_TOP: - resize(frameGeometry().width() - event->globalPos().x() + frameGeometry().left() + _windowWidget->frameGeometry().left(), frameGeometry().height() - event->globalPos().y() + frameGeometry().top() + _windowWidget->frameGeometry().top()); - move(event->globalPos().x() - _windowWidget->frameGeometry().left(), event->globalPos().y() - _windowWidget->frameGeometry().top()); - break; - case MOUSE_STATE_RESIZE_LEFT | MOUSE_STATE_RESIZE_BOTTOM: - resize(frameGeometry().width() - event->globalPos().x() + frameGeometry().left() + _windowWidget->frameGeometry().left(), event->globalPos().y() + frameGeometry().top() - _windowWidget->frameGeometry().top()); - move(event->globalPos().x() - _windowWidget->frameGeometry().left(), frameGeometry().top()); - break; - case MOUSE_STATE_RESIZE_RIGHT | MOUSE_STATE_RESIZE_TOP: - resize(event->globalPos().x() - frameGeometry().left() + _windowWidget->frameGeometry().left(), frameGeometry().height() - event->globalPos().y() + frameGeometry().top() + _windowWidget->frameGeometry().top()); - move(frameGeometry().left(), event->globalPos().y() - _windowWidget->frameGeometry().top()); - break; - case MOUSE_STATE_RESIZE_RIGHT | MOUSE_STATE_RESIZE_BOTTOM: - resize(event->globalPos().x() - frameGeometry().left() + _windowWidget->frameGeometry().left(), event->globalPos().y() - frameGeometry().top() + _windowWidget->frameGeometry().top()); - break; - default: - if (_maximized) { - qreal wRatio = (qreal)event->pos().x() / (qreal)_windowWidget->width(); - controlWindowScale(); - move(event->globalPos().x() - _windowWidget->width() * wRatio, event->globalPos().y() - 52); - } - else { - move(frameGeometry().left() + event->globalPos().x() - _lastMousePosition.x(), frameGeometry().top() + event->globalPos().y() - _lastMousePosition.y()); - } - break; - } - _lastMousePosition = event->globalPos().toPointF(); - } -} +} \ No newline at end of file diff --git a/FinalProject/mainwindow.h b/FinalProject/mainwindow.h index 8376819..ddeca63 100644 --- a/FinalProject/mainwindow.h +++ b/FinalProject/mainwindow.h @@ -1,68 +1,12 @@ #pragma once -#include -#include -#include -#include -#include "ui_mainwindow.h" +#include "framelesswindow.h" -class MainWindow : public QMainWindow +class MainWindow : public FramelessWidget { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); - -private: - Ui::MainWindowClass ui; - -private: - // UI control variables - const int _cornerRadius = 20; - const QColor _backgroundColor = QColor(251, 251, 251); - const QColor _borderColor = QColor(104, 104, 104); - - // Window initialize - void initializeWindowUI(); - virtual void showEvent(QShowEvent* event) override; - - // Widget list - QVBoxLayout* _stretchLayout = nullptr; - QWidget* _windowWidget = nullptr; - QWidget* _windowBorder = nullptr; - QGraphicsDropShadowEffect* _windowShadow = nullptr; - QVBoxLayout* _windowLayout = nullptr; - QWidget* _titleBar = nullptr; - QHBoxLayout* _titleBarLayout = nullptr; - QWidget* _windowBtnWidget = nullptr; - QHBoxLayout* _windowBtnLayout = nullptr; - QPushButton* _minimizeBtn = nullptr; - QPushButton* _maximizeBtn = nullptr; - QPushButton* _closeBtn = nullptr; - QWidget* _objectList = nullptr; - QWidget* _settingsPannel = nullptr; - - // Window size control - bool _maximized = false; - QRect _lastWindowGeometry; - - virtual void resizeEvent(QResizeEvent* event) override; - void controlWindowScale(); - - // User interaction control - enum MOUSE_STATE { - MOUSE_STATE_NONE = 0, - MOUSE_STATE_RESIZE_LEFT = 1 << 0, - MOUSE_STATE_RESIZE_TOP = 1 << 1, - MOUSE_STATE_RESIZE_RIGHT = 1 << 2, - MOUSE_STATE_RESIZE_BOTTOM = 1 << 3 - }; - bool _mousePressed = false; - int _mouseState = MOUSE_STATE_NONE; - QPointF _lastMousePosition; - void updateMouseState(QMouseEvent* event); - virtual void mousePressEvent(QMouseEvent* event) override; - virtual void mouseReleaseEvent(QMouseEvent* event) override; - virtual void mouseMoveEvent(QMouseEvent* event) override; }; diff --git a/FinalProject/mainwindow.ui b/FinalProject/mainwindow.ui deleted file mode 100644 index 444ab27..0000000 --- a/FinalProject/mainwindow.ui +++ /dev/null @@ -1,23 +0,0 @@ - - - MainWindowClass - - - - 0 - 0 - 600 - 400 - - - - MainWindow - - - - - - - - - From f3b6f1759ea7bbbf8143fe4596112acad7366f32 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Wed, 14 Dec 2022 15:21:09 +0800 Subject: [PATCH 04/26] Update button - add alignment API - fix generate color function - fix no alpha in style qss - add fetch layout API - bugfix - adjust default color scheme --- FinalProject/pushbutton.cpp | 84 +++++++++++++++++++++++++++---------- FinalProject/pushbutton.h | 16 ++++--- 2 files changed, 72 insertions(+), 28 deletions(-) diff --git a/FinalProject/pushbutton.cpp b/FinalProject/pushbutton.cpp index 8bf28be..0f6c9d7 100644 --- a/FinalProject/pushbutton.cpp +++ b/FinalProject/pushbutton.cpp @@ -16,18 +16,22 @@ PushButton::~PushButton() } void PushButton::initializeUI() { + generateColor(_defaultColorScheme); + // Add margin for the child widget _stretchLayout = new QHBoxLayout(this); _stretchLayout->setContentsMargins(_contentMargin); _stretchLayout->setSpacing(0); + _stretchLayout->setAlignment(Qt::AlignCenter); _stretchLayout->addWidget(_childWidget); setLayout(_stretchLayout); + _childWidget->show(); // Initialize background widget _backgroundWidget = new QWidget(this); _backgroundWidget->resize(size()); _backgroundWidget->setObjectName("backgroundWidget"); - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); _backgroundWidget->lower(); _backgroundWidget->show(); @@ -52,7 +56,7 @@ void PushButton::initializeUI() { break; } _indicator->setObjectName("indicator"); - _indicator->setStyleSheet("QWidget#indicator{background-color:" + _indicatorColor.name() + ";" + _indicator->setStyleSheet("QWidget#indicator{background-color:" + _indicatorColor.name(QColor::HexArgb) + ";" "border-radius:" + QString::number((float)_indicatorWidth / 2) + "px;}"); _indicatorEffect = new QGraphicsOpacityEffect(_indicator); _indicatorEffect->setOpacity(0); @@ -63,17 +67,21 @@ void PushButton::initializeUI() { } void PushButton::generateColor(QColor colorScheme) { + _backgroundColor = colorScheme.lighter(120); + _backgroundColor.setAlpha(10); _hoverColor = colorScheme.lighter(120); - _hoverColor.setAlpha(50); - _pressedColor = colorScheme; - _pressedColor.setAlpha(100); + _hoverColor.setAlpha(30); + _pressedColor = colorScheme.lighter(120); + _pressedColor.setAlpha(35); _selectedColor = colorScheme.lighter(120); _selectedColor.setAlpha(20); _indicatorColor = colorScheme; } void PushButton::enterEvent(QEnterEvent* event) { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + setCursor(Qt::PointingHandCursor); + + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); QParallelAnimationGroup* indicatorEnterAnimation = new QParallelAnimationGroup(this); QPropertyAnimation* indicatorGrowLength = new QPropertyAnimation(_indicator, "geometry", this); @@ -124,11 +132,19 @@ void PushButton::enterEvent(QEnterEvent* event) { indicatorEnterAnimation->start(QAbstractAnimation::DeleteWhenStopped); _hovered = true; + emit onHover(); } void PushButton::leaveEvent(QEvent* event) { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + setCursor(Qt::ArrowCursor); + if (_selected) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _selectedColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); + } + else { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); + } + QParallelAnimationGroup* indicatorLeaveAnimation = new QParallelAnimationGroup(this); QPropertyAnimation* indicatorShrinkLength = new QPropertyAnimation(_indicator, "geometry", this); QPropertyAnimation* indicatorFadeOut = new QPropertyAnimation(_indicatorEffect, "opacity", this); @@ -182,7 +198,7 @@ void PushButton::leaveEvent(QEvent* event) { } void PushButton::mousePressEvent(QMouseEvent* event) { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); QPropertyAnimation* indicatorShrinkLength = new QPropertyAnimation(_indicator, "geometry", this); indicatorShrinkLength->setDuration(100); @@ -225,6 +241,7 @@ void PushButton::mousePressEvent(QMouseEvent* event) { indicatorShrinkLength->start(QAbstractAnimation::DeleteWhenStopped); _pressed = true; + emit onPressed(); } void PushButton::mouseReleaseEvent(QMouseEvent* event) { @@ -232,7 +249,7 @@ void PushButton::mouseReleaseEvent(QMouseEvent* event) { return; } - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); QPropertyAnimation* indicatorGrowLength = new QPropertyAnimation(_indicator, "geometry", this); indicatorGrowLength->setDuration(100); @@ -390,7 +407,15 @@ void PushButton::resizeEvent(QResizeEvent* event) { } void PushButton::select() { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _selectedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + if (_pressed) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); + } + else if (_hovered) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); + } + else { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _selectedColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); + } // First shrink then length the indicator, also fade in QSequentialAnimationGroup* indicatorSelectAnimation = new QSequentialAnimationGroup(this); @@ -505,13 +530,13 @@ void PushButton::deselect() { } if (_pressed) { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); } else if (_hovered) { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); } else { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); // Cursor is currently not in the button, shrink and fade out the indicator QParallelAnimationGroup* indicatorDeselectAnimation = new QParallelAnimationGroup(this); @@ -581,55 +606,63 @@ void PushButton::setRadius(int radius) { void PushButton::setBackgroundColor(QColor color) { _backgroundColor = color; if (!_selected && !_hovered && !_pressed) { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); } } void PushButton::setHoverColor(QColor color) { _hoverColor = color; if (_hovered && !_pressed) { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); } } void PushButton::setPressedColor(QColor color) { _pressedColor = color; if (_pressed) { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); } } void PushButton::setSelectedColor(QColor color) { _selectedColor = color; if (_selected && !_pressed && !_hovered) { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _selectedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _selectedColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); } } void PushButton::setIndicatorColor(QColor color) { _indicatorColor = color; - _indicator->setStyleSheet("QWidget#indicator{background-color:" + _indicatorColor.name() + ";" + _indicator->setStyleSheet("QWidget#indicator{background-color:" + _indicatorColor.name(QColor::HexArgb) + ";" "border-radius:" + QString::number((float)_indicatorWidth / 2) + "px;}"); } void PushButton::setColorScheme(QColor color) { generateColor(color); if (_pressed) { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); } else if (_hovered) { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); } else if (_selected) { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _selectedColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _selectedColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); } else { - _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_radius) + "px;}"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_radius) + "px;}"); } - _indicator->setStyleSheet("QWidget#indicator{background-color:" + _indicatorColor.name() + ";" + _indicator->setStyleSheet("QWidget#indicator{background-color:" + _indicatorColor.name(QColor::HexArgb) + ";" "border-radius:" + QString::number((float)_indicatorWidth / 2) + "px;}"); } +QHBoxLayout* PushButton::mainLayout() const { + return _stretchLayout; +} + +void PushButton::setAlignment(Qt::Alignment alignment) { + _stretchLayout->setAlignment(alignment); +} + void PushButton::setMargin(QMargins margin) { _stretchLayout->setContentsMargins(margin); } @@ -758,4 +791,9 @@ void PushButton::setChildWidget(QWidget* widget) { _stretchLayout->removeItem(_stretchLayout->itemAt(i)); } _stretchLayout->addWidget(_childWidget); + _childWidget->show(); +} + +bool PushButton::isSelected() const { + return _selected; } diff --git a/FinalProject/pushbutton.h b/FinalProject/pushbutton.h index 20ed3e0..bec2439 100644 --- a/FinalProject/pushbutton.h +++ b/FinalProject/pushbutton.h @@ -26,14 +26,14 @@ private: // Button Layout QWidget* _childWidget; QHBoxLayout* _stretchLayout; - QMargins _contentMargin = QMargins(10, 10, 10, 10); + QMargins _contentMargin = QMargins(12, 12, 12, 12); // Button ui - int _radius = 5; + int _radius = 8; QWidget* _backgroundWidget; - const QColor _defaultColorScheme = QColor(255, 255, 255); - QColor _backgroundColor = QColor(255, 255, 255, 0); + const QColor _defaultColorScheme = QColor(58, 143, 183); + QColor _backgroundColor; QColor _hoverColor; QColor _pressedColor; QColor _selectedColor; @@ -45,7 +45,7 @@ private: const float _activatedLengthRatio = 0.4; const float _hoveredLengthRatio = 0.5; const float _pressedLengthRatio = 0.2; - QColor _indicatorColor = QColor(0, 0, 0, 0); + QColor _indicatorColor; QGraphicsOpacityEffect* _indicatorEffect; // Button state @@ -81,6 +81,8 @@ public: void setIndicatorColor(QColor color); void setColorScheme(QColor primaryColor); + QHBoxLayout* mainLayout() const; + void setAlignment(Qt::Alignment alignment); void setMargin(QMargins margin); void setMargin(int left, int top, int right, int bottom); @@ -89,6 +91,10 @@ public: QWidget* childWidget(); void setChildWidget(QWidget* widget); + bool isSelected() const; + signals: void onClick(); + void onHover(); + void onPressed(); }; From e88498cf20f49778b043d53427f6f9d1459bcd2b Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Wed, 14 Dec 2022 15:54:11 +0800 Subject: [PATCH 05/26] Adjust button ui --- FinalProject/pushbutton.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/FinalProject/pushbutton.cpp b/FinalProject/pushbutton.cpp index 0f6c9d7..007836e 100644 --- a/FinalProject/pushbutton.cpp +++ b/FinalProject/pushbutton.cpp @@ -68,13 +68,13 @@ void PushButton::initializeUI() { void PushButton::generateColor(QColor colorScheme) { _backgroundColor = colorScheme.lighter(120); - _backgroundColor.setAlpha(10); + _backgroundColor.setAlpha(5); _hoverColor = colorScheme.lighter(120); - _hoverColor.setAlpha(30); + _hoverColor.setAlpha(40); _pressedColor = colorScheme.lighter(120); - _pressedColor.setAlpha(35); + _pressedColor.setAlpha(50); _selectedColor = colorScheme.lighter(120); - _selectedColor.setAlpha(20); + _selectedColor.setAlpha(35); _indicatorColor = colorScheme; } @@ -420,7 +420,7 @@ void PushButton::select() { // First shrink then length the indicator, also fade in QSequentialAnimationGroup* indicatorSelectAnimation = new QSequentialAnimationGroup(this); QParallelAnimationGroup* indicatorShrinkAnimation = new QParallelAnimationGroup(this); - QPropertyAnimation* indicatorFadeIn = new QPropertyAnimation(_indicator, "opacity", this); + QPropertyAnimation* indicatorFadeIn = new QPropertyAnimation(_indicatorEffect, "opacity", this); QPropertyAnimation* indicatorShrinkLength = new QPropertyAnimation(_indicator, "geometry", this); QPropertyAnimation* indicatorGrowLength = new QPropertyAnimation(_indicator, "geometry", this); indicatorFadeIn->setDuration(100); @@ -540,7 +540,7 @@ void PushButton::deselect() { // Cursor is currently not in the button, shrink and fade out the indicator QParallelAnimationGroup* indicatorDeselectAnimation = new QParallelAnimationGroup(this); - QPropertyAnimation* indicatorFadeOut = new QPropertyAnimation(_indicator, "opacity", this); + QPropertyAnimation* indicatorFadeOut = new QPropertyAnimation(_indicatorEffect, "opacity", this); QPropertyAnimation* indicatorShrinkLength = new QPropertyAnimation(_indicator, "geometry", this); indicatorFadeOut->setDuration(100); indicatorFadeOut->setEasingCurve(QEasingCurve::OutQuad); From 0bddabdf80ae19dd0f9a0524bdbf5505f5c3df8b Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 11:12:08 +0800 Subject: [PATCH 06/26] [UI] push button update - Add child widget existency check when initializing UI - Prevent double triggering `onClick` signal - Add check on set child widget API --- FinalProject/pushbutton.cpp | 23 +++++++++++++++++------ FinalProject/pushbutton.h | 4 +++- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/FinalProject/pushbutton.cpp b/FinalProject/pushbutton.cpp index 007836e..05d226e 100644 --- a/FinalProject/pushbutton.cpp +++ b/FinalProject/pushbutton.cpp @@ -23,9 +23,13 @@ void PushButton::initializeUI() { _stretchLayout->setContentsMargins(_contentMargin); _stretchLayout->setSpacing(0); _stretchLayout->setAlignment(Qt::AlignCenter); - _stretchLayout->addWidget(_childWidget); setLayout(_stretchLayout); - _childWidget->show(); + if (_childWidget) { + // prevent adding a null widget + _stretchLayout->addWidget(_childWidget); + _childWidget->show(); + _childWidgetOriginalGeometry = _childWidget->geometry(); + } // Initialize background widget _backgroundWidget = new QWidget(this); @@ -241,6 +245,7 @@ void PushButton::mousePressEvent(QMouseEvent* event) { indicatorShrinkLength->start(QAbstractAnimation::DeleteWhenStopped); _pressed = true; + emit onPressed(); } @@ -291,9 +296,12 @@ void PushButton::mouseReleaseEvent(QMouseEvent* event) { } indicatorGrowLength->start(QAbstractAnimation::DeleteWhenStopped); - _pressed = false; + if (_pressed) { + // prevent double trigger if mouse is first left and then released + emit onClick(); + } - emit onClick(); + _pressed = false; } void PushButton::resizeEvent(QResizeEvent* event) { @@ -790,8 +798,11 @@ void PushButton::setChildWidget(QWidget* widget) { for (int i = 0; i < _stretchLayout->count(); i++) { _stretchLayout->removeItem(_stretchLayout->itemAt(i)); } - _stretchLayout->addWidget(_childWidget); - _childWidget->show(); + if (_childWidget != nullptr) { + _stretchLayout->addWidget(_childWidget); + _childWidget->show(); + _childWidgetOriginalGeometry = _childWidget->geometry(); + } } bool PushButton::isSelected() const { diff --git a/FinalProject/pushbutton.h b/FinalProject/pushbutton.h index bec2439..8ac2f6d 100644 --- a/FinalProject/pushbutton.h +++ b/FinalProject/pushbutton.h @@ -19,12 +19,14 @@ public: }; public: - PushButton(QWidget* child, QWidget* parent = 0); + PushButton(QWidget* child, QWidget* parent); ~PushButton(); private: // Button Layout QWidget* _childWidget; + QRect _childWidgetOriginalGeometry; + const float _childWidgetShrinkRatio = 0.9; QHBoxLayout* _stretchLayout; QMargins _contentMargin = QMargins(12, 12, 12, 12); From 88269df8fd9f3043b25d04716a206401a1faa67e Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 11:12:45 +0800 Subject: [PATCH 07/26] [UI] Sidebar update - New side bar - Fix button size - Fix expand / collapse animation --- FinalProject/sidebar.cpp | 286 +++++++++++++++++++++++++++++++++++++++ FinalProject/sidebar.h | 63 +++++++++ 2 files changed, 349 insertions(+) create mode 100644 FinalProject/sidebar.cpp create mode 100644 FinalProject/sidebar.h diff --git a/FinalProject/sidebar.cpp b/FinalProject/sidebar.cpp new file mode 100644 index 0000000..fa3118d --- /dev/null +++ b/FinalProject/sidebar.cpp @@ -0,0 +1,286 @@ +#pragma once + +#include +#include +#include +#include + +#include "sidebar.h" + +SideBar::SideBar(QWidget* parent) + : QWidget(parent) +{ + setAttribute(Qt::WA_StyledBackground, true); + setMaximumWidth(_collapsedWidth); + + // Create stylesheet + setObjectName("sideBar"); + QString sideBarStyleSheet = "QWidget#sideBar{background-color:" + _backgroundColor.name() + "; }"; + setStyleSheet(sideBarStyleSheet); + + // Create main layout + _mainLayout = new QVBoxLayout(this); + _mainLayout->setSpacing(8); + _mainLayout->setContentsMargins(16, 16, 16, 16); + _mainLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); + _mainLayout->addSpacing(8); // Add the top spacing between the expand button and the window edge + + // Create expand button + _expandButton = new PushButton(nullptr, this); + _expandButton->setMargin(18, 16, 18, 16); + _expandButton->setIndicatorColor(QColor(255, 255, 255, 0)); // Set indicator to transparent + _expandButton->setHoverColor(QColor(0, 0, 0, 10)); + _expandButton->setPressedColor(QColor(0, 0, 0, 20)); + int buttonSize = _collapsedWidth - _mainLayout->contentsMargins().left() - _mainLayout->contentsMargins().right(); + int buttonSizeMax = _expandedWidth - _mainLayout->contentsMargins().left() - _mainLayout->contentsMargins().right(); + _expandButton->setMinimumSize(buttonSize, buttonSize); + _expandButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); + _expandButtonIcon = new QLabel(_expandButton); + _expandButtonIcon->setFont(QFont("Font Awesome 6 Free Solid", 14)); + _expandButtonIcon->setText("\uf0c9"); + _expandButton->setChildWidget(_expandButtonIcon); + + // Connect the expand button event to expand / collapse event + connect(_expandButton, &PushButton::onClick, this, [=]() { + if (_expanded) { + collapse(); + } + else { + expand(); + } + }); + + // Add expand button to main layout + _mainLayout->addWidget(_expandButton); + _expandButton->show(); + + // Create the page icon button container widget + _pageIconButtonWidget = new QWidget(this); + _pageIconButtonWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + _pageIconButtonLayout = new QVBoxLayout(_pageIconButtonWidget); + _pageIconButtonLayout->setSpacing(8); + _pageIconButtonLayout->setContentsMargins(0, 0, 0, 0); + _pageIconButtonLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); + _pageIconButtonWidget->setLayout(_pageIconButtonLayout); + + // Create the page text button container widget + _pageTextButtonWidget = new QWidget(this); + _pageTextButtonWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + _pageTextButtonLayout = new QVBoxLayout(_pageTextButtonWidget); + _pageTextButtonLayout->setSpacing(8); + _pageTextButtonLayout->setContentsMargins(0, 0, 0, 0); + _pageTextButtonLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); + _pageTextButtonWidget->setLayout(_pageTextButtonLayout); + + // Add page icon and text button container widgets to main layout + _mainLayout->addWidget(_pageIconButtonWidget); + _mainLayout->addWidget(_pageTextButtonWidget); + + // Display the icon buttons + _pageIconButtonWidget->show(); + _pageTextButtonWidget->hide(); +} + +SideBar::~SideBar() {} + +void SideBar::expand() { + // Add animation to expand the side bar + QPropertyAnimation* expandAnimation = new QPropertyAnimation(this, "maximumWidth"); + expandAnimation->setDuration(200); + expandAnimation->setEasingCurve(QEasingCurve::InOutQuad); + expandAnimation->setStartValue(width()); + expandAnimation->setEndValue(_expandedWidth); + expandAnimation->start(QAbstractAnimation::DeleteWhenStopped); + + // Show the page text buttons + _pageIconButtonWidget->hide(); + _pageTextButtonWidget->show(); + + // Set the expand state + _expanded = true; +} + +void SideBar::collapse() { + // Add animation to collapse the side bar + QPropertyAnimation* collapseAnimation = new QPropertyAnimation(this, "maximumWidth"); + collapseAnimation->setDuration(200); + collapseAnimation->setEasingCurve(QEasingCurve::InOutQuad); + collapseAnimation->setStartValue(width()); + collapseAnimation->setEndValue(_collapsedWidth); + collapseAnimation->start(QAbstractAnimation::DeleteWhenStopped); + + // Show the page icon buttons + _pageIconButtonWidget->show(); + _pageTextButtonWidget->hide(); + + // Set the expand state + _expanded = false; +} + +void SideBar::setBackgroundColor(QColor color) { + _backgroundColor = color; + QString sideBarStyleSheet = "QWidget#sideBar{background-color:" + _backgroundColor.name() + "; }"; + setStyleSheet(sideBarStyleSheet); +} + +void SideBar::setExpandedWidth(int width) { + if (width <= 0) { + return; + } + _expandedWidth = width; +} + +void SideBar::setCollapsedWidth(int width) { + if (width <= 0) { + return; + } + _collapsedWidth = width; +} + +void SideBar::selectPage(PageWidget* page) { + // Check for input validity + if (page == nullptr) { + return; + } + + // Deselect current page if there is one + if (_currentPage != nullptr) { + // Find the buttons of the current page + int index = _pageList.indexOf(_currentPage); + PushButton* currentPageIconButton = _pageButtonList.at(index).first; + PushButton* currentPageTextButton = _pageButtonList.at(index).second; + + // Deselect both the buttons + currentPageIconButton->deselect(); + currentPageTextButton->deselect(); + } + + // Temporarily store the current page + PageWidget* previousPage = _currentPage; + + // Select the new page + int index = _pageList.indexOf(page); + PushButton* newPageIconButton = _pageButtonList.at(index).first; + PushButton* newPageTextButton = _pageButtonList.at(index).second; + newPageIconButton->select(); + newPageTextButton->select(); + _currentPage = page; + + // Emit the page selected signal + emit onPageChanged(previousPage, page); +} + +void SideBar::addPage(PageWidget* page) { + // Call on the page's get button method to get icon button & text button + PushButton* iconButton = page->getPageIconButton(_pageIconButtonWidget); + PushButton* textButton = page->getPageTextButton(_pageTextButtonWidget); + + // Store the page in the page list + _pageList.append(page); + + // Store the corresponding buttons + _pageButtonList.append(QPair(iconButton, textButton)); + + // Add the icon button to the icon button layout + _pageIconButtonLayout->addWidget(iconButton); + iconButton->show(); + + // Add the text button to the text button layout + _pageTextButtonLayout->addWidget(textButton); + textButton->show(); + + // Resize the buttons and set size policy to fixed + int buttonSize = _collapsedWidth - _mainLayout->contentsMargins().left() - _mainLayout->contentsMargins().right(); + int buttonSizeMax = _expandedWidth - _mainLayout->contentsMargins().left() - _mainLayout->contentsMargins().right(); + iconButton->setMinimumSize(buttonSize, buttonSize); + textButton->setMinimumSize(buttonSize, buttonSize); + iconButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + textButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + + // Connect the button click event with page selection + connect(iconButton, &PushButton::onClick, this, [=]() { + selectPage(page); + }); + connect(textButton, &PushButton::onClick, this, [=]() { + selectPage(page); + }); + + // Select the page if there are no pages + if (_currentPage == nullptr) { + selectPage(page); + } +} + +void SideBar::insertPage(PageWidget* page, int index) { + // Call on the page's get button method to get icon button & text button + PushButton* iconButton = page->getPageIconButton(_pageIconButtonWidget); + PushButton* textButton = page->getPageTextButton(_pageTextButtonWidget); + + // Store the page + _pageList.insert(index, page); + + // Store the corresponding buttons + _pageButtonList.insert(index, QPair(iconButton, textButton)); + + // Add the icon button to the icon button layout + _pageIconButtonLayout->insertWidget(index, iconButton); + iconButton->show(); + + // Add the text button to the text button layout + _pageTextButtonLayout->insertWidget(index, textButton); + textButton->show(); + + // Resize the buttons and set size policy to fixed + int buttonSize = _collapsedWidth - _mainLayout->contentsMargins().left() - _mainLayout->contentsMargins().right(); + int buttonSizeMax = _expandedWidth - _mainLayout->contentsMargins().left() - _mainLayout->contentsMargins().right(); + iconButton->setMinimumSize(buttonSize, buttonSize); + textButton->setMinimumSize(buttonSize, buttonSize); + iconButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + textButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + + // Connect the button click event with page selection + connect(iconButton, &PushButton::onClick, this, [=]() { + selectPage(page); + }); + connect(textButton, &PushButton::onClick, this, [=]() { + selectPage(page); + }); + + // Select the page if there are no pages + if (_currentPage == nullptr) { + selectPage(page); + } +} + +void SideBar::removePage(PageWidget* page) { + // Get the index of the page from the page list + int index = _pageList.indexOf(page); + + // Get the corresponding buttons + PushButton* iconButton = _pageButtonList.at(index).first; + PushButton* textButton = _pageButtonList.at(index).second; + + // Remove the page from the list + _pageList.removeAt(index); + + // Remove the icon and text buttons from the list + _pageButtonList.removeAt(index); + + // Remove the icon button from the icon button layout + _pageIconButtonLayout->removeWidget(iconButton); + iconButton->hide(); + + // Remove the text button from the text button layout + _pageTextButtonLayout->removeWidget(textButton); + textButton->hide(); + + // Select the first page if the current page is the page being removed + if (_currentPage == page) { + if (_pageList.size() > 0) { + selectPage(_pageList.first()); + } + else { + _currentPage = nullptr; + } + } +} diff --git a/FinalProject/sidebar.h b/FinalProject/sidebar.h new file mode 100644 index 0000000..231959a --- /dev/null +++ b/FinalProject/sidebar.h @@ -0,0 +1,63 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "pushbutton.h" +#include "pagewidget.h" + +class SideBar : public QWidget +{ + Q_OBJECT + +public: + SideBar(QWidget* parent = 0); + ~SideBar(); + +private: + // Initialized flag + bool _initialized = false; + + // UI control variables + QColor _backgroundColor = QColor(230, 230, 230); + int _collapsedWidth = 90; + int _expandedWidth = 200; + + // UI widgets + PushButton* _expandButton; + QLabel* _expandButtonIcon; + QVBoxLayout* _mainLayout = nullptr; // Layout expand icon and page selection buttons + QWidget* _pageIconButtonWidget = nullptr; // Container for page icon buttons + QVBoxLayout* _pageIconButtonLayout = nullptr; // Layout page icon buttons + QWidget* _pageTextButtonWidget = nullptr; // Container for page text buttons + QVBoxLayout* _pageTextButtonLayout = nullptr; // Layout page text buttons + + // Interaction controls + bool _expanded = false; + PageWidget* _currentPage = nullptr; + + // State storage + // QMap> _pageButtonMap; + QList _pageList; + QList> _pageButtonList; + +private: + void expand(); + void collapse(); + void selectPage(PageWidget* page); + +public: + void setBackgroundColor(QColor color); + void setCollapsedWidth(int width); + void setExpandedWidth(int width); + void addPage(PageWidget* page); + void insertPage(PageWidget* page, int index); + void removePage(PageWidget* page); + +signals: + void onPageChanged(PageWidget* previousPage, PageWidget* currentPage); +}; From cd0b8975e02a76ae989795d24ce72df813e10374 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 11:15:23 +0800 Subject: [PATCH 08/26] [Project] Update project structure - Add about page (empty) - Add font awesome fonts - Add scroll list widget (empty) --- FinalProject/FinalProject.vcxproj | 17 ++- FinalProject/FinalProject.vcxproj.filters | 127 ++++++++++++++----- FinalProject/aboutpage.cpp | 0 FinalProject/aboutpage.h | 1 + FinalProject/font_awesome_6_regular_free.otf | Bin 0 -> 173996 bytes FinalProject/font_awesome_6_solid_free.otf | Bin 0 -> 997516 bytes FinalProject/mainwindow.qrc | 4 + FinalProject/scrolllist.cpp | 0 FinalProject/scrolllist.h | 1 + 9 files changed, 118 insertions(+), 32 deletions(-) create mode 100644 FinalProject/aboutpage.cpp create mode 100644 FinalProject/aboutpage.h create mode 100644 FinalProject/font_awesome_6_regular_free.otf create mode 100644 FinalProject/font_awesome_6_solid_free.otf create mode 100644 FinalProject/scrolllist.cpp create mode 100644 FinalProject/scrolllist.h diff --git a/FinalProject/FinalProject.vcxproj b/FinalProject/FinalProject.vcxproj index 75e1a28..6a70627 100644 --- a/FinalProject/FinalProject.vcxproj +++ b/FinalProject/FinalProject.vcxproj @@ -103,23 +103,30 @@ + + + + + + + + - @@ -128,10 +135,18 @@ + + + + + + + + diff --git a/FinalProject/FinalProject.vcxproj.filters b/FinalProject/FinalProject.vcxproj.filters index 20d5f67..fcb368b 100644 --- a/FinalProject/FinalProject.vcxproj.filters +++ b/FinalProject/FinalProject.vcxproj.filters @@ -13,10 +13,6 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - {99349809-55BA-4b9d-BF79-8FDBB0286EB3} - ui - {639EADAA-A684-42e4-A9AD-28FC9BCB8F7C} ts @@ -39,14 +35,35 @@ {602fc1ed-84a6-4d4a-ad71-5e7415d8d429} + + {dd0c6d73-36ab-44ac-9780-4c378faa5774} + + + {d0eeae28-809f-4e8e-b1e0-d5d7c5cca3e7} + + + {0ee9dd70-07d0-44ec-9cb5-37478f6d9ede} + + + {c6368565-9e0a-487b-953c-6c4bc9e3f655} + + + {2ce6e2ec-f0bf-4d49-8b11-cdf0f31693c5} + + + {f8b17ddd-9689-45cc-84a1-5c321b0290b0} + + + {469e46b8-328a-474b-bf82-19c86b980e82} + + + {1351d841-7665-48d3-9850-da0738823396} + Resource Files - - Form Files - @@ -85,21 +102,45 @@ Source Files\Qt Widgets - - Source Files\Qt Widgets - - - Source Files\Qt Widgets - - - Source Files\Qt Widgets - - - Source Files\Qt Widgets - Source Files\Utils + + Source Files\Qt Widgets\Pages\Scene Editor + + + Source Files\Qt Widgets\Pages\Scene Editor + + + Source Files\Qt Widgets\Pages\Scene Editor + + + Source Files\Qt Widgets\Pages\Scene Editor + + + Source Files\Qt Widgets\Pages\Scene Editor + + + Source Files\Qt Widgets\GUI Components + + + Source Files\Qt Widgets\GUI Components + + + Source Files\Qt Widgets\GUI Components + + + Source Files\Qt Widgets\GUI Components + + + Source Files\Qt Widgets\GUI Components + + + Source Files\Qt Widgets\GUI Components + + + Source Files\Qt Widgets\Pages\About Page + @@ -117,12 +158,6 @@ Header Files\OpenGL Abstractions - - Header Files\Qt Widgets - - - Header Files\Qt Widgets - Header Files\OpenGL Abstractions @@ -141,20 +176,50 @@ Header Files\Utils - - Header Files\Qt Widgets - Header Files\Utils + + Header Files\Qt Widgets\Pages\Scene Editor + + + Header Files\Qt Widgets\Pages\Scene Editor + + + Header Files\Qt Widgets\Pages\Scene Editor + + + Header Files\Qt Widgets\GUI Components + + + Header Files\Qt Widgets\Pages\About Page + - - Header Files\Qt Widgets - Header Files\Qt Widgets + + Header Files\Qt Widgets\Pages\Scene Editor + + + Header Files\Qt Widgets\GUI Components + + + Header Files\Qt Widgets\GUI Components + + + Header Files\Qt Widgets\GUI Components + + + Header Files\Qt Widgets\GUI Components + + + Header Files\Qt Widgets\Pages\Scene Editor + + + Header Files\Qt Widgets\GUI Components + diff --git a/FinalProject/aboutpage.cpp b/FinalProject/aboutpage.cpp new file mode 100644 index 0000000..e69de29 diff --git a/FinalProject/aboutpage.h b/FinalProject/aboutpage.h new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/FinalProject/aboutpage.h @@ -0,0 +1 @@ +#pragma once diff --git a/FinalProject/font_awesome_6_regular_free.otf b/FinalProject/font_awesome_6_regular_free.otf new file mode 100644 index 0000000000000000000000000000000000000000..5c3bf98cc59341ae5cf02926a1cd1a374952985a GIT binary patch literal 173996 zcmeF)dz?*W|M>swT8DicGZI2*hnzCbA*m!uCAlR@$S^ZzGG?ZkaZKedNl21}BuSDa zMJ1^ul_XS>N~JeViZrZSn8@^e={p)b~`DILmG)G}wPAEzIE;;(69tu;=s<@=EG&gSO$|JnqnS>rg}eC3pX`R{9`m=C@x zM{m{Bl*=``=}f-A)}NNC>WZ1Slq++jSY+N}ICDE!-FowlYORVT65f3=4;?vA?nz&& zpT{wE9$%~KY)kIz5 zJIej7^j(o#_vc2PBe!oW?Swh4wSJGKY^+rqUDvmzlJ#xAZPiI1_U)W?8CRuSkNc+w zRCDVR-x1YE5AhvUO|1;y6;*w8%J(_u_PgZe7R9a_nNgTGEF;z?)}zOfR zcurb@Kk1c~5gVB?s6k)FMo7F z_K>WiSi`}MVrSp>+4k@H%>AUcY1*=B3v&T~*4mgEOZD$QtEecyuzj;;nVg^I&3e

%ssZ;D_aiA-5B+3HSKS`I5cS610w@(_zy=_6POqts|MhP}*Kb&tAN z-N&x&pXz?~0Qu%x9rdnykG<&oYMuH(tydqakJQI%gZe~mWN)`geWo_6Eo!U!Tz#RwRNK^7 zYCC)F9qJqPt@=*wRNt!~)Q@VH`bqt)e&JPTkJ_t#Rr}O$YQH+54yxbPA@zrft7286 z4y#gCrpnb3byOWw$JGgSlD*SumC#CSZE0IO+SLIa)FB<#5gpY@x`IyDDY~LQM_1D4 z>dLx`uBy+|)pT`TL!Yl}>RP(CzCg$Hg}RQetLy2DbbZ}GH`I-EV|}r1qEmHK-Ap&v zEp$uWO1IXR=r+2oZpZ6GdwrSipfA@~=qq(ceUFf0kyb|50 zyX%{D5B(3_Q{Sw6>05MfeXH)HZ_|DC?Yf`tuLtNm^gx}a2kF5&U1#V_Jw#{eY<;I5 zs&n)(ovZV7zP?Kr=t5njhwBk~q#mV5>oNLnJyzeN@74F|ar&S7e*J(RuOHMC^h0{0 zeppY^ll2t+h@Pq+)zkE2db)mG&(KfknfggROV8GG^iz7Sep=7d&*=I3S-n6%rx)ty z^&6seV~6)34~|`c?g!UZGd&*Yz9vO}$FLrB~~>^&0(-epkPz*XsB6 zI{krOuRqiu>5ugW{fXYFKh>M`XL_^V!YlOW`V0M~-lo6O+x6FahyF%?tH0Ab_4oP* z{iEKcf6_neU-WLhNAK0Y>V5h*yD2lemzkp4r*b+Indhjpng)8+bzKB|xDZYMp0Qv#MJ) ztn;m!RxPWxb%7PLF0|@cb**~VMOJ;Qfz{AzWHq)fwwhR}R#U5))!b@fwX|AUt*uL} zHdb4!opq_z-nz`{U|nuqVO?o;w63x`Syx+~t!u0<*0okw>pJUt>jtZvb)(hYy2w_1Iy+pNCU?N&dlzcs+R!y0I%S%a*>R=Sm8Wm-e5EGyf((;8~! zSi`JbE6>We?y?H3LaWFcZjG=;TBEGd))?zGD8>uGDA^^7&&de&NC zJ!dVnp0^fRFIbDM7p*1MOV(2BWow!BinZK&)q2fZVXd@Yx8AVcv{qSfS*xwLtu@v= z*1Ohw)>`X*Yn}Chwch&B`pEj&+F*TRZL~hMHd&upo2@O@R_k-?3+qd3oAs5o-TKsM=^^_#WdI$#~Nezy);e^_y=*ebCO zTcuW+Rc;-zj#|g8`Z%zon>d+ciKbk9DA6ZYv+o@zg8PqQDhr`wO)Gwdhqnf8wzv!Ai&+t1ny?C0!-_Ve~4`vrTk{i40Ze#u^HzicnFU$K|luiCHKE9{l_ z>-HP=oAxUEEqk^7w!OxF$9~s-&t7Z4Z?CgIu-Drk+8@~;+Z*gp?2Y!P_9pu?d$Ya8 z-fDkte_?-VZ?nI$x7%OaJM3@lZ|(2wo%Z+k5B87tF8e3@XZsg>x4p;SYyWERvwySq z+Xw7}_V4x~`wu&A7uzNFVY}2Wv&-!x_EGzoecV1_pR`Zer|pEJ9PL<+?KqC>1e~A~ za>7o;i8@J61t-}_aVk3JIF+1poytxXr>b+FQ_ZRF)NsysYC5%?+Rg<|%(>91EvAPbat+Bx;WQ5U7hQk>zx~%ZqAKPcjqRjhw~4or*pH@%elqr?cD10ac*<^ zI=4Ihoc_)L=MHC}ljaO^20Q6ahLhO%|?>TFo_nmdl2hMuuL+2ys zV`qc&iL=r9)Y;^G=4^JhI9r|1oiCg(oo&un&UWW(XNU8R^R4rpv(x$B`N8?o+2#D? z{OtVV>~{7zd!1jMea>&re&>L5(D~gtm8)ILwOz+`-GCc(LvGlOxKTIBt>7lRDQ-pg9Ji8tu3Ooy;#PIfbE~=4-5T!s zZcVqATiddNs~>9~YZ+@5TUxha-NSWHUo`)sEf<}*=wy9W|D5`@>R(#FZ~fcr_p9H( z{($;-)X%8Dr2b3w-)Z1B2sel}NNUicLFWct8rs{RA zrw4yJ9k=6dJP;4YE61zG&x_ZHpC7LkuM@8qZyLWM-Z_3vyi5GHc)xi6_>g#ZJU5;n zFN_b5kByIuPl!JhpBR5QJ}EvUJ~RGg{OS1o_=5Ng@eku0;=AH|;(Ox<;)mnq@gwo0 z@zcdg#pe`PF0N8sqqt^qt>U`H4T~EWw<_*j+@<*1;_HjM7xyf_rMO>lM)8E=sm0TZ zrx(vGe!2LQ;?IhA6n|6vUGXo)`-{tqj}#v(K3)www3HG z`TekUxZ&a34?lnS^U{i?7nQazy|VPG(yL3aDZRF|U+F!iFPDB>y0@%JS&OnZWmlE; zE*nxdrff>t+_LA(R+g-bvOR=sJpowb$9stsQd4u?!S+^ z|32#e`>6Zxqwc?ty8k}v{`;u=@1yQNkGh@zhokOW|I1PL-T&=T_d<@kKlYEh_y32Z z?rQ(>sQbp^9vpSwUYuV1pd58SCP&@x|2Ie7*Zz6b-HW5{yEy6|{U46HSN@ly?)N$B z-g?$icc1?kN8O{#?kk&Fwy)$XD}Iy1)PXdkOr# z1pZzEe=mW*m%!gk;O`~y_Y(L&atZ8e@c-Xz)m~P+jZzg`P;+yy6)*JeyW)8jt5&R# zaysRh`99@W?^N_<$`>hHQ?{gRO!+uvot(FpQ{NCROJM|C%8MyeQYNPq$tgoq(q%d@ z<#x`wPJDGrCo?twr8G&YnQ}hUYAIDysxYmP5=fT&O8#D{HhoVjH3?BvIj zCo-KtBa++mwJo(uZkgO7xi+dHmtq7+vKgHv|5f-!sR|qwSJ*{Anv*JUR9s;TeN^F% z3JWUSQ=xkWH|g7?xk@D!CgmmNCJjrVM(0FlMQ285L1_ ze`H@|Z)A7m=g6+e50RabZzDS*+auc|UqrS>Hb*u^Hbyo?K8mc5tc$FTyc<~)Sshsw zc_Xqi@>*nhWLacsWJzRkWKm>cWI<$pWL{)$WKLvOWM*VWWO`&;WNKteWKv{eWI|+o zgCYYX10ww*eItD$y(7IMJtI9L z-6P#1*GIZWx80u84Gqw2!olw28Eiw2U;5G>tTgG>$Zk)Q{AQ)QQ9*wIekn zH6qm_RU?%nl_C`*$&sW;Boc}QB2L7LsPO6V$?);;(QtXVG+YvnhYy7hhWCf}h4+Sc zhkp+53jYw^8U8lBBfLGlE&N4zYj|^bQ+Q)|L-?cc`tZ8&+VH#KHR09aRpB?nE5oma zmxq^ymxh;w7l#*x7ls#v=ZEKo=Z5EmXN6~mXN0GRr-i46r-UbkCx$14$A|9^j|<-$ z9vdDL9u*!DE(#Zf^TWB}oba9DtZ-&HJv=BpFgzgKFWfiWC)_*SE8H{OBiudQEqr~r zYq(3ebGTEuWB7`2hj9CFyKtLu>u}3(^KjE}lW^m3!*Km@y>OjyEL=NWGh8EFEnGER zIb11RF`OJu3P-}Ba3Ji2t*{E64xJ1g4;>Aahe|^wp?K&}=wN7nXkTb=Xm{x6(5}!A zp`D>`Lpws-L)$`Mgtmq@hc<;ahBkyg3at;V3#|>k8(I@u9aL)}8xhq{KkggS>h zg*t|=2z3ax548)m3AGNj3^flm4K)ch4mAwb57i6R3B^LSLp4J+Le)Z5LzP37LKQ>F zp`=hG6bc1GPRI(W;OXGW;PK$mV0o}KSQ3l}4+Ref_Xqa{_Xc+de-7>n{t(<5{5H5F zxIMTn_(gDQaC2}|aAR;o@T1`R;JV=2;Jd*!!PUW4!8d{{gRcdb2bTqx2A2dE2Nwkw z1{Vb92j>On2ImB41!o3l1g8h51*Zn51SbV21}6l^2k#G#3*H+X8ypiH6&w*P3Kj(O zgSo++;GMy&U}i8qI4C$UI3Uf(BMuMSW zAm{|GpbDH0oD3Wf91WBQN&_WUtn)wci`v1uD}n0oq=xyI|ADS+X7z% zwgxr_HU%~YHUvHjtPiXUtPQ*ySQA(sSQU69urlykV0mC!U}<1UU~ynkU}0cEV18g; zU~XVeU{+veU`AkiU|L{mU`k+8U}9iGV0_^Iz_`G@fw6%xfl+}GfucY`AU}{B$O+sT z$O>cz(gTA60|NsB{Q`XheFD7$y#hT0Jp$bW-2&GKx(2!gItMxhItH!?bO^K$v?Om6$8nEq(CGP3Iqa9zzQh$ zw0qJ$?jCi^-BP#2jk|~3gYJHJpS#!H?f&fUa({4ly5G7x-0ki*_X~HcyV>33Zge-e zAGzz@b?#dCU3ZPU+Fj+o;jVOFbCBaP!?i6RbNjk| z+}>_4x2M~~?e2DSuXnq;UEI!YC%2<}h1xUJomZgYN4-h`i-H{|E%_4rwO zjGwF5ZW-#_)8si|QFeYLm<0Hm1R$?6ECdM*`Vie;kiWpmw z&p3-5#$04E{vw^R7y}uX(T_12eHgFNi?JI$7{}4gxt@_7T^Qxj$?3?rj}D9hX~%ew z){G5l&Nz`Kj2UUj_>p>yC5bVvq$XobsxjWAGGk9FG7cq)F)1O&r#OsNQH)zT$rzTS zjAtojY)hPRE(aO&vXAjEyZKap7vo}fGDc-E#q$1 zFa~E8<8f9pHfK5Gbe1w^XEEb<7BZG+KI3}kGR9{X<9%i@_GcR7fTl1eXd>f-#xquE z9OH(@GKOdr42Au$_z%+rfCTZHyh;YHemT z*+xc|ePpe-)>&&AceaKxXsZ~Hwvw@F%NeJ(lrd|I8NarWv261h*EW|iZnGHgHiNNm z(-;Rgg)wmx86P*Ev2x=WH#e3sbfXwgSH#%5e8$=3Fy=0c@ptKr#T&@Dync+)>%(}x zUX0!A!8pEdjOpvj_`c4J_3OyEzYdH6Y{z)O){G5o&N#s)j2Udm_`!ONC5$nyuqI;+ zt1;fNGGh-bG7d3`F^M6@CpwH(RE%3Z$r#3?x?Cy7HpUs}c#tuV`xyVYo3W6)_zCS! z#z^ka+qrZds}kpzoAa#z*V&~Ha?c(3UvuueCF3&9B}=)^M$SE|2bz0gH0dBlpLS!! zXHPQ^jNF`Rjw$sb8c+K)$Bo?EKE1#@)|7MS>RFtc!~be(^DjZp`j4@t90ThvG*EXn zXXt)s&Sng3XE|k{&XOtTGj_JAxQ1@bxZic&Wi?0r@}C^JbE!-{h_6-sQxzj``PU}q zKV6S6^FzYR9Kg|(0_qKztm8c?PrE?gEtTe~q=3l1h06C0kmf_jv)PMVL*S~$w zBj&%2jLvS#SnZg6_n*F4jQDo=wbHx`69n zC}U9Soi+Nq@mb@)n=>T6B?HpiFf6@2Bf+mwSE`Pxv${rgQC-z_>IQX_x>@y7x2its zHpYqfV~qGfe}s4z!`$!mM~3Ii2=IFu|NQ`?z9-69@5lWS-n0Gj-ScEz_ac8x_tO6| zo?DjmbsfA18>r4SMi-K%I({vg)}@Qcruu&7bn}kUWZclt*bJIC88@bjiS@#G94~Wv zsvql&CGTZUZ{}xg-Wy&@=Dii~y(Dw`Wq!tH{`->o7c;!ulg#O6>oghn_cI>gXMBgB z@jyT0G(YnkVEdHJ@)_)B-u0Pxm?qvwGIHOmCeuv6T1%;Q~Zn{@iU(4XZ)z2@iaf<$NY?^`x!s( zXFS8t*!+t)lkrSH<0t)$&3?*cJloHBj-T;Ue#UeCjGy*1p66%$jGys*KjUZpj2HMB zKj&w>(9igJKjTGy#xM98FZMHj(a)^^C4T1gm;8*E`We6MXS~eMtcO?p%<0Shj9>LL ze$CH#g`e?CKjYW^jLj>P$@on_<5hmfZ}}Oo_A`Fl&v=cW@jHIT@A?_P=V!du&-i^m z<8^+}ULopYd)#<2`=Hd;N@m^)ue*XZ)L=@qRz!1AfK_{fvM2Gd|>J{D+@$+|Rh!&$z_T z_^_XGsh@F~pK-aL@ex1cqkhK6{EUzL8K3YoKIvzC%Fp<;pK-zuYiKghI}J=?3zOK! zBz7=~T})s#C0%<>tYhu!z8{4 zlej)6aRW@^hM2^SFo_#u5?_o-+ys+26_dCrCUG-N;^vsdEij4A_C(@Vn8d9yi7&w< zZi7kO7L&LgCh?`1#O*POFT*76fJuBgCh--R#8+Yxcf=&V3X`}KCh^sn#GNsTufZhl zf=PTWCUI9x;_EPpug4_50h72JCh?7!#N9E8Z^9(*fl2%iOyZuH#5ZFS_rfH;1(Ucp zCh@J9#Ckhhh@vU=k0*B+kVo&ch_m$0WWBlehqrxDb=L2$Og?Ch-VN;*prd zqcDj_V-k_hS-2fJrVS6~va#3X(lllTox;x{pgS78#r zg-N^`llW~+;x(AW?_d(Yi%I+*Ch=NK;`cF$*I^QWfJwX_llVhS;*T(iKgJ~9fJyub zChlXx2@@mH9{+cAm1#w6Z>N&F2a z@wb@7-(eE(#3cS6llTWr;vX@IcVQC$gh~7}Ch;$r#Je$x_h1t5#U%a}lXxE{@o$*K z`!R_RU=kn1B>o+f_z))XADF~(OyXip;u1{a!VxDh6CV@%?UF^QXC z5~pGkH^n4whDqEUleh&YvDvmr+zOMpH74;Tn8a-`iQ8flx5Fg96qC3;Ch=vM#2qk+ zFUKUl0+aYkOyZ81#8+VwcfusT8k4v)Ch;|x#9c6nuf-(pib;GOCh_%{#5Z6Pcf%yU z5tFz(Ch<*}#62*H|A9%|6O;I6OyXXc#J6A)_r@f?6_dCRCh={U#CeVG{onllXp2;s-E^$72#dh)FyFllUP_;)$5V4`UKf!X%!INjwFU_z_IvshGr% zViHfoBz_E&cseHWtjY+%)llUD>;&(BL-@_zc zi%I-GCh_ zN&Gn`@fVoHUt$t(!zBI+lXyEO@zep-(wR0fJyu#Ch;yz z;-4^yf5s&K1(SF;Ch;Cj;=P!}zhV;a!zBIV-g?2B>n@FIF3nN zj7eOANqiWSxD=DP43oGVllTZG@lj0TW0=IpF^NxL5}(8*K7~nq8k0DI$=GIM5^GFi z3zL`&*ycj!@{X6-#Uu`35(hDfLzu*2OyUS8aTJp{36r=2CUG(*aSA4JMNHyzFo`Q+ z5}%7nTp5$N3MO$?Oyct}iK}4}SH~o-fk}KmCUH$n;#!!*wK0h=z$A`g5?_c(TnCf5 zE+%n3OyY|$iR)t$H^3xrh)LWClejS^@x_?LO)!a5F^QXE5;wynZjMRZ0+ZNmD15?_r; z+!>Sj8cgCYn8ep&5_iQUz7CW4dQ9RQFp0Zi65ohP+#QqnCQRZUn8g3UB<_hxd^09- zFHGWFFo}C(65onR+y|5RHcaBan8deZ68FO-?vF`40F(F*OyYr<#A%qsgD{B)V-lxh z5@%o%XJQf$!6eSYB+kYpz7vypC?;_ZCh;&#;#^GPJWS$zOyavRi3>1^3o(g{Fo}m_ z5|6+n9*Idj3X^y=Ch-_d;=3`4$6^xSgGqcZCh>ik#N#lD|A|R_KPK@5n8f2Ti66uy zo`6aG5GL_NOyY+zi6>zaPsSvkf=T=cCh=5E;zu!wr(qI5hDkgfllXB=;u)C4Phb+y z#3X(alXw;;@oY@uIhe#xVG_^9Bz_u`cpfJ4GnmBlF^QkWBwm0?{2V6nLQLZ4F^Lyp z62E{+ycm=CMNHx)n8Yt(5--Ihei@T^87A>7n8eF5iC@Jeehrg&1t#%IOybuuiQm8^ zeiM^;6(;dpn8d3wiQmQ~UV};e4kq!tn8fd460gN1ejk%~9VYPyn8fQbi9f_7{s@!! zV@%==n8cr85^uyL{uGmV6DILzn8cegiML=9Z^b139FzD9OyVywiML@Ae}zfB9h3NL zOyV7w#NS{Ne~U@{9VYQkOych`iGRQ({t=US7bfvfn8ZJ0690lpyc?5v4<_+mOyXZL ziT7a=|AtAtACve1Chfe4`CAjfk_<4Bre7zF2N)|j7eOINnD0WT#iY61e5qE zCh;*$;^UaaCoqXmViKRiBtDHvoWNx4FfoZWCb5M{Y-190VaHs-T-Wsy2QZ0)n8YDW z;xHz01d}+5Nt}d9Tmh3f8Iw2#lei)#@i~~pl`x6V#U!qbNn8b!xGE;`d6>l2Fo~;U z64$^aJ|B~~CMIz$Oyb&@#1~)^$1sU6#3ZhRNn96`xE?0)MVQ3(F^L;s5;w#oZiGqP z7?b#7OyVY(#HpCXO)-g^VG=jTByNF8Y_<;)x56ZDjY)h7CUF}~;7-7tx7#3b&HNqiF~aSu%5e_#^##3a5MleiZq@hzCdy)lVz#U$>7Nqie7abHa0 z+cAmzVG{SpBp!fCd7$$KpCUG7naXu#TU6{lLn8byc#6_6I!!e0RU=okSBp!uHJQ|aD3?}j2n8af- ziSNNAz891DK1||qn8g3YB)%V$_yJ7f@tDL9ViHflBz_2!cp@h8!LS- zeguzKrEU=qKHNxTY^_$^H0)tJO@V-l~yBz^~z z_+3om_b`dqViLcPNxTk|_ybJh^_avTViJFZN&GP;@dixdPcVr$ViJFfNxTV@_%lr6 z&6vbnFp0Nf5`T_K`~@cQmzc!cFp0myB;Jlm{52-=4ou>2Fp0m#B>oPQcqb# zU=sg`NxTb__$N%_pD~Gl!6e>|NxTP>crPaLub9O9Fo}P|B;Jond;pX9ASUten8b%L ziT}VPj$;xRV-lBO5+BASF2y7+!z3=pBtC*kd=!)T7$)&?OyU!m#3wO{Phk?D#w1Q) zGIp7m#2S;>!X&mai5*O0uIQR8o7)L^iG!HLAxz>hCUFFlIEqP}gh^ZhlQWg#MLl~t78(^z$88&lei`(aV<>Z+L*)_U=qhL zi7&(?u7gQj7n8UiCh#Pu!gPt3na}z!d5Pb_q{b@Mfak8s%v%GVmnPMVDeKduCNfR(Qjaig;iUph zJA0`GOuKlAdHfAX@my+PZi~dXU{V&-TfM~Tn9Mvkc*0Au@3@%flS!>$TGLC+wtq31 z$8vEGFV#k=pC0s5t(dajOscg~arRp#^SI&;na9h0#d!=SbKN-iXHspMR`ycQG37Cs zR2EbA2PV~yX$>#6h$-`EQZF)P-I~-urggj&>p9N+npAtHJcmr`GNxB}sSZp#d#THr zUgM<(GiBMD%sPs*+~T)kb3L{Tlej-7btTgwUS=7_v%SpvisyQ%tC;3{sZLA_z0}oA zhkGeAFL%>eZqv-mI4^ZA(+OUxE7OO()SXP(R!nLr(}%s(bxbFD$uggTNnOu$rk8oX z#Gmw%W%4v8bpzA+UaA|@1zyT5gN5`0m${MYhhFL*Oh2X#oZge^E-zW{doao4+KWl% ze?LBeZ((}aOK!g$lQPTih?g?U?5LOO!<6mIq*x!tJV#7sn=IzJZW6OC6_Z(p#Z|mi z7pCm1g7yig}zR zq*gLD_eW;?FPZG6o?tq~OZ*5X#WF21_d#NocZpf%HdAvQG6#1hbG=kYrsh80;PfY% zzUifAGkwcT&0)IQOZ+w_^%T=JUgCE!DRbNJdWqL!GW*gJ)^Eu={4~=Kywp6VTj>i< ze}?HcFSV5EPA~I1Qu4c(*$*GKywpObJQqyrd8RxM58sX#F*Vx^$hS*l+97^^(~i>e3G-v+vcVA4#71d&8xl zG7rx)jZ2FCk}j((DPCW6Sry6bmvmWG$s7;pvTBl2c}!bNW?!evcs%6!W_&Yl$Mk;5 z9NTEtwMnVTOczSB9LiXBB#(=Au4TP9v8`D zFWZbaV{_fFB&FsvW&0rWyw+vEN#-?Im+hC#YpyOkE}8wFE?1IL+<&>2l-k79l9c*@ zDSz*klv=}-bw*0P!_<|OV!f3IB&F6erFeYh6(yzmGd)i- z&kGG#j_r9NSLzN8fEzr3cT6zjaamZTKhLU~M5JU4ZD9Z9J#nAVq+VtJQe zEGhFmDsLj0=cz7FmCW-|mp7FZ&pTb-N;1!DUEW4A&tF~MNixR|x}4=pN^Rwz4DFI+ zJ2~v9siEg$!rV%!++ZRbdoMSgi&D!*9m8h-g&Ccl=gh(B~Xkw0kq zD8JZk3BT@bwe~;E!^4=8tTq@kcYq@P{!Uv1jt@ z@D}rDE7$VN^S1MA_4eCG_#=_$@&_O5@dqB;@~iy1^9LEz`2~Puorm~Si8J{Vh%5O8 zgP-zi2fyV{5*~7n@ka%d`2&Kr_yvdU_|=Eq`K5@1-C_Ld#PROq?$hoI?h1Y(<7W43 zcaM8G5Dc6bXb`xZUlw_LU?{(6^2xyS{A$WI`~u5w1HT212gAYh_$8UGgIDn@H3tTV z1xE&741T~b`z#I~%@{Q}Cv8|-5r36DE3GiAC~Zi3UJidLJ+&}5ps;B8h>@d4 zj~SCuke50#JH03?wJ<+za7JccPC8c_oRe3Wk)E4Z#MQDg(h7H77G>t74H=Y|H*{E9!O-ksX+tvdGjdal@=^<#4KA6@buv;%nR9&) z&dL~k#&-?RC^Qc&V{``pPc6*h0S->f$;eIT@ujDYF61w=56j3c^5)B*yFBh;a29iw zIw-Bczd)gx!_=&_oXnhzVR^ZO3o_EPi&6)t6{K^)^wji%>=79(oAlKDyzJbfRQX%- zXMLZOk!cp)nX`xIpY=_8-pJg+{QddNoV@(}(W&X#g+sl^mXSLmgVQqd(+Z0+auV?larNKn4ew5T99Rsnx8Yg(0lNiEaTL|VcFcDQDy zX=aI7rMaw%8|8dA)M06(vWI1l$vE?EcJA5Va+^hYe96rl$zEb;Mo|GzZ?4XT znA^g^IobK%7VqsONLyD%#+ zpJl@%8p_J{m1~}%p7YaqO3V4|fXvRsT(p1(?>{jzhv($@I~JZkMTLJoZP{7o4wY}& z0~U-HrDu;B<0+FTdR9idoGQ<4S-SG=kOCewJ6Q9y$KJEv!0dkiIyrSvM%u7HFC^ck z7LH_B{?}>V4*9R|nP+xs|Neby5&La##^qkj{_(7D|LxqOyxbwf&zcMGd$Uvdmz(xa z{&N}l^Y1T_p=|py8wP(p5c$qrB~|8JE|HTqd`Q+``s>1S#@YAlo$%*9vIVCO;z{qV zg92U%S;48icKGWkjm^_vErr-TOt~A`=gQsu`9i_7ydZC=_n-@h7vvXY7kb|mW%Fe0 zol#K8z9QDPZS$thTeN7~qFvidVhzm^TkIqQ(@E!HpUCHf`3 zRKKj3=~p<)dR4!sS8%NLI==??O}$FLrB~~>Ir4f(zpLNVYxVnjo&G?t*B|PSI2zla zKjBx&eyTTdT(((n(OdQB`V0M~-lo6O+c{F(p}*l*&VI+QsQv!`wm&7RzIMzCfA+2RjI=dA$a$2UT3AM z@vfpqJ*Cb+k9cQO^E;(#^Qpmw9hItcBR}=YSE?Re#3wNq{lQO5_!OtX4@xzBL#alO zDAjl%KXrIpsU}w`m71wk(;}ssHKjvJwct~iR(x7@$+^TQENv$9K?e8R?l2#K@X5?& zc}jKQIvui=y8L-Qyyu;HM{fV>t9hgRI&ZWCN?q5S49)`+wYj{4jyl&+SkbS>Up z)_Ga!dYoRrkY9>+Na@DSl)m_g(y4s<(v(jsn)B|v1@EL=ah*%K{AGO7bUC-%@g}7^ zahcA1y3(Z|ztHP(I;Qk>e0p*d@8)}s=ND=5j=1+cenHj%rTcQ-+d02KpB~&%Rp~T7 z(O@y^jA8sTDn4DflXvLD_yi!Ice(}4YXSE${70ony~!_ZN>lni&VQh@(hokM^h3 z7r6}Km$q=f-%nC{7oQ~k{E^bTyYov?HYRzpejRa7)Jr7B z_iI#zbDJ+T=YGbyduGpJ1|PX(T_Vx9RVz1<_?e3*zS{JexfnOXsjc0FzTvs;LGPv# zeH)f@y;|nHuQqL}Vou%UUo25$@D66ZU`s#m&XZ5XlTSAP^gAw8;hGDW^T_I-__9{P z3LO;>)I1!NNR(Z30q4BK!zo$))8vph@lH;Zbu!DWWUUIFFjq*FtZ41sRHCfgChw+0 zlW%8+5B0j6vx{GP(0rKy5A_;jmJE}GO73+xCoe8fsB>O=kb97ccd|;psUI_P&WhGt z+DyC~QOVrA+-NAd+0hP1c(94rPq9K&U>u8}!n0iy>V|dGpw*`$-v^f^5=V@ZSe1#A zL$f&JwmG4DnKX|j5{J#HM@DWp+#rfqMc$o38BZN$Vj z>XY8Bas!813|6yFXKr~o>+sYHR!hmzp8tBwOV&+eC9?oo7G<)u+x3KIiFy-RDV%rh zGG?G7n^Qt{d+Z?B*<1PU6ZM$4mv5W>Z?|xH{#m!Me9@U(kQL(H!u8fP7L}#AddUDD z@XE{0qdfJ(A2Npt6?!4=&AO^^PBv#O%H(c!{=!5e@pb{q9D?>{ip(5E)4H;DBDLS* zstvh-bzX!MpPb5BDGgbzy*imyk=LrVnbWiHkh@`#m^yxseGco$EaAu|HcXxd=4J+&&9&p+Og2t$3#xwLLAk}eRxM=>j%5ud zpU6MbEulwDx`OB8`Q3PmpK8^TJ2wyhxOqBNG8@i`8Dm(ONi6fk$-}K5XJH+xJdrzU z)tdV`X-+A&xp{1-YBuCKC}*EypOGjvk6N2+ALVxV#SCm4 z$7j!BZmrL``QzN9a@mD=3McUZk7o|y>~k;qfNNKu&7(FmB-gHE?%{}>ZJ9-p$jo$? za2}6M)iukZoQJAvwBquAZ2F8FsbC)Z5py51Y)UgTAHSQELuO&bnQ?xJDLRO}rF4KD z2@lDfxN|m(X)kl1*ta(;k=SKUJG_@IJ@JRR(PL&-e&5TZImyi@4w`#Ey=gONZ^_I& zv#(>FGnZz?v(8(Yb#5l+6!z>9wgTp`8w*;sSkan&|4D8{DRXoGRiR0oReg?InBX7Y zF)LrP>{WzKA+e`DyXNTLEN=bqFJH4X%?%u%!aXFLEyYdi%A>DtmiQTRj(Ht%%?e4X z*@#Qa3aMh2csVz&8eGoHS~&|qRWSbM+)v0Kd9{6`wqN7H3;*U@FPn(rM;R1&mIyP|U0{*QdgEpRY_sE3YW6HQhx5#u+Ijuu2^BUQ`JQceCsak*7E4li zW#bAgqx#%PlzC4aId#`l-2M@E;C~+gwSRE7@ip0-6GJC^!ci%}S}wl}?%U8faK<=D0@_Ih+>YLMcrvGn<=O$>B5}`00<$%6c-mj6K$wgQ2_5 zJ{aOE-jNW;RdS$Y4y(+w%VI0EzL!|dn((}7uXvxI)O`W%jd5+|m`*vs6si;d+EzMNRjw?~#QG_!mn z9^>9l{J5629_01vWLp*kM-7}ca#`hsx~XYzRzceAIkHb+4g0U-9ns-M=G96jd@W?z zpS@3*$9^P{7{S(`SpM-cZsa7JR^s%kp4{C}T@hPA;>4lK<|d9TzmT~&Qrv)5WM=aO z>s1Apo4Gi~hM}UPcontd7xIiWt1&uq3#(SPfQQ?0*mG06p4`5-tQ;ZDtS zBH3&gF88dWtPpOQ!(J6N&qld9$86}F!=1@f=HYhCNUT-a` z(8}x#W#XND)<*6vtb}^l>=k6jc($@93YevtJli~GHZSEeONmn1Zw2Oa&!rD>40p0( zj2EAq*rrP#VqF|FTVrCx$556ax5@s}V^U@o7Z^H$#bUPBVzZAnuQ7>I9w7&fosaaY z!XhXguDgdaNx}9ygZ-FdPfIl;+?D_udg=`o`rIxb&#uhmpOCh zJ7xo9$;g2Q`(AI^$Wr1|-c7U)aJ4^|o>_3_INMxBmL3!DI%gkew+?bOxlePZ%smU6 zJLdJ!97}BbA0F4jf1ANSU!cr9nEjfpyt8JIE0{<3pYN&lQHLGCjiVje=T3+5~|ODx6C5!V=gEsn=gYyjK5ZXM>Ydl`6tr}nwNEZ95;O|RLIlIJhKwVq8}Twi?Ju3$J43m*vn(%mn=C)64sA?!rpm(Qp8S~n5B;2thGk1pU z|HeJQL%nY;_h;T!1zwuKU4Let{;OB;R#i1JkF73qrJN6A33b^b7WDUK@ide-K!?me zs&XOEykE^_l5%-@*?pX=SmuQ@vD@5`#RE(1*}_x(NZt>L#DOX7CJ&|8;KUuJ?c~;2 zlI7JZa=v*B7yqO!3**2BzGYKX;oa4^8AZEE&UUT^^q$QiA~)&NKFiUo%erv!`E>?pKs}BR>E1&Y{RqP@A*3; z+2nYBnst*RuhC4>MP&>$iRDhdi3tca*oQTQk=UT77iRtt@MDpe}_DS`@B6l+ktP$fXA zibYzi&_*jttJM2PqoVTRBFHTm&>%#Tu$$~A=lgukdqV<*R&4wGJ=#bAdGCAAb59IW!*zr@JATAb<5$qcw4SULg~qM7Ap&!{USiD|Gx>|r4{p8rSa zcr9Z|$cYm9##>?q2IwOBjK~Wq(b)YAy6OXweGr%n_uIv zH0PQRwu7UVk{~tjuO|of!hb0TNezpEuNov~yJK;g_lL@L;Ffn?6^`|kOl>8>Eh9L1 z@K@}kpCH9o?~yu*o{?fOyVv^CL?U^&v^f8|cBeDUYX*BizGxPWPtC)f=muA!E4VWX3gFk`Qwq{w!dU%SJ>c#f< z=E0sdOq$ZYb1#GQW$*#YE(wD~R zscJ5wHvIlZ5-%=i4!(RVe?LN6w;a(O^nBdw2p_s`!A(es4h02J^PuD(ve!kQJRIO6 zwT}V7<;;VO^E$(#w~nFl3_%X36n+LuVS7u-r)j}lDyofSFiTCH zd&_c7om=|&U}5TGNblM*ZT$M1QJFiefj2)p^CzHd9ZQ4%oHg2Sl^+=)T6mRe&}6D{ z>xK>sqaQK)fd$BEcbetWt0hDWfo7{9KQ3?9wHS%T`Luk`5aiWw^YhzD9vv_7?vBo* z-%m`^ugsIH(DP#{sRw_9fvh|%i`-APA$h4pRT|L1`5^^$!P;`iZ^P<-HBr^>Tn68? zj;bry>R2mQM-Qu`q39)OOdScB!?Fw}N(suKe}QPz7b9Q>44#^in!3S^WVSNer!;A8 zM(e>V32Ka=W@dZl-9ks^>EJk&ThH4_Cas$`jfS2Zfmr?Z!gFAi7_*iMO9LTExC-ucbp1M^jR6Oz}iGHGkrGYT}MDh zlNqsY?Y>5>gM=&4!OX3`GwJye{!!BF0?_kBwR>qrDSGO z@*z{O#w2a=%?IXxw}nW~ufN-dwvY71oC|*7Y8Gxb=qAu8%O^mdo1Y)grH>if6Z3B@ zkTm+>GWeeduOvh#${?3xCB-a288FM{tKP25mnIf0 zD7HDW#TME1lZ_!iy9`QHqUQN>bR}P20VS(%ewD=MLAqb_{s@r1Sre~9^Ij^R{sP?w zx+S5}YnK8Qk41B!?s4@XP-Vm&n%&k@@qq@mPN5z7R+_7C(L8-25keY|+ z(Ox*{R(35lyBqB8jJmOGB}fqVexCv0nMZW{P=r|R}DQZ?80$+}3HZ{B{`v+YieIF)wb`MAc7_><-;l1q6qKWX4}KQ?x=F z!52JSi#2mhjHymlE*72NE%hdL4DHo-g@vkSZ6@oBc`K<^c?z0`FcuNtY{dj1t5G}D zGC~8d9;?+}KMiW&GCE4FMV(Z{9iahbPhcZ6S8_AA>q=m20}?Pl;Ej&p$nV63;5rXy z{iYd>#vL!O{qbW(n^VfCklgmnn>3ocwe#_)D*i;2oKym5rPT^-ZFto$@3aKoSywEd zVCfJzsH4rZqml7c?s@?f>nLI!0oS>%!JO`DE24E*p(r zd!;t1)|waKO3lDy*q`%$@Ja2%jM3-!X=jSQR(AJJ-YhB{2CiIt!C(gUQ4-DW=s+KA zP7zLYMus+BZU=~^wA?1ULF;CPXlwu&XkNEvRtX6Z>p4_JjVISO$4({HJ;_FNEK1#j zQ6>{n+4ZsR=&gzF!RtY`AbxS{O3Z(Cv+2{nLj`mx8jO-of2-a{-Y4 zT&i-RP@GHye_ZA#a$Z#_^=#k(SmiI%i8qg)2+}I zix3&RO)|EhIQdCgqzPg8W#qgEA-paOwEL&0LAe34E9Q-({FpAb{9Fl?^Qb)o%j|HZ z8(_3Jsy|@lAOwB9{0$n|+4i>@ML!E5d~L{ue{uT?#|~ zh^jlOcJYvRKQ7!JEo8Dhvtakf-p|Q8GgT~{sEXLe!GXQr*pf}S^eaIfll|G$wX=t_ zfn18@zJ5;pSvZ7ZLsU&=8x~}37VLW2i_*K;iKQAVdE<_IVu)448Maq%`Ar;2u@&)- z2lB;zm0km2)hp7QDaqEBdL7s>K~o!kBD+Wn@(+^22gVg!lx}_AEb-1nnAiLH@*4ff zBszJtIF{3o4Mh#)YPmqlE?&`MN$vaPa+h67`pHw_rFIm@V{TLMt(Wf48@PNJa$Bb^*6urfOijJ!P4ca z76dd#${Rj)z`W`DTpIcBz;z*)xZf5J=qKMG;I$g^o<_h=Ky8B1HX?$9MR1Y%s{&SN zu?Ft0wtXXF(CEt?KtGW!QlJdR#HW#NfS65>W~c+bjNhWM5fK6c z6C?g%M73sVJg}F<(ds`c9)GsMR|-%mUnzi^la#SF^_A|a_H`$yp%=-v&$d)7BOI%W zB=$D;R49dw;HROQ0S74f&GwmQd*BO3C+ac_0%VI3=>h3NZw$+HjMRo@)7jZa+}-Gt zaOb5xK=;Gm?hh{5Uof#K5grVogu#d@gedi%!tb8>j+*?w5%G1*y1*~Dd@{&QDP;Ny zl3lOya%1)*4$+5lQvG~&g82F`OG?Bn3nl6CdY;c9w7y6sAg~sd0M!Bs9C@k&jP$sh z#pqhzzKoz5Rcps8K71zABLQ-KUG{stY45sT>r{f#kcD@S_T$s%qPk3_YGOEzh93`; zb)9C}M;4p7n9=z~#7TL7FF{5kL@^K<4FWOAkf|c(50bx<{N5YA!nCok_s0(@iNx5n z+iG6r7MG()*`swY;B<$^`76zK_pfRpQ40-ux4e*8VAFVA(1ynxyqkVBN~j+_L@@;J zn@nE+bQ*8hFc`nGj<>VWxBOF+X{0D)fcM9J_d*Mm(>CRlgI|sgFdQ~TV`Ide8eoc* z_KYlK8+5Q0SP)2mAUbZYEGT z^lihvC`Va|785efY+CJMieO=>*5X&Qxbq!g;~u7M@?Pyn)d^ib8wsf3H$oF2JF#zI zqgU)EAp=#7QO+jajnb=|Xeyk3EG6~eujHG4f|OPmVSG%FyNfZ$1 z$NxTZ4+e|56-UsJ%p7rmj3obiS<(B_loVqF!FLUwD0;m{Ok&AY5ryXB*5T(PanMfu zT7K1^Z^Xx>_BXZ0k?(&!A6))Orx$!;;Nd_udm9ts^x?Q5wp_tm55@2Mou)0;XsO%P zNs43jx)aoH?cLqb-9G8X+wHYX(d9p&8I8tWu>;^|ND%qbZ(W23<`28r08+H4N#AuS z54N(px8=JaYLAumo0CHTP{^{8uc`ZuD@QSyb1Y64RnWWhAN<_=HwysxbWQ#j0-|0n zy|Rh$)=CLzNb@G*EVUFci*0EDz{V9qd2}RcAL}1M)$YC<)|^5={=dpthPj7zESM0F zSm1TC2v~6I3E>&G*^yDv88l4X#{aW~hK}0p%aT7VB92MBiZ!CO!`6xSskaPJI$a+B zS;;XV=!atT_hij$mi6p-JkWHN&u?AF?jm04YNMg0h;r-XH-x0jvTh1EGY`)9AhG+V zb~k*DHUK|iVe(&`0@k;X<2TC@w-cKI<6tN=byvU5B(fprYsJr-)|ip`r+KUB@P+9k zV0M`rpNcqHQx{XKQtDU6cHU~!2sLaKgM~8`(wuFxBBO%gWYaS4!~cVdV*G50&jb<+ z7p6e|1plTRN+hC>-*zK@Qx*r;{uyiv*JfRJr2HuOuZ6fdXWk=V5vlHSmvFu!$T{^< zWWvW?z)%~F<*7l0_2gys2cT#1in?~{>35v#VvK;V1H2uR$|&tzNmGXf*lF2WOU8^R0} zbIi({xyNV9X%ozz)M6W~ zxC3Y^wgqA}H4{j*7EGHMre)|6Ti|{p-W{f3LpR!dspUe-s+rV;-qWJ@ zxq-^@2N|COn4*4}gviifQ*tQNHAr@6TeQQsjPLg9N5%i9y0E98MLKj2tO1W2SKmHZdYB-vZ z#OTXWZ?68@jr682{g>MTx|V5YZKk}s$pPfV)MX5j00^^Z=;1e77N#+JdNzR$^Y@8b4SGyby8gF|0GKz2<{*_ zkxF$eAT@_E&#LExPygq!YE!N|zdD0#P4DozTR(xL@))fNzci_DF$ACi$0z9wfTMYC|bRIgf2S0h1M{c}c=pHeM!p{d{*S`u_Z z&9(Z|Xxfr!$)3PK65}P-vd6P9CZ-_u!b;rrP3D(||aP$erw(F zkn|Uf+WjGKHm|lHmZf#5HNIsR5{a|qLgTQY+6-Q4Gc@d05V@hha+v7VYgonnsLJQP zA2fai4b8@H=Lcb>8!aY+pwKPlQ;G=cg{rp`ki8BzJHCBu*}{-uf91@m zKIeWD-57!iWV_$}l(;8$&$IB%wQx^TOKbF|z6`J76--{l3~G@a^C107xQ9;K=zM7O z^s6uvOD8*;X^M(v4XPM34MDH5HasNvgEa;J1ldt$y04uHQqq~EK2}JSWW(zlFvKEc z-|qBB?gIFAC}i~?bauY}(Xnt@sH6IAej#B%0l~!M!J3Kw9?eNE&WR6;RYBoP%M`oy zo)nA|2e`~hOysl&SfP~={`1%gnhW>Zz}C%|%~m=bjwrRw^mS~eCst_bj>TF#w;W$;K9dZRmqg8nr*<^79N zs?>f>740^E}o z%S9eVtL~)+zGOq*bryIVbZSHXeX2VRkc~aPraizmAvgg;9Q(m2yb7$Car!w8xLoaJ zY=XU93oUV*uugn!H69}W;Q(+DzY3ARejJIbuac4aK~WPdm6p&z%jaGlOEZsCdAn&v zix%uo^rgc^#eHJ>&DFuBLy>jFO81!$NFBA`DrHI|6@mPE9_~0b@u5`B2vLp#g({iS z2Lztq&06IJvM)bLdnO+!kw<3EA|E=ctbp4J7y}c7*`qdVmpKmA#9oxvGEfM*afuEw z6p4PHLBAQyXv1Z}D3)9Gl_pagyZ>S!oYK;m{%FLpd7e;> z-6V3A208Ib9*j_fR}7vYv?+;Nsc}=LXx0n{dxSV|wz&x&z_N1J+rjH<(%vy>DBE`7aOQT_YLAK9v?rWr|5ZC z^HBNBvsw6BXtxZ8gI92uAlly%79L(EuSHU?aoK@2`F-x@Rq9T?&N29(Kaw<%}bDJ7&K6=s#sV=^Kn7t%SEMoP#C=XZy}(skVw$DW}c86MIl2TCyn3!J0D!W zX}B#f0otFM##}GL%L;XAMO0H1OK>EZt{L}t^#40~(yf24LT%NVkE;g@7GiIZWh(Gq zitLJVaNo>lBep!uOLw^fPt~ISem1DF zaGhn9OvL)f>&8-GQQGv_C|Wt+0-a9B$Zp|#&r{uf*^tM_xo1Syt`E2ea{+SgBz;<}=x!)LP8qo;V zl2Ta@W4FfEDWVtiSPGZiETY+-!^GN7Rf^nYw2C909;TGMi+}1nRPk>zQ67Q1MYHZl zu!2Y*D|v4+W$;r?wv>A&!&Ex#?SBQS;e;BElcVTU!6?i|ZV<=9L4wSAgo-j#3Iz6z zFqgMi&#N%hkYdU9SK}p>JPKMBD)OrFHlzeCS)ZUe||xO zb}y!prXD;3O`SR_LP3gKMYRsiV=E#{3)=;Dfs|(#!RR&R*+o|oiebHR!ja+;%a&kv zI`T+Oy~*;o71}DA!ktuaF$q#1w`>}+1op0$#``yL@*egJ*pb=Q$dye*&&Y_c-!$1_ znZCy}Us|U)&IFgSb)(?Y7Eyyd<5fJp6QOmH*gRK@lRF;M*=2zo*Fy^>o8$O6wa|Vc zt=9F-XV!ft>5wl3)@ijqNo82i$UeHb&rBLIuS$ksh^i%Sn^0#e5jspkqEFzzEh$0H zl*@#zHu1T;0CB>uJhJcuYWi&~t^R)})iWCX=OzeA%XR9yZ4p&hDKSHp){rK}D*6r7 zIy8%?gn>UymNI`eCEejH=JQcmv_NB9vdXHF!&R$NN~rsWUbm>|+3M7;ZRjh&+n0@^ z&m6P**@34QDHDFZhF)1frH?14v3{%ih7!uR5sv)(C1CULJc_?nR`4L=y*U4Nl9#H& z4vz81ex^-a7B#!`mpY6?0$2lP=$Q_E?2JPnRx#X~h#De7Zn*y6tve z+d&dvb$xp(38Wlh&>b!mhZdO=w%OYm3X_+&OLW`7-B_n(#*Y@?rlYUBG&JedgZPbT zY(ZFxrg&XSj;}LKK8cc@JUWsS>&dE#xBE7%g?%siB8A&1fR2adHG72w(PyMj*E-eQ z6%szgF{0AI(EVhZWMAoJ=h=kiwaNUR4|xOYeK<5ddK`<%e%8CDy2OQMscf6?+CSI; zE>+sFk7#c zn+C&t9c99na+m=7YcyiAREAI~`hxfU;6~q1(Y=^MuxQMtKFn<5tMGrjrE+jP?#1Va>wfV#itH~bL!42Dfx zYc25YvLD)s-VRbaEn%dGY7D)Hs*|0PoUfaC*H8VmK@zZ47Xo8;FM&%FhSLzWJT#iS z1?Sx|MAT~o!`xB=7u;fKtV2`>KHfSBXtRmx%L=A~Bs1mSF4Dg3fv&zuDJ8U)(tMaD z7NYjqHmyrL4rAHcVagoho-<$)swVi`!o9Ye<=P*{`e#vU?N!jV6_`ADB_SHikQ_$f2k~n~sl9(Zjt$Evke*b>EBgeZ+CWaehVHwq$7}XL*J49|? zrPHvdd!a0?YGH;@E%>0Vgaog8=#n&^ssH4Vum37fmMK0TnWKhI)Dx1dq3&pF$|}IS z^lWX7wz~8W6qc%oO#8`>{a_yWy0g{Rr9{j8Yok9lLr$|MM(6$}>K@BA;1Mu%pG{(! zugU{^Bxvd92cFP8R-QE)Ele5%nfdsHxc+vl;@R!lT zU$WNb&4R%=-=^Fyd9#eUOW1fARXAo$;izcg?T<|6^uo--M;<98Y8+>Bi@aICcvPkH zEzUaIxDUqrS>dE;;hj@$Rhu$3dI@0|$c{Vjo_c5DojTaJS3~!qsGOKL>#5AgX3l(~ za2~DUo&Cd@-y#!%P)2qiyNw7Z2}~uQ2@e?Dd?xyl=u--=6itg4WYOA>rKBFD0;v2h zLw57Mflf%?;;!30CC7#j6IX3egzjTA(oCvy~VzX2T#w z<>pT*O3O&ZaQUX)Qg9*c_|L;OL@#DE zV5j2gc1H@;$1^NWa7Jm!VI(hE;3LzcNV|$0V%H}zPMW%r>mVZso*u_Bo z28KiE-y9TYdiJZem$1rKayg{^?}}ucXGv$ql_;B&{0a>=RzknkMPjj-xT9LFRVce& ztySyF74tOKEvk?E(DJnVwFW*23Zf^qr%;bK*`3avz~2)uqK6wgK%3}^><4FE5B^(g zmV{RH zm^GdKb~U9NNBs^P_odmk(L6sr;1`<% zuA5}jzH*NVqLKYI*_Y6q!)n*O!r}o91)w1z)R=bZE*8wo@`}KP)Kh<(Y*OyL82uxN z$&pF0r{w<=_A1re@&kwt3N(n0z6gx{L<41V?|K&GSRg**c%}B6=9(h=*$vkKgUcpzV#LPu-0Kp zOBjfKHThUh7z~krDRZlmLV@A+rF;bJ_?m>~b{1P-fozcGqn76|yEi>K!B6mLu~|a{ z5G!T~Wi8`PW)KCNT0;ZGkpwwJN7{W&xF9uB;jnbL*2yM*4oeh@OZBj&GO+>#P=taM zw~AD!k(4*Gt0m5db{+NLZ(+1}FVH|z3N%{_n>8OtM!F`3v|Af~HF8Gy(g;_MU&w8D z@9-y)k?Zh8;W*H*SuN!2J!jIsB3!kSPT+&*s8;z)v4dQiNa;t5(gBRo=u zVRPQscPPU3T4VN<&p{QHzs595f8UQe2-mm|K_koM);d%s?22m!KaIYXEfMi$Cno=D zk$n^KvwrsoGOWz1(cx5otHz3L27uRAgcj9me z%7jF(BFK=p%>4!rD=hUCle>~Ko#Dpdg5J)>wzLG=@K2zr`yR(((PGyxk#yn5`}-lV zl2h6+td%z_nZYnWHFo(_Zn})l098gbw2Rbh1OGDt73r+)((RMU+QnWXBVDFJY@(&@ zV8T}^dfM)-ieJN4xr z7Cxw#(XXo*X%N`+J`(o8fjvJj((UXG?9UwkhXwWoZb41Bz%7_qA&ZU39Mn5pY>L#; z--ozyB^MBy55o!e11Qo2|O_bd=S62l-+Eee24QY|kC zF!sxDr^EWm7AMt+s;2Qw1}BkCDIr0mQ%X`az}Y6Q!+dR65`4`$*)WVIO=Vpb139@X zy1|FbU^O?*Y#oW1prIzzxGr*Kc%kGW;Yk4o6|R)RV4@EgTqa?9#?TR&_b|sI&rC%N z(Grrd$&!lTik*}T5#k?|>#<$*AfAIyBfxLn0r`GiX2>0I*oJ1~D{e)X9RhEj_9{cu zbVa^9%+`|DliiKrNov>UEMqzIBt@DJLgS1jeFa-A;@N6VPK$pd%4%<6F5#_`;_sBh z4N0vE`U|sYsH^R$?S@yFWm1;VZ_q0^Fv=UPro?d|lbJ8k%B~IjLwmMz)G5+>zl-bs zR`-cfbl;bo)H25B&qAOIcmSXrRftKgC(;Kx!@ zj{sVZN96X{x0ku-^V4)l=7rKhqOw@YRLC~9neugfI{;FFtd_7}vIkZ5xmm9kc zVhHZ^0txQ(gEslmDO(yQSto7HlGlM-JA8{@ph&973xV3obrU#Ao_m$;og6}meFZdU zT4^g|t308;Leb3xVey*0KKCx5As)!bY2PO_d23AHrv>n)k+;>9Mfb#VX=zz)gnD#t zrt_hyg{wO=#)A4A8{qYVkpY&n>n95P$3YrDE0w-O^jRZQf^b%#Kt}|%;J|O>KYnVY zFfb(R7GLnF4TA zLBU*-cSti&O7?!C(%M**PFxs0ozgF8sNFT3^-$LJW7aWrO%$=4YXc3$ZrEUIHWNgk zJA7PH@{*yI3MRxLrRFSO27t9_Ke!4dL%w9gmG%}uTN^>b9%&}Sty0Tv3jheu1aBG* z78vl#;*dfO+eVa{EExSD$rS+UI@#f2sm9tmrO6y@OxN1lQokLzu!Cg+cIM|CiG^iK z{)V{k88GO=ra_<+3)i!>In_oKsVga&ZRDddP*50F6y7mI2-AOgR{6XbJ#Pl(e)2c2KqoSmeqEmEVE5;r z6A?E;G(WjuG$aePfb=@$`8;5SdYL1wwG@R8*9-=M$=R836MRGP>WQx@^B=(TGODHX!{uB#ttiNy|t(8xuH4)_yM2pK5ui#*2 zKngb2;sI+^b{UKbunjfHyse)S73tD0KZFhL?h0JaI1VbkC$XBbXfA;YT3cSe?Ia$y z;JiHk5?(oyPNOg({`^t0ty@XW2MVDH7v>H+$EX2+GfKTCGaI#8S((H+eo z&gj!-Z$pSa3YTO}R6IqsjtpfHlSo`Kg1%K|X9V5Daj0O&%d*!mK`tMbMYa}}4q~0U zrz&vvtkMC=L>bI+%CVz)ySSW{cEHUn8v{&k_dbs>=ic19>UxZw2TrCwjV^VYuEBS$ z1}%bM*{f)^9?{{l;S^tA8RzwgGR?3jJJ1zX>GXo2dzZbTAKBrfZWVZcqz#T0`MR6> z0lan)s^>gScGmT|ye@o$VQOCP(n^z5#{NL;ell-E!F%i{ z$I+yOng0lfi?5PO@v4aNsw$es9{7jrm1shY7((bDUn3RP*Dv9)1;=X`vpX)SHx8fh zt#7hoHy}tt!#<=xDGkwL*d$Hb1sjF{o^$NAI6}1CoCmA8^JqW#%Ys67RJ@S}5W!|? zgTtL>S%}zb=pV!UG!+XRP*&<7knFANvIwMfUDS;$!^&==A2#Tk5C%mvXoj|!3#Pd( z4abHRS|2oQ>CN_mEJ*dC(7lX<>_k_y^o+emH(gEF?MU}u$J!XF{)`GjX`6x6W!V+Zwe=dHLQ6D5s5a8=$zLo5evIye5cMk zo%4VQ#(6&dEJJe0#<0A=nt=`~5_~0tJkbdmrXR>F|AA zR`U@Y9eD)aDcOd9Jv2u+9nMTB6@ysCbs#!AJDD5U-w%PN!2Z4-)@$h|e4=(;G^2VDQ(DRm^g5+qPzItrTId zmtiJ7VOq+;M&kJI5s7ml;p=v2{GUg*oY;zD*^}WPgGztgWZo3GRR7-)DzidiX1Py% z8+j?|(Tar^PcOGbx;&)Y*RGZJENiv@7!@H6J%MnhdfpzplfL@?L`T1ZV=SFT^3F2C zNYGB7(zQ_n_LZjtH4=em=)Sh#fY+h7jYT<@y8Kb{oZzZ<(o5b<^o+45D()r&pWrno67rrX$E$kmV`^DNYvtgBcn z(nW-plQs8QGNX@1kjl9S+goB_;9*Xas^Ncf2h^UrgSS^%S<`++Y$V^L6(3ZyoI4FL zc!<2Qf#GCF@B7;(%ysthnc%}=>4|L^407{CetsH*AAc#$9CaB=#%XUpjdc>P-2}*{ zUrhg=YzLanVfCTZ$z|6PKq`6AIzoqY%Xn~ zPl*MnR4Dng+Beq6P<=^U*Tn;=$9Hl{?4 zX~CTcn}%T(Vk9&}{9yBG?l#1;-tUfLc`n?2%($VH$44kP;5k3jCBV&ZwlBppTPnKcooH zjSNV@0^|FeOs;WDo<%R^56?VyeVT4PmE$D(7*)-bCB6-Tu0 zGAK1^{g&}aG_zIAYGHa)X@hR4$F8xfEVpRhnZ09{&!G|#s5lfryU|=|PDKbbgH4PoS} zu59NGnPRnon_6PmuU-p~s3kes1jfX`*|+bes4&2nM4geI5(-CWFVZKjU!*bHJtD z$z#xDx=EY&HpoQ9acRPL2GAG0YG8LyClr!&eoK@OX936)jhi7c%RGhn2BfjoO)TlXeMWEu?jeMv$8D!Z7R7d{h zeC!>dmx_Z8gkbp!5(a^33q_y^O2QnB1UoHkRvmC*;jum&;vhnnw1q2C zW3U&?;8^VqU`4{JM_rc9y4ecJg_?6eoomGDGTK@r#VHl6n^;bTi6)*Z*-^^?4_--N*qfI*$;;>jq-s)iqg_|tr7grYRQKV>2MZsuQBEqX4NlGKb^+bw6o>>%Cl}G?jKo zfNO^ijbjsJE*J-{CGd#9VQj-_s99Vuq-|oxX`ATM>vT!PO$7hbimlkCTCqz-BNEJ( zV zY9T>i|DJ$38N-c$%QJK-;@U{;$;6fev7LoWiU9*&Y{GM?!`mzG*~4$+jT!Mhhr8NZ zqN%oz$K1$;a~u$DAEPk_h8t|r)VXeB022K7%d{mQI+kJAOKEY;6yk$N0|nc9;4O^H z7&Ri-VvyKV5Gvq~{n2NMaLeBr0Se05mEKlkcLX*XtandqrMt1f%$8y<-{f<2Qaf^s`^FIp(o_X6u`Yepr6Kh(Ht3}VK;;p%Q3)o%S|I=Kq?Iv;-t=b@)pofIm)2g?C?9bgOPo42Nuik ze1`&mSj+_c?LzdCRX4#d8I>6Lb=}bG)3bk%;CNoJ)DG5dG`{kgGL}-6jq4`lYSj;S zpT-yxlyzxqQSp-0cbS6)O6Kz;I9QtOxflO71yht1!25y8GG(ga4v{ejB0wtGqb&r* zgWtHTXPg;4jEfV)*ay85M^q!{G~oh1_R}B|LB8!#W#{MLF$4HZpoz;zMBjl{QYnZO zT-6|&M+TyK4`(%{&>n6y4sJpr|CE@n#``I}eWi&b+(rzQB4b%C*KGZhy2qC5TN$#1cG zPItgX2k`6dzE>ATk@3qInrlPLe(5saB6WI8Qu{Icgq8}~9jsQ!xdG>>P?E<$G-TIe zBh|ae@XTBOB*Peqimh(lA*-^5=?DeV$nhhtmW^gYyt0APRs7-ZW%qJZp>A`XaM0KhzkABsPda;Sk2T&OE$1gm(EaY(3+;I`ssu zLK@-jJi_gKj8(vXP;6qfVw=ngG-Mg;261+qt2Cy0W1pc+hTwAUN&|68_qtxy-cc{X zOJ%S~=Btk|5P{}$w!yiF*jm}~D(Ko3@LX&8>3hmRb|>QFgZTpIrNxq zC$cHfcGF-|=TBQC1TR5`uJWNxuJwtIi_F_6Ymb6s%eB;yedYYP@HnmHEPi{km>{+U zOavKvNwE$3ivYr-IxjMA->io9a(0t-h?O$6T*6NC!t?k=tUgt4gAHOGnx%2tiN;h-ZzP_H zh*5{`IDPuPH2kn-z4CxkAw}minOw(dQI8EQ%=`!wEwRPm*-NKZ!zAFDzLY*2_d=v| zr?P^dJz6*&s)gvQXc+s|5i$ulk`Ul$PaVKX)hQN`yrUiPXcF?0A5IP&*KTCwRWPQI zCFMcA=0fEmWhzu2yX#Ukf&J=8Ct)m-bNr-=H%3ognzA~`A|MCRZLqZB=m1mVatzMc zmPo$PVIJh*LSu%UYBLh+lPGET4(GA}vV&%IyFCy7stx@F$^LV_a%;VdUKn{N9Peo3 zAAnQ~#=nd=VIAMM;a|$B4US&bA&Y;qBlb&dL}j~oA{XveW?vc^zCpDRXE=V0Eh$KpD$WtS75VRr`nE8qPQn;~g-3Tv&NivPA-ZTB_-@cD)kO@6|Ei>>`k)BB2+m3!-C_t<<0sbD-ezOwARV>P0_+SU$Vs@JTdB9w2scz1?U5CynDZB)|Fa)ZxrzNsdIbqS0m6*kh1@E zA9mA6@SutS(ho-lQ!NFJVkiIe?~$1PbxkbWA)74)Kg#vYY?LFDO zj1z#ty3_MCPWyQoKLMay5&ynvfYuHhjX`667c6QW_=K{x1&PV2zLcZ5fZ(t0(j%Lb zC-7d;tTA{zl(n+Nm~v&wyHcn>Qxe}KhhxR`K|6w;#$X{qPY3WUK-lFD14wZ%70nX0 z{=;wozw+Ay%=;-?S`K0+9~{+UH)-M@kj~9a}}8_5Fe2^i(R5ZWVE`;Tmf= zru-15!-r$_xE@pD#0Rh{*;&~8nDRq3r!eWDxn?g8qz*;KQZRBNI~KIYICXI#4$S1? zv0K~89I3I->(oBA6C?Ji3JQ>bMHIYXn)1OXWgz3o#T*Gv`!ATjb6k`imDE* zUJNvp_$%A}jY>2g^q?jUo@i6Rg513Tlir`Hb=Ud|YY|;r_|NKwX^`p$68(SFP36+P zXwwV|QrJ&n?yJ)V^}{?8Sld_xE6&)fpMMMwu!N;}01Ex{cz~&s;sM6=&*K5>#(2QG z`DgLK{@wgjc))05JYcke2ZrXiOWY*kf;xnZK=$duD+#*OjF--6AKXkq#zx+v8!5~CsS3{ch6DfcqT%|^^cRoIK!)Kz1wJJjyaV_C;LCO(fo=D{> z*~o})NmfENb-jH`)zsCJY&fV$sza2}IL$c@B2#9_yAO+)csIOT97L!^Oqnjue;5d? zbE40=b}V$RB>uy=f$6?M`~MfTBYMS3xRhoejYt+88c!1!4;V|ic=mUvH1R%wyp(Hd zFINen%88O#M=6i!0l~um@8Xx}#TU0RXujHwo^8v~IwfOLH+u4UQ~vLJqo+COWQYGV zZ}jv%vADR5RFOabepFc$@5ar5*p2u$*fCfr9Suh`lby+rlNm8!9_#DE@>zc{nbTbU zU1asuIQ)?exHX7?`9N-bpOjW-mzmY)!Mjv7%XB?3sC?rL~*guJ!lrM2_abklg=18PCFVnbd3nYp+Y#~!7B+Qe@OiI#BhMkr;42x)gD5C6Gs{a8GviS|roCzYKk8YM-6K;G-y*)AiG>^cFOuI9NSM5sx< zve_yM^R=A&5b}8n!{O#lqHfa)m`mK4!5bheS@f3c3xq_F;{4!h6M7;g02L^`+6d#@ zM|7$zz9$tl;RLoPi(Iv_+UV=*Rchxu|Gl|wl~tabz<&% z*}^H$JNy+G&%sY>@n8j^Wo&HR^}$PHMykAh5U^Qen{5O7ZO+~foa!btMV9?GSIp-h z82f5DdSRGY#8Uv#O|VVp8^q{u>Gly{F2JQ4_%A@VJ5-o7)#OmQtAY*32kf>c%?Uek zE(P4Q@YG+UjiZniXEsu`p%I$1hJ!BX3@Xww*X;*)&WON-KFW50IqYG7lj1-awM0$* z(6*krr5zMY7m>B1-YPe|g1b1&3+~O2Of1f-3kJt%jKpqw-gC2nRW@;7oVYaMd|v!=*{oy1Uvz zh?%*h;%mJWw$8slCM{N2Z3cW1Z=9qjuo z(D$#1&TKg7uh@#f@3Md+fq~y8rNW<-3)|cA^bfWJkdCJZTQN<((x^Mk^cBZcbHV2w z?Sl=}#@oX6aKV;Olg~mnUUs&EeKzm3TM*(>BYf5gaOyHl$V!Boa5Ixxj4uVWMoX|z z9e9aBf3!zeElyK+PC@Jq!ep=325$OtmQn6Jfn@1#K%Lmos{lvntQB3OuznDp+F~kB z9v6KaA;!09DZPrF^5_eftK#y`yh0}0B`2$Qnfj@C2o8B{BXEw^Wwh>oO~2_x6B%y) z4axHsvm)g-6Py;i51VM304;xN=2 zW*WfE%=pB+@7pIZpQlfEJsTncdBpyjI0u?Nngq&D1u(CGEto8HX4eQd`D*G4Ej(oX z_1U9|!{vUAnu(H{J$tVG(m<|9V`X%tt4s@W=tZ!U=>zd^}k(@Dc>U z$V@l{av?DTvDwJrP2%|Cxsliwqz1tfXHbS!hbB_HeGLoC+KAnZ*z9+slDXtgD#l28evemqdm&F=lI7?xRej)R`Hf6jQ9)0ht7p5 z)i9EMquN8iP39^Pe;vFKc%uV`2vExBZ^aX)yLS{z@(}(t2|}k9TrIX}Q&s@F0gbEL z-UGqenVsl*GbpY9AWj`3;FF3( zx9JdpE|_E`=Mce^n7-8|)r+~u8W*T(b}0k96-}-GX4NN#XL}{ohqY}#M7p!D&S#ca z3qf|sLw7MAI5#LnOUoo!!~k|0FX(@OoM_6?gIBUN@A*l=YPGEYoO07o+9_UR$FPYs z`{lyB?7{2Kew)C5XLH>sxC^Cc7^vCx;C7T9eQi?8qF#cG)W;^<*hjF}=l3y^3O~lt zrbdawqj9DPVSbu^-4IiLQzhVciagC-T)7j(Y;(G6&oGRv1`Agt9|Y910CA(l^W)T=>%<73ptCQCY=|!fwhJ|WN1(pld+ui$9 zdOKqq$#4FczlXCEnt@^ z_V{4v6~6?`L=-x^nFC?`RJ}>*@Te<*+d?9D2iKc?rVcjugKETJQ0&uAFRFCn*6!f3 zV|Pm5w}Su4pAA-W^)!HpO%$LSM0MdCqW?SNFM%D)?6b;c(r4_m;^lW8g)+{r5`01@ z?ua`cU>J!-(pt`1!aV;HwhTQ`#v5NQrqr%u1wgfykt*(Hw!y2@_#f|~%FqqGeX@%& z41ShoE;tL!b`$S!nV?TVclGH^A*%8N9Wg%iF^^8Pd~NtJW$8lznUg zwbWGZ_3c%w*qjWRLsfP}8f?{1T=FWli0P)*Ay;>&)<;!5@(|C5mR(D&!}9a_lxZ${ zFWaB4mZoGw2y=34-i?8v(d(`bI-Pj2FY3A(HrY3#T-)(mK29WgT{fuj(=w88855 z`y8%^l`d@s$?wR4m1>@cbrTo#hdURKggMqpM#Ql%#5#&m%(Cl9mS`sY*&^^V(}!tP zIehCS^Z$M619@{_Y-FdbaR_}Ey^A>Y z*yPvft$JEiopRwRn3jmFw`*t;6Spb((+D%~Nby+<8`o#&byD)~mueZq?D>?w@ErbE z!H@jxQt7NU@Nhhn2^4*CBLzkr4~WsqIIqJ_X9`SW(D7gzm%nMXs$ZoAg5JHCeD@WB zh^SNqaf{+V0;1ls7u-YvyT7l+TE_2AI15cgvY9VBP)mD1{8Y1G>_5x@=c*;}V5N<$ z3a^>i)Ds&%-$P8=w7WlYwK47=q*#W$d11K)fGIo4|#1049ij$=fwEQ1r~ zqV9#pc7un-U5RWuYiUblB2r2*(?13ySr%BZ}VhFSvzBggXP6>Qv>6Lbf;fw4}m z3U`U55MLgEAUUPH{_fE%UeksE4Gad}Co+SpB_r(6Od=v%yk#Zz6NeuH)ovr0I&?K~ zX3d8SBHynkdtk{lkoPA(3*rW@xD{aSj+XHFi>Rav8RT^X1MmlLV#$oHvfeWg0M5k_ zv>C-W(dy1Bbya?MFb2-^ZWKk~iZn>(vKK=EU|!7_#y&|`m&kH3j&Rv8B8=0_+JEqK z#xUt6wN8I6#Re`@D`iW~Tl2UY=f(Aj8g9g9-0#b(`m$&yoI7Xa>RU2z;rA+iX5i`f z!Q$yJvL5@VrAWTPZN#@QMIILy&KbGtmq2m)a|ohgZ9gaF4XJjQ*p0;_=N$jb%wMYL z`INbo6~@1DUT3{ZaGY*OF%OY+nRA)YKXOj@ThzeCJ0Qq&uc%q^%R?A`#@JsIXTkhtE=WIjM=tVNGC^VTU^&0fBs(h! zME_^ISALEzocpG(@K|_nfA5B~KKoLsX?&z-v~@|{GB_kD;6K+5JgLLJ|BfCO?|)V_ zEB0I1Iwq-*E;gusABxrw?u}r_9T@G}gSnNE#7^7-M(RWi+>~Gxm!(K;o`AIXH}J;I z(fEN+rs()fqLn=|A0kbH$^5|PWyB9mH_JOi@u=?QO@C*KXb&$CfB=r!^5>D!K+B z!$m2Ofz*!Ja)GWD!&b3FT-vWzVdbiNZ-~ zI@VJIYR+>Rlh-e`GKjZJ@x8GI%rD@&TG8mBy_1|tIk1mWA9(_hgF0BW)=;jci*0;+ z7;Q>8kKaH;Be;=DJcWx)?$bstYQiY`p8AT3d$Cay9$Uz*rPm$&sP|MmfLrxK-5Y)I zuG&N{AHRv&Ae*Dy*YP>?9eQ+nu8uw-}}2! zT=ePoAXKRcMCkLB+CoEx5pM=RBv(pfnTfTRl#6utwH0J-y||o@yqMikhHm4&wLoTa z;%&70?0J}byJ*I~Ug#@F@771#EAcDy2^QAPn!YHhmY>01majzJT$;c(cIh%;cMo}Q z24z$|YY3$|^ne*GkdCEOjkr;v{u>GS3DH5+}ctUt-}*>DqJOT~MI5 z7#opHra))Wg>#2zQ28AEAmN!EX-ht@7E4w}m&OD|hIS0IA4OEuoVJ_^EvHW9n0v|S zD^tG`b0hc~-LBD9ltJzDiB;KTTswwrA;bSc#uh#oE(@G19D>8>mG)DLzS z%KKj+)!oYCd|2h&2}!$c?gVq3>jOE7ldSzFJa~7&NF6yeiSYFj1jO zQG_oUAy}v9n*8dk5y!{b6*A#Md;GrkY2cmXccfc8H*mYFaQ zF2FlY!_u%bhG@R%;sv-ga(Ek@@-~o`T~uMgvB==AM15)v^j&|W%U;LbB^V)qkUKK-?kSg>= z|HHgrpLr7h)sHw<<5EZ9xf)kJ@3Z5$|vEh=q~o!_ZXM5V)>) zb%vARoWO5Z}U^seo`AAZ%U9?bQE|DpTWr@Qx4hrAo> zjl@b^yd4@R2p{rw3vkZW6)b>EM;r~YRu5;!zji}MBu~i=j^Y|CxtBjY%QxFO0(yrG+cVCVw-Z0l*)$TS*PFb(M z@E2tak(7OI*u+={-Pd0#*mqt2-&b@QY?nv0Ua!mfdZ$e%&DXKw z9845QA8v@b5LN#jeY@wvy`JMCd?ONi zrXDcX*~l1Q&ruY*Sw?d_=&>4yz6%e~f4i!d3&~;n50J09h!_0PP5lK@#LD}z_w_jo zCxb$D_jVoFUuiI13Vw1M3vGs}e*nZAo`&FuXZw3l%%oYRA9V(g&I8DDvKm6)IG;sX zqdZb*LjAOOC4Sh&kP>+0bO5TyqwYe4GBJcVW$#>Y7Q-@YyvEEY!X^H*IDh@cxd$O5 zAiptKBv^73EYbsJ-YYunZa7M}ef1DCH%5kishu2)3@Z-@FIu=1Z#8T}&@?1(b5|#% zZV&mKHp#?r(VJgk9-M@p-crjJ=T|73#deQ(1tt2{r_1UN8&-|z&Iyg!gv}Jz*9`p% zrEaoa?lySBM0@vyX2eUj2_Em=g;}KSgUZY915Dx@^ym`3@=DfZ<>GugjFME)(=lMdR(ZYGeyPn>04!gs0|()$Mt ztgg#yU9sGS>Eybs(zc^Mi|HbYGvVt(GpF#b516`l^4Yz5^13O^;IAB=35EXSy17p> zq>=i~(ihxITCDHb9WGek6_*UO`D+XTbrlSg%$CSL2yW=j$4sFy{ICyGz%*itE6Me7 z#U4ghD6&)q+$lk&b-C1P#Y*c&MXyWo z)<&$>QlYKIErNS+r%I^T;!>sRMO&=mPEkv*L~x-3itI)(5E4T2Jmg89`Mus}o{)gS zN^j}+dVkFypJ(!!&&-@TbLN~gXU?2~_Sv%~O5XkGhMYCSVq@}yt5(GF7BUTBk@igg zA1-0xEBl_Tt&%W#W`}xD0^vipx%~WM)vW@P--|8@jU$q`Io?60hxshlfO5i^|cgNi%6(br})6?`cB)WJvuzoF^| zZX1v})E#TaY5m{?BS%MG)3{6n2cLUj8UkwRV-U~`b??~B`7%4$C9Kvg9;W2$e}R>T zfPToGj~df;TPxkQsY}b6(E16D10DR!-~?h-Abw;J*qO!9JNn7@<{lH82?NB|HJau2 z0kSONPnZ-0U^R_j!!$#|_uyZ889(W9u@SPdV$^_u5wx)c2V=CSeXbq%ka{2dST-}v z7LwmrQz1yJ783ks76CeHrJHbdm1Um^DiUfRF~pzyd(P1Xzw(B`>rCc#Ev-?+NAV5Mk_L-D}M@ zbt?GqPswd0I4ueqZpQ{Sf`;?MW~M5%u6LfDhDNT9>6zwE)h_X==9ChmtzLFB(d5;t6Y5^m|NGIT$CXJfaYmM*yIz$Sk3_qPoC1;f2_qLm5oa^&+zBf7K61nv zvA@l~sRhMDv%w?oC*FO?nH$!HqN+!%$}t>9K?PQNJMqmt9KuhpJF(~>Eq)aw)@=WDF2{qR~oLXkJt zk&@uZ95fh`UwtkL(GRZRS}{K@I*VdPBejK9Y+Rg8{~8d|c8ofPZL-1w)})K9iWI60Nl$#8+ww zk~o(D{>j&K$hH})5bM5jg&fdVV^R)h4!5v^v3nL*eyE4ndXVIOEU5zR-v1Nd3MCD`Nq(pUg&!Uyc@c}hu15NZ<5)=e zUScTh8<)lINj9-8&^?*(Yb^}z!N0Vhg4a`{?hP^@Ll=Q=T+9S&3<(f!1IW4v3w!1? zOlS7sUo30j$0-$F`X(iPl8vk6>rujP=G%#s&%cOD+^=5D!H(W6ph7mFsZdMfHr8R@ zq&KD^=k&%jV}o@!{?fY={6{1Z3xdc2zsdU;l>-=J6)69@2Jp5 zd&8tQ7|Jl78bZ~y`)z!&e$Y_5AAe69lZjPlhktii1nR^9x2}Zq=j3RaXD6p_2y4G^ zP?Yr~NYYwT*(6yX#%#~Mka6<08Y~mE)eK&&V6%76K~9mAj16`dAKg#pu>D12y~RCtY>z6Yw@$u=4yzM)l4j;zI}%nL%&}JEMvDcyLhR ziO>sm`WK{x6X{|s`4TUYO3G-*jejXqFR86rG=mDMXzIr+(q&-6q8QUsUwTO&cEZByYY9QCi_l2 zHT~_Ay8zJut!36oRdF8^zTJOE9Ms!wF1-bvZ4dXex!li`v2?WXua%Jb4v!r|a9bP- zki0_7(EJ>$RsSkVN-vr>@~tCir~_A=D6Ti^%!kOln>9Kk+i4(z&1;_|7pil)XJsl|5+IilfLw$?!A^%k-3?D|v~ObLk-Ni2K`Qy+ zu;XYZ!wMHco2D%n&}bRnU&)-wJ36~w!*8~dU8`;6ni@daxbISWFsmE1UGs1| z-THLB{3AC?$BC)BT4b#2REQnOuU4|}Fv;j4i%9mNKG*kzzCc$XO{i1Hiy03QyG?*1 ziEE2BIrQ^lO)i#pfUO9fiif;>m=8s44Lo66o;$SFvUMD+_`7aP z3bLRO;OVxWz{N3%!Megs9Sw(egLGJ0`)xQ`xDKnCTdn{$%FkYtpu(c7p}Hc@W%92M z*C~@cK2#CS5_OVlI7E6@$=Dn?S_L@DRTgxNs8tIE#irP`S||LclkNnzkFOplAyx~w z=a2^|+uBErxL8%{C`#&+@@c3Yxyq7@rI{3b9ko#?X#28*grgm;9;KGaCw!PLVuh)O zDjzGKCZ%K~Ra!&Vq%{s0^bnwaO4&~*G1GRiq0k9+hheggSr_Rn9q(B(Hu@sf$-0ng zG?2OEmsJtW$K}E1eZ9(N$;gJAASF&PRAp7dq4Xsmfhv30zhv-HHq}}I6@}qjCHg2- z%$IcM1?x^yDw{kI`3Sb4FT=lpfNH)#8jaga2cKMzJQT^zNhN@2(bh4+@1Gi*J=3-rFu zrEY=>0E~*y2D-Hx0DJJSp&cPO!9KNGtTG~;5X7v_CkOfLqV7Z-(LZSu%Yf?4{*s^HZQ6Nxf z571AwBgBIwFEmr4H02v5PjVzr5?Y~0M8Dp%x9Z%Wt)!&XJ9xVHXk%oxx@xy^j0Zcu zx?7uPcVKoI2sjSwsyxdyKVU4W0gRnL=z6jvaHi0vwQg`kaVTdI{{(s_x?mX&GrsD2 zOY_hrRU!6PN;6+4YW%iwl3N(#G(do6YB(?0>2g$#cco2@3)~ zDodu=)BdMbLg&#j5ii^RbXMdFW^B-m^&~357!RR}#Y#Y2`a>&Xg{elU`D_zZWH=2t zZsQuBT*uKGnzEx*(sgWTQWEs|695@|`8?ulCFg=zws*G=-Xc2aBt``lkC<`PDU%GE(#lyha2!>>voebv^ zh~lP{z!t8%JedE-Td>Al#a4tBh^eT=UfBQnq*c_33(ytVfVu*YFs3qLCx#+9kY*^1 z=@(-t)7mhU`>i-QJR_DdXL#F;+LF%rUJ@jGG zst#ME=TR}(ws|B1m}axvs7$s8uQ;kLvzzb2><(L$EyM!Lv+=aUSa$S)7q%^vgCPTg z=Yuf2MRm{#$a4rUQq!gY3N#fH#;hYw7MUHUw~?ND99n5J_d>VyIfIj) zv<#VJpFvr@reR`f%NY17%^0TrJ&d7@KyV8ZSxloHJZW24O4}P;HQHfXv$|2>?GLr4 zE1b=2D-a8|2mcbBJ|{jwd12b_h)T|?#wRrG7h-+4OXk7m%e)lrLjg~&R zVUrV(rZ9qN*+fQ(q6DBC$^~x3+G42n$iDVkduiDdg(^PJDOhl2Q3xU4-dHSPR-J5% zT|n4bQ?Ov=?F#+S`Otw!p}Ek3vtir|IHhwk6Sb|(wWXp?1JQ@=bi5-AtxDJl#Gnxv zN>pt?$%LIyLNh@z3e~~Qb^&>N90tf2B(MJ*jHJi49Z_oNXiG!VQPj~L`n4ks;c!!y zP$(?hoY-y>w|^P!b#$$xcychhx9(3+u?*i9HY@C1Y!TT_2D6*8`v{9mW?@p1)b$_8 zJh-j|Hn^r-qI{N;v$R3vP8079$-R|aE3P2ft%$g)1W9m3`s`UN6qZGM5)%BhKp~nl zC_>ECxmshJO`Z({b#SC@+wwzifZe(j?DhBLJfO)kNLigxvD^R=d~fOfy^ZgkHkB3l zX||^|>k^hsA-Ps7B88Oon`O$`zha>(Iqg#zWtYY^Q6U2)ZHGe1u+xA5`@#HKY|3~y z=aL)w%nnCnsir0##9pUUI%DoKrTz;;hASA4lENU#Ch16a5YhX zI+e05syVSy)YBzQJtdiR#Q1aH)MmdZIZaxwtCBqKMaj_`!0kPCA|%q4`$LUHHnQuY zb}qRQNaarTF-siR^;Q;N#7+kfv_mPZst~WtgA_J(;I?T8`X9TC}oize4D*iWxG60 zi3cZ<8u(*UBUE7efBRVE*h-<5D|VS> z8;@hjW!wB);rsp*)1N+;LhpYcoh5{8u+{qc3c ze9xRUrHM!_GIc|yX{j6GC%jId28%82%pR;NkG+>5$GkNU)|ZP`>U!_CMSNm00oQz- zh3b{UTEnG$7p)zLHgL-ee0cc3sfnD+rcqn=s@GwHS?HP>irAMkKrGdX?jq4yn4>ijJ+t*RgT~BUUJ~I&HY~e&#&l5W0bbS!n-Nwu>Xh$vzRLzh->O_3t(jYQDHi z``~A4EO?N-81Wp}Q8zb`i7m((0r6aQC-yLk9Bn_X4!=5$9BJGA(FOLe480C^BD$h!F(wCvi8DSqsT&ZHu7JcL7H}+Go(jw*X3<0oVEA9 z6wa*wHy#ITy_3Zp$HMX--&HT=Akjui%s*RWXTk~)ME0#3V)9_fHWH4gfR)dz3&m4_ zP3!BZoz9AGUPWD6Z@D>GDt5EAk!p&~ zargZ0wdVar6${niTdXQsmr`AEyA9@OBDU?`SQ7)gg~y|5D1#d-if|_`=r#Qkg!Tnh zD2?uv3%&)|!DxzBO({NA z?ogZoK>utcM@A#;ATCZ85!tihuNqf3uBNWFwC*?6Fw?fyL-cDBr;=4Ihu?Qc=OfAb zk6^_hPS!^T)Ow~b_3b|f3O)K7>aSn-5y@{(BDqYb?wd=fZZ${qxt2lhsLL>V@WcFL zulR(%yjI+yL5~`Xjl9AZvy1%c7Dm3)Ris}3cT#=F(ZpGA;!BqE6@?>>f4Ck5`VDK} zht{XO_46Pg{g(4z;Je88kD`%*2$X)Z!WhpTC==_gFQVzx&eTTm*3lAA+Uj;4@53z2 zugg0PQGALfrel=&$zf=G^5eD8$9KE;`*VPw6jBEEK3H}&8Lu-Xo03-37IBA9lRMqzh7=P7DrN6@ah3Pv7=)4L8Q z;!x)@o&*>-_)u8Uv5ovYhpm6t@q~5O-zPy=^0|>n;!mK*Z4Z5y53~>NFFR;3PMOCN zpTH-kzz#AYMc*K{h;s%NR7X>SHvGSfEXb{4*gK(2A0?d~bU}hwUh3g95 z=tJ!tC214V!g89&Asp}6ix2wZ+3x?MBMjJJYml2r442t_C=+yvr`PSm_+9ITBtP&f#pmq1l642Avyhgk^?@a)g^*N_{_b+oIf6{ zcnf?M_CS2P&SBZSPwM2MDCSFQTDp}eXYFeibd>4h@zcK16h#@Bm zF(j{G3^MPeslTC5^KrL7NPZ=h z(Y@T1f-!?1p`XOWq@Nk|!$s5&_Y%A<<1k73-1)rRXVjJS(?JR@W4~T%D~m661F1i; z$q1(SJG{vHckm?1f^RnHge?Hq`Gr*gzQHs;JaA|pCm&xUtal#vJ|EPad;>`|BOia2 zl~Iv|v74jLz)?u9rPaOJzIHu6p|rZ~dQV(U)o#n|ApqaEMyud`I8fqiMj4#7AFvU*qj3!aJMS{MDzS%;g%%IIhT)W0 z-1567YC25CPqeL>jQ!|lyzF?m0QBUOb}~5k2mus5V*(XKzlS=Pb=?T?Af(4WlH}?u zxPRSCp6eN`{ak^@Fz@|0A)kqei9CFh_^M+DyX>xG|8GH}ix5M8^IaPm8sEH#`Qu;b zb@MD3o-e(g)a}#2-dd>z6Do9y!OvR?{+BXy{8|7@t?Na}RP8`j5I<*M0K1NnXnX}x z89nDKYA$=l&uK1OL!3Dpo*$tZ7k&6wWc7RjsKyrSK#4mVIqDj#`Do2U;CDWcZfvIt zUW)|L@iHcELpf_gUvvL~2Jhk&P`vnOpnUdbQa_$cYC2vqevw#Wu?|i6Ekf^~2b6HU zU>q-(;6mm=WvE|q0ham*=zOB6jl*?XNnvu z8#_ThT0r{d>pvoOeNPRBtt?ze5m5ekXft1Z>{wl7{r{69&*wy#YR&JAr3f6rH!eJr zo)v57cG23?Jvd?$6;nWR3YAB1<;$eyJNvc5Wy3NjV>B$EXLFDAXKsnlcMoiK_S zZ;*O$1T1LyWGHv7sQtt0Uvh!dj~>x@6&K&e6B^~}5E&&iEVQ!g1haD;C$h}Qy^kJu zJV74oF0Z$o0dg^6`o?kVXb)`ox_zMmIj*twihfKLN9_ymnecV`!ivNTZK@zT zcQO@3*N)=N%x6f(HVhN2ku(1rDBeAX)Wt85`cJ4cGVy$1{pHp{_0qUbPE=W#SZu-`mTMeyy$!|lh7H5(~(UC zT@t>ITr74}LHACP{_F;Kg7hk8+c_D$FBu|%ID6<_6v#GU+!3mM;dqu}UD$y1m8d;{ z?vFYUK>g8Q;nAF-)RR26!I*r#)&>JF1G?oB%>}aOSF)u*)~t2rAy9%`L})#KJz$p=iLKTpnV? zZ&>{;A#uxzT3|JubOn$!eMh|YkENtWPa*Z=3_hrvbT`v-@;Z2*THw$!$GFkW?>IMS ztvVV^4o_2UtI0ttA1#Ac&N+>T)MqV)C^ed$Im)g+iHe{g-!Pgi@j%9lc^fwW@m|OxvapCJB#5LfH9ZN zJabVT>VQ0J!q@pEdi$9a(R|Go6G|*yOjhqctdl=5wIj2~B4*piefa*3hiK-h2S{y} zKapa=s}0GoU`YhqyiRmlC6slP5XhSks`K8UbUsmh$n0p&e0t51CRi}%nEKF>t4F>? z8NaQQ1mO6eK{uNq%DkyxQ<;1TOSvSORW7U!3vI3MI?mCOr|4Qw;buZQ`;A&(cP4^1 ztOJUUQkZmFS|bQ7TJByW)g2W=tlY~ZKqDA{r!iXCW83x zqH~y(4JdN%0_k^t|AXz8CmxbcZj8L{+$C~I(0(p#!uDy1PD14xfx}ok6M2u^4lF8k z;tho80iRI=9kR7vk2S8L6;qYBzLx+cf3X_<)@9Qtkx^MvDm-!h09}fUK~aUOG#+&1 zwH~JXoL)b2S{3Vn{Ct@q<KdG86N4*Vrq^=PU- z_5G_sThG&~yt~&6K7}$f1afwG;3x8cIF#;K=%!!Vb9IWB}m>73B`vCw7LZ1 zBz4|a`=7yh_C}TDTq{3S!fTgzssOt`fMvnu04n3Rtjpaoadr8DpM!{M$jA*%k<|mC z!=*f6ys-Xt9`4V4gS>J@W4Dr>f6Bizqdpo;&d7yEDah5pOk-g+2?||AT3%G6kTLIe zD}{ip6W+`ioM7~II$NN)At^w~U40eF%i$g|vFD6m%0#ejIJEfc)QR82JSDPxIg}_> z>1W`?>Sbj~+X=%)957`gfO5MgsJ6qwF`8iCMbovz0A|b=o{-~*Mhm|5C$*~Z)S%}F zGxUDB*uSy#_e2E6x@x)ASl4!s)0+qhM_s~++6Cb(gAC@bfVrQxomX=` zD}CaJH?v_qnAG`KhE&!H6XKUb{;hGSbIJi*ZD%x^8tK>%qO<8|TNk{uC3|p#OCL*b*WV1cz4qPX)2@DJ!{B;9 z$|%|czlE~c>>WS@YIB-0&_fSGkJ^yq52E{~kCGMBlbxK9!)2Zol7Ct&wOLZdr$&=o zbCOf>gNz@Hlx!dOyFl4@EKY!G@k8wO<|907hFX@oPA4!fX3TUMN=)Jo)0P@(0 zRF-gN-!}5Z7XF@?Md!9`0}}U$EkvyiZ67cMJgU*?>s*Lc&LnG)aE+m7pmhr3TuqbU zP<>dh=`T?DZPXoin5?6p_c2A%g{g+hsM5Y?4pG)>$$o*f8A(6q-s4hXV?GVODVXhvHQM(0MZ$hSvT4OQv znfNnOfJiZ%R1hBg%UO21t_%%yy6VtMjEkHL;^&&}rQPr{$^Ar}QtUWM$vB&@rR^Rt z+hx+Q*KHKL;KWFzo)(o)ByE~tJWHly;>l2<*=l&GZcM@HRs^|JBimaywHu_gt9|d# zigd-$3Y(c{m<{}Lt$x3haV84l%NdPbUv-^E75z;Q2$&ArIYECjsV#H}CkziGk#;N% zW1`Okw#Y_v){eoK7+Z%WMsc157V7=n^(=2TXfd`?G}Le_%62UaqJ0(<5(`YmO2FWHj5h6PFJ zctfU`9<#b#LVB6K+Fvu4=*!5pya8bM7!hjGG99$`kw!RWWVoqA)v``?!;a|}%ieMT zJ1KtNJW^O-)il_0nYurGL+?SzI!VM$vKrO?a17bi+CA*3p~gLhfyzgqZYTjgO&0ay zX^FBr_JRCc!r4oSQxT#{HOmO;69YGc9tp*aQ!&xiNDk&bhJi6LK*W)CBFUyD3-3f6 z3XH7vFei|ZBTUTv2-Mz5*g<%}Idmb<8#$DKLodVhJ09lo<_5Syw$SJ#uf=!6v6 z4H&GVH?Vh=Iv>pEOr1z0hphmdHin~@FxN@yxsJz-BY7Y7bG8)0B$O0FmSpLN*W(20+x;jd<8=O*>&fbHHlOi8 z9k_}?@@a<&MQcg*qbYY*XCVB|D_~824$bDGw2of+N6NEzYXYJc8nqPkA8I^p3mRVF6|#}f9_QbZwJZFO3YKH_ty_LPXuyQ5^VQo8hZ(ChEE%6bCr-HL ze^RIBXfVY;A{UX9|0V{gteJypl}cUoC#%SIpMVy+LH(GQ=vLoXSQrdv6q3IfNop(> zsEAzaUB|()PK}}B{2rh#dnQvdhC1nDr=dQ&B3}CVqE&p9y%dCW8brx1Z~q5bdyBI7 zohw(KE>|!&y1%oLK`y1H{xUsnI1Dz4k2P4k2~u?zn5%f~f?KKj0%@1IYBbke2RnWB zcfdG9|DUh@mXI97j%nLqFu!?;tT+2JBi{V#MWB2e`Xp{;%m6k^m;u`$Yg`|T`KsyZ ze$2lSUxi){TLpT?2$5Nj9mEV_Mw%0&z5WJYT|u`pe=(9CeGi%9MnAj+;6mi$rJC~3 zEhPUF$TSbE$vKTLkD3cA8$`Q<#xp72ym}ls*R1m69w9rk`^{ilrL*J%*^J0>S@%q! z^j&hDKXSq_$m-Ofg{C8jUj?l`@B)+YjozA(!?kMgd*j>bSOOp-Cia>>1%>!<@u$9a zuBok7c~}G!Fgg8bl@XLrX;rE;mUzat z{Yi!_7u~)3*W|0>e%D+5hrdoGs@fjfSX6vxxK;f3C?lU}P0_r45COld>=qe@lX(mxGVb+f|3bfL4Os;lFVC9gy4V2*!U{g zn9ecN4AxcdqJ<609UBDz!~4|$SN&en6`$O)g-|t?Qe#8&CyNuf?0X=>Q9wwIK zqP%33-o1<(pI`yx-OX@je|x!DZa1-n%?yzg2q+Fba+$h?Guz8_zg|;#lY2xKpALiE zI#*1gnwz5#=1aU0C3;%uSfXO)^e>&5am&S6(Yr*5?S%exgCi*NL!2WOwq z$GcnixepNB-WhO-iK|KWIEK@jU9{KPmG51_!%I0^|0t7gw6T)RZYg-wH$YhCeYcT% zV-2aTFY_oI1XR)2o@ILG4ny29XVdOUN^!Fd*%nW%Dd$tNzq=IOV*2?M(a>(I*XCws zJ)_pdHQE+P(>H%@IjNy3Cf8$^l6{5zZDwBI6VQacTA{25qlj26r$1ZDr?c{T1pW79 zu>YPc>VCO!yWCbKoZd281wUA4cr9ARNd?_8K8pUdyS>e*9V~=W1tdZN9RlMz!za)Q z+fvMZDn$} z+z#MpMmmj!Km~0^nn6yFv}Qzlq#rIi2(a7T!J=q;+gF$`+NkML;Q>V(Sm7ru0K%%9 zMFDu3aK@gW5$rzo-s3%a5fgk9b9FnR?SSGC3<4TV(@U67BDDYQf&bW{jjuycE-KOd zk)M_xBzYko!4K;R9>IreFnO>;{e;)bBgqTV06*yut%xd(X?CNo$@j_P8@s|fS$ewX z>s~Fp8X=sWv;&mgds+SZfl*h|Y;`9sttl>OHrSh9G*Ybx|585zboac~;T?Q(StTYo zF4Sojvf!iRkWhQcAuWiT{@PFNUtT^#@djiQa3?QQF zKdIvDt5}tw6Z*x{#%d%^-Wh2-j5EaZPbOFyB@QeedLB(Fw*rrA3eHg|FkgXxAeK$s zyyW}N(xwis_*e4|TQdknb6+h~tMiVrtsk&CgylCsm(QkZi(7i0*c%~D1+0F;>m7ra zzBPL&ZnCz?LO9!tbO}&=G3HOZIJ$-BG7`Jsxr|@yR0ua{pRJMY{b-meB;mAJ6#pKc zI~64CCeK}vV`rR+tc-dg_r2ODu4hc1xFN)b-r=gas{pR>iR)v(whi%JG3w-gGJ3Ty zN<#0_C{UM;c}O6mSxUSh(2y}CQ4K}jK|?fwtg$gR{e(8xg9@F4jfzMlLb z29Yd`cUq^AiE6iX3IdyE)fN41<}Rh*OsZz$`P;&y0-Ci*A6N@zb0#L$?qcfEAl7#v zv0Y#){yMhK{{=jnXx@zc!Reu*$6B~DTxBsE$o7=OOGL`;>Fn&mCnjhQJ~@=D>G$*q z6+lYQpXDRhOwt}x_CxP5+*&rpZ~}BO-CvW3iPL4TZ-8Y)wTibJVq*`W*k|ZiX0EcG zIUHsTxQHadhh4^@ly(@&UGY<(7sgO1a4 z_cI}*#LQdeN!tNd8CBOJHPjkHgFa1VVkFlUnOtE-!e=|JI2a)`b4G|(+hdd%3f7e% ziOO}ohl@PN(qx;CB&O;Uq$YP^MYstW-8c*9-|b2Muk4BW<-`Bro9Vszdc*{>SKZ25 zGJe-a*0KHS=dt*;vmqURp*qJ8K}g#LPNG0dk{p)SzNrUaZk7LT&I}BrggQBv z#is7VVEV!Jsh?yf$B}&0B&SszeVek^L?_TJ3kT_tBK%ItSCAi@={c9R?7=63DTM&`US0x*Mn*g=rN$U_|wQ zm6g%3@7MU-H@1{o(EdM39&?E5}-J}b^~fZdYx z2iU5w(viSGb4^n3w=82T%5Knv=BN+bhE-@u(cEn`he86)ElVTJ_5B&p$1YQZzLhc_ zb!i+!a_dbb70=Ko6{m}cIQ*;eGmMaY-jd|Z<1B++2H0WZ8nC93W|pzr7El`(Yw!D0 z(KTByw9L6D12GH@@i!=LmeZCbAnKG%;)m-DMEdtt*^s(vJ{bwPljwr~>wL{WQ3?cX zWYc0h*1~sZ;%cF@kON~7DIz~rhRS<%0`o?|M$uG&h(KZp-?kaHeJ5OO+O}0&!*(!p zY93*l_7M7b09I&@xhg;?(Wa@EB&JM&_{=P3nlsl6g|9IAPdW%S_(1KA7zzT9FlLiJ zJt@M9-j@ezTgfM< zjj_rWrY3%wW_2B|c>x*_$0`tiX=0TZD8zW?_9Qu(OPNTc#WQc5Nu8SA#xv85m+7ZA z#?qrS$YVnfyv=Blu4tMUdq_$o-KvBmYeL*7hALpwDq(#3&CWLt@?o=MGQzWhEu27;ulKz$=YUi!ywllaeWl()azI$ z6H|2&*Vdd?rELepYfviD=cKglXn3Uz>f1DW-1||cB+FuwG6JMygPsl8YXw$VFbh$? zPCjEK9dc@E-2#0EzNj}d+e%7qME?-25anGsY5eUvu#t3=z`+>_ z9_Up*IVDEcpRnQh2iGnIBO3&2pNDR@I*KWs)@a?7XljB@tP?Wd`#F1Wpw8lWzOpY(~=b$T5YeS9eO&B`V(JqJr< zD@(ovXCO>|DBQsFTi6-e|@o&uppeA83ej21vzqkh(>utW{{UR=ovvUm|i|@Izu`M82^q2nSE~-0GGo5i~lLc=-WnW zgKOjQtXiccuwWYcS+z1*8>0`_s)U`W6|Y8@9Uq_Lj~I{^EjIyG`3`Velxv4e2I zF&`VQwO|OwGd|54E-nZF*k?7T4`JVLo5oj${nQx7 z0qhHcw;8CGB-oc;8k@FQ0BbJtchzf*;b?yiBb`5jWUB?H&3rIp2|BkX3Vh8xQjPWO z3kvr9j=~-sMD9C*;v)yxwXuoH5>11#rO>k0S_$G)-laJ9zYpz3?K03>6;==xcT8T}u^+=mWCn|a`=N-S~qpAqpkzpf=5A2hO9+#zkBlGAIa^$Nder-;B7D7T< zArha$SHloB=*%txX?fvgo7iNc5)PSCem&J=m*C$x;)0|ql>-k!)TpRYO_C~$y_RF6 zTig=lDr^b_OFwemBFqN;K*1-K%b@WhR<<@ z_-!{;-z~s(6XO`WsBv>Is>SW=OFp1(W~oc)XxHdccc?g4sav0&{3d8wqVZT~KB~_N z_p_OT@gjKed=0`#X4cEzPc}cT@Ag7#@%D7TX9WFGnvP1j*L9F1^{evfFBVy0Ri(nA z8mrVt{xFhJUP4pJt8^Q)DC@>RRlXTC`)$RxKGjcn?d+^OpWPWtUKLjnI{_ang{~}W zQ2uO`%pBx`%f6Paw6qj9s~Fq!hr#fl`gs>Vg=vi?!#5IBO|vQ$84Sg0VW z3h;i0l}OrnL2Th`6MQJPrK|b&!(Rdj=Lu$WxU~oWYEI}UymmvBbjMU$v`2o}85LCa z;9mixpYTRCg-T<|Zch}QYzxA6H9Wp*PrZAQp0%!T+h}*10P0cNqXkXQmd}&J-4QJA zw`akwEz4FHrfS=28&iR`X?K7*FMKYzthfITdjI(^u=?El0z|1$uO_h;2|vHR3~PC);NNLQM1;#*@D3jLi&8bIY4uDcIzZw56b0)Whq03dNolc~^5DpfGgK0Y+F8u7ruozKX zL%9&ZLCBy^8co^0w^s0n3a@s?@bf-~4AX@_bDmPCE-el#20-@GnK7U9@#i1Dv|dpG z2QXjYXO|zBMU&tBV3)(+4XV@te0KPExv2WwEw~rUirU_XB30e!nh=pK=Y=ZN+Rpnk zVTH4VwMLi*rsG56X)i`X&XHr;R0P(zGov6mF8M^SZ1+ z7CgmP9Cczm`Osx7uE>W4#X|suRgpbNwpepSU_lYoj4(wo`4XG^R9105mfSvl=HR)3 zIoI`HJ;IudU1De3zuA8TRJ=mXnvzG8Ec2AyDynmt{n8bM>F*Pd_|+{*_wp;B{u-qxAi7 zvW`%nk0>5W1)N?%EHNFz2EfOL@hbQ)5Ude?)L~yk0WT!@Br-ps#@C-MCGsV-rl8irHiWjFVKsOH|;l1RH+A05EkhDhV48nF1!S93ik32ROeBJ61WHi~X)`I>Z{yh!58uizU zMEtW5l8#^BR9PZ&dpdt1b!wxESqDI(Ig-$yI?oTxXc?lXZamnL^1~UuQ$(WnPsmJb zLJ*^R$qyu*4^PUU0__poQUfuJQ_NE|aXYB%O-J5N>gk7>2D1}XGP53h)&r?4_`y=S z?ov92cet-Up%10~PyUG6+t&?c{l<<+XkH?NATon^*d){;F5cJ)t_JNg+E#;((ow-G zyLG;w`GlkQ1Dh<_!IDq`l(mYf9Dcw<-I6Wi5NP6u z=H7s~DJ2lhtRgtiUVZ^^7 z#Lc%*ni+)WvnZ1Whs!oz!1Z0SZ$0PTwI#Z6x1bcNWAzNk)i{ays(JLS;jSt$Flr+0 za-j#^RlCZ7W9m|8AV?qIM&$*5X(p?{P?+*?-^k+}R4N$U&;`@jYQKM$? zkgn!B&X8JOuv%YzeXce`YaSe-0N#z_xXq{0d=ofFA-o7)Q4X;-GSi_%3j0bs``}H7 z9c!9?KEqr3I9V$+fCaBKQh{yk+GfhO)$|DI5AbI>~ZXz>|1Grio7r7MFzaYo}!Fwy~(8yr72Aa1>kI=5Kq3ArJ#<`7yaFT}*{3E@le}cn(rJ0fMZCsOc3Ei#i1FCqG zT_VDgI^ZI6L1A2cEOU&|ih~Nsn4y=#TWYvc#+r1t!uvaLI;ZR!Y0`zt{8(!9UUNxp zC8`oeOrp}c`|)ikD`m)6VFGs@`q7zt%cf2(yEj&L@1&`v8i1{!-3Mlts&Fmaa zPh~Tc(wNJ&2(hRuqDf8N(CeVnp!Lv`^~T_P2rWgL6a~wAng6Z$uwD~$G2 zYb%xXOHmra4{x*%;x%u>GE_g|wd-pvU=U)O^88QiKO6(bv}u{%tW!^#-Rlhbia9q6*NxY{!kDk(b>oUg^1cB`O@b>qL%g=Z zzj7@ITrv`Vuwu?tDuDtBM9n(r;)c(;nWueer)#o=MRc$SfvQKTD)3!@4(mJP^&0>Y z38M;@4cGll+q}4LZtIBKSK-~OI4S;xgJE5wPCm#)@#?vAfz$Z z-NGq)lq{F6mxu^_owfxnA+!`{RByO}q8J&4%uSPSM-v#0j9Izj1*qzeI0e$u3aMzd zizfnZpCe#Lj@tA49!*yBtDJw#y5L(thv3tt8?PadwoDk=u8cd zQEKh^bBJN?lb8IN*BvlVYlPU%6JhccB+YlMq>|e=k-FuVFyI4zNb0$fOw3F1S@gYs zg$s{6y#EN$_0T(2-n}NR!i1-9R*z$n( zp};_P9HnBfz5>wwsLbSf#uyhnlt{tSBLdX!Qijj1Es;Em$i*WARmY;sTGV^~*Nw}5 zW@U*_)k_meJ%xAzz?Wem9KvQKKda^Dz0B+gS}v!w(;Is_ukGwGH}jliTNStdG~78_ z8L(YgCyn}_BVV8?0(Kl7@Ft77s_oLKgAIz1ssPp++|m+_Hr-7Tsui9IdmvQUQ2 z_&(zxj(kLS{8*7@{7?n=^h;-TV{koWwnVo>)OR_AW7C7S#$G~B8Qn50dDiPQBmF7 z5RKR}Q-~Bx5Bs0)yMFygWZ#XRc+mCeUNKZOsuh{IGO1ZJCL&Ni4V`( zp&X{$&vw$%J81_y?uBZyR$QEHgFyIOs@_ zWx{K8dKWM<-DLREc+eh$e}>gq?gMkg&5pTR2h$I`pZLSQ=DOeEI8~|=y;pE1*7g1N zv3#w{`oUj#eH+XS9a#f-UjGqFa#Az=pfA%0_kF~H1r*_R>JG!?$2M9Yi(zK<1Kdh2 z5uzz+AqXgv{iNn^oW!i&@(uR>G^X@nH9fU((_3F2heVU5C2@gPKGE;L3U`ujkdtbJ zcvP{i09cffjjiA@DygD?D>5sL#f<2x<>{wtuP-dc4(SN;v-IXX9b-L_R^3mz)0;Ye zx}4}tyr$tf2K{4mjllR}b#Uv^_L=}QA{lfRLhZTzN&l9?E~S=EQksaVKusZ#k`QKb z*__BNx1wSaS-G=^f@7!2#*K`V7$KYKOjXkpk!+Pz=HE22!_Qk~KV*>fO84=&9`HWO zQwtOj8ldjH@^TIw)5Kd-)ua|~wjG2f9O@4*H0(Q{o&HMfdXbX&0+R)sa!da|P0DUGX}s?^uP zZupl+LgPSkEJ=N?9FFGmAvyPu)u{He^=X6JlbHeYiQU_`Rqa{K{oulYuEh7~Fjg0n zN*8j{Aa*IWrCtCE_x3S%rfF&_v<4zd&y2Qvn$G6GCYG?t4=1|>k3BTqs4vXAmYM*F zBxZl}G`g*q*!M$%o(D-@P?LTjU;&~$cR6{~q@VCwc_ewEcKJzvXhl@1&g72}I7e`( zO|-L+hdz_Z-MLb&O`$zuLhweFW!IC&gdIg+CU^bZth|3>kW?|~MSzJp%DS-%9Yy=Mjv#1yL#3I(2txTFMNPWdjpoep!fXeYW5yhEP#DlZpi0qvW_dXk zIqEPI5BdPbQ%0yfHTKnNBt3&^M8clJt%6xol^z!|dSzU5Yu=~3D#M*8%zCCpn=*i- z-kBmoEN1}&ToKVe?m^H2z6wGZABE0|ZbF9@l1@mlzEVgSa)v9zr_dv$%A25{iwI%V z7aR#}5DoR*#G>KQa-2w;hCA9+rwwa{KQKuft1Bw5qY^Iekkm7*Lmo_3dL@%gSq?&~ zeEO9lfZdpTlx~@g>B-H%!m)nBn>O=0J~gRT^X|+&o4?fb#pZQEd{o#s6!v=0rkmO# z3|?|O?iy*_ZG$iTggrdl$g@2?dazsy8E>F#DgiBQI>m;>e@q9^DS4<3v>bv;ZI7+>S zcBk#T304{kq$aCV#CRVOd3}a_LkJGjUjfYtbc>(YY*i1;6^$Yx+Z~NAyb{ zN$&DvX3{8vqJC^E(eDyVyZm_fup}nk9!dd4B-Iv6B7|LHX;&YEr5`6d zO3m1f3AB5YbI%LL_~LjLBi(8pH_eZhRRO#4hNL!BK_IeD!)L#5WTxfW>MWU|8A@@(OVHwlga zlG+ND@_IfKQB5dvN%{;T6^1j2;U~P_F)&KnEuVJm2%_SrP*-ahl{P;4AL3%`_6mv{ zw^!|&Y6eCVR zQoE-S)NNy{0fCaNI*QPWQn1Mh1$!%S+n(vv0IGQGs29<(cCXvJgVOlWqxSHe+tVV> zyV;US-!%_1HY<_m6&2T{*=@KY6r`gOit`MRmN5{?;r2r9cZY=gCI~Rgpm5U2Ir<$@=ssBXkP9C!q%R2>iCzxN`%Ot*jc&!;{{C4>ceXd(?n3NyfN7)dwJh?yTU0*% zoIOlFdwMN{lRK`5wiUn{T518?q2Ph712GnU>`nS%`wGe9;lN6TmnsGMu$iE#%}=Pu zDhpc-@#Axn$6vxcZsqfm0F-Yd7>v*Bwb(vP^B!!7lXGUDQ}hIhOE4x@y;!6l{rki@ zMfc>il`|3nG!FY03=$imCP@b4@3F}gWj%%5FgKVlEzPCUG`A_u(s>fys3Jp_Z$w_OZfgYboEWTB49EN}{kdR)7U4>6dNDZ)sa=rLc zXK0s7VRnV8z6Gp7bM96(r)_gj9tLhv|pp+?jAqE;+ z{L<3S{{?>aC8V86BK8S^c34HG&4*e^n&|=RYGZ+5l?n}Vj!TS;C8nfSSaM2qwb>fb z>o$(5TtC@bfKs;5Mf8cT^%JCDn*tDW8W`qU8W>ZDF?f(yE2-HEOnk!0UvfeBB_y1y z#K2A|FE5hHgzF~5$_3z-ge1(+7NYQeaic$%|qfIoh$o6vTtAT}nqRyIJ%o z4-h$Uh}B6&Q$1N`YBT@q9A($@a5*qge09te9=yf%8gF*0*Qb7)Y|~bOH}@)43R@*x z4dHmNY&9PouTsU(TT1LSbim9}+IS8&ZzpKf7y7GrW^7c~^)lNK(X95(AZSNHQu?=v zkLjqIYNBxHbF*G%8dJ}t=gfh^z|kcVMBlmUU`N?HTy8}L3T%P!l?Q~F*=-4>pYWR1 zKN#e*YxK3++=7Kg=XW%JHD#)U%4DaN)pT$a6FBOxAk)hLZVCMdT>2ppWZ1(1FcdS% zj>Aj?>0u6IFDw9D%P{Mu>fDWCrpA_GW+{*!W{J6Cz%<|d@T1X3-lm5c!Q3*;tOs^? zm?_P5(MAQ7wyh0q_p}VN-nBc-w4Wa4u`PHrDozhGh%nM_*30&WnGe##Ob7qIVFrZs zFhjNN4KswFShhB1A+~+RzEi~{C*vQW}%udvAHL4VSI7h)%gsj zO0VW|u`>2{BN~((UFImGw97F!5I0g3YZNTC%i-ZGTIMn5bY_)p33eltpti|S>K+Aq z9D`&}bLud%GtmzfpPJfA#?qAjH{T-mx2hk+39>h(qqZx``cVI4?t; zR5Tsit!%O=9LoiAZ#KC7d+KFp`7tkoLofmUF`H8RjbzT7+3_oywVSo{-bZSx#RT)s z!g9>$QILRDDFL~3jwd+N{W!c9iZgpnBdg=cg_p8XrM|3i5&A~FUv=^CC(S8gZ;rZ) z*<%UESA5N~nYeCfFg~tQSSU7S0vgk)wM%&?u$fSbXXdY{sPL(WFYCrA{9|l(AE{fp|0S(=S6YjWw!_AwqSL=6t=SnDjpJDWu}O&ULRxDB zvmG{`l8jEX@h>Q?%ecx3mHRV_nb?{pWy|?j-lUpj-uT@tI4 z?R>SIS^O)u^K3!x;*xb7i@uR(iL_4^n|z?@S6HHm_tg-v%YrNVdI^v&h#Qy16k!^o z#gW7Rg_7!)lPB?m8z6!Zn=meQN!?e*Q53jp=U&7~`%D2#SllHAl)Q^ zOAdlf3U$sFiP?o%ip-uvwbWQBmMsVY0rjz7dX@oPZOVKWl%_>>=m0e`A;}34s;kKU zYIzGNLI6sp@<9j^TL_Y91R>@F^bOnF6g0YoEI?>&1_aQibwJRlWEX*LNXr60YE$^q z%gvRF-}Sgy)6>K<_#a7E7~=nH2beG2e7H`d_fs&>7>YU?ZC|hk;bN9z{m+;`s_}W- zrbdWAX?C+P>h1xg?V`>Jd?#}avA7MPZ4+!ml)>MK{{g?G_ed3o>%jH z915!rQ+83xtZKOlX#&j_y`0Ur=`*^&(=6MkVqp=Pi#hlBlzy-Pn0oD5WKOY0pe8xf z@PqFLsv!X5)j_j(6p8*6qFY@{Uvp|kb`EXU^fjGEv0lfCG2 z*K1QGFXLdGg9j1M5)a6YLc_*4`hoOXO8Z(Io4IC;R9x3{;pP`qT-Ma$cUrv5F(_~_ zIr2gh;y_`+)BR^GlBCVMAqqVz|7%z9=CS6XGlK}h{Q}|0EU!URPx)$l5M(A-7)}aR^RG~uF1ecK=pSJ1=K$! zDmeVUykrJ_V724tsEczfe9oL@%oF?Ha_&|~4xa++eF}=Cf*bm#tI~a1LDR2WegIdl z!Q=TV070y-G++t_CvPnPpIJ{A0LOK#-KcKS@iV^0zjRg0gUCIE#`OQ)?J9bIq>%qW zNy*jTU#Ct#DfoC$O-Smcd_6MNe!jkm zR8X2wc$7X>lH*M_l`50bnd8YrjoXZ3fpJLIIF-Yq%RYe(XS6O^EmoMaD z$spUrNkmm-RjN&mKo&!1-ejhB-dr;FK)Rkshl0Cb4?3xJDDJ|WU`FYA`<_6=)4}_N zH0GBBfgWIHxsYc6FI2XD^PZprG_p61tiT;v>sn_ucNWs}47grGP$xmtQxJDm!#&lD z9)=a3mb4t!#+{VkOAJct@|k=n%OS9LQ02Jo{pvahPk`0g$gdG$JfO25;jIbjdfJ4c z(uHj*m1A8<^_qU0Cg!V#vwOe##q2L zm3=8MjhFiJvjTsG(|*W1kxEVh=Z!d?CX`^sBWttUK(enkl9>0cFN5lMj&Eo zW@>ZamEeL*WESKDQTjRoh7$>gLHq~uS(TfvxE^8^)AP-Ir~l!2d>oQ0VWwLRCF2FC z!H@GJCDHR3rIo_OCTY9&LE4NV;&B>URU|*mbe%TY0qCOJc?+B{)bEr{; z>w=u5^VOUYm0>}3ob*DNd*1)&R(zU-pe|zs*+{MTW88xrRB~K45xaVHJC}oExUrC( zFFl=e38W_7c^h9!0D~d2vh|g=>_jtYz2kg^qG zZN=N@0;)JZdoW=jAOdhY)*MS!T9s#)&@I6p9@#V_DJ6o^el6nyLD^#02+H>LTud{C zak`hM2*AudtVlpek)UZ5oI<57h%moU2j&>EyQqF7EOqMTYG_t^sXa7K%C1%w>wuFc zlq29ep|Y8>$w{lz{t?>;*8)M>RmeDbf8*rsxeEOcc=oQg4`9Oo44X0|YrDW4IAX^5 z1Wr-RUg=0*hRuE{b7=t!FO`MGHv6M+uK)4&0aRzZz;;~bv%A2yq_!pWZtMd8Yx{sH zr3u@{uLC^q=7vAE)mRw}4llj!!;D<}%w~TFvGC9ObZmv8wEA?k46`b;U80Gybz#m1 zEJ3<^L(H~;yA#vE^>WOz4J`BIDu8{-kS?LLyH3bD%22EI1vOcvgrsaarH16FEr)k2 zzx8BWJ8sLZ(7;#H(CpeJ+PgdcA3HhE62cDaKY~z2Qb&)!YvaXmC)ug&3|v_KD@r6I zsb!}$QA9nK(0gEFk~elhj;PJQqTD~)GxTq6nNJ;uS3*20klFMK@q< zMYvm4x`PVT$_3$;9P_S)jugKJ9uHuwQ%eCy;?2$g`)WJ}crDcB3lM#Q>~7GDsH(z0 zH&mrMLmO&H)G4v8vjd7lv>X8BLuh`A=F})SacTs(-XTv0ab9p%oM=s7Va>z;U&u24 zzrl!)4bpT!Y=K~1nAshBIdb)%ZPLF%#CSLM6b9$-ckY0o{s-GnyFHzI=%#P~iRc)9 ziGs&`aXl&^)~(_UdskG%ZiK`uD(*wG6jkMqgcsth1Fa2IfjSM$!J1{;RLNm1h{!t3 ze25N4$;Atf4+dIM7C@?idWjf)AMC=mNw=ypB9RUKiT4|44;c?Qd@U}^>kR}=1E0Gw zjZc?$8fPXxR9UhiI0Z@2pwnl6c_%O?BQC1H0%f};HUR4uyWYT9;Eu5Y7@(bE1NbPyEyAiJ&v=4JmT zZ0O<)d`s*Dw8ve=K7j3|V;@K{cGI8?@hOg}q$zGspFO0nfAgRm1jH#rm@X)g1DF0a zpELc0*E+=r+}xrV+rwuMlk3bKeUF_S_mOj%qy7Z5)O8hXh&X4alU;00y zW^mHquNCjx%cR(sQFr(fy5~rR+vDen{uNio)Ev!vv>j%B3qOJhl9Vdl@&=_^0*8Oa z;q?>Vs0ang{HMf~8LWx;s0^nzZ07J_11uaqmN5;xsDf#2fVqjw8C^0{t^JSvR{tW2BQk-q*djZ< zug0o0gkT0jwzCC=>5=wQqi36y0VdnK%aryJV#V0!Y!X^!5FHzIqDy|jx)oKo<-Q^J zA$o1Qisn*gdk@+NHZ?1>DWq8Q>6bQoc5QURNwhL+I zTtkv9yHnCfZ-iFcJ8gkTu!4*5lkQV+in0-)R@q^<Q9QCu#DM! z`v2NH7cjf3>W=So?!7bD05Om-WFASTlgvzVGYr9`sZxq#1VundDcBgn^6Ee!4T?G- zBBUuqAb=6mNCFK?H3qOi1rZTL3Me2kAjD{CzqZnrhww$}0}>*={r%TId(OFc?j#u+ zg78i9%{}Mrz0cZfuf1M-o&6wdyW*_*_t%S`Kj4RpHk-0WfT>1E3SJmOxNCTk{)zHP zcd+4@8HVM

m_Oxdtu*sX?PXSI}>r(p}ROO5i*(tbBv2u)2G*131jXQ zVF+)`F!i?Hv%=B91+g#L{&T)Q-|8!WaB_y1DC4#bFHzP9Xgkhtc!@HxO?TL((`5{M zZ3V^{nSp|>ENGD3snbt`3>sTQawN~Qwg%85!_R7HYU_!fl|Fb*G2E?W&!p6J*$uzy z1-7#Vi+&}|tLik4?|^K4QfL0M)*)CJ+c5<|kt^!kPZqFYIwh$dTht&s?lBRj+N9D$ z^VrlKwZ5+~vg{V!PFQSlqmHkzosRZWNN^8@A8kdKZ8*qDd%ZgGYb4WY$OMv%GA~#Y z%_eVF80}$o?*_H&XT810C=h)=Yb99yB5<90QCFumZ5Oh&^UK@ z1kv8~8-Tr$T<{^yPCdSHcq^~!DW44PhPU!6>lkqR*ff-Ih(<8BY=Dy#QG&zcw@-Pso0wVn_)8=@w)JJv@gVK z+?zp;NS_>}W$WMcdyl-4W_-6eb2~F_M{yW7y|Oh8JAE9K1&)&Apx{F7Wf7)C@))K> zo?*ilpEKx`NDNLgCG!7!9MmS}@FDG*eq-}<{Eq@}c-Ffh{`UHxdQoC$MF`Lz8rb8SHnQ)|gnvgY9eo5{DTf=eNg!8#j z22LhXt4K7lNq3qq#!2U@-3K*fF8$&ln>MXf@~V~-fjwW~JP^O>hyZh^WgV(6+4EPx zeyw>60-!o-oj}5tws{>u5{N~=?A$bFBbH5L=123Fsa%)-Y0TOkOss9cxmKha!h}S~ zfqvXst@-*Nw)NUp0EoTpbinc!?L|_r7X7}j0JvOw;w`n7V}uGqDzfKDj0(;K05 z8xE0@alCYnq+dTbk`W#2QEatcs1FU5*gYw(+D5NjzKrb<81&sJB3x(TU7I<`bV4Et z_UTX0Wp+ds3~ZfEzje*()t`dOxkVi;|9o$6A8YSW(wSO|~$uwu%HsId{ z{wBssQuI1dTIUC05ME7QR2c0BOwsnnb zZshJ2HM0elfPWAyUT2!4{cuad&;{-hK^(1ZMIP0s@m3wd{4ad)reiOea2C6Ch!5C| z>K3>~@Hu$OIS(6OIAID85O`dPYFdf0BI-gm>Q zrCZC<`Kb1&eY*DPTOmXF9NXh9ONOKM+M`FylvpQn26jC;6BfWlw zNQ`aa>7{Z8zF-^OHlg*)r)fosHiBEE+27>ZVrx6JoV|m1VT;~CnY+{r$=KG(07dP!b|wn{2*xv0$7W8M%zh9zw0r1}`+v#|taR;*lx zwUK#q*V-DHr8)y*fgOUq^>PL;b=IP9-Omg10OFsrkh!Q9xp?DexE0X)^Nv+PKHd~x z{dh81bSv1I)ir1*K{kD$(3S7Mh1u44;qxYX2m4gJBqF$(6^iz))A*<#6dl=Jv(RDRH?@jUtN+!fj(Q=8ei zddT4yl+@#Wxq@254>cUG=i_ZJ&C67X^(7XN2eg(*mA6iR$5My}90-X-VcF1b9UlBZ2Bs*l|ADSk_g?Vc_D z^2X`vJE|+QNP*z%4YyfDP8y#09!z*q8foD02ChwfWX?^OsYaL*h+_Oh#}fd))<7Y z5^_IUO7|D=PM3Veqpz7Os}L7jRd(HK!(X@$&q{Mip6(ZB?)4o0l)f&_k6n6i?`0S9PTZen{>^*#J*vEZ=3`3-{z%Ih9$L z;26>t)+q0Wn6@imB=`tV6Pgijyz6q&{F6Vqz!hCy$@qdMPV?uTellskTtr^I-51GK zIj+r*x&7RXXijubeO>+e#r)gnjCyhOg3))3898RdzRULA)G(&usr{PvyQb;Trp?W* z&C{B{=|;E)cc}ZAyUsn}{>^QPMnnzKc(;bsDg5tn-M}5|Cc3Fyn_MetO+2;mG=-<} zZUQ;0-M%|4-E6Sh-Pd=btl*CW?u~Br4&ipWPPfwS>6-aJh4)JQFSu_!E+5tID zv}Our>nK&CjuxI;xodNGx`Jz`MN`}~D4R2g`@uj{N#B$FneK2m*Ifw3TA;v0dw(L( zO3>i_?rjEFG@4*{Q=w^*o@}LLGrxlT$E0|?CRv#__viGShc?}v;jVJuber5OQB!nK zG&edgS{~gIJsxe2N5qrjL*hB{Iq?UdrJWc-`l$lT=ItlZq(Il0SoH{|ZlJ)ZkT zKF*KLcjphy&&_`lh>TaQ3qQGQu6h$g~ zbb;G@&{Cmy{&G8ILT@jm%tYE;0)8{~iTa(?+)7$|LX}?k_Cf1X@AiP7-zShrI~c||wL>h1!{)irX}hb`dR=DtuPSM^RZ3~J>bK%VMo zbDwv64XC#hJXGs@Yvc*HY2>{dZVUBS%G@F3WGRu>B|aBLrvjs?f(o}L(7ar<8P&bi z-eK=dvbN~WBGl>NT5^9|RZk~Sg>{QbT4g;!($-YHlWK=k5)4GoN{&-Yv+YUg{$6sb z`^;;he@LJOIhX8C0Pjw;&>j`g0uP>4m99PzrI(T3LF?6*zWu(2e_ceHKQ;8!< zuf=CyuYw=sV|i7&I97OGSC#H5JH_3CW=ZR9qb<@IcaWOJ(x={5QC9uaP3d=%DrxhS z9>-l57)!^eaHZ3w8P6s)OMBn<7oo?5<22q2+FiOW=rn0oarf6qn@EXH)3jdRZX_)W zQL_6N^mt`I9!^TOJteG9eMQP?$+KFeKA4NHPT^jRHdY(k>7jQf_iFE-qDejG($-x- zor^|YWxAo&?N8|`z$zNnP1fV$=RAGUL7F&1dZA>kZa3;k7Aoa04<>2pZ&Q1#JCOgf z7o)7sIqpn%o?GNrAm8m)t8ne4Cbe4Eb}Y&s?g08obxKzRJvIyaO|z0E%M)K8$9t7< z#(;y@*%QI`PiTSHd+)(w>FxKpi{Y84qEXSoQE#*q3-Yt*ck%eRCq5-!6yFfv7eAGY zb8Xm;Q*sM)t8(|`p3H5@H{{=uKRSPA{^I)_2s;sPCyi!hIhvM0!ZA zmOT~E7LEJG(bC>Q4=87<`zO4Of#tnz@+I_k3uV-YU!t_vLE^1$(n~x`iq*Rv)X>4* zIOf6W6 zN_tvI_Jos{;UXo}V`|afhL8BIx<%tCKbAKAC<8|+U8GI0n#2vBO83Hr1KTRu_gI%0 zxz#F>rStXDW-Rs_4W|Ozp`-R!e;m5OiqdZ@;;$F?k^d%V286( zeRt*^-!f@ULGL3c^o06e{)5-`$D(7s=9MjzXXAbR_a*v1&>`@|1*CVuLGotg*~`jF zQu{~`H5|xYr|Ix1j1@*CI7nipNz{h(%%*y7-k;K{rNcdvDVy@!xtX$(W?|UjzMUzn z6mMPTWy*T(A+2#jrfkaR-ywA%&u_|J^;FYI+NB!IZ@`jq*ZIHhcan_$LG->0Uz(7ok&V})62=n zGi5q~KF-~RP0n)OVTtYbJ%0gDX@8%9B@Z+^2#cy-8jtsoPwE|o^d0WzGd{b;J>>p_ zQSzv$1N%BVIxXsp7Dr35c>4fB`eFNaZtwn5S)H58R0(@Es=rKD>lV>sg5QSi(Rjz# z6{KJGG+3N{kqY&%tdE!WsmO)6bRFCr-ptm2Zzer!Egs0EXK}e7UI=hfyL?|JHPy!7 zqeny8fbD~sw9u-1pj;^Dd--m9P$@y$ze|7k5;x)Nw2`$fy*( zFFGkYKe{@)DOwk8ie8B0xFIevdY&Dh6wi9477j_L6dHEFD? zH#}d6t1mNM?cXf%p7&oQlO=adCNH&QMP#58n9}2wFntePVVbv^65^@L;S6zYXooNw5T zBR$CRcw|!;`)ETWwN3=jcaiUTSvp*C#YdnZurk+1hl|i%9!~Z$oN{k z=~2`mzeqh>%a^{{q)Vei+5JZ9QmIha&Bp5kb4R$7$&pT#uM$QlqG*eI)LL8Vi!Gyn zJq5fS{41!gado>p(R9-U_eHMa=p4{m(Nlk8k|Av==(54$%W3Yj2ECg!jd#5S%rILu z6%LZdh>dp^(XK}K2c-D;P8W5_>kwCWy1xedY;Kw(E|}(yaHqKQiFK{PELr}{&lL}`%xG}87i z`eESv(t*PDDr?*LRsd1t-pqDJgY6mM7Y|g2a@i831@!p~zr>1Wz zo|`^Z))s8vM&!?rvosp^7R&RqI8oYH(cHnHh*LMhdjlbOO&}S}zMDpAPbDYC-}^3} z7K$!r-$`SL^691h#b+Ax1fTwP(z9=bNP*&Y@^U(j(rLs=e4H&GVz`p%RE`y=QN*al zJpm8Y8r5b~gC_j|(qB!D8%PtZZu&`bC93`eoT^7=(rL0W!2|m-a*`cU{TZ^7;{6e` zIo^*x)@+&V=S=Q={qxaO(kY5$d417`m0xA@5M)DKSIzrAChcXXQVP$4J`;c`KTSF{ z@X+7WzA0cTiyidxnWSaQic>1fiTB(2I-;1HmnyGWOBPR+w({fJwBP=Sw)yltZ7Wf~ zzLQ-Ggzyb0)e2uW+bf^JfAR91r*_M?X>r#N$REqNCe8l}T0zz$ye|x;59EEdKtpd^ xLT)L-b$&7loy9|(!cWVrb6ZY;gs=H0POnc7^1yW-YVMr{t6*38^GWl7tZDlq4Y`AxTI`k|ZHXlH`;m zNs=T<(qdN$-|z3be%JNCuHXOqr=I(M?7g#dxbJ($zGv^- ztzEj@s`<6?nyE#uZ`(F9es`U(HSMhpTIkIU?QXxLb^rEdztHTVO*QSaF1OxZuVL>F z#~;x&Jwwy9UiS^|J?!T({cTNi_0qKEO$YSr-8W}vqc`~4Dr!7{1y*a%yEvb!4j4RQ z)Nequ?;56QWp)kjJ!+V1cqbOo^d8)A@zP+i*e;r4(8hk9P+kf4DdF^1@I@dodZG+p7rEO}JxgO{KT7SEYOKYgzn_lkL z%4#*!_G`7Zm1zgG%m2IwT84HRpE=i)Dc5gmy5-~Rjf_`W%gVae(6~HpL-QNoq-|;~ z^+(dS{&pFc)>nTwz1*$U)^AMPuXQv2bU>@C6{VMFXi+^U?M!w314fJ(_Hgrh_4*GT zGNSjR{T?1VxL@7-h7NAar;+QN&m)Z^ZHM>krxvA`G*+M2xqaxMfqnlM7mUak>NKv~ zux^8{{f0k0aOjXolP2}+)^E_DNrR?Mu8LIuw{IHhT%>tKzM;myea*RL=L)+F=ofjk zU!UBEBZJv1Bg2Lcdt^}W;gNy&arF=P8xiR}q;F)z(4m7K95|xx^+Sg}Hhkdy14cxu z-&Z5@_p6lqrVY?W@ZT`)VXe7VkN^5>L$x6+>8(Ag^<(K!Z7^e9?LJZ4^j9O=b^rGD zh}M`Ls;xGh%l2b*uH)Y?)A+Bi*U@h05`(mXTHn7e`#)b}vIL(s!qUR|O$pY>%N!E&{p9^^73 zcvRQRcRt2<4b<+JEvFvWeLRuXx_8$3f3C-Wt!bWJyrPhL&8X_Q?|aku+$ zXZrFW`pexLs6D`4AH+i+B6s{D*;FHV=p$J*qqN7g(b^botoFDzPJ4n^s|ngf?MYtO zp3)|3Q?#kt)7muc8Ev}utTsb?PMgUq(roQ{ZI1SWHdmXc&DUPk7HBVN3$>TEMcOOc zV(nFJiT0YdRC`@proEvp*H-Y_^CqwUZ)vNwx3x9eJK9?9U2UEAp0-|lU)!L4pl#GP zX`8hz+E(pDZJYLywq5&J+o64;?bJTic4?n!yS2}?J=z!AUhPY5pZ1luU;A1+pnb#Z z$F$?x3I28|&`xSUX{WTGwbR-!+8OPvc24`1*U-3@ z&s=wX?ZdU?HqUQw^4XX%yoh@P!i(R1{wdNn<&=jzq<8hTB=mR?)0 zqu15z>GkyndPDt6y^(&E-dJyh1LQ z`i*)A{U-j#xkc}&->P@gZ__*Lx9eT>JM^yloq9L@F1@>cx86g)NAIcMtM}4->wWb5 z^uBsOy}y3HK0qI+KcGLT57GzgL-e8gF#REYxc;y{LVrXbsXwZZ(jU`D>tpn>`s4aI z{Rw@%K0%+TKdDdBpVBAmQ}n6&)A}_18GX9`tUg13PM@jI(r4?>>vQxM^tt*xeZKyp zzCeFTU#P#VFVbJp7wfO;OZ3u>98^mp{N`n&o% z{XKoX{=U9J|3KfUZ_+pGTlB5^hx#`CBYnI6vA#q9MBk}@s_)W2(|7Bi>wEMs^u79* z`abx?vcmVHqyNZFmf? z;WPY3zz7;4!#2W3hLLHMGA=Vp8)b~L#^pvi;|im^QNgHaR5G%R%0|SP8KtrcukNZPYR98ug6&Mgyavai!77xXNg3G%=bQ&5Y*8)kX{B8l$CgtbTRHQx*B&H-Hf}8?#A6l z591!Ar*W^*%jj+NG43<^8vTs^#{I?sW1#VX@t`rt7;FqNh8n|+hm7II!^Q~X5o4tB zs4>cT%ouHqF~%B?8{>>8jPb?Bh6h4C6UtrZLNy zZ9H$xF&uN%vZH;m=R3S*`5rm@O+ z%UEr^ZLBfgG1eOI8taVrjP=I*#s=d9W23Rj*lcVuwi+KA+l-Hl?Z(H(4&xJJr}3$= z%lORLZG3L*F}^VN8ebawjIWIS#@EIH;~V3k@vU*l_|7$Ml*$({BdMpcyi4Gi+v%*JLDv#Ht4 zY;Im{wlJ?TTbkFJt<3Ap*5>tQ8}kOUt=Z0OZ{BEjFmEz%Hg7RInzx#r%-hV)=Iv$| z^A5ACd8gUUyvyuv-fi|U?=gFt_nN)T-ew>3KC`dc&+KpBZw@dAnh%%{nuE;2<`8qJ zIm~>>9Bw{rjxZlFN1BhCqs+(5(dHO)togV(&V0fgZ%!~LnopXO%%{xB<`i?P`LsFB ze8!w^K5Nb}pEGBgv&`A%^X44$1#_-B&zx_*Xf7~cG8dXJn~Tg>%*E!b<`VNYbE)~d zxy*dSTyCx~SDJ5{tIW5|)#lsg8uJ}^H(!w#?6FTXeP}fGi4T= zCFXDDdGmMkg87Ge(Y$17macx>w=BzLxh;?7wS1P}3RpoaWZ72O%CIu6Qr2ZwX{(G? z*1Fs(XI){Hw<=f_tx8swRoRMI*;W-R$Es>ov!Yh6Ro$v#)wF6^wXHf#a7{4OUyLoz>pD(duB`WZi7t zVs*4`wK`e1S)HxhtuEFbR#)pztDAL~)!n+=>S5hu^|bD_dRe`#KGuC!U#p+h-@4x# zU=6e$upYDqS%a-1)=+Dh^^i5(de|CaJz|Zt9<@eUk6ELwG1ge?aci9Qgf-rpU`@21 zv?f_kS(B|P)>P|hYnt_pHQjpFnqfU>&9r7&v#sZ?Io1o-Tx*^+-+IwnV7+85v|hFr zS+7`&tyirj)@#;M>ve0H^@g?FT4AlU-n3R(Z&|CYx2-kSJJwq3U2C27p0(b3-`Ze( zU~RNES(~jb)>i97Yn%0vwcYyI+F^ZS?X*6%c3GcUyRFZyJ=Pc2Uh7M1pY@fs-}>4* zV0~j9w7#_tS>IWQt?#WP)(_TE>qjfkI%XZWPFVR?fpyaQ$vS2IY@N1#vCdd$t#j6| zR?Lc939HabT18gMDz-|j->mc2@74wD59^|J$)&k;m*Fy9mdoXGyF4zh%jfdD0aH5Dnyy-|+O9gTx~_VWKqMoQ8M!P{I#MojMWkY+QX~?|jzlB%BMl>0Mw&&MN0vsG zM^;2uMpi}EMK(mXWLL?anLR6ecJ}kxbFyE^o|nBbdsFs~Dy6Dq<(N5EPKBK6IW=-> z=G4l0G3U#ipL0&&2^nCP>TrJngwQ^m#zFdE9AUBvB&dtm%m3vuk>D)58WpgX# zX6H7@ZIjzJ_vYM=xwq$b$-N`@&fLDaFXYb6omZn#jjL*fYE`IJu~yYuo$}myp}bOg z*X51Oo18a4Z$aLQyj6MY^4`zel=o%cp}ZgS@{ct**5X*JW1WxPcWmIX!Nc!4qxoa|)##_r?S9VBC&p#!JOZ$IHYk#w*3M;#J}~@!WXzc#U|?c-{C_@#gWC@wV}H z@s9B>@jK#o#e2s4#Ye@Tj8Bcvh|i2aAAcb}H$E@^V*KU!>iC-YJMnkpo8q6v_r?#! zzl$G^e;+>@KN&w0PsNMlzs1kTFDCSaClN?wCF&#^Cz>U0Oms+eOms@zlNgkEG%+eM zIx!~kWa62`^u)7?8Hrhm*@+ht3la+xixNu{%Mdcq!>lW+ba5t0t=@8zmbjnaMs(z|TszvI$RGU=0REN~9soPR_q`IYgruwA%ryfiVP7O_sNR3QA zmKvLSA~h-XbZTzurPQmbH&QE7Z>8Q(ZAxuTZAYLQJsqa!pQzud< zQ>RjAQ;F31)P-WLI9O~KmnpuyIIFlyagE|y#r2A>DQ;DKeQ~?uTZ(Tl?pl0z@x8?Z ziw6}CD}K26@!|=^lZvMnPcNQRJhymZ@#5ko#mkD{EM8r_zIbEtmf~&2+lxOb-d()6 zcwh1U;={!!i_aAQT3lFMR9syAdx=rvDe;#CN`fV!l8lm4C1p#>l~gLJSyHd0Wl4vU zn@c*C++NbN?!%SMYe=dU?) z&A;Z%^<~c7;-5M5KXc}P=FI=hng5wH|1)R)XU_c3ocW(Q^FMRu|6k0RT{36BHt(*y zr}F0gFXqfAm@_x~w>k49=FAKJhdFchf0;9X@z=8sO#nV09k&7AqY z{Jr^k`KQ#JIsexJPeE=$!-Crix)(fDFtXt3f>{L%3lmYy@0#5Ly3KIY7!ct(28Tu$c95$4QQ({tup@%r&5@oVC(m@~JJcVf=m zHGX%zSNxIq#Q0M(XP))foOxmVO_?*VjcS>F#={fV!zs;F1{KuTRYN|%6E_3Fq z|835EJ9FlHm^1fH4g71)JSsJYIrD_n6z0tHQ;XAc=Jn}0^T+=&XZ|5|T;|MYQZY4W zPF*SvFlR2Eo-c8g9w=rk#Ufh#8^Ml1hi-#AFEgoO|WbtI?%+Jf5`4#5O zON&<&zg7HR@dwPAKV;6lqxiGpJu+whwm4tr%n6w@pJ&eO`fJV{X3ktj=FGYO%Q^Fy zk_jb~WX`i@HMDN;95JyNxDN#$dezpngoiD?MECM8)G37gy|Fv2(@SD%P!7 zy<)Ut)ruJvLlyq0@Oy>x6-p`;S4dSTs*tQusA&}v6@IO7uELoLzf?F~;pYmcD*RO8 zWQBqXCn_ANaHzt8%%?Rib1F^AoXp3kXp-6lnGJ4ESk^c5zRa$fcVym{*(vi@^%a)goOx4P?K9i) zd0V<6vrT$gOFp|MvjrcorsmWvvuS3N%&RgR;VUy6^07f?{mgoqk<808%gQy{nIV=2 zGXt5vj0+jRYg)$nj8sM<eYkbFRruQQHQ^TFtHaI1&BBetjlx%k z8-(kGYldrttB0$FtA?wDv%{6SbcJyF@D<^*;WFXU;mg9T8T*ob-cH#`yU@k825TWGVr$=+yxV83s#x8JkZ+3(tG?RV@o_9}a&y~18@zhS>_ zzh*DC7umDy8TNF0g8hU&+J3|yVGp;5+Jo%=_I>uf_C5C9_FeWJb{G40`!@R)yMukB z-Og@n-(X*7x3aIbTiPw`tL2;Cp* zAL}T9SVi~ zA#d?IG_1K3lB+kNa_c2B#9-QDhHcV%zsY)UnNXKJ$7M8o~rZz6Vt{*z(b>_2|n%RXeW|7h$# z7eeRRe^Q}jC=rT<&aoGr4xI{}4CRN8hw|8$j)V@gHysQeV2|1t+8f%#UbQQOwa1MNjR*}74GRrnpL-xQfIY5ns1JKw&rpw0_fWS`*HD-AzNhxQ_Mx_F?+djG zwPeq0&VJXJJ+EP?eyDD!cBp2kdMFyI8mbbCgt9^vL*+x|LS;jxL#09)?3Y2cUxwTv zD`bQ;_RkCKp(VjoFd0k)W5IL5Gr`lrQ|z(%?6G;lqroG=!|b;Qg9n29gZqMegL{Iz zgS&z|gFAxTgWG~zgPVgJgBybDgX@B8gKL7TgR6oogUf@VQ&gOh?2gX4qaf@6cDgQJ2YgCl~&gTsPDf`ft&1P28B2m1#5 z1bYR0273g%2fGEk2D=112Rj8j25$~_2(}Nl4Ymok4z>!m47Lb14>k=p4mJul4Au|U z4b~3U3|0?DgH?l7f{|cWuwt-$uw1Zguyn9gFe7LOgF%1L8*~S)pb^vp7Xudp=L02y zR3I5h1Y&`6fir>Afm4B#f&9SnKwjWz;7H(b;85UT;6Px1U|(QwU{7FoU{_#gU`Jqk zU|V2oU~^z&U_)SiU|nEsU`=3kU{zpcV0mC!U}<1UU~ynkU}0cEV18h3U`}9mU}j)O zV0vI$U}|7;U{YXWV0>U)U~FJ?U{qjaU_@YeU|3*CU{K(Jz<@yiK;J;0K(9d0K#xH8 zK(|2GK$k%0K&L>*z|DaUf%bv6fi{8GfmVT*ffj-0fu@1RfkuIbf%<{Ef!cwZf$D*1 zplYB>AQH$5R1B04lnay%ln#^%WCZL$FyIe(1MYwoFanzYqW^;byuZYs@+bWXf6RZ* zf5v~>f69N-pYK2J&+{MkAMqddAMzjcAMo$@@AL2V@A2>U@AB{T@9=N;Z}V^UZ}xBW zZ}6}8uk)|rr@9Xd5@8$35@8R$6@8<97@8a+5 z@8s|3zuDix-`?NW-^SnC-^$<8-@@PA-_+mO-^kz4U*BKXU)x{PU)>+|SM^u%NBmj- zivIHca{jXZ(*9EZ48QFU`u%>d-|e^jhF|kt^j+|s_m%ikzN9bVi}}v^&iGFIPWevy z@_omBdA_5*Bfi7FL%xH)1HS#feZIZEJ-*$(UA~>Z9lq_pZN9C(&AyGk4Ziihb-uN} zHNMrpRlb$J<-TRUrM@M;#lA(pg}w#8`M$ZnIlkGxnZ6mm>Aq>cslLg+Nxq4`@xF1s zvA)s1QNEGB5x(KRVZI^0LB0ok1AP5`eSLj=y?i}=J$&7L-F#hrU3{H=oqQdAH~TvH z+WXr2+W1=gTKQV~TKJm#n)(|18u=Rf>ig>YYWr&Xs{5k8s=g||h%d`m(O2GA&R5n~ z+E>b#;j?`~pWo;8xqX(;@M+$Q-V5II-V$%hoAf5UG4DC=8SiQDDep;dzW2B{&wJE+ z#CzC#$a~Oxz`NhO&%4*V$Gh9R%e&LN!@J$P&AZjR*}KuZ!MonO&b!vT#=F|P%Dd9L z+`G)X)VsvH*t^KP(7V7p-#gbk$2;3Q(>udE-8;=Y)jQcc$ve?I-aF1a);roe$~)3K z!aLkM%sa$8$oqhIfVaQ5ueXo4m$#?4hqt@8o42dCi?_44leeSyW^V^?dv9BB8*giG zD{o703vY98Q*UE$BX2`*eQ#ZFZEsC)b#K&L)mz0I@n(4|ddqvudCPiBdrNsUytX&! z^?SWux7YF-Ud?mSbHQ`oQ{qW^lAeSo<~ip%<2mg)ntcy@bsd3Jhsc(!}CdA52sdp3GDc-DK?dDeQ?cvgE>c~*LsdzN{YdX{(= zdlq>XdKP%*d**uPcxHQMdS-a0d!~7&dM0}&c_wc#@bvfe_4M)d^7Qod@O1Zd^K|ue@pSfd@^tjv?CIcX?`i94<7w?_S^q0y_j>m__geQF_iFbl_e%G2_cHfV_Y(JF_agT~_X78P z_gwcJ_iXn}_YC)R_cZrZ_hk1Z_eA%2_c-@h_h|Ph_el2$_i*zwP1>$K~X>!d5+b=;NbI_f&&I_x^+I_Ns!+V9%u+Uwfm+U?rq+UeTi z+V0xs+UnZu+UVNgTJK_x;9BEa&2_AFEq5*Bwj-{^u0^het_807uDRT%m-|_Td)Au! zlkgbauU>rbX1;qPYhkQ=64$Rv*?qOVWAFiVtmz%+ToXomkAFQ|Eh9N zq8y{X-nGoN)U|}QsFv4ed4yXSXTQq~e;j>@B7 z&c}+fY&I%ql~(4wl?^g-8MBd+`omcwK|W^|;QZkX7iN6wkGa_y|NLmp;mn%p>NBe` z=dv6XF(WZoidu5M4%gybv&nqII7~a#*PK7j_ZsW}{9KKk!%`w+mwzoanHB%}#~jOL zI{ft+_sp35=V$*K22J?A?Ic541%#GFkGy75>V&J0qE<=E;$Jt2$QjQ$oF857Z%1&~`r9$w4LJ3Dw)SfJywvA8A9bFbiTVoXp1vh# zntu2n=aBA^Gf17YNB=x;^eAVE{w!yOawaHeefl|{vpnZ4<{g}U*`0GKM{)k-ol9K0X?C|%dKDA1@ zdOBtGZ(^vFYf>$8Q|)wWd7X4##=7a$@_Ol%>r*pQ|E2}6)RJ1xJCKrc3+hgn(cS6P za`pUIDc_S$S-rlgl{c}89_r3#F^qbgNotlp_sDUVC1{6sqC@#&N&q*I=lPWj1n%9GM5Kb1~-aysQH>6E9YQ+_&~ z^0aiy&!khHo=*AMbjmZ*Df3RWq&zd7@~m{qv(qU*pH6vBI%V~5-Kdo3rc<7mPI-Ph z6Bkir@Sbg@+;|-7pGHxHJ$R3bjq(e$6E{9($#b2P&&2zyL8Hj(;!$ zbjrulDIZU#d?KB4emdoXbjl~wDgTsC`BXaPpVKLyPN)1!I^{Fzl+UJ9K9^4U*L2FU zbjtB`%87K!h3S-&>6DAoDW}pY7dx5i{+6Uu%YRF!d_JA>@9C5;q*MMQo$|$W%9qk% z9jes6qyv@Mz$7*?i7iZG7bdYAlh}hv?8PMZVG{c>i36C#K}_NhCb5l49L6Nhz$DJZ zBrb(Xd>JNjX-wiWn8aluyB#vMbXJZmq z!6eSXB(91{Tn&>rib50kh*Ch`54!~-yi2VxRGfJyuyCh;Il;=!22LokVlViFI-Bz_2!csM5U!@ia{0XE2GUV-i1$Njw9S_&H4CnV7`0Fo|bl5w=juUV-mlONxTM=_#I5*wV1^3ViK>zBz_N* zcs(ZZ`&z z#U%D&68kZU1DM1?OyUqGv5iR_#w5>a876UQOyV+_#APvwFUKS<| zCUJR8;tH6=6)}k`VG?Iy5?96~j$jgJV-i=vB+kJku8K)q4U;&ENt}yGTpg3R1}1S$ zOyXLY#I-Sr>tGVs#U!qWNn9V3xB(`y+HXjFB_?qrOya9Bi5p`QH^C%sib>oIlejr1 z@zt2bEij3%!6a^pNqj9PaVt#X>oAF1V-jDFN!$jL_y$bkwwT22Fp1k^65ohP+yRsL zCQRa+F^O-%B<_ewd@Ck#CrskoFo`>365ozV+y#^P4ou>%n8bHt5_iKSz6+DMJ0|hn zn8ZCWiSNNA?uki!FD7v>Oyb^{#C9eh8CzI41GKn8YJ6i66lv9*If(C?@eJOyb8diAQ4+kHI7! zi%I-ACh<5-;wLbP$72#tz$BiCN&F-x@gz**r!a{pV-ionB%X>%{4^%^N&G1$@h(i_&oGI1V-kOkNxTP>_zO(p zy_m#bViNDeB>oDMct0lb*OdCh>2W#OE=If5#-gfJyuZChlCh--R#N{!GD_{~=#3ZhSNt}gATp5!%f=Qf> zNn8b!I0uusDkgC?OyVdeaV{otbxh(Kn8Ylz$Cr~lei@&@wJ%5tuTqN!z6Bv zNqjvfaT`qH8!(C6ViLE*ByNvMd?O}t2TbCdFo|!*B)$ccxFaUiF;!b_rWB- z50khrCUHMZ;{KS#_hS+dz$6}sN&EmN@q?JegD{B)V-gR+Bp!-MJPecgAxz@on8Xib z5|6+neguj7hu*llT=(;>DQ6uVNA}!6beSlXxj6 z@#~nx%P@)Gz$9LdNxTA+cqJzBo0!C_Fp1y7Bwme4{5B@>8cgDMFp1Y<62FT{ybhE2 zJxt>Dn8fd65^umH{s5DBBPQ`COybR$#9J_lw_*~1h)KK+llUV{;_aBkA7c{lz$E?z zlXxd4@u!%?yD*7A!zA8~N&Gn`@g7X#FEEMsViJFeNxTn}_$y4}{g}jGV-g?0B>o1I z_#h_nx0u9-Fp0mzBtDEu{5>Y|5lrGAFo}<1690%voQFw#43qdcCh-YO;(Scv0!-qQ zn8ZI}5}(2({uz__G$!#cn8ar=iO*sZpTi{n6_YrINgT%{PGAxjViG4YiHk6aQ<%iX zn8YQR#J^z@pT{Kr9h3M1Ch;Gb#1}D%FJV%)7*t{%li0u{HZh60u%*61eXq+&?8YSa zU=n*ViG7&FeoW#3CUFpxID|=TV-klki8C;XGck!vVG>`4Nn9F}xC|z7Sxn-~F^S7z z5?_HyTpp9S0w!@qOyWwI#95fcl`)AUn8ewb#8ohfb1;dkViH%wB#vSd=VB69$0V+S zNn8_?xE3aHZA{`in8bB4iR)n!*T*DofJvoFllV4F;?9`Fw__4_!6d!|lejA;@tv5&-7tyo!X)mF zNqjdZaSu%5doYQ6ViMnrN!$yQxHl$oA57x=Fp2wO68FO-?vF`)KPK@2OyYr<#1CK+ zKZr>@2$Og)Ch-tV;-Q$t!!U^-!XzG!N&GM-@d!-fM=*&;ViG@!NjwUZ_%Tf4(U`i6>$bKZ!{^36uCKOybFy#8WVdr(zO6jY&KWllU1- z;^~;g&tekKz$AVSlXxa3@hnW@*_g!7V-nB7Bz^&tcrGUKJWS&Gn8Yt)5--3cehHI! zAtv$5n8b@PiC@7aUW`fnDkkv~OybutiI-v$zm7?~43qc`OycF3#49j~S7H*siAlT) zllU!6;?oAGm!z5mhN&G%0@dixd4={;0ViIq{B;Jfk zyakhZD<<)Wn8e#Ki9f<5-i}H9F(&a2OyW;4iFaZWe~L-G3zPUWOyb>`#Ghjl@4+Pg z0+Vkn8ejEiKCdrxtPS&F^Own64%5eu7ycl8i6!E;$6#e|a?)R6+~K5-qpDKMNo|WN?2jt-K1B}C zZD>36xRd%FOirPb`dwpAiIY0kHs?1db*yd9 z?@l`FCg-A)Iwqqk+d`$@!>zX1$>8xt^|RH@^ls_k=9#|l^DI#qJ{3z(GE zZl_Yme?)aBb-ZAdb*XY)#mM?pu?n>)&k2?BI3uq;D)n5AR&p}@j1edGcTbf4MWvp% z(HtlB+83?nq<&tEvhG#tXOSq+U6uNID_Yk{{hSo7=cInNh_WB3)X#;{W=`sOujsW- z>i6i;R!&AfV{0e%yY?vCUZsA=5WU+;{VpNe!^s@ac#o6%{Y12w*HnhO{kcx+_uo}dZ z=46~^TfRDE^{)@FuvhrsQa(B4XNV~qAQ%#@dweBPHO**zUd@hi^=$v zaf_3&lX0t)`rT4=hm-7+pI}ly7e>|PNd0UP{n5#YGOEWw>SxxddJLrA&y5y4xp4bMH5SUm<(&x_m_ zoHP&PTqpIqojcFTWZTqei2WCDmsa)Vp980txit* zvznI2Hp%0$YF9FH9V(6M&STxGw8o6QR^(lWn=sx*BXM)ar-<9px-oJ;^XB93j0>DJ zUMKQaIBEAVu5!|PGOlydc%8_5-%0DmxXDT5apkd}sa)!|4moK&_B{4mmBx0@J3;xF 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

23L^$xgq7GrOZm8+&isZ9 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⁣slr+81%9` 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�>3qlHGo}CeJoO~lToY{O;*)<> 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

92;;gwO22U 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 literal 0 HcmV?d00001 diff --git a/FinalProject/mainwindow.qrc b/FinalProject/mainwindow.qrc index 89c5a99..0a9d314 100644 --- a/FinalProject/mainwindow.qrc +++ b/FinalProject/mainwindow.qrc @@ -3,4 +3,8 @@ fragmentshader.fs vertexshader.vs + + font_awesome_6_regular_free.otf + font_awesome_6_solid_free.otf + diff --git a/FinalProject/scrolllist.cpp b/FinalProject/scrolllist.cpp new file mode 100644 index 0000000..e69de29 diff --git a/FinalProject/scrolllist.h b/FinalProject/scrolllist.h new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/FinalProject/scrolllist.h @@ -0,0 +1 @@ +#pragma once From 6739cef6ec151a206f73ef46ccd934610b69fb00 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 11:16:07 +0800 Subject: [PATCH 09/26] [UI] Add rounded corner widget --- FinalProject/roundedcornerwidget.cpp | 98 ++++++++++++++++++++++++++++ FinalProject/roundedcornerwidget.h | 38 +++++++++++ 2 files changed, 136 insertions(+) create mode 100644 FinalProject/roundedcornerwidget.cpp create mode 100644 FinalProject/roundedcornerwidget.h diff --git a/FinalProject/roundedcornerwidget.cpp b/FinalProject/roundedcornerwidget.cpp new file mode 100644 index 0000000..7bbfaa1 --- /dev/null +++ b/FinalProject/roundedcornerwidget.cpp @@ -0,0 +1,98 @@ +#include +#include + +#include "roundedcornerwidget.h" + +RoundedCornerWidget::RoundedCornerWidget(QWidget* parent) : QWidget(parent) { + // Create main layout and main widget + _mainLayout = new QVBoxLayout(this); + _mainLayout->setContentsMargins(0, 1, 1, 1); + _mainLayout->setSpacing(0); + _mainWidget = new QWidget(this); + _mainWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + _mainLayout->addWidget(_mainWidget); + _mainWidget->show(); + setLayout(_mainLayout); +} + +RoundedCornerWidget::~RoundedCornerWidget() { +} + +void RoundedCornerWidget::showEvent(QShowEvent* event) { + // Call parent show event + QWidget::showEvent(event); + + // Initialize widget UI + initializeWidgetUI(); + + // Set initialized state + _initialized = true; +} + +void RoundedCornerWidget::initializeWidgetUI() { + // Set up border widget + _borderWidget = new QWidget(this); + _borderWidget->setObjectName("borderWidget"); + QString borderWidgetStyleSheet = + "QWidget#borderWidget{background-color:#00FFFFFF;border:2px solid " + _borderColor.name() + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"; + _borderWidget->setStyleSheet(borderWidgetStyleSheet); + _borderWidget->setAttribute(Qt::WA_TransparentForMouseEvents); + _borderWidget->move(0, 0); + _borderWidget->resize(width(), height()); + _borderWidget->show(); + + // Create a round cornered mask + QPainterPath path; + path.addRoundedRect(_mainWidget->rect(), _cornerRadius, _cornerRadius); + QRegion region(path.toFillPolygon().toPolygon()); + _mainWidget->setMask(region); +} + +void RoundedCornerWidget::resizeEvent(QResizeEvent* event) { + // Resize widget border + if (_borderWidget != nullptr) { + _borderWidget->move(0, 0); + _borderWidget->resize(width(), height()); + } + + // Resize window mask + if (_mainWidget != nullptr) { + QPainterPath path; + path.addRoundedRect(_mainWidget->rect(), _cornerRadius, _cornerRadius); + QRegion region(path.toFillPolygon().toPolygon()); + _mainWidget->setMask(region); + } +} + +void RoundedCornerWidget::setCornerRadius(int radius) { + // Set corner radius + _cornerRadius = radius; + + // Modify the corner radius in the current style sheet of the border widget + QString styleSheet = _borderWidget->styleSheet(); + styleSheet.replace(QRegularExpression("border-radius:\\d+px;"), + QString("border-radius:%1px;").arg(_cornerRadius)); + _borderWidget->setStyleSheet(styleSheet); + + // Reset the mask of the main widget + QPainterPath path; + path.addRoundedRect(_mainWidget->rect(), _cornerRadius, _cornerRadius); + QRegion region(path.toFillPolygon().toPolygon()); + _mainWidget->setMask(region); +} + +void RoundedCornerWidget::setBorderColor(QColor color) { + // Set color + _borderColor = color; + + // Modify the border color in the current style sheet of the border widget + QString styleSheet = _borderWidget->styleSheet(); + styleSheet.replace(QRegularExpression("border:2px solid #\\w+;"), + QString("border:2px solid %1;").arg(_borderColor.name())); + _borderWidget->setStyleSheet(styleSheet); +} + +QWidget* RoundedCornerWidget::mainWidget() const { + return _mainWidget; +} diff --git a/FinalProject/roundedcornerwidget.h b/FinalProject/roundedcornerwidget.h new file mode 100644 index 0000000..6c889d1 --- /dev/null +++ b/FinalProject/roundedcornerwidget.h @@ -0,0 +1,38 @@ +#pragma once + +#include +#include +#include + +class RoundedCornerWidget : public QWidget { + + Q_OBJECT + +public: + RoundedCornerWidget(QWidget* parent = 0); + ~RoundedCornerWidget(); + +protected: + // UI settings + int _cornerRadius = 15; + QColor _borderColor = QColor(255, 255, 255); + + // UI elements + QWidget* _mainWidget = nullptr; + QVBoxLayout* _mainLayout = nullptr; + QWidget* _borderWidget = nullptr; + + // Initialization mark + bool _initialized = false; + void initializeWidgetUI(); + + // UI events + virtual void showEvent(QShowEvent* event) override; + virtual void resizeEvent(QResizeEvent* event) override; + +public: + // Public APIs + void setCornerRadius(int radius); + void setBorderColor(QColor color); + QWidget* mainWidget() const; +}; From b198e4d7c53e518635cf42943ea202155177fae9 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 11:17:09 +0800 Subject: [PATCH 10/26] [UI] Add abstract base class PageWidget - Used for creating pages suitable for side bars - stage on and stage off animation --- FinalProject/pagewidget.cpp | 67 +++++++++++++++++++++++++++++++++++++ FinalProject/pagewidget.h | 39 +++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 FinalProject/pagewidget.cpp create mode 100644 FinalProject/pagewidget.h diff --git a/FinalProject/pagewidget.cpp b/FinalProject/pagewidget.cpp new file mode 100644 index 0000000..e836091 --- /dev/null +++ b/FinalProject/pagewidget.cpp @@ -0,0 +1,67 @@ +#include +#include + +#include "pagewidget.h" + +PageWidget::PageWidget(QWidget* parent) : QWidget(parent) { + // Construct and set main layout + _stretchLayout = new QVBoxLayout(this); + _stretchLayout->setContentsMargins(0, 0, 0, 0); + _stretchLayout->setSpacing(0); + setLayout(_stretchLayout); + + // Construct content widget + _contentWidget = new QWidget(this); + _stretchLayout->addWidget(_contentWidget); + + // Add opacity effect to real content + _pageOpacityEffect = new QGraphicsOpacityEffect(_contentWidget); + _pageOpacityEffect->setOpacity(0); + _contentWidget->setGraphicsEffect(_pageOpacityEffect); +} + +PageWidget::~PageWidget() {} + +void PageWidget::onStage() { + // Move up and fade in + QParallelAnimationGroup* onStageAnimation = new QParallelAnimationGroup(_contentWidget); + QPropertyAnimation* moveAnimation = new QPropertyAnimation(_contentWidget, "pos"); + QPropertyAnimation* fadeInAnimation = new QPropertyAnimation(_pageOpacityEffect, "opacity"); + moveAnimation->setDuration(300); + moveAnimation->setEasingCurve(QEasingCurve::OutCubic); + moveAnimation->setStartValue(_contentWidget->pos()); + moveAnimation->setEndValue(_originPagePosition); + fadeInAnimation->setDuration(300); + fadeInAnimation->setEasingCurve(QEasingCurve::OutQuad); + fadeInAnimation->setStartValue(_pageOpacityEffect->opacity()); + fadeInAnimation->setEndValue(0.999); + onStageAnimation->addAnimation(moveAnimation); + onStageAnimation->addAnimation(fadeInAnimation); + onStageAnimation->start(QAbstractAnimation::DeleteWhenStopped); + + // Show page + _contentWidget->show(); +} + +void PageWidget::offStage() { + // Move down and fade out + QParallelAnimationGroup* offStageAnimation = new QParallelAnimationGroup(_contentWidget); + //QPropertyAnimation* moveAnimation = new QPropertyAnimation(_contentWidget, "pos"); + QPropertyAnimation* fadeOutAnimation = new QPropertyAnimation(_pageOpacityEffect, "opacity"); + //moveAnimation->setDuration(300); + //moveAnimation->setEasingCurve(QEasingCurve::OutCubic); + //moveAnimation->setStartValue(_contentWidget->pos()); + //moveAnimation->setEndValue(_originPagePosition - QPoint(0, 100)); + fadeOutAnimation->setDuration(300); + fadeOutAnimation->setEasingCurve(QEasingCurve::OutQuad); + fadeOutAnimation->setStartValue(_pageOpacityEffect->opacity()); + fadeOutAnimation->setEndValue(0); + //offStageAnimation->addAnimation(moveAnimation); + offStageAnimation->addAnimation(fadeOutAnimation); + offStageAnimation->start(QAbstractAnimation::DeleteWhenStopped); + + // Connect animation finished signal to hide page + connect(offStageAnimation, &QParallelAnimationGroup::finished, [=]() { + _contentWidget->hide(); + }); +} \ No newline at end of file diff --git a/FinalProject/pagewidget.h b/FinalProject/pagewidget.h new file mode 100644 index 0000000..1de30fb --- /dev/null +++ b/FinalProject/pagewidget.h @@ -0,0 +1,39 @@ +#pragma once + +#include +#include + +#include "pushbutton.h" + +class PageWidget : public QWidget +{ + + Q_OBJECT + +public: + PageWidget(QWidget* parent = 0); + ~PageWidget(); + +protected: + // Page layout and content widget (which holds the actual page elements) + QVBoxLayout* _stretchLayout = nullptr; + QWidget* _contentWidget = nullptr; + + // Button widgets for side bar + PushButton* _iconButton = nullptr; + PushButton* _textButton = nullptr; + + // Opacity effects + QGraphicsOpacityEffect* _pageOpacityEffect = nullptr; + + // Page position memory + QPoint _originPagePosition = QPoint(0, 0); + +public: + virtual PushButton* getPageIconButton(QWidget* context) = 0; // provide a push button with only an icon + virtual PushButton* getPageTextButton(QWidget* context) = 0; // provide a push button with an icon and a description text + +public: + void onStage(); // provide an on stage animation when the page is selected + void offStage(); // provide an off stage animation when the page is deselected +}; \ No newline at end of file From ea4c3dcc7eedfd8b3b1ad7e89aa6e51a71782a61 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 11:17:58 +0800 Subject: [PATCH 11/26] [UI] Create EditorPage - Adjusted Sceneviewer for embedding --- FinalProject/editorpage.cpp | 113 +++++++++++++++++++++++++++++++++++ FinalProject/editorpage.h | 42 +++++++++++++ FinalProject/sceneviewer.cpp | 40 +++++++++++-- FinalProject/sceneviewer.h | 7 +++ 4 files changed, 198 insertions(+), 4 deletions(-) create mode 100644 FinalProject/editorpage.cpp create mode 100644 FinalProject/editorpage.h diff --git a/FinalProject/editorpage.cpp b/FinalProject/editorpage.cpp new file mode 100644 index 0000000..47abe62 --- /dev/null +++ b/FinalProject/editorpage.cpp @@ -0,0 +1,113 @@ +#pragma once + +#include + +#include "editorpage.h" + +EditorPage::EditorPage(QWidget* parent) : + PageWidget(parent) +{ + _contentWidget->setMouseTracking(true); + + // Construct title layout + _titleLayout = new QVBoxLayout(_contentWidget); + _titleLayout->setContentsMargins(28, 46, 28, 28); + _titleLayout->setSpacing(18); + _titleLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); + _contentWidget->setLayout(_titleLayout); + + // Construct title + _titleLabel = new QLabel("EDITOR", _contentWidget); + _titleLabel->setFont(_titleFont); + _titleLayout->addWidget(_titleLabel); + _titleLabel->show(); + + // Construct main layout + _mainWidget = new QWidget(_contentWidget); + _mainWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + _mainLayout = new QHBoxLayout(_mainWidget); + _mainLayout->setContentsMargins(0, 0, 0, 0); + _mainLayout->setSpacing(16); + _mainWidget->setLayout(_mainLayout); + _titleLayout->addWidget(_mainWidget); + _mainWidget->show(); + + // Generate scene viewer + _sceneViewerContainer = new RoundedCornerWidget(_mainWidget); + _sceneViewerContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + _sceneViewerContainerLayout = new QVBoxLayout(_sceneViewerContainer->mainWidget()); + _sceneViewerContainerLayout->setContentsMargins(0, 0, 0, 0); + _sceneViewerContainerLayout->setSpacing(0); + _sceneViewerContainer->mainWidget()->setLayout(_sceneViewerContainerLayout); + _sceneViewer = new SceneViewer(_sceneViewerContainer->mainWidget()); + _sceneViewerContainerLayout->addWidget(_sceneViewer); + _sceneViewer->show(); + _mainLayout->addWidget(_sceneViewerContainer); + _sceneViewerContainer->show(); +} + +EditorPage::~EditorPage() {} + +PushButton* EditorPage::getPageIconButton(QWidget* context) { + // Check for existed button + if (_iconButton != nullptr) { + return _iconButton; + } + + // Generate new icon button + _iconButton = new PushButton(nullptr, context); + _iconButton->setMargin(20, 18, 16, 18); + _iconButtonLabel = new QLabel(_iconButton); + _iconButtonLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); + QFont iconButtonFont("Font Awesome 6 Free Solid", 12); + iconButtonFont.setStyleStrategy(QFont::PreferAntialias); + _iconButtonLabel->setFont(iconButtonFont); + _iconButtonLabel->setText("\uf304"); // set icon to "pen" icon + _iconButtonLabel->setAlignment(Qt::AlignLeft); + _iconButton->setChildWidget(_iconButtonLabel); + + // Return newly generated icon + return _iconButton; +} + +PushButton* EditorPage::getPageTextButton(QWidget* context) { + // Check for existed button + if (_textButton != nullptr) { + return _textButton; + } + + // Generate new text button + _textButton = new PushButton(nullptr, context); + _textButton->setMargin(20, 18, 16, 18); + _textButtonWidget = new QWidget(_textButton); + _textButtonLayout = new QHBoxLayout(_textButtonWidget); + _textButtonLayout->setContentsMargins(0, 0, 0, 0); + _textButtonLayout->setSpacing(8); + _textButtonWidget->setLayout(_textButtonLayout); + + // Generate text button contents + _textButtonIcon = new QLabel(_textButtonWidget); + QFont textButtonFont("Font Awesome 6 Free Solid", 12); + textButtonFont.setStyleStrategy(QFont::PreferQuality); + _textButtonIcon->setFont(textButtonFont); + _textButtonIcon->setText("\uf304"); // set icon to "pen" icon + _textButtonIcon->setAlignment(Qt::AlignLeft); + + _textButtonLabel = new QLabel(_textButtonWidget); + _textButtonLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); + _textButtonLabel->setText("Editor"); + _textButtonLabel->setAlignment(Qt::AlignLeft); + + // Add text button contents to layout + _textButtonLayout->addWidget(_textButtonIcon); + _textButtonLayout->addWidget(_textButtonLabel); + _textButtonIcon->show(); + _textButtonLabel->show(); + + // Set text button child widget + _textButton->setChildWidget(_textButtonWidget); + _textButtonWidget->show(); + + // Return newly generated text button + return _textButton; +} diff --git a/FinalProject/editorpage.h b/FinalProject/editorpage.h new file mode 100644 index 0000000..ac2a645 --- /dev/null +++ b/FinalProject/editorpage.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include +#include + +#include "pagewidget.h" +#include "sceneviewer.h" +#include "roundedcornerwidget.h" + +class EditorPage : public PageWidget { + + Q_OBJECT + +public: + EditorPage(QWidget* parent = 0); + ~EditorPage(); + +private: + // Push button icons + QLabel* _iconButtonLabel = nullptr; + QWidget* _textButtonWidget = nullptr; + QHBoxLayout* _textButtonLayout = nullptr; + QLabel* _textButtonIcon = nullptr; + QLabel* _textButtonLabel = nullptr; + + // UI elements + QVBoxLayout* _titleLayout = nullptr; + const QFont _titleFont = QFont("DengXian", 26, QFont::ExtraLight); + QLabel* _titleLabel = nullptr; + + QWidget* _mainWidget = nullptr; + QHBoxLayout* _mainLayout = nullptr; + + RoundedCornerWidget* _sceneViewerContainer = nullptr; + QVBoxLayout* _sceneViewerContainerLayout = nullptr; + SceneViewer* _sceneViewer = nullptr; + +public: + virtual PushButton* getPageIconButton(QWidget* context) override; + virtual PushButton* getPageTextButton(QWidget* context) override; +}; diff --git a/FinalProject/sceneviewer.cpp b/FinalProject/sceneviewer.cpp index 2ddb15f..98198f8 100644 --- a/FinalProject/sceneviewer.cpp +++ b/FinalProject/sceneviewer.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "vbo.h" #include "vao.h" @@ -17,6 +18,7 @@ using std::vector; SceneViewer::SceneViewer(QWidget* parent) : QOpenGLWidget(parent) { + // OpenGL initialize QSurfaceFormat format; format.setProfile(QSurfaceFormat::CoreProfile); format.setVersion(4, 3); @@ -70,7 +72,7 @@ void SceneViewer::initializeGL() { Renderable backpack(backpackModel); _objects.push_back(backpack); - _camera.setPosition(glm::vec3(0.0f, 0.0f, 5.0f)); + _camera.setPosition(glm::vec3(0.0f, 0.0f, 10.0f)); } void SceneViewer::resizeGL(int w, int h) { @@ -78,6 +80,8 @@ void SceneViewer::resizeGL(int w, int h) { } void SceneViewer::paintGL() { + Logger::debug("Repainting"); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); _shaderProgram.bind(); @@ -106,7 +110,9 @@ void SceneViewer::mousePressEvent(QMouseEvent* event) { } void SceneViewer::mouseMoveEvent(QMouseEvent* event) { - Logger::debug("Mouse moved with offset: " + std::to_string(event->x() - _lastMousePosition.x()) + ", " + std::to_string(event->y() - _lastMousePosition.y())); + if (event->buttons() != Qt::NoButton) { + Logger::debug("Mouse moved with offset: " + std::to_string(event->x() - _lastMousePosition.x()) + ", " + std::to_string(event->y() - _lastMousePosition.y())); + } // Check the type of button pressed switch (event->buttons()) { case Qt::LeftButton: { @@ -152,7 +158,7 @@ void SceneViewer::mouseMoveEvent(QMouseEvent* event) { // Update the last mouse position _lastMousePosition = event->pos(); // Update the view - update(); + parentWidget()->update(); } void SceneViewer::wheelEvent(QWheelEvent* event) { @@ -165,5 +171,31 @@ void SceneViewer::wheelEvent(QWheelEvent* event) { Logger::debug("New camera position: " + std::to_string(_camera.position().x) + ", " + std::to_string(_camera.position().y) + ", " + std::to_string(_camera.position().z)); Logger::debug("New center position: " + std::to_string(_rotateCenter.x) + ", " + std::to_string(_rotateCenter.y) + ", " + std::to_string(_rotateCenter.z)); // Update the view - update(); + parentWidget()->update(); +} + +void SceneViewer::showEvent(QShowEvent* event) { + // Call show event of super class + QOpenGLWidget::showEvent(event); + + if (_initialized) { + return; + } + + //// Create mask for rounded corner + //QPainterPath mask; + //mask.addRoundedRect(rect(), _cornerRadius, _cornerRadius); + //setMask(mask.toFillPolygon().toPolygon()); + + _initialized = true; +} + +void SceneViewer::resizeEvent(QResizeEvent* event) { + // Call resize event of super class + QOpenGLWidget::resizeEvent(event); + + //// Create mask for rounded corner + //QPainterPath mask; + //mask.addRoundedRect(rect(), _cornerRadius, _cornerRadius); + //setMask(mask.toFillPolygon().toPolygon()); } diff --git a/FinalProject/sceneviewer.h b/FinalProject/sceneviewer.h index a854b32..5d2460e 100644 --- a/FinalProject/sceneviewer.h +++ b/FinalProject/sceneviewer.h @@ -34,6 +34,10 @@ private: // User Interaction flags section--------------------- QPoint _lastMousePosition; Renderable* _selectedObject = nullptr; + + // UI interface control + const int _cornerRadius = 10; + bool _initialized = false; public: SceneViewer(QWidget* parent = 0); @@ -50,4 +54,7 @@ protected: virtual void mouseMoveEvent(QMouseEvent* event) override; virtual void wheelEvent(QWheelEvent* event) override; + // UI update events + virtual void showEvent(QShowEvent* event) override; + virtual void resizeEvent(QResizeEvent* event) override; }; \ No newline at end of file From 75f3eef152406bfd247613fb0014b3fae0dc4157 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 11:18:28 +0800 Subject: [PATCH 12/26] [UI] Update main appearance - Rounded corner window - Side bar - Rounded corner view port --- FinalProject/framelesswindow.cpp | 40 +++++++------- FinalProject/framelesswindow.h | 14 ++--- FinalProject/main.cpp | 10 +++- FinalProject/mainwindow.cpp | 94 +++++++++++++++++++++++++++----- FinalProject/mainwindow.h | 26 ++++++++- FinalProject/modelselector.h | 11 ++++ FinalProject/modelsetter.h | 2 + 7 files changed, 152 insertions(+), 45 deletions(-) diff --git a/FinalProject/framelesswindow.cpp b/FinalProject/framelesswindow.cpp index c23f88e..8bcfbc0 100644 --- a/FinalProject/framelesswindow.cpp +++ b/FinalProject/framelesswindow.cpp @@ -8,13 +8,12 @@ #define MAX_MOUSE_MOVEMENT 300 -FramelessWidget::FramelessWidget(int cornerRadius, unsigned int attributes, QWidget* parent) +FramelessWindow::FramelessWindow(int cornerRadius, unsigned int attributes, QWidget* parent) : _cornerRadius(cornerRadius), _attributes((LUI_WINDOW_ATTRIBUTES)attributes), QWidget(parent) { setAttribute(Qt::WA_TranslucentBackground); setWindowFlags(Qt::FramelessWindowHint); setMouseTracking(true); - setFocusPolicy(Qt::StrongFocus); setFocus(); // Create and properly set real displayed window widget @@ -79,33 +78,33 @@ FramelessWidget::FramelessWidget(int cornerRadius, unsigned int attributes, QWid // Connect window control buttons connect(_minimizeBtn, &QPushButton::clicked, this, &QWidget::showMinimized); - connect(_maximizeBtn, &QPushButton::clicked, this, &FramelessWidget::controlWindowScale); + connect(_maximizeBtn, &QPushButton::clicked, this, &FramelessWindow::controlWindowScale); connect(_closeBtn, &QPushButton::clicked, this, &QWidget::close); } -FramelessWidget::FramelessWidget(QWidget* parent) - : FramelessWidget(0, LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_NO_ATTRIBUTES, parent) +FramelessWindow::FramelessWindow(QWidget* parent) + : FramelessWindow(0, LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_NO_ATTRIBUTES, parent) { } -FramelessWidget::FramelessWidget(int cornerRadius, QWidget* parent) - : FramelessWidget(cornerRadius, LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_NO_ATTRIBUTES, parent) +FramelessWindow::FramelessWindow(int cornerRadius, QWidget* parent) + : FramelessWindow(cornerRadius, LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_NO_ATTRIBUTES, parent) { } -FramelessWidget::FramelessWidget(unsigned int attributes, QWidget* parent) - : FramelessWidget(0, attributes, parent) +FramelessWindow::FramelessWindow(unsigned int attributes, QWidget* parent) + : FramelessWindow(0, attributes, parent) { } -FramelessWidget::~FramelessWidget() {} +FramelessWindow::~FramelessWindow() {} -void FramelessWidget::showEvent(QShowEvent* event) { +void FramelessWindow::showEvent(QShowEvent* event) { // Initialize window UI after window is shown initializeWindowUI(); } -void FramelessWidget::initializeWindowUI() { +void FramelessWindow::initializeWindowUI() { if (_initialized) { return; } @@ -130,12 +129,13 @@ void FramelessWidget::initializeWindowUI() { // Move button widget to the top right of the window widget _windowBtnWidget->move(_windowWidget->width() - _windowBtnWidget->width() - 18, 18); _windowBtnWidget->show(); + _windowBtnWidget->raise(); // Set initialized state _initialized = true; } -void FramelessWidget::resizeEvent(QResizeEvent* event) { +void FramelessWindow::resizeEvent(QResizeEvent* event) { // Resize window border if (_windowBorder != nullptr) { _windowBorder->move(_windowWidget->pos() - QPoint(1, 1)); @@ -152,7 +152,7 @@ void FramelessWidget::resizeEvent(QResizeEvent* event) { _windowBtnWidget->move(_windowWidget->width() - _windowBtnWidget->width() - 18, 18); } -void FramelessWidget::controlWindowScale() { +void FramelessWindow::controlWindowScale() { if ((_attributes & LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_DISABLE_MAXIMIZE) != 0) { return; } @@ -213,7 +213,7 @@ void FramelessWidget::controlWindowScale() { } } -void FramelessWidget::updateMouseState(QMouseEvent* event) { +void FramelessWindow::updateMouseState(QMouseEvent* event) { _mouseState = MOUSE_STATE_NONE; if ((_attributes & LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_DISABLE_RESIZE) != 0) { return; @@ -259,14 +259,14 @@ void FramelessWidget::updateMouseState(QMouseEvent* event) { } } -void FramelessWidget::mousePressEvent(QMouseEvent* event) { +void FramelessWindow::mousePressEvent(QMouseEvent* event) { if (event->button() == Qt::LeftButton) { _mousePressed = true; _lastMousePosition = event->globalPos().toPointF(); } } -void FramelessWidget::mouseReleaseEvent(QMouseEvent* event) { +void FramelessWindow::mouseReleaseEvent(QMouseEvent* event) { _mousePressed = false; QScreen* screen = QGuiApplication::screenAt(event->globalPos()); Logger::debug("Current screen geometry:"); @@ -278,7 +278,7 @@ void FramelessWidget::mouseReleaseEvent(QMouseEvent* event) { updateMouseState(event); } -void FramelessWidget::mouseMoveEvent(QMouseEvent* event) { +void FramelessWindow::mouseMoveEvent(QMouseEvent* event) { Logger::debug("Detected mouse move"); Logger::debug("[+] mouse global position : " + std::to_string(event->globalPos().x()) + ", " + std::to_string(event->globalPos().y())); Logger::debug("[+] window geometry: " + std::to_string(frameGeometry().x()) + ", " + std::to_string(frameGeometry().y()) + ", " + std::to_string(frameGeometry().width()) + ", " + std::to_string(frameGeometry().height())); @@ -345,11 +345,11 @@ void FramelessWidget::mouseMoveEvent(QMouseEvent* event) { } } -FramelessWidget::LUI_WINDOW_ATTRIBUTES FramelessWidget::getWindowAttributes() { +FramelessWindow::LUI_WINDOW_ATTRIBUTES FramelessWindow::getWindowAttributes() { return _attributes; } -void FramelessWidget::setWindowAttributes(unsigned int attributes) { +void FramelessWindow::setWindowAttributes(unsigned int attributes) { _attributes = (LUI_WINDOW_ATTRIBUTES)attributes; if ((_attributes & LUI_WINDOW_ATTRIBUTES::LUI_WINDOW_DISABLE_MINIMIZE) == 0) { _minimizeBtn->show(); diff --git a/FinalProject/framelesswindow.h b/FinalProject/framelesswindow.h index 072017f..bfebee1 100644 --- a/FinalProject/framelesswindow.h +++ b/FinalProject/framelesswindow.h @@ -6,7 +6,7 @@ #include #include -class FramelessWidget : public QWidget { +class FramelessWindow : public QWidget { Q_OBJECT @@ -21,13 +21,13 @@ public: }; public: - FramelessWidget(QWidget* parent = 0); - FramelessWidget(int cornerRadius, QWidget* parent = 0); - FramelessWidget(unsigned int attributes, QWidget* parent = 0); - FramelessWidget(int cornerRadius, unsigned int attributes, QWidget* parent = 0); - ~FramelessWidget(); + FramelessWindow(QWidget* parent = 0); + FramelessWindow(int cornerRadius, QWidget* parent = 0); + FramelessWindow(unsigned int attributes, QWidget* parent = 0); + FramelessWindow(int cornerRadius, unsigned int attributes, QWidget* parent = 0); + ~FramelessWindow(); -private: +protected: // UI control variables const int _cornerRadius = 0; const QColor _backgroundColor = QColor(251, 251, 251); diff --git a/FinalProject/main.cpp b/FinalProject/main.cpp index dd14077..12cef37 100644 --- a/FinalProject/main.cpp +++ b/FinalProject/main.cpp @@ -1,13 +1,21 @@ #include +#include +#include #include "mainwindow.h" +#include "logger.h" int main(int argc, char *argv[]) { - QApplication a(argc, argv); + QApplication a(argc, argv); // Create main application instance + + QFontDatabase::addApplicationFont(":/fonts/font_awesome_6_regular_free.otf"); // Add font awesome font to application + QFontDatabase::addApplicationFont(":/fonts/font_awesome_6_solid_free.otf"); // Add font awesome font to application + MainWindow w; w.setMouseTracking(true); w.resize(900, 600); w.show(); + return a.exec(); } diff --git a/FinalProject/mainwindow.cpp b/FinalProject/mainwindow.cpp index a132387..2ba2e39 100644 --- a/FinalProject/mainwindow.cpp +++ b/FinalProject/mainwindow.cpp @@ -1,29 +1,93 @@ -#include -#include -#include - #include "mainwindow.h" -#include "pushbutton.h" #include "logger.h" #define MAX_MOUSE_MOVEMENT 300 MainWindow::MainWindow(QWidget *parent) - : FramelessWidget(20, parent) + : FramelessWindow(20, parent) { - PushButton* btn = new PushButton(new QLabel("Button"), this); - btn->setFixedSize(100, 100); - btn->move(100, 100); - btn->show(); - connect(btn, &PushButton::onClick, this, [=]() { - if (btn->isSelected()) { - btn->deselect(); + // Create main layout for page and sidebar + _mainLayout = new QHBoxLayout(_windowWidget); + _mainLayout->setContentsMargins(0, 0, 0, 0); + _mainLayout->setSpacing(0); + _windowWidget->setLayout(_mainLayout); + + // Create placeholder widget for pages + _placeHolderWidget = new QWidget(_windowWidget); + _placeHolderWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + _placeHolderWidget->setMouseTracking(true); + + // Connect the resize event of the placeholder widget to the resizePages function using event filter + _placeHolderWidget->installEventFilter(this); + + // Create sidebar + _sideBar = new SideBar(_windowWidget); + connect(_sideBar, &SideBar::onPageChanged, this, [=](PageWidget* previousPage, PageWidget* currentPage) { + // Check for input validity + if (previousPage == currentPage) { + return; } - else { - btn->select(); + if (previousPage != nullptr) { + previousPage->offStage(); + return; + } + if (currentPage != nullptr) { + currentPage->onStage(); + return; } }); + _sideBar->setMouseTracking(true); + + // Add sidebar and placeholder widget to main layout + _mainLayout->addWidget(_sideBar); + _mainLayout->addWidget(_placeHolderWidget); + + // Create editor page and connect to side bar + _editorPage = new EditorPage(_placeHolderWidget); + _editorPage->setMouseTracking(true); + _editorPage->show(); + _sideBar->addPage(_editorPage); } MainWindow::~MainWindow() { +} + +void MainWindow::resizePages(QResizeEvent* event) { + // Check for input validity + if (event == nullptr) { + return; + } + + // Get the size of the placeholder widget + QSize size = event->size(); + + // Resize the editor page + _editorPage->resize(size); +} + +void MainWindow::showEvent(QShowEvent* event) { + // Call parent show event + FramelessWindow::showEvent(event); + + // Resize all the pages based on the placeholder widget + _editorPage->resize(_placeHolderWidget->size()); +} + +bool MainWindow::eventFilter(QObject* object, QEvent* event) { + // Check for input validity + if (object == nullptr || event == nullptr) { + return false; + } + + // Check if the object is the placeholder widget + if (object == _placeHolderWidget) { + // Check if the event is a resize event + if (event->type() == QEvent::Resize) { + // Resize all the pages + resizePages(static_cast(event)); + } + } + + // Call parent event filter + return FramelessWindow::eventFilter(object, event); } \ No newline at end of file diff --git a/FinalProject/mainwindow.h b/FinalProject/mainwindow.h index ddeca63..2fee9ba 100644 --- a/FinalProject/mainwindow.h +++ b/FinalProject/mainwindow.h @@ -1,12 +1,34 @@ #pragma once -#include "framelesswindow.h" +#include -class MainWindow : public FramelessWidget +#include "framelesswindow.h" +#include "sidebar.h" +#include "editorpage.h" + +class MainWindow : public FramelessWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); + +private: + // Main ui layout + QHBoxLayout* _mainLayout = nullptr; + + // Side bar and corresponding pages + SideBar* _sideBar = nullptr; + EditorPage* _editorPage = nullptr; + + // Place holder widget for resizing pages + QWidget* _placeHolderWidget = nullptr; + +private: + void resizePages(QResizeEvent* event); + +private: + virtual void showEvent(QShowEvent* event) override; + virtual bool eventFilter(QObject* object, QEvent* event) override; }; diff --git a/FinalProject/modelselector.h b/FinalProject/modelselector.h index 6f70f09..252e624 100644 --- a/FinalProject/modelselector.h +++ b/FinalProject/modelselector.h @@ -1 +1,12 @@ #pragma once + +#include + +//class ModelSelector : public QWidget +//{ +// Q_OBJECT +// +//public: +// ModelSelector(QWidget* parent = 0); +// ~ModelSelector(); +//}; diff --git a/FinalProject/modelsetter.h b/FinalProject/modelsetter.h index 6f70f09..71fd808 100644 --- a/FinalProject/modelsetter.h +++ b/FinalProject/modelsetter.h @@ -1 +1,3 @@ #pragma once + +#include From 67bf979db5c54104cdb3810f86ee2bec2a1e8c93 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 17:51:45 +0800 Subject: [PATCH 13/26] [UI] Line edit component --- FinalProject/lineeditwidget.cpp | 427 ++++++++++++++++++++++++++++++++ FinalProject/lineeditwidget.h | 95 +++++++ 2 files changed, 522 insertions(+) create mode 100644 FinalProject/lineeditwidget.cpp create mode 100644 FinalProject/lineeditwidget.h diff --git a/FinalProject/lineeditwidget.cpp b/FinalProject/lineeditwidget.cpp new file mode 100644 index 0000000..ca4ec86 --- /dev/null +++ b/FinalProject/lineeditwidget.cpp @@ -0,0 +1,427 @@ +#include +#include + +#include "lineeditwidget.h" + +LineEditWidget::LineEditWidget(QWidget* parent) : + QWidget(parent) +{ + // Generate colors + generateColor(_defaultColorScheme); + + // Initialize ui + initializeUI(); + + // Connect line edit events + connect(_editor, &QLineEdit::returnPressed, this, &LineEditWidget::endEdit); + connect(_editor, &QLineEdit::editingFinished, this, &LineEditWidget::endEdit); + connect(_editor, &QLineEdit::textChanged, this, &LineEditWidget::onTextChanged); +} + +LineEditWidget::~LineEditWidget() { +} + +void LineEditWidget::initializeUI() { + // Construct and set main layout + _mainLayout = new QHBoxLayout(this); + _mainLayout->setContentsMargins(12, 0, 12, 0); + _mainLayout->setSpacing(8); + setLayout(_mainLayout); + + // Construct editor container widget + _editorWidget = new QWidget(this); + _mainLayout->addWidget(_editorWidget); + _editorWidget->show(); + + // Construct editor layout to stretch editor widget + _editorWidgetLayout = new QHBoxLayout(_editorWidget); + _editorWidgetLayout->setContentsMargins(0, 10, 0, 10); + _editorWidgetLayout->setSpacing(0); + _editorWidget->setLayout(_editorWidgetLayout); + + // Install event filter to editor widget to resize indicator + _editorWidget->installEventFilter(this); + + // Construct real text editor + _editor = new QLineEdit(_editorWidget); + _editor->setText(""); + _editor->setFont(_defaultFont); + _editor->setAlignment(Qt::AlignRight); + _editor->setReadOnly(true); + _editor->setAttribute(Qt::WA_TransparentForMouseEvents, true); + _editor->setStyleSheet("QLineEdit{color:#2c2c2c;background-color:#00ffffff;border-style:none;}"); + //_editor->setFixedHeight(_editor->fontMetrics().lineSpacing()); // Restrict one line + _editor->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); + _editorWidgetLayout->addWidget(_editor); + _editor->show(); + + // Construct indicator widget + _indicator = new QWidget(_editorWidget); + _indicator->setObjectName("indicator"); + _indicator->setStyleSheet("QWidget#indicator{background-color:" + _indicatorColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number((float)_indicatorWidth / 2) + "px;}"); + _indicator->resize(_indicatorWidth, _indicatorWidth); + _indicator->move(_editorWidget->width() - _indicatorWidth, _editorWidget->height() - _indicatorWidth - _indicatorSpacing); + _indicatorEffect = new QGraphicsOpacityEffect(_indicator); + _indicatorEffect->setOpacity(0); + _indicator->setGraphicsEffect(_indicatorEffect); + _indicator->show(); + + // Construct background widget + _backgroundWidget = new QWidget(this); + _backgroundWidget->resize(size()); + _backgroundWidget->setObjectName("backgroundWidget"); + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + _backgroundWidget->lower(); + _backgroundWidget->show(); + + // Set size policy + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); +} + +void LineEditWidget::generateColor(QColor colorScheme) { + _backgroundColor = colorScheme.lighter(120); + _backgroundColor.setAlpha(5); + _hoverColor = colorScheme.lighter(120); + _hoverColor.setAlpha(40); + _pressedColor = colorScheme.lighter(120); + _pressedColor.setAlpha(50); + _indicatorColor = colorScheme; +} + +void LineEditWidget::startEdit() { + if (_editing) { + return; + } + + // Set editing flag + _editing = true; + + // Enable qlineedit widget + _editor->setReadOnly(false); + _editor->setAttribute(Qt::WA_TransparentForMouseEvents, false); + _editor->setFocus(); + _editor->setCursorPosition(_editor->text().length()); + + // Minorly move cursor to update cursor icon + QCursor::setPos(QCursor::pos() + QPoint(1, 0)); + QCursor::setPos(QCursor::pos() + QPoint(-1, 0)); + + // Add grow and fade in animation for indicator + QParallelAnimationGroup* startEditAnimation = new QParallelAnimationGroup(this); + QPropertyAnimation* growAnimation = new QPropertyAnimation(_indicator, "geometry"); + QPropertyAnimation* fadeInAnimation = new QPropertyAnimation(_indicatorEffect, "opacity"); + growAnimation->setDuration(200); + growAnimation->setEasingCurve(QEasingCurve::OutQuad); + fadeInAnimation->setDuration(200); + fadeInAnimation->setEasingCurve(QEasingCurve::OutQuad); + growAnimation->setStartValue(_indicator->geometry()); + growAnimation->setEndValue(QRect( + 0, + _editorWidget->height() - _indicatorWidth - _indicatorSpacing, + _editorWidget->width(), + _indicatorWidth + )); + fadeInAnimation->setStartValue(_indicatorEffect->opacity()); + fadeInAnimation->setEndValue(0.999); + startEditAnimation->addAnimation(growAnimation); + startEditAnimation->addAnimation(fadeInAnimation); + startEditAnimation->start(QAbstractAnimation::DeleteWhenStopped); + + // Emit signal + emit onStartEditing(_editor->text()); +} + +void LineEditWidget::endEdit() { + if (!_editing) { + return; + } + + // Set editing flag + _editing = false; + + // Disable qlineedit widget + _editor->setReadOnly(true); + _editor->setAttribute(Qt::WA_TransparentForMouseEvents, true); + _editor->setSelection(0, 0); + + // Add shrink and fade out animation for indicator + QParallelAnimationGroup* endEditAnimation = new QParallelAnimationGroup(this); + QPropertyAnimation* shrinkAnimation = new QPropertyAnimation(_indicator, "geometry"); + QPropertyAnimation* fadeOutAnimation = new QPropertyAnimation(_indicatorEffect, "opacity"); + shrinkAnimation->setDuration(200); + shrinkAnimation->setEasingCurve(QEasingCurve::OutQuad); + fadeOutAnimation->setDuration(200); + fadeOutAnimation->setEasingCurve(QEasingCurve::OutQuad); + shrinkAnimation->setStartValue(_indicator->geometry()); + shrinkAnimation->setEndValue(QRect( + _editorWidget->width() - _indicatorWidth, + _editorWidget->height() - _indicatorWidth - _indicatorSpacing, + _indicatorWidth, + _indicatorWidth + )); + fadeOutAnimation->setStartValue(_indicatorEffect->opacity()); + fadeOutAnimation->setEndValue(0); + endEditAnimation->addAnimation(shrinkAnimation); + endEditAnimation->addAnimation(fadeOutAnimation); + endEditAnimation->start(QAbstractAnimation::DeleteWhenStopped); + + // Emit signal + emit onEndEditing(_editor->text()); +} + +void LineEditWidget::showEvent(QShowEvent* event) { + // Call on parent + QWidget::showEvent(event); + + // Check initialize state + if (_initialized) { + return; + } + + // Initialize size dependent widgets + _backgroundWidget->resize(size()); + if (_editing) { + _indicator->move(0, _editorWidget->height() - _indicatorWidth - _indicatorSpacing); + _indicator->resize(_editorWidget->width(), _indicatorWidth); + } + else { + _indicator->move(_editorWidget->width() - _indicatorWidth, _editorWidget->height() - _indicatorWidth - _indicatorSpacing); + _indicator->resize(_indicatorWidth, _indicatorWidth); + } + + // Set initialized flag + _initialized = true; +} + +void LineEditWidget::enterEvent(QEnterEvent* event) { + // Check on enabled + if (_enabled) { + setCursor(Qt::PointingHandCursor); + } + + // Change background color + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + + // Set hover flag + _hovered = true; +} + +void LineEditWidget::leaveEvent(QEvent* event) { + setCursor(Qt::ArrowCursor); + + // Change background color + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + + // Set hover flag + _hovered = false; + _pressed = false; +} + +void LineEditWidget::mousePressEvent(QMouseEvent* event) { + // Change background color + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + + // Set pressed flag + _pressed = true; +} + +void LineEditWidget::mouseReleaseEvent(QMouseEvent* event) { + // Change background color + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + + // Trigger on click + if (_pressed) { + if (_enabled) { + if (_editing) { + endEdit(); + } + else { + startEdit(); + } + } + else { + if (_editing) { + endEdit(); + } + } + } + + // Set pressed flag + _pressed = false; +} + +void LineEditWidget::focusInEvent(QFocusEvent* event) { + // Call on parent + QWidget::focusInEvent(event); + + // Check on enabled + if (!_enabled) { + return; + } + + // Change background color + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + + // Start edit + if (!_editing) { + startEdit(); + } +} + +void LineEditWidget::focusOutEvent(QFocusEvent* event) { + // Call on parent + QWidget::focusOutEvent(event); + + // Change background color + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + + // End edit + if (_editing) { + endEdit(); + } +} + +void LineEditWidget::resizeEvent(QResizeEvent* event) { + // Check initialize state + if (!_initialized) { + return; + } + + // Resize background widget + _backgroundWidget->resize(size()); +} + +bool LineEditWidget::eventFilter(QObject* object, QEvent* event) { + // Resize indicator when editor widget size changed + if (object == _editorWidget) { + if (event->type() == QEvent::Resize) { + if (_editing) { + _indicator->move(0, _editorWidget->height() - _indicatorWidth - _indicatorSpacing); + _indicator->resize(_editorWidget->width(), _indicatorWidth); + } + else { + _indicator->move(_editorWidget->width() - _indicatorWidth, _editorWidget->height() - _indicatorWidth - _indicatorSpacing); + _indicator->resize(_indicatorWidth, _indicatorWidth); + } + } + } + + // Call on parent + return QWidget::eventFilter(object, event); +} + +void LineEditWidget::setText(const QString& text) { + // Set text + _editor->setText(text); +} + +void LineEditWidget::setPlaceholderText(const QString& text) { + // Set placeholder text + _editor->setPlaceholderText(text); +} + +void LineEditWidget::setValidator(const QValidator* validator) { + // Set validator + _editor->setValidator(validator); +} + +void LineEditWidget::setEnabled(bool enabled) { + // Set enabled + _enabled = enabled; + + // Check for current state + if (_editing && !_enabled) { + endEdit(); + } +} + +void LineEditWidget::setMargins(QMargins margins) { + // Set margins + _mainLayout->setContentsMargins(margins); +} + +void LineEditWidget::setMargins(int left, int top, int right, int bottom) { + // Set margins + _mainLayout->setContentsMargins(left, top, right, bottom); +} + +void LineEditWidget::setBackgroundColor(QColor color) { + // Set background color + _backgroundColor = color; + + // Check for current state + if (!_hovered && !_pressed) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + } +} + +void LineEditWidget::setHoverColor(QColor color) { + // Set hover color + _hoverColor = color; + + // Check for current state + if (_hovered && !_pressed) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + } +} + +void LineEditWidget::setPressedColor(QColor color) { + // Set pressed color + _pressedColor = color; + + // Check for current state + if (_pressed) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + } +} + +void LineEditWidget::setIndicatorColor(QColor color) { + // Set indicator color + _indicatorColor = color; + + _indicator->setStyleSheet("QWidget#indicator{background-color:" + _indicatorColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_indicatorWidth) + "px;}"); +} + +void LineEditWidget::setColorScheme(QColor primaryColor) { + // Generate colors + generateColor(primaryColor); + + // Check for current state + if (!_hovered && !_pressed) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + } + else if (_hovered && !_pressed) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _hoverColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + } + else if (_pressed) { + _backgroundWidget->setStyleSheet("QWidget#backgroundWidget{background-color:" + _pressedColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_cornerRadius) + "px;}"); + } + + _indicator->setStyleSheet("QWidget#indicator{background-color:" + _indicatorColor.name(QColor::HexArgb) + ";" + "border-radius:" + QString::number(_indicatorWidth) + "px;}"); +} + +QString LineEditWidget::text() const { + // Return text + return _editor->text(); +} + +QHBoxLayout* LineEditWidget::mainLayout() const { + // Return main layout + return _mainLayout; +} \ No newline at end of file diff --git a/FinalProject/lineeditwidget.h b/FinalProject/lineeditwidget.h new file mode 100644 index 0000000..ac7a444 --- /dev/null +++ b/FinalProject/lineeditwidget.h @@ -0,0 +1,95 @@ +#pragma once + +#include +#include +#include +#include +#include + +class LineEditWidget : public QWidget { + + Q_OBJECT + +public: + LineEditWidget(QWidget* parent = 0); + ~LineEditWidget(); + +private: + // UI control variables + int _cornerRadius = 8; + + // UI elements + QHBoxLayout* _mainLayout = nullptr; // For layout the user added components and the real editor component + + QWidget* _backgroundWidget = nullptr; + const QColor _defaultColorScheme = QColor(58, 143, 183); + QColor _backgroundColor; + QColor _hoverColor; + QColor _pressedColor; + + QWidget* _editorWidget = nullptr; // Container widget for the real editor component + QHBoxLayout* _editorWidgetLayout = nullptr; + + QLineEdit* _editor = nullptr; + const QFont _defaultFont = QFont("DengXian", 10, QFont::Normal); + + QWidget* _indicator = nullptr; + const int _indicatorWidth = 4; + const int _indicatorSpacing = 4; + QColor _indicatorColor; + QGraphicsOpacityEffect* _indicatorEffect; + + // Editor state + bool _hovered = false; + bool _pressed = false; + bool _enabled = true; + bool _editing = false; + bool _initialized = false; + +private: + // UI Util functions + void initializeUI(); + void generateColor(QColor colorScheme); + + // Interaction Util functions + void startEdit(); + void endEdit(); + +private: + // Interactions + virtual void showEvent(QShowEvent* event) override; + virtual void enterEvent(QEnterEvent* event) override; + virtual void leaveEvent(QEvent* event) override; + virtual void mousePressEvent(QMouseEvent* event) override; + virtual void mouseReleaseEvent(QMouseEvent* event) override; + virtual void focusInEvent(QFocusEvent* event) override; + virtual void focusOutEvent(QFocusEvent* event) override; + virtual void resizeEvent(QResizeEvent* event) override; + virtual bool eventFilter(QObject* obj, QEvent* event) override; + +public: + // Public setter APIs for text + void setText(const QString& text); + void setPlaceholderText(const QString& text); + void setValidator(const QValidator* validator); + + // Publics setter APIs for UI + void setEnabled(bool enabled = true); + void setMargins(QMargins margins); + void setMargins(int left, int top, int right, int bottom); + void setBackgroundColor(QColor color); + void setHoverColor(QColor color); + void setPressedColor(QColor color); + void setIndicatorColor(QColor color); + void setColorScheme(QColor primaryColor); + + // Public getter APIs + QString text() const; + QHBoxLayout* mainLayout() const; + +signals: + // Public signal functions + void onStartEditing(const QString& text); + void onTextChanged(const QString& text); + void onEndEditing(const QString& text); +}; \ No newline at end of file From c87326888591042397d705c574a87086d1db443d Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 17:52:23 +0800 Subject: [PATCH 14/26] [UI][FIX] Sidebar effect update - Change animation curve - Change collapsed width --- FinalProject/sidebar.cpp | 8 ++++---- FinalProject/sidebar.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/FinalProject/sidebar.cpp b/FinalProject/sidebar.cpp index fa3118d..c36052d 100644 --- a/FinalProject/sidebar.cpp +++ b/FinalProject/sidebar.cpp @@ -86,8 +86,8 @@ SideBar::~SideBar() {} void SideBar::expand() { // Add animation to expand the side bar QPropertyAnimation* expandAnimation = new QPropertyAnimation(this, "maximumWidth"); - expandAnimation->setDuration(200); - expandAnimation->setEasingCurve(QEasingCurve::InOutQuad); + expandAnimation->setDuration(650); + expandAnimation->setEasingCurve(QEasingCurve::OutExpo); expandAnimation->setStartValue(width()); expandAnimation->setEndValue(_expandedWidth); expandAnimation->start(QAbstractAnimation::DeleteWhenStopped); @@ -103,8 +103,8 @@ void SideBar::expand() { void SideBar::collapse() { // Add animation to collapse the side bar QPropertyAnimation* collapseAnimation = new QPropertyAnimation(this, "maximumWidth"); - collapseAnimation->setDuration(200); - collapseAnimation->setEasingCurve(QEasingCurve::InOutQuad); + collapseAnimation->setDuration(650); + collapseAnimation->setEasingCurve(QEasingCurve::OutExpo); collapseAnimation->setStartValue(width()); collapseAnimation->setEndValue(_collapsedWidth); collapseAnimation->start(QAbstractAnimation::DeleteWhenStopped); diff --git a/FinalProject/sidebar.h b/FinalProject/sidebar.h index 231959a..7ebfe07 100644 --- a/FinalProject/sidebar.h +++ b/FinalProject/sidebar.h @@ -24,7 +24,7 @@ private: // UI control variables QColor _backgroundColor = QColor(230, 230, 230); - int _collapsedWidth = 90; + int _collapsedWidth = 86; int _expandedWidth = 200; // UI widgets From b60a35b92d0699885dfe8ba4f5b94fdb752964db Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 17:52:57 +0800 Subject: [PATCH 15/26] [UI][FIX] Fix rounded corner widget - Fix re-initialize bug causing multiple borders --- FinalProject/roundedcornerwidget.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/FinalProject/roundedcornerwidget.cpp b/FinalProject/roundedcornerwidget.cpp index 7bbfaa1..f605d79 100644 --- a/FinalProject/roundedcornerwidget.cpp +++ b/FinalProject/roundedcornerwidget.cpp @@ -22,6 +22,10 @@ void RoundedCornerWidget::showEvent(QShowEvent* event) { // Call parent show event QWidget::showEvent(event); + if (_initialized) { + return; + } + // Initialize widget UI initializeWidgetUI(); From 43c610ed3ea832840a74fa939046564a5450094d Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 17:53:28 +0800 Subject: [PATCH 16/26] [UI][CHG] Change pushbutton color generation - Change default background alpha to 0 --- FinalProject/pushbutton.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/FinalProject/pushbutton.cpp b/FinalProject/pushbutton.cpp index 05d226e..0470b86 100644 --- a/FinalProject/pushbutton.cpp +++ b/FinalProject/pushbutton.cpp @@ -65,6 +65,7 @@ void PushButton::initializeUI() { _indicatorEffect = new QGraphicsOpacityEffect(_indicator); _indicatorEffect->setOpacity(0); _indicator->setGraphicsEffect(_indicatorEffect); + _indicator->show(); // Enable mouse tracking setMouseTracking(true); @@ -72,7 +73,7 @@ void PushButton::initializeUI() { void PushButton::generateColor(QColor colorScheme) { _backgroundColor = colorScheme.lighter(120); - _backgroundColor.setAlpha(5); + _backgroundColor.setAlpha(0); _hoverColor = colorScheme.lighter(120); _hoverColor.setAlpha(40); _pressedColor = colorScheme.lighter(120); From e5abe8c248a2ac8d9ec761557016681ae008eee6 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 17:53:54 +0800 Subject: [PATCH 17/26] [UI][ADD] About Page --- FinalProject/aboutpage.cpp | 135 +++++++++++++++++++++++++++++++++++++ FinalProject/aboutpage.h | 40 +++++++++++ 2 files changed, 175 insertions(+) diff --git a/FinalProject/aboutpage.cpp b/FinalProject/aboutpage.cpp index e69de29..62b2631 100644 --- a/FinalProject/aboutpage.cpp +++ b/FinalProject/aboutpage.cpp @@ -0,0 +1,135 @@ +#include + +#include "aboutpage.h" + +AboutPage::AboutPage(QWidget* parent) : + PageWidget(parent) +{ + _contentWidget->setMouseTracking(true); + + // Construct title layout + _titleLayout = new QVBoxLayout(_contentWidget); + _titleLayout->setContentsMargins(28, 46, 28, 28); + _titleLayout->setSpacing(18); + _titleLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); + _contentWidget->setLayout(_titleLayout); + + // Construct title + _titleLabel = new QLabel("ABOUT", _contentWidget); + _titleLabel->setFont(_titleFont); + _titleLayout->addWidget(_titleLabel); + _titleLabel->show(); + + // Construct main layout + _mainWidget = new QWidget(_contentWidget); + _mainWidget->setObjectName("mainWidget"); + _mainWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); + _mainWidget->setStyleSheet("QWidget#mainWidget { background-color: #efefef; border-radius: 8px; }"); + _mainLayout = new QVBoxLayout(_mainWidget); + _mainLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); + _mainLayout->setContentsMargins(0, 8, 0, 8); + _mainLayout->setSpacing(8); + _mainWidget->setLayout(_mainLayout); + _titleLayout->addWidget(_mainWidget); + _mainWidget->show(); + + // Construct contents + _authorLabel = new LineEditWidget(_mainWidget); + _authorLabel->mainLayout()->insertWidget(0, new QLabel("Author")); + _authorLabel->mainLayout()->insertSpacing(1, 8); + _authorLabel->setBackgroundColor(QColor(0, 0, 0, 0)); + _authorLabel->setHoverColor(QColor(0, 0, 0, 10)); + _authorLabel->setPressedColor(QColor(0, 0, 0, 20)); + _authorLabel->setText("Linloir"); + _authorLabel->setEnabled(false); + _mainLayout->addWidget(_authorLabel); + _authorLabel->show(); + + _versionLabel = new LineEditWidget(_mainWidget); + _versionLabel->mainLayout()->insertWidget(0, new QLabel("Version")); + _versionLabel->mainLayout()->insertSpacing(1, 8); + _versionLabel->setBackgroundColor(QColor(0, 0, 0, 0)); + _versionLabel->setHoverColor(QColor(0, 0, 0, 10)); + _versionLabel->setPressedColor(QColor(0, 0, 0, 20)); + _versionLabel->setText("1.0.0"); + _versionLabel->setEnabled(false); + _mainLayout->addWidget(_versionLabel); + _versionLabel->show(); + + _dateLabel = new LineEditWidget(_mainWidget); + _dateLabel->mainLayout()->insertWidget(0, new QLabel("Last Update")); + _dateLabel->mainLayout()->insertSpacing(1, 8); + _dateLabel->setBackgroundColor(QColor(0, 0, 0, 0)); + _dateLabel->setHoverColor(QColor(0, 0, 0, 10)); + _dateLabel->setPressedColor(QColor(0, 0, 0, 20)); + _dateLabel->setText("2020/12/31"); + _dateLabel->setEnabled(false); + _mainLayout->addWidget(_dateLabel); + _dateLabel->show(); +} + +AboutPage::~AboutPage() {} + +PushButton* AboutPage::getPageIconButton(QWidget* context) { + // Check for existed button + if (_iconButton != nullptr) { + return _iconButton; + } + + // Generate new icon button + _iconButton = new PushButton(nullptr, context); + _iconButton->setMargin(20, 18, 16, 18); + _iconButtonLabel = new QLabel(_iconButton); + _iconButtonLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); + QFont iconButtonFont("Font Awesome 6 Free Regular", 12); + iconButtonFont.setStyleStrategy(QFont::PreferAntialias); + _iconButtonLabel->setFont(iconButtonFont); + _iconButtonLabel->setText("\uf059"); + _iconButtonLabel->setAlignment(Qt::AlignLeft); + _iconButton->setChildWidget(_iconButtonLabel); + + // Return newly generated icon + return _iconButton; +} + +PushButton* AboutPage::getPageTextButton(QWidget* context) { + // Check for existed button + if (_textButton != nullptr) { + return _textButton; + } + + // Generate new text button + _textButton = new PushButton(nullptr, context); + _textButton->setMargin(20, 18, 16, 18); + _textButtonWidget = new QWidget(_textButton); + _textButtonLayout = new QHBoxLayout(_textButtonWidget); + _textButtonLayout->setContentsMargins(0, 0, 0, 0); + _textButtonLayout->setSpacing(12); + _textButtonWidget->setLayout(_textButtonLayout); + + // Generate text button contents + _textButtonIcon = new QLabel(_textButtonWidget); + QFont textButtonFont("Font Awesome 6 Free Regular", 12); + textButtonFont.setStyleStrategy(QFont::PreferQuality); + _textButtonIcon->setFont(textButtonFont); + _textButtonIcon->setText("\uf059"); // set icon to "pen" icon + _textButtonIcon->setAlignment(Qt::AlignLeft); + + _textButtonLabel = new QLabel(_textButtonWidget); + _textButtonLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); + _textButtonLabel->setText("About"); + _textButtonLabel->setAlignment(Qt::AlignLeft); + + // Add text button contents to layout + _textButtonLayout->addWidget(_textButtonIcon); + _textButtonLayout->addWidget(_textButtonLabel); + _textButtonIcon->show(); + _textButtonLabel->show(); + + // Set text button child widget + _textButton->setChildWidget(_textButtonWidget); + _textButtonWidget->show(); + + // Return newly generated text button + return _textButton; +} diff --git a/FinalProject/aboutpage.h b/FinalProject/aboutpage.h index 6f70f09..3a242d6 100644 --- a/FinalProject/aboutpage.h +++ b/FinalProject/aboutpage.h @@ -1 +1,41 @@ #pragma once + +#include +#include +#include + +#include "pagewidget.h" +#include "lineeditwidget.h" + +class AboutPage : public PageWidget { + + Q_OBJECT + +public: + AboutPage(QWidget* parent = 0); + ~AboutPage(); + +private: + // Push button icons + QLabel* _iconButtonLabel = nullptr; + QWidget* _textButtonWidget = nullptr; + QHBoxLayout* _textButtonLayout = nullptr; + QLabel* _textButtonIcon = nullptr; + QLabel* _textButtonLabel = nullptr; + + // UI elements + QVBoxLayout* _titleLayout = nullptr; + const QFont _titleFont = QFont("DengXian", 26, QFont::ExtraLight); + QLabel* _titleLabel = nullptr; + + QWidget* _mainWidget = nullptr; + QVBoxLayout* _mainLayout = nullptr; + + LineEditWidget* _authorLabel = nullptr; + LineEditWidget* _versionLabel = nullptr; + LineEditWidget* _dateLabel = nullptr; + +public: + virtual PushButton* getPageIconButton(QWidget* context) override; + virtual PushButton* getPageTextButton(QWidget* context) override; +}; From be3eda82f2d9a36ee35f385af002dc2ddb67b7a9 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 17:54:22 +0800 Subject: [PATCH 18/26] [UI][UPD] Minor updates - Tested version (Can build & run) --- FinalProject/FinalProject.vcxproj | 4 +++- FinalProject/FinalProject.vcxproj.filters | 12 +++++++--- FinalProject/editorpage.cpp | 2 +- FinalProject/mainwindow.cpp | 10 +++++--- FinalProject/mainwindow.h | 2 ++ FinalProject/pagewidget.cpp | 29 +++++++++++++---------- 6 files changed, 39 insertions(+), 20 deletions(-) diff --git a/FinalProject/FinalProject.vcxproj b/FinalProject/FinalProject.vcxproj index 6a70627..48f579f 100644 --- a/FinalProject/FinalProject.vcxproj +++ b/FinalProject/FinalProject.vcxproj @@ -108,6 +108,7 @@ + @@ -135,10 +136,11 @@ - + + diff --git a/FinalProject/FinalProject.vcxproj.filters b/FinalProject/FinalProject.vcxproj.filters index fcb368b..8b472f3 100644 --- a/FinalProject/FinalProject.vcxproj.filters +++ b/FinalProject/FinalProject.vcxproj.filters @@ -141,6 +141,9 @@ Source Files\Qt Widgets\Pages\About Page + + Source Files\Qt Widgets\GUI Components + @@ -191,9 +194,6 @@ Header Files\Qt Widgets\GUI Components - - Header Files\Qt Widgets\Pages\About Page - @@ -220,6 +220,12 @@ Header Files\Qt Widgets\GUI Components + + Header Files\Qt Widgets\Pages\About Page + + + Header Files\Qt Widgets\GUI Components + diff --git a/FinalProject/editorpage.cpp b/FinalProject/editorpage.cpp index 47abe62..94ae9df 100644 --- a/FinalProject/editorpage.cpp +++ b/FinalProject/editorpage.cpp @@ -82,7 +82,7 @@ PushButton* EditorPage::getPageTextButton(QWidget* context) { _textButtonWidget = new QWidget(_textButton); _textButtonLayout = new QHBoxLayout(_textButtonWidget); _textButtonLayout->setContentsMargins(0, 0, 0, 0); - _textButtonLayout->setSpacing(8); + _textButtonLayout->setSpacing(12); _textButtonWidget->setLayout(_textButtonLayout); // Generate text button contents diff --git a/FinalProject/mainwindow.cpp b/FinalProject/mainwindow.cpp index 2ba2e39..dee9516 100644 --- a/FinalProject/mainwindow.cpp +++ b/FinalProject/mainwindow.cpp @@ -29,11 +29,9 @@ MainWindow::MainWindow(QWidget *parent) } if (previousPage != nullptr) { previousPage->offStage(); - return; } if (currentPage != nullptr) { currentPage->onStage(); - return; } }); _sideBar->setMouseTracking(true); @@ -45,8 +43,12 @@ MainWindow::MainWindow(QWidget *parent) // Create editor page and connect to side bar _editorPage = new EditorPage(_placeHolderWidget); _editorPage->setMouseTracking(true); - _editorPage->show(); _sideBar->addPage(_editorPage); + + // Create about page and connect to side bar + _aboutPage = new AboutPage(_placeHolderWidget); + _aboutPage->setMouseTracking(true); + _sideBar->addPage(_aboutPage); } MainWindow::~MainWindow() { @@ -63,6 +65,7 @@ void MainWindow::resizePages(QResizeEvent* event) { // Resize the editor page _editorPage->resize(size); + _aboutPage->resize(size); } void MainWindow::showEvent(QShowEvent* event) { @@ -71,6 +74,7 @@ void MainWindow::showEvent(QShowEvent* event) { // Resize all the pages based on the placeholder widget _editorPage->resize(_placeHolderWidget->size()); + _aboutPage->resize(_placeHolderWidget->size()); } bool MainWindow::eventFilter(QObject* object, QEvent* event) { diff --git a/FinalProject/mainwindow.h b/FinalProject/mainwindow.h index 2fee9ba..d6f63c0 100644 --- a/FinalProject/mainwindow.h +++ b/FinalProject/mainwindow.h @@ -5,6 +5,7 @@ #include "framelesswindow.h" #include "sidebar.h" #include "editorpage.h" +#include "aboutpage.h" class MainWindow : public FramelessWindow { @@ -21,6 +22,7 @@ private: // Side bar and corresponding pages SideBar* _sideBar = nullptr; EditorPage* _editorPage = nullptr; + AboutPage* _aboutPage = nullptr; // Place holder widget for resizing pages QWidget* _placeHolderWidget = nullptr; diff --git a/FinalProject/pagewidget.cpp b/FinalProject/pagewidget.cpp index e836091..ec5d3a3 100644 --- a/FinalProject/pagewidget.cpp +++ b/FinalProject/pagewidget.cpp @@ -13,26 +13,31 @@ PageWidget::PageWidget(QWidget* parent) : QWidget(parent) { // Construct content widget _contentWidget = new QWidget(this); _stretchLayout->addWidget(_contentWidget); + _contentWidget->show(); // Add opacity effect to real content _pageOpacityEffect = new QGraphicsOpacityEffect(_contentWidget); _pageOpacityEffect->setOpacity(0); _contentWidget->setGraphicsEffect(_pageOpacityEffect); + + // Move offstage + move(_originPagePosition + QPoint(0, 150)); + hide(); } PageWidget::~PageWidget() {} void PageWidget::onStage() { // Move up and fade in - QParallelAnimationGroup* onStageAnimation = new QParallelAnimationGroup(_contentWidget); - QPropertyAnimation* moveAnimation = new QPropertyAnimation(_contentWidget, "pos"); + QParallelAnimationGroup* onStageAnimation = new QParallelAnimationGroup(this); + QPropertyAnimation* moveAnimation = new QPropertyAnimation(this, "pos"); QPropertyAnimation* fadeInAnimation = new QPropertyAnimation(_pageOpacityEffect, "opacity"); - moveAnimation->setDuration(300); - moveAnimation->setEasingCurve(QEasingCurve::OutCubic); - moveAnimation->setStartValue(_contentWidget->pos()); + moveAnimation->setDuration(600); + moveAnimation->setEasingCurve(QEasingCurve::OutExpo); + moveAnimation->setStartValue(pos()); moveAnimation->setEndValue(_originPagePosition); - fadeInAnimation->setDuration(300); - fadeInAnimation->setEasingCurve(QEasingCurve::OutQuad); + fadeInAnimation->setDuration(500); + fadeInAnimation->setEasingCurve(QEasingCurve::InQuad); fadeInAnimation->setStartValue(_pageOpacityEffect->opacity()); fadeInAnimation->setEndValue(0.999); onStageAnimation->addAnimation(moveAnimation); @@ -40,20 +45,19 @@ void PageWidget::onStage() { onStageAnimation->start(QAbstractAnimation::DeleteWhenStopped); // Show page - _contentWidget->show(); + show(); } void PageWidget::offStage() { // Move down and fade out - QParallelAnimationGroup* offStageAnimation = new QParallelAnimationGroup(_contentWidget); + QParallelAnimationGroup* offStageAnimation = new QParallelAnimationGroup(this); //QPropertyAnimation* moveAnimation = new QPropertyAnimation(_contentWidget, "pos"); QPropertyAnimation* fadeOutAnimation = new QPropertyAnimation(_pageOpacityEffect, "opacity"); //moveAnimation->setDuration(300); //moveAnimation->setEasingCurve(QEasingCurve::OutCubic); //moveAnimation->setStartValue(_contentWidget->pos()); //moveAnimation->setEndValue(_originPagePosition - QPoint(0, 100)); - fadeOutAnimation->setDuration(300); - fadeOutAnimation->setEasingCurve(QEasingCurve::OutQuad); + fadeOutAnimation->setDuration(200); fadeOutAnimation->setStartValue(_pageOpacityEffect->opacity()); fadeOutAnimation->setEndValue(0); //offStageAnimation->addAnimation(moveAnimation); @@ -62,6 +66,7 @@ void PageWidget::offStage() { // Connect animation finished signal to hide page connect(offStageAnimation, &QParallelAnimationGroup::finished, [=]() { - _contentWidget->hide(); + move(_originPagePosition + QPoint(0, 150)); + hide(); }); } \ No newline at end of file From 0e1edcc58836b8f717ee33398b10b6a0d2e991a2 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Fri, 16 Dec 2022 21:45:11 +0800 Subject: [PATCH 19/26] [UI][ADD] Scroll List widget - transplanted from previous work --- FinalProject/scrolllist.cpp | 0 FinalProject/scrolllist.h | 1 - FinalProject/scrolllistwidget.cpp | 422 ++++++++++++++++++++++++++++++ FinalProject/scrolllistwidget.h | 142 ++++++++++ 4 files changed, 564 insertions(+), 1 deletion(-) delete mode 100644 FinalProject/scrolllist.cpp delete mode 100644 FinalProject/scrolllist.h create mode 100644 FinalProject/scrolllistwidget.cpp create mode 100644 FinalProject/scrolllistwidget.h diff --git a/FinalProject/scrolllist.cpp b/FinalProject/scrolllist.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/FinalProject/scrolllist.h b/FinalProject/scrolllist.h deleted file mode 100644 index 6f70f09..0000000 --- a/FinalProject/scrolllist.h +++ /dev/null @@ -1 +0,0 @@ -#pragma once diff --git a/FinalProject/scrolllistwidget.cpp b/FinalProject/scrolllistwidget.cpp new file mode 100644 index 0000000..6d12181 --- /dev/null +++ b/FinalProject/scrolllistwidget.cpp @@ -0,0 +1,422 @@ +#include "scrolllistwidget.h" + +ScrollListWidget::ScrollListWidget(QWidget* parent) : QWidget(parent) +{ + //initialize list container and timer + container = new ScrollListContainer(this); + container->move(0, 0); + container->resize(this->width(), 3); + getCord = new QTimer; + getCord->setSingleShot(true); + rfrshView = new QTimer; + getCord->setSingleShot(true); + + indicator = new ScrollListIndicator(this); + indicator->resize(indicator->width(), (int)((double)this->height() * this->height() / (double)container->height())); + indicator->move(this->width() - indicator->width() - 3, 0); + + this->setMouseTracking(true); + container->setMouseTracking(true); + indicator->setMouseTracking(true); + + bounce = new QPropertyAnimation(container, "pos"); + + QObject::connect(getCord, SIGNAL(timeout()), this, SLOT(updateSpd())); + QObject::connect(rfrshView, SIGNAL(timeout()), this, SLOT(scrollContainer())); + QObject::connect(indicator, SIGNAL(scrollPage(int)), this, SLOT(scrollIndicator(int))); +} + +void ScrollListWidget::paintEvent(QPaintEvent* event) { + container->resize(this->width(), container->height()); + if (container->height() > this->height() && container->y() < this->height() - container->height() && curSpd == 0 && bounce->state() == QAbstractAnimation::Stopped) + container->move(container->x(), this->height() - container->height()); + if (container->height() <= this->height()) { + container->move(container->x(), 0); + indicator->hide(); + } + else { + indicator->show(); + } + indicator->resize(indicator->width(), (int)((double)this->height() * this->height() / (double)container->height())); + indicator->move(this->width() - indicator->width() - 3, -container->y() * this->height() / container->height()); +} + +void ScrollListWidget::mousePressEvent(QMouseEvent* event) { + if (container->height() > this->height()) { + if (container->y() <= 0 && container->y() + container->height() >= this->height()) + pressed = true; + lastY = event->pos().y(); + } + getCord->stop(); + rfrshView->stop(); + curSpd = 0; + outOfEdge = false; + moveStored = 0; + nextMove = 1; +} + +void ScrollListWidget::mouseMoveEvent(QMouseEvent* event) { + setCursor(Qt::ArrowCursor); + if (pressed) { + //start scroll + if (!getCord->isActive() && event->pos().y() - lastY != 0) { + //start 30ms timer + getCord->start(30); + strtY = event->pos().y(); + } + if (container->y() <= 0 && container->y() + container->height() >= this->height()) + container->move(container->x(), container->y() + event->pos().y() - lastY); + else { + if (!outOfEdge) { + bfEdgeY = event->pos().y(); + container->move(container->x(), container->y() + event->pos().y() - lastY); + outOfEdge = true; + } + else { + int pos = container->y() >= 0 ? 1 : -1; + int dp = event->pos().y() - bfEdgeY; + if (dp == 0) { + outOfEdge = false; + nextMove = 1; + moveStored = 0; + if (container->y() >= 0) + container->move(container->x(), 0); + else + container->move(container->x(), this->height() - container->height()); + } + else if (dp / abs(dp) != pos) { + outOfEdge = false; + container->move(container->x(), this->y() + event->pos().y() - bfEdgeY); + nextMove = 1; + moveStored = 0; + } + else { + while (abs(moveStored) + nextMove <= abs(event->pos().y() - bfEdgeY)) { + moveStored += nextMove * pos; + container->move(container->x(), container->y() + pos); + nextMove++; + } + while (nextMove > 1 && abs(moveStored) > abs(event->pos().y() - bfEdgeY)) { + nextMove--; + moveStored -= nextMove * pos; + container->move(container->x(), container->y() - pos); + } + if (moveStored == 0) { + outOfEdge = false; + if (container->y() >= 0) + container->move(container->x(), 0); + else + container->move(container->x(), this->height() - container->height()); + nextMove = 1; + moveStored = 0; + } + } + } + } + lastY = event->pos().y(); + } +} + +void ScrollListWidget::mouseReleaseEvent(QMouseEvent* event) { + //start scrolling + if (container->y() > 0 || container->y() + container->height() < this->height()) + bounceBack(); + else + rfrshView->start(30); + pressed = false; +} + +void ScrollListWidget::bounceBack() { + rfrshView->stop(); + getCord->stop(); + bounce->setDuration(500); + bounce->setStartValue(container->pos()); + if (container->y() > 0) + bounce->setEndValue(QPoint(container->x(), 0)); + else + bounce->setEndValue(QPoint(container->x(), this->height() - container->height())); + bounce->setEasingCurve(QEasingCurve::OutQuad); + bounce->start(); +} + +void ScrollListWidget::scrollContainer() { + //scroll + if (curSpd > 0) { + if (curSpd > MAXSPEED && !ignoreMaxSpeed) + curSpd = MAXSPEED; + else if (curSpd <= MAXSPEED) ignoreMaxSpeed = false; + int dp = scrollDown ? curSpd : -curSpd; + container->move(container->x(), container->y() + dp); + } + else + return; + if (container->y() <= 0 && container->y() + container->height() >= this->height()) { + curSpd -= damp; + curSpd = curSpd < 0 ? 0 : curSpd; + } + else + curSpd /= 2; + if (curSpd == 0 && (container->y() > 0 || container->y() + container->height() < this->height())) + bounceBack(); + else + rfrshView->start(30); +} + +void ScrollListWidget::updateSpd() { + int spd = lastY - strtY; + scrollDown = spd >= 0; + strtY = lastY; + curSpd = abs(spd); +} + +void ScrollListWidget::addWidget(QWidget* newWidget, bool setAnimation) { + newWidget->setParent(container); + container->AddWidget(newWidget, setAnimation); +} + +void ScrollListWidget::removeWidget(QWidget* w) { + container->RemoveWidget(w); +} + +void ScrollListWidget::scrollToTop() { + curSpd = sqrt(8 * (-container->pos().y()) + 2) / 2; + scrollDown = true; + getCord->stop(); + rfrshView->stop(); + outOfEdge = false; + moveStored = 0; + nextMove = 1; + ignoreMaxSpeed = true; + rfrshView->start(30); +} + +void ScrollListWidget::updateHeight() { + container->updateHeight(); +} + +void ScrollListWidget::clear() { + container->clear(); +} + +void ScrollListWidget::scrollIndicator(int dp) { + int newY = container->y() - dp * container->height() / this->height(); + if (newY > 0) + newY = 0; + else if (newY < this->height() - container->height()) + newY = this->height() - container->height(); + container->move(container->x(), newY); + update(); +} + +void ScrollListWidget::wheelEvent(QWheelEvent* event) { + if (container->y() > 0 || container->y() + container->height() < this->height()) + return; + curSpd += 5; + bool newDirection = event->angleDelta().y() > 0; + if (newDirection != scrollDown) + curSpd = 5; + if (curSpd > MAXSPEED) + curSpd = MAXSPEED; + scrollDown = newDirection; + if (!rfrshView->isActive()) + rfrshView->start(30); + update(); +} + +ScrollListContainer::ScrollListContainer(QWidget* parent) : QWidget(parent) {} + +void ScrollListContainer::paintEvent(QPaintEvent* event) { + for (int i = 0; i < widgets.size(); i++) { + widgets[i]->resize(this->width(), widgets[i]->height()); + } +} + +void ScrollListContainer::AddWidget(QWidget* widget, bool setAnimation) { + //Add animation for all widgets current + this->resize(this->width(), this->height() + widget->height() + spacing); + widgets.push_back(widget); + size++; + ys.push_back(0); + widget->resize(this->width(), widget->height()); + widget->show(); + + if (setAnimation) { + QGraphicsOpacityEffect* widgetOpac = new QGraphicsOpacityEffect(widget); + widgetOpac->setOpacity(0); + widget->setGraphicsEffect(widgetOpac); + QParallelAnimationGroup* dpGroup = new QParallelAnimationGroup; + QSequentialAnimationGroup* newWidgetFadeIn = new QSequentialAnimationGroup; + for (int i = 0; i < size - 1; i++) { + ys[i] += widget->height() + spacing; + QPropertyAnimation* move = new QPropertyAnimation(widgets[i], "pos"); + move->setDuration(750); + move->setStartValue(widgets[i]->pos()); + move->setEndValue(QPoint(widgets[i]->x(), ys[i])); + move->setEasingCurve(QEasingCurve::InOutQuart); + dpGroup->addAnimation(move); + } + newWidgetFadeIn->addPause(300); + QPropertyAnimation* fade = new QPropertyAnimation(widgetOpac, "opacity", widget); + fade->setDuration(300); + fade->setStartValue(0); + fade->setEndValue(0.99); + newWidgetFadeIn->addAnimation(fade); + dpGroup->addAnimation(newWidgetFadeIn); + dpGroup->start(); + connect(dpGroup, &QPropertyAnimation::stateChanged, [=]() { + if (dpGroup->state() == QAbstractAnimation::Stopped) { + if (widgetOpac->opacity() != 0.99) { + fade->start(QAbstractAnimation::DeleteWhenStopped); + connect(fade, &QPropertyAnimation::finished, [=]() {widgetOpac->deleteLater(); }); + } + else { + dpGroup->deleteLater(); + widgetOpac->deleteLater(); + } + } + }); + } + else { + for (int i = 0; i < size - 1; i++) { + ys[i] += widget->height() + spacing; + widgets[i]->move(QPoint(widgets[i]->pos().x(), ys[i])); + } + } +} + +void ScrollListContainer::RemoveWidget(QWidget* widget) { + int index; + if (widget == nullptr) { + index = size - 1; + if (index != -1) + widget = widgets[index]; + } + else + index = widgets.indexOf(widget); + if (index == -1 || widget == nullptr) { + return; + } + this->resize(this->width(), this->height() - widget->height() - spacing); + this->parentWidget()->update(); + widget->hide(); + widget->setParent(nullptr); + QParallelAnimationGroup* dpGroup = new QParallelAnimationGroup; + for (int i = index - 1; i >= 0; i--) { + ys[i] -= (widget->height() + spacing); + QPropertyAnimation* move = new QPropertyAnimation(widgets[i], "pos"); + move->setDuration(750); + move->setStartValue(widgets[i]->pos()); + move->setEndValue(QPoint(widgets[i]->x(), ys[i])); + move->setEasingCurve(QEasingCurve::InOutQuart); + dpGroup->addAnimation(move); + } + dpGroup->start(QAbstractAnimation::DeleteWhenStopped); + widgets.remove(index); + size--; + ys.remove(index); +} + +void ScrollListContainer::updateHeight() { + for (int i = size - 2; i >= 0; i--) { + ys[i] = ys[i + 1] + widgets[i + 1]->height() + spacing; + widgets[i]->move(widgets[i]->pos().x(), ys[i]); + } + this->resize(this->width(), ys[0] + widgets[0]->height() + 3); +} + +void ScrollListContainer::clear() { + int n = size; + for (int i = 0; i < n; i++) + RemoveWidget(); +} + +ScrollListIndicator::ScrollListIndicator(QWidget* parent) : QWidget(parent) +{ + this->resize(defaultWidth, 0); + hovTimer = new QTimer(this); + hovTimer->setSingleShot(true); + aniPause = new QTimer(this); + aniPause->setSingleShot(true); + QObject::connect(hovTimer, SIGNAL(timeout()), this, SLOT(setHoverActive())); + this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + this->curColor = defaultColor; + + this->setMouseTracking(true); +} + +void ScrollListIndicator::paintEvent(QPaintEvent* event) { + QPainter painter(this); + painter.setPen(Qt::NoPen); + painter.setBrush(curColor); + painter.drawRect(this->rect()); +} + +void ScrollListIndicator::enterEvent(QEnterEvent* event) { + if (!pressed) { + hovTimer->start(100); + curColor = hoverColor; + update(); + } +} + +void ScrollListIndicator::leaveEvent(QEvent* event) { + hovTimer->stop(); + curColor = defaultColor; + QPropertyAnimation* narrow = new QPropertyAnimation(this, "geometry"); + narrow->setDuration(300); + narrow->setStartValue(QRect(this->x(), this->y(), this->width(), this->height())); + narrow->setEndValue(QRect(this->parentWidget()->width() - margin - defaultWidth, this->y(), defaultWidth, this->height())); + narrow->setEasingCurve(QEasingCurve::InOutQuad); + narrow->start(QAbstractAnimation::DeleteWhenStopped); + aniPause->start(300); + update(); +} + +void ScrollListIndicator::mousePressEvent(QMouseEvent* event) { + curColor = pressColor; + pressed = true; + //>note: globalPos -> globalPosition here due to deprecation + //> may cause issues +#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0)) + lastY = event->globalPosition().y(); +#else + lastY = event->globalPos().y(); +#endif + update(); +} + +void ScrollListIndicator::mouseMoveEvent(QMouseEvent* event) { + if (pressed && !aniPause->isActive()) { + //>note: globalPos -> globalPosition here due to deprecation + //> may cause issues +#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0)) + int dp = event->globalPosition().y() - lastY; +#else + int dp = event->globalPos().y() - lastY; +#endif + emit scrollPage(dp); + //>note: globalPos -> globalPosition here due to deprecation + //> may cause issues +#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0)) + lastY = event->globalPosition().y(); +#else + lastY = event->globalPos().y(); +#endif + } +} + +void ScrollListIndicator::mouseReleaseEvent(QMouseEvent* event) { + pressed = false; + curColor = hoverColor; + update(); +} + +void ScrollListIndicator::setHoverActive() { + QPropertyAnimation* widen = new QPropertyAnimation(this, "geometry"); + widen->setDuration(300); + widen->setStartValue(QRect(this->x(), this->y(), this->width(), this->height())); + widen->setEndValue(QRect(this->parentWidget()->width() - margin - defaultWidthAtFocus, this->y(), defaultWidthAtFocus, this->height())); + widen->setEasingCurve(QEasingCurve::InOutQuad); + widen->start(QAbstractAnimation::DeleteWhenStopped); + aniPause->start(300); +} diff --git a/FinalProject/scrolllistwidget.h b/FinalProject/scrolllistwidget.h new file mode 100644 index 0000000..4ace7a1 --- /dev/null +++ b/FinalProject/scrolllistwidget.h @@ -0,0 +1,142 @@ +/* This Module has not yet been rewritten */ +/* Behavior and performance is not guaranteed*/ +/* @Linloir */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAXSPEED 70 + +class ScrollListWidget; +class ScrollListContainer; +class ScrollListIndicator; + +class ScrollListWidget : public QWidget +{ + Q_OBJECT + +private: + QTimer* getCord; + QTimer* rfrshView; + + ScrollListContainer* container; + ScrollListIndicator* indicator; + + QPropertyAnimation* bounce; + + bool pressed = false; + bool scrollDown = true; + bool outOfEdge = false; + bool ignoreMaxSpeed = false; + + int strtY; + int lastY; + int bfEdgeY; //last y value before out of edge + + int curSpd = 0; + int damp = 1; + int moveStored = 0; + int nextMove = 1; + + void paintEvent(QPaintEvent* event); + void mousePressEvent(QMouseEvent* event); + void mouseMoveEvent(QMouseEvent* event); + void mouseReleaseEvent(QMouseEvent* event); + void wheelEvent(QWheelEvent* event); + void bounceBack(); + + +public: + explicit ScrollListWidget(QWidget* parent = nullptr); + void addWidget(QWidget* newWidget, bool setAnimation = true); + void addWidgets(QVector widgets) { for (int i = 0; i < widgets.size(); i++)addWidget(widgets[i], false); } + void removeWidget(QWidget* w = nullptr); + void scrollToTop(); + void updateHeight(); + void clear(); + +signals: + +private slots: + void scrollContainer(); + void updateSpd(); + void scrollIndicator(int dp); + +}; + +class ScrollListContainer : public QWidget +{ + Q_OBJECT +public: + explicit ScrollListContainer(QWidget* parent = nullptr); + void AddWidget(QWidget* widget, bool setAnimation = true); + void RemoveWidget(QWidget* widget = nullptr); + void updateHeight(); + void clear(); + //void RemoveWidget(QWidget* widget); + +private: + //QTimer* newWidgetFade; + int spacing = 3; + QVector widgets; + int size = 0; + QVector ys; + + void paintEvent(QPaintEvent* event); + +signals: + +private slots: + +}; + +class ScrollListIndicator : public QWidget +{ + Q_OBJECT + +private: + QColor curColor; + QColor defaultColor = QColor(100, 100, 100, 130); + QColor hoverColor = QColor(70, 70, 70, 150); + QColor pressColor = QColor(50, 50, 50, 170); + + QTimer* hovTimer; + QTimer* aniPause; + + int lastY; + + int defaultWidth = 2; + int defaultWidthAtFocus = 9; + int margin = 3; + + bool pressed = false; + +public: + explicit ScrollListIndicator(QWidget* parent = nullptr); + +private: + void paintEvent(QPaintEvent* event); + void enterEvent(QEnterEvent* event); + void leaveEvent(QEvent* event); + void mousePressEvent(QMouseEvent* event); + void mouseMoveEvent(QMouseEvent* event); + void mouseReleaseEvent(QMouseEvent* event); + +signals: + void scrollPage(int); + +private slots: + void setHoverActive(); + +}; From e6bab8a3456248422fd3fff042b8f81d9def039d Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Sat, 17 Dec 2022 11:39:03 +0800 Subject: [PATCH 20/26] [UI][FIX] Fix sidebar color stylesheet - Include alpha value --- FinalProject/sidebar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FinalProject/sidebar.cpp b/FinalProject/sidebar.cpp index c36052d..4ee8dd1 100644 --- a/FinalProject/sidebar.cpp +++ b/FinalProject/sidebar.cpp @@ -15,7 +15,7 @@ SideBar::SideBar(QWidget* parent) // Create stylesheet setObjectName("sideBar"); - QString sideBarStyleSheet = "QWidget#sideBar{background-color:" + _backgroundColor.name() + "; }"; + QString sideBarStyleSheet = "QWidget#sideBar{background-color:" + _backgroundColor.name(QColor::HexArgb) + "; }"; setStyleSheet(sideBarStyleSheet); // Create main layout @@ -119,7 +119,7 @@ void SideBar::collapse() { void SideBar::setBackgroundColor(QColor color) { _backgroundColor = color; - QString sideBarStyleSheet = "QWidget#sideBar{background-color:" + _backgroundColor.name() + "; }"; + QString sideBarStyleSheet = "QWidget#sideBar{background-color:" + _backgroundColor.name(QColor::HexArgb) + "; }"; setStyleSheet(sideBarStyleSheet); } From 2fd1d6db24ba943d643bde02c65aa2b53229879b Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Sat, 17 Dec 2022 11:41:13 +0800 Subject: [PATCH 21/26] [CORE][ADD] Enable cross context model transferring - Reload texture on another context - Copy meshes - [BUG] memory leak (not fixed yet) --- FinalProject/renderable.cpp | 9 +++++++++ FinalProject/renderable.h | 11 ++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/FinalProject/renderable.cpp b/FinalProject/renderable.cpp index 86463a1..27e4eef 100644 --- a/FinalProject/renderable.cpp +++ b/FinalProject/renderable.cpp @@ -6,6 +6,10 @@ Renderable::Renderable(Model* model) : _model(model) {} Renderable::Renderable(Model* model, glm::vec3 position) : _model(model), _position(position) {} +void Renderable::setModel(Model* model) { + _model = model; +} + void Renderable::move(glm::vec3 deltaVec) { _position += deltaVec; } @@ -31,6 +35,11 @@ void Renderable::setScale(float scale) { } void Renderable::render(ShaderProgram shader) { + // Check if initialized + if (_model == nullptr) { + Logger::error("Tries to render an uninitialized renderable object"); + return; + } // Set model matrix shader.setUniform("model", modelMatrix()); // Render diff --git a/FinalProject/renderable.h b/FinalProject/renderable.h index 7e5912a..6382901 100644 --- a/FinalProject/renderable.h +++ b/FinalProject/renderable.h @@ -7,8 +7,16 @@ #include "shader.h" class Renderable { +public: + static Renderable empty() { + return Renderable(); + } + private: - Model* _model; + Renderable() {} + +private: + Model* _model = nullptr; glm::vec3 _position = glm::vec3(0.0f); glm::mat4 _rotation = glm::mat4(1.0f); glm::vec3 _scale = glm::vec3(1.0f); @@ -18,6 +26,7 @@ public: Renderable(Model* model, glm::vec3 position); public: + void setModel(Model* model); void move(glm::vec3 deltaVec); void setPosition(glm::vec3 position); void rotate(glm::vec3 axis, float deltaAngle); From 5ff60b1e8648cfef056af51f1ae28d70e8c36974 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Sat, 17 Dec 2022 11:41:41 +0800 Subject: [PATCH 22/26] [UI][FIX] Fix color name in style sheet --- FinalProject/roundedcornerwidget.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/FinalProject/roundedcornerwidget.cpp b/FinalProject/roundedcornerwidget.cpp index f605d79..2f076fa 100644 --- a/FinalProject/roundedcornerwidget.cpp +++ b/FinalProject/roundedcornerwidget.cpp @@ -38,7 +38,7 @@ void RoundedCornerWidget::initializeWidgetUI() { _borderWidget = new QWidget(this); _borderWidget->setObjectName("borderWidget"); QString borderWidgetStyleSheet = - "QWidget#borderWidget{background-color:#00FFFFFF;border:2px solid " + _borderColor.name() + ";" + "QWidget#borderWidget{background-color:#00FFFFFF;border:2px solid " + _borderColor.name(QColor::HexArgb) + ";" "border-radius:" + QString::number(_cornerRadius) + "px;}"; _borderWidget->setStyleSheet(borderWidgetStyleSheet); _borderWidget->setAttribute(Qt::WA_TransparentForMouseEvents); @@ -74,10 +74,12 @@ void RoundedCornerWidget::setCornerRadius(int radius) { _cornerRadius = radius; // Modify the corner radius in the current style sheet of the border widget - QString styleSheet = _borderWidget->styleSheet(); - styleSheet.replace(QRegularExpression("border-radius:\\d+px;"), - QString("border-radius:%1px;").arg(_cornerRadius)); - _borderWidget->setStyleSheet(styleSheet); + if (_borderWidget != nullptr) { + QString styleSheet = _borderWidget->styleSheet(); + styleSheet.replace(QRegularExpression("border-radius:\\d+px;"), + QString("border-radius:%1px;").arg(_cornerRadius)); + _borderWidget->setStyleSheet(styleSheet); + } // Reset the mask of the main widget QPainterPath path; @@ -91,10 +93,12 @@ void RoundedCornerWidget::setBorderColor(QColor color) { _borderColor = color; // Modify the border color in the current style sheet of the border widget - QString styleSheet = _borderWidget->styleSheet(); - styleSheet.replace(QRegularExpression("border:2px solid #\\w+;"), - QString("border:2px solid %1;").arg(_borderColor.name())); - _borderWidget->setStyleSheet(styleSheet); + if (_borderWidget != nullptr) { + QString styleSheet = _borderWidget->styleSheet(); + styleSheet.replace(QRegularExpression("border:2px solid #\\w+;"), + QString("border:2px solid %1;").arg(_borderColor.name(QColor::HexArgb))); + _borderWidget->setStyleSheet(styleSheet); + } } QWidget* RoundedCornerWidget::mainWidget() const { From d818ccd4692a8bbf3c2f35b310a93c9dea88cf73 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Sat, 17 Dec 2022 11:41:55 +0800 Subject: [PATCH 23/26] [UI][ADD] Model thumbnail widget --- FinalProject/modelthumbnailwidget.cpp | 75 +++++++++++++++++++++++++++ FinalProject/modelthumbnailwidget.h | 30 +++++++++++ 2 files changed, 105 insertions(+) create mode 100644 FinalProject/modelthumbnailwidget.cpp create mode 100644 FinalProject/modelthumbnailwidget.h diff --git a/FinalProject/modelthumbnailwidget.cpp b/FinalProject/modelthumbnailwidget.cpp new file mode 100644 index 0000000..b6e1fcf --- /dev/null +++ b/FinalProject/modelthumbnailwidget.cpp @@ -0,0 +1,75 @@ +#include +#include + +#include "modelthumbnailwidget.h" + +ModelThumbnailWidget::ModelThumbnailWidget(Model* model, QWidget* parent) : + QOpenGLWidget(parent), _model(model) +{ + // OpenGL initialize + QSurfaceFormat format; + format.setProfile(QSurfaceFormat::CoreProfile); + format.setVersion(4, 3); + setFormat(format); + + // Create a folder + QDir dir("./temp/shaders"); + if (!dir.exists()) { + dir.mkpath("."); + } + + // Copy the shaders to the folder + if (QFile::exists("./temp/shaders/vertexshader.vs")) { + QFile::remove("./temp/shaders/vertexshader.vs"); + } + QFile::copy(":/shaders/vertexshader.vs", "./temp/shaders/vertexshader.vs"); + QFile::setPermissions("./temp/shaders/vertexshader.vs", QFileDevice::ReadOwner | QFileDevice::WriteOwner); + if (QFile::exists("./temp/shaders/fragmentshader.fs")) { + QFile::remove("./temp/shaders/fragmentshader.fs"); + } + QFile::copy(":/shaders/fragmentshader.fs", "./temp/shaders/fragmentshader.fs"); + QFile::setPermissions("./temp/shaders/fragmentshader.fs", QFile::ReadOwner | QFile::WriteOwner); +} + +ModelThumbnailWidget::~ModelThumbnailWidget() { +} + +void ModelThumbnailWidget::initializeGL() { + initializeOpenGLFunctions(); + + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glEnable(GL_DEPTH_TEST); + + _shaderProgram.ensureInitialized(); + + VertexShader vertexShader("./temp/shaders/vertexshader.vs"); + FragmentShader fragmentShader("./temp/shaders/fragmentshader.fs"); + _shaderProgram.attachShader(vertexShader); + _shaderProgram.attachShader(fragmentShader); + vertexShader.dispose(); + fragmentShader.dispose(); + + _object.setModel(_model->copyToCurrentContext()); + _camera.setPosition(glm::vec3(0.0f, 0.0f, 7.0f)); +} + +void ModelThumbnailWidget::paintGL() { + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + _shaderProgram.bind(); + + glm::mat4 view = _camera.viewMatrix(); + glm::mat4 projection = glm::perspective(glm::radians(_camera.zoomVal()), (float)width() / (float)height(), 0.1f, 100.0f); + _shaderProgram.setUniform("view", view); + _shaderProgram.setUniform("projection", projection); + + _object.render(_shaderProgram); + + _shaderProgram.unbind(); +} + +void ModelThumbnailWidget::resizeGL(int w, int h) { + glViewport(0, 0, w, h); +} \ No newline at end of file diff --git a/FinalProject/modelthumbnailwidget.h b/FinalProject/modelthumbnailwidget.h new file mode 100644 index 0000000..05377ed --- /dev/null +++ b/FinalProject/modelthumbnailwidget.h @@ -0,0 +1,30 @@ +#pragma once + +#include +#include +#include + +#include "model.h" +#include "camera.h" +#include "shader.h" +#include "renderable.h" + +class ModelThumbnailWidget : public QOpenGLWidget, protected QOpenGLFunctions +{ + Q_OBJECT + +public: + ModelThumbnailWidget(Model* model, QWidget* parent = 0); + ~ModelThumbnailWidget(); + +private: + Model* _model = nullptr; + Renderable _object = Renderable::empty(); + ShaderProgram _shaderProgram = ShaderProgram::empty(); + Camera _camera; + +protected: + virtual void initializeGL() override; + virtual void paintGL() override; + virtual void resizeGL(int w, int h) override; +}; From ffa0ac065adcae94e5ad984bbb0c04aa7a82e12c Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Sat, 17 Dec 2022 11:42:18 +0800 Subject: [PATCH 24/26] [UI][ADD] Model selectable item button --- FinalProject/modelselectable.cpp | 84 +++++++++++++++++++++++++++++++- FinalProject/modelselectable.h | 44 ++++++++++++++++- 2 files changed, 125 insertions(+), 3 deletions(-) diff --git a/FinalProject/modelselectable.cpp b/FinalProject/modelselectable.cpp index 6f70f09..811585f 100644 --- a/FinalProject/modelselectable.cpp +++ b/FinalProject/modelselectable.cpp @@ -1 +1,83 @@ -#pragma once +#include + +#include "modelselectable.h" +#include "sceneviewer.h" + +ModelSelectable::ModelSelectable(Model* model, QWidget* parent) : + QWidget(parent), _model(model) +{ + // Set size + setFixedHeight(150); + setSizeIncrement(QSizePolicy::Expanding, QSizePolicy::Fixed); + + // Create stretch layout to hold the main button + _stretchLayout = new QHBoxLayout(this); + _stretchLayout->setContentsMargins(0, 0, 0, 0); + _stretchLayout->setSpacing(0); + setLayout(_stretchLayout); + + // Create main button widget + _mainBtn = new PushButton(nullptr, this); + _mainBtn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + _mainBtn->setMargin(0, 0, 0, 0); + _mainBtn->setRadius(10); + _mainBtn->setBackgroundColor(QColor(58, 143, 183, 15)); + _stretchLayout->addWidget(_mainBtn); + _mainBtn->show(); + + // Create widget to hold the button content + _mainBtnChild = new QWidget(_mainBtn); + _mainBtnChild->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + //_mainBtnChild->setObjectName("mainBtnChild"); + //_mainBtnChild->setStyleSheet("QWidget#mainBtnChild{border: 3px solid " + _borderColor.name(QColor::HexArgb) + ";" + // "border-radius:" + QString::number(_cornerRadius) + "px;}"); + _mainBtn->setChildWidget(_mainBtnChild); + _mainBtnChild->show(); + + // Create layout to hold the button content + _mainLayout = new QHBoxLayout(_mainBtnChild); + _mainLayout->setContentsMargins(16, 12, 16, 12); + _mainLayout->setSpacing(12); + _mainBtnChild->setLayout(_mainLayout); + + // Create model thumbnail widget + _thumbnailContainer = new RoundedCornerWidget(_mainBtnChild); + _thumbnailContainer->setCornerRadius(_cornerRadius); + _thumbnailContainer->setBorderColor(QColor(255, 255, 255, 0)); + _thumbnailContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + _mainLayout->addWidget(_thumbnailContainer); + _thumbnailContainer->show(); + + _thumbnailWidget = new ModelThumbnailWidget(_model, _mainBtnChild); + _thumbnailWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + _thumbnailContainerLayout = new QHBoxLayout(_thumbnailContainer->mainWidget()); + _thumbnailContainerLayout->setContentsMargins(0, 0, 0, 0); + _thumbnailContainerLayout->setSpacing(0); + _thumbnailContainer->mainWidget()->setLayout(_thumbnailContainerLayout); + _thumbnailContainerLayout->addWidget(_thumbnailWidget); + _thumbnailWidget->show(); + + // Create delete button + _deleteButton = new PushButton(nullptr, _mainBtnChild); + _deleteButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + _deleteIcon = new QLabel(_deleteButton); + _deleteIcon->setFont(QFont("Font Awesome 6 Free Regular", 12)); + _deleteIcon->setText("\uf2ed"); + _deleteIcon->setAlignment(Qt::AlignCenter); + _deleteButton->setChildWidget(_deleteIcon); + _deleteButton->setColorScheme(QColor(171, 59, 58)); + _deleteButton->setIndicatorColor(QColor(171, 59, 58, 0)); + _deleteIcon->show(); + _mainLayout->addWidget(_deleteButton); + _deleteButton->show(); + + // Connect + connect(_mainBtn, &PushButton::onClick, this, &ModelSelectable::onSelected); + connect(_deleteButton, &PushButton::onClick, this, &ModelSelectable::onRemoved); +} + +ModelSelectable::~ModelSelectable() +{ + delete _model; +} \ No newline at end of file diff --git a/FinalProject/modelselectable.h b/FinalProject/modelselectable.h index 7fed472..acb94cf 100644 --- a/FinalProject/modelselectable.h +++ b/FinalProject/modelselectable.h @@ -1,6 +1,46 @@ #pragma once -#include "model.h" - #include +#include +#include +#include "model.h" +#include "pushbutton.h" +#include "roundedcornerwidget.h" +#include "modelthumbnailwidget.h" +#include "lineeditwidget.h" + +class ModelSelectable : public QWidget { + + Q_OBJECT + +public: + ModelSelectable(Model* model, QWidget* parent = 0); + ~ModelSelectable(); + +private: + // Data + Model* _model; + + // UI control variables + const QColor _borderColor = QColor(58, 143, 183); + const int _cornerRadius = 10; + + // UI elements + QHBoxLayout* _stretchLayout = nullptr; + PushButton* _mainBtn = nullptr; + + QWidget* _mainBtnChild = nullptr; + QHBoxLayout* _mainLayout = nullptr; + + RoundedCornerWidget* _thumbnailContainer = nullptr; + QHBoxLayout* _thumbnailContainerLayout = nullptr; + ModelThumbnailWidget* _thumbnailWidget = nullptr; + + PushButton* _deleteButton = nullptr; + QLabel* _deleteIcon = nullptr; + +signals: + void onSelected(); + void onRemoved(); +}; From edeaa7f3c651971657649dc8b51363fd493b5bb2 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Sat, 17 Dec 2022 11:42:32 +0800 Subject: [PATCH 25/26] [UI][ADD] Model selection list --- FinalProject/modelselector.cpp | 84 +++++++++++++++++++++++++++++++++- FinalProject/modelselector.h | 44 ++++++++++++++---- 2 files changed, 119 insertions(+), 9 deletions(-) diff --git a/FinalProject/modelselector.cpp b/FinalProject/modelselector.cpp index 6f70f09..c7c37c6 100644 --- a/FinalProject/modelselector.cpp +++ b/FinalProject/modelselector.cpp @@ -1 +1,83 @@ -#pragma once +#include + +#include "modelselector.h" + +ModelSelector::ModelSelector(QWidget* parent) : + QWidget(parent) +{ + // Set maximum width + setMaximumWidth(240); + + // Set up the main layout + _stretchLayout = new QVBoxLayout(this); + _stretchLayout->setContentsMargins(0, 0, 0, 0); + _stretchLayout->setSpacing(8); + setLayout(_stretchLayout); + + // Create and add the 'add new' button + _addNewObjectBtn = new PushButton(nullptr, this); + _addNewObjectBtn->setChildWidget(new QLabel("Add New", _addNewObjectBtn)); + _addNewObjectBtn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + _addNewObjectBtn->setMargin(32, 24, 32, 24); + _addNewObjectBtn->setRadius(10); + _addNewObjectBtn->setBackgroundColor(QColor(58, 143, 183, 20)); + _stretchLayout->addWidget(_addNewObjectBtn); + _addNewObjectBtn->show(); + + // Create the selection list widget + _objectList = new ScrollListWidget(this); + _stretchLayout->addWidget(_objectList); + _objectList->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + _objectList->show(); + + // Connect + connect(_addNewObjectBtn, &PushButton::onClick, this, &ModelSelector::addNewObject); +} + +ModelSelector::~ModelSelector() {} + +void ModelSelector::addNewObject() { + QString path = getNewObjectPath(); + if (path.isEmpty()) { + return; + } + + Model* model = loadObject(path); + ModelSelectable* newSelectable = new ModelSelectable(model, this); + + _objectSelectables.push_back(newSelectable); + _objectList->addWidget(newSelectable); + + connect(newSelectable, &ModelSelectable::onSelected, this, [=]() { + emit onObjectSelected(model); + }); + connect(newSelectable, &ModelSelectable::onRemoved, this, [=]() { + removeObject(newSelectable); + }); +} + +QString ModelSelector::getNewObjectPath() { + QString path = QFileDialog::getOpenFileName(this, "Select Model", "", "Model Files (*.obj)"); + return path; +} + +Model* ModelSelector::loadObject(const QString& path) { + Model* model = new Model(path.toStdString()); + return model; +} + +void ModelSelector::removeObject(ModelSelectable* selectable) { + // Check if selectable is still in list + if (!_objectSelectables.contains(selectable)) { + return; + } + + // Remove the selectable from the list + _objectSelectables.removeAll(selectable); + + // Remove the selectable from the list widget + _objectList->removeWidget(selectable); + + // Delete the selectable + delete selectable; +} diff --git a/FinalProject/modelselector.h b/FinalProject/modelselector.h index 252e624..0391f8e 100644 --- a/FinalProject/modelselector.h +++ b/FinalProject/modelselector.h @@ -1,12 +1,40 @@ #pragma once #include +#include +#include -//class ModelSelector : public QWidget -//{ -// Q_OBJECT -// -//public: -// ModelSelector(QWidget* parent = 0); -// ~ModelSelector(); -//}; +#include "scrolllistwidget.h" +#include "pushbutton.h" +#include "modelselectable.h" +#include "model.h" + +class ModelSelector : public QWidget +{ + Q_OBJECT + +public: + ModelSelector(QWidget* parent = 0); + ~ModelSelector(); + +private: + // UI elements + QVBoxLayout* _stretchLayout = nullptr; + PushButton* _addNewObjectBtn = nullptr; + ScrollListWidget* _objectList = nullptr; + + // Object selection storage + QList _objectSelectables; + +private: + // Slot functions + void addNewObject(); + + // Util functions + QString getNewObjectPath(); + Model* loadObject(const QString& path); + void removeObject(ModelSelectable* selectable); + +signals: + void onObjectSelected(Model* selectedModel); +}; From 795b542dda411d4baafe5271c586023bcda7cd85 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Sat, 17 Dec 2022 11:43:22 +0800 Subject: [PATCH 26/26] Adapt to previous changes - Tested version, runnable --- FinalProject/FinalProject.vcxproj | 10 +-- FinalProject/FinalProject.vcxproj.filters | 76 +++++++++++++++-------- FinalProject/editorpage.cpp | 5 ++ FinalProject/editorpage.h | 3 + FinalProject/framelesswindow.cpp | 9 +-- FinalProject/model.cpp | 29 +++++++++ FinalProject/model.h | 8 +++ FinalProject/sceneviewer.cpp | 6 -- 8 files changed, 106 insertions(+), 40 deletions(-) diff --git a/FinalProject/FinalProject.vcxproj b/FinalProject/FinalProject.vcxproj index 48f579f..f3f0de1 100644 --- a/FinalProject/FinalProject.vcxproj +++ b/FinalProject/FinalProject.vcxproj @@ -115,12 +115,13 @@ + - + @@ -148,15 +149,16 @@ - + + - - + + diff --git a/FinalProject/FinalProject.vcxproj.filters b/FinalProject/FinalProject.vcxproj.filters index 8b472f3..7638a20 100644 --- a/FinalProject/FinalProject.vcxproj.filters +++ b/FinalProject/FinalProject.vcxproj.filters @@ -59,6 +59,24 @@ {1351d841-7665-48d3-9850-da0738823396} + + {5e6e1e89-1c77-4a89-92cc-d64ea2546961} + + + {d2b9abbc-ef10-4990-96a1-a88f9c217dcf} + + + {d6a38868-baed-45d5-9cbf-3faa3b563fa9} + + + {4b5e61f5-3dfe-44d7-bfcc-cf5b70528b16} + + + {995296ff-ac0c-4996-9692-c0e017e5fc03} + + + {6c5ac0df-26ad-40ad-860c-3d0372b81094} + @@ -108,25 +126,13 @@ Source Files\Qt Widgets\Pages\Scene Editor - - Source Files\Qt Widgets\Pages\Scene Editor - - - Source Files\Qt Widgets\Pages\Scene Editor - - - Source Files\Qt Widgets\Pages\Scene Editor - - - Source Files\Qt Widgets\Pages\Scene Editor - Source Files\Qt Widgets\GUI Components Source Files\Qt Widgets\GUI Components - + Source Files\Qt Widgets\GUI Components @@ -144,6 +150,21 @@ Source Files\Qt Widgets\GUI Components + + Source Files\Qt Widgets\Pages\Scene Editor\Object Selector + + + Source Files\Qt Widgets\Pages\Scene Editor\Object Selector + + + Source Files\Qt Widgets\Pages\Scene Editor\Object Setter + + + Source Files\Qt Widgets\Pages\Scene Editor\Scene Viewer + + + Source Files\Qt Widgets\Pages\Scene Editor\Object Selector + @@ -182,26 +203,14 @@ Header Files\Utils - - Header Files\Qt Widgets\Pages\Scene Editor - - Header Files\Qt Widgets\Pages\Scene Editor - - - Header Files\Qt Widgets\Pages\Scene Editor - - - Header Files\Qt Widgets\GUI Components + Header Files\Qt Widgets\Pages\Scene Editor\Object Setter Header Files\Qt Widgets - - Header Files\Qt Widgets\Pages\Scene Editor - Header Files\Qt Widgets\GUI Components @@ -226,6 +235,21 @@ Header Files\Qt Widgets\GUI Components + + Header Files\Qt Widgets\GUI Components + + + Header Files\Qt Widgets\Pages\Scene Editor\Scene Viewer + + + Header Files\Qt Widgets\Pages\Scene Editor\Object Selector + + + Header Files\Qt Widgets\Pages\Scene Editor\Object Selector + + + Header Files\Qt Widgets\Pages\Scene Editor\Object Selector + diff --git a/FinalProject/editorpage.cpp b/FinalProject/editorpage.cpp index 94ae9df..a10bc68 100644 --- a/FinalProject/editorpage.cpp +++ b/FinalProject/editorpage.cpp @@ -31,6 +31,11 @@ EditorPage::EditorPage(QWidget* parent) : _mainWidget->setLayout(_mainLayout); _titleLayout->addWidget(_mainWidget); _mainWidget->show(); + + // Generate model selector + _modelSelector = new ModelSelector(_mainWidget); + _mainLayout->addWidget(_modelSelector); + _modelSelector->show(); // Generate scene viewer _sceneViewerContainer = new RoundedCornerWidget(_mainWidget); diff --git a/FinalProject/editorpage.h b/FinalProject/editorpage.h index ac2a645..acf41cf 100644 --- a/FinalProject/editorpage.h +++ b/FinalProject/editorpage.h @@ -7,6 +7,7 @@ #include "pagewidget.h" #include "sceneviewer.h" #include "roundedcornerwidget.h" +#include "modelselector.h" class EditorPage : public PageWidget { @@ -32,6 +33,8 @@ private: QWidget* _mainWidget = nullptr; QHBoxLayout* _mainLayout = nullptr; + ModelSelector* _modelSelector = nullptr; + RoundedCornerWidget* _sceneViewerContainer = nullptr; QVBoxLayout* _sceneViewerContainerLayout = nullptr; SceneViewer* _sceneViewer = nullptr; diff --git a/FinalProject/framelesswindow.cpp b/FinalProject/framelesswindow.cpp index 8bcfbc0..bd77c39 100644 --- a/FinalProject/framelesswindow.cpp +++ b/FinalProject/framelesswindow.cpp @@ -13,6 +13,7 @@ FramelessWindow::FramelessWindow(int cornerRadius, unsigned int attributes, QWid { setAttribute(Qt::WA_TranslucentBackground); setWindowFlags(Qt::FramelessWindowHint); + setFocusPolicy(Qt::StrongFocus); setMouseTracking(true); setFocus(); @@ -27,7 +28,7 @@ FramelessWindow::FramelessWindow(int cornerRadius, unsigned int attributes, QWid setLayout(_stretchLayout); // Set style sheet for window widget - QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_cornerRadius) + "px;}"; + QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_cornerRadius) + "px;}"; _windowWidget->setStyleSheet(windowWidgetStyleSheet); // Set shadow for window widget @@ -119,7 +120,7 @@ void FramelessWindow::initializeWindowUI() { _windowBorder = new QWidget(this); _windowBorder->setObjectName("windowBorder"); QString windowBorderStyleSheet = - "QWidget#windowBorder{background-color:#00FFFFFF;border:1.5px solid " + _borderColor.name() + ";border-radius:" + QString::number(_cornerRadius) + "px;}"; + "QWidget#windowBorder{background-color:#00FFFFFF;border:1.5px solid " + _borderColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_cornerRadius) + "px;}"; _windowBorder->setStyleSheet(windowBorderStyleSheet); _windowBorder->setAttribute(Qt::WA_TransparentForMouseEvents); _windowBorder->move(_windowWidget->pos() - QPoint(1, 1)); @@ -170,7 +171,7 @@ void FramelessWindow::controlWindowScale() { _windowShadow->setEnabled(false); _windowBorder->hide(); - QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name() + ";}"; + QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";}"; _windowWidget->setStyleSheet(windowWidgetStyleSheet); _stretchLayout->setContentsMargins(0, 0, 0, 0); @@ -194,7 +195,7 @@ void FramelessWindow::controlWindowScale() { _windowShadow->setEnabled(true); _windowBorder->show(); - QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_cornerRadius) + "px;}"; + QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_cornerRadius) + "px;}"; _windowWidget->setStyleSheet(windowWidgetStyleSheet); QPainterPath path; diff --git a/FinalProject/model.cpp b/FinalProject/model.cpp index 1809c28..db5f75a 100644 --- a/FinalProject/model.cpp +++ b/FinalProject/model.cpp @@ -13,6 +13,13 @@ Model::~Model() { // TODO: Maybe delete all meshes? } +Model::Model(std::vector&& meshes, std::vector&& textures, std::string directory) { + _meshes = std::move(meshes); + _texturesLoaded = std::move(textures); + _directory = directory; + _status = LOADED; +} + // file path is ...\\...\\.obj, and processnode & processmesh have been called here void Model::loadModel(std::string path) { Logger::info("Loading model from path: " + path); @@ -177,3 +184,25 @@ void Model::render(const ShaderProgram& shader) const { _meshes[i].render(shader); } } + +Model* Model::copyToCurrentContext() const { + // Reload all textures + std::vector newTextures; + for (unsigned int i = 0; i < _texturesLoaded.size(); i++) { + // Load texture + Texture newTexture = Texture(_texturesLoaded[i].type(), _directory + '/' + _texturesLoaded[i].path()); + newTextures.push_back(newTexture); + } + + // Copy all meshes + std::vector newMeshes; + for (unsigned int i = 0; i < _meshes.size(); i++) { + // Copy mesh + Mesh newMesh = Mesh(_meshes[i].vertices(), _meshes[i].indices(), newTextures); + newMeshes.push_back(newMesh); + } + + // Create new model + Model* newModel = new Model(std::move(newMeshes), std::move(newTextures), _directory); + return newModel; +} diff --git a/FinalProject/model.h b/FinalProject/model.h index 2e319d2..5b86343 100644 --- a/FinalProject/model.h +++ b/FinalProject/model.h @@ -23,8 +23,16 @@ public: Model(std::string path); ~Model(); +private: + Model(std::vector&& meshes, std::vector&& textures, std::string directory); + public: inline MODELSTATUS status() const { return _status; } + inline int meshCount() const { return _meshes.size(); } + inline int textureCount() const { return _texturesLoaded.size(); } + inline std::string directory() const { return _directory; } + + Model* copyToCurrentContext() const; private: void loadModel(std::string path); diff --git a/FinalProject/sceneviewer.cpp b/FinalProject/sceneviewer.cpp index 98198f8..ede88ab 100644 --- a/FinalProject/sceneviewer.cpp +++ b/FinalProject/sceneviewer.cpp @@ -5,7 +5,6 @@ #include #include #include -#include #include "vbo.h" #include "vao.h" @@ -66,11 +65,6 @@ void SceneViewer::initializeGL() { _shaderProgram.attachShader(fragmentShader); vertexShader.dispose(); fragmentShader.dispose(); - - Model* backpackModel = new Model("E:\\Repositories\\CollegeProjects\\CGAssignments\\FinalProject\\Models\\backpack\\backpack.obj"); - Logger::info("Model loaded"); - Renderable backpack(backpackModel); - _objects.push_back(backpack); _camera.setPosition(glm::vec3(0.0f, 0.0f, 10.0f)); }