--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imageeditorengine/JpegRotator/inc/JpegRotator.h Fri Jan 29 13:53:17 2010 +0200
@@ -0,0 +1,225 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "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:
+* Ixonos Plc
+*
+* Description:
+*
+*/
+
+
+#ifndef JPEGROTATOR_H
+#define JPEGROTATOR_H
+
+
+// INCLUDES
+#include <e32base.h>
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class CJpegRotatorImpl;
+class RFs;
+
+
+/* CLASS: MJpegRotatorObserver
+*
+* Observer interface, which can be optionally implemented
+* to receive progress information during the image rotation
+* (in block mode only).
+*
+*/
+class MJpegRotatorObserver
+{
+public:
+
+ /**
+ * Informs the caller that one set of image data blocks has been
+ * processed, so the progress bar should be incremented.
+ * The size of the progress increment is returned by RotateImageL
+ *
+ * @param -
+ * @param -
+ */
+ virtual void Increment() = 0;
+};
+
+
+
+/* CLASS: CJpegRotator
+*
+* Rotates an image in 90 degrees steps.
+* Available rotation modes:
+*
+* - ERotModeCounterClockwise,
+* - ERotModeClockwise,
+* - ERotMode90,
+* - ERotMode180,
+* - ERotMode270
+*
+*
+* USAGE
+*
+* Example 1: asynchronous rotate
+*
+* iJpegRotator = CJpegRotator::NewL( iEikonEnv->FsSession() );
+*
+* // Launch wait dialog
+* iWaitDialog = new (ELeave) CAknWaitDialog (
+* reinterpret_cast<CEikDialog**>(&iWaitDialog),
+* ETrue );
+* iWaitDialog->SetTone( CAknNoteDialog::EConfirmationTone );
+* iWaitDialog->ExecuteLD( R_WAIT_DIALOG );
+*
+* // Start waiting active object. Inthis example, we have an dedicated AO
+* // to wait for the completion, but of course the caller could itself be the AO.
+* delete iWaiter;
+* iWaiter = new (ELeave) CJpegRotatorTestWaiter (*this);
+* iWaiter->StartWaitL();
+*
+* // Start rotate
+* iJpegRotator->RotateImageL( (iWaiter->iStatus), iSource, iTarget, CJpegRotator::ERotModeClockwise );
+* ...
+* ...
+* // When the rotate is finished, (iWaiter->iStatus) will be completed with KErrNone,
+* // or an error code, if the rotate failed or was cancelled.
+*
+*
+*/
+class CJpegRotator : public CBase
+{
+
+public:
+
+/** @name Typedefs:*/
+//@{
+ enum TRotationMode
+ {
+ ERotModeCounterClockwise = 0,
+ ERotModeClockwise = 1,
+ ERotMode90 = ERotModeCounterClockwise,
+ ERotMode180 = 2,
+ ERotMode270 = ERotModeClockwise,
+ ERotMode0 = 3
+ };
+//@}
+
+/** @name Methods:*/
+//@{
+
+ /** NewLC factory method, does not pop cleanup stack
+ *
+ * @param - aFsSession
+ * @param - aObserver
+ * @return pointer to created CJpegRotator object
+ */
+ IMPORT_C static CJpegRotator * NewLC ( RFs & aFsSession );
+
+ /** NewL factory method, pops cleanup stack
+ *
+ * @param - aFsSession
+ * @param - aObserver
+ * @return pointer to created CJpegRotator object
+ */
+ IMPORT_C static CJpegRotator * NewL ( RFs & aFsSession );
+
+ /** Destructor
+ *
+ * @param -
+ * @return -
+ */
+ IMPORT_C ~CJpegRotator ();
+
+ /** RotateImageL
+ *
+ * Rotates the JPEG image, asynchronous one-block version.
+ *
+ * Lossless rotate mode is used by default
+ *
+ * Starts the rotate. After the rotation is completed, the
+ * supplied TRequestStatus is completed.
+ *
+ * If the rotation fails, the request is completed with the error code,
+ * KErrNone otherwise. The function may also leave, if the error happens
+ * during the pre-rotate check phase.
+ *
+ * Possible error codes include:
+ * - KErrArgument if the rotation argument is out of range.
+ * - KErrNotFound if the source file does not exist.
+ * - KErrCorrupt if the source image could not be read.
+ * - KErrNotSupported if the image type can't be handled (not baseline JPEG)
+ * - KErrPathNotFound if the target path does not exist.
+ * - KErrAlreadyExists if the target file already exists.
+ * - Other system-wide error codes.
+ *
+ * @param aStatus -
+ * Reference to the TRequestStatus of an active object,
+ * which will be completed when the rotation finishes.
+ * @param aRotationMode - The rotation direction
+ * @param aSourceFileName - The image to be rotated
+ * @param aTargetFileName - The target file where the rotated image will be saved
+ * @param aHandleExifData - Do we update/create the EXIF data in the JPEG image
+ * @param aForceLossyMode - Use lossy mode instead of lossless mode
+ * @return -
+ */
+ IMPORT_C void RotateImageL (
+ TRequestStatus & aStatus,
+ const TDesC & aSourceFileName,
+ const TDesC & aTargetFileName,
+ CJpegRotator::TRotationMode aRotationMode,
+ TBool aHandleExifData = ETrue,
+ TBool aForceLossyMode = EFalse
+ );
+
+ /** Cancel
+ *
+ * @param -
+ * @return -
+ */
+ IMPORT_C void Cancel ();
+
+//@}
+
+private:
+
+/** @name Methods:*/
+//@{
+
+ /** Default constructor
+ * @param -
+ * @return -
+ */
+ CJpegRotator ();
+
+ /** Second phase constructor, may leave
+ *
+ * @param - aFsSession
+ * @return -
+ */
+ void ConstructL ( RFs& aFsSession );
+
+//@}
+
+/** @name Members:*/
+//@{
+
+ /// Internal representation
+ CJpegRotatorImpl * iImplementation;
+
+//@}
+
+};
+
+#endif
+
+
+// End of File