73 lines
1.9 KiB
QML
73 lines
1.9 KiB
QML
|
import QtQuick 2.13
|
||
|
import QtQuick.Controls 2.13
|
||
|
import "../utils.js" as Utils
|
||
|
|
||
|
Drawer {
|
||
|
id: drawer
|
||
|
implicitWidth: calculatedWidth
|
||
|
implicitHeight: parent.height
|
||
|
|
||
|
// FIXME: https://bugreports.qt.io/browse/QTBUG-59141
|
||
|
// dragMargin: parent.width / 2
|
||
|
|
||
|
interactive: collapse
|
||
|
position: 1
|
||
|
visible: ! collapse
|
||
|
modal: false
|
||
|
closePolicy: Popup.CloseOnEscape
|
||
|
|
||
|
background: Rectangle { id: bg; color: theme.colors.strongBackground }
|
||
|
|
||
|
|
||
|
signal userResized(int newWidth)
|
||
|
|
||
|
property int normalWidth: 300
|
||
|
property int minNormalWidth: resizeAreaWidth
|
||
|
property int maxNormalWidth: parent.width
|
||
|
|
||
|
property bool collapse: window.width < 400
|
||
|
property int collapseExpandedWidth: parent.width
|
||
|
|
||
|
property alias color: bg.color
|
||
|
property alias resizeAreaWidth: resizeArea.width
|
||
|
|
||
|
readonly property int calculatedWidth:
|
||
|
collapse ?
|
||
|
collapseExpandedWidth :
|
||
|
Math.max(minNormalWidth, Math.min(normalWidth, maxNormalWidth))
|
||
|
|
||
|
|
||
|
Behavior on width {
|
||
|
enabled: ! resizeMouseHandler.drag.active
|
||
|
NumberAnimation { duration: 100 }
|
||
|
}
|
||
|
|
||
|
Item {
|
||
|
id: resizeArea
|
||
|
anchors.right: parent.right
|
||
|
width: theme.spacing / 2
|
||
|
height: parent.height
|
||
|
z: 9999
|
||
|
|
||
|
MouseArea {
|
||
|
id: resizeMouseHandler
|
||
|
anchors.fill: parent
|
||
|
enabled: ! drawer.collapse
|
||
|
acceptedButtons: Qt.LeftButton
|
||
|
hoverEnabled: true
|
||
|
cursorShape:
|
||
|
containsMouse || drag.active ?
|
||
|
Qt.SizeHorCursor : Qt.ArrowCursor
|
||
|
|
||
|
onPressed: canResize = true
|
||
|
onReleased: { canResize = false; userResized(drawer.normalWidth) }
|
||
|
|
||
|
onMouseXChanged:
|
||
|
if (canResize)
|
||
|
drawer.normalWidth = drawer.calculatedWidth + mouseX
|
||
|
|
||
|
property bool canResize: false
|
||
|
}
|
||
|
}
|
||
|
}
|