Add a timer for clicking away the notification dialog

This commit is contained in:
Jan Dalheimer 2014-03-15 14:18:29 +01:00
parent de2eb3fc54
commit 4f452d5815
5 changed files with 219 additions and 20 deletions

View File

@ -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

View File

@ -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);
} }

View 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);
}

View 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

View 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>