64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "SelfDestructMessageBox.h"
 | |
| 
 | |
| SelfDestructMessageBox::SelfDestructMessageBox(
 | |
|         int timeout,
 | |
|         const QString& title,
 | |
|         const QString& text,
 | |
|         QMessageBox::Icon icon,
 | |
|         QMessageBox::StandardButtons buttons,
 | |
|         QMessageBox::StandardButton defaultButton,
 | |
|         bool show_countdown,
 | |
|         QWidget* parent,
 | |
|         Qt::WindowFlags flags)
 | |
|   : QMessageBox(icon, title, text, buttons, parent, flags),
 | |
|     m_timeout(timeout),
 | |
|     m_text(text),
 | |
|     m_show_countdown(show_countdown)
 | |
| {
 | |
|     setDefaultButton(defaultButton);
 | |
| 
 | |
|     connect(&m_timer, &QTimer::timeout, this, &SelfDestructMessageBox::tick);
 | |
|     m_timer.setInterval(1000);
 | |
| }
 | |
| 
 | |
| void SelfDestructMessageBox::showEvent(QShowEvent* event)
 | |
| {
 | |
|     tick();
 | |
|     m_timer.start();
 | |
|     QMessageBox::showEvent(event);
 | |
| }
 | |
| 
 | |
| void SelfDestructMessageBox::tick(){
 | |
|     m_timeout--;
 | |
| 
 | |
|     if(m_timeout){
 | |
|         if(m_show_countdown){
 | |
|             setText(m_text.arg(m_timeout));
 | |
|         } else {
 | |
| 
 | |
|             // if we don't show the countdown in the text, show it on the default button
 | |
|             auto d = defaultButton();
 | |
|             if(d){
 | |
|                 auto text = d->text();
 | |
|                 if(text.contains(" (")){
 | |
|                     text = text.split(" (").first();
 | |
|                 }
 | |
| 
 | |
|                 text = text.append(QString(" (%1) ").arg(m_timeout));
 | |
|                 d->setText(text);
 | |
|             }
 | |
| 
 | |
|         }
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     // stop the timer
 | |
|     m_timer.stop();
 | |
| 
 | |
|     // click the default
 | |
|     auto d = defaultButton();
 | |
|     if(d){
 | |
|         d->click();
 | |
|     }
 | |
| }
 | 
