]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/dolphinview.cpp
Folders Panel cleanups
[dolphin.git] / src / views / dolphinview.cpp
index 578b93a2b6b85e112fded8b7e401cfbe7c81ebeb..7a390356129a42b782ca22a9830b1801e9e94f43 100644 (file)
@@ -135,13 +135,15 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
 
     KItemListController* controller = m_container->controller();
     controller->setSelectionBehavior(KItemListController::MultiSelection);
-    connect(controller, SIGNAL(itemActivated(int)),
-            this, SLOT(slotItemActivated(int)));
+    if (GeneralSettings::autoExpandFolders()) {
+        controller->setAutoActivationDelay(750);
+    }
+    connect(controller, SIGNAL(itemActivated(int)), this, SLOT(slotItemActivated(int)));
+    connect(controller, SIGNAL(itemsActivated(QSet<int>)), this, SLOT(slotItemsActivated(QSet<int>)));
     connect(controller, SIGNAL(itemMiddleClicked(int)), this, SLOT(slotItemMiddleClicked(int)));
     connect(controller, SIGNAL(itemContextMenuRequested(int,QPointF)), this, SLOT(slotItemContextMenuRequested(int,QPointF)));
     connect(controller, SIGNAL(viewContextMenuRequested(QPointF)), this, SLOT(slotViewContextMenuRequested(QPointF)));
     connect(controller, SIGNAL(headerContextMenuRequested(QPointF)), this, SLOT(slotHeaderContextMenuRequested(QPointF)));
-    connect(controller, SIGNAL(itemExpansionToggleClicked(int)), this, SLOT(slotItemExpansionToggleClicked(int)));
     connect(controller, SIGNAL(itemHovered(int)), this, SLOT(slotItemHovered(int)));
     connect(controller, SIGNAL(itemUnhovered(int)), this, SLOT(slotItemUnhovered(int)));
     connect(controller, SIGNAL(itemDropEvent(int,QGraphicsSceneDragDropEvent*)), this, SLOT(slotItemDropEvent(int,QGraphicsSceneDragDropEvent*)));
@@ -339,7 +341,7 @@ void DolphinView::setItemSelectionEnabled(const QRegExp& pattern, bool enabled)
 
     for (int index = 0; index < model->count(); index++) {
         const KFileItem item = model->fileItem(index);
-        if (pattern.exactMatch(item.name())) {
+        if (pattern.exactMatch(item.text())) {
             // An alternative approach would be to store the matching items in a QSet<int> and
             // select them in one go after the loop, but we'd need a new function
             // KItemListSelectionManager::setSelected(QSet<int>, SelectionMode mode)
@@ -457,13 +459,12 @@ void DolphinView::refresh()
 
 void DolphinView::setNameFilter(const QString& nameFilter)
 {
-    Q_UNUSED(nameFilter);
-    //m_viewModeController->setNameFilter(nameFilter);
+    fileItemModel()->setNameFilter(nameFilter);
 }
 
 QString DolphinView::nameFilter() const
 {
-    return QString(); //m_viewModeController->nameFilter();
+    return fileItemModel()->nameFilter();
 }
 
 void DolphinView::calculateItemCount(int& fileCount,
@@ -693,22 +694,30 @@ void DolphinView::activate()
 
 void DolphinView::slotItemActivated(int index)
 {
-    Q_UNUSED(index);
+    const KFileItem item = fileItemModel()->fileItem(index);
+    if (!item.isNull()) {
+        emit itemActivated(item);
+    }
+}
 
-    const KFileItemList items = selectedItems();
-    if (items.isEmpty()) {
-        return;
+void DolphinView::slotItemsActivated(const QSet<int>& indexes)
+{
+    Q_ASSERT(indexes.count() >= 2);
+
+    KFileItemList items;
+
+    KFileItemModel* model = fileItemModel();
+    QSetIterator<int> it(indexes);
+    while (it.hasNext()) {
+        const int index = it.next();
+        items.append(model->fileItem(index));
     }
 
-    if (items.count() == 1) {
-        emit itemActivated(items.at(0)); // caught by DolphinViewContainer or DolphinPart
-    } else {
-        foreach (const KFileItem& item, items) {
-            if (item.isDir()) {
-                emit tabRequested(item.url());
-            } else {
-                emit itemActivated(item);
-            }
+    foreach (const KFileItem& item, items) {
+        if (item.isDir()) {
+            emit tabRequested(item.url());
+        } else {
+            emit itemActivated(item);
         }
     }
 }
@@ -788,17 +797,6 @@ void DolphinView::slotHeaderContextMenuRequested(const QPointF& pos)
     delete menu.data();
 }
 
-void DolphinView::slotItemExpansionToggleClicked(int index)
-{
-    // TODO: When doing a model->setExpanded(false) it should
-    // be checked here whether the current index is part of the
-    // closed sub-tree. If this is the case, the current index
-    // should be adjusted to the parent index.
-    KFileItemModel* model = fileItemModel();
-    const bool expanded = model->isExpanded(index);
-    model->setExpanded(index, !expanded);
-}
-
 void DolphinView::slotItemHovered(int index)
 {
     const KFileItem item = fileItemModel()->fileItem(index);
@@ -833,7 +831,7 @@ void DolphinView::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even
                          event->buttons(),
                          event->modifiers());
 
-    DragAndDropHelper::dropUrls(destItem, url(), &dropEvent, this);
+    DragAndDropHelper::dropUrls(destItem, url(), &dropEvent);
 }
 
 void DolphinView::slotModelChanged(KItemModelBase* current, KItemModelBase* previous)
@@ -943,7 +941,7 @@ void DolphinView::restoreState(QDataStream& stream)
     // Restore expanded folders (only relevant for the details view - will be ignored by the view in other view modes)
     QSet<KUrl> urls;
     stream >> urls;
-    fileItemModel()->setExpanded(urls);
+    fileItemModel()->restoreExpandedUrls(urls);
 }
 
 void DolphinView::saveState(QDataStream& stream)
@@ -952,6 +950,7 @@ void DolphinView::saveState(QDataStream& stream)
     const int currentIndex = m_container->controller()->selectionManager()->currentItem();
     if (currentIndex != -1) {
         KFileItem item = fileItemModel()->fileItem(currentIndex);
+        Q_ASSERT(!item.isNull()); // If the current index is valid a item must exist
         KUrl currentItemUrl = item.url();
         stream << currentItemUrl;
     } else {