28
28
property Component delegate
29
29
property QtObject model
30
property int pageSize: Math.floor(appsView.width/delegateWidth)*Math.floor(appsView.height/delegateHeight)
31
property int delegateWidth: 120
32
property int delegateHeight: 120
33
property alias currentPage: appsView.currentIndex
30
property int pageSize: Math.floor(iconView.width/main.delegateWidth)*Math.floor(iconView.height/main.delegateHeight)
31
property int delegateWidth: theme.defaultFont.mSize.width * 15
32
property int delegateHeight: theme.defaultIconSize + theme.defaultFont.mSize.height + 8
33
property alias currentPage: iconView.currentIndex
34
34
property int pagesCount: Math.ceil(model.count/pageSize)
35
35
property int count: model.count
42
42
function positionViewAtIndex(index)
44
appsView.positionViewAtIndex(index / pageSize, ListView.Beginning)
44
iconView.positionViewAtIndex(index / pageSize, ListView.Beginning)
47
47
function positionViewAtPage(page)
49
appsView.positionViewAtIndex(page, ListView.Beginning)
49
iconView.positionViewAtIndex(page, ListView.Beginning)
62
main.pageSize = Math.floor(iconView.width/main.delegateWidth)*Math.floor(iconView.height/main.delegateHeight)
63
if (iconView.currentItem) {
64
iconView.currentItem.width = iconView.width
65
iconView.currentItem.height = iconView.height
59
objectName: "appsView"
71
objectName: "iconView"
62
74
highlightMoveDuration: 250
63
75
anchors.fill: parent
66
model: main.model?Math.ceil(main.model.count/main.pageSize):0
76
onWidthChanged: resizeTimer.restart()
77
onHeightChanged: resizeTimer.restart()
79
model: main.model ? Math.ceil(main.model.count/main.pageSize) : 0
67
80
highlightRangeMode: ListView.StrictlyEnforceRange
68
81
orientation: ListView.Horizontal
69
82
snapMode: ListView.SnapOneItem
100
119
onTriggered: iconRepeater.model = pagedProxyModel
101
120
Component.onCompleted: {
102
loadTimer.interval = appsView.moving ? 500 : 0
121
loadTimer.interval = iconView.moving ? 500 : 0
103
122
loadTimer.running = true
108
property int columns: Math.min(count, Math.floor(appsView.width/main.delegateWidth))
127
property int columns: Math.min(count, Math.floor(delegatePage.width/main.delegateWidth))
109
128
property int suggestedWidth: main.delegateWidth*columns
110
129
//property int suggestedHeight: main.delegateHeight*Math.floor(count/columns)
121
141
visible: main.model && Math.ceil(main.model.count/main.pageSize) > 1
123
143
left: parent.left
124
144
right: parent.right
125
145
bottom: parent.bottom
127
height: Math.max( 16, appsView.height - Math.floor(appsView.height/delegateHeight)*delegateHeight)
147
height: Math.max( 16, iconView.height - Math.floor(iconView.height/delegateHeight)*delegateHeight)
149
property int pageCount: main.model ? Math.ceil(main.model.count/main.pageSize) : 0
151
sourceComponent: pageCount > 1 ? ((pageCount * 20 > width) ? scrollDotComponent : dotsRow) : undefined
152
function setViewIndex(index)
154
//animate only if near
155
if (Math.abs(iconView.currentIndex - index) > 1) {
156
iconView.positionViewAtIndex(index, ListView.Beginning)
158
iconView.currentIndex = index
162
id: scrollDotComponent
165
property int pendingIndex: 0
168
color: theme.textColor
175
verticalCenter: parent.verticalCenter
176
leftMargin: (parent.width/pageCount/2)
177
rightMargin: (parent.width/pageCount/2)
181
color: theme.textColor
185
anchors.verticalCenter: parent.verticalCenter
186
x: parent.width/(pageCount/(iconView.currentIndex+1)) - (parent.width/pageCount/2) - 4
190
easing.type: Easing.InOutQuad
194
function setViewIndexFromMouse(x)
196
pendingIndex = Math.min(pageCount,
197
Math.round(pageCount / (barRectangle.width / Math.max(x - barRectangle.x, 1))))
198
viewPositionTimer.restart()
200
onPressed: setViewIndexFromMouse(mouse.x)
201
onPositionChanged: setViewIndexFromMouse(mouse.x)
204
id: viewPositionTimer
206
onTriggered: setViewIndex(pendingIndex)
130
anchors.centerIn: parent
134
model: main.model?Math.ceil(main.model.count/main.pageSize):0
140
scale: appsView.currentIndex == index ? 1.5 : 1
143
opacity: appsView.currentIndex == index ? 0.8: 0.4
144
color: theme.textColor
149
easing.type: Easing.InOutQuad
152
Behavior on opacity {
155
easing.type: Easing.InOutQuad
166
//animate only if near
167
if (Math.abs(appsView.currentIndex - index) > 1) {
168
appsView.positionViewAtIndex(index, ListView.Beginning)
170
appsView.currentIndex = index
215
anchors.centerIn: parent
219
model: scrollArea.pageCount
225
scale: iconView.currentIndex == index ? 1.5 : 1
228
opacity: iconView.currentIndex == index ? 0.8: 0.4
229
color: theme.textColor
234
easing.type: Easing.InOutQuad
237
Behavior on opacity {
240
easing.type: Easing.InOutQuad