setCurrentItem(m_currentItem + inc);
}
+ // Update the anchor item
+ if (m_anchorItem < 0) {
+ setAnchorItem(0);
+ } else {
+ int inc = 0;
+ foreach (const KItemRange& itemRange, itemRanges) {
+ if (m_anchorItem < itemRange.index) {
+ break;
+ }
+ inc += itemRange.count;
+ }
+ setAnchorItem(m_anchorItem + inc);
+ }
+
// Update the selections
if (!m_selectedItems.isEmpty()) {
const QSet<int> previous = m_selectedItems;
setCurrentItem(currentItem);
}
+ // Update the anchor item
+ if (m_anchorItem >= 0) {
+ int anchorItem = m_anchorItem;
+ foreach (const KItemRange& itemRange, itemRanges) {
+ if (anchorItem < itemRange.index) {
+ break;
+ }
+ if (anchorItem >= itemRange.index + itemRange.count) {
+ anchorItem -= itemRange.count;
+ } else if (anchorItem >= m_model->count()) {
+ anchorItem = m_model->count() - 1;
+ }
+ }
+ setAnchorItem(anchorItem);
+ }
+
// Update the selections
if (!m_selectedItems.isEmpty()) {
const QSet<int> previous = m_selectedItems;
QCOMPARE(qvariant_cast<int>(spyAnchor.at(0).at(0)), 5);
QCOMPARE(qvariant_cast<int>(spyAnchor.at(0).at(1)), 3);
spyAnchor.takeFirst();
+
+ // Inserting items should update current item and anchor item.
+ m_selectionManager->itemsInserted(KItemRangeList() <<
+ KItemRange(0, 1) <<
+ KItemRange(2, 2) <<
+ KItemRange(6, 3));
+
+ QCOMPARE(m_selectionManager->currentItem(), 5);
+ QCOMPARE(spyCurrent.count(), 1);
+ QCOMPARE(qvariant_cast<int>(spyCurrent.at(0).at(0)), 5);
+ QCOMPARE(qvariant_cast<int>(spyCurrent.at(0).at(1)), 2);
+ spyCurrent.takeFirst();
+
+ QCOMPARE(m_selectionManager->anchorItem(), 8);
+ QCOMPARE(spyAnchor.count(), 1);
+ QCOMPARE(qvariant_cast<int>(spyAnchor.at(0).at(0)), 8);
+ QCOMPARE(qvariant_cast<int>(spyAnchor.at(0).at(1)), 5);
+ spyAnchor.takeFirst();
+
+ // Removing items should update current item and anchor item.
+ m_selectionManager->itemsRemoved(KItemRangeList() <<
+ KItemRange(0, 2) <<
+ KItemRange(2, 1) <<
+ KItemRange(9, 2));
+
+ QCOMPARE(m_selectionManager->currentItem(), 2);
+ QCOMPARE(spyCurrent.count(), 1);
+ QCOMPARE(qvariant_cast<int>(spyCurrent.at(0).at(0)), 2);
+ QCOMPARE(qvariant_cast<int>(spyCurrent.at(0).at(1)), 5);
+ spyCurrent.takeFirst();
+
+ QCOMPARE(m_selectionManager->anchorItem(), 5);
+ QCOMPARE(spyAnchor.count(), 1);
+ QCOMPARE(qvariant_cast<int>(spyAnchor.at(0).at(0)), 5);
+ QCOMPARE(qvariant_cast<int>(spyAnchor.at(0).at(1)), 8);
+ spyAnchor.takeFirst();
}
void KItemListSelectionManagerTest::testSetSelected_data()