diff options
| author | Frank Reininghaus <[email protected]> | 2011-08-13 11:40:17 +0200 |
|---|---|---|
| committer | Frank Reininghaus <[email protected]> | 2011-08-13 11:51:38 +0200 |
| commit | 58ab93541c70de4fa7cbb90dc3423cfec556dc38 (patch) | |
| tree | b38990f7546ee750fc9ea141ad97436c1d18f49f /src/kitemviews/kitemlistcontroller.cpp | |
| parent | 9b83d15be44d698c26b55bf8cbc126321f5a4e9b (diff) | |
Implement selection of items using mouse clicks.
Diffstat (limited to 'src/kitemviews/kitemlistcontroller.cpp')
| -rw-r--r-- | src/kitemviews/kitemlistcontroller.cpp | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 79e42e413..afa70e60c 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -141,18 +141,51 @@ bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const const QPointF pos = transform.map(event->pos()); m_pressedIndex = m_view->itemAt(pos); - const bool shiftOrControlPressed = event->modifiers() & Qt::ShiftModifier || - event->modifiers() & Qt::ControlModifier; - if (!shiftOrControlPressed) { + if (m_view->isAboveExpansionToggle(m_pressedIndex, pos)) { + return true; + } + + const bool shiftPressed = event->modifiers() & Qt::ShiftModifier; + const bool controlPressed = event->modifiers() & Qt::ControlModifier; + const bool shiftOrControlPressed = shiftPressed || controlPressed; + + if (!shiftOrControlPressed || m_selectionBehavior == SingleSelection) { m_selectionManager->clearSelection(); - m_selectionManager->setAnchorItem(m_pressedIndex); + } + + if (!shiftPressed) { + // Finish the anchored selection before the current index is changed + m_selectionManager->endAnchoredSelection(); } if (m_pressedIndex >= 0) { m_selectionManager->setCurrentItem(m_pressedIndex); - if (!m_view->isAboveExpansionToggle(m_pressedIndex, pos)) { + + switch (m_selectionBehavior) { + case NoSelection: + return true; + case SingleSelection: m_selectionManager->setSelected(m_pressedIndex); + return true; + case MultiSelection: + if (controlPressed) { + m_selectionManager->setSelected(m_pressedIndex, 1, KItemListSelectionManager::Toggle); + m_selectionManager->beginAnchoredSelection(m_pressedIndex); + } + else { + if (shiftPressed && m_selectionManager->isAnchoredSelectionActive()) { + // The anchored selection is continued automatically by calling + // m_selectionManager->setCurrentItem(m_pressedIndex), see above -> nothing more to do here + return true; + } + + // Select the pressed item and start a new anchored selection + m_selectionManager->setSelected(m_pressedIndex, 1, KItemListSelectionManager::Select); + m_selectionManager->beginAnchoredSelection(m_pressedIndex); + } } + + return true; } return false; |
