phoneuis/BubbleManager/Inc/BMBubbleImageManager.h
changeset 0 5f000ab63145
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/BubbleManager/Inc/BMBubbleImageManager.h	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,374 @@
+/*
+* Copyright (c) 2002-2005 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:  This class handles all bitmaps
+*
+*/
+
+
+
+#ifndef BUBBLEIMAGEMANAGER_H
+#define BUBBLEIMAGEMANAGER_H
+
+// INCLUDES
+
+#include    <e32base.h>
+#include    <bldvariant.hrh>
+#include    <AknsItemID.h>
+#include    <AknsConstants.h>
+#include    <AknsItemData.h>
+
+// CONSTANTS
+const TInt KBMMaxFileNameLength = 100;
+
+// FORWARD DECLARATIONS
+class CBubbleSkinBitmap;
+class CEikImage;
+class CFbsBitmap;
+
+// DATA TYPES
+
+// Do NOT change order or numbering!!
+enum TBMIcons
+    {
+    ///////////////////////////////////////////////////////////////////////////
+    // Cached icons
+    ///////////////////////////////////////////////////////////////////////////
+    EQgn_indi_call_active = 0,
+    EQgn_indi_call_active_mask,
+    EQgn_indi_call_active_2,
+    EQgn_indi_call_active_2_mask,
+    EQgn_indi_call_disconn,
+    EQgn_indi_call_disconn_mask,
+    EQgn_indi_call_held,
+    EQgn_indi_call_held_mask,
+    EQgn_indi_call_video_callsta_1,
+    EQgn_indi_call_video_callsta_1_mask,
+    EQgn_indi_call_video_callsta_2,
+    EQgn_indi_call_video_callsta_2_mask,
+    EQgn_indi_call_video_callsta_disconn,
+    EQgn_indi_call_video_callsta_disconn_mask,
+    EQgn_indi_call_voip_active,
+    EQgn_indi_call_voip_active_mask,
+    EQgn_indi_call_voip_active_2,
+    EQgn_indi_call_voip_active_2_mask,
+    EQgn_indi_call_voip_held,
+    EQgn_indi_call_voip_held_mask,
+    EQgn_indi_call_voip_callsta_disconn,
+    EQgn_indi_call_voip_callsta_disconn_mask,
+    // Animated call icons
+    EQgn_indi_call_waiting_1,
+    EQgn_indi_call_waiting_1_mask,
+    EQgn_indi_call_waiting_2,
+    EQgn_indi_call_waiting_2_mask,
+    EQgn_indi_call_waiting_disconn,
+    EQgn_indi_call_waiting_disconn_mask,
+    EQgn_indi_call_video_1,
+    EQgn_indi_call_video_1_mask,
+    EQgn_indi_call_video_2,
+    EQgn_indi_call_video_2_mask,
+    EQgn_indi_call_video_disconn,
+    EQgn_indi_call_video_disconn_mask,
+    EQgn_indi_call_voip_waiting_1,
+    EQgn_indi_call_voip_waiting_1_mask,
+    EQgn_indi_call_voip_waiting_2,
+    EQgn_indi_call_voip_waiting_2_mask,
+    EQgn_indi_call_voip_disconn,
+    EQgn_indi_call_voip_disconn_mask,    
+    // Background for NE + single call (not cached, if frame icons in use)
+    EQgn_graf_call_rec_big,
+    EQgn_graf_call_rec_big_mask, 
+    EQgn_graf_call_rec_big_disconn,
+    EQgn_graf_call_rec_big_disconn_mask,
+    EQgn_graf_call_first_one_active,
+    EQgn_graf_call_first_one_active_mask,
+    EQgn_graf_call_first_one_disconn,
+    EQgn_graf_call_first_one_disconn_mask,
+    ///////////////////////////////////////////////////////////////////////////
+    // Non-cached icons
+    ///////////////////////////////////////////////////////////////////////////
+    EQgn_graf_call_first_one_held,
+    EQgn_graf_call_first_one_held_mask,
+    EQgn_indi_call_active_cyph_off,
+    EQgn_indi_call_active_cyph_off_mask,
+    EQgn_indi_call_disconn_cyph_off,
+    EQgn_indi_call_disconn_cyph_off_mask,
+    EQgn_indi_call_held_cyph_off,
+    EQgn_indi_call_held_cyph_off_mask,
+    EQgn_indi_call_cyphering_off,
+    EQgn_indi_call_cyphering_off_mask,
+    EQgn_indi_call_line2,
+    EQgn_indi_call_line2_mask,
+    EQgn_indi_call_active_emergency,
+    EQgn_indi_call_active_emergency_mask,
+    EQgn_indi_call_waiting_cyph_off_1,
+    EQgn_indi_call_waiting_cyph_off_1_mask,
+    EQgn_indi_call_waiting_disconn_cyph_off,
+    EQgn_indi_call_waiting_disconn_cyph_off_mask,
+    EQgn_graf_call_first_one_active_emergency,
+    EQgn_graf_call_first_one_active_emergency_mask,
+    EQgn_graf_call_two_active_emergency,
+    EQgn_graf_call_two_active_emergency_mask,
+    EQgn_graf_call_rec_big_right,
+    EQgn_graf_call_rec_big_right_mask,
+    EQgn_graf_call_rec_big_right_disconn,
+    EQgn_graf_call_rec_big_right_disconn_mask,
+    EQgn_graf_call_conf_five,
+    EQgn_graf_call_conf_five_mask,
+    EQgn_graf_call_conf_four,
+    EQgn_graf_call_conf_four_mask,
+    EQgn_graf_call_conf_three,
+    EQgn_graf_call_conf_three_mask,
+    EQgn_graf_call_conf_two,
+    EQgn_graf_call_conf_two_mask,
+    EQgn_graf_call_first_three_active,
+    EQgn_graf_call_first_three_active_mask,
+    EQgn_graf_call_first_three_disconn,
+    EQgn_graf_call_first_three_disconn_mask,
+    EQgn_graf_call_first_three_held,
+    EQgn_graf_call_first_three_held_mask,
+    EQgn_graf_call_first_two_active,
+    EQgn_graf_call_first_two_active_mask,
+    EQgn_graf_call_first_two_disconn,
+    EQgn_graf_call_first_two_disconn_mask,
+    EQgn_graf_call_first_two_held,
+    EQgn_graf_call_first_two_held_mask,
+    EQgn_graf_call_first_wait_active,
+    EQgn_graf_call_first_wait_active_mask,
+    EQgn_graf_call_first_wait_disconn,
+    EQgn_graf_call_first_wait_disconn_mask,
+    EQgn_graf_call_hidden_held,
+    EQgn_graf_call_hidden_held_mask,
+    EQgn_graf_call_rec_big_left,
+    EQgn_graf_call_rec_big_left_mask,
+    EQgn_graf_call_rec_big_left_disconn,
+    EQgn_graf_call_rec_big_left_disconn_mask,
+    EQgn_graf_call_rec_small_left,
+    EQgn_graf_call_rec_small_left_mask,
+    EQgn_graf_call_rec_small_right,
+    EQgn_graf_call_rec_small_right_mask,
+    EQgn_graf_call_rec_small_right_disconn,
+    EQgn_graf_call_rec_small_right_disconn_mask,
+    EQgn_graf_call_rec_bigger,
+    EQgn_graf_call_rec_bigger_mask,
+    EQgn_graf_call_second_three_active,
+    EQgn_graf_call_second_three_active_mask,
+    EQgn_graf_call_second_three_disconn,
+    EQgn_graf_call_second_three_disconn_mask,
+    EQgn_graf_call_second_three_held,
+    EQgn_graf_call_second_three_held_mask,
+    EQgn_graf_call_second_two_active,
+    EQgn_graf_call_second_two_active_mask,
+    EQgn_graf_call_second_two_disconn,
+    EQgn_graf_call_second_two_disconn_mask,
+    EQgn_graf_call_second_two_held,
+    EQgn_graf_call_second_two_held_mask,
+    EQgn_indi_call_active_conf,
+    EQgn_indi_call_active_conf_mask,
+    EQgn_indi_call_disconn_conf,
+    EQgn_indi_call_disconn_conf_mask,
+    EQgn_indi_call_diverted,
+    EQgn_indi_call_diverted_mask,
+    EQgn_indi_call_held_conf,
+    EQgn_indi_call_held_conf_mask,
+    EQgn_indi_call_muted,
+    EQgn_indi_call_muted_mask,
+    EQgn_prop_nrtyp_mobile_div,
+    EQgn_prop_nrtyp_mobile_div_mask,
+    EQgn_prop_nrtyp_phone_div,
+    EQgn_prop_nrtyp_phone_div_mask,
+    EQgn_indi_call_active_conf_cyph_off,
+    EQgn_indi_call_active_conf_cyph_off_mask,
+    EQgn_indi_call_active_cyph_off_2,
+    EQgn_indi_call_active_cyph_off_2_mask,
+    EQgn_indi_call_disconn_conf_cyph_off,
+    EQgn_indi_call_disconn_conf_cyph_off_mask,
+    EQgn_indi_call_held_conf_cyph_off,
+    EQgn_indi_call_held_conf_cyph_off_mask,
+    EQgn_indi_call_waiting_cyph_off_2,
+    EQgn_indi_call_waiting_cyph_off_2_mask,
+    EQgn_prop_nrtyp_home_div,
+    EQgn_prop_nrtyp_home_div_mask,
+    EQgn_prop_nrtyp_work_div,
+    EQgn_prop_nrtyp_work_div_mask,
+    EQgn_graf_call_image_1,
+    EQgn_graf_call_image_1_mask,
+    EQgn_indi_call4_image_mask_prt, 
+    EQgn_indi_call4_image_mask_lsc, 
+    // From avkon.mbm
+    EQgn_prop_nrtyp_fax,
+    EQgn_prop_nrtyp_fax_mask,
+    EQgn_prop_nrtyp_home,
+    EQgn_prop_nrtyp_home_mask,
+    EQgn_prop_nrtyp_mobile,
+    EQgn_prop_nrtyp_mobile_mask,
+    EQgn_prop_nrtyp_pager,
+    EQgn_prop_nrtyp_pager_mask,
+    EQgn_prop_nrtyp_phone,
+    EQgn_prop_nrtyp_phone_mask,
+    EQgn_prop_nrtyp_work,
+    EQgn_prop_nrtyp_work_mask,
+    EQgn_prop_nrtyp_voip,
+    EQgn_prop_nrtyp_voip_mask,
+    EQgn_prop_nrtyp_car,
+    EQgn_prop_nrtyp_car_mask,
+    EQgn_prop_nrtyp_assistant,
+    EQgn_prop_nrtyp_assistant_mask
+    };
+
+
+
+// CLASS DECLARATION
+
+/**
+*  CBubbleImageManager class
+*  This class handles all bitmaps
+*
+*  @lib bubblemanager
+*  @since Series60_1.0
+*/
+class CBubbleImageManager : public CBase
+    {
+
+    public: // Constructors and destructor
+
+        /**
+        * Two phase constructor
+        * @param aFrameIcons ETrue if 9-piece bubbles are used.
+        * @return New instance
+        */
+        static CBubbleImageManager* NewL( TBool aFrameIcons );
+
+        /**
+        * Destructor.
+        */
+        ~CBubbleImageManager();
+
+    public: // New functions
+
+        /**
+        * Set given bitmap to CEikImage object.
+        * @param aImage Image which the bitmap is set to.
+        * @param aPicture Bitmap enum.
+        */
+        void SetBitmapToImage( CEikImage*& aImage , 
+                               const TBMIcons& aPicture );
+
+        /**
+        * Set given bitmap to CEikImage object.
+        * @param aImage Image which the bitmap is set to.
+        * @param aPicture Bitmap enum.
+        * @param aPictureMask Bitmap mask enum.
+        */
+        void SetBitmapToImage( CEikImage*& aImage , 
+                               const TBMIcons& aPicture, 
+                               const TBMIcons& aPictureMask );
+
+        /**
+        * Clears skinned bitmaps. Call only between StartChanges() and
+        * EndChanges()!!!
+        * @since 2.0
+        */
+        void ClearSkinsCache();
+        
+        /**
+        * This method prepares cached bitmaps. SVG icons cannot be
+        * used before they are initialized. Using this method ensures 
+        * validity of most essentials icons in OOM situation.  
+        * @since 3.1
+        */
+        void PrepareCachedBitmaps();
+
+    protected:
+        /**
+        * Constructor.
+        */
+        CBubbleImageManager( TBool aFrameIcons );
+
+        // From CTimer
+        void RunL();
+
+        // Set bitmap+mask to given image
+        void SetBitmapToImage( CEikImage& aImage , 
+                               const TBMIcons& aPicture, 
+                               const TBMIcons& aPictureMask );
+
+        // Maps enumeration to mbm file
+        void MapEnumToMbmFile( const TBMIcons aBmIcon,
+                               TInt& aMbm,
+                               TDes& aFileName ) const;
+
+        // Maps emumeration to skin id
+        void MapEnumToSkin( const TBMIcons aBmIcon, 
+                            TAknsItemID& aItemId, 
+                            TInt& aColorGroupId ) const;
+
+        // Finds skin for given enumeration
+        TBool GetSkin( CEikImage&     aImage, 
+                       const TBMIcons aBmIcon, 
+                       const TBMIcons aBmIconMask );
+
+        // Loads new skin image into cache
+        void LoadAndAppendSkinL( const TBMIcons aBmIcon,
+                                 const TBMIcons aBmIconMask,
+                                 CFbsBitmap*&   aBitmap, 
+                                 CFbsBitmap*&   aMask );
+                                 
+        // Initialize bitmaps
+        TBool DoInitializeBitmaps();
+        
+        // Callback function for CIdle
+        static TInt InitializeBitmaps( TAny* aThis );
+        
+        // Load cached bitmaps
+        void LoadCachedBitmapsL();
+    
+    private:
+        // Returns id for last icon kept in cache
+        inline TInt LastCachedIcon();
+
+    private: // private functions
+        /**
+        * Symbian OS 2nd phase constructor.
+        */
+        void ConstructL();
+
+    private: //data
+
+        // MBM file name
+        TBuf<KBMMaxFileNameLength> iMbmFileBuffer;
+
+        // Cached skin bitmaps
+        RPointerArray<CBubbleSkinBitmap> iSkinnedBitmaps;
+        // Ordering function pointer.
+        TLinearOrder<CBubbleSkinBitmap> iOrder;
+
+        // Compares two different skin images
+        static TInt CompareSkinnedData(
+            const CBubbleSkinBitmap& aSkinnedBitmap1, 
+            const CBubbleSkinBitmap& aSkinnedBitmap2 );
+            
+        // Bitmap initialization
+        CIdle* iBitmapInitializer;
+        TInt   iBitmapInitIndex;
+        
+        // 9-piece background icons used 
+        TBool iFrameIcons;
+
+    private:
+        friend class CT_CBubbleImageManager;
+    };
+
+#endif //BUBBLEIMAGEMANAGER_H
+
+// End of File