From 3ca968169ffe7e94888ec49383a609c079bd04c3 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Tue, 4 Apr 2017 23:01:10 +0800 Subject: [PATCH] enable Ctrl+J and Ctrl+K navigation in VDirectoryTree --- src/resources/vnote.qss | 4 ++++ src/vdirectorytree.cpp | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/resources/vnote.qss b/src/resources/vnote.qss index 83820997..b91372a6 100644 --- a/src/resources/vnote.qss +++ b/src/resources/vnote.qss @@ -112,6 +112,10 @@ QComboBox#NotebookSelector { icon-size: 30px; } +QComboBox#NotebookSelector::focus { + background-color: @focus-color; +} + QComboBox#NotebookSelector::drop-down { subcontrol-origin: padding; subcontrol-position: top right; diff --git a/src/vdirectorytree.cpp b/src/vdirectorytree.cpp index 00855a6e..6514ffce 100644 --- a/src/vdirectorytree.cpp +++ b/src/vdirectorytree.cpp @@ -74,6 +74,7 @@ void VDirectoryTree::initActions() void VDirectoryTree::setNotebook(VNotebook *p_notebook) { + setFocus(); if (m_notebook == p_notebook) { return; } @@ -512,12 +513,47 @@ void VDirectoryTree::mousePressEvent(QMouseEvent *event) void VDirectoryTree::keyPressEvent(QKeyEvent *event) { - if (event->key() == Qt::Key_Return) { + int key = event->key(); + int modifiers = event->modifiers(); + + switch (key) { + case Qt::Key_Return: + { QTreeWidgetItem *item = currentItem(); if (item) { item->setExpanded(!item->isExpanded()); } + break; } + + case Qt::Key_J: + { + if (modifiers == Qt::ControlModifier) { + event->accept(); + QKeyEvent *downEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Down, + Qt::NoModifier); + QCoreApplication::postEvent(this, downEvent); + return; + } + break; + } + + case Qt::Key_K: + { + if (modifiers == Qt::ControlModifier) { + event->accept(); + QKeyEvent *upEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Up, + Qt::NoModifier); + QCoreApplication::postEvent(this, upEvent); + return; + } + break; + } + + default: + break; + } + QTreeWidget::keyPressEvent(event); }