voicerecorder/RecViewSrc/CVRMemo.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 31 Mar 2010 21:35:17 +0300
branchRCL_3
changeset 9 45ab7373901d
parent 0 845549f293a7
permissions -rw-r--r--
Revision: 201010 Kit: 201013

/*
* Copyright (c) 2002 - 2006 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 represents a voice memo. It is able to create new files,
*     rename and delete existing files, and to save them to permanent storage.
*
*/


#ifndef __CVRMEMO_H__
#define __CVRMEMO_H__

// INCLUDES
#include <f32file.h>
#include "voicerecorder.hrh"
#include "VRConsts.h"

// FORWARD DECLARATIONS
class CAknWaitDialog;
class CAknGlobalNote;

// CLASS DEFINITION
/**
* This class represents a voice memo. It is able to create new files,
* rename and delete existing files, and to save them to permanent storage.
*/
NONSHARABLE_CLASS( CVRMemo )
	: public CBase
	{

    public: // enumerations

        /*
        * File format of voice recorder
        * Possible values = 0 (AMR).
        */
        enum TVRFileFormat
	        {
	        EVRFormatAMR = 0	        
	        };

	public: // constructors and destructor

		/**
		* Default constructor.
		*/
		CVRMemo();

		/**
		* Destructor.
		*/
		~CVRMemo();

		/**
		* 2nd phase constructor.
        * @param aDefaultAudioFormat Default audio file format of VR
        *        Is really defined as TVRFileFormat, but for legacy reasons
        *        not used that way yet.
		*/
		void ConstructL(TInt aDefaultAudioFormat);
	
	public: // new methods

		/**
		* Changes the file name of this memo object.
		* @param aFilename New file name.
		*/
		void SetName( const TDesC& aFilename );

		/**
		* Sets the file name to a non-existent, new, name.
		* @param aEmbedded is true if creating temporary name for embedded
		* 				recording (different path)
		*/
		void SetTemporaryNameL( TBool aEmbedded = EFalse );

		/**
		* Shows a confirmation query and deletes the memo file
		* if user accepts.
		* @return ETrue if deletion was confirmed.
		*/
		TBool QueryAndDeleteL();

		/**
		* Deletes the current memo file.
		* The memo file name is set to KNullDesC
		*/
		void DeleteL();

		/**
		* Queries the user for a new name for the current memo file.
		* @return ETrue if rename was confirmed.
		*/
		TBool QueryAndRenameL();

		/**
		* Saves this memo to permanent storage. Removes the original
		* copy from RAM unless otherwise requested.
		* @param aProduceCopy Specify ETrue if you want to leave the
		*                     original memo file intact.
		*/
		void SavePermanentlyL( CAknGlobalNote* aWaitNote, TInt& aNoteId,
							   const TDesC& aLabel, TBool aProduceCopy = EFalse );

		/**
		* Checks wether the memo file represented by this object exists or not
		* @return ETrue if the file exists
		*/ 
		TBool IsValid() const;

		/**
		* Re-reads the file modification timestamp.
		*/
		void UpdateModifiedDate();

		/**
		* Returns the duration of the memo in microseconds.
		* @return Duration
		*/
		inline const TTimeIntervalMicroSeconds& Duration() const;

		/**
		* Sets the duration of the memo in microseconds.
		* This is for data storage only (does not affect playback).
		* @param aDuration The new duration.
		*/
		inline void SetDuration( const TTimeIntervalMicroSeconds& aDuration );

		/**
		* Returns the current playing position of the memo in microseconds.
		* @return Playing position
		*/
		inline const TTimeIntervalMicroSeconds& Position() const;

		/**
		* Sets the current playing position of the memo in microseconds.
		* This is for data storage only (does not affect playback).
		* @param aPosition The new position
		*/
		inline void SetPosition( const TTimeIntervalMicroSeconds& aPosition );

		/**
		* Returns the maximum duration of the memo in microseconds.
		* @return Maximum duration (for recording)
		*/
		const TTimeIntervalMicroSeconds& MaxDuration();

		/**
		* Returns the complete file name (path and everything).
		* @return Reference to the memo name.
		*/
		inline const TDesC& Filename() const;

		/**
		* Returns the name portion of the complete file name.
		* @return Reference to the memo name.
		*/
		inline const TPtrC& Name() const;

		/**
		* Returns the creation date of this file.
		* @return Reference to the date.
		*/
		inline const TTime& DateCreated() const;

		void SetSavingLocationL( const TDesC& aPath );
		
		/**
		* Returns the handle of the memo file.
		* You may have to check the SubSessionHandle() to
		* now if the file has been opened
		* @return Reference to the file handle
		*/
		inline RFile& File();

		/**
		* Returns the active quality setting.
		* @return Quality setting of the active memo
		*/
		inline TVRQuality Quality() const;

		/**
		* Used to set the target file handle.
		* @param aFile File handle
		* @param aEmbedded True if recording for external application and
		*		 handle must be kept open all the time
		*/
		void SetFileHandle( RFile& aFile, const TBool aEmbedded = EFalse );

		/**
		* Check if quality setting has changed and memo needs to be renamed.
		* Should be called at least before starting to record first memo
		* after application launch.
		*/
		void CheckQualityL();
		
		/**
		* Sets the attribute iIsRecorded ETrue if recording is started. EFalse
		* if memo is attached but recording isn't started.
		* @param aRecorded ETrue when recording is started
		*/
		void SetRecorded( TBool aRecorded );
		
		/**
		* Returns the current memo store.
		* .
		*/
		inline TVRMemoStore MemoStore() const;

		/**
		* Returns the creation date of this file.
		* @return Reference to the date.
		*/
		inline TInt StorageDrive() const;
		
		
		
	private:
		/**
		* Checks if iFile has an empty file open
		* and deletes it, leaving iFile closed
		* @return returns ETrue if file was deleted
		*/
		TBool DeleteEmptyFile();
		
		/**
		* Checks if recording to the currently open memo is started
		* Returns ETrue if recording is started, EFalse if not
		*/
		TBool IsRecorded() const;

	private: // data

		/**
		* Length of this memo in microseconds.
		*/
		TTimeIntervalMicroSeconds iDuration;

		/**
		* Length of this memo in microseconds.
		*/
		TTimeIntervalMicroSeconds iPosition;

		/**
		* Maximum length for all memos.
		*/
		TTimeIntervalMicroSeconds iMaxDuration;

		/**
		* The final path and file name of the memo.
		* Memo is moved to this path from temp drive when 
		* when it's saved
		*/
		TFileName iFilename;

		/**
		* Handle to actual file system file
		*/
		RFile iFile;

		/**
		* The name of this memo (the file name minus extension).
		* This is a ptr descriptor to the iFileName;
		*/
		TPtrC iNamePtr;

		/**
		* The creation time of this memo.
		*/
		TTime iDateCreated;

		/**
		* A reference to a connected file server session.
		* Used as a short cut. Not owned.
		*/
		RFs iFs;

		/**
		* Pointer to a file manager object. Owned.
		*/
		CFileMan* iFileMan;

		/**
		* The directory where memos will be saved.
		*/
		TFileName iSavingLocation;

		/**
		* Default audio format for recording audio clip
		*/
		TInt iVRAudioFormat;
        
		/**
		* Are we in embedded mode
		*/        
		TBool iEmbedded;
		
		/**
		* Is the RFile received from outside or should we close it
		*/        
		TBool iExternalFileHandle;		

        /**
        * Cached quality setting
        */
        TVRQuality iQuality;
		
		/**
		* Cached storage place setting
		*/
		TVRMemoStore iStoragePlace;

		/**
		* Cached storage drive setting
		*/
		TInt iStorageDrive;
		
		/**
		* Last time that the estimate was updated
		*/
		TTime iLastEstimate;
		
		/**
		* Tells if recording of current open memo is started. 
		* EFalse: not recording started
		* ETrue: recording is started
		*/
		TBool iIsRecorded;
	};

#include "CVRMemo.inl"

#endif	// __CVRMEMO_H__