1. The anchorChanged() signal is not needed.
2. The only place where setAnchorItem() is called is in
beginAnchoredSelection() -> merge both functions.
{
if (anchor >= 0 && m_model && anchor < m_model->count()) {
m_isAnchoredSelectionActive = true;
{
if (anchor >= 0 && m_model && anchor < m_model->count()) {
m_isAnchoredSelectionActive = true;
- setAnchorItem(anchor);
- Q_ASSERT(m_anchorItem >= 0);
m_isAnchoredSelectionActive = false;
}
m_isAnchoredSelectionActive = false;
}
-void KItemListSelectionManager::setAnchorItem(int anchor)
-{
- if (!m_isAnchoredSelectionActive) {
- return;
- }
-
- if (anchor < 0 || (m_model && anchor >= m_model->count())) {
- // Index is out of range
- return;
- }
-
- if (m_anchorItem != anchor) {
- const int previous = m_anchorItem;
- m_anchorItem = anchor;
- emit anchorChanged(m_anchorItem, previous);
- }
-}
-
int KItemListSelectionManager::anchorItem() const
{
return m_anchorItem;
int KItemListSelectionManager::anchorItem() const
{
return m_anchorItem;
// Update the anchor item
if (m_anchorItem < 0) {
// Update the anchor item
if (m_anchorItem < 0) {
- const int previousAnchor = m_anchorItem;
int inc = 0;
foreach (const KItemRange& itemRange, itemRanges) {
if (m_anchorItem < itemRange.index) {
int inc = 0;
foreach (const KItemRange& itemRange, itemRanges) {
if (m_anchorItem < itemRange.index) {
inc += itemRange.count;
}
m_anchorItem += inc;
inc += itemRange.count;
}
m_anchorItem += inc;
- emit anchorChanged(m_anchorItem, previousAnchor);
}
// Update the selections
}
// Update the selections
// Update the anchor item
if (m_anchorItem >= 0) {
// 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) {
int anchorItem = m_anchorItem;
foreach (const KItemRange& itemRange, itemRanges) {
if (anchorItem < itemRange.index) {
if (m_anchorItem < 0) {
m_isAnchoredSelectionActive = false;
}
if (m_anchorItem < 0) {
m_isAnchoredSelectionActive = false;
}
-
- emit anchorChanged(m_anchorItem, previousAnchor);
}
// Update the selections
}
// Update the selections
void beginAnchoredSelection(int anchor);
void endAnchoredSelection();
void beginAnchoredSelection(int anchor);
void endAnchoredSelection();
-
- /**
- * Sets the anchor to \a anchor and emits anchorChanged() if the
- * anchor differs from the current anchor value. If no anchor selection is active (see
- * KItemListSelectionManager::beginAnchoredSelection()) or the index
- * is not within the available model items the anchor will not be modified.
- */
- void setAnchorItem(int anchor);
bool isAnchoredSelectionActive() const;
KItemModelBase* model() const;
bool isAnchoredSelectionActive() const;
KItemModelBase* model() const;
signals:
void currentChanged(int current, int previous);
void selectionChanged(const QSet<int>& current, const QSet<int>& previous);
signals:
void currentChanged(int current, int previous);
void selectionChanged(const QSet<int>& current, const QSet<int>& previous);
- void anchorChanged(int anchor, int previous);
private:
void setModel(KItemModelBase* model);
private:
void setModel(KItemModelBase* model);
void KItemListSelectionManagerTest::testCurrentItemAnchorItem()
{
QSignalSpy spyCurrent(m_selectionManager, SIGNAL(currentChanged(int,int)));
void KItemListSelectionManagerTest::testCurrentItemAnchorItem()
{
QSignalSpy spyCurrent(m_selectionManager, SIGNAL(currentChanged(int,int)));
- QSignalSpy spyAnchor(m_selectionManager, SIGNAL(anchorChanged(int,int)));
// Set current item and check that the selection manager emits the currentChanged(int,int) signal correctly.
m_selectionManager->setCurrentItem(4);
// Set current item and check that the selection manager emits the currentChanged(int,int) signal correctly.
m_selectionManager->setCurrentItem(4);
QCOMPARE(qvariant_cast<int>(spyCurrent.at(0).at(0)), 4);
spyCurrent.takeFirst();
QCOMPARE(qvariant_cast<int>(spyCurrent.at(0).at(0)), 4);
spyCurrent.takeFirst();
- // Set anchor item and check that the selection manager emits the anchorChanged(int,int) signal correctly.
- m_selectionManager->beginAnchoredSelection(3);
+ // Begin an anchored selection.
+ m_selectionManager->beginAnchoredSelection(5);
QVERIFY(m_selectionManager->isAnchoredSelectionActive());
QVERIFY(m_selectionManager->isAnchoredSelectionActive());
- QCOMPARE(m_selectionManager->anchorItem(), 3);
- QCOMPARE(spyAnchor.count(), 1);
- QCOMPARE(qvariant_cast<int>(spyAnchor.at(0).at(0)), 3);
- spyAnchor.takeFirst();
-
- m_selectionManager->setAnchorItem(5);
QCOMPARE(m_selectionManager->anchorItem(), 5);
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)), 3);
- spyAnchor.takeFirst();
// Items between current and anchor should be selected now
QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 4 << 5);
// Items between current and anchor should be selected now
QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 4 << 5);
spyCurrent.takeFirst();
QCOMPARE(m_selectionManager->anchorItem(), 8);
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();
QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 5 << 6 << 7 << 8);
QVERIFY(m_selectionManager->hasSelection());
QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 5 << 6 << 7 << 8);
QVERIFY(m_selectionManager->hasSelection());
spyCurrent.takeFirst();
QCOMPARE(m_selectionManager->anchorItem(), 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();
QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 2 << 3 << 4 << 5);
QVERIFY(m_selectionManager->hasSelection());
QCOMPARE(m_selectionManager->selectedItems(), QSet<int>() << 2 << 3 << 4 << 5);
QVERIFY(m_selectionManager->hasSelection());