radioapp/radiowidgets/inc/radiostationcarousel.h
branchRCL_3
changeset 19 cce62ebc198e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/inc/radiostationcarousel.h	Tue Aug 31 15:15:02 2010 +0300
@@ -0,0 +1,234 @@
+/*
+* 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:
+*
+*/
+
+#ifndef RADIOSTATIONCAROUSEL_H
+#define RADIOSTATIONCAROUSEL_H
+
+// System includes
+#include <HbScrollArea>
+#include <HbIcon>
+#include <QWeakPointer>
+
+// User includes
+#include "radiocarouselitemobserver.h"
+#include "radiowidgetsexport.h"
+#include "radiofrequencystripdef.h"
+#include "radio_global.h"
+
+// Forward declarations
+class RadioUiEngine;
+class RadioUiLoader;
+class RadioCarouselItem;
+class RadioStation;
+class RadioStationModel;
+class RadioStationCarousel;
+class RadioCarouselAnimator;
+class HbLabel;
+class HbMenu;
+
+namespace CarouselInfoText
+{
+    enum Type
+    {
+        None,
+        ConnectAntenna,
+        NoFavorites,
+        FavoriteIconHint,
+        Seeking,
+        Scanning,
+        ManualSeek
+    };
+}
+
+// Class declaration
+class WIDGETS_DLL_EXPORT RadioStationCarousel : public HbScrollArea
+                                              , public RadioCarouselItemObserver
+{
+    Q_OBJECT
+    Q_PROPERTY(HbIcon favoriteIcon READ favoriteIcon WRITE setFavoriteIcon)
+    Q_PROPERTY(HbIcon nonFavoriteIcon READ nonFavoriteIcon WRITE setNonFavoriteIcon)
+    Q_PROPERTY( int autoScrollTime READ autoScrollTime WRITE setAutoScrollTime )
+
+    friend class RadioCarouselAnimator;
+    friend class RadioCarouselItem;
+
+public:
+
+    enum ScrollFlag
+    {
+        Default             = 0,
+        NoAnim              = 1 << 0,
+        NoSignal            = 1 << 1,
+        IgnoreCenter        = 1 << 2,
+        UpdateItem          = 1 << 3,
+        FromPanGesture      = 1 << 4,
+        FromSwipeGesture    = 1 << 5
+    };
+    Q_DECLARE_FLAGS( ScrollMode, ScrollFlag )
+
+    RadioStationCarousel( QGraphicsItem* parent = 0 );
+
+    void setFavoriteIcon( const HbIcon& favoriteIcon );
+    HbIcon favoriteIcon() const;
+
+    void setNonFavoriteIcon( const HbIcon& nonFavoriteIcon );
+    HbIcon nonFavoriteIcon() const;
+
+    void setAutoScrollTime( const int time );
+    int autoScrollTime() const;
+
+    void init( RadioUiLoader& uiLoader, RadioUiEngine* uiEngine );
+
+    void setFrequency( uint frequency, int reason, Scroll::Direction direction = Scroll::Shortest );
+
+    RadioUiEngine* uiEngine();
+
+    bool isAntennaAttached() const;
+
+    void setScanningMode( bool scanning );
+    bool isInScanningMode() const;
+
+    void cleanRdsData();
+
+    void animateNewStation( const RadioStation& station );
+    void cancelAnimation();
+
+    void setInfoText( CarouselInfoText::Type type );
+    void clearInfoText();
+
+    void setManualSeekMode( bool manualSeekActive );
+
+    void drawOffScreen( QPainter& painter );
+
+    void setLandscape( bool landscape );
+
+signals:
+
+    void frequencyChanged( uint frequency, int reason, int direction );
+    void skipRequested( int skipMode );
+    void scanAnimationFinished();
+
+public slots:
+
+    void updateAntennaStatus( bool connected );
+
+private slots:
+
+    void scrollPosChanged( const QPointF& newPosition );
+    void adjustAfterScroll();
+    void update( const RadioStation& station );
+    void updateRadioText( const RadioStation& station );
+    void updateStations();
+    void timerFired();
+
+#ifdef USE_DEBUGGING_CONTROLS
+    void setRdsAvailable( bool available );
+#endif // USE_DEBUGGING_CONTROLS
+
+private:
+
+// from base class QGraphicsItem
+
+    void mousePressEvent( QGraphicsSceneMouseEvent* event );
+    void resizeEvent( QGraphicsSceneResizeEvent* event );
+    void showEvent( QShowEvent* event );
+    void gestureEvent( QGestureEvent* event );
+
+// from base class RadioCarouselItemObserver
+
+    void handleIconClicked( const RadioStation& station );
+    void handleRadiotextClicked( const RadioStation& station );
+    void handleUrlClicked( const RadioStation& station );
+    QString localizeGenre( int genre );
+    bool isInManualSeek() const;
+    RadioStation findStation( uint frequency );
+
+// New functions
+
+    bool isInitialized() const;
+
+    void setCenterIndex( int index, ScrollMode mode = Default );
+
+    void scrollToIndex( int index, Scroll::Direction direction = Scroll::Shortest,
+                        ScrollMode mode = Default );
+
+    int calculateDifference( int targetIndex, Scroll::Direction& direction );
+
+    bool isScrollingAllowed() const;
+
+    void adjustPos( int offset );
+
+    int trimIndex( int index );
+
+    int prevIndex( int index );
+    int nextIndex( int index );
+
+    void skip( StationSkip::Mode mode );
+
+private: // data
+
+    enum TimerMode { NoTimer, SetFrequency, RtPlusCheck, InfoText, FavoriteHintShow, FavoriteHintHide };
+
+    RadioUiEngine*                      mUiEngine;
+
+    int                                 mAutoScrollTime;
+
+    HbIcon                              mFavoriteIcon;
+    HbIcon                              mNonFavoriteIcon;
+
+    QTimer*                             mGenericTimer;
+    TimerMode                           mTimerMode;
+
+    QString                             mRadioTextHolder;
+
+    QWeakPointer<RadioCarouselAnimator> mAnimator;
+
+    HbLabel*                            mInfoText;
+
+    HbMenu*                             mRadiotextPopup;
+
+    HbWidget*                           mContainer;
+
+    enum CarouselItem                   { LeftItem, CenterItem, RightItem };
+    RadioCarouselItem*                  mItems[3];
+
+    int                                 mMidScrollPos;
+    int                                 mMaxScrollPos;
+
+    int                                 mCurrentIndex;
+    int                                 mTargetIndex;
+    bool                                mIsCustomFreq;
+
+    CarouselInfoText::Type              mInfoTextType;
+
+    RadioStationModel*                  mModel;
+
+    bool                                mPosAdjustmentDisabled;
+
+    Scroll::Direction                   mScrollDirection;
+
+    bool                                mManualSeekMode;
+
+#ifdef USE_DEBUGGING_CONTROLS
+    RadioFadingLabel*                   mRdsLabel;
+#endif
+
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS( RadioStationCarousel::ScrollMode )
+
+#endif // RADIOSTATIONCAROUSEL_H