[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/apps/plasma/applets/folderview
From:       Fredrik Höglund <fredrik () kde ! org>
Date:       2008-09-19 1:12:54
Message-ID: 1221786774.001981.16899.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 862490 by fredrik:

Add a menu option for sorting directories first (enabled by default).

 M  +23 -1     folderview.cpp  
 M  +2 -0      folderview.h  
 M  +19 -6     proxymodel.cpp  
 M  +9 -5      proxymodel.h  


--- trunk/KDE/kdebase/apps/plasma/applets/folderview/folderview.cpp #862489:862490
@@ -295,7 +295,9 @@
     m_filterFilesMimeList = cg.readEntry("mimeFilter", QStringList());
     m_model->setMimeTypeFilterList(m_filterFilesMimeList);
 
+    m_sortDirsFirst = cg.readEntry("sortDirsFirst", true);
     m_sortColumn = cg.readEntry("sortColumn", int(KDirModel::Name));
+    m_model->setSortDirectoriesFirst(m_sortDirsFirst);
     m_model->sort(m_sortColumn != -1 ? m_sortColumn : KDirModel::Name, Qt::AscendingOrder);
 
     KDirLister *lister = new KDirLister(this);
@@ -1246,11 +1248,18 @@
         sortByType->setCheckable(true);
         sortByDate->setCheckable(true);
 
+        KAction *dirsFirst = new KAction(i18nc("Sort icons", "Directories First"), this);
+        dirsFirst->setCheckable(true);
+        dirsFirst->setChecked(m_sortDirsFirst);
+        connect(dirsFirst, SIGNAL(toggled(bool)), SLOT(toggleDirectoriesFirst(bool)));
+
         QMenu *sortMenu = new QMenu(i18n("Sort Icons"));
         sortMenu->addAction(sortByName);
         sortMenu->addAction(sortBySize);
         sortMenu->addAction(sortByType);
         sortMenu->addAction(sortByDate);
+        sortMenu->addSeparator();
+        sortMenu->addAction(dirsFirst);
 
         QMenu *iconsMenu = new QMenu;
         iconsMenu->addMenu(sortMenu);
@@ -1429,6 +1438,19 @@
     emit configNeedsSaving();
 }
 
+void FolderView::toggleDirectoriesFirst(bool enable)
+{
+    m_sortDirsFirst = enable;
+
+    m_model->setSortDirectoriesFirst(m_sortDirsFirst);
+    if (m_sortColumn != -1) {
+        m_model->invalidate();
+    }
+
+    config().writeEntry("sortDirsFirst", m_sortDirsFirst);
+    emit configNeedsSaving();
+}
+
 void FolderView::sortingChanged(QAction *action)
 {
     int column = KDirModel::Name;
@@ -1444,9 +1466,9 @@
     }
 
     if (column != m_sortColumn) {
+        m_model->invalidate();
         m_model->sort(column, Qt::AscendingOrder);
         m_sortColumn = column;
-        m_layoutValid = false;
         m_layoutBroken = false;
         config().writeEntry("sortColumn", m_sortColumn);
         emit configNeedsSaving();
--- trunk/KDE/kdebase/apps/plasma/applets/folderview/folderview.h #862489:862490
@@ -100,6 +100,7 @@
     void undoTextChanged(const QString &text);
     void toggleIconsLocked(bool locked);
     void toggleAlignToGrid(bool align);
+    void toggleDirectoriesFirst(bool enable);
     void sortingChanged(QAction *action);
 
     void commitData(QWidget *editor);
@@ -190,6 +191,7 @@
     bool m_dragInProgress;
     bool m_iconsLocked;
     bool m_alignToGrid;
+    bool m_sortDirsFirst;
     QString m_customLabel;
     int m_customIconSize;
     QListView::Flow m_flow;
--- trunk/KDE/kdebase/apps/plasma/applets/folderview/proxymodel.cpp #862489:862490
@@ -25,7 +25,7 @@
 
 
 ProxyModel::ProxyModel(QObject *parent)
-    : QSortFilterProxyModel(parent)
+    : QSortFilterProxyModel(parent), m_sortDirsFirst(true)  
 {
 }
 
@@ -55,6 +55,16 @@
     return m_mimeList;
 }
 
+void ProxyModel::setSortDirectoriesFirst(bool enable)
+{
+    m_sortDirsFirst = enable;
+}
+
+bool ProxyModel::sortDirectoriesFirst() const
+{
+    return m_sortDirsFirst;
+}
+
 QModelIndex ProxyModel::indexForUrl(const KUrl &url) const
 {
     const KDirModel *dirModel = static_cast<KDirModel*>(sourceModel());
@@ -74,12 +84,15 @@
     const KFileItem item2 = dirModel->itemForIndex(right);
 
     // Sort directories first
-    if (item1.isDir() && !item2.isDir())
-        return true;
+    if (m_sortDirsFirst) {
+        if (item1.isDir() && !item2.isDir()) {
+            return true;
+        }
+        if (!item1.isDir() && item2.isDir()) {
+            return false;
+        }
+    }
 
-    if (!item1.isDir() && item2.isDir())
-        return false;
-
     const QString name1 = dirModel->data(left).toString();
     const QString name2 = dirModel->data(right).toString();
 
--- trunk/KDE/kdebase/apps/plasma/applets/folderview/proxymodel.h #862489:862490
@@ -37,25 +37,29 @@
 
     ProxyModel(QObject *parent = 0);
     ~ProxyModel();
-    
+
     void setFilterMode(FilterMode filterMode);
     FilterMode filterMode() const;
-    
+
     void setMimeTypeFilterList(const QStringList &mimeList);
     const QStringList &mimeTypeFilterList() const;
-    
+
+    void setSortDirectoriesFirst(bool enable);
+    bool sortDirectoriesFirst() const;
+
     QModelIndex indexForUrl(const KUrl &url) const;
     KFileItem itemForIndex(const QModelIndex &index) const;
     bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
-    
+
     static FilterMode filterModeFromInt(int filterMode);
 
 protected:
     bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
-    
+
 private:
     FilterMode m_filterMode;
     QStringList m_mimeList;
+    bool m_sortDirsFirst;
 };
 
 #endif
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic