psln/Inc/PslnGeneralThemeContainer.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:00:49 +0200
changeset 0 2f259fa3e83a
child 18 0aa5fbdfbc30
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2005-2007 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:  General theme container.
*
*/



#ifndef PSLNGENERALTHEMECONTAINER_H
#define PSLNGENERALTHEMECONTAINER_H

#include "PslnBaseContainer.h"

class CAknLocalSkinInstance;

/**
*  Observer interface for theme preview state changes.
*  aPreviewMode new mode for theme preview - ETrue preview is active
*                                            EFalse preview is now ready
*
*  @since S60 v5.0
*/
class MPslnThemePreviewObserver
    {
    public:
        virtual void HandlePreviewStateChange( const TBool& aPreviewMode ) = 0;
    };

/**
*  General theme container.
*  Contains available skins.
*
*  @since S60 v3.1
*/
class CPslnGeneralThemeContainer : public CPslnBaseContainer
    {
    public:  // Constructors and destructor   
    
        /**
        * C++ default constructor.
        */
        CPslnGeneralThemeContainer();

        /**
        * By default Symbian 2nd phase constructor is private.
        * @param aRect client rect.
        */
        void ConstructL( const TRect& aRect );        
        
        /**
        * Destructor.
        */
        virtual ~CPslnGeneralThemeContainer();
        
    public: // New methods
    
        /**
        * Is embedded link visible. 
        * @return ETrue if link should be shown.
        */
        TBool IsEmbeddedLinkVisible() const;
        
        /**
        * Updates skin list.
        */
        void UpdateSkinListItemsL( const TInt& aNewIndex );

        /**
        * From CPslnBaseContainer.
        * Constructs list box and items.
        * @param aResLbxId used resource ID.
        */
        void ConstructListBoxL( TInt aResLbxId );
        
        /**
        * From CPslnBaseContainer.
        * Creates listbox items.
        */
        void CreateListBoxItemsL();

        /**
        * Updates D column icons when skin preview activates.
        *
        * @since 5.0
        */
        void UpdateSkinListItemsDColumnOnlyL();

        /**
        * Starts theme preview.
        *
        * @since 5.0
        */
        void StartThemePreviewL( TBool aTouch = ETrue );
                
        
        /**
        * Cancel theme preview.
        *
        * @since 5.0
        */
        void CancelThemePreviewL();


        /**
        * Sets theme preview change observer (MPslnThemePreviewObserver).
        * aObserver observer for theme preview changes.
        *
        * @since 5.0
        */
        void SetThemePreviewObserver( MPslnThemePreviewObserver* aObserver );

        /**
        * Locks/enables up and down key events to this container.
        *
        * @since 5.0
        */
        void LockUpAndDownKeys( const TBool& aLocked );
        
        /**
        * Restart Quick Preview
        */
        void RestartQuickPreviewL();

        /**
        * Set theme preview state active.
        */    
        void SetPreviewStateActive();
        
        /**
        * Is current focus theme in preview state. 
        * @return ETrue if theme is in preview state.
        */    
        TBool CurrentThemeInPreviewState();
        

    private:            
        
        // Gets Help context.        
        void GetHelpContext( TCoeHelpContext& aContext ) const;
        // From CPslnBaseContainer
        TKeyResponse OfferKeyEventL(
            const TKeyEvent& aKeyEvent, 
            TEventCode aType );
        // From CCoeControl
        void HandlePointerEventL( const TPointerEvent &aPointerEvent );

        /* Creates (&initializes) a locally skinnable item list.*/
        void CreateSkinItemList();
        
        /* Adds skin item to locally skinnable item list. */
        TInt AddItemToList( const TAknsItemID& aSkinID );

        /* Callback interface for idle time. */
        static TInt DoHandleIdleTimeL( TAny* aAny );

        /* Callback interface for theme effect ending. */
        static TInt DoHandleEffectEndL( TAny* aAny );

        /* Handle idle time. */
        void HandleIdleTimeL();

        /* Handle theme effect ending. */
        void HandleEffectEndL();
        
        /*
        * Get Preview Skin Index.
        */
        TInt PreviewSkinIndex();

        /* Initialize theme preview delay time settings. */
        void InitPreviewTime();
        
        /* Show Error Note. */
        void ShowErrorNoteL( TInt  aResourceId  ); 

    private: // data

        /*
        * List of skin items to skin locally.
        */
        RArray<TAknsItemID> iSkinItemList;

        /*
        * Timer for delay.
        * Own.
        */
        CPeriodic* iPreviewIdle;

        /*
        * Skin preview library instance.
        * Own.
        */
        CAknLocalSkinInstance* iLocalSkinInstance;

        /*
        * Theme preview state change observer.
        * Not own.
        */
        MPslnThemePreviewObserver* iObserver;

        /*
        * To be used index in highlight when container is updated.
        * This is used when skin is activated and user has already
        * highlighted some other theme.
        */
        TInt iToBeUsedIndex;

        /*
        * Up and down key events are ignored while a skin is activating.
        * This is to avoid drawing of container when the skin items might
        * not be valid.
        */
        TBool iLockedKeys;
                
        /*
        * Current preview theme index in listbox.
        */
        TInt iActiveSkinItemIndex;
        
        /*
        * Theme preview delay time.
        */
        TInt iPreviewDelayTime;
        
        /*
        * Theme preview delay time, arisen by navigation key.
        */
        TInt iPreviewDelayTimeOnHardKey;
        
        /*
        * Theme preview interval time.
        */
        TInt iPreviewIntervalTime;
        
        /*
        * Old Skin Num.
        */
        TInt iOldSkinNum;
    };

#endif      // PSLNGENERALTHEMECONTAINER_H  
            
// End of File