~ubuntu-branches/ubuntu/quantal/qtmobility/quantal

« back to all changes in this revision

Viewing changes to examples/declarative-location/flickr/mobile/ImageDetails.qml

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2010-11-16 16:18:07 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20101116161807-k2dzt2nyse975r3l
Tags: 1.1.0-0ubuntu1
* New upstream release
* Syncronise with Debian, no remaining changes

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/****************************************************************************
2
 
**
3
 
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4
 
** All rights reserved.
5
 
** Contact: Nokia Corporation (qt-info@nokia.com)
6
 
**
7
 
** This file is part of the QtDeclarative module of the Qt Toolkit.
8
 
**
9
 
** $QT_BEGIN_LICENSE:LGPL$
10
 
** Commercial Usage
11
 
** Licensees holding valid Qt Commercial licenses may use this file in
12
 
** accordance with the Qt Solutions Commercial License Agreement provided
13
 
** with the Software or, alternatively, in accordance with the terms
14
 
** contained in a written agreement between you and Nokia.
15
 
**
16
 
** GNU Lesser General Public License Usage
17
 
** Alternatively, this file may be used under the terms of the GNU Lesser
18
 
** General Public License version 2.1 as published by the Free Software
19
 
** Foundation and appearing in the file LICENSE.LGPL included in the
20
 
** packaging of this file.  Please review the following information to
21
 
** ensure the GNU Lesser General Public License version 2.1 requirements
22
 
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23
 
**
24
 
** In addition, as a special exception, Nokia gives you certain additional
25
 
** rights.  These rights are described in the Nokia Qt LGPL Exception
26
 
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27
 
**
28
 
** GNU General Public License Usage
29
 
** Alternatively, this file may be used under the terms of the GNU
30
 
** General Public License version 3.0 as published by the Free Software
31
 
** Foundation and appearing in the file LICENSE.GPL included in the
32
 
** packaging of this file.  Please review the following information to
33
 
** ensure the GNU General Public License version 3.0 requirements will be
34
 
** met: http://www.gnu.org/copyleft/gpl.html.
35
 
**
36
 
** Please note Third Party Software included with Qt Solutions may impose
37
 
** additional restrictions and it is the user's responsibility to ensure
38
 
** that they have met the licensing requirements of the GPL, LGPL, or Qt
39
 
** Solutions Commercial license and the relevant license of the Third
40
 
** Party Software they are using.
41
 
**
42
 
** If you are unsure which license is appropriate for your use, please
43
 
** contact the sales department at qt-sales@nokia.com.
44
 
** $QT_END_LICENSE$
45
 
**
46
 
****************************************************************************/
47
 
 
48
 
import Qt 4.7
49
 
import "../common" as Common
50
 
 
51
 
Flipable {
52
 
    id: container
53
 
 
54
 
    property variant frontContainer: containerFront
55
 
    property string photoTitle: ""
56
 
    property string photoDate
57
 
    property string photoUrl
58
 
    property variant prevScale: 1.0
59
 
 
60
 
    signal closed
61
 
 
62
 
    transform: Rotation {
63
 
        id: itemRotation
64
 
        origin.x: container.width / 2;
65
 
        axis.y: 1; axis.z: 0
66
 
    }
67
 
 
68
 
    front: Item {
69
 
        id: containerFront; anchors.fill: container
70
 
 
71
 
        Rectangle {
72
 
            anchors.fill: parent
73
 
            color: "black"; opacity: 0.4
74
 
        }
75
 
 
76
 
        Column {
77
 
            spacing: 10
78
 
            anchors {
79
 
                left: parent.left; leftMargin: 20
80
 
                right: parent.right; rightMargin: 20
81
 
                top: parent.top; topMargin: 180
82
 
            }
83
 
            Text { font.bold: true; color: "white"; elide: Text.ElideRight; text: container.photoTitle }
84
 
            Text { color: "white"; elide: Text.ElideRight; text: "<b>Published:</b> " + container.photoDate }
85
 
        }
86
 
    }
87
 
 
88
 
    back: Item {
89
 
        anchors.fill: container
90
 
 
91
 
        Rectangle { anchors.fill: parent; color: "black"; opacity: 0.4 }
92
 
 
93
 
        Common.Progress {
94
 
            anchors.centerIn: parent; width: 200; height: 18
95
 
            progress: bigImage.progress; visible: bigImage.status != Image.Ready
96
 
        }
97
 
 
98
 
        Flickable {
99
 
            id: flickable; anchors.fill: parent; clip: true
100
 
            contentWidth: imageContainer.width; contentHeight: imageContainer.height
101
 
 
102
 
            Item {
103
 
                id: imageContainer
104
 
                width: Math.max(bigImage.width * bigImage.scale, flickable.width);
105
 
                height: Math.max(bigImage.height * bigImage.scale, flickable.height);
106
 
 
107
 
                Image {
108
 
                    id: bigImage; // source: container.photoUrl
109
 
                    source: container.photoUrl
110
 
                    scale: slider.value
111
 
                    anchors.centerIn: parent; smooth: !flickable.movingVertically
112
 
                    onStatusChanged : {
113
 
                        // Default scale shows the entire image.
114
 
                        if (status == Image.Ready && width != 0) {
115
 
                            slider.minimum = Math.min(flickable.width / width, flickable.height / height);
116
 
                            prevScale = Math.min(slider.minimum, 1);
117
 
                            slider.value = prevScale;
118
 
                        }
119
 
                    }
120
 
                }
121
 
            }
122
 
        }
123
 
 
124
 
        Text {
125
 
            text: "Image Unavailable"
126
 
            visible: bigImage.status == Image.Error
127
 
            anchors.centerIn: parent; color: "white"; font.bold: true
128
 
        }
129
 
 
130
 
        Common.Slider {
131
 
            id: slider; visible: { bigImage.status == Image.Ready && maximum > minimum }
132
 
            anchors {
133
 
                bottom: parent.bottom; bottomMargin: 65
134
 
                left: parent.left; leftMargin: 25
135
 
                right: parent.right; rightMargin: 25
136
 
            }
137
 
            onValueChanged: {
138
 
                if (bigImage.width * value > flickable.width) {
139
 
                    var xoff = (flickable.width/2 + flickable.contentX) * value / prevScale;
140
 
                    flickable.contentX = xoff - flickable.width/2;
141
 
                }
142
 
                if (bigImage.height * value > flickable.height) {
143
 
                    var yoff = (flickable.height/2 + flickable.contentY) * value / prevScale;
144
 
                    flickable.contentY = yoff - flickable.height/2;
145
 
                }
146
 
                prevScale = value;
147
 
            }
148
 
        }
149
 
    }
150
 
 
151
 
    states: State {
152
 
        name: "Back"
153
 
        PropertyChanges { target: itemRotation; angle: 180 }
154
 
    }
155
 
 
156
 
    transitions: Transition {
157
 
        SequentialAnimation {
158
 
            PropertyAction { target: bigImage; property: "smooth"; value: false }
159
 
            NumberAnimation { easing.type: Easing.InOutQuad; properties: "angle"; duration: 500 }
160
 
            PropertyAction { target: bigImage; property: "smooth"; value: !flickable.movingVertically }
161
 
        }
162
 
    }
163
 
}