#include "kitemlistselectionmanager.h"
#include "kitemmodelbase.h"
-#include <KDebug>
KItemListSelectionManager::KItemListSelectionManager(QObject* parent) :
QObject(parent),
void KItemListSelectionManager::setCurrentItem(int current)
{
const int previous = m_currentItem;
- const QSet<int> previousSelection = selectedItems();
+ const KItemSet previousSelection = selectedItems();
if (m_model && current >= 0 && current < m_model->count()) {
m_currentItem = current;
emit currentChanged(m_currentItem, previous);
if (m_isAnchoredSelectionActive) {
- const QSet<int> selection = selectedItems();
+ const KItemSet selection = selectedItems();
if (selection != previousSelection) {
emit selectionChanged(selection, previousSelection);
}
return m_currentItem;
}
-void KItemListSelectionManager::setSelectedItems(const QSet<int>& items)
+void KItemListSelectionManager::setSelectedItems(const KItemSet& items)
{
if (m_selectedItems != items) {
- const QSet<int> previous = m_selectedItems;
+ const KItemSet previous = m_selectedItems;
m_selectedItems = items;
emit selectionChanged(m_selectedItems, previous);
}
}
-QSet<int> KItemListSelectionManager::selectedItems() const
+KItemSet KItemListSelectionManager::selectedItems() const
{
- QSet<int> selectedItems = m_selectedItems;
+ KItemSet selectedItems = m_selectedItems;
if (m_isAnchoredSelectionActive && m_anchorItem != m_currentItem) {
Q_ASSERT(m_anchorItem >= 0);
}
endAnchoredSelection();
- const QSet<int> previous = selectedItems();
+ const KItemSet previous = selectedItems();
count = qMin(count, m_model->count() - index);
break;
}
- const QSet<int> selection = selectedItems();
+ const KItemSet selection = selectedItems();
if (selection != previous) {
emit selectionChanged(selection, previous);
}
void KItemListSelectionManager::clearSelection()
{
- const QSet<int> previous = selectedItems();
+ const KItemSet previous = selectedItems();
if (!previous.isEmpty()) {
m_selectedItems.clear();
m_isAnchoredSelectionActive = false;
- emit selectionChanged(QSet<int>(), previous);
+ emit selectionChanged(KItemSet(), previous);
}
}
void KItemListSelectionManager::itemsInserted(const KItemRangeList& itemRanges)
{
// Store the current selection (needed in the selectionChanged() signal)
- const QSet<int> previousSelection = selectedItems();
+ const KItemSet previousSelection = selectedItems();
// Update the current item
if (m_currentItem < 0) {
// Update the selections
if (!m_selectedItems.isEmpty()) {
- const QSet<int> previous = m_selectedItems;
+ const KItemSet previous = m_selectedItems;
m_selectedItems.clear();
- m_selectedItems.reserve(previous.count());
- QSetIterator<int> it(previous);
- while (it.hasNext()) {
- const int index = it.next();
+
+ for (int index: previous) {
int inc = 0;
foreach (const KItemRange& itemRange, itemRanges) {
if (index < itemRange.index) {
}
}
- const QSet<int> selection = selectedItems();
+ const KItemSet selection = selectedItems();
if (selection != previousSelection) {
emit selectionChanged(selection, previousSelection);
}
void KItemListSelectionManager::itemsRemoved(const KItemRangeList& itemRanges)
{
// Store the current selection (needed in the selectionChanged() signal)
- const QSet<int> previousSelection = selectedItems();
+ const KItemSet previousSelection = selectedItems();
const int previousCurrent = m_currentItem;
// Update the current item
// Update the selections and the anchor item
if (!m_selectedItems.isEmpty()) {
- const QSet<int> previous = m_selectedItems;
+ const KItemSet previous = m_selectedItems;
m_selectedItems.clear();
- m_selectedItems.reserve(previous.count());
- QSetIterator<int> it(previous);
- while (it.hasNext()) {
- const int index = indexAfterRangesRemoving(it.next(), itemRanges, DiscardRemovedIndex);
+
+ for (int oldIndex : previous) {
+ const int index = indexAfterRangesRemoving(oldIndex, itemRanges, DiscardRemovedIndex);
if (index >= 0) {
m_selectedItems.insert(index);
}
}
}
- const QSet<int> selection = selectedItems();
+ const KItemSet selection = selectedItems();
if (selection != previousSelection) {
emit selectionChanged(selection, previousSelection);
}
void KItemListSelectionManager::itemsMoved(const KItemRange& itemRange, const QList<int>& movedToIndexes)
{
// Store the current selection (needed in the selectionChanged() signal)
- const QSet<int> previousSelection = selectedItems();
+ const KItemSet previousSelection = selectedItems();
+
+ // endAnchoredSelection() adds all items between m_currentItem and
+ // m_anchorItem to m_selectedItems. They can then be moved
+ // individually later in this function.
+ endAnchoredSelection();
// Update the current item
if (m_currentItem >= itemRange.index && m_currentItem < itemRange.index + itemRange.count) {
emit currentChanged(newCurrentItem, previousCurrentItem);
}
- // Update the anchor item
- if (m_anchorItem >= itemRange.index && m_anchorItem < itemRange.index + itemRange.count) {
- m_anchorItem = movedToIndexes.at(m_anchorItem - itemRange.index);
- }
+ // Start a new anchored selection.
+ beginAnchoredSelection(m_currentItem);
// Update the selections
if (!m_selectedItems.isEmpty()) {
- const QSet<int> previous = m_selectedItems;
+ const KItemSet previous = m_selectedItems;
m_selectedItems.clear();
- m_selectedItems.reserve(previous.count());
- QSetIterator<int> it(previous);
- while (it.hasNext()) {
- const int index = it.next();
+
+ for (int index : previous) {
if (index >= itemRange.index && index < itemRange.index + itemRange.count) {
m_selectedItems.insert(movedToIndexes.at(index - itemRange.index));
}
}
}
- const QSet<int> selection = selectedItems();
+ const KItemSet selection = selectedItems();
if (selection != previousSelection) {
emit selectionChanged(selection, previousSelection);
}
}
return qBound(-1, index - dec, m_model->count() - 1);
}
-#include "kitemlistselectionmanager.moc"
+