]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Implement beginAnchoredSelection() and endAnchoredSelection().
authorFrank Reininghaus <frank78ac@googlemail.com>
Wed, 10 Aug 2011 13:21:26 +0000 (15:21 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Wed, 10 Aug 2011 13:21:26 +0000 (15:21 +0200)
Unit test included.

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

index 26ce1b2f70a45445f3c5755e075affade6881644..18fa2f6609a9c1b61516f8fcde24464ad928eee3 100644 (file)
@@ -1,5 +1,6 @@
 /***************************************************************************
  *   Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com>             *
 /***************************************************************************
  *   Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com>             *
+ *   Copyright (C) 2011 by Frank Reininghaus <frank78ac@googlemail.com>    *
  *                                                                         *
  *   Based on the Itemviews NG project from Trolltech Labs:                *
  *   http://qt.gitorious.org/qt-labs/itemviews-ng                          *
  *                                                                         *
  *   Based on the Itemviews NG project from Trolltech Labs:                *
  *   http://qt.gitorious.org/qt-labs/itemviews-ng                          *
@@ -149,11 +150,22 @@ void KItemListSelectionManager::clearSelection()
 
 void KItemListSelectionManager::beginAnchoredSelection(int anchor)
 {
 
 void KItemListSelectionManager::beginAnchoredSelection(int anchor)
 {
-    Q_UNUSED(anchor);
+    m_isAnchoredSelectionActive = true;
+    setAnchorItem(anchor);
 }
 
 void KItemListSelectionManager::endAnchoredSelection()
 {
 }
 
 void KItemListSelectionManager::endAnchoredSelection()
 {
+    if (m_isAnchoredSelectionActive) {
+        const int from = qMin(m_anchorItem, m_currentItem);
+        const int to = qMax(m_anchorItem, m_currentItem);
+
+        for (int index = from; index <= to; index++) {
+            m_selectedItems.insert(index);
+        }
+
+        m_isAnchoredSelectionActive = false;
+    }
 }
 
 void KItemListSelectionManager::setAnchorItem(int anchor)
 }
 
 void KItemListSelectionManager::setAnchorItem(int anchor)
index 9063b7884140db4d12c82e5c3a12bdf083becd1f..4c45fd1b80a8cb161bf3bdabbdea03ebce458cbb 100644 (file)
@@ -1,5 +1,6 @@
 /***************************************************************************
  *   Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com>             *
 /***************************************************************************
  *   Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com>             *
+ *   Copyright (C) 2011 by Frank Reininghaus <frank78ac@googlemail.com>    *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
@@ -63,6 +64,7 @@ private slots:
     void testSetSelected();
     void testItemsInserted();
     void testItemsRemoved();
     void testSetSelected();
     void testItemsInserted();
     void testItemsRemoved();
+    void testAnchoredSelection();
 
 private:
     KItemListSelectionManager* m_selectionManager;
 
 private:
     KItemListSelectionManager* m_selectionManager;
@@ -260,6 +262,47 @@ void KItemListSelectionManagerTest::testItemsRemoved()
     QVERIFY(selectedItems.contains(7));
 }
 
     QVERIFY(selectedItems.contains(7));
 }
 
+void KItemListSelectionManagerTest::testAnchoredSelection()
+{
+    m_selectionManager->beginAnchoredSelection(5);
+    QVERIFY(m_selectionManager->isAnchoredSelectionActive());
+    QCOMPARE(m_selectionManager->anchorItem(), 5);
+
+    m_selectionManager->setCurrentItem(6);
+    QCOMPARE(m_selectionManager->currentItem(), 6);
+    QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 5 << 6);
+
+    m_selectionManager->setCurrentItem(4);
+    QCOMPARE(m_selectionManager->currentItem(), 4);
+    QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 4 << 5);
+
+    m_selectionManager->setCurrentItem(7);
+    QCOMPARE(m_selectionManager->currentItem(), 7);
+    QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 5 << 6 << 7);
+
+    // Ending the anchored selection should not change the selected items.
+    m_selectionManager->endAnchoredSelection();
+    QVERIFY(!m_selectionManager->isAnchoredSelectionActive());
+    QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 5 << 6 << 7);
+
+    // Start a new anchored selection that overlaps the previous one
+    m_selectionManager->beginAnchoredSelection(9);
+    QVERIFY(m_selectionManager->isAnchoredSelectionActive());
+    QCOMPARE(m_selectionManager->anchorItem(), 9);
+
+    m_selectionManager->setCurrentItem(6);
+    QCOMPARE(m_selectionManager->currentItem(), 6);
+    QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 5 << 6 << 7 << 8 << 9);
+
+    m_selectionManager->setCurrentItem(10);
+    QCOMPARE(m_selectionManager->currentItem(), 10);
+    QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 5 << 6 << 7 << 9 << 10);
+
+    m_selectionManager->endAnchoredSelection();
+    QVERIFY(!m_selectionManager->isAnchoredSelectionActive());
+    QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 5 << 6 << 7 << 9 << 10);
+}
+
 QTEST_KDEMAIN(KItemListSelectionManagerTest, NoGUI)
 
 #include "kitemlistselectionmanagertest.moc"
 QTEST_KDEMAIN(KItemListSelectionManagerTest, NoGUI)
 
 #include "kitemlistselectionmanagertest.moc"