videofeeds/utils/inc/vcxnsimageconverter.h
changeset 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/utils/inc/vcxnsimageconverter.h	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2009-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:    Converter that creates icons from picture files.*
+*/
+
+
+#ifndef C_VCXNSIMAGECONVERTER_H
+#define C_VCXNSIMAGECONVERTER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+
+// FORWARD DECLARATIONS
+class CGulIcon;
+class CImageDecoder;
+class CFbsBitmap;
+class MVcxNsImageConverterObserver;
+
+// CONSTS
+
+const TInt KFileExtensionLength( 10 );
+const TInt KSuffixPtrMinLength( 2 );
+const TInt KSuffixPtrMaxLength( 9 );
+
+
+/**
+ *  Converter that creates icons from picture files.
+ *
+ *  @lib IptvUtil.lib
+ *  @since S60 v3.0
+ */
+class CVcxNsImageConverter : public CActive
+    { 
+public: // Data types
+    
+    /** Image type enumeration */
+    enum TImageType
+        {
+        /** Image is of type .mif */
+        EMif,
+        /** Image is of other type */
+        EOther
+        };
+
+public: // Constructors and destructor
+
+    /**
+    * Two-phased constructor.
+    *
+    * @param aObserver Reference to image converter observer.
+    * @param aFsSession File Server session.
+    */
+    IMPORT_C static CVcxNsImageConverter* NewL( 
+            MVcxNsImageConverterObserver& aObserver, RFs& aFsSession );
+
+    /**
+    * Destructor.
+    */
+    virtual ~CVcxNsImageConverter();
+
+public:
+
+    /**
+    * Checks image type.
+    *
+    * @param  aFileName  File name of image which type to check.
+    * @param  aImageType On return, image type as TImageType enumeration.
+    * @return KErrNone if successful.
+    */
+    IMPORT_C TInt GetImageType( const TDesC& aFileName, 
+                                TImageType& aImageType );
+
+    /**
+    * Converts picture file (jpg/gif/png/etc.) synchronously.
+    *
+    * @param aFileName   Name (and path) of the source image file.
+    * @param aImageSize  Size of target icon.
+    * @param aCreateMask ETrue if icon should have mask, EFalse otherwise.
+    * @return New icon if successful, NULL otherwise.
+    */
+    IMPORT_C CGulIcon* ConvertL( const TDesC& aFileName, TSize aImageSize, 
+                                 TBool aCreateMask );
+
+    /**
+    * Converts mif file (mif) synchronously.
+    *
+    * @param aFileName  Name (and path) of the source image file.
+    * @param aImageSize Size of target icon.
+    * @param aBitmapId  ID of bitmap in mif file.
+    * @param aMaskId    ID of mask in mif file.
+    * @return New icon if successful, NULL otherwise.        
+    */
+    IMPORT_C CGulIcon* ConvertL( const TDesC& aFileName, TSize aImageSize, 
+                                 TInt aBitmapId, TInt aMaskId );
+
+    /**
+    * Converts file (jpg/gif/png/etc.) asynchronously.
+    *
+    * @param aFileName   Name (and path) of the source image file.
+    * @param aImageSize  Size of target icon.
+    * @param aCreateMask ETrue if icon should have mask, EFalse otherwise.
+    * @return KErrNone, or one of the system wide error codes if could not
+    *       start conversion.
+    */
+    IMPORT_C TInt StartConvertL( const TDesC& aFileName, TSize aImageSize, 
+                                 TBool aCreateMask );
+
+    /**
+    * Converts mif file (mif) asynchronously.
+    *
+    * @param aFileName  Name (and path) of the source image file.
+    * @param aImageSize Size of target icon.
+    * @param aBitmapId  ID of bitmap in mif file.
+    * @param aMaskId    ID of mask in mif file.
+    * @return KErrNone, or one of the system wide error codes if could not 
+    *       start conversion.
+    */
+    IMPORT_C TInt StartConvertL( const TDesC& aFileName, TSize aImageSize, 
+                                 TInt aBitmapId, TInt aMaskId );
+
+private: // From CActive
+
+    /**
+    * Handles an active object’s request completion event. Image conversion 
+    * complete.
+    */
+    void RunL();
+
+    /**
+    * Implements cancellation of an outstanding request, e.g. image 
+    * conversion.
+    */
+    void DoCancel();
+
+    /**
+    * Handles leaves in RunL. Frees memory and informs client.
+    *
+    * @param aError Error code in RunL leave.
+    */
+    TInt RunError( TInt aError );
+
+private:     
+
+    /**
+    * Constructor
+    *
+    * @param aObserver Reference to image converter observer.
+    * @param aFsSession File Server session.
+    */
+    CVcxNsImageConverter( MVcxNsImageConverterObserver& aObserver, 
+                              RFs& aFsSession );
+
+    /**
+    * EPOC constructor.
+    */
+    void ConstructL();
+    
+    /**
+    * Gets extension from file name.
+    *
+    * @param aPath Path and file name from which to extract the extension from.
+    * @param aExtension On return, extension of the file.
+    * @return ETrue if successful, EFalse otherwise.
+    */
+    TBool GetExtension( const TDesC& aPath, TDes& aExtension );
+    
+    /**
+    * Creates icon after asynchronous conversion and informs observer.
+    */
+    void CreateAndSetIconL();
+
+    /**
+    * Informs observer about a conversion error in asynchronous conversion.
+    */
+    void ReportErrorL();
+
+private: // Data
+    
+    // Image decoder.
+    CImageDecoder*               iDecoder;
+    
+    // Bitmap for converted images.
+    CFbsBitmap*                  iBitmap;
+    // Bitmap mask for converted images.
+    CFbsBitmap*                  iMask;
+    
+    // File server session.
+    RFs&                         iFsSession;
+    // Used to flag synchronous decoding.
+    TBool                        iSynchronous;
+    
+    // Used to flag that conversion is done to mif file.
+    TBool                        iConvertingMif;
+    // Stores mif file name in asynchronous case.
+    HBufC*                       iMifFileName;
+    // Stores mif image size in asynchronous case.
+    TSize                        iMifImageSize;
+    // Stores mif bitmap Id in asynchronous case.
+    TInt                         iMifBitmapId;
+    // Stores mif mask Id in asynchronous case.
+    TInt                         iMifMaskId;
+    
+    // Observer.
+    MVcxNsImageConverterObserver& iObserver;
+    
+    // Flag for knowing if image is fully scalable or not
+    TBool iImageScalable;
+    };
+
+#endif // C_VCXNSIMAGECONVERTER_H