]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/dolphinview.cpp
Implement smooth-scrolling for horizontal and vertical scrollbars
[dolphin.git] / src / views / dolphinview.cpp
index 11fe17ac56f4f23b7a0bbff0d66fe1135918a890..a82008d25954e4289cd4dc59c4af0cf146c00bab 100644 (file)
@@ -90,10 +90,10 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
     m_container(0),
     m_toolTipManager(0),
     m_selectionChangedTimer(0),
-    m_currentItemIndex(-1),
+    m_currentItemUrl(),
     m_restoredContentsPosition(),
     m_createdItemUrl(),
-    m_selectedItems(),
+    m_selectedUrls(),
     m_versionControlObserver(0)
 {
     m_topLayout = new QVBoxLayout(this);
@@ -163,9 +163,7 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
     connect(m_dirLister, SIGNAL(itemsDeleted(KFileItemList)), this, SIGNAL(itemCountChanged()));
 
     m_container = new DolphinItemListContainer(m_dirLister, this);
-    QHash<QByteArray, int> visibleRoles;
-    visibleRoles.insert("name", 0);
-    m_container->setVisibleRoles(visibleRoles);
+    m_container->setVisibleRoles(QList<QByteArray>() << "name");
 
     KItemListController* controller = m_container->controller();
     controller->setSelectionBehavior(KItemListController::MultiSelection);
@@ -309,10 +307,7 @@ int DolphinView::selectedItemsCount() const
 
 void DolphinView::markUrlsAsSelected(const QList<KUrl>& urls)
 {
-    foreach (const KUrl& url, urls) {
-        KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url);
-        m_selectedItems.append(item);
-    }
+    m_selectedUrls = urls;
 }
 
 void DolphinView::setItemSelectionEnabled(const QRegExp& pattern, bool enabled)
@@ -371,7 +366,8 @@ void DolphinView::setSortOrder(Qt::SortOrder order)
 
 Qt::SortOrder DolphinView::sortOrder() const
 {
-    return Qt::AscendingOrder; // m_viewAccessor.proxyModel()->sortOrder();
+    KItemModelBase* model = fileItemModel();
+    return model->sortOrder();
 }
 
 void DolphinView::setSortFoldersFirst(bool foldersFirst)
@@ -383,7 +379,8 @@ void DolphinView::setSortFoldersFirst(bool foldersFirst)
 
 bool DolphinView::sortFoldersFirst() const
 {
-    return true; // m_viewAccessor.proxyModel()->sortFoldersFirst();
+    KFileItemModel* model = fileItemModel();
+    return model->sortFoldersFirst();
 }
 
 void DolphinView::setAdditionalInfoList(const QList<AdditionalInfo>& info)
@@ -409,7 +406,10 @@ void DolphinView::reload()
     QByteArray viewState;
     QDataStream saveStream(&viewState, QIODevice::WriteOnly);
     saveState(saveStream);
-    m_selectedItems= selectedItems();
+
+    const KFileItemList itemList = selectedItems();
+    m_selectedUrls.clear();
+    m_selectedUrls = itemList.urlList();
 
     setUrl(url());
     loadDirectory(url(), true);
@@ -666,7 +666,9 @@ void DolphinView::setHiddenFilesShown(bool show)
         return;
     }
 
-    m_selectedItems = selectedItems();
+    const KFileItemList itemList = selectedItems();
+    m_selectedUrls.clear();
+    m_selectedUrls = itemList.urlList();
 
     ViewProperties props(url());
     props.setHiddenFilesShown(show);
@@ -717,8 +719,10 @@ void DolphinView::wheelEvent(QWheelEvent* event)
         const int numSteps = numDegrees / 15;
 
         setZoomLevel(zoomLevel() + numSteps);
+        event->accept();
+    } else {
+        event->ignore();
     }
-    event->accept();
 }
 
 void DolphinView::activate()
@@ -885,7 +889,8 @@ void DolphinView::updateSortOrder(Qt::SortOrder order)
     ViewProperties props(url());
     props.setSortOrder(order);
 
-    //m_viewAccessor.proxyModel()->setSortOrder(order);
+    KItemModelBase* model = fileItemModel();
+    model->setSortOrder(order);
 
     emit sortOrderChanged(order);
 }
@@ -895,7 +900,8 @@ void DolphinView::updateSortFoldersFirst(bool foldersFirst)
     ViewProperties props(url());
     props.setSortFoldersFirst(foldersFirst);
 
-    //m_viewAccessor.proxyModel()->setSortFoldersFirst(foldersFirst);
+    KFileItemModel* model = fileItemModel();
+    model->setSortFoldersFirst(foldersFirst);
 
     emit sortFoldersFirstChanged(foldersFirst);
 }
