// Copyright 2013, University of Freiburg, // Author: Manuel Schneider #include "timeoutdialog.h" #include "ui_timeoutdialog.h" #include #include #include #include TimeOutDialog::TimeOutDialog(int time, QWidget *parent) : QDialog(parent), _ui(new Ui::TimeOutDialog), _time(time) { _ui->setupUi(this); this->installEventFilter(this); _ui->buttonBox->installEventFilter(this); for (auto b : _ui->buttonBox->buttons()) { b->installEventFilter(this); b->setFocusPolicy(Qt::NoFocus); } this->setFocus(); QObject::connect(&_timer, &QTimer::timeout, this, &TimeOutDialog::update); QObject::connect(_ui->buttonBox, &QDialogButtonBox::clicked, [this](QAbstractButton *button) { _timer.stop(); if (button == _ui->buttonBox->button(QDialogButtonBox::Discard)) { _time = 0; } }); // QProgressDialog takes ownership of QProgressBar _ui->progressBar->setMaximum(_time); _ui->progressBar->setValue(_time); setWindowTitle(" "); setWindowFlag(Qt::WindowStaysOnTopHint, true); _timer.start(1000); } void TimeOutDialog::hideEvent(QHideEvent *e) { QDialog::hideEvent(e); _timer.stop(); } bool TimeOutDialog::eventFilter(QObject *, QEvent *event) { if (event->type() != QEvent::KeyPress) return false; if (!_timer.isActive()) return false; QKeyEvent *e = static_cast(event); if (e->key() == Qt::Key_Escape) { // Handle as discard _time = 0; _timer.stop(); return true; } if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) { // Handle as accept _timer.stop(); return true; } return false; } void TimeOutDialog::update() { --_time; if (_time == 0) { _timer.stop(); } else { _ui->progressBar->setValue(_time); } }