Add a timer for clicking away the notification dialog
This commit is contained in:
		| @@ -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> | ||||||
		Reference in New Issue
	
	Block a user