kio
statusbarprogress.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <qtooltip.h>
00020 #include <qlayout.h>
00021 #include <qwidgetstack.h>
00022 #include <qpushbutton.h>
00023 #include <qlabel.h>
00024
00025 #include <kapplication.h>
00026 #include <klocale.h>
00027 #include <kdebug.h>
00028 #include <kprogress.h>
00029
00030 #include "jobclasses.h"
00031 #include "statusbarprogress.h"
00032
00033 namespace KIO {
00034
00035 StatusbarProgress::StatusbarProgress( QWidget* parent, bool button )
00036 : ProgressBase( parent ) {
00037
00038 m_bShowButton = button;
00039
00040
00041 setOnlyClean(true);
00042
00043 setStopOnClose(false);
00044
00045 int w = fontMetrics().width( " 999.9 kB/s 00:00:01 " ) + 8;
00046 box = new QHBoxLayout( this, 0, 0 );
00047
00048 m_pButton = new QPushButton( "X", this );
00049 box->addWidget( m_pButton );
00050 stack = new QWidgetStack( this );
00051 box->addWidget( stack );
00052 connect( m_pButton, SIGNAL( clicked() ), this, SLOT( slotStop() ) );
00053
00054 m_pProgressBar = new KProgress( this );
00055 m_pProgressBar->setFrameStyle( QFrame::Box | QFrame::Raised );
00056 m_pProgressBar->setLineWidth( 1 );
00057 m_pProgressBar->setBackgroundMode( QWidget::PaletteBackground );
00058 m_pProgressBar->installEventFilter( this );
00059 m_pProgressBar->setMinimumWidth( w );
00060 stack->addWidget( m_pProgressBar, 1 );
00061
00062 m_pLabel = new QLabel( "", this );
00063 m_pLabel->setAlignment( AlignHCenter | AlignVCenter );
00064 m_pLabel->installEventFilter( this );
00065 m_pLabel->setMinimumWidth( w );
00066 stack->addWidget( m_pLabel, 2 );
00067 setMinimumSize( sizeHint() );
00068
00069 mode = None;
00070 setMode();
00071 }
00072
00073
00074 void StatusbarProgress::setJob( KIO::Job *job )
00075 {
00076 ProgressBase::setJob( job );
00077
00078 mode = Progress;
00079 setMode();
00080 }
00081
00082
00083 void StatusbarProgress::setMode() {
00084 switch ( mode ) {
00085 case None:
00086 if ( m_bShowButton ) {
00087 m_pButton->hide();
00088 }
00089 stack->hide();
00090 break;
00091
00092 case Label:
00093 if ( m_bShowButton ) {
00094 m_pButton->show();
00095 }
00096 stack->show();
00097 stack->raiseWidget( m_pLabel );
00098 break;
00099
00100 case Progress:
00101 if ( m_bShowButton ) {
00102 m_pButton->show();
00103 }
00104 stack->show();
00105 stack->raiseWidget( m_pProgressBar );
00106 break;
00107 }
00108 }
00109
00110
00111 void StatusbarProgress::slotClean() {
00112
00113 m_pProgressBar->setValue( 0 );
00114 m_pLabel->clear();
00115
00116 mode = None;
00117 setMode();
00118 }
00119
00120
00121 void StatusbarProgress::slotTotalSize( KIO::Job*, KIO::filesize_t size ) {
00122 m_iTotalSize = size;
00123 }
00124
00125 void StatusbarProgress::slotPercent( KIO::Job*, unsigned long percent ) {
00126 m_pProgressBar->setValue( percent );
00127 }
00128
00129
00130 void StatusbarProgress::slotSpeed( KIO::Job*, unsigned long speed ) {
00131 if ( speed == 0 ) {
00132 m_pLabel->setText( i18n( " Stalled ") );
00133 } else {
00134 m_pLabel->setText( i18n( " %1/s ").arg( KIO::convertSize( speed )) );
00135 }
00136 }
00137
00138
00139 bool StatusbarProgress::eventFilter( QObject *, QEvent *ev ) {
00140 if ( ! m_pJob ) {
00141 return true;
00142 }
00143
00144 if ( ev->type() == QEvent::MouseButtonPress ) {
00145 QMouseEvent *e = (QMouseEvent*)ev;
00146
00147 if ( e->button() == LeftButton ) {
00148 if ( mode == Label ) {
00149 mode = Progress;
00150 } else if ( mode == Progress ) {
00151 mode = Label;
00152 }
00153 setMode();
00154 return true;
00155
00156 }
00157 }
00158
00159 return false;
00160 }
00161
00162 void StatusbarProgress::virtual_hook( int id, void* data )
00163 { ProgressBase::virtual_hook( id, data ); }
00164
00165 }
00166 #include "statusbarprogress.moc"