21 import org.kde.plasma.components 0.1 as PlasmaComponents
22 import org.kde.plasma.core 0.1 as PlasmaCore
37 property Flickable flickableItem
39 default property alias flickableItemDefault: root.flickableItem
43 onFlickableItemChanged: {
44 root.flickableItem.parent = root
45 root.flickableItem.anchors.fill = root
46 root.flickableItem.clip =
true
47 internal.checkVerticalScrollBar()
48 internal.checkHorizontalScrollBar()
51 Component.onCompleted: {
52 root.flickableItem.parent = root
53 root.flickableItem.anchors.fill = root
54 root.flickableItem.clip =
true
55 internal.checkVerticalScrollBar()
56 internal.checkHorizontalScrollBar()
60 onContentHeightChanged:
internal.checkVerticalScrollBar()
61 onHeightChanged:
internal.checkVerticalScrollBar()
62 onContentWidthChanged:
internal.checkHorizontalScrollBar()
63 onWidthChanged:
internal.checkHorizontalScrollBar()
67 property Item verticalScrollBar
68 property Item horizontalScrollBar
70 function checkVerticalScrollBar() {
75 if (flickableItem.contentHeight > flickableItem.height) {
78 if ((!flickableItem.model || flickableItem.model.get === undefined || !flickableItem.section || !flickableItem.section.property) &&
79 (!verticalScrollBar || verticalScrollBar.orientation === undefined)) {
80 if (verticalScrollBar) verticalScrollBar.destroy()
81 verticalScrollBar = verticalScrollBarComponent.createObject(root)
83 }
else if (flickableItem.section && flickableItem.section.property &&
84 flickableItem.model.get !== undefined &&
85 (!verticalScrollBar || verticalScrollBar.orientation !== undefined)) {
86 if (verticalScrollBar) verticalScrollBar.destroy()
87 verticalScrollBar = sectionScrollerComponent.createObject(root)
90 checkVerticalScrollBarMargins()
93 function checkVerticalScrollBarMargins() {
95 if ((flickableItem.contentHeight > flickableItem.height) && verticalScrollBar &&
96 ((verticalScrollBar.interactive && verticalScrollBar.visible) || (verticalScrollBar.orientation === undefined &&
98 verticalScrollBar.width < 30))) {
99 flickableItem.anchors.rightMargin = verticalScrollBar.width
101 flickableItem.anchors.rightMargin = 0
105 function checkHorizontalScrollBar() {
106 if (!flickableItem || horizontalScrollBar) {
110 if (flickableItem.contentWidth > flickableItem.width) {
111 if (!horizontalScrollBar) {
112 horizontalScrollBar = horizontalScrollBarComponent.createObject(root)
115 checkHorizontalScrollBarMargins()
118 function checkHorizontalScrollBarMargins() {
119 if ((flickableItem.contentWidth > flickableItem.width) &&
120 horizontalScrollBar && horizontalScrollBar.interactive && horizontalScrollBar.visible) {
121 flickableItem.anchors.bottomMargin = horizontalScrollBar.height
123 flickableItem.anchors.bottomMargin = 0
128 id: verticalScrollBarComponent
129 PlasmaComponents.ScrollBar {
130 flickableItem: root.flickableItem
131 orientation: Qt.Vertical
132 property bool isScrollBar:
true
133 z: root.flickableItem.z + 1
139 bottomMargin: root.height - root.flickableItem.height
141 onVisibleChanged:
internal.checkVerticalScrollBarMargins()
145 id: horizontalScrollBarComponent
146 PlasmaComponents.ScrollBar {
147 flickableItem: root.flickableItem
148 orientation: Qt.Horizontal
149 z: root.flickableItem.z + 1
155 rightMargin: root.width - root.flickableItem.width
157 onVisibleChanged:
internal.checkHorizontalScrollBarMargins()
161 id: sectionScrollerComponent
162 PlasmaComponents.SectionScroller {
163 listView: root.flickableItem
164 property bool isScrollBar:
false
165 z: root.flickableItem.z + 1
171 bottomMargin: root.height - root.flickableItem.height
173 onVisibleChanged:
internal.checkVerticalScrollBarMargins()
179 imagePath:
"widgets/scrollwidget"
184 elementId:
"border-top"
186 height: naturalSize.height
187 opacity: flickableItem.atYBeginning ? 0 : 1
188 Behavior on opacity {
191 easing.type: Easing.InOutQuad
198 topMargin: flickableItem.anchors.topMargin
204 elementId:
"border-bottom"
206 height: naturalSize.height
207 opacity: flickableItem.atYEnd ? 0 : 1
208 Behavior on opacity {
211 easing.type: Easing.InOutQuad
216 bottom: parent.bottom
218 bottomMargin: flickableItem.anchors.bottomMargin
224 elementId:
"border-left"
225 width: naturalSize.width
226 opacity: flickableItem.atXBeginning ? 0 : 1
227 Behavior on opacity {
230 easing.type: Easing.InOutQuad
236 bottom: parent.bottom
237 leftMargin: flickableItem.anchors.leftMargin
243 elementId:
"border-right"
244 width: naturalSize.width
245 opacity: flickableItem.atXEnd ? 0 : 1
246 Behavior on opacity {
249 easing.type: Easing.InOutQuad
254 bottom: parent.bottom
256 rightMargin: flickableItem.anchors.rightMargin