You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

214 lines
6.6 KiB

/** -*- c++ -*-
* imapprogressdialog.cpp
*
* Copyright (c) 2002-2003 Klarälvdalens Datakonsult AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License
*
* This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "imapprogressdialog.h"
#include <kpushbutton.h>
#include <klocale.h>
#include <kdialog.h>
#include <kstdguiitem.h>
#include <qlayout.h>
#include <qstyle.h>
#include <qpainter.h>
#include <qprogressbar.h>
namespace KMail {
ProgressListViewItem::ProgressListViewItem(int col, int pro, QListView* parent,
const QString& label1,
const QString& label2,
const QString& label3,
const QString& label4,
const QString& label5,
const QString& label6,
const QString& label7,
const QString& label8 )
: QListViewItem( parent, label1, label2, label3, label4, label5, label6,
label7, label8 )
{
pbcol = col;
prog = pro;
mProgress = new QProgressBar( 100, 0 );
mProgress->setProgress( prog );
}
ProgressListViewItem::ProgressListViewItem(int col, int pro, QListView* parent,
ProgressListViewItem* after,
const QString& label1,
const QString& label2,
const QString& label3,
const QString& label4,
const QString& label5,
const QString& label6,
const QString& label7,
const QString& label8 )
: QListViewItem( parent, after, label1, label2, label3, label4, label5,
label6, label7, label8 )
{
pbcol = col;
prog = pro;
mProgress = new QProgressBar( 100, 0 );
mProgress->setProgress( prog );
}
ProgressListViewItem::~ProgressListViewItem()
{
delete mProgress;
}
void ProgressListViewItem::setProgress( int progress )
{
mProgress->setProgress( progress );
}
void ProgressListViewItem::paintCell( QPainter *p, const QColorGroup &cg,
int column, int width, int alignment )
{
QColorGroup _cg( cg );
QColor c = _cg.text();
if ( column == pbcol ){
const QRect bar = QRect( 0, 0, width, height() );
mProgress->resize( width, height() );
QPixmap pm( bar.size() );
QPainter paint( &pm );
paint.fillRect( bar, listView()->paletteBackgroundColor() );
paint.setFont( p->font() );
QStyle::SFlags flags = QStyle::Style_Default;
if (isEnabled())
flags |= QStyle::Style_Enabled;
listView()->style().drawControl(QStyle::CE_ProgressBarGroove, &paint, mProgress,
QStyle::visualRect(listView()->style().subRect(QStyle::SR_ProgressBarGroove, mProgress), mProgress ),
listView()->colorGroup(), flags);
listView()->style().drawControl(QStyle::CE_ProgressBarContents, &paint, mProgress,
QStyle::visualRect(listView()->style().subRect(QStyle::SR_ProgressBarContents, mProgress), mProgress ),
listView()->colorGroup(), flags);
if (mProgress->percentageVisible())
listView()->style().drawControl(QStyle::CE_ProgressBarLabel, &paint, mProgress,
QStyle::visualRect(listView()->style().subRect(QStyle::SR_ProgressBarLabel, mProgress), mProgress ),
listView()->colorGroup(), flags);
paint.end();
p->drawPixmap( bar.x(), bar.y(), pm );
}
else {
_cg.setColor( QColorGroup::Text, c );
QListViewItem::paintCell( p, _cg, column, width, alignment );
}
}
IMAPProgressDialog::IMAPProgressDialog( QWidget* parent, const char* name, bool modal, WFlags fl )
: QDialog( parent, name, modal, fl ),
mPreviousItem( 0 )
{
setCaption( i18n("IMAP Progress") );
resize( 360, 328 );
QBoxLayout* topLayout = new QVBoxLayout( this, KDialog::marginHint(), KDialog::spacingHint(),
"topLayout");
mSyncEditorListView = new QListView( this, "SyncEditorListView" );
mSyncEditorListView->addColumn( i18n( "Folder" ) );
mSyncEditorListView->addColumn( i18n( "Progress" ) );
mSyncEditorListView->addColumn( i18n( "Status" ) );
mSyncEditorListView->setSorting( -1, false );
mSyncEditorListView->setColumnWidth( 0, 100 );
mSyncEditorListView->setColumnWidth( 1, 100 );
mSyncEditorListView->setColumnWidth( 2, 200 );
mSyncEditorListView->setColumnWidthMode(0, QListView::Maximum);
mSyncEditorListView->setColumnWidthMode(2, QListView::Maximum);
topLayout->addWidget( mSyncEditorListView );
QBoxLayout* bottomLayout = new QHBoxLayout( topLayout, KDialog::spacingHint(), "bottomLayout");
bottomLayout->addStretch();
KPushButton* pbClose = new KPushButton( KStdGuiItem::close(), this );
pbClose->setText( i18n( "Close" ) );
bottomLayout->addWidget( pbClose );
connect(pbClose, SIGNAL(clicked()), this, SLOT(close()) );
}
void IMAPProgressDialog::clear()
{
QListViewItem* item;
while( ( item = mSyncEditorListView->firstChild() ) != 0 ) delete item;
mPreviousItem = 0;
}
/* retrieves the info needed to update the list view items and it's progress bar */
void IMAPProgressDialog::syncState( const QString& folderName,
int progress, const QString& syncStatus )
{
ProgressListViewItem* item = 0;
for( QListViewItem* it = mSyncEditorListView->firstChild(); it != 0; it = it->nextSibling() ) {
if( folderName == it->text(0) ) {
item = static_cast<ProgressListViewItem*>(it);
break;
}
}
if ( progress > 100 )
progress = 100;
if( item ) {
item->setProgress( progress );
item->setText( 2, syncStatus );
} else {
mPreviousItem = new ProgressListViewItem( 1, progress,
mSyncEditorListView,
mPreviousItem, folderName,
QString::null, syncStatus );
}
}
void IMAPProgressDialog::closeEvent( QCloseEvent* e )
{
e->accept();
hide();
}
/*
* Destructor
*/
IMAPProgressDialog::~IMAPProgressDialog()
{
// no need to delete child widgets.
}
};
#include "imapprogressdialog.moc"