@@ -41,6 +41,12 @@ Item {
4141
4242 /* Maximum number of rows to be show when filter=true. */
4343 property int collapsedRowCount: 2
44+ readonly property int collapsedHeight: {
45+ return iconTileGrid.contentHeightForRows(Math.min(collapsedRowCount, Math.ceil(model.count / columns))) //
46+ }
47+ readonly property int uncollapsedHeight: {
48+ return iconTileGrid.contentHeightForRows(Math.ceil(model.count / columns)) //
49+ }
4450
4551 property alias minimumHorizontalSpacing: iconTileGrid.minimumHorizontalSpacing
4652 property alias maximumNumberOfColumns: iconTileGrid.maximumNumberOfColumns
@@ -55,7 +61,26 @@ Item {
5561 readonly property alias moving: iconTileGrid.moving
5662 readonly property alias pressDelay: iconTileGrid.pressDelay
5763
58− height: childrenRect.height
64+ height: !filterAnimation.running ? childrenRect.height : height
65+ clip: filterAnimation.running
66+
67+ NumberAnimation {
68+ property bool filterEndValue
69+ id: filterAnimation
70+ target: root
71+ property: "height"
72+ duration: 200
73+ to: filterEndValue ? root.collapsedHeight : root.uncollapsedHeight
74+ easing.type: Easing.InOutQuad
75+ onStopped: {
76+ root.filter = filterEndValue;
77+ }
78+ }
79+
80+ function startFilterAnimation(filter) {
81+ filterAnimation.filterEndValue = filter
82+ filterAnimation.start();
83+ }
5984
6085 ResponsiveGridView {
6186 id: iconTileGrid
@@ -72,7 +97,7 @@ Item {
7297
7398 model: LimitProxyModel {
7499 model: root.model
75− limit: (filter) ? collapsedRowCount * iconTileGrid.columns : -1
100+ limit: (filter && !filterAnimation.running) ? collapsedRowCount * iconTileGrid.columns : -1
76101 }
77102
78103 }