┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kitemlistcontroller.cpp
diff options
context:
space:
mode:
authorTirtha Chatterjee <[email protected]>2011-08-29 04:12:05 +0530
committerTirtha Chatterjee <[email protected]>2011-08-29 04:12:05 +0530
commitafca8efa2601d9566c8d34d7b67dfb5abc729956 (patch)
tree8ecd46cfe49bcde18e11e1f8056844022cb9935d /src/kitemviews/kitemlistcontroller.cpp
parentb01c73607be9974032a15a4b8ab39d5379991cb6 (diff)
Added support for highlighting items by typing their name on the keyboard.
Diffstat (limited to 'src/kitemviews/kitemlistcontroller.cpp')
-rw-r--r--src/kitemviews/kitemlistcontroller.cpp28
1 files changed, 27 insertions, 1 deletions
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 <QApplication>
#include <QDrag>
@@ -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);