summaryrefslogtreecommitdiffstats
path: root/examples/declarative/snow/ImageBatch.qml
blob: 1d738b2e180d6fdb5b213794da076546f634855a (plain)
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
import Qt 4.6

GridView {
    id: grid
    property int offset: 0
    property var ref
    property bool isSelected: ref.selectedItemColumn >= offset && ref.selectedItemColumn < offset + 5

    currentIndex: (ref.selectedItemColumn  - offset) + ref.selectedItemRow * 5

    property int imageWidth: ref.imageWidth
    property int imageHeight: ref.imageHeight

    width: 5 * imageWidth
    height: 4 * imageHeight
    cellWidth: imageWidth
    cellHeight: imageHeight

    states: State {
        name: "selected"; when: grid.isSelected
        PropertyChanges { target: grid; z: 150 }
    }
    transitions: Transition {
        SequentialAnimation {
            PauseAnimation { duration: 150 }
            PropertyAction { matchProperties: "z" }
        }
    }
    model: XmlListModel {
        property string tags : ""
        source: "http://api.flickr.com/services/feeds/photos_public.gne?"+(tags ? "tags="+tags+"&" : "")+"format=rss2"
        query: "/rss/channel/item"
        namespaceDeclarations: "declare namespace media=\"http://search.yahoo.com/mrss/\";"

        XmlRole { name: "url"; query: "media:content/@url/string()" }
    }

    delegate: Item {
        id: root
        property bool isSelected: GridView.isCurrentItem && grid.isSelected
        transformOrigin: Item.Center
        width: grid.imageWidth; height: grid.imageHeight;

        Image { id: flickrImage; source: url; fillMode: Image.PreserveAspectFit; smooth: true; anchors.fill: parent;
                opacity: (status == Image.Ready)?1:0; opacity: Behavior { NumberAnimation { } } }
        Loading { anchors.centerIn: parent; visible: flickrImage.status!=1 }

        states: State {
            name: "selected"
            when: root.isSelected
            PropertyChanges { target: root; scale: 3; z: 100 }
        }
        transitions: [
            Transition {
                to: "selected"
                SequentialAnimation {
                    PauseAnimation { duration: 150 }
                    PropertyAction { matchProperties: "z" }
                    NumberAnimation { matchProperties: "scale"; duration: 150; }
                }
            },
            Transition {
                from: "selected"
                SequentialAnimation {
                    NumberAnimation { matchProperties: "scale"; duration: 150 }
                    PropertyAction { matchProperties: "z" }
                }
            }
        ]
    }
}