idlehomescreen/xmluirendering/uiengine/inc/xnbackgroundmanager.h
branchRCL_3
changeset 83 5456b4e8b3a8
child 88 3321d3e205b6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/xmluirendering/uiengine/inc/xnbackgroundmanager.h	Wed Sep 01 12:32:46 2010 +0100
@@ -0,0 +1,333 @@
+/*
+* 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:  Background manager
+*
+*/
+
+#ifndef CXNBACKGROUNDMANAGER_H
+#define CXNBACKGROUNDMANAGER_H
+
+// System includes
+#include <coecntrl.h>
+#include <AknsSrvClient.h>
+#include <coeview.h>
+#include <disknotifyhandler.h>
+
+// CLASS DECLARATION
+class CXnViewManager;
+class CXnViewData;
+class CAknsLayeredBackgroundControlContext;
+
+namespace hspswrapper
+    {
+    class CHspsWrapper;
+    }
+
+using namespace hspswrapper;
+
+/**
+*  Background manager.
+*
+*  @since S60 v5.0
+*/
+NONSHARABLE_CLASS( CXnBackgroundManager ) : public CCoeControl,
+    public MAknsSkinChangeObserver, public MDiskNotifyHandlerCallback
+    {
+public:
+
+   enum WppType
+        {
+        ENone,
+        ECommon,        
+        EPageSpecific 
+        };
+   
+    /**
+     * Two-phased constructor.
+     * @param aWrapper HSPS wrapper
+     * @return new instance of CXnWallpaperView.
+     */
+    static CXnBackgroundManager* NewL( CXnViewManager& aViewManager, CHspsWrapper& aWrapper );
+
+    /**
+     * Destructor.
+     */
+    ~CXnBackgroundManager();
+
+    /**
+     * Caches wallpaper image.
+     * 
+     * @since S60 5.0
+     * @param aFileName WallpaperImage image path and filename to be cached
+     * @param aViewData Page that owns the given wallpaper.
+     * @return Error code.
+     */            
+    TInt ConstructWallpaper( const TDesC& aFileName, CXnViewData& aViewData );
+
+    /**
+     * Shows wallpaper change dialog
+     * 
+     * @since S60 5.0
+     */
+    void SetWallpaperL();
+
+    /**
+     * Changes wallpaper image of the current page.
+     * 
+     * @since S60 5.0
+     * @param aFileName WallpaperImage image path and filename
+     * @return Whether wallpaper is succesfully set or not.
+     */
+    TBool SetWallpaper( const TDesC& aFileName );
+
+    /**
+     * Deletes wallpaper from the given page as well as from the cache.
+     * 
+     * @since S60 5.0
+     * @param aViewData Page where the wallpaper is to be destroyed.
+     */            
+    void DeleteWallpaper( CXnViewData& aViewData );
+
+    /**
+     * Handles wallpaper changing in page change
+     * 
+     * @since S60 5.0
+     * @param aOldView Old view
+     * @param aNewView New view 
+     * @param aDrawNow ETrue if appearance should be updated
+     */
+    void ChangeWallpaper( const CXnViewData& aOldView, 
+        const CXnViewData& aNewView, TBool aDrawNow );
+
+    /**
+     * Returns wallpaper type.
+     *  
+     * @since S60 5.0
+     */
+    CXnBackgroundManager::WppType WallpaperType();
+            
+    /** 
+     * Store current wallpaper if needed by using
+     * AknsWallpaperUtils::SetIdleWallpaper
+     */
+    void StoreWallpaperL();
+
+public: // Functions from base classes    
+
+    /**
+     * @see CCoeControl
+     */    
+    void MakeVisible( TBool aVisible );
+
+private: // Functions from base classes    
+
+    /**
+     * see CCoeControl 
+     */
+    void Draw(const TRect& aRect) const;  
+
+    /**
+     * see CCoeControl 
+     */
+    void SizeChanged();
+    
+    /**
+     * see MAknsSkinChangeObserver 
+     */
+    void SkinContentChanged();
+    
+    /**
+     * see MAknsSkinChangeObserver 
+     */
+    void SkinConfigurationChanged(
+        const TAknsSkinStatusConfigurationChangeReason aReason );
+    
+    /**
+     * see MAknsSkinChangeObserver 
+     */
+    void SkinPackageChanged(
+        const TAknsSkinStatusPackageChangeReason aReason );
+
+    /**
+    * From MDiskNotifyHandlerCallback.
+    */
+    void HandleNotifyDisk( TInt aError, const TDiskEvent& aEvent );   
+
+private:
+    
+    /**
+     * C++ default constructor.
+     */
+    CXnBackgroundManager( CXnViewManager& aViewManager, CHspsWrapper& aWrapper );
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL();
+
+    /**
+     * Gets dublicate bitmap from AknsSrv cache and stores ot to view data.
+     */
+    void UpdateViewData( const TDesC& aFileName, CXnViewData& aViewData );
+
+    /**
+     * Stores current wallpaper to HSPS.
+     */
+    void SaveWallpaperL();
+    TInt SetSettingPropertyL( const TDesC8& aPluginId, const TDesC8& aItemId,
+        const TDesC8& aPropertyName, const TDesC8& aPropertyValue );
+
+    /**
+     * Goes through all the views and updates wallpapers to the correct size.
+     */
+    void UpdateWallpapersL();
+    
+    /**
+     * Removes wallpaper from AknsSrv cache, 
+     * if it is not used in other pages than the given (or active page).
+     */
+    void RemoveWallpaperFromCache( const TDesC& aFileName, 
+        CXnViewData* aViewData = NULL );
+    
+    /**
+     * Removes wallpapers that were loaded from MMC.
+     */
+    void RemovableDiskRemovedL();
+
+    /**
+     * Tries to restore wallpapers from MMC.
+     */
+    void RemovableDiskInsertedL();
+    
+    /**
+     * Reads from cenrep wheteher page specific or common wallpaper is enabled 
+     * and acts accordingly.
+     */
+    void CheckFeatureTypeL();
+    
+    /**
+     * Set the given wallpaper to the active page.
+     */
+    void SetPageSpecificWallpaperL( const TDesC& aFileName );
+
+    /**
+     * Set the given wallpaper. 
+     * aSave states whether to save change to HSPS or not.
+     */
+    void SetCommonWallpaperL( const TDesC& aFileName, TBool aSave = ETrue, 
+        TBool aShowProgressBar = ETrue );
+
+    /**
+     * Called when wallpaper has been changed outside of Homescreen. 
+     * aSave states whether to save change to HSPS or not.
+     */
+    void ReadWallpaperFromCenrepL();    
+
+    /**
+     * Helper functions for drawing
+     */
+    void DrawEditModeBackgroundSkin() const;    
+    void DrawStatusPaneMask() const;    
+    void UpdateStatuspaneMaskL();
+
+private: // data
+
+    /**
+     * Provides needed services
+     */
+    CXnViewManager& iViewManager;
+    
+    /** 
+     * Hsps wrapper 
+     */
+    CHspsWrapper& iHspsWrapper;
+    
+    /** 
+     * skin server to detect when wallpaper has changed 
+     * Own.
+     */
+    RAknsSrvSession iSkinSrv;
+
+    /**
+     * File server session.
+     * Own.
+     */
+    RFs iFsSession;
+
+    /**
+     * Notifier for disk drive status changes.
+     * Own.
+     */
+    CDiskNotifyHandler* iDiskNotifier;
+
+    /** 
+     * Background control context. 
+     * Own. 
+     */    
+    CAknsLayeredBackgroundControlContext* iBgContext;
+    
+    /** 
+     * Current view rect, which is basically the whole screen.
+     */        
+    TRect iRect;
+
+    /** 
+     * Stores wallpaper type. 
+     */
+    CXnBackgroundManager::WppType iType;
+    
+    /** 
+     * Internal wallpaper update in progress
+     */
+    TInt iIntUpdate;
+
+    /**
+     * Status pane bitmap. Drawn on top of a wallpaper in 
+     * the status pane area.
+     * Own.
+     */
+    CFbsBitmap* iSpBitmap;
+
+    /**
+     * Pointer to status pane mask. Drawn on top of a wallpaper in 
+     * the status pane area.
+     * Own.
+     */
+    CFbsBitmap* iSpMask;
+    
+    /** 
+     * Path of the wallpaper image, including filename. 
+     * This is used only if same wallpaper 
+     * is shared among all HS pages.
+     * Own. 
+     */  
+    HBufC* iBgImagePath;    
+
+    /** 
+     * Pointer to wallpaper image. This is used only if same wallpaper 
+     * is shared among all HS pages.
+     * Own. 
+     */   
+    CFbsBitmap* iBgImage;
+
+    /*
+     * Flag to indicate wheter wallpaper information needs
+     * to be stored to AknsWallpaperUtils
+     */
+    TBool iStoreWallpaper;
+    };
+
+#endif      // CXNBACKGROUNDMANAGER_H
+
+// End of File