moment/src/qml/SidePane/SidePane.qml

72 lines
2.0 KiB
QML
Raw Normal View History

2019-07-08 13:52:41 +10:00
// Copyright 2019 miruka
// This file is part of harmonyqml, licensed under LGPLv3.
import QtQuick 2.12
import QtQuick.Layouts 1.12
import "../Base"
HRectangle {
id: sidePane
clip: true // Avoid artifacts when collapsed
opacity: mainUI.accountsPresent && ! reduce ? 1 : 0
visible: opacity > 0
2019-04-29 01:01:38 +10:00
property real autoWidthRatio: theme.sidePane.autoWidthRatio
property bool manuallyResizing: false
property bool manuallyResized: false
property int manualWidth: 0
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)
property int calculatedWidth: Math.min(
manuallyResized ? manualWidth: parentWidth * autoWidthRatio,
maximumCalculatedWidth
)
2019-07-12 12:25:50 +10:00
2019-07-16 23:21:45 +10:00
property bool collapse:
(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-07-16 23:21:45 +10:00
property int implicitWidth:
reduce ? 0 :
collapse ? theme.sidePane.collapsedWidth :
calculatedWidth
2019-07-17 07:08:06 +10:00
property int currentSpacing:
width <= theme.sidePane.collapsedWidth + theme.spacing * 2 ?
0 : theme.spacing
2019-07-16 23:21:45 +10:00
Behavior on currentSpacing { HNumberAnimation {} }
Behavior on implicitWidth { HNumberAnimation {} }
HColumnLayout {
anchors.fill: parent
AccountList {
Layout.fillWidth: true
Layout.fillHeight: true
2019-07-13 07:06:37 +10:00
spacing: currentSpacing
bottomMargin: currentSpacing
}
PaneToolBar {
id: paneToolBar
}
}
}