1/****************************************************************************
2**
3** Copyright (C) 2017 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the ActiveQt framework of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:BSD$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** BSD License Usage
18** Alternatively, you may use this file under the terms of the BSD license
19** as follows:
20**
21** "Redistribution and use in source and binary forms, with or without
22** modification, are permitted provided that the following conditions are
23** met:
24** * Redistributions of source code must retain the above copyright
25** notice, this list of conditions and the following disclaimer.
26** * Redistributions in binary form must reproduce the above copyright
27** notice, this list of conditions and the following disclaimer in
28** the documentation and/or other materials provided with the
29** distribution.
30** * Neither the name of The Qt Company Ltd nor the names of its
31** contributors may be used to endorse or promote products derived
32** from this software without specific prior written permission.
33**
34**
35** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
36** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
38** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
39** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
42** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
43** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
44** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
45** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
46**
47** $QT_END_LICENSE$
48**
49**
50****************************************************************************/
51
52/*
53 ORIGINAL COPYRIGHT HEADER
54 PictureFlow - animated image show widget
55 http://pictureflow.googlecode.com
56
57 Copyright (C) 2007 Ariya Hidayat (ariya@kde.org)
58
59 Permission is hereby granted, free of charge, to any person obtaining a copy
60 of this software and associated documentation files (the "Software"), to deal
61 in the Software without restriction, including without limitation the rights
62 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
63 copies of the Software, and to permit persons to whom the Software is
64 furnished to do so, subject to the following conditions:
65
66 The above copyright notice and this permission notice shall be included in
67 all copies or substantial portions of the Software.
68
69 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
70 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
71 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
72 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
73 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
74 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
75 THE SOFTWARE.
76*/
77
78#ifndef PICTUREFLOW_H
79#define PICTUREFLOW_H
80
81#include <QWidget>
82
83class PictureFlowPrivate;
84
85/*!
86 Class PictureFlow implements an image show widget with animation effect
87 like Apple's CoverFlow (in iTunes and iPod). Images are arranged in form
88 of slides, one main slide is shown at the center with few slides on
89 the left and right sides of the center slide. When the next or previous
90 slide is brought to the front, the whole slides flow to the right or
91 the right with smooth animation effect; until the new slide is finally
92 placed at the center.
93
94 */
95class PictureFlow : public QWidget
96{
97Q_OBJECT
98
99 Q_PROPERTY(int slideCount READ slideCount WRITE setSlideCount)
100 Q_PROPERTY(int currentSlide READ currentSlide WRITE setCurrentSlide)
101 Q_PROPERTY(QSize slideSize READ slideSize WRITE setSlideSize)
102 Q_PROPERTY(int zoomFactor READ zoomFactor WRITE setZoomFactor)
103
104public:
105 /*!
106 Creates a new PictureFlow widget.
107 */
108 PictureFlow(QWidget* parent = 0);
109
110 /*!
111 Destroys the widget.
112 */
113 ~PictureFlow();
114
115 /*!
116 Returns the total number of slides.
117 */
118 int slideCount() const;
119
120 /*!
121 Sets the total number of slides.
122 */
123 void setSlideCount(int count);
124
125 /*!
126 Returns the dimension of each slide (in pixels).
127 */
128 QSize slideSize() const;
129
130 /*!
131 Sets the dimension of each slide (in pixels).
132 */
133 void setSlideSize(QSize size);
134
135 /*!
136 Sets the zoom factor (in percent).
137 */
138 void setZoomFactor(int zoom);
139
140 /*!
141 Returns the zoom factor (in percent).
142 */
143 int zoomFactor() const;
144
145 /*!
146 Clears any caches held to free up memory
147 */
148 void clearCaches();
149
150 /*!
151 Returns QImage of specified slide.
152 This function will be called only whenever necessary, e.g. the 100th slide
153 will not be retrived when only the first few slides are visible.
154 */
155 virtual QImage slide(int index) const;
156
157 /*!
158 Sets an image for specified slide. If the slide already exists,
159 it will be replaced.
160 */
161 virtual void setSlide(int index, const QImage& image);
162
163 virtual void setSlideCaption(int index, QString caption);
164
165 /*!
166 Sets a pixmap for specified slide. If the slide already exists,
167 it will be replaced.
168 */
169 virtual void setSlide(int index, const QPixmap& pixmap);
170
171 /*!
172 Returns the index of slide currently shown in the middle of the viewport.
173 */
174 int currentSlide() const;
175
176public slots:
177
178 /*!
179 Sets slide to be shown in the middle of the viewport. No animation
180 effect will be produced, unlike using showSlide.
181 */
182 void setCurrentSlide(int index);
183
184 /*!
185 Clears images of all slides.
186 */
187 void clear();
188
189 /*!
190 Rerender the widget. Normally this function will be automatically invoked
191 whenever necessary, e.g. during the transition animation.
192 */
193 void render();
194
195 /*!
196 Shows previous slide using animation effect.
197 */
198 void showPrevious();
199
200 /*!
201 Shows next slide using animation effect.
202 */
203 void showNext();
204
205 /*!
206 Go to specified slide using animation effect.
207 */
208 void showSlide(int index);
209
210signals:
211 void itemActivated(int index);
212 void inputReceived();
213
214protected:
215 void paintEvent(QPaintEvent *event) override;
216 void keyPressEvent(QKeyEvent *event) override;
217 void mouseMoveEvent(QMouseEvent *event) override;
218 void mousePressEvent(QMouseEvent *event) override;
219 void mouseReleaseEvent(QMouseEvent *event) override;
220 void resizeEvent(QResizeEvent *event) override;
221 void timerEvent(QTimerEvent *event) override;
222
223private:
224 PictureFlowPrivate* d;
225};
226
227#endif // PICTUREFLOW_H
228

source code of qtsvg/examples/svg/embedded/fluidlauncher/pictureflow.h