2019-07-13 19:39:01 +10:00
|
|
|
import QtQuick 2.12
|
|
|
|
import QtQuick.Layouts 1.12
|
2019-04-29 05:18:36 +10:00
|
|
|
import "../Base"
|
2019-08-18 10:29:56 +10:00
|
|
|
import "../utils.js" as Utils
|
2019-03-26 18:19:55 +11:00
|
|
|
|
2019-05-12 07:51:00 +10:00
|
|
|
HRectangle {
|
2019-03-26 18:19:55 +11:00
|
|
|
id: sidePane
|
2019-07-16 22:52:26 +10:00
|
|
|
clip: true // Avoid artifacts when collapsed
|
2019-07-18 03:34:02 +10:00
|
|
|
opacity: mainUI.accountsPresent && ! reduce ? 1 : 0
|
|
|
|
visible: opacity > 0
|
2019-04-29 01:01:38 +10:00
|
|
|
|
2019-07-24 16:14:34 +10:00
|
|
|
color: theme.sidePane.background
|
|
|
|
|
2019-08-18 06:59:13 +10:00
|
|
|
property alias accountList: accountList
|
2019-08-18 05:58:32 +10:00
|
|
|
property alias paneToolBar: paneToolBar
|
|
|
|
|
2019-07-17 02:37:11 +10:00
|
|
|
property real autoWidthRatio: theme.sidePane.autoWidthRatio
|
2019-07-18 03:34:02 +10:00
|
|
|
property bool manuallyResizing: false
|
|
|
|
property bool manuallyResized: false
|
|
|
|
property int manualWidth: 0
|
2019-08-18 03:35:43 +10:00
|
|
|
property bool animateWidth: true
|
2019-07-16 22:52:26 +10:00
|
|
|
|
2019-07-21 23:08:22 +10:00
|
|
|
Component.onCompleted: {
|
|
|
|
if (window.uiState.sidePaneManualWidth) {
|
|
|
|
manualWidth = window.uiState.sidePaneManualWidth
|
|
|
|
manuallyResized = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
onManualWidthChanged: {
|
|
|
|
window.uiState.sidePaneManualWidth = manualWidth
|
|
|
|
window.uiStateChanged()
|
|
|
|
}
|
|
|
|
|
2019-07-18 03:34:02 +10:00
|
|
|
property int maximumCalculatedWidth: Math.min(
|
|
|
|
manuallyResized ? manualWidth : theme.sidePane.maximumAutoWidth,
|
|
|
|
window.width - theme.minimumSupportedWidthPlusSpacing
|
|
|
|
)
|
|
|
|
|
|
|
|
property int parentWidth: parent.width
|
|
|
|
// Needed for SplitView since it breaks the binding when user manual sizes
|
|
|
|
onParentWidthChanged: width = Qt.binding(() => implicitWidth)
|
2019-07-16 22:52:26 +10:00
|
|
|
|
|
|
|
|
2019-07-18 03:34:02 +10:00
|
|
|
property int calculatedWidth: Math.min(
|
2019-07-21 23:08:22 +10:00
|
|
|
manuallyResized ? manualWidth : parentWidth * autoWidthRatio,
|
2019-07-18 03:34:02 +10:00
|
|
|
maximumCalculatedWidth
|
|
|
|
)
|
2019-07-12 12:25:50 +10:00
|
|
|
|
2019-07-16 23:21:45 +10:00
|
|
|
property bool collapse:
|
2019-07-18 03:34:02 +10:00
|
|
|
(manuallyResizing ? width : calculatedWidth) <
|
|
|
|
(manuallyResized ?
|
|
|
|
(theme.sidePane.collapsedWidth + theme.spacing * 2) :
|
|
|
|
theme.sidePane.autoCollapseBelowWidth)
|
2019-07-16 22:36:11 +10:00
|
|
|
|
2019-07-16 23:21:45 +10:00
|
|
|
property bool reduce:
|
|
|
|
window.width < theme.sidePane.autoReduceBelowWindowWidth
|
2019-05-13 05:57:18 +10:00
|
|
|
|
2019-07-16 23:21:45 +10:00
|
|
|
property int implicitWidth:
|
|
|
|
reduce ? 0 :
|
|
|
|
collapse ? theme.sidePane.collapsedWidth :
|
2019-07-18 03:34:02 +10:00
|
|
|
calculatedWidth
|
2019-07-16 22:52:26 +10:00
|
|
|
|
2019-07-17 07:08:06 +10:00
|
|
|
property int currentSpacing:
|
2019-07-18 03:34:02 +10:00
|
|
|
width <= theme.sidePane.collapsedWidth + theme.spacing * 2 ?
|
|
|
|
0 : theme.spacing
|
2019-07-16 22:52:26 +10:00
|
|
|
|
2019-07-16 23:21:45 +10:00
|
|
|
Behavior on currentSpacing { HNumberAnimation {} }
|
2019-08-18 03:35:43 +10:00
|
|
|
Behavior on implicitWidth {
|
|
|
|
HNumberAnimation { factor: animateWidth ? 1 : 0 }
|
|
|
|
}
|
2019-07-16 22:52:26 +10:00
|
|
|
|
|
|
|
|
2019-08-18 10:29:56 +10:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-04-29 05:18:36 +10:00
|
|
|
HColumnLayout {
|
2019-03-26 18:19:55 +11:00
|
|
|
anchors.fill: parent
|
|
|
|
|
|
|
|
AccountList {
|
2019-08-18 06:59:13 +10:00
|
|
|
id: accountList
|
2019-03-26 18:19:55 +11:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.fillHeight: true
|
2019-05-03 04:20:21 +10:00
|
|
|
|
2019-07-13 07:06:37 +10:00
|
|
|
spacing: currentSpacing
|
|
|
|
bottomMargin: currentSpacing
|
2019-03-26 18:19:55 +11:00
|
|
|
}
|
|
|
|
|
2019-07-03 03:59:52 +10:00
|
|
|
PaneToolBar {
|
|
|
|
id: paneToolBar
|
|
|
|
}
|
2019-03-26 18:19:55 +11:00
|
|
|
}
|
|
|
|
}
|