creator/inc/engine.h
branchRCL_3
changeset 21 b3cee849fa46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/inc/engine.h	Tue Aug 31 15:15:20 2010 +0300
@@ -0,0 +1,587 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __CREATORENGINE_H__
+#define __CREATORENGINE_H__
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <e32hal.h>
+#include <s32file.h>
+#include <s32mem.h>
+#include <w32std.h>
+
+//#include <aknenv.h>
+#include <coeutils.h>
+#include <apparc.h>
+#include <eikenv.h>
+//#include <eikprogi.h>
+#include <bautils.h>
+#include <commdb.h>
+#include <imageconversion.h> //TFrameInfo
+
+#include "creator.hrh"
+#include "creator_std.h"
+#include "creator_randomdataparser.h"
+
+//class CCreatorAppUi;
+class TCommand;
+class CCreatorBrowser;
+class CCreatorCalendarBase;
+class CCreatorNotepad;
+class CCreatorLogs;
+//class CCreatorAccessPoints;
+class CCreatorMailboxes;
+class CCreatorIMPS;
+class CCreatorFiles;
+class CCreatorMessages;
+class CCreatorLandmarks;
+class MCreatorModuleBase;
+class CCreatorPhonebookBase;
+class CCreatorModuleBaseParameters;
+//class CCreatorConnectionSettingsBase;
+class CDictionaryFileStore;
+class CImageDecoder;
+class CFbsBitmap;
+class CBitmapScaler;
+class CCommandParser;
+class EngineWrapper;
+class CCreatorCmdScriptRun;
+
+static const TUid KUidCreatorApp = {0x20011383};
+
+enum TListQueryId
+	{
+	R_GROUP_CREATION_TYPE_QUERY,
+	R_CONTACT_CREATION_TYPE_QUERY,
+	R_MESSAGE_TYPE_QUERY,
+	R_FOLDER_TYPE_QUERY,
+	R_UNREAD_QUERY,
+	R_ATTACHMENT_MULTI_SELECTION_QUERY,
+	R_AMS_ATTACHMENT_SINGLE_SELECTION_QUERY,
+	R_ATTACHMENT_SINGLE_SELECTION_QUERY
+	};
+
+/*
+ * Interface for UI dialogs
+ */
+class MUIObserver
+    {
+public:
+    /**
+     * Called when some dialog in UI is closed
+     *
+     * @since S60 10.1
+     * @param aPositiveAction ETrue if "Ok", "Yes" or other "positive" button was pressed
+     * @param aUserData number that was passed to UI before dialog was opened
+     * @return None.
+     */
+    virtual void QueryDialogClosedL(TBool aPositiveAction, TInt aUserData) = 0;
+
+    };
+
+/*
+ * Interface for CCommandParser
+ */
+class MCommandParserObserver
+    {
+public:
+    /**
+     * Called when CCommandParser user has choosen script file
+     *
+     * @since S60 10.1
+     * @param aSuccess ETrue if "Ok", "Yes" or other "positive" button was pressed
+     * @param aFileName filename chosen by user
+     * @return None.
+     */
+    virtual void ScriptChosenL(TBool aSuccess, const TDesC& aFileName = KNullDesC) = 0;
+
+    /**
+     * Called when CCommandParser user has choosen random data file
+     *
+     * @since S60 10.1
+     * @param aSuccess ETrue if "Ok", "Yes" or other "positive" button was pressed
+     * @param aFileName filename chosen by user
+     * @return None.
+     */
+    virtual void RandomDataFileChosenL(TBool aSuccess, const TDesC& aFileName = KNullDesC) = 0;
+    };
+
+/**
+ * Device memory information
+ */
+class TMemoryDetails
+	{
+public:
+	
+	TBuf<16> iFree;
+	TBuf<16> iSize;
+	TChar iDriveLetter;
+
+    TBuf<16> iRamFree;
+    TBuf<16> iRomFree;
+    
+	TBool    iENotAvailable;
+
+	TBuf<16> iRamSize;
+	TBuf<16> iRomSize;
+	};
+// Common constant for undefined integer value:
+const TInt KUndef = KErrNotFound;
+
+class CCreatorEngine : public CActive, public MUIObserver, public MCommandParserObserver
+	{
+enum ECreatorEngineState{
+    ECreatorEngineDeleteAllEntries,
+    ECreatorEngineDeleteAllCreatorEntries,
+};
+public:
+    
+    enum TRandomStringType
+        {
+        EFirstName = 0,
+        ESurname,
+        ECompany,
+        EAddress,
+        EJobTitle,
+        EPhoneNumber,
+        EGroupName,
+        EMeetingReason,
+        EMeetingPlace,
+        EMemoText,
+        EAnniversaryReason,
+        EToDoText,
+        EReminderText,
+        EMessageSubject,
+        EMessageText,
+        ECity,
+        ECountry,
+        EPostcode,        
+        EState,
+        EPobox,
+        EPrefix,
+        ESuffix,
+        ELandmarkName,
+        ELandmarkDescription
+        };
+
+
+// note! changing order will cause regression in other modules
+
+    enum TTestDataPath
+        {
+        EJPEG_25kB = 0,
+        EJPEG_200kB,
+        EJPEG_500kB,
+        EPNG_15kB,
+        EGIF_2kB,
+        ERNG_1kB,
+        EMIDI_10kB,
+        EWAVE_20kB,
+        EAMR_20kB,
+        EExcel_15kB,
+        EWord_20kB,
+        EPowerPoint_40kB,
+        EText_10kB,
+        EText_70kB,
+        E3GPP_70kB,
+        EMP3_250kB,
+        EAAC_100kB,
+        ERM_95kB,
+        EBMP_25kB,
+        EHTML_20kB,
+        EJAD_1kB,
+        EJAR_10kB,
+        EJP2_65kB,
+        EMP4_200kB,
+        EMXMF_40kB,
+        ERAM_1kB,
+        ESVG_15kB,
+        ESWF_15kB,
+        ETIF_25kB,
+        EVCF_1kB,
+        EVCS_1kB,
+        ESISX_10kB,
+        EWMA_50kB,
+        EWMV_200kB,
+        ESavedDeck_1kB,
+        LAST_FILE_ID//When you add new items to enum, add them before last item, so random number generations does not need to be updated also         
+        };
+        
+    enum TRandomDateType
+        {
+        EDatePast,
+        EDateFuture    
+        };
+
+public:
+    /**
+     * Constructor: NewL
+     */
+    static CCreatorEngine* NewL(EngineWrapper *aEngineWrapper);
+    /**
+     * Constructor: NewLC
+     */
+    static CCreatorEngine* NewLC(EngineWrapper *aEngineWrapper);	
+    ~CCreatorEngine();
+	
+    inline RPointerArray<TMemoryDetails> GetMemoryDetailsList(){ return iMemoryDetailsList; };
+	inline TMemoryDetails GetMemoryDetails(){ return iMemoryDetails; };
+	inline EngineWrapper* GetEngineWrapper(){ return iEngineWrapper; };
+	
+private:
+    CCreatorEngine();
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL(EngineWrapper *aEngineWrapper);
+	
+	void RequestMemoryDetails();
+    TBool MMC_OK() const;
+    void Init();
+    void RunL();
+    TInt RunError(TInt aError);
+    void DoCancel();
+
+    void ExecuteCommand();
+    void StartEnginesL();
+    void CheckForMoreCommandsL();
+    
+    TBool IsDeleteCommand( TInt aCommand );
+    
+    TInt ReadRandomDataL(const TRandomStringType aRandomStringType,
+    		             const TInt aResourceId,
+    		             const TDesC& aFilename,
+    		             const CCreatorRandomDataParser::TRandomDataType aRandomDataType);
+    void GenerateSourceImageFileL( const TTestDataPath aFileType, const TDesC& aFileName );
+    void GenereteSourceTextFileL( const TDesC& aFileName, TInt aSize );
+
+public: // from MUIObserver
+    /**
+     * Called when some dialog in UI is closed
+     *
+     * @since S60 10.1
+     * @param aPositiveAction ETrue if "Ok", "Yes" or other "positive" button was pressed
+     * @param aUserData number that was passed to UI before dialog was opened
+     * @return ?description
+     */
+    virtual void QueryDialogClosedL(TBool aPositiveAction, TInt aUserData);
+    
+public: // from MCommandParserObserver
+    /**
+     * Called when CCommandParser user has choosen script file
+     *
+     * @since S60 10.1
+     * @param aSuccess ETrue if "Ok", "Yes" or other "positive" button was pressed
+     * @param aFileName filename chosen by user
+     * @return None.
+     */
+    virtual void ScriptChosenL(TBool aSuccess, const TDesC& aFileName = KNullDesC);
+    
+    /**
+     * Called when CCommandParser user has choosen random data file
+     *
+     * @since S60 10.1
+     * @param aSuccess ETrue if "Ok", "Yes" or other "positive" button was pressed
+     * @param aFileName filename chosen by user
+     * @return None.
+     */
+    virtual void RandomDataFileChosenL(TBool aSuccess, const TDesC& aFileName = KNullDesC);
+    
+public:
+    void ExecuteOptionsMenuCommandL(TInt aCommand);
+    void RunScriptL();
+    TInt RunScriptL(const TDesC& aScriptFile);
+    void ShutDownEnginesL();
+    void ExecuteFirstCommandL(const TDesC& aText);
+    
+    void AppendToCommandArrayL(TInt aCommand, CCreatorModuleBaseParameters* aParameters, TInt aNumberOfEntries = 1);
+    TInt CommandArrayCount();
+ 
+    TPtrC TestDataPathL(enum TTestDataPath aTestDataPath);
+    TPtrC RandomSoundFileL(); // Returns temporary path, which will be removed on shutdown 
+    void RandomPictureFileL(TDes& aPath);  // aPath temporary path, which will be removed on shutdown
+    TPtrC CreateRandomSoundFileL(); // Copies file to new location and returns the new path
+    TPtrC CreateSoundFileL(TTestDataPath aId); // Copies file to new location and returns the new path
+    
+    void CopyFileL(const TFileName& aSourceFile, const TFileName& aTargetFile, TBool aOverwrite = EFalse );
+    /*
+     * Gets attacment file id based on the file id string
+     * @return Attachment file id
+     * @param aAttachmentIdStr Attachment file id string
+     */
+    TInt GetAttachmentIdL( const TDesC& aAttachmentIdStr ) const;    
+
+    TUint32 GetDefaultIAPL();
+    TUint32 AccessPointNameToIdL(const TDesC& aAPName, TBool aAnyIfNotFound = EFalse );
+
+    TPtrC RandomString(enum TRandomStringType aRandomStringType);    
+    TInt RandomNumber(TInt aRange);
+    TInt RandomNumber(TInt aMin, TInt aMax);
+    TTime RandomDate(TRandomDateType type, TInt aMinDays = 0, TInt aMaxDays = 360 );
+    TTime RandomDate(TTime baseTime, TRandomDateType type, TInt aMinDays = 0, TInt aMaxDays = 360);  
+    TTime RandomTime(TTime baseTime, TRandomDateType type, TInt aMinHours=0, TInt aMaxHours=24, TInt aMinMinutes=0, TInt aMaxMinutes=60 );
+    CDesCArrayFlat* SoundFilesL();
+    CDesCArrayFlat* PictureFilesL();
+    
+    HBufC* CreateEmailAddressLC();
+    HBufC* CreateHTTPUrlLC();
+    HBufC* CreateRandomStringLC(TInt aStrLen);
+    
+    HBufC* CreateEmailAddressLC(
+            const TDesC& firstname,
+            const TDesC& lastname,
+            const TDesC& domain,
+            const TDesC& country ) const;
+    
+    HBufC* CreateUrlLC(
+            const TDesC& protocol,
+            const TDesC& prefix,
+            const TDesC& domain,
+            const TDesC& country) const;
+    
+    void SetDefaultPathForFileCommandL(TInt aCommand, TFileName& aPath);
+
+    TBool GetRandomDataL();
+    TBool GetRandomDataFromFileL(const TDesC& aFilename);
+    void CancelComplete();
+    CDictionaryFileStore* FileStoreLC();
+    void ReadEntryIdsFromStoreL( RArray<TInt>& aEntryIds, const TUid aModuleUid );
+    void WriteEntryIdsToStoreL( RArray<TInt>& aEntryIds, const TUid aModuleUid );
+    void ReadEntryIdsFromStoreL( RArray<TUint32>& aEntryIds, const TUid aModuleUid );
+    void WriteEntryIdsToStoreL( RArray<TUint32>& aEntryIds, const TUid aModuleUid );
+    void RemoveStoreL( const TUid aModuleUid );
+	void ProgressDialogCancelledL();
+	
+	void SortCommands();
+    
+private:
+    // needed by the engine itself
+    RTimer iTimer;
+    CEikonEnv* iEnv;
+    //CCreatorAppUi* iAppUi;
+    TInt iCurrentEntry;
+    TInt iFailedCommands;
+
+    CDesCArrayFlat* iSoundFileArray;
+    CDesCArrayFlat* iPictureFileArray;
+    CCommandArray* iCommandArray;
+    RPointerArray<CCreatorModuleBaseParameters> iParameterArray;
+    // progress bar
+    //CAknProgressDialog* iProgressDialog;
+    //CEikProgressInfo* iProgressInfo;
+        
+    // for the random data generator
+    TInt64 iSeed;
+    
+    class TStringArrayPtr
+        {
+        public:
+        TStringArrayPtr(TRandomStringType aType, CDesCArray* aPtr)
+            {
+            iStringType = aType;
+            iArrayPtr = aPtr;
+            };
+        TRandomStringType iStringType;
+        CDesCArray* iArrayPtr;
+        }; 
+    
+    RArray<TStringArrayPtr> iStringArrays;
+    
+    // modules
+    CCreatorBrowser* iBrowser;
+    CCreatorCalendarBase* iCalendar;
+    CCreatorPhonebookBase* iPhonebook;
+    CCreatorNotepad* iNotepad;
+    CCreatorLogs* iLogs;
+//    CCreatorConnectionSettingsBase* iAccessPoints;
+    CCreatorMailboxes* iMailboxes;
+    CCreatorIMPS* iIMPS;
+    CCreatorFiles* iFiles;
+    CCreatorMessages* iMessages;
+    CCreatorLandmarks* iLandmarks;
+	CCreatorCmdScriptRun* iCmdScriptRun;
+	CCommandParser* iCommandParser;
+
+    // options menu command home module
+    MCreatorModuleBase* iUsedOptionsMenuModule;
+    
+    HBufC* iTempPath;
+    
+    RPointerArray<HBufC> iAllocatedFilePaths;
+    TBool iUserCancelled;
+    
+    // For generating missing bitmaps
+    HBufC8* iBitmapData;
+    CFbsBitmap* iBitmap;
+    CFbsBitmap* iScaledBitmap;
+    CImageDecoder* iDecoder;
+    TFrameInfo iFrameinfo;
+    CImageEncoder* iEncoder;
+    CFrameImageData* iFrameImageData;
+    CBitmapScaler* iScaler;
+
+    EngineWrapper* iEngineWrapper; // Enginewrapper that is used for communicating between QT and Symbian
+	TMemoryDetails iMemoryDetails;
+	
+	RPointerArray<TMemoryDetails> iMemoryDetailsList;
+	
+	TInt iResourceFileId;
+
+	HBufC* iCommandLineScriptName;
+	HBufC* iCommandLineRandomDataFileName;
+	};
+
+// this class contains a command which will be executed
+class TCommand
+    {
+public:
+    TInt iCommandId;
+    CCreatorModuleBaseParameters* iParameters;
+public:
+    TCommand(TInt aCommandId, CCreatorModuleBaseParameters* aParameters);
+    ~TCommand();
+
+    };
+
+
+// utility class for waiting for asychronous requests
+class CAsyncWaiter : public CActive
+	{
+public:
+	static CAsyncWaiter* NewL( TInt aPriority = EPriorityStandard );
+	static CAsyncWaiter* NewLC( TInt aPriority = EPriorityStandard );
+	~CAsyncWaiter();
+	
+	void StartAndWait();
+	TInt Result() const;
+	
+private:
+	CAsyncWaiter( TInt aPriority );
+	
+	// from CActive
+	void RunL();
+	void DoCancel();
+	
+private:
+    CActiveSchedulerWait iWait;
+	TInt iError;
+    };
+	
+	
+/*
+ * Maps file id string (file name) to TTestDataPath (file id) and TCreatorIds (command id)
+ */
+// File ids:
+	
+	_LIT(K3GPP_70KB, "3GPP-70kB");
+	_LIT(KAAC_100KB, "AAC-100kB");
+	_LIT(KAMR_20KB, "AMR-20kB");
+	_LIT(KXLS_15KB, "XLS-15kB");
+	_LIT(KGIF_2KB, "GIF-2kB");
+	_LIT(KJPEG_200KB, "JPEG-200kB");
+	_LIT(KJPEG_25KB, "JPEG-25kB");
+	_LIT(KJPEG_500KB, "JPEG-500kB");
+	_LIT(KMIDI_10KB, "MIDI-10kB");
+	_LIT(KMP3_250KB, "MP3-250kB");
+	_LIT(KPNG_15KB, "PNG-15kB");
+	_LIT(KPPT_40KB, "PPT-40kB");
+	_LIT(KRM_95KB, "RM-95kB");
+	_LIT(KRNG_1KB, "RNG-1kB");
+	_LIT(KTXT_10KB, "TXT-10kB");
+	_LIT(KTXT_70KB, "TXT-70kB");
+	_LIT(KWAV_20KB, "WAV-20kB");
+	_LIT(KDOC_20KB, "DOC-20kB");
+	_LIT(KSWF_15KB, "SWF-15kB");
+	_LIT(KJAD_1KB, "JAD-1kB");
+	_LIT(KJAR_10KB, "JAR-10kB");
+	_LIT(KTIF_25KB, "TIF-25kB");
+	_LIT(KMXMF_40KB, "MXMF-40kB");
+	_LIT(KBMP_25KB, "BMP-25kB");
+	_LIT(KJP2_25KB, "JP2-25kB");
+	_LIT(KSVG_15KB, "SVG-15kB");
+	_LIT(KHTML_20KB, "HTML-20kB");
+	_LIT(KVCF_1KB, "VCF-1kB");
+	_LIT(KVCS_1KB, "VCS-1kB");
+	_LIT(KMP4_200KB, "MP4-200kB");
+	_LIT(KSISX_10KB, "SISX-10kB");
+	_LIT(KRAM_1KB, "RAM-1kB");
+    _LIT(KDECK_1KB, "DECK-1kB");
+    _LIT(KWMA_50KB, "WMA-50kB");
+    _LIT(KWMV_200KB, "WMV-200kB");
+	
+class FileMapping
+    {
+	public:
+	FileMapping(const TDesC& aFileName, TInt aFileId, TInt aCommandId );
+	const TDesC& FileName() const;
+	TInt FileId() const;
+	TInt CommandId() const;
+
+	private:
+	const TDesC& iFileName;
+	TInt  iFileId;
+	TInt  iCommandId;
+	};
+	
+	/*
+	 * This table contains the string <-> TTestDataPath mappings for the file types
+	 */
+	static FileMapping FileMap[] = 
+	    {
+      
+	    FileMapping(K3GPP_70KB, CCreatorEngine::E3GPP_70kB, ECmdCreateFileEntry3GPP_70kB),
+	    FileMapping(KAAC_100KB, CCreatorEngine::EAAC_100kB, ECmdCreateFileEntryAAC_100kB),
+	    FileMapping(KAMR_20KB, CCreatorEngine::EAMR_20kB, ECmdCreateFileEntryAMR_20kB),
+	    FileMapping(KXLS_15KB, CCreatorEngine::EExcel_15kB, ECmdCreateFileEntryXLS_15kB),
+	    FileMapping(KGIF_2KB, CCreatorEngine::EGIF_2kB, ECmdCreateFileEntryGIF_2kB),
+	    FileMapping(KJPEG_200KB, CCreatorEngine::EJPEG_200kB, ECmdCreateFileEntryJPEG_200kB),
+	    FileMapping(KJPEG_25KB, CCreatorEngine::EJPEG_25kB, ECmdCreateFileEntryJPEG_25kB),
+	    FileMapping(KJPEG_500KB, CCreatorEngine::EJPEG_500kB, ECmdCreateFileEntryJPEG_500kB),
+	    FileMapping(KMIDI_10KB, CCreatorEngine::EMIDI_10kB, ECmdCreateFileEntryMIDI_10kB),
+	    FileMapping(KMP3_250KB, CCreatorEngine::EMP3_250kB, ECmdCreateFileEntryMP3_250kB),
+	    FileMapping(KPNG_15KB, CCreatorEngine::EPNG_15kB, ECmdCreateFileEntryPNG_15kB),
+	    FileMapping(KPPT_40KB, CCreatorEngine::EPowerPoint_40kB, ECmdCreateFileEntryPPT_40kB),
+	    FileMapping(KRM_95KB, CCreatorEngine::ERM_95kB, ECmdCreateFileEntryRM_95kB),
+	    FileMapping(KRNG_1KB, CCreatorEngine::ERNG_1kB, ECmdCreateFileEntryRNG_1kB),
+	    FileMapping(KTXT_10KB, CCreatorEngine::EText_10kB, ECmdCreateFileEntryTXT_10kB),
+	    FileMapping(KTXT_70KB, CCreatorEngine::EText_70kB, ECmdCreateFileEntryTXT_70kB),
+	    FileMapping(KWAV_20KB, CCreatorEngine::EWAVE_20kB, ECmdCreateFileEntryWAV_20kB),
+	    FileMapping(KDOC_20KB, CCreatorEngine::EWord_20kB, ECmdCreateFileEntryDOC_20kB),
+	    FileMapping(KBMP_25KB, CCreatorEngine::EBMP_25kB, ECmdCreateFileEntryBMP_25kB),
+	    FileMapping(KDECK_1KB, CCreatorEngine::ESavedDeck_1kB, ECmdCreateFileEntryDeck_1kB),
+	    FileMapping(KHTML_20KB, CCreatorEngine::EHTML_20kB, ECmdCreateFileEntryHTML_20kB),
+	    FileMapping(KJAD_1KB, CCreatorEngine::EJAD_1kB, ECmdCreateFileEntryJAD_1kB),
+	    FileMapping(KJAR_10KB, CCreatorEngine::EJAR_10kB, ECmdCreateFileEntryJAR_10kB),
+	    FileMapping(KJP2_25KB, CCreatorEngine::EJP2_65kB, ECmdCreateFileEntryJP2_65kB),
+	    FileMapping(KMP4_200KB, CCreatorEngine::EMP4_200kB, ECmdCreateFileEntryMP4_200kB),
+	    FileMapping(KMXMF_40KB, CCreatorEngine::EMXMF_40kB, ECmdCreateFileEntryMXMF_40kB),
+	    FileMapping(KRAM_1KB, CCreatorEngine::ERAM_1kB, ECmdCreateFileEntryRAM_1kB),
+	    FileMapping(KSVG_15KB, CCreatorEngine::ESVG_15kB, ECmdCreateFileEntrySVG_15kB),
+	    FileMapping(KSWF_15KB, CCreatorEngine::ESWF_15kB, ECmdCreateFileEntrySWF_15kB),
+	    FileMapping(KTIF_25KB, CCreatorEngine::ETIF_25kB, ECmdCreateFileEntryTIF_25kB),
+	    FileMapping(KVCF_1KB, CCreatorEngine::EVCF_1kB, ECmdCreateFileEntryVCF_1kB),
+	    FileMapping(KVCS_1KB, CCreatorEngine::EVCS_1kB, ECmdCreateFileEntryVCS_1kB),
+	    FileMapping(KSISX_10KB, CCreatorEngine::ESISX_10kB, ECmdCreateFileEntrySISX_10kB),
+	    FileMapping(KWMA_50KB, CCreatorEngine::EWMA_50kB, ECmdCreateFileEntryWMA_50kB),
+	    FileMapping(KWMV_200KB, CCreatorEngine::EWMV_200kB, ECmdCreateFileEntryWMV_200kB)
+	    };
+
+#endif // __CREATORENGINE_H__
+