Chris@378: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@378: Chris@378: /* Chris@378: Sonic Visualiser Chris@378: An audio file viewer and annotation editor. Chris@378: Centre for Digital Music, Queen Mary, University of London. Chris@378: This file copyright 2007-2008 QMUL. Chris@378: Chris@378: This program is free software; you can redistribute it and/or Chris@378: modify it under the terms of the GNU General Public License as Chris@378: published by the Free Software Foundation; either version 2 of the Chris@378: License, or (at your option) any later version. See the file Chris@378: COPYING included with this distribution for more information. Chris@378: */ Chris@378: Chris@378: #include "ProgressDialog.h" Chris@378: Chris@378: #include Chris@378: #include Chris@378: #include Chris@378: dev@1268: ProgressDialog::ProgressDialog(QString message, dev@1268: bool cancellable, dev@1268: int timeBeforeShow, dev@1268: QWidget *parent, dev@1268: Qt::WindowModality modality) : Chris@378: m_showTimer(0), Chris@410: m_timerElapsed(false), Chris@410: m_cancelled(false) Chris@378: { Chris@378: m_dialog = new QProgressDialog(message, cancellable ? tr("Cancel") : 0, Chris@378: 0, 100, parent); dev@1267: m_dialog->setWindowModality(modality); dev@1267: Chris@378: if (timeBeforeShow > 0) { Chris@378: m_dialog->hide(); Chris@378: m_showTimer = new QTimer; Chris@378: connect(m_showTimer, SIGNAL(timeout()), this, SLOT(showTimerElapsed())); Chris@378: m_showTimer->setSingleShot(true); Chris@378: m_showTimer->start(timeBeforeShow); Chris@378: } else { Chris@378: m_dialog->show(); Chris@378: m_dialog->raise(); Chris@378: m_timerElapsed = true; Chris@378: } Chris@378: Chris@378: if (cancellable) { Chris@410: connect(m_dialog, SIGNAL(canceled()), this, SLOT(canceled())); Chris@378: } Chris@378: } Chris@378: Chris@378: ProgressDialog::~ProgressDialog() Chris@378: { Chris@378: delete m_showTimer; Chris@378: delete m_dialog; Chris@378: } Chris@378: Chris@410: bool Chris@410: ProgressDialog::isDefinite() const Chris@410: { Chris@410: return (m_dialog->maximum() > 0); Chris@410: } Chris@410: Chris@410: void Chris@410: ProgressDialog::setDefinite(bool definite) Chris@410: { Chris@410: if (definite) m_dialog->setMaximum(100); Chris@410: else m_dialog->setMaximum(0); Chris@410: } Chris@410: Chris@378: void Chris@378: ProgressDialog::setMessage(QString text) Chris@378: { Chris@378: m_dialog->setLabelText(text); Chris@378: } Chris@378: Chris@378: void Chris@410: ProgressDialog::canceled() Chris@410: { Chris@410: m_cancelled = true; Chris@410: emit cancelled(); Chris@410: } Chris@410: Chris@410: bool Chris@410: ProgressDialog::wasCancelled() const Chris@410: { Chris@410: return m_cancelled; Chris@410: } Chris@410: Chris@410: void Chris@378: ProgressDialog::showTimerElapsed() Chris@378: { Chris@378: m_timerElapsed = true; Chris@378: if (m_dialog->value() > 0) { Chris@410: emit showing(); Chris@378: m_dialog->show(); Chris@378: } Chris@378: qApp->processEvents(); Chris@378: } Chris@378: Chris@378: void Chris@378: ProgressDialog::setProgress(int percentage) Chris@378: { Chris@378: if (percentage > m_dialog->value()) { Chris@410: if (percentage >= 100 && isDefinite()) { Chris@378: m_dialog->hide(); Chris@378: } else if (m_timerElapsed && !m_dialog->isVisible()) { Chris@410: emit showing(); Chris@378: m_dialog->show(); Chris@378: m_dialog->raise(); Chris@378: } dev@1267: m_dialog->setValue(percentage); // processes event loop when modal dev@1267: if (!m_dialog->isModal()) qApp->processEvents(); Chris@378: } dev@1267: }