kmail Library API Documentation

kmbroadcaststatus.cpp

00001 /* Authors: Don Sanders <sanders@kde.org>
00002 
00003    Copyright (C) 2000 Don Sanders <sanders@kde.org>
00004    Includes KMLittleProgressDlg which is based on KIOLittleProgressDlg
00005    by Matt Koss <koss@miesto.sk>
00006 
00007    License GPL
00008 */
00009 
00010 #ifdef HAVE_CONFIG_H
00011 #include <config.h>
00012 #endif
00013 
00014 #include "kmbroadcaststatus.h"
00015 #include "kmbroadcaststatus.moc"
00016 
00017 #include "ssllabel.h"
00018 using KMail::SSLLabel;
00019 
00020 #include <kprogress.h>
00021 #include <kiconloader.h>
00022 #include <kdebug.h>
00023 
00024 #include <qlabel.h>
00025 #include <qpushbutton.h>
00026 #include <qtooltip.h>
00027 #include <klocale.h>
00028 #include <qlayout.h>
00029 #include <qwidgetstack.h>
00030 #include <qdatetime.h>
00031 
00032 //-----------------------------------------------------------------------------
00033 KMBroadcastStatus* KMBroadcastStatus::instance_ = 0;
00034 
00035 KMBroadcastStatus* KMBroadcastStatus::instance()
00036 {
00037   if (!instance_)
00038     instance_ = new KMBroadcastStatus();
00039   return instance_;
00040 }
00041 
00042 KMBroadcastStatus::KMBroadcastStatus()
00043 {
00044   reset();
00045 }
00046 
00047 void KMBroadcastStatus::setUsingSSL( bool isUsing )
00048 {
00049   emit signalUsingSSL( isUsing );
00050 }
00051 
00052 void KMBroadcastStatus::setStatusMsg( const QString& message )
00053 {
00054   emit statusMsg( message );
00055 }
00056 
00057 void KMBroadcastStatus::setStatusMsgWithTimestamp( const QString& message )
00058 {
00059   KLocale* locale = KGlobal::locale();
00060   setStatusMsg( i18n( "%1 is a time, %2 is a status message", "[%1] %2" )
00061                 .arg( locale->formatTime( QTime::currentTime(),
00062                                           true /* with seconds */ ) )
00063                 .arg( message ) );
00064 }
00065 
00066 void KMBroadcastStatus::setStatusMsgTransmissionCompleted( int numMessages,
00067                                                            int numBytes,
00068                                                            int numBytesRead,
00069                                                            int numBytesToRead,
00070                                                            bool mLeaveOnServer )
00071 {
00072   QString statusMsg;
00073   if( numMessages > 0 ) {
00074     if( numBytes != -1 ) {
00075       if( ( numBytesToRead != numBytes ) && mLeaveOnServer )
00076         statusMsg = i18n( "Transmission complete. %n new message in %1 KB "
00077                           "(%2 KB remaining on the server).",
00078                           "Transmission complete. %n new messages in %1 KB "
00079                           "(%2 KB remaining on the server).",
00080                           numMessages )
00081                     .arg( numBytesRead / 1024 )
00082                     .arg( numBytes / 1024 );
00083       else
00084         statusMsg = i18n( "Transmission complete. %n message in %1 KB.",
00085                          "Transmission complete. %n messages in %1 KB.",
00086                           numMessages )
00087                     .arg( numBytesRead / 1024 );
00088     }
00089     else
00090       statusMsg = i18n( "Transmission complete. %n new message.",
00091                         "Transmission complete. %n new messages.",
00092                         numMessages );
00093   }
00094   else
00095     statusMsg = i18n( "Transmission complete. No new messages." );
00096 
00097   setStatusMsgWithTimestamp( statusMsg );
00098 }
00099 
00100 void KMBroadcastStatus::setStatusMsgTransmissionCompleted( const QString& account,
00101                                                            int numMessages,
00102                                                            int numBytes,
00103                                                            int numBytesRead,
00104                                                            int numBytesToRead,
00105                                                            bool mLeaveOnServer )
00106 {
00107   QString statusMsg;
00108   if( numMessages > 0 ) {
00109     if( numBytes != -1 ) {
00110       if( ( numBytesToRead != numBytes ) && mLeaveOnServer )
00111         statusMsg = i18n( "Transmission for account %3 complete. "
00112                           "%n new message in %1 KB "
00113                           "(%2 KB remaining on the server).",
00114                           "Transmission for account %3 complete. "
00115                           "%n new messages in %1 KB "
00116                           "(%2 KB remaining on the server).",
00117                           numMessages )
00118                     .arg( numBytesRead / 1024 )
00119                     .arg( numBytes / 1024 )
00120                     .arg( account );
00121       else
00122         statusMsg = i18n( "Transmission for account %2 complete. "
00123                           "%n message in %1 KB.",
00124                           "Transmission for account %2 complete. "
00125                           "%n messages in %1 KB.",
00126                           numMessages )
00127                     .arg( numBytesRead / 1024 )
00128                     .arg( account );
00129     }
00130     else
00131       statusMsg = i18n( "Transmission for account %1 complete. "
00132                         "%n new message.",
00133                         "Transmission for account %1 complete. "
00134                         "%n new messages.",
00135                         numMessages )
00136                   .arg( account );
00137   }
00138   else
00139     statusMsg = i18n( "Transmission for account %1 complete. No new messages.")
00140                 .arg( account );
00141 
00142   setStatusMsgWithTimestamp( statusMsg );
00143 }
00144 
00145 void KMBroadcastStatus::setStatusProgressEnable( const QString &id,
00146   bool enable )
00147 {
00148   bool wasEmpty = ids.isEmpty();
00149   if (enable) ids.insert(id, 0);
00150   else ids.remove(id);
00151   if (!wasEmpty && !ids.isEmpty())
00152     setStatusProgressPercent("", 0);
00153   else
00154     emit statusProgressEnable( !ids.isEmpty() );
00155 }
00156 
00157 void KMBroadcastStatus::setStatusProgressPercent( const QString &id,
00158   unsigned long percent )
00159 {
00160   if (!id.isEmpty() && ids.contains(id)) ids.insert(id, percent);
00161   unsigned long sum = 0, count = 0;
00162   for (QMap<QString,unsigned long>::iterator it = ids.begin();
00163     it != ids.end(); it++)
00164   {
00165     sum += *it;
00166     count++;
00167   }
00168   emit statusProgressPercent( count ? (sum / count) : sum );
00169 }
00170 
00171 void KMBroadcastStatus::reset()
00172 {
00173   abortRequested_ = false;
00174   if (ids.isEmpty())
00175     emit resetRequested();
00176 }
00177 
00178 bool KMBroadcastStatus::abortRequested()
00179 {
00180   return abortRequested_;
00181 }
00182 
00183 void KMBroadcastStatus::requestAbort()
00184 {
00185   abortRequested_ = true;
00186   emit signalAbortRequested();
00187 }
00188 
00189 
00190 //-----------------------------------------------------------------------------
00191 KMLittleProgressDlg::KMLittleProgressDlg( QWidget* parent, bool button )
00192   : QFrame( parent )
00193 {
00194   m_bShowButton = button;
00195   int w = fontMetrics().width( " 999.9 kB/s 00:00:01 " ) + 8;
00196   box = new QHBoxLayout( this, 0, 0 );
00197 
00198   m_pButton = new QPushButton( this );
00199   m_pButton->setSizePolicy( QSizePolicy( QSizePolicy::Minimum,
00200                                          QSizePolicy::Minimum ) );
00201   m_pButton->setPixmap( SmallIcon( "cancel" ) );
00202   box->addWidget( m_pButton  );
00203   stack = new QWidgetStack( this );
00204   stack->setMaximumHeight( fontMetrics().height() );
00205   box->addWidget( stack );
00206 
00207   m_sslLabel = new SSLLabel( this );
00208   box->addWidget( m_sslLabel );
00209 
00210   QToolTip::add( m_pButton, i18n("Cancel job") );
00211 
00212   m_pProgressBar = new KProgress( this );
00213   m_pProgressBar->setLineWidth( 1 );
00214   m_pProgressBar->setFrameStyle( QFrame::Box );
00215   m_pProgressBar->installEventFilter( this );
00216   m_pProgressBar->setMinimumWidth( w );
00217   stack->addWidget( m_pProgressBar, 1 );
00218 
00219   m_pLabel = new QLabel( "", this );
00220   m_pLabel->setAlignment( AlignHCenter | AlignVCenter );
00221   m_pLabel->installEventFilter( this );
00222   m_pLabel->setMinimumWidth( w );
00223   stack->addWidget( m_pLabel, 2 );
00224   m_pButton->setMaximumHeight( fontMetrics().height() );
00225   setMinimumWidth( minimumSizeHint().width() );
00226 
00227   mode = None;
00228   setMode();
00229 
00230   connect( m_pButton, SIGNAL( clicked() ),
00231        KMBroadcastStatus::instance(), SLOT( requestAbort() ));
00232 }
00233 
00234 void KMLittleProgressDlg::slotEnable( bool enabled )
00235 {
00236   if (enabled) {
00237     if (mode == Progress) // it's already enabled
00238       return;
00239     m_pButton->setDown( false );
00240     mode = Progress;
00241     kdDebug(5006) << "enable progress" << endl;
00242   }
00243   else {
00244     if (mode == None)
00245       return;
00246     mode = None;
00247   }
00248   setMode();
00249 }
00250 
00251 void KMLittleProgressDlg::slotSetSSL( bool ssl )
00252 {
00253   m_sslLabel->setEncrypted( ssl );
00254 }
00255 
00256 void KMLittleProgressDlg::setMode() {
00257   switch ( mode ) {
00258   case None:
00259     if ( m_bShowButton ) {
00260       m_pButton->hide();
00261     }
00262     m_sslLabel->setState( SSLLabel::Done );
00263     // show the empty label in order to make the status bar look better
00264     stack->show();
00265     stack->raiseWidget( m_pLabel );
00266     break;
00267 
00268   case Clean:
00269     if ( m_bShowButton ) {
00270       m_pButton->hide();
00271     }
00272     m_sslLabel->setState( SSLLabel::Clean );
00273     // show the empty label in order to make the status bar look better
00274     stack->show();
00275     stack->raiseWidget( m_pLabel );
00276     break;
00277 
00278   case Label:
00279     if ( m_bShowButton ) {
00280       m_pButton->show();
00281     }
00282     m_sslLabel->setState( m_sslLabel->lastState() );
00283     stack->show();
00284     stack->raiseWidget( m_pLabel );
00285     break;
00286 
00287   case Progress:
00288     if (stack->isVisible()) {
00289       stack->show();
00290       stack->raiseWidget( m_pProgressBar );
00291       if ( m_bShowButton ) {
00292         m_pButton->show();
00293       }
00294       m_sslLabel->setState( m_sslLabel->lastState() );
00295     }
00296     break;
00297   }
00298 }
00299 
00300 void KMLittleProgressDlg::slotJustPercent( unsigned long _percent )
00301 {
00302   m_pProgressBar->setValue( _percent );
00303 }
00304 
00305 void KMLittleProgressDlg::slotClean()
00306 {
00307   m_pProgressBar->setValue( 0 );
00308   m_pLabel->clear();
00309 
00310   mode = Clean;
00311   setMode();
00312 }
00313 
00314 bool KMLittleProgressDlg::eventFilter( QObject *, QEvent *ev )
00315 {
00316   if ( ev->type() == QEvent::MouseButtonPress ) {
00317     QMouseEvent *e = (QMouseEvent*)ev;
00318 
00319     if ( e->button() == LeftButton ) {    // toggle view on left mouse button
00320       if ( mode == Label ) {
00321     mode = Progress;
00322       } else if ( mode == Progress ) {
00323     mode = Label;
00324       }
00325       setMode();
00326       return true;
00327     }
00328   }
00329 
00330   return false;
00331 }
KDE Logo
This file is part of the documentation for kmail Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat May 1 11:37:19 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003