internetradio2.0/uicontrolsinc/irstationlogocontrol.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 19 Apr 2010 14:01:53 +0300
changeset 0 09774dfdd46b
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* Copyright (c) 2008-2008 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:  Control for single station logo
*
*/


#ifndef C_CIRSTATIONLOGOCONTROL_H
#define C_CIRSTATIONLOGOCONTROL_H

#include <alf/alfcontrol.h>

#include "irstationinformationdata.h"
#include "irimageconverterobserver.h"

class CAlfImageVisual;
class CIRImageConverter;
class CIRStationLogoData;
class MIRLogoControlObserver;

/**
 * Station Logo Control
 *
 * @since   S60 v3.2
 */
class CIRStationLogoControl : public CAlfControl, 
                              public MIRImageConverterObserver
    {
public:

    /**
     * Two-phased constructor.
     * Adds the control to the control group and to layout hierarchy.
     *
     * @param aAlfEnv The Alfred environment.
     * @param aControlGroupId The control group that this control is to be added to.
     * @param aParentLayout The parent layout for the visuals.
     */
    static CIRStationLogoControl* NewL( CAlfEnv& aAlfEnv, TInt aControlGroupId, 
    									CAlfLayout* aParentLayout = NULL );

    /**
     * Destructor.
     */
    ~CIRStationLogoControl();
    
    /**
     * Prepares the logo graphics for specified ID.
     * 
     * @param aId The identifier for the logo.
     */
    void PrepareLogoL( TInt aId );
    
    /**
     * Switches to specified logo.
     * 
     * @param aId   The identifier for the logo.
     */
    TBool SwitchToLogoL( TInt aId );
    
    /**
     * Sets the raw data for all the logos.
     * 
     * @param aIdArray Identifiers to be used for the logos.
     * @param aRawData The raw graphics data for each logo.
     */
    void SetLogosL( const RArray<TInt>& aIdArray, const CPtrC8Array& aRawData );
    
    /**
     * Updates one logo.
     * 
     * @param   aId         The ID of the logo to be updated. 
     *                      If such ID is not found, it is added.
     * @param   aRawData    The raw data of the logo.
     *                      If the data is a KNullDesC8, it is removed.
     */
    void UpdateLogoL( TInt aId, const TDesC8& aRawData );
    
    
    /**
     * Sets logo fade style.
     * 
     * @param   aFadeStyle  The style of the logo fading. 
     */
    void SetLogoFadeStyle( TIRFadeStyle aFadeStyle );
    /**
     * Sets the observer for this control.
     * 
     * @param   aObserver  The observer for this control. 
     */
    void SetLogoControlObserver( MIRLogoControlObserver& aObserver );

    // from CAlfControl
    void VisualLayoutUpdated( CAlfVisual& aVisual );


    // from MVRImageConverterObserver
    void HandleImageConversionEventL( MIRImageConverterObserver::TIRImageConversionEvent aEvent, 
                                      TInt aId, 
                                      TInt aError );
     void FadeOutLogo(TInt aId);                               

private: // Methods

    /**
     * The types of delayed showing of logo.
     */
    enum TIRLogoFadeDelayType
        {
        EIRLogoNoDelay,
        EIRDelayedTextureImage,
        EIRDelayedDefaultImage
        };

    /**
     * Default constructor.
     */
    CIRStationLogoControl();

    /**
     * Second phase constructor.
     *
     * @param aAlfEnv The Alfred environmennt.
     * @param aControlGroupId The control group ID for the controls.
     * @param aParentLayout The parent layout for the visuals.
     */
    void ConstructL( CAlfEnv& aAlfEnv, TInt aControlGroupId, CAlfLayout* aParentLayout );

    /**
     * Provides the station logo data for specified id.
     * 
     * @param aId The identifier for the logo.
     */
    CIRStationLogoData* LogoDataForId( TInt aId );

    /**
     * Starts to convert the graphics for specified logo
     * 
     * @param aLogoData The logo data to be converted
     */
    void StartConversionL( CIRStationLogoData& aLogoData );

    /**
     * Fades the station logo in.
     * 
     * @param aVisual The logo to be faded in.
     */
    void FadeInStationLogoL( CAlfVisual& aVisual );
    
    /**
     * Fades the current logo out. If logo is not the default logo, deletes it's data
     * after the fading (ansynchronously).
     * 
     * @param aVisual The logo to be faded out.
     */
    void FadeOutCurrentLogo( CAlfVisual& aVisual );

    /**
     * Returns target point for logo fade out.
     * 
     * @param aVisual The visual to be faded out.
     * @return Target point.
     */
    TAlfTimedPoint FadeOutTargetPoint( CAlfVisual& aVisual ) const;

    /**
     * Returns start point for logo fade in.
     * 
     * @param aVisual The visual to be faded in.
     * @return Start point.
     */
    TAlfTimedPoint FadeInStartPoint( CAlfVisual& aVisual ) const;


    /**
     * Updates iLogodata Array.
     */
     void DestroyPreviousLogosL( const RArray<TInt>& aIdArray, const CPtrC8Array& aRawData );
     /**
     * Updates iLogodata Array.
     */
     void DefaultlogoHandlingL( const RArray<TInt>& aIdArray, const CPtrC8Array& aRawData );


private: // Members

    /**
     * The image converter.
     * Owned.
     */
    CIRImageConverter* iCurrentImageConverter;

    /**
     * The logo data for all stations.
     * Owned.
     */
    RPointerArray<CIRStationLogoData> iLogoData;

    /**
     * The parent layout for the logos.
     * Not owned.
     */
    CAlfDeckLayout* iDeck;

    /**
     * The size that is used for image conversions
     */
    TSize iVisualSize;
    
    /**
     * The mif bitmap id for default logo
     */
    TInt iBitmapId;
    
    /**
     * The mif mask id for default logo
     */
    TInt iMaskId;
    
    /**
     * The ID for the current logo. KErrNotFound for the default logo
     */
    TInt iCurrentId;
    
    /**
     * The fading identification for situations when the graphics aren't ready
     */
    TIRLogoFadeDelayType iDelayedFadeIn;

    /**
     * Style of the logo fading.
     */
    TIRFadeStyle iFadeStyle;
    /**
     * Used to store logo.
     */
    TInt iCount;
    /**
     * Used for logo storage.
     */
     TInt iRet;
     /**
     * Used for logo storage.
     */
     TInt iLogoDisplay;
    /**
     * Used for Handling Error Conditions
     * During Logo Conversion.
     */
     TInt iError;
    /**
     * Used for Handling Logo FadeOut
     */
     TBool iFadeOut;
     
    MIRLogoControlObserver* iLogoControlObserver;
    };

#endif // C_CIRSTATIONLOGOCONTROL_H