00001
00020 #ifdef HAVE_CONFIG_H
00021 #include <config.h>
00022 #endif
00023
00024 #include "imapprogressdialog.h"
00025
00026 #include <kpushbutton.h>
00027 #include <klocale.h>
00028 #include <kdialog.h>
00029 #include <kstdguiitem.h>
00030
00031 #include <qlayout.h>
00032 #include <qstyle.h>
00033 #include <qpainter.h>
00034 #include <qprogressbar.h>
00035
00036
00037 namespace KMail {
00038
00039
00040 ProgressListViewItem::ProgressListViewItem(int col, int pro, QListView* parent,
00041 const QString& label1,
00042 const QString& label2,
00043 const QString& label3,
00044 const QString& label4,
00045 const QString& label5,
00046 const QString& label6,
00047 const QString& label7,
00048 const QString& label8 )
00049 : QListViewItem( parent, label1, label2, label3, label4, label5, label6,
00050 label7, label8 )
00051 {
00052 pbcol = col;
00053 prog = pro;
00054 mProgress = new QProgressBar( 100, 0 );
00055 mProgress->setProgress( prog );
00056 }
00057
00058 ProgressListViewItem::ProgressListViewItem(int col, int pro, QListView* parent,
00059 ProgressListViewItem* after,
00060 const QString& label1,
00061 const QString& label2,
00062 const QString& label3,
00063 const QString& label4,
00064 const QString& label5,
00065 const QString& label6,
00066 const QString& label7,
00067 const QString& label8 )
00068 : QListViewItem( parent, after, label1, label2, label3, label4, label5,
00069 label6, label7, label8 )
00070 {
00071 pbcol = col;
00072 prog = pro;
00073 mProgress = new QProgressBar( 100, 0 );
00074 mProgress->setProgress( prog );
00075 }
00076
00077 ProgressListViewItem::~ProgressListViewItem()
00078 {
00079 delete mProgress;
00080 }
00081
00082 void ProgressListViewItem::setProgress( int progress )
00083 {
00084 mProgress->setProgress( progress );
00085 }
00086
00087 void ProgressListViewItem::paintCell( QPainter *p, const QColorGroup &cg,
00088 int column, int width, int alignment )
00089 {
00090 QColorGroup _cg( cg );
00091 QColor c = _cg.text();
00092
00093
00094 if ( column == pbcol ){
00095 const QRect bar = QRect( 0, 0, width, height() );
00096 mProgress->resize( width, height() );
00097
00098 QPixmap pm( bar.size() );
00099 QPainter paint( &pm );
00100
00101 paint.fillRect( bar, listView()->paletteBackgroundColor() );
00102 paint.setFont( p->font() );
00103
00104 QStyle::SFlags flags = QStyle::Style_Default;
00105 if (isEnabled())
00106 flags |= QStyle::Style_Enabled;
00107
00108 listView()->style().drawControl(QStyle::CE_ProgressBarGroove, &paint, mProgress,
00109 QStyle::visualRect(listView()->style().subRect(QStyle::SR_ProgressBarGroove, mProgress), mProgress ),
00110 listView()->colorGroup(), flags);
00111
00112 listView()->style().drawControl(QStyle::CE_ProgressBarContents, &paint, mProgress,
00113 QStyle::visualRect(listView()->style().subRect(QStyle::SR_ProgressBarContents, mProgress), mProgress ),
00114 listView()->colorGroup(), flags);
00115
00116 if (mProgress->percentageVisible())
00117 listView()->style().drawControl(QStyle::CE_ProgressBarLabel, &paint, mProgress,
00118 QStyle::visualRect(listView()->style().subRect(QStyle::SR_ProgressBarLabel, mProgress), mProgress ),
00119 listView()->colorGroup(), flags);
00120 paint.end();
00121
00122 p->drawPixmap( bar.x(), bar.y(), pm );
00123
00124 }
00125 else {
00126 _cg.setColor( QColorGroup::Text, c );
00127 QListViewItem::paintCell( p, _cg, column, width, alignment );
00128 }
00129 }
00130
00131 IMAPProgressDialog::IMAPProgressDialog( QWidget* parent, const char* name, bool modal, WFlags fl )
00132 : QDialog( parent, name, modal, fl ),
00133 mPreviousItem( 0 )
00134 {
00135
00136 setCaption( i18n("IMAP Progress") );
00137 resize( 360, 328 );
00138
00139 QBoxLayout* topLayout = new QVBoxLayout( this, KDialog::marginHint(), KDialog::spacingHint(),
00140 "topLayout");
00141
00142 mSyncEditorListView = new QListView( this, "SyncEditorListView" );
00143 mSyncEditorListView->addColumn( i18n( "Folder" ) );
00144 mSyncEditorListView->addColumn( i18n( "Progress" ) );
00145 mSyncEditorListView->addColumn( i18n( "Status" ) );
00146 mSyncEditorListView->setSorting( -1, false );
00147 mSyncEditorListView->setColumnWidth( 0, 100 );
00148 mSyncEditorListView->setColumnWidth( 1, 100 );
00149 mSyncEditorListView->setColumnWidth( 2, 200 );
00150
00151 mSyncEditorListView->setColumnWidthMode(0, QListView::Maximum);
00152 mSyncEditorListView->setColumnWidthMode(2, QListView::Maximum);
00153
00154 topLayout->addWidget( mSyncEditorListView );
00155
00156 QBoxLayout* bottomLayout = new QHBoxLayout( topLayout, KDialog::spacingHint(), "bottomLayout");
00157 bottomLayout->addStretch();
00158
00159 KPushButton* pbClose = new KPushButton( KStdGuiItem::close(), this );
00160 pbClose->setText( i18n( "Close" ) );
00161 bottomLayout->addWidget( pbClose );
00162
00163 connect(pbClose, SIGNAL(clicked()), this, SLOT(close()) );
00164 }
00165
00166 void IMAPProgressDialog::clear()
00167 {
00168 QListViewItem* item;
00169 while( ( item = mSyncEditorListView->firstChild() ) != 0 ) delete item;
00170 mPreviousItem = 0;
00171 }
00172
00173
00174
00175 void IMAPProgressDialog::syncState( const QString& folderName,
00176 int progress, const QString& syncStatus )
00177 {
00178 ProgressListViewItem* item = 0;
00179 for( QListViewItem* it = mSyncEditorListView->firstChild(); it != 0; it = it->nextSibling() ) {
00180 if( folderName == it->text(0) ) {
00181 item = static_cast<ProgressListViewItem*>(it);
00182 break;
00183 }
00184 }
00185
00186 if ( progress > 100 )
00187 progress = 100;
00188
00189 if( item ) {
00190 item->setProgress( progress );
00191 item->setText( 2, syncStatus );
00192 } else {
00193 mPreviousItem = new ProgressListViewItem( 1, progress,
00194 mSyncEditorListView,
00195 mPreviousItem, folderName,
00196 QString::null, syncStatus );
00197 }
00198 }
00199
00200 void IMAPProgressDialog::closeEvent( QCloseEvent* e )
00201 {
00202 e->accept();
00203 hide();
00204 }
00205
00206
00207
00208
00209
00210 IMAPProgressDialog::~IMAPProgressDialog()
00211 {
00212
00213 }
00214
00215
00216 }
00217
00218 #include "imapprogressdialog.moc"