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 Wed Jul 28 23:57:58 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003