/* * This file is part of the KDE Libraries * Copyright (C) 2002 Hamish Rodda * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * */ #ifndef _KTIMERDIALOG_H_ #define _KTIMERDIALOG_H_ #include #include #include class QTimer; class KHBox; class QProgressBar; class QLabel; /** * Provides a dialog that is only available for a specified amount * of time, and reports the time remaining to the user. * * The timer is capable of counting up or down, for any number of milliseconds. * * The button which is activated upon timeout can be specified, as can the * update interval for the dialog box. * * In addition, this class retains all of the functionality of @see KDialog. * * @short A dialog with a time limit and corresponding UI features. * @author Hamish Rodda */ class KTimerDialog : public KDialog { Q_OBJECT public: /** * @li @p CountDown - The timer counts downwards from the seconds given. * @li @p CountUp - The timer counts up to the number of seconds given. * @li @p Manual - The timer is not invoked; the caller must update the * progress. */ enum TimerStyle { CountDown, CountUp, Manual }; /** * Constructor for the standard mode where you must specify the main * widget with @ref setMainWidget() . See @see KDialog for further details. * * For the rest of the arguments, See @see KDialog . */ explicit KTimerDialog( int msec, TimerStyle style=CountDown, QWidget *parent=0, const char *name=0, bool modal=true, const QString &caption=QString(), int buttonMask=Ok|Apply|Cancel, ButtonCode defaultButton=Ok, bool separator=false, const KGuiItem &user1=KGuiItem(), const KGuiItem &user2=KGuiItem(), const KGuiItem &user3=KGuiItem() ); /** * Destructor. */ ~KTimerDialog(); /** * Execute the dialog modelessly - see @see QDialog . */ virtual void setVisible( bool visible ); /** * Set the refresh interval for the timer progress. Defaults to one second. */ void setRefreshInterval( int msec ); /** * Retrieves the @ref ButtonCode which will be activated once the timer * times out. @see setTimeoutButton */ int timeoutButton() const; /** * Sets the @ref ButtonCode to determine which button will be activated * once the timer times out. @see timeoutButton */ void setTimeoutButton( ButtonCode newButton ); /** * Retrieves the current @ref TimerStyle. @see setTimerStyle */ int timerStyle() const; /** * Sets the @ref TimerStyle. @see timerStyle */ void setTimerStyle( TimerStyle newStyle ); /** * Overridden function which is used to set the main widget of the dialog. * @see KDialog::setMainWidget. */ void setMainWidget( QWidget *widget ); Q_SIGNALS: /** * Signal which is emitted once the timer has timed out. */ void timerTimeout(); public Q_SLOTS: /** * Execute the dialog modally - see @see QDialog . */ int exec(); private Q_SLOTS: /** * Updates the dialog with the current progress levels. */ void slotUpdateTime( bool update = true ); /** * The internal */ void slotInternalTimeout(); private: /** * Prepares the layout that manages the widgets of the dialog */ void setupLayout(); QTimer *totalTimer; QTimer *updateTimer; int msecRemaining, updateInterval, msecTotal; ButtonCode buttonOnTimeout; TimerStyle tStyle; KHBox *timerWidget; QProgressBar *timerProgress; QLabel *timerLabel; KVBox *mainWidget; class KTimerDialogPrivate; KTimerDialogPrivate *d; }; #endif