--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/bubblemanager2/bubblestyle/src/bubbleanimiconitem.cpp Fri Mar 19 09:28:42 2010 +0200
@@ -0,0 +1,106 @@
+/*!
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Animated icon.
+*
+*/
+
+#include <QTimer>
+#include <QGraphicsSceneResizeEvent>
+#include "bubbleanimiconitem.h"
+
+BubbleAnimIconItem::BubbleAnimIconItem( int interval, QGraphicsItem* parent )
+ : HbIconItem( parent ), mInterval(interval), mAnimationTimerId(0)
+{
+ reset();
+}
+
+BubbleAnimIconItem::~BubbleAnimIconItem()
+{
+ reset();
+}
+
+void BubbleAnimIconItem::appendIcon( const QString& iconName )
+{
+ HbIcon* icon = new HbIcon(iconName);
+ icon->setSize(rect().size());
+ mFrames.append(icon);
+ if (mFrames.count()==1) {
+ setIcon(*icon); // initial frame
+ }
+}
+
+void BubbleAnimIconItem::startAnimation(int interval)
+{
+ mAnimationTimerId = startTimer(interval);
+}
+
+void BubbleAnimIconItem::stopAnimation()
+{
+ if ( mAnimationTimerId ) {
+ killTimer(mAnimationTimerId);
+ mAnimationTimerId = 0;
+ }
+}
+
+void BubbleAnimIconItem::reset()
+{
+ stopAnimation();
+ foreach (HbIcon* icon, mFrames) {
+ delete icon;
+ }
+ mFrames.clear();
+ mCurrentFrame = 0;
+}
+
+void BubbleAnimIconItem::timerEvent(QTimerEvent *event)
+{
+ Q_UNUSED(event)
+
+ mCurrentFrame = (mCurrentFrame + 1) % mFrames.count();
+ setIcon(*mFrames.at(mCurrentFrame));
+ update();
+}
+
+void BubbleAnimIconItem::paint(
+ QPainter *painter,
+ const QStyleOptionGraphicsItem *option,
+ QWidget *widget )
+{
+ HbIconItem::paint( painter, option, widget );
+
+ if ( mFrames.count() && mAnimationTimerId == 0 ) {
+ startAnimation(mInterval); // begin animation
+ }
+}
+
+QVariant BubbleAnimIconItem::itemChange(
+ GraphicsItemChange change,
+ const QVariant& value )
+{
+ if (change==QGraphicsItem::ItemVisibleHasChanged) {
+ if (mAnimationTimerId && value.toBool()==false) {
+ stopAnimation(); // stop animation when going invisible
+ }
+ }
+
+ return HbIconItem::itemChange( change, value );
+}
+
+void BubbleAnimIconItem::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+ HbIconItem::resizeEvent(event);
+ foreach (HbIcon* icon, mFrames) {
+ icon->setSize(event->newSize());
+ }
+}