--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/inc/CamImageSaveActive.h Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,396 @@
+/*
+* Copyright (c) 2007-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: Active object that manages saving and deletion of images*
+*/
+
+
+
+
+#ifndef CAMIMAGESAVEACTIVE_H
+#define CAMIMAGESAVEACTIVE_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include <badesca.h>
+#include <f32file.h>
+#include <thumbnailmanager.h>
+#include <thumbnailmanagerobserver.h>
+
+#if defined(RD_MDS_2_5) && !defined(__WINSCW__) && !defined(__WINS__)
+#include <harvesterclient.h>
+#endif // defined(RD_MDS_2_5) && !defined(__WINSCW__) && !defined(__WINS__)
+
+// DATA TYPES
+/**
+* Save event type
+*/
+enum TCamSaveEvent
+ {
+ ECamSaveEventStarted,
+ ECamSaveEventComplete,
+ ECamSaveEventBurstComplete,
+ ECamSaveEventUserCancelled,
+ ECamSaveEventDeleted,
+ ECamSaveEventSaveError,
+ ECamSaveEventCriticalError
+ };
+
+// CONSTANTS
+#ifdef _DEBUG
+const TUint16* const KCamSaveEventNames[] =
+ {
+ (const TUint16* const)_S16("ECamSaveEventStarted"),
+ (const TUint16* const)_S16("ECamSaveEventComplete"),
+ (const TUint16* const)_S16("ECamSaveEventBurstComplete"),
+ (const TUint16* const)_S16("ECamSaveEventUserCancelled"),
+ (const TUint16* const)_S16("ECamSaveEventDeleted")
+ };
+#endif
+
+// FORWARD DECLARATIONS
+class CAknProgressDialog;
+class CEikProgressInfo;
+class CCamBufferShare;
+class CCamAppController;
+class CCamBurstCaptureArray;
+
+// CLASS DECLARATIONS
+
+/**
+* Abstract API for image save observer.
+* Provides an asynchronous 'callback' method to inform derived classes
+* that the save operation has been completed.
+*
+* @since 2.8
+*/
+class MCamImageSaveObserver
+ {
+ public:
+ /**
+ * The image saving operation has completed
+ * @since 2.8
+ * @param aEvent the type of event
+ */
+ virtual void HandleSaveEvent( TCamSaveEvent aEvent ) = 0;
+
+ /**
+ *
+ */
+ virtual void HandleFileHarvestingComplete() = 0;
+ };
+
+/**
+* Class to manage the asynchronous saving and synchronous deletion
+* of images.
+* @since 2.8
+*/
+class CCamImageSaveActive : public CActive
+#if defined(RD_MDS_2_5) && !defined(__WINSCW__) && !defined(__WINS__)
+ ,private MHarvestObserver
+#endif // defined(RD_MDS_2_5) && !defined(__WINSCW__) && !defined(__WINS__)
+ , public MThumbnailManagerObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @since 2.8
+ * @param aObserver Informed when image saving has completed
+ */
+ static CCamImageSaveActive* NewL( MCamImageSaveObserver& aObserver,
+ CCamAppController& aController );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CCamImageSaveActive();
+
+ public: // Functions from base classes
+
+ /**
+ * From CActive, cancels the active object
+ * Deletes all files remaining in the save arrays except any currently
+ * saving file. If currently saving, the active object waits until the
+ * save completes then performs cleanup.. This method is synchronous
+ * even when it involves a wait for save completion.
+ * @since 2.8
+ */
+ void Cancel();
+
+ public: // New functions
+
+ /**
+ * A request for a file to be saved asynchronously, will be scheduled
+ * immediately if no other save is current, otherwise the save is queued
+ * @since 2.8
+ * @param aFilename the full path and filename to save the image to
+ * @param aImageData the image data to save
+ * @return Whether or not the image data has been successfully added
+ * to the pending save list.
+ */
+ TBool AddToSave( const TDesC& aFilename,
+ CCamBufferShare* aImageData );
+
+ /**
+ * A request for a file to be deleted. Will prevent any pending save.
+ * If the file to delete is currently saving the deletion will occur
+ * when the save operation completes.
+ * @since 2.8
+ * @param aFilename the full path and name of the file to be deleted
+ * @param aSaveRequested whether or not a previous request to save this file
+ * has been made.
+ * @return System wide error code to indicate success or failure of the deletion
+ */
+ TInt DeleteFile( const TDesC& aFilename, TBool aSaveRequested );
+
+ /**
+ * Returns whether a particular file has already been saved.
+ * @since 2.8
+ * @param aFilename the name of the file to check.
+ * @return ETrue if the file has been saved.
+ */
+ TBool AlreadySavedFile( const TDesC& aFilename ) const;
+
+ /**
+ * Returns whether a particular file is in the process of being saved.
+ * @since 2.8
+ * @param aFilename the name of the file to check.
+ * @return ETrue if the file is in the process of being saved.
+ */
+ TBool CurrentlySavingFile( const TDesC& aFilename ) const;
+
+ /**
+ * A request for the progress note to be displayed
+ * @since 2.8
+ * @param aExpectedImages the number of images to be saved
+ */
+ void DisplayProgressNote( TInt aExpectedImages );
+
+ /**
+ * A request for the progress note to be dismissed when the save completes
+ * @since 2.8
+ */
+ void DismissProgressNote();
+
+ /**
+ * Set the "Add to album" setting for photos
+ * determines whether or not photos are added to the default capture album
+ * after a successful save
+ * @since 2.8
+ * @param aAdding ETrue if "Add to album" is on, otherwise EFalse
+ */
+ void SetAddImageToAlbum( const TBool aAdding,
+ const TUint32 aDefaultAlbumId );
+
+ /**
+ * Add the specified file to the default capture album
+ * Called internally for images when save completes. Called externally for
+ * videos as video saving is handled elsewhere. Calls AddToAlbumL().
+ * @since 2.8
+ * @param aFilename The photo or video to add to the capture album
+ * @param aPhoto Indicates if the specified file is a photo or video
+ */
+ void AddToAlbum( const TDesC& aFilename,
+ const TBool aPhoto,
+ const TUint32 aDefaultAlbumId );
+
+ /**
+ * The number of items in the saving arrays
+ * @since 2.8
+ * @return A count of items
+ */
+ TInt Count() const;
+
+ /**
+ * Retrieves the file size of the specified file.
+ * @since 3.0
+ * @param aFilename The file to return the size of.
+ * @return The size of the file in bytes, or KErrNotFound
+ */
+ TInt FileSize( const TDesC& aFilename ) const;
+
+ /**
+ * Stores filename and snapshot handle for thumbnail creation
+ */
+ void CreateThumbnailsL( const CCamBurstCaptureArray& aArray );
+
+ /**
+ * Calls thumbnailmanager to create thumbnails
+ */
+ void DoCreateThumbnailL();
+
+ /**
+ * Cancels thumbnail creation for a given snapshot.
+ * @param aSnapshotIndex Index of the snapshot in burst array.
+ */
+ void CancelThumbnail( TInt aSnapshotIndex );
+
+ void ForceCancel();
+ /**
+ * From MThumbnailManagerObserver, not used
+ */
+ void ThumbnailPreviewReady( MThumbnailData& aThumbnail,
+ TThumbnailRequestId aId );
+
+ /**
+ * From MThumbnailManagerObserver, not used
+ */
+ void ThumbnailReady( TInt aError,
+ MThumbnailData& aThumbnail,
+ TThumbnailRequestId aId );
+
+#if defined(RD_MDS_2_5) && !defined(__WINSCW__) && !defined(__WINS__)
+ /*
+ * RegisterForHarvesterEvents
+ */
+ void RegisterForHarvesterEvents();
+
+ /*
+ * DeRegisterHarverterClientEvents
+ */
+ void DeRegisterHarverterClientEvents();
+
+ private: // From MHarvestObserver
+
+ /*
+ * HarvestingComplete
+ */
+ void HarvestingComplete( TDesC& aURI
+#ifdef RD_MDS_2_5
+ , TInt aError
+#endif //RD_MDS_2_5
+ );
+
+#endif // defined(RD_MDS_2_5) && !defined(__WINSCW__) && !defined(__WINS__)
+
+ private:
+
+ /**
+ * Constructor
+ * @since 2.8
+ * @param aObserver Informed when image saving has completed
+ */
+ CCamImageSaveActive( MCamImageSaveObserver& aObserver,
+ CCamAppController& aController );
+
+ /**
+ * 2nd phase construction
+ * @since 2.8
+ */
+ void ConstructL();
+
+ /**
+ * Schedule to run immediately
+ * @since 2.8
+ */
+ void SetActiveAndCompleteRequest();
+
+ /**
+ * Cancels the active object
+ * @since 2.8
+ */
+ void DoCancel();
+
+ /**
+ * Perform the next scheduled task
+ * @since 2.8
+ */
+ void RunL();
+
+ /**
+ * Handle leave in RunL.
+ * @param aError The error (leave) code from RunL.
+ */
+ TInt RunError( TInt aError );
+
+ /**
+ * Tidy up after a previous save has completed
+ * @param aDoFlush Should an asyncrhonous flush be done
+ * @since 2.8
+ */
+ void CompleteSaveOperation( TBool aDoFlush );
+
+ /**
+ * Carry out the next pending save operation
+ * @since 2.8
+ */
+ void DoSaveL();
+
+ /**
+ * Display the progress note
+ * @since 2.8
+ */
+ void DoDisplayProgressNoteL();
+
+ /**
+ * Dismiss the progress note when the saves have completed
+ * @since 2.8
+ */
+ void DoDismissProgressNote();
+
+ /**
+ * Indicate to observers that saving has completed
+ * @param aEvent the cause of completion
+ * @since 2.8
+ */
+ void ReportToObserver( TCamSaveEvent aEvent );
+
+ /**
+ * Helper method to release all the shared buffers in the array.
+ */
+ void ReleaseAllAndDestroy( RPointerArray<CCamBufferShare>& aArray );
+
+
+ private:
+
+ MCamImageSaveObserver& iObserver; // informed when image saving has completed
+ CCamAppController& iController;
+
+ CDesCArray* iSaveArray; // reserved filenames
+ RPointerArray<CCamBufferShare> iImageArray; // image data (order reflects iSaveArray)
+ CDesCArray* iNameArray; // filenames for thumbnail creation
+ RPointerArray<CFbsBitmap> iSnapArray; // snapshots for thumbnail creation
+ CThumbnailManager* iManager; // TN manager
+
+ RFile iFile; // Handle to a file object
+ TBool iSaveCurrent; // Indicates if a saving operation is ongoing
+ TBool iDeleteCurrent; // If the currently saving file needs deleting
+ TBool iDoCancel; // If further saves should be cancelled
+ TBool iShowNote; // If the progress note should be displayed
+ TBool iDismissNote; // If the progress note should be dismissed
+ // when all saves complete
+ TInt iExpectedImages; // The number of images expected for progress info
+ TInt iSaveProgressCount; // The count of images saved for this progress
+ TBool iCompletedBurst; // If a set of burst images has completed
+ CActiveSchedulerWait iWait; // To make asychronous synchronous during cancellation
+ // Progress note shown when the applicaiton must wait for saving to complete
+ CAknProgressDialog* iSaveProgressDialog;
+ // The progress bar shown in iSaveProgressDialog
+ CEikProgressInfo* iSaveProgressInfo;
+ TBool iAddImageToAlbum; // Whether or not images should be added to album
+ TUint32 iDefaultAlbumId; // To store the default album id from appcontroller
+ TBool iFlushing;
+ RArray<TThumbnailRequestId> iThumbnailRequests; // thumbnail request ids
+
+#if defined(RD_MDS_2_5) && !defined(__WINSCW__) && !defined(__WINS__)
+ RHarvesterClient iHarvesterClient;
+ TBool iRegisteredForHarvesterEvents;
+ TBool iHarvesterClientConnected;
+#endif // defined(RD_MDS_2_5) && !defined(__WINSCW__) && !defined(__WINS__)
+ };
+
+#endif // CAMIMAGESAVEACTIVE_H
+
+// End of File