be986c94291b8be7f57d567d028d15d1e5d4dcdb
[profile/ivi/qtdeclarative.git] / examples / declarative / modelviews / visualdatamodel / slideshow.qml
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: http://www.qt-project.org/
6 **
7 ** This file is part of the examples of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:BSD$
10 ** You may use this file under the terms of the BSD license as follows:
11 **
12 ** "Redistribution and use in source and binary forms, with or without
13 ** modification, are permitted provided that the following conditions are
14 ** met:
15 **   * Redistributions of source code must retain the above copyright
16 **     notice, this list of conditions and the following disclaimer.
17 **   * Redistributions in binary form must reproduce the above copyright
18 **     notice, this list of conditions and the following disclaimer in
19 **     the documentation and/or other materials provided with the
20 **     distribution.
21 **   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
22 **     the names of its contributors may be used to endorse or promote
23 **     products derived from this software without specific prior written
24 **     permission.
25 **
26 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
37 ** $QT_END_LICENSE$
38 **
39 ****************************************************************************/
40
41 import QtQuick 2.0
42 import QtQuick.XmlListModel 2.0
43
44 Rectangle {
45     id: root
46
47     property Item displayItem: null
48
49     width: 300; height: 400
50
51     color: "black"
52
53     VisualDataModel {
54         id: visualModel
55
56         model: XmlListModel {
57             source: "http://api.flickr.com/services/feeds/photos_public.gne?format=rss2"
58             query: "/rss/channel/item"
59             namespaceDeclarations: "declare namespace media=\"http://search.yahoo.com/mrss/\";"
60
61             XmlRole { name: "imagePath"; query: "media:thumbnail/@url/string()" }
62             XmlRole { name: "url"; query: "media:content/@url/string()" }
63         }
64
65         delegate: Item {
66             id: delegateItem
67
68             width: 76; height: 76
69
70             Rectangle {
71                 id: image
72                 x: 0; y: 0; width: 76; height: 76
73                 border.width: 1
74                 border.color: "white"
75                 color: "black"
76
77                 Image {
78                     anchors.fill: parent
79                     anchors.leftMargin: 1
80                     anchors.topMargin: 1
81
82                     source: imagePath
83                     fillMode: Image.PreserveAspectFit
84
85                 }
86
87                 MouseArea {
88                     id: clickArea
89                     anchors.fill: parent
90
91                     onClicked: root.displayItem = root.displayItem !== delegateItem ? delegateItem : null
92                 }
93
94                 states: [
95                     State {
96                         when: root.displayItem === delegateItem
97                         name: "inDisplay";
98                         ParentChange { target: image; parent: imageContainer; x: 75; y: 75; width: 150; height: 150 }
99                         PropertyChanges { target: image; z: 2 }
100                         PropertyChanges { target: delegateItem; VisualDataModel.inItems: false }
101                     },
102                     State {
103                         when: root.displayItem !== delegateItem
104                         name: "inList";
105                         ParentChange { target: image; parent: delegateItem; x: 2; y: 2; width: 75; height: 75 }
106                         PropertyChanges { target: image; z: 1 }
107                         PropertyChanges { target: delegateItem; VisualDataModel.inItems: true }
108                     }
109                 ]
110
111                 transitions: [
112                     Transition {
113                         from: "inList"
114                         SequentialAnimation {
115                             PropertyAction { target: delegateItem; property: "VisualDataModel.inPersistedItems"; value: true }
116                             ParentAnimation {
117                                 target: image;
118                                 via: root
119                                 NumberAnimation { target: image; properties: "x,y,width,height"; duration: 1000 }
120                             }
121                         }
122                     }, Transition {
123                         from: "inDisplay"
124                         SequentialAnimation {
125                             ParentAnimation {
126                                 target: image
127                                 NumberAnimation { target: image; properties: "x,y,width,height"; duration: 1000 }
128                             }
129                             PropertyAction { target: delegateItem; property: "VisualDataModel.inPersistedItems"; value: false }
130                         }
131                     }
132                 ]
133             }
134         }
135     }
136
137
138     PathView {
139         id: imagePath
140
141         anchors { left: parent.left; top: imageContainer.bottom; right: parent.right; bottom: parent.bottom }
142         model: visualModel
143
144         pathItemCount: 7
145         path: Path {
146             startX: -50; startY: 0
147             PathQuad { x: 150; y: 50; controlX: 0; controlY: 50 }
148             PathQuad { x: 350; y: 0; controlX: 300; controlY: 50 }
149         }
150     }
151
152     Item {
153         id: imageContainer
154         anchors { fill: parent; bottomMargin: 100 }
155     }
156 }