Update to a new version notification
This commit is contained in:
141
src/widgets/updatenotificationwidget.cpp
Normal file
141
src/widgets/updatenotificationwidget.cpp
Normal file
@@ -0,0 +1,141 @@
|
||||
//
|
||||
// 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();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user