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