]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Don't show a expanding-toggle in the Folders Panel if there are no subdirectories
authorPeter Penz <peter.penz19@gmail.com>
Sun, 15 Jan 2012 09:39:11 +0000 (10:39 +0100)
committerPeter Penz <peter.penz19@gmail.com>
Sun, 15 Jan 2012 09:41:44 +0000 (10:41 +0100)
BUG: 290745
FIXED-IN: 4.8.0

src/kitemviews/kfileitemmodel.cpp
src/kitemviews/kfileitemmodel.h
src/kitemviews/kfileitemmodelrolesupdater.cpp
src/kitemviews/kfileitemmodelrolesupdater.h
src/panels/folders/folderspanel.cpp

index d81ddd965529b79a5e86e996f443f5d24a829d9a..b1a5fec422999f505754d0c1c5e67df89e36a293 100644 (file)
@@ -183,6 +183,20 @@ bool KFileItemModel::showHiddenFiles() const
     return dirLister ? dirLister->showingDotFiles() : false;
 }
 
     return dirLister ? dirLister->showingDotFiles() : false;
 }
 
+void KFileItemModel::setShowFoldersOnly(bool enabled)
+{
+    KDirLister* dirLister = m_dirLister.data();
+    if (dirLister) {
+        dirLister->setDirOnlyMode(enabled);
+    }
+}
+
+bool KFileItemModel::showFoldersOnly() const
+{
+    KDirLister* dirLister = m_dirLister.data();
+    return dirLister ? dirLister->dirOnlyMode() : false;
+}
+
 QMimeData* KFileItemModel::createMimeData(const QSet<int>& indexes) const
 {
     QMimeData* data = new QMimeData();
 QMimeData* KFileItemModel::createMimeData(const QSet<int>& indexes) const
 {
     QMimeData* data = new QMimeData();
index 07634655ca4d409976e2799426106150091af1f2..acb3eb153280d3ba51d97d23ce50f69151eaceb9 100644 (file)
@@ -73,6 +73,13 @@ public:
     void setShowHiddenFiles(bool show);
     bool showHiddenFiles() const;
 
     void setShowHiddenFiles(bool show);
     bool showHiddenFiles() const;
 
+    /**
+     * If set to true, only folders are shown as items of the model. Files
+     * are ignored.
+     */
+    void setShowFoldersOnly(bool enabled);
+    bool showFoldersOnly() const;
+
     /** @reimp */
     virtual QMimeData* createMimeData(const QSet<int>& indexes) const;
 
     /** @reimp */
     virtual QMimeData* createMimeData(const QSet<int>& indexes) const;
 
index 098c844aba2aec4490dcc61093ad50b2f466c309..a974094d5844c23b135f9ae816e54bab56b9a33b 100644 (file)
@@ -33,7 +33,7 @@
 #include <QElapsedTimer>
 #include <QTimer>
 
 #include <QElapsedTimer>
 #include <QTimer>
 
-// Required includes for subDirectoriesCount():
+// Required includes for subItemsCount():
 #ifdef Q_WS_WIN
     #include <QDir>
 #else
 #ifdef Q_WS_WIN
     #include <QDir>
 #else
@@ -770,7 +770,7 @@ QHash<QByteArray, QVariant> KFileItemModelRolesUpdater::rolesData(const KFileIte
 
     if ((getSizeRole || getIsExpandableRole) && item.isDir() && item.isLocalFile()) {
         const QString path = item.localPath();
 
     if ((getSizeRole || getIsExpandableRole) && item.isDir() && item.isLocalFile()) {
         const QString path = item.localPath();
-        const int count = subDirectoriesCount(path);
+        const int count = subItemsCount(path);
         if (count >= 0) {
             if (getSizeRole) {
                 data.insert("size", KIO::filesize_t(count));
         if (count >= 0) {
             if (getSizeRole) {
                 data.insert("size", KIO::filesize_t(count));
@@ -826,16 +826,22 @@ KFileItemList KFileItemModelRolesUpdater::sortedItems(const QSet<KFileItem>& ite
     return itemList;
 }
 
     return itemList;
 }
 
-int KFileItemModelRolesUpdater::subDirectoriesCount(const QString& path) const
+int KFileItemModelRolesUpdater::subItemsCount(const QString& path) const
 {
     const bool countHiddenFiles = m_model->showHiddenFiles();
 {
     const bool countHiddenFiles = m_model->showHiddenFiles();
+    const bool showFoldersOnly  = m_model->showFoldersOnly();
 
 #ifdef Q_WS_WIN
     QDir dir(path);
 
 #ifdef Q_WS_WIN
     QDir dir(path);
-    QDir::Filters filters = QDir::AllEntries | QDir::NoDotAndDotDot | QDir::System;
+    QDir::Filters filters = QDir::NoDotAndDotDot | QDir::System;
     if (countHiddenFiles) {
         filters |= QDir::Hidden;
     }
     if (countHiddenFiles) {
         filters |= QDir::Hidden;
     }
+    if (showFoldersOnly) {
+        filters |= QDir::Dirs;
+    } else {
+        filters |= QDir::AllEntries;
+    }
     return dir.entryList(filters).count();
 #else
     // Taken from kdelibs/kio/kio/kdirmodel.cpp
     return dir.entryList(filters).count();
 #else
     // Taken from kdelibs/kio/kio/kdirmodel.cpp
@@ -857,7 +863,10 @@ int KFileItemModelRolesUpdater::subDirectoriesCount(const QString& path) const
                     continue;
                 }
             }
                     continue;
                 }
             }
-            ++count;
+
+            if (!showFoldersOnly || dirEntry->d_type == DT_DIR) {
+                ++count;
+            }
         }
         ::closedir(dir);
     }
         }
         ::closedir(dir);
     }
index 5ed45a6ec638c6277bbe5cdc65db15ee03955a5a..b3945d14de8bd4d5130f852fa548150a9bc24648 100644 (file)
@@ -164,7 +164,10 @@ private:
 
     KFileItemList sortedItems(const QSet<KFileItem>& items) const;
 
 
     KFileItemList sortedItems(const QSet<KFileItem>& items) const;
 
-    int subDirectoriesCount(const QString& path) const;
+    /**
+     * @return The number of items of the path \a path.
+     */
+    int subItemsCount(const QString& path) const;
 
 private:
     // Property for setPaused()/isPaused().
 
 private:
     // Property for setPaused()/isPaused().
index 86a1c0ccd6ed15c5a78b46158329195426cf48a1..d9c8f71dcbaf81999933fb51254b369dc1ee602f 100644 (file)
@@ -140,7 +140,6 @@ void FoldersPanel::showEvent(QShowEvent* event)
         // This assures that no performance and memory overhead is given when the TreeView is not
         // used at all (see FoldersPanel::setUrl()).
         m_dirLister = new KDirLister();
         // This assures that no performance and memory overhead is given when the TreeView is not
         // used at all (see FoldersPanel::setUrl()).
         m_dirLister = new KDirLister();
-        m_dirLister->setDirOnlyMode(true);
         m_dirLister->setAutoUpdate(true);
         m_dirLister->setMainWindow(window());
         m_dirLister->setDelayedMimeTypes(true);
         m_dirLister->setAutoUpdate(true);
         m_dirLister->setMainWindow(window());
         m_dirLister->setDelayedMimeTypes(true);
@@ -163,6 +162,7 @@ void FoldersPanel::showEvent(QShowEvent* event)
         view->setOpacity(0);
 
         KFileItemModel* model = new KFileItemModel(m_dirLister, this);
         view->setOpacity(0);
 
         KFileItemModel* model = new KFileItemModel(m_dirLister, this);
+        model->setShowFoldersOnly(true);
         model->setShowHiddenFiles(FoldersPanelSettings::hiddenFilesShown());
         // Use a QueuedConnection to give the view the possibility to react first on the
         // finished loading.
         model->setShowHiddenFiles(FoldersPanelSettings::hiddenFilesShown());
         // Use a QueuedConnection to give the view the possibility to react first on the
         // finished loading.