]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Two small selection improvements in DolphinView
authorFrank Reininghaus <frank78ac@googlemail.com>
Sun, 14 Aug 2011 09:05:19 +0000 (11:05 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Sun, 14 Aug 2011 09:05:19 +0000 (11:05 +0200)
1. Implement DolphinView::clearSelection().
2. Simplify DolphinView::invertSelection().
   I found, fixed, and unit-tested a bug in the selection
   manager which was uncovered by this change.

src/kitemviews/kitemlistselectionmanager.cpp
src/tests/kitemlistselectionmanagertest.cpp
src/views/dolphinview.cpp

index a03e8172c0832d4600f15c02028e5d8888114976..9aaf22f5853fbff4d37cdb724706ea3c8f0ac390 100644 (file)
@@ -104,6 +104,7 @@ void KItemListSelectionManager::setSelected(int index, int count, SelectionMode
         return;
     }
 
+    endAnchoredSelection();
     const QSet<int> previous = selectedItems();
 
     count = qMin(count, m_model->count() - index);
index 7f79332a396692ef1065c67f18e1aaf408aa956f..5a3ffd55c71247378a362cd80581559157b550a2 100644 (file)
@@ -315,7 +315,8 @@ namespace {
         NoChange,
         InsertItems,
         RemoveItems,
-        EndAnchoredSelection
+        EndAnchoredSelection,
+        ToggleSelected
     };
 }
 
@@ -360,6 +361,13 @@ void KItemListSelectionManagerTest::testChangeSelection_data()
         << QSet<int>()
         << EndAnchoredSelection << KItemRangeList()
         << QSet<int>();
+
+    QTest::newRow("Toggle selection")
+        << (QSet<int>() << 1 << 3 << 4)
+        << 6 << 8
+        << (QSet<int>() << 1 << 3 << 4 << 6 << 7 << 8)
+        << ToggleSelected << (KItemRangeList() << KItemRange(0, 10))
+        << (QSet<int>() << 0 << 2 << 5 << 9);
 }
 
 void KItemListSelectionManagerTest::testChangeSelection()
@@ -423,6 +431,11 @@ void KItemListSelectionManagerTest::testChangeSelection()
         m_selectionManager->endAnchoredSelection();
         QVERIFY(!m_selectionManager->isAnchoredSelectionActive());
         break;
+    case ToggleSelected:
+        foreach(const KItemRange& range, changedItems) {
+            m_selectionManager->setSelected(range.index, range.count, KItemListSelectionManager::Toggle);
+        }
+        break;
     case NoChange:
         break;
     }
index f429529de131406b0f01197f95a58db3ab8c8378..de54b9bb6435413bf28b84ba116ad08a45a96f85 100644 (file)
@@ -529,23 +529,13 @@ void DolphinView::selectAll()
 
 void DolphinView::invertSelection()
 {
-     KItemListSelectionManager* selectionManager = m_container->controller()->selectionManager();
-     const QSet<int> selectedItems = selectionManager->selectedItems();
-     QSet<int> invertedSelectedItems;
-
-     const int maxIndex = fileItemModel()->count() - 1;
-     for (int i = 0; i <= maxIndex; ++i) {
-         if (!selectedItems.contains(i)) {
-             invertedSelectedItems.insert(i);
-         }
-     }
-
-     selectionManager->setSelectedItems(invertedSelectedItems);
+    KItemListSelectionManager* selectionManager = m_container->controller()->selectionManager();
+    selectionManager->setSelected(0, fileItemModel()->count(), KItemListSelectionManager::Toggle);
 }
 
 void DolphinView::clearSelection()
 {
-    //m_viewAccessor.itemView()->clearSelection();
+    m_container->controller()->selectionManager()->clearSelection();
 }
 
 void DolphinView::renameSelectedItems()