]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/dolphinview.cpp
Interface cleanup: The DolphinView should not expose QAbstractItemView-specific thing...
[dolphin.git] / src / views / dolphinview.cpp
index 8ed0d993e5fd695f57250be2dbd5737b18bcbc6c..2c2dbc23144be83fee9f4338cfc057716cd90ce9 100644 (file)
@@ -279,18 +279,9 @@ bool DolphinView::supportsCategorizedSorting() const
     return m_viewAccessor.supportsCategorizedSorting();
 }
 
-bool DolphinView::hasSelection() const
+KFileItemList DolphinView::items() const
 {
-    const QAbstractItemView* view = m_viewAccessor.itemView();
-    return (view != 0) && view->selectionModel()->hasSelection();
-}
-
-void DolphinView::markUrlsAsSelected(const QList<KUrl>& urls)
-{
-    foreach (const KUrl& url, urls) {
-        KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url);
-        m_selectedItems.append(item);
-    }
+    return m_viewAccessor.dirLister()->items();
 }
 
 KFileItemList DolphinView::selectedItems() const
@@ -324,9 +315,21 @@ int DolphinView::selectedItemsCount() const
     return view->selectionModel()->selectedIndexes().count();
 }
 
-QItemSelectionModel* DolphinView::selectionModel() const
+void DolphinView::markUrlsAsSelected(const QList<KUrl>& urls)
+{
+    foreach (const KUrl& url, urls) {
+        KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url);
+        m_selectedItems.append(item);
+    }
+}
+
+void DolphinView::setItemSelectionEnabled(const QRegExp& pattern, bool enabled)
 {
-    return m_viewAccessor.itemView()->selectionModel();
+    const QItemSelection matchingIndexes = childrenMatchingPattern(QModelIndex(), pattern);
+    const QItemSelectionModel::SelectionFlags command = enabled
+                                                      ? QItemSelectionModel::Select
+                                                      : QItemSelectionModel::Deselect;
+    m_viewAccessor.itemView()->selectionModel()->select(matchingIndexes, command);
 }
 
 void DolphinView::setZoomLevel(int level)
@@ -948,6 +951,12 @@ void DolphinView::saveState(QDataStream& stream)
     stream << m_viewAccessor.expandedUrls();
 }
 
+bool DolphinView::hasSelection() const
+{
+    const QAbstractItemView* view = m_viewAccessor.itemView();
+    return (view != 0) && view->selectionModel()->hasSelection();
+}
+
 void DolphinView::observeCreatedItem(const KUrl& url)
 {
     m_createdItemUrl = url;
@@ -1248,6 +1257,30 @@ void DolphinView::addNewFileNames(const QMimeData* mimeData)
     }
 }
 
+QItemSelection DolphinView::childrenMatchingPattern(const QModelIndex& parent, const QRegExp& pattern) const
+{
+    QItemSelection matchingIndexes;
+    const DolphinSortFilterProxyModel* proxyModel = m_viewAccessor.proxyModel();
+    const DolphinModel* dolphinModel = m_viewAccessor.dirModel();
+
+    const int rowCount = proxyModel->rowCount(parent);
+
+    for (int row = 0; row < rowCount; ++row) {
+        QModelIndex index = proxyModel->index(row, 0, parent);
+        QModelIndex sourceIndex = proxyModel->mapToSource(index);
+
+        if (sourceIndex.isValid() && pattern.exactMatch(dolphinModel->data(sourceIndex).toString())) {
+            matchingIndexes += QItemSelectionRange(index);
+        }
+
+        if (proxyModel->hasChildren(index)) {
+            matchingIndexes += childrenMatchingPattern(index, pattern);
+        }
+    }
+
+    return matchingIndexes;
+}
+
 DolphinView::ViewAccessor::ViewAccessor(DolphinSortFilterProxyModel* proxyModel) :
     m_iconsView(0),
     m_detailsView(0),
@@ -1458,9 +1491,4 @@ void DolphinView::restoreContentsPosition()
     }
 }
 
-KFileItemList DolphinView::allItems() const
-{
-    return m_viewAccessor.dirLister()->items();
-}
-
 #include "dolphinview.moc"