--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browsercore/appfw/Common/PictureFlow.h Tue May 04 12:39:35 2010 +0300
@@ -0,0 +1,379 @@
+/*
+ PictureFlow - animated image show widget
+ http://pictureflow.googlecode.com
+
+ Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ Copyright (C) 2008 Ariya Hidayat (ariya@kde.org)
+ Copyright (C) 2007 Ariya Hidayat (ariya@kde.org)
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+
+#ifndef PICTUREFLOW_H
+#define PICTUREFLOW_H
+
+#include <qwidget.h>
+#include "FlowInterface.h"
+
+namespace WRT {
+
+class PictureFlowPrivate;
+
+enum ReflectionEffect
+{
+ NoReflection,
+ PlainReflection,
+ BlurredReflection
+};
+
+/*!
+ Class PictureFlow implements an image show widget with animation effect
+ like Apple's CoverFlow (in iTunes and iPod). Images are arranged in form
+ of slides, one main slide is shown at the center with few slides on
+ the left and right sides of the center slide. When the next or previous
+ slide is brought to the front, the whole slides flow to the right or
+ the right with smooth animation effect; until the new slide is finally
+ placed at the center.
+
+ */
+class PictureFlow : public FlowInterface
+{
+Q_OBJECT
+
+ Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor)
+ Q_PROPERTY(QSize slideSize READ slideSize WRITE setSlideSize)
+ Q_PROPERTY(int slideCount READ slideCount)
+ Q_PROPERTY(int centerIndex READ centerIndex WRITE setCenterIndex)
+
+public:
+
+
+
+ /*!
+ Creates a new PictureFlow widget.
+ */
+ PictureFlow(QWidget* parent = 0);
+
+ /*!
+ Destroys the widget.
+ */
+ ~PictureFlow();
+
+ /*!
+ Returns the background color.
+ */
+ QColor backgroundColor() const;
+
+ /*!
+ Sets the background color. By default it is black.
+ */
+ void setBackgroundColor(const QColor& c);
+
+ /*!
+ Returns the dimension of each slide (in pixels).
+ */
+ QSize slideSize() const;
+
+ /*!
+ Sets the dimension of each slide (in pixels).
+ */
+ void setSlideSize(QSize size);
+
+ /*!
+ Returns the total number of slides.
+ */
+ int slideCount() const;
+
+ /*!
+ Returns QImage of specified slide.
+ */
+ QImage slide(int index) const;
+
+ /*!
+ Returns the index of slide currently shown in the middle of the viewport.
+ */
+ int centerIndex() const;
+
+ /*!
+ Return true if slide animation is ongoing
+ */
+ bool slideAnimationOngoing() const;
+
+ /*!
+ Returns the effect applied to the reflection.
+ */
+ ReflectionEffect reflectionEffect() const;
+
+ /*!
+ Sets the effect applied to the reflection. The default is PlainReflection.
+ */
+ void setReflectionEffect(ReflectionEffect effect);
+
+ QRect centralRect() const;
+
+ void init();
+
+public slots:
+
+ /*!
+ Adds a new slide.
+ */
+ void addSlide(const QImage& image);
+
+ /*!
+ Adds a new slide.
+ */
+ void addSlide(const QPixmap& pixmap);
+
+ /*!
+ Sets an image for specified slide. If the slide already exists,
+ it will be replaced.
+ */
+ void setSlide(int index, const QImage& image);
+
+ /*!
+ Sets a pixmap for specified slide. If the slide already exists,
+ it will be replaced.
+ */
+ void setSlide(int index, const QPixmap& pixmap);
+
+ /*!
+ Sets slide to be shown in the middle of the viewport. No animation
+ effect will be produced, unlike using showSlide.
+ */
+ void setCenterIndex(int index);
+
+ /*!
+ Clears all slides.
+ */
+ void clear();
+
+ /*!
+ Shows previous slide using animation effect.
+ */
+ void showPrevious();
+
+ /*!
+ Shows next slide using animation effect.
+ */
+ void showNext();
+
+ /*!
+ Go to specified slide using animation effect.
+ */
+ void showSlide(int index);
+
+ /*!
+ Rerender the widget. Normally this function will be automatically invoked
+ whenever necessary, e.g. during the transition animation.
+ */
+ void render();
+
+ /*!
+ Schedules a rendering update. Unlike render(), this function does not cause
+ immediate rendering.
+ */
+ void triggerRender();
+
+signals:
+ void centerIndexChanged(int index);
+ void ok(int index);
+ void cancel();
+
+protected:
+ void paintEvent(QPaintEvent *event);
+ void keyPressEvent(QKeyEvent* event);
+ void mousePressEvent(QMouseEvent* event);
+ void resizeEvent(QResizeEvent* event);
+ void mouseMoveEvent(QMouseEvent* event);
+ void mouseReleaseEvent(QMouseEvent* event);
+
+private slots:
+ void updateAnimation();
+ void scroll();
+
+private:
+ PictureFlowPrivate* d;
+ QTimer* m_scrollTimer;
+ QPoint m_lastMoveEventPos;
+};
+
+class GraphicsPictureFlow : public GraphicsFlowInterface
+{
+Q_OBJECT
+
+ Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor)
+ Q_PROPERTY(QSize slideSize READ slideSize WRITE setSlideSize)
+ Q_PROPERTY(int slideCount READ slideCount)
+ Q_PROPERTY(int centerIndex READ centerIndex WRITE setCenterIndex)
+
+public:
+
+ /*!
+ Creates a new PictureFlow widget.
+ */
+ GraphicsPictureFlow(QObject* parent = 0);
+
+ /*!
+ Destroys the widget.
+ */
+ ~GraphicsPictureFlow();
+
+ /*!
+ Returns the background color.
+ */
+ QColor backgroundColor() const;
+
+ /*!
+ Sets the background color. By default it is black.
+ */
+ void setBackgroundColor(const QColor& c);
+
+ /*!
+ Returns the dimension of each slide (in pixels).
+ */
+ QSize slideSize() const;
+
+ /*!
+ Sets the dimension of each slide (in pixels).
+ */
+ void setSlideSize(QSize size);
+
+ /*!
+ Returns the total number of slides.
+ */
+ int slideCount() const;
+
+ /*!
+ Returns QImage of specified slide.
+ */
+ QImage slide(int index) const;
+
+ /*!
+ Returns the index of slide currently shown in the middle of the viewport.
+ */
+ int centerIndex() const;
+
+ /*!
+ Return true if slide animation is ongoing
+ */
+ bool slideAnimationOngoing() const;
+
+ /*!
+ Returns the effect applied to the reflection.
+ */
+ ReflectionEffect reflectionEffect() const;
+
+ /*!
+ Sets the effect applied to the reflection. The default is PlainReflection.
+ */
+ void setReflectionEffect(ReflectionEffect effect);
+
+ QRect centralRect() const;
+
+ void init();
+
+public slots:
+
+ /*!
+ Adds a new slide.
+ */
+ void addSlide(const QImage& image);
+
+ /*!
+ Adds a new slide.
+ */
+ void addSlide(const QPixmap& pixmap);
+
+ /*!
+ Sets an image for specified slide. If the slide already exists,
+ it will be replaced.
+ */
+ void setSlide(int index, const QImage& image);
+
+ /*!
+ Sets a pixmap for specified slide. If the slide already exists,
+ it will be replaced.
+ */
+ void setSlide(int index, const QPixmap& pixmap);
+
+ /*!
+ Sets slide to be shown in the middle of the viewport. No animation
+ effect will be produced, unlike using showSlide.
+ */
+ void setCenterIndex(int index);
+
+ /*!
+ Clears all slides.
+ */
+ void clear();
+
+ /*!
+ Shows previous slide using animation effect.
+ */
+ void showPrevious();
+
+ /*!
+ Shows next slide using animation effect.
+ */
+ void showNext();
+
+ /*!
+ Go to specified slide using animation effect.
+ */
+ void showSlide(int index);
+
+ /*!
+ Rerender the widget. Normally this function will be automatically invoked
+ whenever necessary, e.g. during the transition animation.
+ */
+ void render();
+
+ /*!
+ Schedules a rendering update. Unlike render(), this function does not cause
+ immediate rendering.
+ */
+ void triggerRender();
+
+signals:
+ void centerIndexChanged(int index);
+ void ok(int index);
+ void cancel();
+
+protected:
+ void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0);
+ void resizeEvent(QGraphicsSceneResizeEvent* event);
+ void keyPressEvent(QKeyEvent* event);
+ void mouseMoveEvent(QGraphicsSceneMouseEvent* event);
+ void mousePressEvent(QGraphicsSceneMouseEvent* event);
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
+
+private slots:
+ void updateAnimation();
+ void scroll();
+
+private:
+ PictureFlowPrivate* d;
+ QTimer* m_scrollTimer;
+ QPoint m_lastMoveEventPos;
+};
+
+}
+#endif // PICTUREFLOW_H
+