/* ============================================================ * * This file is a part of digiKam project * http://www.digikam.org * * Date : 2007-01-24 * Description : a progress bar used to display file access * progress or a text in status bar. * * Copyright (C) 2007-2008 by Gilles Caulier * * 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, or (at your option) * any later version. * * This program 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 General Public License for more details. * * ============================================================ */ // TQt includes. #include #include #include // KDE includes. #include #include #include #include #include // Local includes. #include "statusprogressbar.h" #include "statusprogressbar.moc" namespace Digikam { class StatusProgressBarPriv { public: enum WidgetStackEnum { TextLabel=0, ProgressBar }; StatusProgressBarPriv() { textLabel = 0; progressBar = 0; progressWidget = 0; cancelButton = 0; } TQWidget *progressWidget; TQPushButton *cancelButton; KSqueezedTextLabel *textLabel; KProgress *progressBar; }; StatusProgressBar::StatusProgressBar(TQWidget *parent) : TQWidgetStack(parent, 0, TQt::WDestructiveClose) { d = new StatusProgressBarPriv; setFocusPolicy(TQWidget::NoFocus); d->textLabel = new KSqueezedTextLabel(this); d->progressWidget = new TQWidget(this); TQHBoxLayout *hBox = new TQHBoxLayout(d->progressWidget); d->progressBar = new KProgress(d->progressWidget); setProgressTotalSteps(100); d->cancelButton = new TQPushButton(d->progressWidget); d->cancelButton->setFocusPolicy(TQWidget::NoFocus); d->cancelButton->setSizePolicy( TQSizePolicy( TQSizePolicy::Minimum, TQSizePolicy::Minimum ) ); d->cancelButton->setPixmap(SmallIcon("cancel")); // Parent widget will probably have the wait cursor set. // Set arrow cursor to indicate the button can be clicked d->cancelButton->setCursor(KCursor::arrowCursor()); hBox->addWidget(d->progressBar); hBox->addWidget(d->cancelButton); addWidget(d->textLabel, StatusProgressBarPriv::TextLabel); addWidget(d->progressWidget, StatusProgressBarPriv::ProgressBar); connect( d->cancelButton, TQ_SIGNAL( clicked() ), this, TQ_SIGNAL( signalCancelButtonPressed() ) ); progressBarMode(TextMode); } StatusProgressBar::~StatusProgressBar() { delete d; } void StatusProgressBar::setText(const TQString& text) { d->textLabel->setText(text); } void StatusProgressBar::setAlignment(int a) { d->textLabel->setAlignment(a); } int StatusProgressBar::progressValue() { return d->progressBar->progress(); } void StatusProgressBar::setProgressValue(int v) { d->progressBar->setProgress(v); } void StatusProgressBar::setProgressTotalSteps(int v) { d->progressBar->setTotalSteps(v); } int StatusProgressBar::progressTotalSteps() { return d->progressBar->totalSteps(); } void StatusProgressBar::setProgressText(const TQString& text) { d->progressBar->setFormat( text + TQString ("%p%") ); d->progressBar->update(); } void StatusProgressBar::progressBarMode(int mode, const TQString& text) { if ( mode == TextMode) { raiseWidget(StatusProgressBarPriv::TextLabel); setProgressValue(0); setText( text ); } else if ( mode == ProgressBarMode ) { d->cancelButton->hide(); raiseWidget(StatusProgressBarPriv::ProgressBar); setProgressText( text ); } else // CancelProgressBarMode { d->cancelButton->show(); raiseWidget(StatusProgressBarPriv::ProgressBar); setProgressText( text ); } } } // namespace Digikam