X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/58ab93541c70de4fa7cbb90dc3423cfec556dc38..78a38f2000d1f0df146e212479073242bc5ce24c:/src/kitemviews/kitemlistselectionmanager.cpp diff --git a/src/kitemviews/kitemlistselectionmanager.cpp b/src/kitemviews/kitemlistselectionmanager.cpp index a03e8172c..63306a3f2 100644 --- a/src/kitemviews/kitemlistselectionmanager.cpp +++ b/src/kitemviews/kitemlistselectionmanager.cpp @@ -81,11 +81,13 @@ QSet KItemListSelectionManager::selectedItems() const { QSet selectedItems = m_selectedItems; - if (m_isAnchoredSelectionActive && (m_anchorItem != m_currentItem)) { + if (m_isAnchoredSelectionActive && m_anchorItem != m_currentItem) { + Q_ASSERT(m_anchorItem >= 0); + Q_ASSERT(m_currentItem >= 0); const int from = qMin(m_anchorItem, m_currentItem); const int to = qMax(m_anchorItem, m_currentItem); - for (int index = from; index <= to; index++) { + for (int index = from; index <= to; ++index) { selectedItems.insert(index); } } @@ -95,7 +97,7 @@ QSet KItemListSelectionManager::selectedItems() const bool KItemListSelectionManager::hasSelection() const { - return !m_selectedItems.isEmpty() || (m_isAnchoredSelectionActive && (m_anchorItem != m_currentItem)); + return !m_selectedItems.isEmpty() || (m_isAnchoredSelectionActive && m_anchorItem != m_currentItem); } void KItemListSelectionManager::setSelected(int index, int count, SelectionMode mode) @@ -104,6 +106,7 @@ void KItemListSelectionManager::setSelected(int index, int count, SelectionMode return; } + endAnchoredSelection(); const QSet previous = selectedItems(); count = qMin(count, m_model->count() - index); @@ -155,17 +158,21 @@ void KItemListSelectionManager::clearSelection() void KItemListSelectionManager::beginAnchoredSelection(int anchor) { - m_isAnchoredSelectionActive = true; - setAnchorItem(anchor); + if (anchor >= 0 && m_model && anchor < m_model->count()) { + m_isAnchoredSelectionActive = true; + m_anchorItem = anchor; + } } void KItemListSelectionManager::endAnchoredSelection() { if (m_isAnchoredSelectionActive && (m_anchorItem != m_currentItem)) { + Q_ASSERT(m_anchorItem >= 0); + Q_ASSERT(m_currentItem >= 0); const int from = qMin(m_anchorItem, m_currentItem); const int to = qMax(m_anchorItem, m_currentItem); - for (int index = from; index <= to; index++) { + for (int index = from; index <= to; ++index) { m_selectedItems.insert(index); } } @@ -173,35 +180,11 @@ void KItemListSelectionManager::endAnchoredSelection() m_isAnchoredSelectionActive = false; } -void KItemListSelectionManager::setAnchorItem(int anchor) -{ - const int previous = m_anchorItem; - if (m_model && anchor < m_model->count()) { - m_anchorItem = anchor; - } else { - m_anchorItem = -1; - } - - if (m_anchorItem != previous) { - emit anchorChanged(m_anchorItem, previous); - } -} - -int KItemListSelectionManager::anchorItem() const -{ - return m_anchorItem; -} - bool KItemListSelectionManager::isAnchoredSelectionActive() const { return m_isAnchoredSelectionActive; } -void KItemListSelectionManager::setAnchoredSelectionActive(bool active) -{ - m_isAnchoredSelectionActive = active; -} - KItemModelBase* KItemListSelectionManager::model() const { return m_model; @@ -240,9 +223,8 @@ void KItemListSelectionManager::itemsInserted(const KItemRangeList& itemRanges) // Update the anchor item if (m_anchorItem < 0) { - setAnchorItem(0); + m_anchorItem = 0; } else { - const int previousAnchor = m_anchorItem; int inc = 0; foreach (const KItemRange& itemRange, itemRanges) { if (m_anchorItem < itemRange.index) { @@ -251,7 +233,6 @@ void KItemListSelectionManager::itemsInserted(const KItemRangeList& itemRanges) inc += itemRange.count; } m_anchorItem += inc; - emit anchorChanged(m_anchorItem, previousAnchor); } // Update the selections @@ -305,7 +286,6 @@ void KItemListSelectionManager::itemsRemoved(const KItemRangeList& itemRanges) // Update the anchor item if (m_anchorItem >= 0) { - const int previousAnchor = m_anchorItem; int anchorItem = m_anchorItem; foreach (const KItemRange& itemRange, itemRanges) { if (anchorItem < itemRange.index) { @@ -318,7 +298,9 @@ void KItemListSelectionManager::itemsRemoved(const KItemRangeList& itemRanges) } } m_anchorItem = anchorItem; - emit anchorChanged(m_anchorItem, previousAnchor); + if (m_anchorItem < 0) { + m_isAnchoredSelectionActive = false; + } } // Update the selections