1
/****************************************************************************
3
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4
** All rights reserved.
5
** Contact: Nokia Corporation (qt-info@nokia.com)
7
** This file is part of the QtDeclarative module of the Qt Toolkit.
9
** $QT_BEGIN_LICENSE:LGPL$
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.
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.
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.
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.
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.
42
** If you are unsure which license is appropriate for your use, please
43
** contact the sales department at qt-sales@nokia.com.
46
****************************************************************************/
49
import "../common" as Common
54
property variant frontContainer: containerFront
55
property string photoTitle: ""
56
property string photoDate
57
property string photoUrl
58
property variant prevScale: 1.0
64
origin.x: container.width / 2;
69
id: containerFront; anchors.fill: container
73
color: "black"; opacity: 0.4
79
left: parent.left; leftMargin: 20
80
right: parent.right; rightMargin: 20
81
top: parent.top; topMargin: 180
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 }
89
anchors.fill: container
91
Rectangle { anchors.fill: parent; color: "black"; opacity: 0.4 }
94
anchors.centerIn: parent; width: 200; height: 18
95
progress: bigImage.progress; visible: bigImage.status != Image.Ready
99
id: flickable; anchors.fill: parent; clip: true
100
contentWidth: imageContainer.width; contentHeight: imageContainer.height
104
width: Math.max(bigImage.width * bigImage.scale, flickable.width);
105
height: Math.max(bigImage.height * bigImage.scale, flickable.height);
108
id: bigImage; // source: container.photoUrl
109
source: container.photoUrl
111
anchors.centerIn: parent; smooth: !flickable.movingVertically
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;
125
text: "Image Unavailable"
126
visible: bigImage.status == Image.Error
127
anchors.centerIn: parent; color: "white"; font.bold: true
131
id: slider; visible: { bigImage.status == Image.Ready && maximum > minimum }
133
bottom: parent.bottom; bottomMargin: 65
134
left: parent.left; leftMargin: 25
135
right: parent.right; rightMargin: 25
138
if (bigImage.width * value > flickable.width) {
139
var xoff = (flickable.width/2 + flickable.contentX) * value / prevScale;
140
flickable.contentX = xoff - flickable.width/2;
142
if (bigImage.height * value > flickable.height) {
143
var yoff = (flickable.height/2 + flickable.contentY) * value / prevScale;
144
flickable.contentY = yoff - flickable.height/2;
153
PropertyChanges { target: itemRotation; angle: 180 }
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 }