]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.cpp
temporary disable the ScrollPerPixel feature until a Qt-patch is supplied which fixes...
[dolphin.git] / src / dolphinview.cpp
index ab413f765e9a60796610f5a8644e83b8514ce4c4..e0a3df51e6ebc4251d5206f1261205bd2a3e71ef 100644 (file)
@@ -71,8 +71,7 @@ DolphinView::DolphinView(QWidget* parent,
     m_fileItemDelegate(0),
     m_dolphinModel(dolphinModel),
     m_dirLister(dirLister),
-    m_proxyModel(proxyModel),
-    m_rootUrl(url)
+    m_proxyModel(proxyModel)
 {
     setFocusPolicy(Qt::StrongFocus);
     m_topLayout = new QVBoxLayout(this);
@@ -122,11 +121,6 @@ const KUrl& DolphinView::url() const
     return m_controller->url();
 }
 
-void DolphinView::setRootUrl(const KUrl& url)
-{
-    m_rootUrl = url;
-}
-
 KUrl DolphinView::rootUrl() const
 {
     return isColumnViewActive() ? m_dirLister->url() : url();
@@ -225,7 +219,17 @@ bool DolphinView::showHiddenFiles() const
 
 void DolphinView::setCategorizedSorting(bool categorized)
 {
-    if (!supportsCategorizedSorting() || (categorized == categorizedSorting())) {
+    if (categorized == categorizedSorting()) {
+        return;
+    }
+
+    if (!categorized && !supportsCategorizedSorting())
+    {
+        m_proxyModel->setCategorizedModel(categorized);
+        m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder());
+
+        emit categorizedSortingChanged();
+
         return;
     }
 
@@ -258,15 +262,24 @@ void DolphinView::selectAll()
 
 void DolphinView::invertSelection()
 {
-    QItemSelectionModel* selectionModel = itemView()->selectionModel();
-    const QAbstractItemModel* itemModel = selectionModel->model();
+    if (isColumnViewActive()) {
+        // QAbstractItemView does not offer a virtual method invertSelection()
+        // as counterpart to QAbstractItemView::selectAll(). This makes it
+        // necessary to delegate the inverting of the selection to the
+        // column view, as only the selection of the active column should get
+        // inverted.
+        m_columnView->invertSelection();
+    } else {
+        QItemSelectionModel* selectionModel = itemView()->selectionModel();
+        const QAbstractItemModel* itemModel = selectionModel->model();
 
-    const QModelIndex topLeft = itemModel->index(0, 0);
-    const QModelIndex bottomRight = itemModel->index(itemModel->rowCount() - 1,
-                                                     itemModel->columnCount() - 1);
+        const QModelIndex topLeft = itemModel->index(0, 0);
+        const QModelIndex bottomRight = itemModel->index(itemModel->rowCount() - 1,
+                                                         itemModel->columnCount() - 1);
 
-    QItemSelection selection(topLeft, bottomRight);
-    selectionModel->select(selection, QItemSelectionModel::Toggle);
+        const QItemSelection selection(topLeft, bottomRight);
+        selectionModel->select(selection, QItemSelectionModel::Toggle);
+    }
 }
 
 bool DolphinView::hasSelection() const
@@ -414,22 +427,22 @@ void DolphinView::refresh()
     updateViewportColor();
 }
 
-void DolphinView::setUrl(const KUrl& url)
+void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl)
 {
     if (m_controller->url() == url) {
         return;
     }
 
-    const KUrl oldRootUrl = rootUrl();
+    const bool restoreColumnView =  !rootUrl.isEmpty()
+                                    && !rootUrl.equals(url, KUrl::CompareWithoutTrailingSlash)
+                                    && rootUrl.isParentOf(url);
+
     m_controller->setUrl(url); // emits urlChanged, which we forward
 
-    const bool restoreColumnView = !isColumnViewActive()
-                                   && m_rootUrl.isParentOf(url)
-                                   && (m_rootUrl != url);
     if (restoreColumnView) {
-        applyViewProperties(m_rootUrl);
-        startDirLister(m_rootUrl);
+        applyViewProperties(rootUrl);
         Q_ASSERT(itemView() == m_columnView);
+        startDirLister(rootUrl);
         m_columnView->showColumn(url);
     } else {
         applyViewProperties(url);
@@ -438,10 +451,12 @@ void DolphinView::setUrl(const KUrl& url)
 
     itemView()->setFocus();
 
-    const KUrl newRootUrl = rootUrl();
-    if (newRootUrl != oldRootUrl) {
-        emit rootUrlChanged(newRootUrl);
-    }
+    emit startedPathLoading(url);
+}
+
+void DolphinView::setUrl(const KUrl& url)
+{
+    updateView(url, KUrl());
 }
 
 void DolphinView::mouseReleaseEvent(QMouseEvent* event)
@@ -789,20 +804,27 @@ void DolphinView::createView()
 
     // ... and recreate it representing the current mode
     switch (m_mode) {
-    case IconsView:
+    case IconsView: {
+        const KUrl viewPropsUrl = viewPropertiesUrl();
+        const ViewProperties props(viewPropsUrl);
+
         m_iconsView = new DolphinIconsView(this, m_controller);
         m_iconsView->setCategoryDrawer(new DolphinCategoryDrawer());
         view = m_iconsView;
+        setCategorizedSorting(props.categorizedSorting());
         break;
+    }
 
     case DetailsView:
         m_detailsView = new DolphinDetailsView(this, m_controller);
         view = m_detailsView;
+        setCategorizedSorting(false);
         break;
 
     case ColumnView:
         m_columnView = new DolphinColumnView(this, m_controller);
         view = m_columnView;
+        setCategorizedSorting(false);
         break;
     }