FolderDelegate: put the progressbar in place of the remote or local folder #3403...
authorOlivier Goffart <ogoffart@woboq.com>
Tue, 27 Oct 2015 11:52:33 +0000 (12:52 +0100)
committerOlivier Goffart <ogoffart@woboq.com>
Tue, 27 Oct 2015 11:52:33 +0000 (12:52 +0100)
So the size of the delegate does not change

src/gui/folderstatusdelegate.cpp
src/gui/folderstatusdelegate.h
src/gui/folderstatusmodel.cpp

index 9ea0346dce7dcb2db373cd4a2b2d25a6aceb6657..52b989ef2d62f2ef9ca760a44e28da522f6807b4 100644 (file)
@@ -79,12 +79,6 @@ QSize FolderStatusDelegate::sizeHint(const QStyleOptionViewItem & option ,
         h += aliasMargin*2 + errMsgs.count()*fm.height();
     }
 
-    if( qvariant_cast<bool>(index.data(AddProgressSpace)) ) {
-        int margin = fm.height()/4;
-        h += (5 * margin); // All the margins
-        h += 2* fm.boundingRect(tr("File")).height();
-    }
-
     return QSize( 0, h);
 }
 
@@ -221,20 +215,23 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
     painter->setFont(aliasFont);
     painter->drawText(aliasRect, elidedAlias);
 
-    painter->setFont(subFont);
-    QString elidedRemotePathText;
+    const bool showProgess = !overallString.isEmpty() || !itemString.isEmpty();
+    if(!showProgess) {
+        painter->setFont(subFont);
+        QString elidedRemotePathText;
+
+        if (remotePath.isEmpty() || remotePath == QLatin1String("/")) {
+            elidedRemotePathText = subFm.elidedText(tr("Syncing selected files in your account with"),
+                                                    Qt::ElideRight, remotePathRect.width());
+        } else {
+            elidedRemotePathText = subFm.elidedText(tr("Remote path: %1").arg(remotePath),
+                                                    Qt::ElideMiddle, remotePathRect.width());
+        }
+        painter->drawText(remotePathRect, elidedRemotePathText);
 
-    if (remotePath.isEmpty() || remotePath == QLatin1String("/")) {
-        elidedRemotePathText = subFm.elidedText(tr("Syncing selected files in your account with"),
-                                                Qt::ElideRight, remotePathRect.width());
-    } else {
-        elidedRemotePathText = subFm.elidedText(tr("Remote path: %1").arg(remotePath),
-                                                Qt::ElideMiddle, remotePathRect.width());
+        QString elidedPathText = subFm.elidedText(pathText, Qt::ElideMiddle, localPathRect.width());
+        painter->drawText(localPathRect, elidedPathText);
     }
-    painter->drawText(remotePathRect, elidedRemotePathText);
-
-    QString elidedPathText = subFm.elidedText(pathText, Qt::ElideMiddle, localPathRect.width());
-    painter->drawText(localPathRect, elidedPathText);
 
     // paint an error overlay if there is an error string
 
@@ -270,7 +267,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
     h += aliasMargin;
 
     // Sync File Progress Bar: Show it if syncFile is not empty.
-    if( !overallString.isEmpty() || !itemString.isEmpty()) {
+    if (showProgess) {
         int fileNameTextHeight = subFm.boundingRect(tr("File")).height();
         int barHeight = qMax(fileNameTextHeight, aliasFm.height()+4); ;
         int overallWidth = option.rect.width()-aliasMargin-nextToIcon;
@@ -283,7 +280,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
 
         // Overall Progress Bar.
         QRect pBRect;
-        pBRect.setTop( h );
+        pBRect.setTop( remotePathRect.top() );
         pBRect.setLeft( nextToIcon );
         pBRect.setHeight(barHeight);
         pBRect.setWidth( overallWidth - progressTextWidth - 2 * margin );
index fc7050c724ee8a445b36f1b198b0bfbc50c83d2d..1cea50e3521228bc6d0bc982d6a0601413917208 100644 (file)
@@ -41,7 +41,6 @@ public:
                     SyncProgressOverallPercent,
                     SyncProgressOverallString,
                     SyncProgressItemString,
-                    AddProgressSpace,
                     WarningCount,
                     SyncRunning,
 
index 2df83d6f8e827181e3d9be802c9541392e5dfbac..f5e6cc9d21ceef669470d0d4d3ba5a5e4a0c7bc9 100644 (file)
@@ -212,8 +212,6 @@ QVariant FolderStatusModel::data(const QModelIndex &index, int role) const
         } else {
             return Theme::instance()->folderOfflineIcon();
         }
-    case FolderStatusDelegate::AddProgressSpace:
-        return !progress.isNull();
     case FolderStatusDelegate::SyncProgressItemString:
         return progress._progressString;
     case FolderStatusDelegate::WarningCount:
@@ -658,7 +656,7 @@ void FolderStatusModel::slotUpdateFolderState(Folder *folder)
     for (int i = 0; i < _folders.count(); ++i) {
         if (_folders.at(i)._folder == folder) {
             emit dataChanged(index(i), index(i),
-                             QVector<int>() << FolderStatusDelegate::AddProgressSpace);
+                             QVector<int>() << FolderStatusDelegate::FolderStatus);
         }
     }
 }
@@ -751,8 +749,7 @@ void FolderStatusModel::slotSetProgress(const ProgressInfo &progress)
     auto *pi = &_folders[folderIndex]._progress;
 
     QVector<int> roles;
-    roles << FolderStatusDelegate::AddProgressSpace << FolderStatusDelegate::SyncProgressItemString
-        << FolderStatusDelegate::WarningCount;
+    roles << FolderStatusDelegate::SyncProgressItemString << FolderStatusDelegate::WarningCount;
 
     if (!progress._currentDiscoveredFolder.isEmpty()) {
         pi->_progressString = tr("Checking for changes in '%1'").arg(progress._currentDiscoveredFolder);