diff options
Diffstat (limited to 'tdeui/kprogress.cpp')
-rw-r--r-- | tdeui/kprogress.cpp | 414 |
1 files changed, 414 insertions, 0 deletions
diff --git a/tdeui/kprogress.cpp b/tdeui/kprogress.cpp new file mode 100644 index 000000000..e10cb0f7b --- /dev/null +++ b/tdeui/kprogress.cpp @@ -0,0 +1,414 @@ +/* This file is part of the KDE libraries + Copyright (C) 1996 Martynas Kunigelis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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. +*/ +/** + * KProgress -- a progress indicator widget for KDE. + */ + +#include <stdlib.h> +#include <limits.h> + +#include <tqpainter.h> +#include <tqpixmap.h> +#include <tqlabel.h> +#include <tqlayout.h> +#include <tqpushbutton.h> +#include <tqstring.h> +#include <tqregexp.h> +#include <tqstyle.h> +#include <tqtimer.h> + +#include "kprogress.h" + +#include <kapplication.h> +#include <klocale.h> +#include <kwin.h> + +KProgress::KProgress(TQWidget *parent, const char *name, WFlags f) + : TQProgressBar(parent, name, f), + mFormat("%p%") +{ + setProgress(0); +} + +KProgress::KProgress(int totalSteps, TQWidget *parent, const char *name, WFlags f) + : TQProgressBar(totalSteps, parent, name, f), + mFormat("%p%") +{ + setProgress(0); +} + +KProgress::~KProgress() +{ +} + +void KProgress::advance(int offset) +{ + setProgress(progress() + offset); +} + +void KProgress::setTotalSteps(int totalSteps) +{ + TQProgressBar::setTotalSteps(totalSteps); + + if (totalSteps) + { + emit percentageChanged((progress() * 100) / totalSteps); + } +} + +void KProgress::setProgress(int progress) +{ + TQProgressBar::setProgress(progress); + + if (totalSteps()) + { + emit percentageChanged((progress * 100) / totalSteps()); + } +} + +// ### KDE 4 remove +void KProgress::setValue(int progress) +{ + setProgress(progress); +} + +// ### KDE 4 remove +void KProgress::setRange(int /*min*/, int max) +{ + setTotalSteps(max); +} + +// ### KDE 4 remove +int KProgress::maxValue() +{ + return totalSteps(); +} + +void KProgress::setTextEnabled(bool enable) +{ + setPercentageVisible(enable); +} + +bool KProgress::textEnabled() const +{ + return percentageVisible(); +} + +void KProgress::setFormat(const TQString & format) +{ + mFormat = format; + if (mFormat != "%p%") + setCenterIndicator(true); +} + +TQString KProgress::format() const +{ + return mFormat; +} + +// ### KDE 4 remove +int KProgress::value() const +{ + return progress(); +} + +bool KProgress::setIndicator(TQString &indicator, int progress, int totalSteps) +{ + if (!totalSteps) + return false; + TQString newString(mFormat); + newString.replace(TQString::tqfromLatin1("%v"), + TQString::number(progress)); + newString.replace(TQString::tqfromLatin1("%m"), + TQString::number(totalSteps)); + + if (totalSteps > INT_MAX / 1000) { + progress /= 1000; + totalSteps /= 1000; + } + + newString.replace(TQString::tqfromLatin1("%p"), + TQString::number((progress * 100) / totalSteps)); + + if (newString != indicator) + { + indicator = newString; + return true; + } + + return false; +} + +struct KProgressDialog::KProgressDialogPrivate +{ + KProgressDialogPrivate() : cancelButtonShown(true) + { + } + + bool cancelButtonShown; +}; + +/* + * KProgressDialog implementation + */ +KProgressDialog::KProgressDialog(TQWidget* parent, const char* name, + const TQString& caption, const TQString& text, + bool modal) + : KDialogBase(KDialogBase::Plain, caption, KDialogBase::Cancel, + KDialogBase::Cancel, parent, name, modal), + mAutoClose(true), + mAutoReset(false), + mCancelled(false), + mAllowCancel(true), + mShown(false), + mMinDuration(2000), + d(new KProgressDialogPrivate) +{ +#ifdef Q_WS_X11 + KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon()); +#endif + mShowTimer = new TQTimer(this); + + showButton(KDialogBase::Close, false); + mCancelText = actionButton(KDialogBase::Cancel)->text(); + + TQFrame* mainWidget = plainPage(); + TQVBoxLayout* layout = new TQVBoxLayout(mainWidget, 10); + + mLabel = new TQLabel(text, mainWidget); + layout->addWidget(mLabel); + + mProgressBar = new KProgress(mainWidget); + layout->addWidget(mProgressBar); + + connect(mProgressBar, TQT_SIGNAL(percentageChanged(int)), + this, TQT_SLOT(slotAutoActions(int))); + connect(mShowTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(slotAutoShow())); + mShowTimer->start(mMinDuration, true); +} + +KProgressDialog::~KProgressDialog() +{ + delete d; +} + +void KProgressDialog::slotAutoShow() +{ + if (mShown || mCancelled) + { + return; + } + + show(); + kapp->processEvents(); +} + +void KProgressDialog::slotCancel() +{ + mCancelled = true; + + if (mAllowCancel) + { + KDialogBase::slotCancel(); + } +} + +bool KProgressDialog::wasCancelled() +{ + return mCancelled; +} + +void KProgressDialog::ignoreCancel() +{ + mCancelled = false; +} + +bool KProgressDialog::wasCancelled() const +{ + return mCancelled; +} + +void KProgressDialog::setMinimumDuration(int ms) +{ + mMinDuration = ms; + if (!mShown) + { + mShowTimer->stop(); + mShowTimer->start(mMinDuration, true); + } +} + +int KProgressDialog::minimumDuration() +{ + return mMinDuration; +} + +int KProgressDialog::minimumDuration() const +{ + return mMinDuration; +} + +void KProgressDialog::setAllowCancel(bool allowCancel) +{ + mAllowCancel = allowCancel; + showCancelButton(allowCancel); +} + +// ### KDE 4 remove +bool KProgressDialog::allowCancel() +{ + return mAllowCancel; +} + +bool KProgressDialog::allowCancel() const +{ + return mAllowCancel; +} + +KProgress* KProgressDialog::progressBar() +{ + return mProgressBar; +} + +const KProgress* KProgressDialog::progressBar() const +{ + return mProgressBar; +} + +void KProgressDialog::setLabel(const TQString& text) +{ + mLabel->setText(text); +} + +// ### KDE 4 remove +TQString KProgressDialog::labelText() +{ + return mLabel->text(); +} + +TQString KProgressDialog::labelText() const +{ + return mLabel->text(); +} + +void KProgressDialog::showCancelButton(bool show) +{ + showButtonCancel(show); +} + +// ### KDE 4 remove +bool KProgressDialog::autoClose() +{ + return mAutoClose; +} + +bool KProgressDialog::autoClose() const +{ + return mAutoClose; +} + +void KProgressDialog::setAutoClose(bool autoClose) +{ + mAutoClose = autoClose; +} + +// ### KDE 4 remove +bool KProgressDialog::autoReset() +{ + return mAutoReset; +} + +bool KProgressDialog::autoReset() const +{ + return mAutoReset; +} + +void KProgressDialog::setAutoReset(bool autoReset) +{ + mAutoReset = autoReset; +} + +void KProgressDialog::setButtonText(const TQString& text) +{ + mCancelText = text; + setButtonCancel(text); +} + +// ### KDE 4 remove +TQString KProgressDialog::buttonText() +{ + return mCancelText; +} + +TQString KProgressDialog::buttonText() const +{ + return mCancelText; +} + +void KProgressDialog::slotAutoActions(int percentage) +{ + if (percentage < 100) + { + if (!d->cancelButtonShown) + { + setButtonCancel(mCancelText); + d->cancelButtonShown = true; + } + return; + } + + mShowTimer->stop(); + + if (mAutoReset) + { + mProgressBar->setProgress(0); + } + else + { + setAllowCancel(true); + setButtonCancel(KStdGuiItem::close()); + d->cancelButtonShown = false; + } + + if (mAutoClose) + { + if (mShown) + { + hide(); + } + else + { + emit finished(); + } + } +} + +void KProgressDialog::show() +{ + KDialogBase::show(); + mShown = true; +} + + +void KProgress::virtual_hook( int, void* ) +{ /*BASE::virtual_hook( id, data );*/ } + +void KProgressDialog::virtual_hook( int id, void* data ) +{ KDialogBase::virtual_hook( id, data ); } + +#include "kprogress.moc" |