From afca8efa2601d9566c8d34d7b67dfb5abc729956 Mon Sep 17 00:00:00 2001 From: Tirtha Chatterjee Date: Mon, 29 Aug 2011 04:12:05 +0530 Subject: Added support for highlighting items by typing their name on the keyboard. --- src/kitemviews/kitemlistcontroller.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'src/kitemviews/kitemlistcontroller.cpp') diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index c0875ce39..207535ce1 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -25,6 +25,7 @@ #include "kitemlistview.h" #include "kitemlistrubberband_p.h" #include "kitemlistselectionmanager.h" +#include "kitemlistkeyboardsearchmanager_p.h" #include #include @@ -42,10 +43,12 @@ KItemListController::KItemListController(QObject* parent) : m_model(0), m_view(0), m_selectionManager(new KItemListSelectionManager(this)), + m_keyboardManager(new KItemListKeyboardSearchManager(this)), m_pressedIndex(-1), m_pressedMousePos(), m_oldSelection() { + connect(m_keyboardManager, SIGNAL(requestItemActivation(QString,bool)), this, SLOT(slotKeyboardActivationRequested(QString,bool))); } KItemListController::~KItemListController() @@ -202,10 +205,12 @@ bool KItemListController::keyPressEvent(QKeyEvent* event) m_selectionManager->endAnchoredSelection(); m_selectionManager->setSelected(index, 1, KItemListSelectionManager::Toggle); m_selectionManager->beginAnchoredSelection(index); + break; } default: - break; + m_keyboardManager->addKeys(event->text()); + return false; } if (m_selectionManager->currentItem() != index) { @@ -227,6 +232,27 @@ bool KItemListController::keyPressEvent(QKeyEvent* event) return true; } +void KItemListController::slotKeyboardActivationRequested(const QString& text, bool searchFromNextItem) +{ + if (!m_model) { + return; + } + const int currentIndex = m_selectionManager->currentItem(); + int index; + if (searchFromNextItem) { + index = m_model->indexForKeyboardSearch(text, (currentIndex + 1) % m_model->count()); + } + else { + index = m_model->indexForKeyboardSearch(text, currentIndex); + } + if (index >= 0) { + m_selectionManager->setCurrentItem(index); + m_selectionManager->clearSelection(); + m_selectionManager->setSelected(index, 1); + m_selectionManager->beginAnchoredSelection(index); + } +} + bool KItemListController::inputMethodEvent(QInputMethodEvent* event) { Q_UNUSED(event); -- cgit v1.3