@@ -923,7 +929,7 @@ bool DolphinView::itemsExpandable() const
 void DolphinView::restoreState(QDataStream& stream)
 {
     // Restore the current item that had the keyboard focus
-    stream >> m_currentItemIndex;
+    stream >> m_currentItemUrl;
 
     // Restore the view position
     stream >> m_restoredContentsPosition;
@@ -937,7 +943,14 @@ void DolphinView::restoreState(QDataStream& stream)
 void DolphinView::saveState(QDataStream& stream)
 {
     // Save the current item that has the keyboard focus
-    stream << m_container->controller()->selectionManager()->currentItem();
+    const int currentIndex = m_container->controller()->selectionManager()->currentItem();
+    if (currentIndex != -1) {
+        KFileItem item = fileItemModel()->fileItem(currentIndex);
+        KUrl currentItemUrl = item.url();
+        stream << currentItemUrl;
+    } else {
+        stream << KUrl();
+    }
 
     // Save view position
     const qreal x = m_container->horizontalScrollBar()->value();
@@ -991,10 +1004,15 @@ void DolphinView::slotRedirection(const KUrl& oldUrl, const KUrl& newUrl)
 
 void DolphinView::updateViewState()
 {
-    if (m_currentItemIndex >= 0) {
+    if (m_currentItemUrl != KUrl()) {
         KItemListSelectionManager* selectionManager = m_container->controller()->selectionManager();
-        selectionManager->setCurrentItem(m_currentItemIndex);
-        m_currentItemIndex =-1;
+        const int currentIndex = fileItemModel()->index(m_currentItemUrl);
+        if (currentIndex != -1) {
+            selectionManager->setCurrentItem(currentIndex);
+        } else {
+            selectionManager->setCurrentItem(0);
+        }
+        m_currentItemUrl = KUrl();
     }
 
     if (!m_restoredContentsPosition.isNull()) {
@@ -1006,20 +1024,20 @@ void DolphinView::updateViewState()
         m_container->verticalScrollBar()->setValue(y);
     }
 
-    if (!m_selectedItems.isEmpty()) {
+    if (!m_selectedUrls.isEmpty()) {
         KItemListSelectionManager* selectionManager = m_container->controller()->selectionManager();
         QSet<int> selectedItems = selectionManager->selectedItems();
         const KFileItemModel* model = fileItemModel();
 
-        foreach (const KFileItem& selectedItem, m_selectedItems) {
-            const int index = model->index(selectedItem);
+        foreach (const KUrl& url, m_selectedUrls) {
+            const int index = model->index(url);
             if (index >= 0) {
                 selectedItems.insert(index);
             }
         }
 
         selectionManager->setSelectedItems(selectedItems);
-        m_selectedItems.clear();
+        m_selectedUrls.clear();
     }
 }
 
@@ -1143,25 +1161,25 @@ void DolphinView::applyViewProperties()
     }*/
 
     const DolphinView::Sorting sorting = props.sorting();
-    KItemModelBase* model = m_container->controller()->model();
+    KFileItemModel* model = fileItemModel();
     const QByteArray newSortRole = sortRoleForSorting(sorting);
     if (newSortRole != model->sortRole()) {
         model->setSortRole(newSortRole);
         emit sortingChanged(sorting);
     }
-/*
+
     const Qt::SortOrder sortOrder = props.sortOrder();
-    if (sortOrder != m_viewAccessor.proxyModel()->sortOrder()) {
-        m_viewAccessor.proxyModel()->setSortOrder(sortOrder);
+    if (sortOrder != model->sortOrder()) {
+        model->setSortOrder(sortOrder);
         emit sortOrderChanged(sortOrder);
     }
 
     const bool sortFoldersFirst = props.sortFoldersFirst();
-    if (sortFoldersFirst != m_viewAccessor.proxyModel()->sortFoldersFirst()) {
-        m_viewAccessor.proxyModel()->setSortFoldersFirst(sortFoldersFirst);
+    if (sortFoldersFirst != model->sortFoldersFirst()) {
+        model->setSortFoldersFirst(sortFoldersFirst);
         emit sortFoldersFirstChanged(sortFoldersFirst);
     }
-*/
+
     const QList<DolphinView::AdditionalInfo> infoList = props.additionalInfoList();
     if (infoList != m_additionalInfoList) {
         const QList<DolphinView::AdditionalInfo> previousList = m_additionalInfoList;
@@ -1190,13 +1208,12 @@ void DolphinView::applyAdditionalInfoListToView()
 {
     const AdditionalInfoAccessor& infoAccessor = AdditionalInfoAccessor::instance();
 
-    QHash<QByteArray, int> visibleRoles;
-    visibleRoles.insert("name", 0);
+    QList<QByteArray> visibleRoles;
+    visibleRoles.reserve(m_additionalInfoList.count() + 1);
+    visibleRoles.append("name");
 
-    int index = 1;
     foreach (AdditionalInfo info, m_additionalInfoList) {
-        visibleRoles.insert(infoAccessor.role(info), index);
-        ++index;
+        visibleRoles.append(infoAccessor.role(info));
     }
 
     m_container->setVisibleRoles(visibleRoles);
@@ -1300,4 +1317,9 @@ DolphinView::Sorting DolphinView::sortingForSortRole(const QByteArray& sortRole)
     return sortHash.value(sortRole);
 }
 
+void DolphinView::markUrlAsCurrent(const KUrl& url)
+{
+    m_currentItemUrl = url;
+}
+
 #include "dolphinview.moc"