imgeditor_plat/image_editor_utilities_api/inc/ImageEditorUtils.h
changeset 1 edfc90759b9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgeditor_plat/image_editor_utilities_api/inc/ImageEditorUtils.h	Fri Jan 29 13:53:17 2010 +0200
@@ -0,0 +1,322 @@
+/*
+* 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: 
+* Static utility class.
+*
+*/
+
+
+#ifndef IMAGEEDITORUTILS_H
+#define IMAGEEDITORUTILS_H
+
+#include <e32base.h>
+#include <coemain.h>
+
+class CMGXFileManager;
+class RFs;
+
+
+/**
+ *  Static utility class
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib ImageEditorUtils.lib
+ *  @since S60 v5.0
+ */
+class ImageEditorUtils
+{
+public:
+
+    /**  Memory location */
+    enum TMemoryLocation
+	  {
+		  EPhone,
+		  EMmc,
+		  EMixed
+    };
+
+    /**  Memory location selection options  */
+    enum TMemorySelection
+    {
+      ESelectAutomatic,
+      ESelectPhone,
+      ESelectMmc
+    };
+
+    /**
+     * Generates a new name for the loaded document at the startup.
+     * If automatic memory selection is used, the generated file is located on the 
+     * MMC dy default. If the MMC is full or not present, the file will be in phone 
+     * memory. Optionally the file can be forced onto either drive.
+     * Internally, ImageFitsToDriveL is used to check the space.
+     *
+     * Media gallery album id list is no longer supported due to Media Gallery removal. 
+     * If an invalid album list is passed the behaviour is undefined.     
+     *
+     * @since S60 v5.0
+     * @param aFsSession file server session handle
+     * @param aSourceFileName source file name
+     * @param aTargetFileName target file name
+     * @param aMgAlbumIdList list of the albums the source image belongs to
+     * @param aReservedFileNames  additional list of already reserved file names
+     * @param aMemoryInUse  where the target file is created
+     * @return KErrNone if successfully generated file name
+     *         KSIEENotEnoughDiskSpace if no disk space to save the file
+     *         (size of aSourceFileName used to check the space)
+     *         KSIEEOpenFile if the source filename is invalid
+     */
+     IMPORT_C static TInt GenerateNewDocumentNameL (
+        RFs& aFsSession, 
+        const TDesC& aSourceFileName, 
+        TDes& aTargetFileName,
+        RArray<TInt>* aMgAlbumIdList = NULL,
+        const CDesCArray* aReservedFileNames = NULL,
+        ImageEditorUtils::TMemorySelection aMemoryInUse = ImageEditorUtils::ESelectAutomatic
+        );
+        
+    /**
+     * Generates a new name for the loaded document in filename query. A 
+     * unique filename is generated by adding running number after source 
+     * filename until unique name is found. e.g. if image name is "Image", 
+     * first attempt for new filename is "Image-001". If that is already 
+     * in use, "Image-002" is tried and so on. First unused filename is 
+     * then proposed for the user.
+     * ImageFitsToDriveL is used to check the space. 
+     *
+     * @since S60 v5.0
+     * @param aFsSession file server session handle
+     * @param aSourceFileName source file name
+     * @param aTargetFileName target file name
+     * @param aDrive the drive where the target file is to be created
+     * @param aReservedFileNames  additional list of already reserved file names
+     * @return KErrNone if successfully generated file name
+     *         KSIEENotEnoughDiskSpace if no disk space to save the file
+     *         (size of aSourceFileName used to check the space)
+     *         KSIEEOpenFile if the source filename is invalid
+     */    
+    IMPORT_C static TInt GenerateNewFileNameL (
+        RFs& aFsSession, 
+        const TDesC& aSourceFileName, 
+        TDes& aTargetFileName,
+        TFileName aDrive,
+        const CDesCArray* aReservedFileNames = NULL );
+        
+        
+    /**	GenerateFilePath
+	 *	    
+     * Generates a path for an image file. The memory selection option is given
+     * as a parameter.
+     * ImageEditorUtilsImageFitsToDriveL is used to check the space.
+     *
+     * Media gallery album id list is no longer supported due to Media Gallery removal. 
+     * If an invalid album list is passed the behaviour is undefined.     
+     *
+     * @since S60 v5.0
+     * @param aFsSession file server session handle
+     * @param aSourceFileName source file name
+     * @param aTargetFileName target file name
+     * @param aMgAlbumIdList list of the albums the source image belongs to
+     * @param aReservedFileNames  additional list of already reserved file names
+     * @param aMemoryInUse  where the target file is created
+     * @return KErrNone if successfully generated file name
+     *         KSIEENotEnoughDiskSpace if no disk space to save the file
+     *         (size of aSourceFileName used to check the space)
+     *         KSIEEOpenFile if the source filename is invalid
+	*/
+	IMPORT_C static TInt GenerateFilePathL (
+	    RFs& aFsSession, 
+    	const TDesC& aSourceFileName, 
+    	TDes& aTargetFileName,
+    	ImageEditorUtils::TMemorySelection aMemoryInUse );
+
+    /**
+     * Checks whether there is enough disk space to save
+     * the given file.
+     *
+     * @since S60 v5.0
+     * @param aFsSession file server session handle
+     * @param aSourceFile the file that would be saved
+     * @param aTargetPath the path to save (only drive part needed)
+     * @return ETrue if there is enough disk space to save the file
+     *         EFalse if there is not enough disk space
+     */
+     IMPORT_C static TBool ImageFitsToDriveL (
+        RFs& aFsSession,
+        const TDesC& aSourceFile,
+        const TDesC& aTargetPath
+        );
+
+    /**
+     * Checks whether there is enough disk space to save
+     * the given list of files.     
+     *
+     * @since S60 v5.0
+     * @param aFsSession file server session handle
+     * @param aSourceFileList the files that would be saved
+     * @param aTargetFileList the paths to save (only drive part needed)
+     * @return ETrue if there is enough disk space to save the files
+     *         EFalse if there is not enough disk space
+     */
+     IMPORT_C static TBool ImagesFitToDriveL (
+        RFs& aFsSession,
+        const CDesCArray& aSourceFileList,
+        const CDesCArray& aTargetFileList
+        );
+
+    /**
+     * Notifies the system that a new image has been saved,
+     * This is depreciated now and not used after MediaGallery removal.
+     *
+     * @since S60 v5.0
+     * @param aFsSession file server session handle
+     * @param aFileName name of the new file
+     * @return -
+     */
+     IMPORT_C static void NotifyNewMediaDocumentL (
+        RFs& aFsSession,
+        const TDesC& aFileName
+        );
+
+    /**
+     * Notifies the system that new images have been saved,
+     * making them visible in the Media Gallery.
+     * This is depreciated now and not used after MediaGallery removal.
+     *
+     * @since S60 v5.0
+     * @param aFsSession file server session handle
+     * @param aFileNameArray new file names
+     * @return -
+     */
+     IMPORT_C static void NotifyNewMediaDocumentL (
+        RFs& aFsSession,
+        const MDesCArray& aFileNameArray
+        );
+
+    /**
+     * Finds out in which Media Gallery Album the file belongs to.
+     * If compiled without album support, this function
+     * returns an empty array.
+     * Reset() is called for the array at the begining.
+     *
+     * @since S60 v5.0
+     * @param aAlbumList on return, contains the ID:s of the 
+     *                   Media Gallery albums the file belongs to
+     * @param aFileName the image file name
+     * @return -
+     */
+     IMPORT_C static void FindAlbumsForImageFileL ( 
+        RArray<TInt>& aAlbumIdList,
+        const TDesC& aFilename
+        );
+
+    /**
+     * Adds the given image file to the given album (e.g. video album).
+     * If compiled without album support, this function does nothing.
+     *
+     * @since S60 v5.0
+     * @param aFileName file name to be added to the album
+     * @param aAlbumId id of the album
+     * @return -
+     */
+     IMPORT_C static void AddImageFileToAlbumL ( 
+                                 const TDesC& aFileName,
+                                 TInt aAlbumId
+                                 );
+
+    /**
+     * Helper function to get the manufacturer and model of the device.
+     * Uses Shared Data client to retrieve the information.
+     * If compiled on a public SDKs, which do not contain shared data,
+     * this returns empty descriptors.
+     *
+     * @since S60 v5.0
+     * @param aMake manufacturer of the device
+     * @param aModel model of the device
+     * @return -
+     */
+     IMPORT_C static void GetMakeAndModelL( TDes8& aMake, TDes8& aModel );
+
+    /**
+     * Copies file without opening it, using RFs::ReadFileSection.
+     * Synchronous.
+     *
+     * @since S60 v5.0
+     * @param aFsSession file server session handle
+     * @param aSourceFileName source file name
+     * @param aDestinationFileName destination file name
+     * @param aOverwriteTarget is the target overwritten if it exists
+     * @return error code
+     */
+     IMPORT_C static TInt CopyFile (
+		                          RFs& aFsSession,
+                              const TDesC& aSourceFileName,
+                              const TDesC& aDestinationFileName, 
+                              TBool aOverwrite = ETrue
+                              );
+
+private:
+
+    /**
+     * Finds the offset of the edited image suffix of form "-NNN", 
+     * where NNN is the edit sequence number.
+     *
+     * @since S60 v5.0
+     * @param aName image name without extension
+     * @return offset of the edited image suffix
+     */
+     static TInt FindSuffix ( 
+                    const TDesC &   aName
+                    );
+
+    /**
+     * Checks if a file with the specified name already exists in the system.
+     *
+     * @since S60 v5.0
+     * @param aFs file server session handle
+     * @param aFileName file name to be checked
+     * @param aReservedFileNames explicitly recerved file names
+     * @return TBool
+     */
+     static TBool FileAlreadyExistsL ( 
+                       RFs& aFsSession, 
+                       const TDesC& aFileName,
+                       const CDesCArray* aReservedFileNames 
+                       );
+
+    /**
+     * Internal implementation of CopyFile
+     *
+     * @since S60 v5.0
+     * @param aFsSession file server session handle
+     * @param aSourceFileName source file
+     * @param aDestinationFileName destination file
+     * @param aSourceFileSize source file size in bytes
+     * @return -
+     */
+     static void DoCopyL (
+                   RFs& aFsSession,
+                   const TDesC& aSourceFileName,
+                   const TDesC& aDestinationFileName,
+                   TUint aSourceFileSize 
+                   );
+};
+
+
+#endif // IMAGEEDITORUTILS_H
+
+