]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Remember sort settings
authorPeter Penz <peter.penz19@gmail.com>
Sun, 11 Dec 2011 19:23:21 +0000 (20:23 +0100)
committerPeter Penz <peter.penz19@gmail.com>
Sun, 11 Dec 2011 19:24:38 +0000 (20:24 +0100)
If the user has changed the sort-role or sort-order by clicking on the view-header of the details-view, the settings have been adjusted to the model but not remembered in the directory settings.

src/kitemviews/kitemlistheader.cpp
src/kitemviews/kitemlistheader_p.h
src/kitemviews/kitemlistview.cpp
src/kitemviews/kitemlistview.h
src/views/dolphinview.cpp
src/views/dolphinview.h

index 96f868aade8c284209f25f57ca15a385b7af1226..7b5549c739005cf08ff6c5ab91b9f95d8432984c 100644 (file)
@@ -176,13 +176,17 @@ void KItemListHeader::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
         const int sortRoleIndex = m_visibleRoles.indexOf(sortRole);
         if (m_pressedRoleIndex == sortRoleIndex) {
             // Toggle the sort order
-            const Qt::SortOrder toggled = (m_model->sortOrder() == Qt::AscendingOrder) ?
+            const Qt::SortOrder previous = m_model->sortOrder();
+            const Qt::SortOrder current = (m_model->sortOrder() == Qt::AscendingOrder) ?
                                           Qt::DescendingOrder : Qt::AscendingOrder;
-            m_model->setSortOrder(toggled);
+            m_model->setSortOrder(current);
+            emit sortOrderChanged(current, previous);
         } else {
             // Change the sort role
-            const QByteArray sortRole = m_visibleRoles.at(m_pressedRoleIndex);
-            m_model->setSortRole(sortRole);
+            const QByteArray previous = m_model->sortRole();
+            const QByteArray current = m_visibleRoles.at(m_pressedRoleIndex);
+            m_model->setSortRole(current);
+            emit sortRoleChanged(current, previous);
         }
     }
 
index a3f06f114ac30ad19c7871f7eb8c2463ef246941..41505585ee2b4c9003d03aa4c42938820013e748 100644 (file)
@@ -60,6 +60,22 @@ signals:
                                  qreal currentWidth,
                                  qreal previousWidth);
 
+    /**
+     * Is emitted if the user has changed the sort order by clicking on a
+     * header item. The sort order of the model has already been adjusted to
+     * the current sort order. Note that no signal will be emitted if the
+     * sort order of the model has been changed without user interaction.
+     */
+    void sortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous);
+
+    /**
+     * Is emitted if the user has changed the sort role by clicking on a
+     * header item. The sort role of the model has already been adjusted to
+     * the current sort role. Note that no signal will be emitted if the
+     * sort role of the model has been changed without user interaction.
+     */
+    void sortRoleChanged(const QByteArray& current, const QByteArray& previous);
+
 protected:
     virtual void mousePressEvent(QGraphicsSceneMouseEvent* event);
     virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
index 5cf67034eda12ffbd40991e6b66b55d921b38d59..15e0340c0c5a50ec95940f1fd4597ed0dee55d1e 100644 (file)
@@ -527,10 +527,14 @@ void KItemListView::setHeaderShown(bool show)
         m_header->setVisibleRolesWidths(headerRolesWidths());
         m_header->setZValue(1);
 
-        m_useHeaderWidths = false;
-
         connect(m_header, SIGNAL(visibleRoleWidthChanged(QByteArray,qreal,qreal)),
                 this, SLOT(slotVisibleRoleWidthChanged(QByteArray,qreal,qreal)));
