2 * Copyright (C) 2014 Canonical, Ltd.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 import Ubuntu.Components 1.1
19 import "../../Components"
21 /*! This preview widget shows a horizontal list of images.
22 * The URIs for the images should be an array in widgetData["sources"].
27 implicitHeight: units.gu(22)
29 property Item rootItem: QuickUtils.rootItem(root)
32 id: previewImageListView
33 objectName: "previewImageListView"
36 orientation: ListView.Horizontal
37 cacheBuffer: width * 3
38 model: root.widgetData["sources"]
42 objectName: "placeholderScreenshot"
48 source: "broken_image"
49 initialWidth: units.gu(13)
50 visible: previewImageListView.count == 0
54 objectName: "previewImage" + index
59 source: modelData ? modelData : ""
61 initialWidth: units.gu(13)
62 borderSource: mouseArea.pressed ? "radius_pressed.sci" : "radius_idle.sci"
68 slideShowListView.currentIndex = index;
69 slideShow.initialX = rootItem.mapFromItem(parent, 0, 0).x
70 slideShow.initialY = rootItem.mapFromItem(parent, 0, 0).y
71 slideShow.visible = true;
79 objectName: "slideShow"
81 readonly property real initialScale: previewImageListView.height / rootItem.height
82 readonly property real scaleProgress: (scale - initialScale) / (1.0 - initialScale)
83 property real initialX: 0
84 property real initialY: 0
90 clip: visible && scale < 1.0
91 scale: visible ? 1.0 : initialScale
92 transformOrigin: Item.TopLeft
93 transform: Translate {
94 x: slideShow.initialX - slideShow.initialX * slideShow.scaleProgress
95 y: slideShow.initialY - slideShow.initialY * slideShow.scaleProgress
98 radius: units.gu(1) - units.gu(1) * slideShow.scaleProgress
101 enabled: !slideShow.visible
102 UbuntuNumberAnimation { duration: UbuntuAnimation.FastDuration }
106 id: slideShowListView
107 objectName: "slideShowListView"
109 orientation: ListView.Horizontal
110 highlightRangeMode: ListView.StrictlyEnforceRange
111 highlightMoveDuration: 0
112 snapMode: ListView.SnapOneItem
113 boundsBehavior: Flickable.DragAndOvershootBounds
114 model: root.widgetData["sources"]
120 bottom: parent.bottom
122 width: slideShow.width
123 source: modelData ? modelData : ""
124 fillMode: Image.PreserveAspectFit
125 sourceSize { width: screenshot.width; height: screenshot.height }
130 onClicked: slideShowHeader.shown = !slideShowHeader.shown
137 property bool shown: true
145 opacity: slideShow.scaleProgress > 0.6 && shown ? 0.8 : 0
148 Behavior on opacity {
149 UbuntuNumberAnimation { duration: UbuntuAnimation.SnapDuration }
153 id: slideShowCloseButton
154 objectName: "slideShowCloseButton"
157 bottom: parent.bottom
162 onClicked: slideShow.visible = false
166 color: Qt.rgba(1.0, 1.0, 1.0, 0.3)
167 visible: slideShowCloseButton.pressed
172 anchors.centerIn: parent
175 color: Theme.palette.normal.foregroundText