Add a timer for clicking away the notification dialog
This commit is contained in:
parent
de2eb3fc54
commit
4f452d5815
@ -311,6 +311,8 @@ gui/dialogs/UpdateDialog.h
|
|||||||
gui/dialogs/UpdateDialog.cpp
|
gui/dialogs/UpdateDialog.cpp
|
||||||
gui/dialogs/ScreenshotDialog.h
|
gui/dialogs/ScreenshotDialog.h
|
||||||
gui/dialogs/ScreenshotDialog.cpp
|
gui/dialogs/ScreenshotDialog.cpp
|
||||||
|
gui/dialogs/NotificationDialog.h
|
||||||
|
gui/dialogs/NotificationDialog.cpp
|
||||||
|
|
||||||
# GUI - widgets
|
# GUI - widgets
|
||||||
gui/widgets/Common.h
|
gui/widgets/Common.h
|
||||||
@ -565,6 +567,7 @@ gui/dialogs/AccountSelectDialog.ui
|
|||||||
gui/dialogs/EditAccountDialog.ui
|
gui/dialogs/EditAccountDialog.ui
|
||||||
gui/dialogs/UpdateDialog.ui
|
gui/dialogs/UpdateDialog.ui
|
||||||
gui/dialogs/ScreenshotDialog.ui
|
gui/dialogs/ScreenshotDialog.ui
|
||||||
|
gui/dialogs/NotificationDialog.ui
|
||||||
|
|
||||||
# Widgets/other
|
# Widgets/other
|
||||||
gui/widgets/MCModInfoFrame.ui
|
gui/widgets/MCModInfoFrame.ui
|
||||||
|
@ -62,6 +62,7 @@
|
|||||||
#include "gui/dialogs/UpdateDialog.h"
|
#include "gui/dialogs/UpdateDialog.h"
|
||||||
#include "gui/dialogs/EditAccountDialog.h"
|
#include "gui/dialogs/EditAccountDialog.h"
|
||||||
#include "gui/dialogs/ScreenshotDialog.h"
|
#include "gui/dialogs/ScreenshotDialog.h"
|
||||||
|
#include "gui/dialogs/NotificationDialog.h"
|
||||||
|
|
||||||
#include "gui/ConsoleWindow.h"
|
#include "gui/ConsoleWindow.h"
|
||||||
|
|
||||||
@ -673,26 +674,8 @@ void MainWindow::notificationsChanged()
|
|||||||
NotificationChecker::NotificationEntry entry = *it;
|
NotificationChecker::NotificationEntry entry = *it;
|
||||||
if (!shownNotifications.contains(entry.id) && entry.applies())
|
if (!shownNotifications.contains(entry.id) && entry.applies())
|
||||||
{
|
{
|
||||||
QMessageBox::Icon icon;
|
NotificationDialog dialog(entry, this);
|
||||||
switch (entry.type)
|
if (dialog.exec() == NotificationDialog::DontShowAgain)
|
||||||
{
|
|
||||||
case NotificationChecker::NotificationEntry::Critical:
|
|
||||||
icon = QMessageBox::Critical;
|
|
||||||
break;
|
|
||||||
case NotificationChecker::NotificationEntry::Warning:
|
|
||||||
icon = QMessageBox::Warning;
|
|
||||||
break;
|
|
||||||
case NotificationChecker::NotificationEntry::Information:
|
|
||||||
icon = QMessageBox::Information;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
QMessageBox box(icon, tr("Notification"), entry.message, QMessageBox::Close, this);
|
|
||||||
QPushButton *dontShowAgainButton =
|
|
||||||
box.addButton(tr("Don't show again"), QMessageBox::AcceptRole);
|
|
||||||
box.setDefaultButton(QMessageBox::Close);
|
|
||||||
box.exec();
|
|
||||||
if (box.clickedButton() == dontShowAgainButton)
|
|
||||||
{
|
{
|
||||||
shownNotifications.append(entry.id);
|
shownNotifications.append(entry.id);
|
||||||
}
|
}
|
||||||
|
84
gui/dialogs/NotificationDialog.cpp
Normal file
84
gui/dialogs/NotificationDialog.cpp
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#include "NotificationDialog.h"
|
||||||
|
#include "ui_NotificationDialog.h"
|
||||||
|
|
||||||
|
#include <QTimerEvent>
|
||||||
|
|
||||||
|
NotificationDialog::NotificationDialog(const NotificationChecker::NotificationEntry &entry, QWidget *parent) :
|
||||||
|
QDialog(parent, Qt::MSWindowsFixedSizeDialogHint | Qt::WindowTitleHint | Qt::CustomizeWindowHint),
|
||||||
|
ui(new Ui::NotificationDialog)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
QStyle::StandardPixmap icon;
|
||||||
|
switch (entry.type)
|
||||||
|
{
|
||||||
|
case NotificationChecker::NotificationEntry::Critical:
|
||||||
|
icon = QStyle::SP_MessageBoxCritical;
|
||||||
|
break;
|
||||||
|
case NotificationChecker::NotificationEntry::Warning:
|
||||||
|
icon = QStyle::SP_MessageBoxWarning;
|
||||||
|
break;
|
||||||
|
case NotificationChecker::NotificationEntry::Information:
|
||||||
|
icon = QStyle::SP_MessageBoxInformation;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ui->iconLabel->setPixmap(style()->standardPixmap(icon, 0, this));
|
||||||
|
ui->messageLabel->setText(entry.message);
|
||||||
|
|
||||||
|
m_dontShowAgainText = tr("Don't show again");
|
||||||
|
m_closeText = tr("Close");
|
||||||
|
|
||||||
|
ui->dontShowAgainBtn->setText(m_dontShowAgainText + QString(" (%1)").arg(m_dontShowAgainTime));
|
||||||
|
ui->closeBtn->setText(m_closeText + QString(" (%1)").arg(m_closeTime));
|
||||||
|
|
||||||
|
startTimer(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
NotificationDialog::~NotificationDialog()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotificationDialog::timerEvent(QTimerEvent *event)
|
||||||
|
{
|
||||||
|
if (m_dontShowAgainTime > 0)
|
||||||
|
{
|
||||||
|
m_dontShowAgainTime--;
|
||||||
|
if (m_dontShowAgainTime == 0)
|
||||||
|
{
|
||||||
|
ui->dontShowAgainBtn->setText(m_dontShowAgainText);
|
||||||
|
ui->dontShowAgainBtn->setEnabled(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->dontShowAgainBtn->setText(m_dontShowAgainText + QString(" (%1)").arg(m_dontShowAgainTime));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (m_closeTime > 0)
|
||||||
|
{
|
||||||
|
m_closeTime--;
|
||||||
|
if (m_closeTime == 0)
|
||||||
|
{
|
||||||
|
ui->closeBtn->setText(m_closeText);
|
||||||
|
ui->closeBtn->setEnabled(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->closeBtn->setText(m_closeText + QString(" (%1)").arg(m_closeTime));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_closeTime == 0 && m_dontShowAgainTime == 0)
|
||||||
|
{
|
||||||
|
killTimer(event->timerId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotificationDialog::on_dontShowAgainBtn_clicked()
|
||||||
|
{
|
||||||
|
done(DontShowAgain);
|
||||||
|
}
|
||||||
|
void NotificationDialog::on_closeBtn_clicked()
|
||||||
|
{
|
||||||
|
done(Normal);
|
||||||
|
}
|
44
gui/dialogs/NotificationDialog.h
Normal file
44
gui/dialogs/NotificationDialog.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#ifndef NOTIFICATIONDIALOG_H
|
||||||
|
#define NOTIFICATIONDIALOG_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
|
||||||
|
#include "logic/updater/NotificationChecker.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class NotificationDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
class NotificationDialog : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit NotificationDialog(const NotificationChecker::NotificationEntry &entry, QWidget *parent = 0);
|
||||||
|
~NotificationDialog();
|
||||||
|
|
||||||
|
enum ExitCode
|
||||||
|
{
|
||||||
|
Normal,
|
||||||
|
DontShowAgain
|
||||||
|
};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void timerEvent(QTimerEvent *event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::NotificationDialog *ui;
|
||||||
|
|
||||||
|
int m_dontShowAgainTime = 10;
|
||||||
|
int m_closeTime = 5;
|
||||||
|
|
||||||
|
QString m_dontShowAgainText;
|
||||||
|
QString m_closeText;
|
||||||
|
|
||||||
|
private
|
||||||
|
slots:
|
||||||
|
void on_dontShowAgainBtn_clicked();
|
||||||
|
void on_closeBtn_clicked();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // NOTIFICATIONDIALOG_H
|
85
gui/dialogs/NotificationDialog.ui
Normal file
85
gui/dialogs/NotificationDialog.ui
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>NotificationDialog</class>
|
||||||
|
<widget class="QDialog" name="NotificationDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>320</width>
|
||||||
|
<height>240</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout" stretch="1,0">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,1">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="iconLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="messageLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="openExternalLinks">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="textInteractionFlags">
|
||||||
|
<set>Qt::TextBrowserInteraction</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="dontShowAgainBtn">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Don't show again</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="closeBtn">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Close</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
Loading…
Reference in New Issue
Block a user