summaryrefslogtreecommitdiffstats
path: root/framework/qml
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2018-04-03 16:29:11 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-04-03 16:29:11 +0200
commitf11bb429d17b27fb29ff068626c76e8346ac71d2 (patch)
tree4f2c0218c4f28f9e659f5c86eb79e116b58d5db5 /framework/qml
parent1bceb83479c74eb2035354b7fde0eeb9c655ead4 (diff)
downloadkube-f11bb429d17b27fb29ff068626c76e8346ac71d2.tar.gz
kube-f11bb429d17b27fb29ff068626c76e8346ac71d2.zip
Some vim style keyboard navigation.
If nothing else it works as an example how we have to differentiate between shortcuts and keyboard navigation (one is global to some extent, the other is only when having focus), and shows that we'll need some place to consolidate that configuration.
Diffstat (limited to 'framework/qml')
-rw-r--r--framework/qml/ConversationListView.qml18
-rw-r--r--framework/qml/ConversationView.qml13
-rw-r--r--framework/qml/MailListView.qml19
3 files changed, 34 insertions, 16 deletions
diff --git a/framework/qml/ConversationListView.qml b/framework/qml/ConversationListView.qml
index dcb5e3a4..2f5c5c32 100644
--- a/framework/qml/ConversationListView.qml
+++ b/framework/qml/ConversationListView.qml
@@ -60,6 +60,14 @@ FocusScope {
60 setCurrentItem() 60 setCurrentItem()
61 } 61 }
62 62
63 function incrementCurrentIndex() {
64 flickable.incrementCurrentIndex()
65 }
66
67 function decrementCurrentIndex() {
68 flickable.decrementCurrentIndex()
69 }
70
63 Flickable { 71 Flickable {
64 id: flickable 72 id: flickable
65 anchors.fill: parent 73 anchors.fill: parent
@@ -116,21 +124,13 @@ FocusScope {
116 if (currentIndex < repeater.count - 1) { 124 if (currentIndex < repeater.count - 1) {
117 currentIndex = currentIndex + 1 125 currentIndex = currentIndex + 1
118 } 126 }
127 scrollToIndex(currentIndex)
119 } 128 }
120 129
121 function decrementCurrentIndex() { 130 function decrementCurrentIndex() {
122 if (currentIndex > 0) { 131 if (currentIndex > 0) {
123 currentIndex = currentIndex - 1 132 currentIndex = currentIndex - 1
124 } 133 }
125 }
126
127 Keys.onDownPressed: {
128 incrementCurrentIndex()
129 scrollToIndex(currentIndex)
130 }
131
132 Keys.onUpPressed: {
133 decrementCurrentIndex()
134 scrollToIndex(currentIndex) 134 scrollToIndex(currentIndex)
135 } 135 }
136 136
diff --git a/framework/qml/ConversationView.qml b/framework/qml/ConversationView.qml
index 0fd76f8f..4aa2b2c0 100644
--- a/framework/qml/ConversationView.qml
+++ b/framework/qml/ConversationView.qml
@@ -60,6 +60,18 @@ FocusScope {
60 mail: root.mail 60 mail: root.mail
61 } 61 }
62 62
63 Keys.onPressed: {
64 if (event.text == "j" || event.matches(StandardKey.MoveToNextLine)) {
65 listView.incrementCurrentIndex()
66 } else if (event.text == "k" || event.matches(StandardKey.MoveToPreviousLine)) {
67 listView.decrementCurrentIndex()
68 } else if (event.text == "d") {
69 //Not implemented as a shortcut because we want it only to apply if we have the focus
70 Kube.Fabric.postMessage(Kube.Messages.moveToTrash, {"mail": listView.currentItem.currentData.mail})
71 }
72 }
73
74
63 delegate: FocusScope { 75 delegate: FocusScope {
64 id: delegateRoot 76 id: delegateRoot
65 77
@@ -77,6 +89,7 @@ FocusScope {
77 89
78 height: sheet.height + Kube.Units.gridUnit 90 height: sheet.height + Kube.Units.gridUnit
79 width: listView.width 91 width: listView.width
92 //FIXME breaks keyboard navigation because we don't jump over invisible items
80 visible: !((root.hideTrash && model.trash) || (root.hideNonTrash && !model.trash)) 93 visible: !((root.hideTrash && model.trash) || (root.hideNonTrash && !model.trash))
81 94
82 MouseArea { 95 MouseArea {
diff --git a/framework/qml/MailListView.qml b/framework/qml/MailListView.qml
index 55a3aaff..eb124102 100644
--- a/framework/qml/MailListView.qml
+++ b/framework/qml/MailListView.qml
@@ -16,7 +16,7 @@
16 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 16 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17*/ 17*/
18 18
19import QtQuick 2.7 19import QtQuick 2.9
20import QtQuick.Controls 2.0 20import QtQuick.Controls 2.0
21import QtQuick.Controls 1.4 as Controls 21import QtQuick.Controls 1.4 as Controls
22import QtQuick.Layouts 1.1 22import QtQuick.Layouts 1.1
@@ -48,7 +48,7 @@ FocusScope {
48 } 48 }
49 49
50 Shortcut { 50 Shortcut {
51 sequence: StandardKey.Delete 51 sequences: [StandardKey.Delete]
52 enabled: !isTrash 52 enabled: !isTrash
53 onActivated: Kube.Fabric.postMessage(Kube.Messages.moveToTrash, {"mail":currentMail}) 53 onActivated: Kube.Fabric.postMessage(Kube.Messages.moveToTrash, {"mail":currentMail})
54 } 54 }
@@ -121,12 +121,17 @@ FocusScope {
121 } 121 }
122 } 122 }
123 123
124 Keys.onDownPressed: { 124 Keys.onPressed: {
125 incrementCurrentIndex() 125 if (event.text == "j" || event.matches(StandardKey.MoveToNextLine)) {
126 } 126 incrementCurrentIndex()
127 Keys.onUpPressed: { 127 } else if (event.text == "k" || event.matches(StandardKey.MoveToPreviousLine)) {
128 decrementCurrentIndex() 128 decrementCurrentIndex()
129 } else if (event.text == "d") {
130 //Not implemented as a shortcut because we want it only to apply if we have the focus
131 Kube.Fabric.postMessage(Kube.Messages.moveToTrash, {"mail": root.currentMail})
132 }
129 } 133 }
134
130 //END keyboard nav 135 //END keyboard nav
131 136
132 onCurrentItemChanged: { 137 onCurrentItemChanged: {