diff --git a/src/mirall/accountsettings.cpp b/src/mirall/accountsettings.cpp index ddc9cd1e5..e1871da85 100644 --- a/src/mirall/accountsettings.cpp +++ b/src/mirall/accountsettings.cpp @@ -459,14 +459,17 @@ void AccountSettings::slotOpenOC() QDesktopServices::openUrl( _OCUrl ); } -void AccountSettings::slotSetProgress( Progress::Kind kind, const QString& folder, const QString& file, long p1, long p2 ) +QStandardItem* AccountSettings::itemForFolder(const QString& folder) { - // qDebug() << "================================> Progress for folder " << folder << " file " << file << ": "<< p1; + QStandardItem *item = NULL; + + if( folder.isEmpty() ) { + return item; + } + int row = 0; - if( folder.isEmpty() ) return; - - QStandardItem *item = _model->item( row ); + item = _model->item( row ); while( item ) { if( item->data( FolderStatusDelegate::FolderAliasRole ) == folder ) { @@ -475,6 +478,28 @@ void AccountSettings::slotSetProgress( Progress::Kind kind, const QString& folde } item = _model->item( ++row ); } + return item; +} + +void AccountSettings::slotSetOverallProgress( const QString& folder, const QString& file, int fileNo, int fileCnt, + qlonglong p1, qlonglong p2) +{ + QStandardItem *item = itemForFolder(folder); + if( item ) { + item->setData( p1, FolderStatusDelegate::OverallProgress1); + item->setData( p2, FolderStatusDelegate::OverallProgress2); + item->setData( fileNo, FolderStatusDelegate::OverallFileNo); + item->setData( fileCnt, FolderStatusDelegate::OverallFileCount); + item->setData( file, FolderStatusDelegate::OverallCurrentFile); + + } +} + +void AccountSettings::slotSetProgress( Progress::Kind kind, const QString& folder, const QString& file, long p1, long p2 ) +{ + // qDebug() << "================================> Progress for folder " << folder << " file " << file << ": "<< p1; + + QStandardItem *item = itemForFolder( folder ); if( item ) { if( p1 == p2 ) { // File upload finished. @@ -509,7 +534,7 @@ void AccountSettings::slotSetProgress( Progress::Kind kind, const QString& folde t->deleteLater(); } // calculate the normalization factor and set the min and max - _progressFactor = 100.0/p2; + // _progressFactor = 100.0/p2; item->setData( QVariant(true), FolderStatusDelegate::AddProgressSpace ); item->setData( 0, FolderStatusDelegate::SyncProgressPercent1); item->setData( 100, FolderStatusDelegate::SyncProgressPercent2); @@ -535,7 +560,7 @@ void AccountSettings::slotSetProgress( Progress::Kind kind, const QString& folde shortFile = kindString + QLatin1String(" ") + shortFile; item->setData( shortFile, FolderStatusDelegate::SyncFileName ); } else { // File progress - item->setData( int(_progressFactor * p1), FolderStatusDelegate::SyncProgressPercent1); + // item->setData( int(_progressFactor * p1), FolderStatusDelegate::SyncProgressPercent1); item->setData( (qlonglong) p1, FolderStatusDelegate::SyncProgressBytes1); _lastSyncProgress = p1; diff --git a/src/mirall/accountsettings.h b/src/mirall/accountsettings.h index fd2a210f7..50e5ded9f 100644 --- a/src/mirall/accountsettings.h +++ b/src/mirall/accountsettings.h @@ -66,6 +66,7 @@ public slots: void slotDoubleClicked( const QModelIndex& ); void slotFolderOpenAction( const QString& ); void slotSetProgress( Progress::Kind, const QString&, const QString&, long, long ); + void slotSetOverallProgress( const QString&, const QString&, int, int, qlonglong, qlonglong ); void slotUpdateQuota( qint64,qint64 ); protected slots: @@ -84,6 +85,8 @@ protected slots: private: void folderToModelItem( QStandardItem *, Folder * ); + QStandardItem* itemForFolder(const QString& ); + Ui::AccountSettings *ui; QPointer _fileItemDialog; FolderMan *_folderMan; diff --git a/src/mirall/csyncthread.cpp b/src/mirall/csyncthread.cpp index e95584ef4..60d069198 100644 --- a/src/mirall/csyncthread.cpp +++ b/src/mirall/csyncthread.cpp @@ -418,7 +418,6 @@ void CSyncThread::cb_overall_progress(const char *file_name, int file_no, int fi if(thread) { thread->overallTransmissionProgress( file, file_no, file_cnt, o1, o2 ); } - } void CSyncThread::setLastAuthCookies(QList c) diff --git a/src/mirall/folderstatusmodel.cpp b/src/mirall/folderstatusmodel.cpp index 5ac098a99..4f2f32105 100644 --- a/src/mirall/folderstatusmodel.cpp +++ b/src/mirall/folderstatusmodel.cpp @@ -125,8 +125,13 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & QString syncFile = qvariant_cast(index.data(SyncFileName)); int progressPercent1 = qvariant_cast(index.data(SyncProgressPercent1)); int progressPercent2 = qvariant_cast(index.data(SyncProgressPercent2)); - qlonglong progressBytes1 = qvariant_cast(index.data(SyncProgressBytes1)); - qlonglong progressBytes2 = qvariant_cast(index.data(SyncProgressBytes2)); + qlonglong fileBytes1 = qvariant_cast(index.data(SyncProgressBytes1)); + qlonglong fileBytes2 = qvariant_cast(index.data(SyncProgressBytes2)); + + qlonglong overallBytes1 = qvariant_cast(index.data(OverallProgress1)); + qlonglong overallBytes2 = qvariant_cast(index.data(OverallProgress2)); + int currentFileCount = qvariant_cast(index.data(OverallFileNo)); + int overallFileCount = qvariant_cast(index.data(OverallFileCount)); // QString statusText = qvariant_cast(index.data(FolderStatus)); bool syncEnabled = index.data(FolderSyncEnabled).toBool(); @@ -194,10 +199,12 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & painter->drawText(localPathRect, elidedPathText); // paint an error overlay if there is an error string + + int h = iconRect.bottom(); if( !errorText.isEmpty() ) { QRect errorRect = localPathRect; errorRect.setLeft( iconRect.left()); - errorRect.setTop( iconRect.bottom()+subFm.height()/2 ); + errorRect.setTop( h ); errorRect.setHeight(subFm.height()+aliasMargin); errorRect.setRight( option.rect.right()-aliasMargin ); @@ -221,8 +228,78 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & eText = errorText.left(linebreak); } painter->drawText(errorTextRect, eText); - } + h = errorRect.bottom(); + } + h += aliasMargin; + + if( !syncFile.isEmpty()) { + int fileNameTextHeight = subFm.boundingRect(tr("File")).height(); + int barHeight = fileNameTextHeight; + int overallWidth = option.rect.width()-2*aliasMargin; + + painter->save(); + // painter->setBrush( option.palette.brightText() ); + // painter->drawRoundedRect( progressRect, 2, 2 ); // do not draw the box. + + // Sizes-Text + QString s1 = Utility::octetsToString( overallBytes1+fileBytes1 ); + QString s2 = Utility::octetsToString( overallBytes2 ); + QString overallSyncString = tr("%1 of %2, file %3 of %4").arg(s1).arg(s2).arg(currentFileCount).arg(overallFileCount); + + QRect octetRect = subFm.boundingRect( overallSyncString ); + int progressTextWidth = octetRect.width(); + + // Overall Bar. + QRect pBRect; + pBRect.setTop( h ); + pBRect.setLeft( iconRect.left()); + pBRect.setHeight(barHeight); + pBRect.setWidth( overallWidth - progressTextWidth - margin ); + + int overallPercent = (overallBytes1+fileBytes1) *100.0/overallBytes2; + QStyleOptionProgressBarV2 pBarOpt; + pBarOpt.state = option.state | QStyle::State_Horizontal; + pBarOpt.minimum = 0; + pBarOpt.maximum = 100; + pBarOpt.progress = overallPercent; + pBarOpt.orientation = Qt::Horizontal; + pBarOpt.palette = option.palette; + pBarOpt.rect = pBRect; + + QApplication::style()->drawControl( QStyle::CE_ProgressBar, &pBarOpt, painter ); + + // Overall Progress Text + QRect overallProgressRect; + overallProgressRect.setTop( pBRect.top() ); + overallProgressRect.setHeight( pBRect.height() ); + overallProgressRect.setLeft( pBRect.right()+margin); + overallProgressRect.setWidth( progressTextWidth ); + painter->setFont(progressFont); + painter->drawText( overallProgressRect, Qt::AlignRight+Qt::AlignVCenter, overallSyncString); + + s1 = Utility::octetsToString( fileBytes2); + octetRect = subFm.boundingRect( tr("%1 of %2").arg(s1).arg(s1) ); + progressTextWidth = octetRect.width()+20; + + QRect fileRect; + fileRect.setTop( pBRect.bottom() + margin); + fileRect.setLeft( iconRect.left()); + fileRect.setWidth( overallWidth - margin - progressTextWidth ); + fileRect.setHeight(fileNameTextHeight); + painter->drawText( fileRect, syncFile ); + + QRect fileProgressRect; + fileProgressRect.setTop(pBRect.bottom()+margin); + fileProgressRect.setLeft(fileRect.right()+margin); + fileProgressRect.setWidth(progressTextWidth); + fileProgressRect.setHeight(fileNameTextHeight); + s1 = Utility::octetsToString(fileBytes1); + s2 = Utility::octetsToString(fileBytes2); + QString fileProgressString = tr("%1 of %2").arg(s1).arg(s2); + painter->drawText( fileProgressRect, Qt::AlignRight+Qt::AlignVCenter, fileProgressString ); + } +#if 0 /* Display the sync progress. */ if( !syncFile.isEmpty() ) { int fileNameTextHeight = subFm.boundingRect(tr("File")).height(); @@ -284,6 +361,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & painter->restore(); } +#endif // painter->drawText(lastSyncRect, tr("Last Sync: %1").arg( statusText )); // painter->drawText(statusRect, tr("Sync Status: %1").arg( syncStatus )); painter->restore(); diff --git a/src/mirall/folderstatusmodel.h b/src/mirall/folderstatusmodel.h index 0e5fa43c7..ac99556a9 100644 --- a/src/mirall/folderstatusmodel.h +++ b/src/mirall/folderstatusmodel.h @@ -49,7 +49,13 @@ class FolderStatusDelegate : public QStyledItemDelegate SyncProgressPercent2, SyncProgressBytes1, SyncProgressBytes2, - AddProgressSpace + AddProgressSpace, + OverallProgress1, + OverallProgress2, + OverallPercent, + OverallFileNo, + OverallFileCount, + OverallCurrentFile }; void paint( QPainter*, const QStyleOptionViewItem&, const QModelIndex& ) const; QSize sizeHint( const QStyleOptionViewItem&, const QModelIndex& ) const; diff --git a/src/mirall/owncloudfolder.cpp b/src/mirall/owncloudfolder.cpp index 456093dfb..d7a7efd68 100644 --- a/src/mirall/owncloudfolder.cpp +++ b/src/mirall/owncloudfolder.cpp @@ -445,7 +445,7 @@ void ownCloudFolder::slotFileTransmissionProgress(Progress::Kind kind, const QSt void ownCloudFolder::slotOverallTransmissionProgress( const QString& fileName, int fileNo, int fileCnt, long long o1, long long o2) { - ProgressDispatcher::instance()->setOverallProgress( fileName, fileNo, fileCnt, qlonglong(o1), qlonglong(o2)); + ProgressDispatcher::instance()->setOverallProgress( alias(), fileName, fileNo, fileCnt, qlonglong(o1), qlonglong(o2)); } diff --git a/src/mirall/progressdispatcher.cpp b/src/mirall/progressdispatcher.cpp index 4c7e3d778..5317e0392 100644 --- a/src/mirall/progressdispatcher.cpp +++ b/src/mirall/progressdispatcher.cpp @@ -80,9 +80,10 @@ void ProgressDispatcher::setFolderProgress( Progress::Kind kind, const QString& emit folderProgress( kind, alias, file, p1, p2 ); } -void ProgressDispatcher::setOverallProgress( const QString& file, int fileNo, int fileCnt, qlonglong o1, qlonglong o2 ) +void ProgressDispatcher::setOverallProgress( const QString& folder, const QString& file, int fileNo, int fileCnt, + qlonglong o1, qlonglong o2 ) { - emit overallProgress( file, fileNo, fileCnt, o1, o2 ); + emit overallProgress( folder, file, fileNo, fileCnt, o1, o2 ); } } diff --git a/src/mirall/progressdispatcher.h b/src/mirall/progressdispatcher.h index d47610272..a5b307a81 100644 --- a/src/mirall/progressdispatcher.h +++ b/src/mirall/progressdispatcher.h @@ -49,11 +49,11 @@ public: public: void setFolderProgress( Progress::Kind, const QString&, const QString&, long, long ); - void setOverallProgress( const QString&, int, int, qlonglong, qlonglong); + void setOverallProgress(const QString&, const QString&, int, int, qlonglong, qlonglong); signals: void folderProgress( Progress::Kind, const QString&, const QString&, long, long ); - void overallProgress(const QString&, int, int, qlonglong, qlonglong ); + void overallProgress(const QString&, const QString&, int, int, qlonglong, qlonglong ); public slots: diff --git a/src/mirall/settingsdialog.cpp b/src/mirall/settingsdialog.cpp index 18a013756..eeacfc030 100644 --- a/src/mirall/settingsdialog.cpp +++ b/src/mirall/settingsdialog.cpp @@ -74,6 +74,8 @@ SettingsDialog::SettingsDialog(Application *app, QWidget *parent) : connect( ProgressDispatcher::instance(), SIGNAL(folderProgress(Progress::Kind, QString,QString,long,long)), _accountSettings, SLOT(slotSetProgress(Progress::Kind, QString,QString,long,long))); + connect( ProgressDispatcher::instance(), SIGNAL(overallProgress(QString,QString, int,int,qlonglong,qlonglong)), + _accountSettings, SLOT(slotSetOverallProgress( const QString&, const QString&, int, int, qlonglong , qlonglong ))); connect(ProgressDispatcher::instance(), SIGNAL(shortFolderProgress(QString, QString)), this, SLOT(slotShortFolderProgress(QString, QString)));