This repository was archived by the owner on Nov 9, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathAutoSpacedGrid.qml
102 lines (84 loc) · 3.38 KB
/
AutoSpacedGrid.qml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/***************************************************************************
* Whatsoever ye do in word or deed, do all in the name of the *
* Lord Jesus, giving thanks to God and the Father by him. *
* - Colossians 3:17 *
* *
* Ubuntu UI Extras - A collection of QML widgets not available *
* in the default Ubuntu UI Toolkit *
* Copyright (C) 2013 Michael Spencer <[email protected]> *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
import QtQuick 2.0
Item {
id: root
property int cellWidth
property int cellHeight
property int xCount
property int yCount: {
var count = cellCount/xCount
if (cellCount % xCount > 0)
count++
return count
}
height: yCount * cellHeight + (yCount) * ySpacing
property int cellCount
Component.onCompleted: layout()
onWidthChanged: layout()
// FIXME: A really uggly hack to get the layout right
Timer {
interval: 1
running: true
onTriggered: layout()
}
function layout() {
var count = 1
var space = calcSpacing(count)
while (space >= minSpacing) {
count++
space = calcSpacing(count)
}
count--
spacing = calcSpacing(count)
if (root.cellCount <= count) {
spacing = minSpacing
}
xCount = count
//print("Spacing is", spacing, xCount)
}
function calcSpacing(count) {
var spacing = (width - count * cellWidth)/(count)
//print("Spacing for count", count, "is", spacing/8, "gu")
return spacing
}
property real spacing
property int minSpacing: units.gu(2)
property real outerSpacing: 1/2 * spacing
property real outerYSpacing: 1/2 * ySpacing
property real ySpacing: spacing
default property alias children: grid.children
Grid {
id: grid
anchors {
fill: parent
leftMargin: root.outerSpacing
rightMargin: root.outerSpacing
topMargin: root.outerYSpacing
bottomMargin: root.outerYSpacing
}
columns: xCount
columnSpacing: root.spacing
rowSpacing: root.ySpacing
}
}