diff -r 48060abbbeaf -r b3cee849fa46 creator/inc/engine.h --- /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 +#include +#include +#include +#include +#include + +//#include +#include +#include +#include +//#include +#include +#include +#include //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 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& aEntryIds, const TUid aModuleUid ); + void WriteEntryIdsToStoreL( RArray& aEntryIds, const TUid aModuleUid ); + void ReadEntryIdsFromStoreL( RArray& aEntryIds, const TUid aModuleUid ); + void WriteEntryIdsToStoreL( RArray& 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 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 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 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 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__ +