Add a timer for clicking away the notification dialog
This commit is contained in:
		
							
								
								
									
										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