You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
k3b/src/k3btimeoutwidget.cpp

150 lines
2.6 KiB

/*
*
* $Id: sourceheader 511311 2006-02-19 14:51:05Z trueg $
* Copyright (C) 2006 Sebastian Trueg <trueg@k3b.org>
*
* This file is part of the K3b project.
* Copyright (C) 1998-2007 Sebastian Trueg <trueg@k3b.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* See the file "COPYING" for the exact licensing terms.
*/
#include "k3btimeoutwidget.h"
#include "k3bthememanager.h"
#include "k3bapplication.h"
#include <kiconloader.h>
#include <tqpainter.h>
#include <tqtimer.h>
#include <tqbitmap.h>
class K3bTimeoutWidget::Private
{
public:
int timeout;
int margin;
TQTimer timer;
int currentTime;
};
K3bTimeoutWidget::K3bTimeoutWidget( TQWidget* parent )
: TQWidget( parent )
{
d = new Private;
d->timeout = 10000;
d->margin = 4;
connect( &d->timer, TQ_SIGNAL(timeout()), this, TQ_SLOT(timeStep()) );
}
K3bTimeoutWidget::~K3bTimeoutWidget()
{
delete d;
}
void K3bTimeoutWidget::start()
{
d->currentTime = 0;
startTimer();
}
void K3bTimeoutWidget::stop()
{
d->timer.stop();
d->currentTime = 0;
}
void K3bTimeoutWidget::pause()
{
d->timer.stop();
}
void K3bTimeoutWidget::resume()
{
startTimer();
}
void K3bTimeoutWidget::timeStep()
{
d->currentTime += 100;
update();
if( d->currentTime >= d->timeout ) {
stop();
emit timeout();
}
}
TQSize K3bTimeoutWidget::sizeHint() const
{
return minimumSizeHint();
}
TQSize K3bTimeoutWidget::minimumSizeHint() const
{
int fw = fontMetrics().width( TQString::number( d->timeout/1000 ) );
int fh = fontMetrics().height();
int diam = TQMAX( fw, fh ) + 2*d->margin;
return TQSize( diam, diam );
}
void K3bTimeoutWidget::setTimeout( int msecs )
{
d->timeout = msecs;
}
void K3bTimeoutWidget::startTimer()
{
d->timer.start( 100 );
}
void K3bTimeoutWidget::paintEvent( TQPaintEvent* )
{
if( d->timer.isActive() ) {
TQPainter p(this);
if( K3bTheme* theme = k3bappcore->themeManager()->currentTheme() ) {
p.setBrush( theme->backgroundColor() );
p.setPen( theme->backgroundColor() );
}
TQRect r;
r.setSize( minimumSizeHint() );
r.moveCenter( rect().center() );
p.drawArc( r, 0, 360*16 );
p.drawPie( r, 90*16, 360*16*d->currentTime/d->timeout );
p.setPen( TQt::black );
p.drawText( rect(), TQt::AlignCenter, TQString::number( (d->timeout - d->currentTime + 500)/1000 ) );
}
}
void K3bTimeoutWidget::resizeEvent( TQResizeEvent* e )
{
TQWidget::resizeEvent( e );
}
#include "k3btimeoutwidget.moc"