1/*
2 * \copyright Copyright (c) 2019-2021 Governikus GmbH & Co. KG, Germany
3 */
4
5import QtQuick 2.12
6import QtQuick.Controls 2.12
7import QtGraphicalEffects 1.12
8
9import Governikus.Global 1.0
10import Governikus.Style 1.0
11
12ListView {
13	id: baseItem
14
15	property bool scrollBarEnabled: true
16	property real scrollBarTopPadding: 0
17	property real scrollBarBottomPadding: 0
18	property bool scrollBarAutohide: !Constants.is_desktop
19
20	function scrollPageDown() {
21		Utils.scrollPageDown(baseItem)
22	}
23
24	function scrollPageUp() {
25		Utils.scrollPageUp(baseItem)
26	}
27
28	function highlightScrollbar() {
29		if (ScrollBar.vertical) ScrollBar.vertical.highlight()
30	}
31
32	ScrollBar.vertical: scrollBarEnabled ? scrollBar.createObject() : null
33
34	function handleKeyPress(key) {
35		if (key === Qt.Key_PageDown)
36			baseItem.scrollPageDown()
37		else if (key === Qt.Key_PageUp)
38			baseItem.scrollPageUp()
39		else if (key === Qt.Key_End)
40			baseItem.positionViewAtEnd()
41		else if (key === Qt.Key_Home)
42			baseItem.positionViewAtBeginning()
43	}
44
45	Keys.onPressed: handleKeyPress(event.key)
46
47	maximumFlickVelocity: Constants.scrolling_speed
48	flickDeceleration: Constants.flickDeceleration
49	flickableDirection: Flickable.VerticalFlick
50
51	boundsMovement: Flickable.FollowBoundsBehavior
52	boundsBehavior: Constants.is_desktop ? Flickable.StopAtBounds : (contentHeight <= height ? Flickable.StopAtBounds : Flickable.DragAndOvershootBounds)
53
54	onVisibleChanged: if (visible) highlightScrollbar()
55
56	Component {
57		id: scrollBar
58		GScrollBar {
59			topPadding: baseItem.scrollBarTopPadding + Style.dimens.scrollbar_padding_vertical
60			bottomPadding: baseItem.scrollBarBottomPadding + Style.dimens.scrollbar_padding_vertical
61			autohide: scrollBarAutohide
62		}
63	}
64}
65