22 import org.kde.plasma.core 0.1 as PlasmaCore
23 import "private" as Private
43 property Flickable flickableItem: null
50 property int orientation: Qt.Vertical
57 property bool interactive:
true
66 property bool inverted:
false
76 property alias stepSize: range.stepSize
81 property bool pressed: internalLoader.item.mouseArea?internalLoader.item.mouseArea.pressed:
false
87 property real scrollButtonInterval: 50
89 implicitWidth: internalLoader.isVertical ? (internalLoader.item ? internalLoader.item.implicitWidth : 12) : 200
90 implicitHeight: internalLoader.isVertical ? 200 : (internalLoader.item ? internalLoader.item.implicitHeight : 12)
93 opacity: enabled ? 1.0 : 0.5
95 visible: flickableItem && internalLoader.handleEnabled
98 right: internalLoader.anchorableWithFlickable ? flickableItem.right : undefined
99 left: (orientation == Qt.Vertical) ? undefined : (internalLoader.anchorableWithFlickable ? flickableItem.left : undefined)
100 top: (orientation == Qt.Vertical) ? (internalLoader.anchorableWithFlickable ? flickableItem.top : undefined) : undefined
101 bottom: internalLoader.anchorableWithFlickable ? flickableItem.bottom : undefined
108 property bool handleEnabled: internalLoader.isVertical ? flickableItem.contentHeight > flickableItem.height : flickableItem.contentWidth > flickableItem.width
109 property bool isVertical: orientation == Qt.Vertical
110 property bool anchorableWithFlickable: scrollbar.parent == flickableItem || scrollbar.parent == flickableItem.parent
112 function incrementValue(increment)
114 if (!flickableItem) {
118 if (internalLoader.isVertical) {
119 flickableItem.contentY = Math.max(0, Math.min(flickableItem.contentHeight - flickableItem.height,
120 flickableItem.contentY + increment));
122 flickableItem.contentX = Math.max(0, Math.min(flickableItem.contentWidth - flickableItem.width,
123 flickableItem.contentX + increment));
129 target: flickableItem
130 onContentHeightChanged: {
131 range.value = flickableItem.contentY;
134 if (internalLoader.isVertical) {
135 range.value = flickableItem.contentY;
139 if (!internalLoader.isVertical) {
140 range.value = flickableItem.contentX;
145 target: internalLoader.item.handle
146 onYChanged: updateFromHandleTimer.running =
true
147 onXChanged: updateFromHandleTimer.running =
true
155 if (internalLoader.isVertical) {
156 diff = flickableItem.contentHeight - flickableItem.height;
158 diff = flickableItem.contentWidth - flickableItem.width;
161 return Math.max(0, diff);
165 inverted: scrollbar.inverted
168 if (internalLoader.isVertical) {
169 internalLoader.item.contents.height - internalLoader.item.handle.height;
171 internalLoader.item.contents.width - internalLoader.item.handle.width;
176 if (flickableItem.moving) {
180 if (internalLoader.isVertical) {
181 flickableItem.contentY = value;
183 flickableItem.contentX = value;
189 if (internalLoader.item.mouseArea && internalLoader.item.mouseArea.pressed) {
193 if (internalLoader.isVertical) {
194 internalLoader.item.handle.y = position;
196 internalLoader.item.handle.x = position; }
201 id: updateFromHandleTimer
204 if (!enabled || !interactive) {
208 if (internalLoader.isVertical) {
209 range.position = internalLoader.item.handle.y;
211 range.position = internalLoader.item.handle.x;
216 source: interactive ?
"private/ScrollBarDelegate.qml" :
"private/ScrollDecoratorDelegate.qml"