kmbroadcaststatus.cpp
00001
00002
00003
00004
00005
00006
00007
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 ) )
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)
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
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
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 ) {
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 }
This file is part of the documentation for kmail Library Version 3.2.2.