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.
138 lines
3.5 KiB
138 lines
3.5 KiB
/***************************************************************************
|
|
sq_progress.cpp - description
|
|
-------------------
|
|
begin : ??? ??? 29 2004
|
|
copyright : (C) 2004 by Baryshev Dmitry
|
|
email : ksquirrel.iv@gmail.com
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* 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. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include <limits.h>
|
|
|
|
#include <tqpainter.h>
|
|
#include <tqbrush.h>
|
|
#include <tqpen.h>
|
|
|
|
#include <tdeglobalsettings.h>
|
|
|
|
#include "sq_progress.h"
|
|
|
|
SQ_Progress::SQ_Progress(TQWidget *parent, const char *name)
|
|
: TQLabel(parent, name, TQt::WNoAutoErase), m_text(true), painter(0)
|
|
{}
|
|
|
|
SQ_Progress::~SQ_Progress()
|
|
{
|
|
delete painter;
|
|
}
|
|
|
|
void SQ_Progress::setTotalSteps(int totalSteps)
|
|
{
|
|
total_steps = totalSteps;
|
|
step = 0;
|
|
percentage = 0;
|
|
|
|
if(!color.isValid())
|
|
color = TDEGlobalSettings::highlightColor();
|
|
|
|
painter = new TQPainter(this);
|
|
painter->setBrush(color);
|
|
painter->setPen(color);
|
|
|
|
TQFont f = font();
|
|
f.setBold(true);
|
|
painter->setFont(f);
|
|
|
|
painter->setPen(color);
|
|
painter->setBrush(TDEGlobalSettings::baseColor());
|
|
painter->drawRect(rect());
|
|
}
|
|
|
|
/*
|
|
* Internal. Set current progress to 'progress'.
|
|
*/
|
|
void SQ_Progress::setIndicator(int progress)
|
|
{
|
|
int totalSteps = total_steps;
|
|
|
|
// scale down...
|
|
if(totalSteps > INT_MAX/1000)
|
|
{
|
|
progress /= 1000;
|
|
totalSteps /= 1000;
|
|
}
|
|
|
|
int np = progress * 100 / totalSteps;
|
|
|
|
// draw progress if needed
|
|
if(np != percentage)
|
|
{
|
|
percentage = np;
|
|
drawProgress();
|
|
}
|
|
|
|
step = progress;
|
|
}
|
|
|
|
/*
|
|
* Add 'step_new' to current step.
|
|
*/
|
|
void SQ_Progress::advance(int step_new)
|
|
{
|
|
setIndicator(step + step_new);
|
|
}
|
|
|
|
/*
|
|
* Clear drawing.
|
|
*/
|
|
void SQ_Progress::flush()
|
|
{
|
|
delete painter;
|
|
painter = 0;
|
|
}
|
|
|
|
void SQ_Progress::paintEvent(TQPaintEvent *)
|
|
{
|
|
if(painter)
|
|
{
|
|
drawProgress();
|
|
}
|
|
}
|
|
|
|
void SQ_Progress::drawProgress()
|
|
{
|
|
int np = width() * percentage / 100;
|
|
|
|
// reset clip rectangle
|
|
painter->setClipRect(0, 0, width(), height());
|
|
painter->setPen(color);
|
|
painter->setBrush(TDEGlobalSettings::baseColor());
|
|
painter->drawRect(rect());
|
|
|
|
// draw rectangle
|
|
painter->fillRect(2, 2, np-4, height()-4, color);
|
|
|
|
if(m_text)
|
|
{
|
|
// draw percentage value
|
|
painter->setPen(TDEGlobalSettings::highlightedTextColor());
|
|
painter->setClipRect(0, 0, np, height());
|
|
painter->drawText(rect(), TQt::AlignCenter | TQt::SingleLine, TQString::number(percentage) + '%');
|
|
painter->setPen(TDEGlobalSettings::textColor());
|
|
painter->setClipRect(np, 0, width()-np, height());
|
|
painter->drawText(rect(), TQt::AlignCenter | TQt::SingleLine, TQString::number(percentage) + '%');
|
|
}
|
|
}
|