2
* Copyright (C) 2013 Canonical, Ltd.
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; version 3.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18
import Ubuntu.Components 0.1
20
import "../Components"
23
A ResponsiveGridView that can optionally have the number of rows being displayed
24
reduced to collapsedRowCount, in which case a button saying "View all (123)"
25
will be shown at the bottom. If clicked, FilterGrid will them expand vertically
31
/* If true, the number of elements displayed will be limited by collapsedRowCount.
32
If false, all elements will be displayed, effectively looking the same as a regular
33
ResponsiveGridView. */
34
property bool filter: true
36
/* Whether, when collapsed, a button should be displayed enabling the user to expand
37
the grid to its full size. */
38
property bool expandable: true
40
property var model: null
42
/* Maximum number of rows to be show when filter=true. */
43
property int collapsedRowCount: 2
45
property alias minimumHorizontalSpacing: iconTileGrid.minimumHorizontalSpacing
46
property alias maximumNumberOfColumns: iconTileGrid.maximumNumberOfColumns
47
property alias columns: iconTileGrid.columns
48
property alias delegateWidth: iconTileGrid.delegateWidth
49
property alias delegateHeight: iconTileGrid.delegateHeight
50
property alias verticalSpacing: iconTileGrid.verticalSpacing
51
property alias delegate: iconTileGrid.delegate
52
property alias cellWidth: iconTileGrid.cellWidth
53
property alias cellHeight: iconTileGrid.cellHeight
54
readonly property alias flicking: iconTileGrid.flicking
55
readonly property alias moving: iconTileGrid.moving
56
readonly property alias pressDelay: iconTileGrid.pressDelay
58
height: childrenRect.height
63
anchors { left: parent.left; right: parent.right }
64
height: totalContentHeight
67
minimumHorizontalSpacing: units.gu(0.5)
68
maximumNumberOfColumns: 6
69
delegateWidth: units.gu(11)
70
delegateHeight: units.gu(9.5)
71
verticalSpacing: units.gu(2)
73
model: LimitProxyModel {
75
limit: (filter) ? collapsedRowCount * iconTileGrid.columns : -1
84
top: iconTileGrid.bottom
86
visible: (expandable && filter && model.count > collapsedRowCount * iconTileGrid.columns)
87
height: (visible) ? childrenRect.height + units.gu(2) : 0
91
objectName: "filterToggleButton"
95
horizontalCenter: parent.horizontalCenter
111
borderSource: ItemStyle.style.borderPressed
112
opacity: button.pressed ? 1.0 : 0.0
113
Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
118
verticalCenter: parent.verticalCenter
121
leftMargin: units.gu(1)
122
rightMargin: units.gu(1)
124
text: (filter) ? "+ View all (" + model.count + ")" : "- Show fewer"
130
elide: Text.ElideMiddle
131
horizontalAlignment: Text.AlignHCenter
134
onClicked: filter = !filter