/** Copyright (c) 2002-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: Defines an internal concrete class CAknsAppSkinInstance and* related types. This class encapsulates the concrete skin* instance which is a singleton in thread scope.**/#ifndef AKNSAPPSKININSTANCE_H#define AKNSAPPSKININSTANCE_H// INCLUDES#include <coemain.h>#include <AknsSkinInstance.h>#include <AknsSrvClient.h>// FORWARD DECLARATIONSclass CAknsAppSkinInstanceCacheEntry;class CAknsTemporaryBitmap;class MAknsRlRenderer;class CAknsRlDefaultRenderer;class CAknsRlMasterLayout;class RApaLsSession;// DATA TYPES/*** Simple pointer array data type for item definitions.** @internal*/typedef RPointerArray<CAknsItemDef> RAknsItemDefPointerArray;/*** Control position list entry.** @internal*/struct TAknsControlPositionEntry { TUint iKey; TPoint iScreenPos; };/*** Pointer store list entry.** @internal*/struct TAknsPointerStoreEntry { TUint iKey; TAny* iValue; };/*** Simple pointer array data type for cache entries.** @internal*/typedef RPointerArray<CAknsAppSkinInstanceCacheEntry> RAknsAppSkinInstanceCacheEntryPointerArray;/*** Simple pointer array data type for temporary bitmap entries.** @since 2.6** @internal*/typedef RPointerArray<CAknsTemporaryBitmap> RAknsAppSkinInstanceTemporaryBitmapArray;// CLASS DECLARATION/*** Concrete application skin instance.* Application skin instance is a thread-singleton class that implements* MAknsSkinInstance (and also MAknsDataContext to provide root data* context).** This is an internal class that contains no exported functions.* The class is not intended for derivation outside the library.** @since 2.0** @internal*/NONSHARABLE_CLASS(CAknsAppSkinInstance) : public CCoeStatic, public MAknsSkinInstance, public MAknsDataContext, public MAknsSkinChangeObserver { protected: // Protected constructor /** * C++ default constructor. * * @internal */ CAknsAppSkinInstance(); public: // Constructors and destructors /** * Creates application skin instance singleton. * * @par Exceptions: * If construction fails, leaves with an error code. * * @internal */ static void CreateSingletonL(); /** * Destructor. * * @internal */ virtual ~CAknsAppSkinInstance(); public: // Functions from MAknsSkinInstance - Item data /** * @copydoc MAknsSkinInstance::RootDataContext() */ MAknsDataContext* RootDataContext(); /** * @copydoc MAknsSkinInstance::GetCachedItemData(TAknsItemID,TAknsItemType) */ CAknsItemData* GetCachedItemData( const TAknsItemID& aID, const TAknsItemType aType ); /** * @copydoc MAknsSkinInstance::GetCachedItemData(TAknsItemID) */ CAknsItemData* GetCachedItemData( const TAknsItemID& aID ); /** * @copydoc MAknsSkinInstance::CreateUncachedItemDataL(TAknsItemID,TAknsItemType) */ CAknsItemData* CreateUncachedItemDataL( const TAknsItemID& aID, const TAknsItemType aType ); /** * @copydoc MAknsSkinInstance::CreateUncachedItemDataL(TAknsItemID) */ CAknsItemData* CreateUncachedItemDataL( const TAknsItemID& aID ); public: // Functions from MAknsSkinInstance - Item definitions /** * @copydoc MAknsSkinInstance::SetLocalItemDefL() */ void SetLocalItemDefL( CAknsItemDef* aDef ); /** * @copydoc MAknsSkinInstance::SetChangeEventsEnabled() */ void SetChangeEventsEnabled( TBool aEnabled ); public: // Functions from MAknsSkinInstance - Error handling /** * @copydoc MAknsSkinInstance::NotifyClientError(); */ void NotifyClientError( const TAknsClientError aError ); public: // Functions fro MAknsSkinInstance - Querying the change reason /** * @copydoc MAknsSkinInstance::SkinChangeReason() */ TAknsSkinChangeReason SkinChangeReason(); public: // Functions fro MAknsSkinInstance - removing local item defs /** * @copydoc MAknsSkinInstance::RemoveLocalItemDefs() */ void RemoveLocalItemDefs(); public: // Functions from MAknsDataContext /** * @copydoc MAknsDataContext::ReserveItemL() */ void ReserveItemL( const TAknsItemID& aID ); /** * @copydoc MAknsDataContext::ReleaseItem() */ void ReleaseItem( const TAknsItemID& aID ); public: // Functions from MAknsSkinChangeObserver void FlushLocalCaches(); /** * @copydoc MAknsSkinChangeObserver::SkinContentChanged() */ void SkinContentChanged(); /** * @copydoc MAknsSkinChangeObserver::SkinConfigurationChanged() */ void SkinConfigurationChanged( const TAknsSkinStatusConfigurationChangeReason aReason ); /** * @copydoc MAknsSkinChangeObserver::SkinPackageChanged() */ void SkinPackageChanged( const TAknsSkinStatusPackageChangeReason aReason ); public: // New functions - Testing /** * Returns the current count of local item definition list. */ IMPORT_C TInt DebugLocalItemDefCount(); /** * Returns the current count of item data cache. */ IMPORT_C TInt DebugCacheCount(); /** * Disables server error notification and registers observer. */ IMPORT_C void DebugHookClientErrors( void (*aCallback)(TAny*), TAny* aParam ); /** * Disables change notification and registers observer. */ IMPORT_C void DebugHookChangeNotifications( void (*aCallback)(TAny*), TAny* aParam ); /** * Resets the internal state. */ IMPORT_C void DebugReset(); protected: // New functions /** * Updates cached item. * This method should be called when an item definition changes. * If item data (for the specified IID) is in the ASI cache, * it is reconstructed. Type of the new item definition must * match the existing cached item, if one exists. * * @param aCacheEntry Cache entry to be updated. * * @param aRemoveIfNotFound Boolean flag to indicate whether * the cache item should be removed if no new definition is found. * * @par Exceptions: * If item data creation fails, leaves with an error code. * Cached item (if any) is automatically destroyed. * * @internal */ void UpdateCachedItemL( CAknsAppSkinInstanceCacheEntry* aCacheEntry, const TBool aRemoveIfNotFound ); /** * Notifies the application that an item definition has changed. * Sends skin resource change event to the window group of the * current application. Also redraws the screen (if there are items * in cache) to enable controls * that use cached items to update their appearance. * * @internal */ void NotifyItemDefChange(TBool aFgOnly = EFalse); /** * Redraws the screen. * * @internal */ void RedrawScreen() const; /** * Finds item definition for specified item, creates item data for * it and inserts it into the cache. * * @param aID Item ID to be cached. * @param aType Type of the item. EAknsITUnknown if any type is * acceptable. * * @return Pointer to cache entry. Application skin instance still * owns the cache entry object and controls its lifetime. * @c NULL value is returned if no item definition is found. * * @par Exceptions: * If creation fails, leaves with an error code. * * @internal */ CAknsAppSkinInstanceCacheEntry* LookupCreateAndCacheL( const TAknsItemID& aID, const TAknsItemType aType ); /** * Finds item definition for specified item and creates an independent * item data for it. * * @param aID Item ID matching the item data to be created. * @param aType Type of the item. EAknsITUnknown if any type is * acceptable. * * @return Newly created item data instance for the specified item. * Ownership of the item data is transferred to the caller. * @c NULL value is returned if no item definition is found. * * @par Exceptions: * If creation fails, leaves with an error code. * * @internal */ CAknsItemData* LookupAndCreateL( const TAknsItemID& aID, const TAknsItemType aType ); /** * Finds specified item from cache. * * @param aID Item ID to be found. * * @return Pointer to cache entry or @c NULL if none found. * Application skin instance still owns the cache entry and controls * its lifetime. * * @internal */ CAknsAppSkinInstanceCacheEntry* FindFromCache( const TAknsItemID& aID ); /** * Removes specified item from cache and destroys it. * * @param aID Item ID to be removed and destroyed. * * @internal */ void RemoveAndDestroyFromCache( const TAknsItemID& aID ); /** * Handles the client error condition. * * @param aError Type of the error. * * @internal */ void HandleClientError( const TAknsClientError aError ); /** * Finds the specified item definition, but does not construct the * item data object. * * @since 2.1 * * @param aOwnershipTransfer Output parameter that is assigned to * ETrue if the caller should destroy the returned definition * object. * * @param aID Item ID of the item definition to be retrieved. * * @param aType Type (or base type) of the item definition to be * retrieved. * * @return Pointer to the item definition object or @c NULL if * not found. The caller must observe aOwnershipTransfer * value to determine whether the object should be destroyed. * * @internal */ CAknsItemDef* LookupDef( TBool& aOwnershipTransfer, const TAknsItemID& aID, const TAknsItemType aType ); /** * * @since 2.8 * * @internal */ void UpdateLocalLayoutBitmapToServerL( const TAknsItemID& aID, const TInt aLayout, const TSize& aLayoutSize, CFbsBitmap* aBitmap, CFbsBitmap* aMask, const TBool aMorphing ); /** * * @since 2.8 * * @internal */ void UpdateLocalLayoutBitmapFromServerL( const TAknsItemID& aID, const TInt aLayout, const TSize& aLayoutSize ); public: // New methods /** * Retrieves (and creates if necessary) a temporary bitmap * for the given item ID and given size. * * @since 2.6 * * @internal */ CAknsTemporaryBitmap* GetTemporaryBitmapL( const TAknsItemID& aID, const TSize& aSize ); /** * Retrieves a non-owned pointer to the renderer. * * @since 2.8 * * @internal */ MAknsRlRenderer* DefaultRenderer(); /** * Retrieves a non-owned pointer to the master layout. * * @since 2.8 * * @internal */ CAknsRlMasterLayout* MasterLayout(); /** * Adds a layout bitmap, ownership transferred. * * @since 2.8 * * @internal */ void AddLayoutBitmapL( const TAknsItemID& aID, CAknsMaskedBitmapItemData* aData, const TInt aLayout, const TSize& aLayoutSize, const TBool aMorphing, const TBool aLocalItem ); /** * Retrieves a layout bitmap, ownership not transferred. * * @since 2.8 * * @internal */ CAknsImageItemData* GetLayoutBitmap( const TAknsItemID& aID, const TSize& aLayoutSize, const TInt aLayout, TBool& aMorphingOut, const TBool& aLocalItem ); /** * Begins rendering. EndRender must be called to free the mutex * after rendering completes. * * @since 2.8 * * @internal */ void BeginRender(); /** * Ends rendering. BeginRender must have been called, otherwise * the mutex state will be corrupted. * * @since 2.8 * * @internal */ void EndRender(); /** * From base class MAknsSkinChangeObserver. * @copydoc MAknsSkinChangeObserver::IsUpdateInProgress() */ TBool IsUpdateInProgress(); /** * The product variant status of highlight animation. * * @return ETrue if product supports highlight animations, EFalse if * highlight animations should not be used. * @since 3.1 * @internal */ TBool VariantHighlightAnimationEnabled(); /** * Checks if the given AppUid icon has been configured with AppArc cenrep configuration file. * @param aAppUid application UID to check * @return ETrue if the icon is configured with the cenrep file, otherwise EFalse. */ TBool IsIconConfiguredL( TUid aAppUid ); /** * Get Current Animation Backgournd State. * @return ETrue if the Animation Backgournd is ON, otherwise EFalse. */ TBool AnimBackgroundState( ) const; /** * Get if wallpaper defined. * @return if wallpaper defined. */ TBool WallpaperDefined( ) const; private: // Private ConstructL /** * By default Symbian OS constructor is private. */ void ConstructL(); /** * Read Animation Backgournd State */ void InitAnimBackgroundL( ); /** * Read Psln Cenrep */ void InitPslnCenrepL( TBool aOnlyWP = EFalse ); protected: // Data /** * Local item definition array. */ RAknsItemDefPointerArray iLocalItemDefArray; /** * Cache entry array. */ RAknsAppSkinInstanceCacheEntryPointerArray iCache; /** * Flag indicating whether change events are enabled. */ TBool iChangeEventsEnabled; /** * Flag indicating whether there is a pending change event. */ TBool iChangeEventPending; /** * Skin server session. */ RAknsSrvSession iSession; /** * Internal control position list used by AknsUtils. */ RArray<TAknsControlPositionEntry> iControlPositionList; /** * Internal pointer store used by AknsUtils. */ RArray<TAknsPointerStoreEntry> iPointerStoreList; /** * Chunk lookup instance. */ CAknsSrvChunkLookup* iChunkLookup; /** * Temporary bitmap array. */ RAknsAppSkinInstanceTemporaryBitmapArray iTmpBmpArray; /** * Default renderer instance. */ CAknsRlDefaultRenderer* iRenderer; /** * Master layout instance. */ CAknsRlMasterLayout* iMasterLayout; /** * Layout bitmap array. */ RAknsAppSkinInstanceTemporaryBitmapArray iLayoutBmpArray; /** * Update status */ TBool iUpdateInProgress; /** * Product variant enable/disable status for highlight animations. */ TBool iVariantHlAnimStatus; /** * Cached AppArc server session */ RApaLsSession* iCachedApaSession; /** * The last skin change reason */ TAknsSkinChangeReason iLastChangeReason; /** * Are the application icons configured with cenrep? * */ TBool iAppConfigurationCenrepNotUsed; /** * Animation Background State */ TBool iAnimBgState; /** * Wallpaper Type */ TBool iWallpaperDefined; private: // Data /** * Debug hook for client errors */ void (*iDebugErrorCallback)(TAny*); TAny* iDebugErrorCallbackParam; /** * Debug hook for change notifications */ void (*iDebugChangeCallback)(TAny*); TAny* iDebugChangeCallbackParam; public: // Friend classes friend class AknsUtils; friend class AknsPointerStore; friend class AknsItemDataFactory; friend class AknsScalabilityUtils; friend class CAknsAlAnimatorBmp; // To access iSession };#endif // AKNSAPPSKININSTANCE_H// End of File