145 lines
4.1 KiB
C++
145 lines
4.1 KiB
C++
//
|
|
// Created by yuriypuchkov on 09.12.2020.
|
|
//
|
|
|
|
#include "updatenotificationwidget.h"
|
|
#include "src/utils/confighandler.h"
|
|
#include <QDesktopServices>
|
|
#include <QLabel>
|
|
#include <QPropertyAnimation>
|
|
#include <QPushButton>
|
|
#include <QScrollArea>
|
|
#include <QTimer>
|
|
#include <QVBoxLayout>
|
|
#include <QWheelEvent>
|
|
|
|
UpdateNotificationWidget::UpdateNotificationWidget(
|
|
QWidget* parent,
|
|
const QString& appLatestVersion,
|
|
const QString& appLatestUrl)
|
|
: QWidget(parent)
|
|
, m_appLatestVersion(appLatestVersion)
|
|
, m_appLatestUrl(appLatestUrl)
|
|
, m_layout(nullptr)
|
|
{
|
|
setMinimumSize(400, 100);
|
|
initInternalPanel();
|
|
setAttribute(Qt::WA_TransparentForMouseEvents);
|
|
setCursor(Qt::ArrowCursor);
|
|
|
|
m_showAnimation = new QPropertyAnimation(m_internalPanel, "geometry", this);
|
|
m_showAnimation->setEasingCurve(QEasingCurve::InOutQuad);
|
|
m_showAnimation->setDuration(300);
|
|
|
|
m_hideAnimation = new QPropertyAnimation(m_internalPanel, "geometry", this);
|
|
m_hideAnimation->setEasingCurve(QEasingCurve::InOutQuad);
|
|
m_hideAnimation->setDuration(300);
|
|
|
|
connect(m_hideAnimation,
|
|
&QPropertyAnimation::finished,
|
|
m_internalPanel,
|
|
&QWidget::hide);
|
|
setAppLatestVersion(appLatestVersion);
|
|
}
|
|
|
|
void UpdateNotificationWidget::show()
|
|
{
|
|
setAttribute(Qt::WA_TransparentForMouseEvents, false);
|
|
m_showAnimation->setStartValue(QRect(0, -height(), width(), height()));
|
|
m_showAnimation->setEndValue(QRect(0, 0, width(), height()));
|
|
m_internalPanel->show();
|
|
m_showAnimation->start();
|
|
QWidget::show();
|
|
}
|
|
|
|
void UpdateNotificationWidget::hide()
|
|
{
|
|
setAttribute(Qt::WA_TransparentForMouseEvents);
|
|
m_hideAnimation->setStartValue(QRect(0, 0, width(), height()));
|
|
m_hideAnimation->setEndValue(QRect(0, -height(), 0, height()));
|
|
m_hideAnimation->start();
|
|
m_internalPanel->hide();
|
|
QWidget::hide();
|
|
}
|
|
|
|
void UpdateNotificationWidget::setAppLatestVersion(const QString& latestVersion)
|
|
{
|
|
m_appLatestVersion = latestVersion;
|
|
QString newVersion =
|
|
tr("New Flameshot version %1 is available").arg(latestVersion);
|
|
m_notification->setText(newVersion);
|
|
}
|
|
|
|
void UpdateNotificationWidget::laterButton()
|
|
{
|
|
hide();
|
|
}
|
|
|
|
void UpdateNotificationWidget::ignoreButton()
|
|
{
|
|
ConfigHandler().setIgnoreUpdateToVersion(m_appLatestVersion);
|
|
hide();
|
|
}
|
|
|
|
void UpdateNotificationWidget::updateButton()
|
|
{
|
|
QDesktopServices::openUrl(m_appLatestUrl);
|
|
hide();
|
|
if (parentWidget()) {
|
|
parentWidget()->close();
|
|
}
|
|
}
|
|
|
|
void UpdateNotificationWidget::initInternalPanel()
|
|
{
|
|
m_internalPanel = new QScrollArea(this);
|
|
m_internalPanel->setAttribute(Qt::WA_NoMousePropagation);
|
|
QWidget* widget = new QWidget();
|
|
m_internalPanel->setWidget(widget);
|
|
m_internalPanel->setWidgetResizable(true);
|
|
|
|
QColor bgColor = palette().window().color();
|
|
bgColor.setAlphaF(0.0);
|
|
m_internalPanel->setStyleSheet(
|
|
QStringLiteral("QScrollArea {background-color: %1}").arg(bgColor.name()));
|
|
m_internalPanel->hide();
|
|
|
|
//
|
|
m_layout = new QVBoxLayout();
|
|
widget->setLayout(m_layout);
|
|
|
|
// caption
|
|
m_notification = new QLabel(m_appLatestVersion, this);
|
|
m_layout->addWidget(m_notification);
|
|
|
|
// buttons layout
|
|
QHBoxLayout* buttonsLayout = new QHBoxLayout();
|
|
QSpacerItem* bottonsSpacer = new QSpacerItem(1, 1, QSizePolicy::Expanding);
|
|
buttonsLayout->addSpacerItem(bottonsSpacer);
|
|
m_layout->addLayout(buttonsLayout);
|
|
|
|
// ignore
|
|
QPushButton* ignoreBtn = new QPushButton(tr("Ignore"), this);
|
|
buttonsLayout->addWidget(ignoreBtn);
|
|
connect(ignoreBtn,
|
|
&QPushButton::clicked,
|
|
this,
|
|
&UpdateNotificationWidget::ignoreButton);
|
|
|
|
// later
|
|
QPushButton* laterBtn = new QPushButton(tr("Later"), this);
|
|
buttonsLayout->addWidget(laterBtn);
|
|
connect(laterBtn,
|
|
&QPushButton::clicked,
|
|
this,
|
|
&UpdateNotificationWidget::laterButton);
|
|
|
|
// update
|
|
QPushButton* updateBtn = new QPushButton(tr("Update"), this);
|
|
buttonsLayout->addWidget(updateBtn);
|
|
connect(updateBtn,
|
|
&QPushButton::clicked,
|
|
this,
|
|
&UpdateNotificationWidget::updateButton);
|
|
}
|