diff options
Diffstat (limited to 'libkdepim/statusbarprogresswidget.cpp')
-rw-r--r-- | libkdepim/statusbarprogresswidget.cpp | 296 |
1 files changed, 0 insertions, 296 deletions
diff --git a/libkdepim/statusbarprogresswidget.cpp b/libkdepim/statusbarprogresswidget.cpp deleted file mode 100644 index c417905a0..000000000 --- a/libkdepim/statusbarprogresswidget.cpp +++ /dev/null @@ -1,296 +0,0 @@ -/* - statusbarprogresswidget.cpp - - This file is part of KMail, the KDE mail client. - - (C) 2004 KMail Authors - Includes StatusbarProgressWidget which is based on KIOLittleProgressDlg - by Matt Koss <koss@miesto.sk> - - KMail is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License, version 2, as - published by the Free Software Foundation. - - KMail 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. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - In addition, as a special exception, the copyright holders give - permission to link the code of this program with any edition of - the TQt library by Trolltech AS, Norway (or with modified versions - of TQt that use the same license as TQt), and distribute linked - combinations including the two. You must obey the GNU General - Public License in all respects for all of the code used other than - TQt. If you modify this file, you may extend this exception to - your version of the file, but you are not obligated to do so. If - you do not wish to do so, delete this exception statement from - your version. -*/ - - -#include "ssllabel.h" -using KPIM::SSLLabel; -#include "progressmanager.h" -using KPIM::ProgressItem; -using KPIM::ProgressManager; - -#include <kprogress.h> -#include <kiconloader.h> -#include <kdebug.h> - -#include <tqtimer.h> -#include <tqlabel.h> -#include <tqpushbutton.h> -#include <tqtooltip.h> -#include <klocale.h> -#include <tqlayout.h> -#include <tqwidgetstack.h> -#include <tqframe.h> - -#include "progressdialog.h" -#include "statusbarprogresswidget.h" - -using namespace KPIM; - -//----------------------------------------------------------------------------- -StatusbarProgressWidget::StatusbarProgressWidget( ProgressDialog* progressDialog, TQWidget* parent, bool button ) - : TQFrame( parent ), mCurrentItem( 0 ), mProgressDialog( progressDialog ), - mDelayTimer( 0 ), mBusyTimer( 0 ) -{ - m_bShowButton = button; - int w = fontMetrics().width( " 999.9 kB/s 00:00:01 " ) + 8; - box = new TQHBoxLayout( this, 0, 0 ); - - m_pButton = new TQPushButton( this ); - m_pButton->tqsetSizePolicy( TQSizePolicy( TQSizePolicy::Minimum, - TQSizePolicy::Minimum ) ); - m_pButton->setPixmap( SmallIcon( "up" ) ); - box->addWidget( m_pButton ); - stack = new TQWidgetStack( this ); - stack->setMaximumHeight( fontMetrics().height() ); - box->addWidget( stack ); - - m_sslLabel = new SSLLabel( this ); - box->addWidget( m_sslLabel ); - - TQToolTip::add( m_pButton, i18n("Open detailed progress dialog") ); - - m_pProgressBar = new KProgress( this ); - m_pProgressBar->setLineWidth( 1 ); - m_pProgressBar->setFrameStyle( TQFrame::Box ); - m_pProgressBar->installEventFilter( this ); - m_pProgressBar->setMinimumWidth( w ); - stack->addWidget( m_pProgressBar, 1 ); - - m_pLabel = new TQLabel( TQString(), this ); - m_pLabel->tqsetAlignment( AlignHCenter | AlignVCenter ); - m_pLabel->installEventFilter( this ); - m_pLabel->setMinimumWidth( w ); - stack->addWidget( m_pLabel, 2 ); - m_pButton->setMaximumHeight( fontMetrics().height() ); - setMinimumWidth( tqminimumSizeHint().width() ); - - mode = None; - setMode(); - - connect( m_pButton, TQT_SIGNAL( clicked() ), - progressDialog, TQT_SLOT( slotToggleVisibility() ) ); - - connect ( ProgressManager::instance(), TQT_SIGNAL( progressItemAdded( KPIM::ProgressItem * ) ), - this, TQT_SLOT( slotProgressItemAdded( KPIM::ProgressItem * ) ) ); - connect ( ProgressManager::instance(), TQT_SIGNAL( progressItemCompleted( KPIM::ProgressItem * ) ), - this, TQT_SLOT( slotProgressItemCompleted( KPIM::ProgressItem * ) ) ); - connect ( ProgressManager::instance(), TQT_SIGNAL(progressItemUsesBusyIndicator(KPIM::ProgressItem*,bool)), - this, TQT_SLOT( updateBusyMode() ) ); - - connect ( progressDialog, TQT_SIGNAL( visibilityChanged( bool )), - this, TQT_SLOT( slotProgressDialogVisible( bool ) ) ); - - mDelayTimer = new TQTimer( this ); - connect ( mDelayTimer, TQT_SIGNAL( timeout() ), - this, TQT_SLOT( slotShowItemDelayed() ) ); -} - -// There are three cases: no progressitem, one progressitem (connect to it directly), -// or many progressitems (display busy indicator). Let's call them 0,1,N. -// In slot..Added we can only end up in 1 or N. -// In slot..Removed we can end up in 0, 1, or we can stay in N if we were already. - -void StatusbarProgressWidget::updateBusyMode() -{ - connectSingleItem(); // if going to 1 item - if ( mCurrentItem ) { // Exactly one item - delete mBusyTimer; - mBusyTimer = 0; - mDelayTimer->start( 1000, true ); - } - else { // N items - if ( !mBusyTimer ) { - mBusyTimer = new TQTimer( this ); - connect( mBusyTimer, TQT_SIGNAL( timeout() ), - this, TQT_SLOT( slotBusyIndicator() ) ); - mDelayTimer->start( 1000, true ); - } - } -} - -void StatusbarProgressWidget::slotProgressItemAdded( ProgressItem *item ) -{ - if ( item->parent() ) - return; // we are only interested in top level items - - updateBusyMode(); -} - -void StatusbarProgressWidget::slotProgressItemCompleted( ProgressItem *item ) -{ - if ( item->parent() ) return; // we are only interested in top level items - connectSingleItem(); // if going back to 1 item - if ( ProgressManager::instance()->isEmpty() ) { // No item - // Done. In 5s the progress-widget will close, then we can clean up the statusbar - TQTimer::singleShot( 5000, this, TQT_SLOT( slotClean() ) ); - } else if ( mCurrentItem ) { // Exactly one item - delete mBusyTimer; - mBusyTimer = 0; - activateSingleItemMode(); - } -} - -void StatusbarProgressWidget::connectSingleItem() -{ - if ( mCurrentItem ) { - disconnect ( mCurrentItem, TQT_SIGNAL( progressItemProgress( KPIM::ProgressItem *, unsigned int ) ), - this, TQT_SLOT( slotProgressItemProgress( KPIM::ProgressItem *, unsigned int ) ) ); - mCurrentItem = 0; - } - mCurrentItem = ProgressManager::instance()->singleItem(); - if ( mCurrentItem ) { - connect ( mCurrentItem, TQT_SIGNAL( progressItemProgress( KPIM::ProgressItem *, unsigned int ) ), - this, TQT_SLOT( slotProgressItemProgress( KPIM::ProgressItem *, unsigned int ) ) ); - } -} - -void StatusbarProgressWidget::activateSingleItemMode() -{ - m_pProgressBar->setTotalSteps( 100 ); - m_pProgressBar->setProgress( mCurrentItem->progress() ); - m_pProgressBar->setPercentageVisible( true ); -} - -void StatusbarProgressWidget::slotShowItemDelayed() -{ - bool noItems = ProgressManager::instance()->isEmpty(); - if ( mCurrentItem ) { - activateSingleItemMode(); - } else if ( !noItems ) { // N items - m_pProgressBar->setTotalSteps( 0 ); - m_pProgressBar->setPercentageVisible( false ); - Q_ASSERT( mBusyTimer ); - if ( mBusyTimer ) - mBusyTimer->start( 100 ); - } - - if ( !noItems && mode == None ) { - mode = Progress; - setMode(); - } -} - -void StatusbarProgressWidget::slotBusyIndicator() -{ - int p = m_pProgressBar->progress(); - m_pProgressBar->setProgress( p + 10 ); -} - -void StatusbarProgressWidget::slotProgressItemProgress( ProgressItem *item, unsigned int value ) -{ - Q_ASSERT( item == mCurrentItem); // the only one we should be connected to - m_pProgressBar->setProgress( value ); -} - -void StatusbarProgressWidget::slotSetSSL( bool ssl ) -{ - m_sslLabel->setEncrypted( ssl ); -} - -void StatusbarProgressWidget::setMode() { - switch ( mode ) { - case None: - if ( m_bShowButton ) { - m_pButton->hide(); - } - m_sslLabel->setState( SSLLabel::Done ); - // show the empty label in order to make the status bar look better - stack->show(); - stack->raiseWidget( m_pLabel ); - break; - -#if 0 - case Label: - if ( m_bShowButton ) { - m_pButton->show(); - } - m_sslLabel->setState( m_sslLabel->lastState() ); - stack->show(); - stack->raiseWidget( m_pLabel ); - break; -#endif - - case Progress: - stack->show(); - stack->raiseWidget( m_pProgressBar ); - if ( m_bShowButton ) { - m_pButton->show(); - } - m_sslLabel->setState( m_sslLabel->lastState() ); - break; - } -} - -void StatusbarProgressWidget::slotClean() -{ - // check if a new item showed up since we started the timer. If not, clear - if ( ProgressManager::instance()->isEmpty() ) { - m_pProgressBar->setProgress( 0 ); - //m_pLabel->clear(); - mode = None; - setMode(); - } -} - -bool StatusbarProgressWidget::eventFilter( TQObject *, TQEvent *ev ) -{ - if ( ev->type() == TQEvent::MouseButtonPress ) { - TQMouseEvent *e = (TQMouseEvent*)ev; - - if ( e->button() == Qt::LeftButton && mode != None ) { // toggle view on left mouse button - // Consensus seems to be that we should show/hide the fancy dialog when the user - // clicks anywhere in the small one. - mProgressDialog->slotToggleVisibility(); - return true; - } - } - return false; -} - -void StatusbarProgressWidget::slotProgressDialogVisible( bool b ) -{ - // Update the hide/show button when the detailed one is shown/hidden - if ( b ) { - m_pButton->setPixmap( SmallIcon( "down" ) ); - TQToolTip::remove( m_pButton ); - TQToolTip::add( m_pButton, i18n("Hide detailed progress window") ); - setMode(); - } else { - m_pButton->setPixmap( SmallIcon( "up" ) ); - TQToolTip::remove( m_pButton ); - TQToolTip::add( m_pButton, i18n("Show detailed progress window") ); - } -} - -#include "statusbarprogresswidget.moc" |