+        connect(m_header, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)),
+                this, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)));
+        connect(m_header, SIGNAL(sortRoleChanged(QByteArray,QByteArray)),
+                this, SIGNAL(sortRoleChanged(QByteArray,QByteArray)));
+
+        m_useHeaderWidths = false;
 
         m_layouter->setHeaderHeight(m_header->size().height());
     } else if (!show && m_header) {
index e44d557b930d72dd178dddb6c14fc97934350804..a56a8db59f60a713c41b0c6064366a0d36d26291 100644 (file)
@@ -242,6 +242,24 @@ signals:
     void maximumItemOffsetChanged(qreal current, qreal previous);
     void scrollTo(qreal newOffset);
 
+    /**
+     * Is emitted if the user has changed the sort order by clicking on a
+     * header item (see KItemListView::setHeaderShown()). The sort order
+     * of the model has already been adjusted to
+     * the current sort order. Note that no signal will be emitted if the
+     * sort order of the model has been changed without user interaction.
+     */
+    void sortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous);
+
+    /**
+     * Is emitted if the user has changed the sort role by clicking on a
+     * header item (see KItemListView::setHeaderShown()). The sort role
+     * of the model has already been adjusted to
+     * the current sort role. Note that no signal will be emitted if the
+     * sort role of the model has been changed without user interaction.
+     */
+    void sortRoleChanged(const QByteArray& current, const QByteArray& previous);
+
 protected:
     virtual void initializeItemListWidget(KItemListWidget* item);
 
index 8ec7f335df5666e77ed2e7f490b12eb89072145a..a94a41e15146e08ec53394d9ab6b1558ec4cb754 100644 (file)
@@ -154,6 +154,12 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
         connect(model, SIGNAL(loadingCompleted()), this, SLOT(slotLoadingCompleted()));
     }
 
+    KItemListView* view = controller->view();
+    connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)),
+            this, SLOT(slotSortOrderChangedByHeader(Qt::SortOrder,Qt::SortOrder)));
+    connect(view, SIGNAL(sortRoleChanged(QByteArray,QByteArray)),
+            this, SLOT(slotSortRoleChangedByHeader(QByteArray,QByteArray)));
+
     KItemListSelectionManager* selectionManager = controller->selectionManager();
     connect(selectionManager, SIGNAL(selectionChanged(QSet<int>,QSet<int>)),
             this, SLOT(slotSelectionChanged(QSet<int>,QSet<int>)));
@@ -1096,6 +1102,29 @@ void DolphinView::slotRefreshItems()
     }
 }
 
+void DolphinView::slotSortOrderChangedByHeader(Qt::SortOrder current, Qt::SortOrder previous)
+{
+    Q_UNUSED(previous);
+    Q_ASSERT(fileItemModel()->sortOrder() == current);
+
+    ViewProperties props(url());
+    props.setSortOrder(current);
+
+    emit sortOrderChanged(current);
+}
+
+void DolphinView::slotSortRoleChangedByHeader(const QByteArray& current, const QByteArray& previous)
+{
+    Q_UNUSED(previous);
+    Q_ASSERT(fileItemModel()->sortRole() == current);
+
+    ViewProperties props(url());
+    const Sorting sorting = sortingForSortRole(current);
+    props.setSorting(sorting);
+
+    emit sortingChanged(sorting);
+}
+
 KFileItemModel* DolphinView::fileItemModel() const
 {
     return static_cast<KFileItemModel*>(m_container->controller()->model());
index fa0baa61e37eb53fb8118e30c15061b4d36c7cdf..9a3a83fa302b24f368d283833d3d357199617f8a 100644 (file)
@@ -646,6 +646,18 @@ private slots:
      */
     void slotRefreshItems();
 
+    /**
+     * Is invoked when the sort order has been changed by the user by clicking
+     * on a header item. The view properties of the directory will get updated.
+     */
+    void slotSortOrderChangedByHeader(Qt::SortOrder current, Qt::SortOrder previous);
+
+    /**
+     * Is invoked when the sort role has been changed by the user by clicking
+     * on a header item. The view properties of the directory will get updated.
+     */
+    void slotSortRoleChangedByHeader(const QByteArray& current, const QByteArray& previous);
+
     /**
      * Observes the item with the URL \a url. As soon as the directory
      * model indicates that the item is available, the item will