mobilemessaging/postcard/postcardinc/PostcardOperationInsertImage.h
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/postcard/postcardinc/PostcardOperationInsertImage.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 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:  
+*       CPostcardOperationInsertImage, asynchronous operation for inserting image
+*
+*/
+
+
+
+
+#ifndef __POSTCARDOPERATIONINSERTIMAGE_H
+#define __POSTCARDOPERATIONINSERTIMAGE_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include <e32std.h>
+#include <f32file.h>
+
+#include <uniimageprocessor.h>
+
+#include <MIHLViewerObserver.h>
+
+#include "PostcardOperation.h"
+
+// CONSTANTS
+
+// MACROS
+
+// FORWARD DECLARATIONS
+class CMsgMediaInfo;
+class MIHLFileImage;
+class MIHLBitmap;
+class MIHLImageViewer;
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// CLASS DECLARATION
+
+/**
+* CPostcardOperationInsertImage 
+*
+* @lib postcardeditor.exe
+* @since 3.0
+*/
+class CPostcardOperationInsertImage : public CPostcardOperation,
+                                      public MUniImageProcessorCallback,
+                                      public MIHLViewerObserver
+    {
+    
+    public:  // New methods
+
+        /**
+        * Factory method that creates this object.
+        * @since    3.0
+        * @param aInfo - info object of the inserted image -> operation takes the ownership
+        * @return   Pointer to instance
+        */
+        static CPostcardOperationInsertImage* NewL(
+            MPostcardOperationObserver& aObserver,
+            CPostcardDocument& aDocument,
+            CPostcardAppUi& aAppUi,
+            CMsgImageInfo* aInfo,
+            RFs& aFs );
+
+        /**
+        * Destructor
+        */
+        virtual ~CPostcardOperationInsertImage( );
+
+        /**
+        * Just initializes the iLaunchStep and completes
+        */
+		void Start( TInt aArgument );
+
+	public: // From ImageProcessor
+	
+		/*
+		* If process was not succesfull -> sets error and completes with it,
+		* Otherwise start scaling to screen
+		*/ 
+	    void ImageProcessingReady( TSize aBitmapSize, TInt aFileSize, TBool aCompressed );
+
+   protected: // From MIHLViewerObserver
+        
+		/**
+        * From MIHLViewerObserver Notifies client when image handler content has changed.
+		* Leave situation is handled in ViewerError() callback.
+		*
+		* Creates a duplicate of iDestinationBitmap, creates a CGulIcon of it and
+		* passes it to AppUi class
+        * @return void
+		*/
+		void ViewerBitmapChangedL();
+
+        /**
+        * From MIHLViewerObserver Notifies client if error occurs in viewer.
+        * 
+        * @param aError     IN  System wide error code.
+        *
+        * @return void
+		*/
+		void ViewerError( TInt aError );
+
+    private:
+
+        /**
+        * Called by RunL.
+        * Calls different functions according to iLaunchStep
+        */
+        void DoLaunchStepL( );
+
+        /**
+        * Removes possible old image.
+        * Starts creating new attachment
+        */
+        void DoCreateAttaL( );
+
+        /**
+        * This functions starts the image process
+        */
+		void DoStartProcessImageL( );
+
+        /**
+        * Sets the mimetypes and content location.
+        * Stores headers
+        */
+        void DoFinalizeSaveL( );
+
+        /**
+        * Starts the scaling process by using ImageHandler Library (scaling to bitmap, not file)
+        */
+        void DoCreateBitmapL( );
+
+        /**
+        * Renames the attachment.
+        * Called when the image needs no other special handling than just renaming.
+        */
+		void DoRenameAttaL( );
+
+        /**
+        * Returns ETrue if compression is needed for the image
+        */
+        TBool NeedsCompress( );
+        
+        /**
+        * From CActive
+        */
+        void DoCancel( );
+
+        /**
+        * From CActive
+        */
+        void RunL( );
+    
+        /**
+        * From CActive
+        */
+        TInt RunError( TInt aError );
+
+    protected: 
+
+        /**
+        * Constructor.
+        */
+        CPostcardOperationInsertImage(
+            MPostcardOperationObserver& aObserver,
+            CPostcardDocument& aDocument,
+            CPostcardAppUi& aAppUi,
+            CMsgImageInfo* aInfo,
+            RFs& aFs );
+
+        /**
+        * 2nd phase constructor.
+        */
+        void ConstructL( );
+
+    protected: // data
+
+		/**
+		* Every operation starts with EPostcardInsertImageCreateAtta
+		*
+		* If image is only converted/scaled, this is needed:
+		*	EPostcardInsertImageConvert (callback ScalingReady)
+		*
+		* If image is only compressed, this is needed:
+		*	EPostcardInsertImageCompress
+		*
+		* If image is first scaled and then compressed
+		*	EPostcardInsertImageConvert (callback ScalingReady)
+		*	EPostcardInsertImageCreateAttaAfterConvertForCompress
+		*	EPostcardInsertImageCompress (callback CompressionReady)
+		*	EPostcardInsertImageDeleteTempAtta
+		*
+		* If image is not specifically processed, this is needed:
+		*	EPostcardInsertImageRename
+		*
+		* In the end EPostcardInsertImageFinalizeSave where the changes are commited.
+		* And EPostcardInsertImageCreateBitmap creates the bitmap to be shown in the screen
+		*
+		*/
+
+        enum TPostcardInsertImageState
+            {
+            EPostcardInsertImageInitializing = 0,
+            EPostcardInsertImageCheckAttas,
+            EPostcardInsertImageCreateAtta,
+            EPostcardInsertProcessImage,
+			EPostcardInsertImageRename,
+            EPostcardInsertImageFinalizeSave,
+            EPostcardInsertImageCreateBitmap,
+            EPostcardInsertImageFinished,
+            EPostcardInsertImageError
+            };
+
+        enum TPostcardInsertImageFlags
+            {
+            EPostcardInsertImageConvertingImage = 1,
+            EPostcardInsertImageRequestActive = 2
+            };
+
+        CMsgImageInfo*      iInfo;		// ImageInfo given when this instance is constructed
+
+		RFile*				iCompressFile; // RFile created when the file is being compressed/processed
+		CMsvAttachment*		iScaleAtta;		// Attachment file for scaled file
+		CMsvAttachment*		iCompressAtta;	// Attachment file for compressed file
+		CMsvAttachment*		iNoOpAtta;		// Attachment file for images that need no special handling
+
+		CUniImageProcessor*	iImageProcessor;	// Image processor
+
+        MIHLFileImage*      iSourceImage;       // source image for scaling to bitmap
+        MIHLBitmap*         iDestinationBitmap; // scaled MIHL bitmap
+        MIHLImageViewer*    iImageHandler;      // image handler for scaling
+
+        TInt                iFlags;
+    };
+
+#endif // __PostcardOperationInsertImage_H