From 3b00dfebeddfe435331cac451b314fecc917a3d2 Mon Sep 17 00:00:00 2001 From: Klaas Freitag Date: Fri, 19 Jul 2013 10:04:09 +0200 Subject: [PATCH] Add a textual display of the file size in progress. --- src/mirall/accountsettings.cpp | 23 +++++++++++++++++------ src/mirall/accountsettings.h | 1 + src/mirall/folderstatusmodel.cpp | 31 +++++++++++++++++++++++++------ src/mirall/folderstatusmodel.h | 6 ++++-- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/mirall/accountsettings.cpp b/src/mirall/accountsettings.cpp index cc51fa8dbf..52a3068f34 100644 --- a/src/mirall/accountsettings.cpp +++ b/src/mirall/accountsettings.cpp @@ -478,8 +478,15 @@ void AccountSettings::slotSetProgress( Progress::Kind kind, const QString& folde if( item ) { if( p1 == p2 ) { // File upload finished. - item->setData( 100, FolderStatusDelegate::SyncProgress1); - item->setData( 100, FolderStatusDelegate::SyncProgress2); + item->setData( 100, FolderStatusDelegate::SyncProgressPercent1); + item->setData( 100, FolderStatusDelegate::SyncProgressPercent2); + if( p1 == 0 ) { + item->setData( (qlonglong) _lastSyncProgress, FolderStatusDelegate::SyncProgressBytes1); + item->setData( (qlonglong) _lastSyncProgress, FolderStatusDelegate::SyncProgressBytes2); + } else { + item->setData( (qlonglong) p1, FolderStatusDelegate::SyncProgressBytes1); + item->setData( (qlonglong) p2, FolderStatusDelegate::SyncProgressBytes2); + } // item->setData( QVariant(QString::null), FolderStatusDelegate::SyncFileName ); // start a timer to stop the progress display @@ -504,8 +511,10 @@ void AccountSettings::slotSetProgress( Progress::Kind kind, const QString& folde // calculate the normalization factor and set the min and max _progressFactor = 100.0/p2; item->setData( QVariant(true), FolderStatusDelegate::AddProgressSpace ); - item->setData( 0, FolderStatusDelegate::SyncProgress1); - item->setData( 100, FolderStatusDelegate::SyncProgress2); + item->setData( 0, FolderStatusDelegate::SyncProgressPercent1); + item->setData( 100, FolderStatusDelegate::SyncProgressPercent2); + item->setData( (qlonglong) 0, FolderStatusDelegate::SyncProgressBytes1); + item->setData( (qlonglong) p2, FolderStatusDelegate::SyncProgressBytes2); // strip off the server prefix from the file name QString shortFile(file); @@ -526,8 +535,10 @@ 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::SyncProgress1); - item->setData( 100, FolderStatusDelegate::SyncProgress2); + 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 3a9dadc2dc..fd2a210f79 100644 --- a/src/mirall/accountsettings.h +++ b/src/mirall/accountsettings.h @@ -93,6 +93,7 @@ private: double _progressFactor; QHash _hideProgressTimers; QTimer *_timer; + long _lastSyncProgress; }; } // namespace Mirall diff --git a/src/mirall/folderstatusmodel.cpp b/src/mirall/folderstatusmodel.cpp index 920966c47a..bbee388660 100644 --- a/src/mirall/folderstatusmodel.cpp +++ b/src/mirall/folderstatusmodel.cpp @@ -13,6 +13,7 @@ */ #include "mirall/folderstatusmodel.h" +#include "mirall/utility.h" #include #include @@ -122,8 +123,10 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & QString remotePath = qvariant_cast(index.data(FolderSecondPathRole)); QString errorText = qvariant_cast(index.data(FolderErrorMsg)); QString syncFile = qvariant_cast(index.data(SyncFileName)); - long progress1 = qvariant_cast(index.data(SyncProgress1)); - long progress2 = qvariant_cast(index.data(SyncProgress2)); + 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)); // QString statusText = qvariant_cast(index.data(FolderStatus)); bool syncEnabled = index.data(FolderSyncEnabled).toBool(); @@ -240,29 +243,45 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & QRect fileNameRect; fileNameRect.setTop(progressRect.top() + margin); fileNameRect.setLeft(progressRect.left() + margin); - fileNameRect.setWidth( progressRect.width() - 2*margin); + fileNameRect.setWidth( progressRect.width() - 2*margin ); fileNameRect.setHeight(fileNameTextHeight); QString pText = subFm.elidedText( tr("File %1: ").arg(syncFile), Qt::ElideLeft, fileNameRect.width()); painter->drawText(fileNameRect, pText); painter->restore(); + // Sizes-Text + QString s1 = Utility::octetsToString( progressBytes2 ); + QRect octetRect = subFm.boundingRect( tr("%1 of %2").arg(s1).arg(s1) ); + QRect pBRect; pBRect.setTop( fileNameRect.bottom() + margin ); pBRect.setLeft( fileNameRect.left()); pBRect.setHeight(barHeight); - pBRect.setWidth( fileNameRect.width()); + pBRect.setWidth( fileNameRect.width() - octetRect.width()-margin ); QStyleOptionProgressBarV2 pBarOpt; pBarOpt.state = option.state | QStyle::State_Horizontal; pBarOpt.minimum = 0; - pBarOpt.maximum = progress2; - pBarOpt.progress = progress1; + pBarOpt.maximum = progressPercent2; + pBarOpt.progress = progressPercent1; pBarOpt.orientation = Qt::Horizontal; pBarOpt.palette = option.palette; pBarOpt.rect = pBRect; QApplication::style()->drawControl( QStyle::CE_ProgressBar, &pBarOpt, painter ); + + QRect sizeRect; + sizeRect.setTop(pBRect.top()); + sizeRect.setHeight(pBRect.height()); + + sizeRect.setLeft(pBRect.right() + margin); + sizeRect.setWidth( octetRect.width() ); + QString ps1 = Utility::octetsToString( progressBytes1 ); + QString ps2 = Utility::octetsToString( progressBytes2 ); + + painter->drawText(sizeRect, tr("%1 of %2").arg(ps1).arg(ps2)); + } // painter->drawText(lastSyncRect, tr("Last Sync: %1").arg( statusText )); // painter->drawText(statusRect, tr("Sync Status: %1").arg( syncStatus )); diff --git a/src/mirall/folderstatusmodel.h b/src/mirall/folderstatusmodel.h index 8a87d0b444..0e5fa43c76 100644 --- a/src/mirall/folderstatusmodel.h +++ b/src/mirall/folderstatusmodel.h @@ -45,8 +45,10 @@ class FolderStatusDelegate : public QStyledItemDelegate FolderSyncEnabled, FolderStatusIconRole, SyncFileName, - SyncProgress1, - SyncProgress2, + SyncProgressPercent1, + SyncProgressPercent2, + SyncProgressBytes1, + SyncProgressBytes2, AddProgressSpace }; void paint( QPainter*, const QStyleOptionViewItem&, const QModelIndex& ) const;