Add keybinds to go to previous/next room

This commit is contained in:
miruka 2019-08-19 13:09:05 -04:00
parent 6ec193d554
commit 5e5a658173
8 changed files with 64 additions and 80 deletions

View File

@ -119,6 +119,8 @@ class UISettings(JSONConfigFile):
"scrollUp": ["Alt+Up", "Alt+K"],
"scrollDown": ["Alt+Down", "Alt+J"],
"filterRooms": ["Alt+R", "Ctrl+R"],
"goToPreviousRoom": ["Alt+Shift+Up", "Alt+Shift+K"],
"goToNextRoom": ["Alt+Shift+Down", "Alt+Shift+J"],
"startDebugger": ["Alt+Shift+D"],
},
}

View File

@ -4,6 +4,12 @@ import QtQuick.Controls 2.12
ListView {
interactive: false
currentIndex: -1
highlightMoveDuration: theme.animationDuration
highlight: HRectangle {
color: theme.controls.interactiveRectangle.checkedOverlay
opacity: theme.controls.interactiveRectangle.checkedOpacity
}
add: Transition {
HNumberAnimation { properties: "x,y"; from: 100 }

View File

@ -5,8 +5,5 @@ HFixedListView {
interactive: true
keyNavigationWraps: true
// This is used to smooth scroll when currentIndex is changed
highlightMoveDuration: theme.animationDuration * 4
ScrollBar.vertical: ScrollBar {}
}

View File

@ -40,8 +40,13 @@ Item {
}
Shortcut {
sequences: ["Ctrl+N"]
onActivated: mainUI.sidePane.activateNext()
sequences: settings.keys ? settings.keys.goToPreviousRoom : []
onActivated: mainUI.sidePane.accountRoomList.previous()
}
Shortcut {
sequences: settings.keys ? settings.keys.goToNextRoom : []
onActivated: mainUI.sidePane.accountRoomList.next()
}
/*

View File

@ -19,6 +19,9 @@ HListView {
function filterSource() {
let show = []
// Hide a harmless error when activating a DelegateRoom
try { window.sidePaneModelSource } catch (err) { return }
for (let i = 0; i < window.sidePaneModelSource.length; i++) {
let item = window.sidePaneModelSource[i]
@ -47,6 +50,16 @@ HListView {
model.source = show
}
function previous() {
accountRoomList.decrementCurrentIndex()
accountRoomList.currentItem.item.activate()
}
function next() {
accountRoomList.incrementCurrentIndex()
accountRoomList.currentItem.item.activate()
}
model: HListModel {
keyField: "id"

View File

@ -5,7 +5,7 @@ import "../Base"
HInteractiveRectangle {
id: accountDelegate
color: theme.sidePane.account.background
checked: isCurrent
// checked: isCurrent
height: row.height
@ -20,6 +20,13 @@ HInteractiveRectangle {
accountRoomList.collapseAccounts[model.data.user_id] || false
onIsCurrentChanged: if (isCurrent) beHighlighted()
function beHighlighted() {
accountRoomList.currentIndex = model.index
}
function toggleCollapse() {
window.uiState.collapseAccounts[model.data.user_id] = ! collapsed
window.uiStateChanged()
@ -32,6 +39,14 @@ HInteractiveRectangle {
}
// Component.onCompleted won't work for this
Timer {
interval: 100
repeat: true
running: accountRoomList.currentIndex == -1
onTriggered: if (isCurrent) beHighlighted()
}
TapHandler { onTapped: accountDelegate.activate() }
HRowLayout {

View File

@ -9,7 +9,6 @@ HInteractiveRectangle {
visible: height > 0
height: rowLayout.height
opacity: model.data.left ? theme.sidePane.room.leftRoomOpacity : 1
checked: isCurrent
Behavior on opacity { HNumberAnimation {} }
@ -24,11 +23,26 @@ HInteractiveRectangle {
window.uiState.pageProperties.roomId == model.data.room_id
onIsCurrentChanged: if (isCurrent) beHighlighted()
function beHighlighted() {
accountRoomList.currentIndex = model.index
}
function activate() {
pageStack.showRoom(model.user_id, model.data.room_id)
}
// Component.onCompleted won't work for this
Timer {
interval: 100
repeat: true
running: accountRoomList.currentIndex == -1
onTriggered: if (isCurrent) beHighlighted()
}
TapHandler { onTapped: activate() }
HRowLayout {

View File

@ -71,74 +71,6 @@ HRectangle {
}
function _getRoomModelSource(accountUserId) {
return Utils.filterModelSource(
modelSources[["Room", accountUserId]] || [],
paneToolBar.roomFilter,
)
}
function _activateNextAccount(i) {
let nextIndex = i + 1 > accountList.model.count - 1 ? 0 : i + 1
if (nextIndex == i) return
pageStack.showPage(
"EditAccount/EditAccount",
{userId: accountList.model.get(nextIndex).user_id}
)
accountList.currentIndex = nextIndex
}
function activateNext() {
if (accountList.model.count < 1) return
for (let i = 0; i < accountList.model.count; i++) {
let account = accountList.model.get(i)
if (window.uiState.page == "Pages/EditAccount/EditAccount.qml" &&
window.uiState.pageProperties.userId == account.user_id)
{
let room = _getRoomModelSource(account.user_id)[0]
if (room) { pageStack.showRoom(account.user_id, room.room_id) }
else { _activateNextAccount(i) }
return
}
if (window.uiState.page == "Chat/Chat.qml" &&
window.uiState.pageProperties.userId == account.user_id)
{
let rooms = _getRoomModelSource(account.user_id)
if (! rooms) { _activateNextAccount(i); return }
for (let ri = 0; ri < rooms.length; ri++) {
let room = rooms[ri]
if (room.room_id != window.uiState.pageProperties.roomId) {
continue
}
if (ri + 1 > rooms.length -1) {
_activateNextAccount(i)
return
}
pageStack.showRoom(account.user_id, rooms[ri + 1].room_id)
let currentRoomItem =
accountList.itemAtIndex(i).roomList.itemAtIndex(ri)
print(currentRoomItem.visible)
return
}
}
}
}
HColumnLayout {
anchors.fill: parent