Merge pull request #624 from AttorneyOnline/feature/nicer-notice-timer
Polish appearance of "OK" button on notice
This commit is contained in:
		
						commit
						593bd54000
					
				@ -1,7 +1,10 @@
 | 
			
		||||
#include <QCoreApplication>
 | 
			
		||||
#include <QDialogButtonBox>
 | 
			
		||||
#include <QElapsedTimer>
 | 
			
		||||
#include <QMessageBox>
 | 
			
		||||
#include <QPushButton>
 | 
			
		||||
#include <QTimer>
 | 
			
		||||
 | 
			
		||||
#include <functional>
 | 
			
		||||
 | 
			
		||||
#include "debug_functions.h"
 | 
			
		||||
@ -22,16 +25,38 @@ void call_error(QString p_message)
 | 
			
		||||
 | 
			
		||||
void call_notice(QString p_message)
 | 
			
		||||
{
 | 
			
		||||
  QMessageBox *msgBox = new QMessageBox;
 | 
			
		||||
  auto *msgBox = new QMessageBox;
 | 
			
		||||
 | 
			
		||||
  msgBox->setAttribute(Qt::WA_DeleteOnClose);
 | 
			
		||||
  msgBox->setText(p_message);
 | 
			
		||||
  msgBox->setWindowTitle(
 | 
			
		||||
      QCoreApplication::translate("debug_functions", "Notice"));
 | 
			
		||||
 | 
			
		||||
  msgBox->setStandardButtons(QMessageBox::NoButton);
 | 
			
		||||
  msgBox->setStandardButtons(QMessageBox::Ok);
 | 
			
		||||
  msgBox->setDefaultButton(QMessageBox::Ok);
 | 
			
		||||
  msgBox->defaultButton()->setEnabled(false);
 | 
			
		||||
 | 
			
		||||
  QTimer::singleShot(3000, msgBox, std::bind(&QMessageBox::setStandardButtons,msgBox,QMessageBox::Ok));
 | 
			
		||||
  QTimer intervalTimer;
 | 
			
		||||
  intervalTimer.setInterval(1000);
 | 
			
		||||
 | 
			
		||||
  int counter = 3;
 | 
			
		||||
  const auto updateCounter = [msgBox, &counter] {
 | 
			
		||||
    if (counter <= 0)
 | 
			
		||||
      return;
 | 
			
		||||
    msgBox->defaultButton()->setText(
 | 
			
		||||
        QString("%1 (%2)").arg(QDialogButtonBox::tr("OK")).arg(counter));
 | 
			
		||||
    counter--;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  QObject::connect(&intervalTimer, &QTimer::timeout, msgBox, updateCounter);
 | 
			
		||||
  intervalTimer.start();
 | 
			
		||||
  updateCounter();
 | 
			
		||||
 | 
			
		||||
  QTimer::singleShot(3000, msgBox, [msgBox, &intervalTimer] {
 | 
			
		||||
    msgBox->defaultButton()->setEnabled(true);
 | 
			
		||||
    msgBox->defaultButton()->setText(QDialogButtonBox::tr("OK"));
 | 
			
		||||
    intervalTimer.stop();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  msgBox->exec();  
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user