# HG changeset patch # User hgs # Date 1275392454 -10800 # Node ID 4cc0d1a608c1fade5f408075ff47937d48347a3c # Parent 271e901a9423201900ceb41c109340f79bc00ee8 201021 diff -r 271e901a9423 -r 4cc0d1a608c1 creator/creator.pro --- a/creator/creator.pro Fri May 14 16:10:39 2010 +0300 +++ b/creator/creator.pro Tue Jun 01 14:40:54 2010 +0300 @@ -142,8 +142,7 @@ -lapengine \ -lnoteseditor \ -lxqservice \ - -lQtContacts \ - -lmobcntmodel \ + -lQtContacts \ -lagendainterface creatorDataBlock = \ diff -r 271e901a9423 -r 4cc0d1a608c1 creator/data/datacreator.rss --- a/creator/data/datacreator.rss Fri May 14 16:10:39 2010 +0300 +++ b/creator/data/datacreator.rss Tue Jun 01 14:40:54 2010 +0300 @@ -1,20 +1,3 @@ -/* -* Copyright (c) 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: -* -*/ - NAME ORBT #include diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/inc/creator_cmdscriptrun.h --- a/creator/engine/inc/creator_cmdscriptrun.h Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/inc/creator_cmdscriptrun.h Tue Jun 01 14:40:54 2010 +0300 @@ -21,7 +21,7 @@ #include "engine.h" -class CCreatorCmdScriptRun : public MBeating +class CCreatorCmdScriptRun : public CBase, public MBeating { public: @@ -39,7 +39,7 @@ private: CCreatorCmdScriptRun(); void ConstructL(CCreatorEngine* aEngine); - void Tick(); + void TickL(); private: CCreatorEngine* iEngine; @@ -56,4 +56,4 @@ TInt iTickCount; }; -#endif // __CREATORCMDSCRIPTRUN_H__ \ No newline at end of file +#endif // __CREATORCMDSCRIPTRUN_H__ diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/inc/creator_file.h --- a/creator/engine/inc/creator_file.h Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/inc/creator_file.h Tue Jun 01 14:40:54 2010 +0300 @@ -40,6 +40,14 @@ class CCreatorFiles : public CCreatorModuleBase { +enum TCreatorFilesState{ + ECreatorFilesDelete, + ECreatorFilesStart, + ECreatorFilesGetDirectory, + ECreatorFilesAskDRMData, + ECreatorFilesAskDRM_CD_Counts, + ECreatorFilesAskDRM_CD_Minutes +}; public: static CCreatorFiles* NewL(CCreatorEngine* aEngine); static CCreatorFiles* NewLC(CCreatorEngine* aEngine); @@ -51,8 +59,7 @@ public: TBool AskDataFromUserL( TInt aCommand ); // from MCreatorModuleBase -// void QueryDialogClosedL(TBool aPositiveAction, TInt aUserData); //from MUIObserver - void QueryDialogClosedL(TBool, TInt){/*TODO: DialogClosed*/}; + void QueryDialogClosedL(TBool aPositiveAction, TInt aUserData); //from MUIObserver TInt CreateFileEntryL(CFilesParameters *aParameters, TInt aCommand); void DeleteAllL(); void DeleteAllCreatedByCreatorL(); @@ -63,14 +70,13 @@ void SetPermissionsL( CMetaDataArray* aMetaData, const TDesC& aOutFileName, CFilesParameters *aParameters ); void SetMimeTypeL( const TDesC& aFileName, TDes8& aMime, CFilesParameters *aParameters ); TBool AskDRMDataFromUserL(); - TBool AskDRMCDDataFromUserL(); void StorePathsForDeleteL( CDesCArray& aPaths ); void GenerateFileNameL( TFileName& aRootName ); private: CFilesParameters* iParameters; CFilesParameters* iUserParameters; - HBufC* iDirectoryQueriedFromUser; + TFileName iDirectoryQueriedFromUser; RFs& iFs; RApaLsSession iApaLs; CDesCArray* iFilePaths; diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/inc/creator_message.h --- a/creator/engine/inc/creator_message.h Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/inc/creator_message.h Tue Jun 01 14:40:54 2010 +0300 @@ -131,8 +131,8 @@ TInt aNumOfExistingAddresses ); void GetAllRecipientsL(RPointerArray& aRecipientArray, const CMessagesParameters& aParameters, TBool aUseEmailAddress ); - void SetSenderToEntryDetails(TMsvEntry& aMsgEntry, const CMessagesParameters& aParameters, TBool aUseEmailAddress); - void SetRecipientToEntryDetails(TMsvEntry& aMsgEntry, const CMessagesParameters& aParameters, TBool aUseEmailAddress); + void SetSenderToEntryDetailsL(TMsvEntry& aMsgEntry, const CMessagesParameters& aParameters, TBool aUseEmailAddress); + void SetRecipientToEntryDetailsL(TMsvEntry& aMsgEntry, const CMessagesParameters& aParameters, TBool aUseEmailAddress); void AddSenderToMtmAddresseeL(CBaseMtm& aMtm, const CMessagesParameters& aParameters, TBool aUseEmailAddress ); void AddMtmSenderL(CMmsClientMtm& aMtm, const CMessagesParameters& aParameters, TBool aUseEmailAddress ); void GetSendersL(RPointerArray& aSenderArray, const CMessagesParameters& aParameters, TBool aUseEmailAddress, TInt aMaxNum ); diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/inc/creator_modulebase.h --- a/creator/engine/inc/creator_modulebase.h Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/inc/creator_modulebase.h Tue Jun 01 14:40:54 2010 +0300 @@ -48,6 +48,7 @@ class CCommandParser; _LIT(KSavingText, "Saving"); +_LIT(KDeletingText, "Deleting"); class MCreatorModuleBase { @@ -77,7 +78,10 @@ ECreatorModuleStart }; - CCreatorModuleBase(){ } + CCreatorModuleBase() + { + iEntriesToBeCreated = 1; + } virtual TBool AskDataFromUserL(TInt aCommand) { @@ -94,12 +98,13 @@ iEngine->ShutDownEnginesL(); return; } - + const TDesC* showText = &KSavingText; TBool finished(EFalse); TBool retval(ETrue); switch(aUserData) { case ECreatorModuleDelete: + showText = &KDeletingText; iEntriesToBeCreated = 1; finished = ETrue; break; @@ -120,7 +125,7 @@ // add this command to command array iEngine->AppendToCommandArrayL(iCommand, NULL, iEntriesToBeCreated); // started exucuting commands - iEngine->ExecuteFirstCommandL( KSavingText ); + iEngine->ExecuteFirstCommandL( *showText ); } } diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/inc/creator_phonebook.h --- a/creator/engine/inc/creator_phonebook.h Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/inc/creator_phonebook.h Tue Jun 01 14:40:54 2010 +0300 @@ -109,7 +109,6 @@ void DoDeleteItemsCreatedWithCreatorL( TUid aStoreUid, CDictionaryFileStore* aStore ); TBool HasOtherThanGroupsL( /*MVPbkContactLinkArray* aContacts */); //modify - QContactDetail CreateContactDetail(QString aDetail, QString aFieldContext, QString aFieldString, TInt aRand ); private: @@ -163,7 +162,7 @@ QList iContactFields;// RPointerArray iContactFields; QString iGroupName;//HBufC* iGroupName; - TInt iContactsInGroup; + TInt iContactsInGroup; TInt iNumberOfPhoneNumberFields; TInt iNumberOfURLFields; TInt iNumberOfEmailAddressFields; @@ -183,8 +182,8 @@ { public: static CCreatorContactField* NewL(); - QContactDetail CreateContactDetail(CCreatorEngine* aEngine,CPhonebookParameters* aParameters,QString aDetail, QString aFieldContext, QString aFieldString, TInt aRand = KErrNotFound ); - QContactDetail CreateContactDetail(CCreatorEngine* aEngine,CPhonebookParameters* aParameters,QString aDetail, QString aFieldContext, QString aFieldString, TPtrC aData ); + QContactDetail CreateContactDetailL(CCreatorEngine* aEngine,CPhonebookParameters* aParameters,QString aDetail, QString aFieldContext, QString aFieldString, TInt aRand = KErrNotFound ); + QContactDetail CreateContactDetailL(CCreatorEngine* aEngine,CPhonebookParameters* aParameters,QString aDetail, QString aFieldContext, QString aFieldString, TPtrC aData ); void AddFieldToParam( CPhonebookParameters* aParam, QContactDetail aDetail); ~CCreatorContactField(); private: diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/inc/creator_phonebookbase.h --- a/creator/engine/inc/creator_phonebookbase.h Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/inc/creator_phonebookbase.h Tue Jun 01 14:40:54 2010 +0300 @@ -37,6 +37,7 @@ ECreatorPhonebookGetPhoneNumbersCount, ECreatorPhonebookGetUrlsCount, ECreatorPhonebookGetEmailsCount, + ECreatorPhonebookContactsAllFields, ECreatorPhonebookGetGroupFields, ECreatorPhonebookGetContactsInGroup }; diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/inc/creator_scriptentry.h --- a/creator/engine/inc/creator_scriptentry.h Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/inc/creator_scriptentry.h Tue Jun 01 14:40:54 2010 +0300 @@ -81,7 +81,7 @@ public: void OpenScriptL(); TBool OpenScriptL(MCommandParserObserver* aObserver); - TBool GetRandomDataFilenameL(TDes& aFilename); + TBool GetRandomDataFilenameL(MCommandParserObserver* aObserver); private: CCreatorEngine* iEngine; diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/src/creator_calendar.cpp --- a/creator/engine/src/creator_calendar.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/src/creator_calendar.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -340,12 +340,14 @@ return; } + const TDesC* showText = &KSavingText; TBool finished(EFalse); TBool retval(ETrue); switch(aUserData) { case ECreatorCalendarDelete: iEntriesToBeCreated = 1; + showText = &KDeletingText; finished = ETrue; break; case ECreatorCalendarStart: @@ -406,7 +408,7 @@ // add this command to command array iEngine->AppendToCommandArrayL(iCommand, NULL, iEntriesToBeCreated); // started exucuting commands - iEngine->ExecuteFirstCommandL( KSavingText ); + iEngine->ExecuteFirstCommandL( *showText ); } } diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/src/creator_cmdscriptrun.cpp --- a/creator/engine/src/creator_cmdscriptrun.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/src/creator_cmdscriptrun.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -117,15 +117,15 @@ void CCreatorCmdScriptRun::Beat() { - Tick(); + TRAP_IGNORE( TickL() ); } void CCreatorCmdScriptRun::Synchronize() { - Tick(); + TRAP_IGNORE( TickL() ); } -void CCreatorCmdScriptRun::Tick() +void CCreatorCmdScriptRun::TickL() { iTickCount++; if (iTickCount > KCommandLineDelay) diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/src/creator_contactelement.cpp --- a/creator/engine/src/creator_contactelement.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/src/creator_contactelement.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -222,7 +222,7 @@ { // random CleanupStack::PushL( field ); - QContactDetail cntDetail = field->CreateContactDetail(iEngine,param,mapping.iDetail,mapping.iContext,mapping.iFieldCode, KErrNotFound ); + QContactDetail cntDetail = field->CreateContactDetailL(iEngine,param,mapping.iDetail,mapping.iContext,mapping.iFieldCode, KErrNotFound ); if(!cntDetail.isEmpty()) { field->AddFieldToParam( param, cntDetail ); //it will do "param->iContactFields.AppendL(field);" @@ -232,7 +232,7 @@ else { CleanupStack::PushL( field ); - QContactDetail cntDetail = field->CreateContactDetail(iEngine,param,mapping.iDetail,mapping.iContext,mapping.iFieldCode, content ); + QContactDetail cntDetail = field->CreateContactDetailL(iEngine,param,mapping.iDetail,mapping.iContext,mapping.iFieldCode, content ); if(!cntDetail.isEmpty()) { field->AddFieldToParam( param, cntDetail ); //it will do "param->iContactFields.AppendL(field);" @@ -261,7 +261,7 @@ CCreatorContactField* field = CCreatorContactField::NewL(); CleanupStack::PushL( field ); - QContactDetail cntDetail = field->CreateContactDetail(iEngine,param,fieldMappingTbl[i].iDetail,fieldMappingTbl[i].iContext,fieldMappingTbl[i].iFieldCode, KErrNotFound ); + QContactDetail cntDetail = field->CreateContactDetailL(iEngine,param,fieldMappingTbl[i].iDetail,fieldMappingTbl[i].iContext,fieldMappingTbl[i].iFieldCode, KErrNotFound ); if(!cntDetail.isEmpty()) { field->AddFieldToParam( param, cntDetail ); //it will do "param->iContactFields.AppendL(field);" diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/src/creator_file.cpp --- a/creator/engine/src/creator_file.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/src/creator_file.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -37,6 +37,7 @@ LOGSTRING("Creator: CFilesParameters::CFilesParameters"); iFullFilePath = HBufC::New(KFilesFieldLength); } + CFilesParameters::CFilesParameters( CFilesParameters& aCopy ) { LOGSTRING("Creator: CFilesParameters::CFilesParameters"); @@ -46,10 +47,13 @@ iEncrypt = aCopy.iEncrypt; if ( aCopy.iPermission ) { - iPermission = CDRMPermission::NewL(); - iPermission->DuplicateL( *aCopy.iPermission ); + TRAP_IGNORE( + iPermission = CDRMPermission::NewL(); + iPermission->DuplicateL( *aCopy.iPermission ); + ); } } + CFilesParameters::~CFilesParameters() { LOGSTRING("Creator: CFilesParameters::~CFilesParameters"); @@ -85,7 +89,6 @@ iEngine = aEngine; - iDirectoryQueriedFromUser = HBufC::New(KFilesFieldLength); User::LeaveIfError( iApaLs.Connect() ); iFilePaths = new (ELeave) CDesCArrayFlat( 4 ); @@ -121,7 +124,6 @@ TRAP_IGNORE( StorePathsForDeleteL( *iFilePaths ) ); } delete iFilePaths; - delete iDirectoryQueriedFromUser; delete iParameters; delete iUserParameters; iApaLs.Close(); @@ -129,6 +131,164 @@ //---------------------------------------------------------------------------- +void CCreatorFiles::QueryDialogClosedL(TBool aPositiveAction, TInt aUserData) + { + LOGSTRING("Creator: CCreatorFiles::QueryDialogClosedL"); + + if( aPositiveAction == EFalse ) + { + iEngine->ShutDownEnginesL(); + return; + } + + const TDesC* showText = &KSavingText; + TBool finished(EFalse); + TBool retval(ETrue); + switch(aUserData) + { + case ECreatorFilesDelete: + showText = &KDeletingText; + iEntriesToBeCreated = 1; + finished = ETrue; + break; + case ECreatorFilesStart: + { + // set a default directory (eg. c:\Nokia\Images\) + iEngine->SetDefaultPathForFileCommandL(iCommand, iDirectoryQueriedFromUser); + TBuf<50> promptText; + if (iCommand == ECmdCreateFileEntryEmptyFolder) + promptText.Copy( _L("Specify the folder path and name") ); + else + promptText.Copy( _L("Specify the directory") ); + + // show directory query dialog + retval = iEngine->GetEngineWrapper()->DirectoryQueryDialog(promptText, iDirectoryQueriedFromUser, this, ECreatorFilesGetDirectory ); + } + break; + case ECreatorFilesGetDirectory: + // check that the root folder is correct + if ( iDirectoryQueriedFromUser.Length() < 3 || BaflUtils::CheckFolder( iFs, iDirectoryQueriedFromUser.Left(3) ) != KErrNone ) + { + iEngine->GetEngineWrapper()->ShowErrorMessage(_L("Invalid path")); + retval = EFalse; + } + else + { + // check the directory contains a trailing backlash + if ( iDirectoryQueriedFromUser.Right(1) != _L("\\") ) + { + iDirectoryQueriedFromUser.Append(_L("\\")); + } + // copy the directory name to a class member + if ( iCommand == ECmdCreateFileEntryEmptyFolder ) + { + finished = ETrue; + } + else + { + retval = AskDRMDataFromUserL(); + } + } + break; + case ECreatorFilesAskDRMData: + if ( iDummy > 0 ) + { + iUserParameters->iEncrypt = ETrue; + } + if ( iDummy == 2 ) + { + iUserParameters->iPermission = CDRMPermission::NewL(); + CDRMPermission* perm = iUserParameters->iPermission; + perm->iTopLevel->iActiveConstraints = EConstraintNone; + perm->iPlay->iActiveConstraints = EConstraintNone; + perm->iDisplay->iActiveConstraints = EConstraintNone; + perm->iPrint->iActiveConstraints = EConstraintNone; + perm->iExecute->iActiveConstraints = EConstraintNone; + perm->iUniqueID = 0; + // DRM Combined Delivery + iDummy = 0; + retval = iEngine->GetEngineWrapper()->EntriesQueryDialog( &iDummy, _L("How many counts(0=unlimited)?"), ETrue, this, ECreatorFilesAskDRM_CD_Counts ); + } + else + { + finished = ETrue; + } + break; + case ECreatorFilesAskDRM_CD_Counts: + if ( iDummy > 0 ) + { + TInt count = iDummy; + CDRMPermission* perm = iUserParameters->iPermission; + // apply constraints to all permission types + // applied type will be selected by setting iAvailableRights + // when determining the file type + perm->iDisplay->iActiveConstraints |= EConstraintCounter; + perm->iDisplay->iCounter = count; + perm->iDisplay->iOriginalCounter = count; + + perm->iPlay->iActiveConstraints |= EConstraintCounter; + perm->iPlay->iCounter = count; + perm->iPlay->iOriginalCounter = count; + + perm->iPrint->iActiveConstraints |= EConstraintCounter; + perm->iPrint->iCounter = count; + perm->iPrint->iOriginalCounter = count; + + perm->iExecute->iActiveConstraints |= EConstraintCounter; + perm->iExecute->iCounter = count; + perm->iExecute->iOriginalCounter = count; + } + iDummy = 0; + retval = iEngine->GetEngineWrapper()->EntriesQueryDialog( &iDummy, _L("How many minutes until expire(0=unlimited)?"), ETrue, + this, ECreatorFilesAskDRM_CD_Minutes + ); + break; + case ECreatorFilesAskDRM_CD_Minutes: + if ( iDummy > 0 ) + { + TInt minutes = iDummy; + CDRMPermission* perm = iUserParameters->iPermission; + // apply constraints to all permission types + // applied type will be selected by setting iAvailableRights + // when determining the file type + perm->iDisplay->iActiveConstraints |= EConstraintInterval; + perm->iDisplay->iInterval = TTimeIntervalSeconds( 60 * minutes ); + perm->iDisplay->iIntervalStart = Time::NullTTime(); + + perm->iPlay->iActiveConstraints |= EConstraintInterval; + perm->iPlay->iInterval = TTimeIntervalSeconds( 60 * minutes ); + perm->iPlay->iIntervalStart = Time::NullTTime(); + + perm->iPrint->iActiveConstraints |= EConstraintInterval; + perm->iPrint->iInterval = TTimeIntervalSeconds( 60 * minutes ); + perm->iPrint->iIntervalStart = Time::NullTTime(); + + perm->iExecute->iActiveConstraints |= EConstraintInterval; + perm->iExecute->iInterval = TTimeIntervalSeconds( 60 * minutes ); + perm->iExecute->iIntervalStart = Time::NullTTime(); + } + finished = ETrue; + break; + default: + //some error + retval = EFalse; + break; + } + if( retval == EFalse ) + { + iEngine->ShutDownEnginesL(); + } + else if( finished ) + { + // add this command to command array + iEngine->AppendToCommandArrayL(iCommand, NULL, iEntriesToBeCreated); + // started exucuting commands + iEngine->ExecuteFirstCommandL( *showText ); + } + } + +//---------------------------------------------------------------------------- + TBool CCreatorFiles::AskDataFromUserL(TInt aCommand) { LOGSTRING("Creator: CCreatorFiles::AskDataFromUserL"); @@ -137,60 +297,16 @@ if ( aCommand == ECmdDeleteCreatorFiles ) { - return iEngine->GetEngineWrapper()->YesNoQueryDialog( _L("Delete all files created with Creator?") ); + return iEngine->GetEngineWrapper()->YesNoQueryDialog( _L("Delete all files created with Creator?"), this, ECreatorFilesDelete ); } delete iUserParameters; iUserParameters = NULL; iUserParameters = new(ELeave) CFilesParameters(); - iDirectoryQueriedFromUser->Des().Copy( KNullDesC ); - - if (iEngine->GetEngineWrapper()->EntriesQueryDialog(&iEntriesToBeCreated, _L("How many entries to create?"))) - { - // set a default directory (eg. c:\Nokia\Images\) - TFileName directory; - iEngine->SetDefaultPathForFileCommandL(aCommand, directory); - - // directory query dialog - /* - CAknTextQueryDialog* textDialog = CAknTextQueryDialog::NewL(directory, CAknQueryDialog::ENoTone); - textDialog->SetMaxLength(256); - */ - - TBuf<50> promptText; + iDirectoryQueriedFromUser.Copy( KNullDesC ); - if (aCommand == ECmdCreateFileEntryEmptyFolder) - promptText.Copy( _L("Specify the folder path and name") ); - else - promptText.Copy( _L("Specify the directory") ); - // show directory query dialog - if (iEngine->GetEngineWrapper()->DirectoryQueryDialog(promptText, directory)) - { - // check that the root folder is correct - if (directory.Length() < 3 || BaflUtils::CheckFolder(iFs, directory.Left(3)) != KErrNone) - { - iEngine->GetEngineWrapper()->ShowErrorMessage(_L("Invalid path")); - return EFalse; - } - else - { - // check the directory contains a trailing backlash - if (directory.Right(1) != _L("\\")) - directory.Append(_L("\\")); - - // copy the directory name to a class member - iDirectoryQueriedFromUser->Des() = directory; - if ( aCommand == ECmdCreateFileEntryEmptyFolder ) return ETrue; - else return AskDRMDataFromUserL(); - } - } - else - return EFalse; - } - else - return EFalse; - + return iEngine->GetEngineWrapper()->EntriesQueryDialog(&iEntriesToBeCreated, _L("How many entries to create?"), EFalse, this, ECreatorFilesStart ); } @@ -228,8 +344,8 @@ if ( aCommand == ECmdCreateFileEntryEmptyFolder) { // strip the last backslash from the path - if( iDirectoryQueriedFromUser && iDirectoryQueriedFromUser->Des().Length() > 0) - directoryToBeCreated = iDirectoryQueriedFromUser->Des(); + if( iDirectoryQueriedFromUser.Length() > 0) + directoryToBeCreated = iDirectoryQueriedFromUser; else if( parameters->iFullFilePath && parameters->iFullFilePath->Des().Length() > 0 ) directoryToBeCreated = parameters->iFullFilePath->Des(); else @@ -334,13 +450,13 @@ LOGSTRING2("Creator: CCreatorFiles::CreateFileEntryL iFullFilePath used, fullTargetPath: %S", &fullTargetPath); } - else if ( iDirectoryQueriedFromUser && iDirectoryQueriedFromUser->Des().Length() > 0 ) + else if ( iDirectoryQueriedFromUser.Length() > 0 ) { // target path = directory + the file name from source path TParse parser; parser.Set(fullSourcePath, NULL, NULL); - fullTargetPath = iDirectoryQueriedFromUser->Des(); + fullTargetPath = iDirectoryQueriedFromUser; fullTargetPath.Append( parser.NameAndExt() ); LOGSTRING2("Creator: CCreatorFiles::CreateFileEntryL iDirectoryQueriedFromUser used, fullTargetPath: %S", &fullTargetPath); @@ -411,7 +527,7 @@ SetPermissionsL( metaData, aOutFileName, aParameters ); } - supplier->SetOutputDirectoryL( *iDirectoryQueriedFromUser ); + supplier->SetOutputDirectoryL( iDirectoryQueriedFromUser ); // The KOmaImportContentType is a OMA DRM agent specific MIME type which // indicates that plain content is to be encrypted @@ -561,12 +677,6 @@ { LOGSTRING("Creator: CCreatorFiles::AskDRMDataFromUserL"); // Encryption -dialog - TInt encIndex( 0 ); - - - //CAknListQueryDialog* encDlg = new (ELeave) CAknListQueryDialog( &encIndex ); - //encDlg->PrepareLC( R_ENCRYPTION_DIALOG ); - //Create flat array from which list is built. CDesCArrayFlat* items = new(ELeave) CDesCArrayFlat(5); CleanupStack::PushL(items); @@ -575,144 +685,12 @@ items->AppendL( _L("DRM Forward Lock") ); items->AppendL( _L("DRM Combined Delivery") ); - // Add items into main list - //encDlg->SetOwnershipType( ELbmOwnsItemArray ); - //encDlg->SetItemTextArray( items ); - CleanupStack::Pop( items ); - //encDlg->ListBox()->SetCurrentItemIndexAndDraw( 0 ); - + // create a popup list - if ( iEngine->GetEngineWrapper()->PopupListDialog(_L("Encryption"), items, &encIndex, this, 1) ) - { - if ( encIndex > 0 ) - { - iUserParameters->iEncrypt = ETrue; - } - if ( encIndex == 2 ) - { - iUserParameters->iPermission = CDRMPermission::NewL(); - CDRMPermission* perm = iUserParameters->iPermission; - perm->iTopLevel->iActiveConstraints = EConstraintNone; - perm->iPlay->iActiveConstraints = EConstraintNone; - perm->iDisplay->iActiveConstraints = EConstraintNone; - perm->iPrint->iActiveConstraints = EConstraintNone; - perm->iExecute->iActiveConstraints = EConstraintNone; - perm->iUniqueID = 0; - // DRM Combined Delivery - return AskDRMCDDataFromUserL(); - } - return ETrue; - } - else - { - return EFalse; - } - } - -//---------------------------------------------------------------------------- - -TBool CCreatorFiles::AskDRMCDDataFromUserL() - { - LOGSTRING("Creator: CCreatorFiles::AskDRMCDDataFromUserL"); - TInt count(0); - if ( iEngine->GetEngineWrapper()->EntriesQueryDialog( &iDummy, _L("How many counts\r\n(0=unlimited)?"), ETrue ) ) - { - if ( count > 0 ) - { - CDRMPermission* perm = iUserParameters->iPermission; - // apply constraints to all permission types - // applied type will be selected by setting iAvailableRights - // when determining the file type - perm->iDisplay->iActiveConstraints |= EConstraintCounter; - perm->iDisplay->iCounter = count; - perm->iDisplay->iOriginalCounter = count; - - perm->iPlay->iActiveConstraints |= EConstraintCounter; - perm->iPlay->iCounter = count; - perm->iPlay->iOriginalCounter = count; - - perm->iPrint->iActiveConstraints |= EConstraintCounter; - perm->iPrint->iCounter = count; - perm->iPrint->iOriginalCounter = count; - - perm->iExecute->iActiveConstraints |= EConstraintCounter; - perm->iExecute->iCounter = count; - perm->iExecute->iOriginalCounter = count; - } - } - else - { - return EFalse; - } - /* - TInt seconds( 0 ); - if ( iEngine->GetEngineWrapper()->EntriesQueryDialog( seconds, _L("How many accumulated seconds until expire (0=unlimited)?"), ETrue ) ) - { - if ( seconds > 0 ) - { - CDRMPermission* perm = iUserParameters->iPermission; - // apply constraints to all permission types - // applied type will be selected by setting iAvailableRights - // when determining the file type - perm->iDisplay->iActiveConstraints |= EConstraintAccumulated; - perm->iDisplay->iEndTime = Time::MaxTTime(); - perm->iDisplay->iStartTime = Time::MinTTime();; - perm->iDisplay->iAccumulatedTime = seconds; - - perm->iPlay->iActiveConstraints |= EConstraintAccumulated; - perm->iPlay->iEndTime = Time::MaxTTime(); - perm->iPlay->iStartTime = Time::MinTTime();; - perm->iPlay->iAccumulatedTime = seconds; - - perm->iPrint->iActiveConstraints |= EConstraintAccumulated; - perm->iPrint->iEndTime = Time::MaxTTime(); - perm->iPrint->iStartTime = Time::MinTTime();; - perm->iPrint->iAccumulatedTime = seconds; - - perm->iExecute->iActiveConstraints |= EConstraintAccumulated; - perm->iExecute->iEndTime = Time::MaxTTime(); - perm->iExecute->iStartTime = Time::MinTTime();; - perm->iExecute->iAccumulatedTime = seconds; - } - } - else - { - return EFalse; - } - */ - - TInt minutes( 0 ); - if ( iEngine->GetEngineWrapper()->EntriesQueryDialog( &iDummy, _L("How many minutes until expire (0=unlimited)?"), ETrue ) ) - { - if ( minutes > 0 ) - { - CDRMPermission* perm = iUserParameters->iPermission; - // apply constraints to all permission types - // applied type will be selected by setting iAvailableRights - // when determining the file type - perm->iDisplay->iActiveConstraints |= EConstraintInterval; - perm->iDisplay->iInterval = TTimeIntervalSeconds( 60 * minutes ); - perm->iDisplay->iIntervalStart = Time::NullTTime(); - - perm->iPlay->iActiveConstraints |= EConstraintInterval; - perm->iPlay->iInterval = TTimeIntervalSeconds( 60 * minutes ); - perm->iPlay->iIntervalStart = Time::NullTTime(); - - perm->iPrint->iActiveConstraints |= EConstraintInterval; - perm->iPrint->iInterval = TTimeIntervalSeconds( 60 * minutes ); - perm->iPrint->iIntervalStart = Time::NullTTime(); - - perm->iExecute->iActiveConstraints |= EConstraintInterval; - perm->iExecute->iInterval = TTimeIntervalSeconds( 60 * minutes ); - perm->iExecute->iIntervalStart = Time::NullTTime(); - } - } - else - { - return EFalse; - } - - return ETrue; + iDummy = 0; + TBool retval = iEngine->GetEngineWrapper()->PopupListDialog(_L("Encryption"), items, &iDummy, this, ECreatorFilesAskDRMData ); + CleanupStack::PopAndDestroy( items ); + return retval; } //---------------------------------------------------------------------------- diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/src/creator_log.cpp --- a/creator/engine/src/creator_log.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/src/creator_log.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -69,6 +69,7 @@ CCreatorLogs::CCreatorLogs() : CActive(0) { + iEntriesToBeCreated = 1; } void CCreatorLogs::ConstructL(CCreatorEngine* aEngine) @@ -115,11 +116,13 @@ return; } + const TDesC* showText = &KSavingText; TBool finished(EFalse); TBool retval(ETrue); switch(aUserData) { case ECreatorLogsDelete: + showText = &KDeletingText; iEntriesToBeCreated = 1; finished = ETrue; break; @@ -140,7 +143,7 @@ // add this command to command array iEngine->AppendToCommandArrayL(iCommand, NULL, iEntriesToBeCreated); // started exucuting commands - iEngine->ExecuteFirstCommandL( KSavingText ); + iEngine->ExecuteFirstCommandL( *showText ); } } diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/src/creator_message.cpp --- a/creator/engine/src/creator_message.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/src/creator_message.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -133,11 +133,13 @@ return; } + const TDesC* showText = &KSavingText; TBool finished(EFalse); TBool retval(ETrue); switch(aUserData) { case ECreatorMessagesDelete: + showText = &KDeletingText; iEntriesToBeCreated = 1; finished = ETrue; break; @@ -225,7 +227,7 @@ // add this command to command array iEngine->AppendToCommandArrayL(iCommand, NULL, iEntriesToBeCreated); // started exucuting commands - iEngine->ExecuteFirstCommandL( KSavingText ); + iEngine->ExecuteFirstCommandL( *showText ); } } //---------------------------------------------------------------------------- @@ -455,10 +457,11 @@ clientMtm->CreateMessageL(defaultServiceId); // set the from field to sms header - if (parameters.iFolderType == EInbox) + // !!! This will cause CRASH + /*if (parameters.iFolderType == EInbox) { CSmsHeader* smsHeader = &clientMtm->SmsHeader(); - delete smsHeader; + delete smsHeader; // <-- This will cause CRASH smsHeader = NULL; smsHeader = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, clientMtm->Body()); if( parameters.iSenderAddress ) @@ -469,7 +472,7 @@ { smsHeader->SetFromAddressL(KEmpty); } - } + } */ // set body clientMtm->Body().Reset(); @@ -481,11 +484,11 @@ // set the details field if (parameters.iFolderType == EInbox) { - SetSenderToEntryDetails(messageEntry, parameters, EFalse); + SetSenderToEntryDetailsL(messageEntry, parameters, EFalse); } else { - SetRecipientToEntryDetails(messageEntry, parameters, EFalse); + SetRecipientToEntryDetailsL(messageEntry, parameters, EFalse); // Add all recipients to clientMtm // iRecipientArray is up-to-date so don't call AddRecipientsL here for( TInt i = 0; i < iRecipientArray.Count(); i++ ) @@ -664,11 +667,11 @@ // set the details field if (parameters.iFolderType == EInbox) { - SetSenderToEntryDetails(messageEntry, parameters, EFalse); + SetSenderToEntryDetailsL(messageEntry, parameters, EFalse); } else { - SetRecipientToEntryDetails(messageEntry, parameters, EFalse); + SetRecipientToEntryDetailsL(messageEntry, parameters, EFalse); } // set the description field same as the message subject @@ -923,11 +926,11 @@ // set the details field if (parameters.iFolderType == EInbox) { - SetSenderToEntryDetails(messageEntry, parameters, EFalse); + SetSenderToEntryDetailsL(messageEntry, parameters, EFalse); } else { - SetRecipientToEntryDetails(messageEntry, parameters, EFalse); + SetRecipientToEntryDetailsL(messageEntry, parameters, EFalse); } // set the description field same as the message subject @@ -1088,14 +1091,14 @@ if (parameters.iFolderType == EInbox) { AddSenderToMtmAddresseeL(*clientMtm, parameters, ETrue ); - SetSenderToEntryDetails(messageEntry, parameters, ETrue); + SetSenderToEntryDetailsL(messageEntry, parameters, ETrue); messageEntry.iMtm = KUidMsgTypeIMAP4; // or any other than KUidMsgTypeSMTP to display 'from' field instead of 'to' field } else { // Add all recipients to clientMtm AddRecipientsL( *clientMtm, parameters, ETrue ); - SetRecipientToEntryDetails(messageEntry, parameters, EFalse); + SetRecipientToEntryDetailsL(messageEntry, parameters, EFalse); } // set the description field same as the message subject @@ -1319,11 +1322,11 @@ // set the details field if (parameters.iFolderType == EInbox) { - SetSenderToEntryDetails(messageEntry, parameters, EFalse); + SetSenderToEntryDetailsL(messageEntry, parameters, EFalse); } else { - SetRecipientToEntryDetails(messageEntry, parameters, EFalse); + SetRecipientToEntryDetailsL(messageEntry, parameters, EFalse); } // set the subject line @@ -1430,11 +1433,11 @@ // set the details field and if (parameters.iFolderType == EInbox) { - SetSenderToEntryDetails(messageEntry, parameters, EFalse); + SetSenderToEntryDetailsL(messageEntry, parameters, EFalse); } else { - SetRecipientToEntryDetails(messageEntry, parameters, EFalse); + SetRecipientToEntryDetailsL(messageEntry, parameters, EFalse); } // set mtm @@ -1520,7 +1523,7 @@ } //---------------------------------------------------------------------------- -void CCreatorMessages::SetSenderToEntryDetails(TMsvEntry& aMsgEntry, const CMessagesParameters& aParameters, TBool aUseEmailAddress) +void CCreatorMessages::SetSenderToEntryDetailsL(TMsvEntry& aMsgEntry, const CMessagesParameters& aParameters, TBool aUseEmailAddress) { // Only one sender allowed: if( iSenderArray.Count() == 0 ) @@ -1538,7 +1541,7 @@ } //---------------------------------------------------------------------------- -void CCreatorMessages::SetRecipientToEntryDetails(TMsvEntry& aMsgEntry, const CMessagesParameters& aParameters, TBool aUseEmailAddress) +void CCreatorMessages::SetRecipientToEntryDetailsL(TMsvEntry& aMsgEntry, const CMessagesParameters& aParameters, TBool aUseEmailAddress) { // Only one sender allowed: GetAllRecipientsL(iRecipientArray, aParameters, aUseEmailAddress); diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/src/creator_note.cpp --- a/creator/engine/src/creator_note.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/src/creator_note.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -71,8 +71,8 @@ LOGSTRING("Creator: CCreatorNotepad::ConstructL"); iEngine = aEngine; - - iNotepadApi = new NotesEditor(); + iAgendaUtil = new AgendaUtil(); + iNotepadApi = new NotesEditor(iAgendaUtil); //iNotepadApi = CNotepadApi::NewL(); } @@ -80,11 +80,23 @@ { LOGSTRING("Creator: CCreatorNotepad::~CCreatorNotepad"); - // TODO DELETE!!! - //delete iNotepadApi; + if(iNotepadApi) + { + delete iNotepadApi; + iNotepadApi = NULL; + } + + if(iAgendaUtil) + { + delete iAgendaUtil; + iAgendaUtil = NULL; + } if (iParameters) + { delete iParameters; + iParameters; + } } //---------------------------------------------------------------------------- @@ -144,13 +156,12 @@ QList ael; AgendaUtil::FilterFlags filter = AgendaUtil::FilterFlags(AgendaUtil::IncludeNotes); - iAgendaUtil = new AgendaUtil(); ael = iAgendaUtil->fetchAllEntries(filter); for(int i=0 ; ideleteEntry(ael[i].id()); } - delete iAgendaUtil; + // Open Notes db /* RDbs dbs; User::LeaveIfError( dbs.Connect() ); diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/src/creator_phonebook.cpp --- a/creator/engine/src/creator_phonebook.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/src/creator_phonebook.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -24,7 +24,7 @@ #include "creator_traces.h" #include -#include +//#include //#include _LIT(KTempPath, "C:\\Data\\Creator\\"); @@ -362,260 +362,7 @@ return result; } -QContactDetail CCreatorPhonebook::CreateContactDetail(QString aDetail, QString aFieldContext, QString aFieldString, TInt aRand ) - { - QContactDetail contactDetail; - TPtrC contentData; - if( aDetail == QContactPhoneNumber::DefinitionName) - { - QContactPhoneNumber phoneNumber;// = contactDetail; - if(!aFieldContext.isEmpty()) - { - phoneNumber.setContexts(aFieldContext); - } - phoneNumber.setSubTypes(aFieldString); - contentData.Set(iEngine->RandomString((CCreatorEngine::TRandomStringType) aRand)); - QString number = QString::fromUtf16(contentData.Ptr(),contentData.Length()); - phoneNumber.setNumber(number); - return phoneNumber; - } - else if( aDetail == QContactName::DefinitionName ) //--Contact NAME----------------------------- - { - QContactName contactName; - for(int i = 0 ; i < iParameters->iContactFields.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details - { - if(iParameters->iContactFields.at(i).definitionName() == QContactName::DefinitionName ) - { - contactName = iParameters->iContactFields.at(i); - } - } - contentData.Set(iEngine->RandomString((CCreatorEngine::TRandomStringType) aRand)); - QString name = QString::fromUtf16(contentData.Ptr(),contentData.Length()); - if(aFieldString == QContactName::FieldFirstName) - { - if(contactName.firstName().isEmpty()) - { - contactName.setFirstName( name ); - } - } - else if(aFieldString == QContactName::FieldLastName) - { - if(contactName.lastName().isEmpty()) - { - contactName.setLastName( name ); - } - } - else if(aFieldString == QContactName::FieldMiddleName) - { - if(contactName.middleName().isEmpty()) - { - contactName.setMiddleName( name ); - } - } - else if(aFieldString == QContactName::FieldPrefix) - { - if(contactName.prefix().isEmpty()) - { - contactName.setPrefix( name ); - } - } - else if(aFieldString == QContactName::FieldSuffix) - { - if(contactName.suffix().isEmpty()) - { - contactName.setSuffix( name ); - } - } - else //QContactName::FieldCustomLabel: - { - if(contactName.customLabel().isEmpty()) - { - contactName.setCustomLabel( name ); - } - } - return contactName; - } - else if( aDetail == QContactOrganization::DefinitionName ) //--Contact Company----------------------------- - { - QContactOrganization contactCompany; - - for(int i = 0 ; i < iParameters->iContactFields.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details - { - if(iParameters->iContactFields.at(i).definitionName() == QContactOrganization::DefinitionName ) - { - contactCompany = iParameters->iContactFields.at(i); - } - } - contentData.Set(iEngine->RandomString((CCreatorEngine::TRandomStringType) aRand)); - QString company = QString::fromUtf16(contentData.Ptr(),contentData.Length()); - if(aFieldString == QContactOrganization::FieldName) - { - if(contactCompany.name().isEmpty()) - { - contactCompany.setName( company ); - } - } - if(aFieldString == QContactOrganization::FieldTitle) - { - if(contactCompany.title().isEmpty()) - { - contactCompany.setTitle( company ); - } - } - if(aFieldString == QContactOrganization::FieldDepartment) - { - QStringList depList = contactCompany.department(); - depList.append(company); - contactCompany.setDepartment(depList); - } - if(aFieldString == QContactOrganization::FieldAssistantName) - { - if(contactCompany.assistantName().isEmpty()) - { - contactCompany.setAssistantName( company ); - } - } - return contactCompany; - } - else if( aDetail == QContactAddress::DefinitionName ) //--Contact Address----------------------------- - { - QContactAddress contactAddress; - - for(int i = 0 ; i < iParameters->iContactFields.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details - { - if(iParameters->iContactFields.at(i).definitionName() == QContactAddress::DefinitionName && iParameters->iContactFields.at(i).value(QContactDetail::FieldContext) == aFieldContext ) - { - contactAddress = iParameters->iContactFields.at(i); - } - } - - contactAddress.setContexts( aFieldContext ); - - contentData.Set(iEngine->RandomString((CCreatorEngine::TRandomStringType) aRand)); - QString address = QString::fromUtf16(contentData.Ptr(),contentData.Length()); - if(aFieldString == QContactAddress::FieldStreet ) - { - if( contactAddress.street().isEmpty() ) - { - contactAddress.setStreet( address ); - } - } - else if(aFieldString == QContactAddress::FieldLocality ) - { - if( contactAddress.locality().isEmpty() ) - { - contactAddress.setLocality( address ); - } - } - else if(aFieldString == QContactAddress::FieldRegion ) - { - if( contactAddress.region().isEmpty() ) - { - contactAddress.setRegion( address ); - } - } - else if(aFieldString == QContactAddress::FieldPostcode ) - { - if( contactAddress.postcode().isEmpty() ) - { - contactAddress.setPostcode( address ); - } - } - else if(aFieldString == QContactAddress::FieldCountry ) - { - if( contactAddress.country().isEmpty() ) - { - contactAddress.setCountry( address ); - } - } - else - { - return contactDetail; - } - return contactAddress; - } - else if( aDetail == QContactNote::DefinitionName ) //--Contact Note----------------------------- - { - QContactNote contactNote; - contentData.Set(iEngine->RandomString((CCreatorEngine::TRandomStringType) aRand)); - QString note = QString::fromUtf16(contentData.Ptr(),contentData.Length()); - contactNote.setNote(note); - return contactNote; - } - else if( aDetail == QContactFamily::DefinitionName ) //--Contact Family----------------------------- - { - QContactFamily contactFamily; - - for(int i = 0 ; i < iParameters->iContactFields.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details - { - if(iParameters->iContactFields.at(i).definitionName() == QContactFamily::DefinitionName && iParameters->iContactFields.at(i).value(QContactDetail::FieldContext) == aFieldContext ) - { - contactFamily = iParameters->iContactFields.at(i); - } - } - contentData.Set(iEngine->RandomString((CCreatorEngine::TRandomStringType) aRand)); - QString familyData = QString::fromUtf16(contentData.Ptr(),contentData.Length()); - if(aFieldString == QContactFamily::FieldSpouse ) - { - if( contactFamily.spouse().isEmpty() ) - { - contactFamily.setSpouse( familyData ); - } - } - if(aFieldString == QContactFamily::FieldChildren ) - { - QStringList children = contactFamily.children(); - children.append( familyData ); - contactFamily.setChildren( children ); - } - - return contactFamily; - } - - if( aDetail == QContactAvatar::DefinitionName) //--Contact Picture----------------------------- - { - RFs& fs = CCoeEnv::Static()->FsSession(); - QContactAvatar contactAvatar; - TBuf srcPath; - iEngine->RandomPictureFileL(srcPath); - TBuf destPath(KTempPath); - - if(!BaflUtils::FolderExists( fs, destPath )) - { - BaflUtils::EnsurePathExistsL( fs, destPath ); - } - - TInt err=BaflUtils::CopyFile( fs, srcPath, destPath ); - TParse temp; - temp.Set( srcPath,NULL,NULL ); - destPath.Append(temp.NameAndExt()); - - QString avatarFile = QString::fromUtf16( destPath.Ptr(),destPath.Length() ); - - QPixmap avatarPix(avatarFile); - - contactAvatar.setAvatar(avatarFile); - contactAvatar.setPixmap(avatarPix); - - return contactAvatar; - } - if( aDetail == QContactAnniversary::DefinitionName) - { - QContactAnniversary contactAnniversary; - QDate date; - TTime datetime = iEngine->RandomDate( CCreatorEngine::EDateFuture ); - date.setDate( datetime.DateTime().Year(),(int) (datetime.DateTime().Month()+1), datetime.DateTime().Day() ); - contactAnniversary.setOriginalDate( date ); - return contactAnniversary; - } - - - - - - return contactDetail; - } //---------------------------------------------------------------------------- @@ -711,7 +458,7 @@ CCreatorContactField* field = CCreatorContactField::NewL(); CleanupStack::PushL( field ); - QContactDetail cntDetail = field->CreateContactDetail(iEngine,iParameters,CreatorPbkMiscTextFields[tfIndex].iDetail, CreatorPbkMiscTextFields[tfIndex].iFieldContext, CreatorPbkMiscTextFields[tfIndex].iFieldString, CreatorPbkMiscTextFields[tfIndex].iRandomType ); + QContactDetail cntDetail = field->CreateContactDetailL(iEngine,iParameters,CreatorPbkMiscTextFields[tfIndex].iDetail, CreatorPbkMiscTextFields[tfIndex].iFieldContext, CreatorPbkMiscTextFields[tfIndex].iFieldString, CreatorPbkMiscTextFields[tfIndex].iRandomType ); if(!cntDetail.isEmpty()) { field->AddFieldToParam( iParameters, cntDetail ); //it will do "param->iContactFields.AppendL(field);" @@ -722,7 +469,7 @@ TPtrC emptyData; CCreatorContactField* fieldPicture = CCreatorContactField::NewL(); CleanupStack::PushL( fieldPicture ); - QContactDetail cntDetail = fieldPicture->CreateContactDetail(iEngine,iParameters,QContactAvatar::DefinitionName,"","",emptyData ); + QContactDetail cntDetail = fieldPicture->CreateContactDetailL(iEngine,iParameters,QContactAvatar::DefinitionName,"","",emptyData ); if(!cntDetail.isEmpty()) { fieldPicture->AddFieldToParam( iParameters, cntDetail ); //it will do "param->iContactFields.AppendL(field);" @@ -732,7 +479,7 @@ // Add date-time fields: CCreatorContactField* fieldAnniv = CCreatorContactField::NewL(); CleanupStack::PushL( fieldAnniv ); - QContactDetail cntDetAnniv = fieldAnniv->CreateContactDetail(iEngine,iParameters,QContactAnniversary::DefinitionName,"","",emptyData ); + QContactDetail cntDetAnniv = fieldAnniv->CreateContactDetailL(iEngine,iParameters,QContactAnniversary::DefinitionName,"","",emptyData ); if(!cntDetAnniv .isEmpty()) { fieldAnniv->AddFieldToParam( iParameters, cntDetAnniv ); //it will do "param->iContactFields.AppendL(field);" @@ -782,7 +529,7 @@ { CCreatorContactField* fieldUrl = CCreatorContactField::NewL(); CleanupStack::PushL( fieldUrl ); - QContactDetail cntDetUrl = fieldUrl->CreateContactDetail(iEngine,iParameters,QContactUrl::DefinitionName,"","",KErrNotFound ); + QContactDetail cntDetUrl = fieldUrl->CreateContactDetailL(iEngine,iParameters,QContactUrl::DefinitionName,"","",KErrNotFound ); if(!cntDetUrl.isEmpty()) { fieldUrl->AddFieldToParam( iParameters, cntDetUrl ); //it will do "param->iContactFields.AppendL(field);" @@ -796,7 +543,7 @@ { CCreatorContactField* fieldEmail = CCreatorContactField::NewL(); CleanupStack::PushL( fieldEmail ); - QContactDetail cntDetEmail = fieldEmail->CreateContactDetail(iEngine,iParameters,QContactEmailAddress::DefinitionName,"","",KErrNotFound ); + QContactDetail cntDetEmail = fieldEmail->CreateContactDetailL(iEngine,iParameters,QContactEmailAddress::DefinitionName,"","",KErrNotFound ); if(!cntDetEmail.isEmpty()) { fieldEmail->AddFieldToParam( iParameters, cntDetEmail ); //it will do "param->iContactFields.AppendL(field);" @@ -980,7 +727,7 @@ { //pImpl = CCreatorContactTextField::NewL(aFieldType, aData); } -QContactDetail CCreatorContactField::CreateContactDetail(CCreatorEngine* aEngine,CPhonebookParameters* aParameters,QString aDetail, QString aFieldContext, QString aFieldString, TInt aRand ) +QContactDetail CCreatorContactField::CreateContactDetailL(CCreatorEngine* aEngine,CPhonebookParameters* aParameters,QString aDetail, QString aFieldContext, QString aFieldString, TInt aRand ) { QContactDetail emptyDet; TPtrC contentData; @@ -1022,7 +769,7 @@ return emptyDet; } } - emptyDet = CreateContactDetail( aEngine, aParameters, aDetail, aFieldContext, aFieldString, contentData ); + emptyDet = CreateContactDetailL( aEngine, aParameters, aDetail, aFieldContext, aFieldString, contentData ); if( tempData ) { CleanupStack::PopAndDestroy( tempData ); @@ -1030,7 +777,7 @@ return emptyDet; } -QContactDetail CCreatorContactField::CreateContactDetail(CCreatorEngine* aEngine,CPhonebookParameters* aParameters,QString aDetail, QString aFieldContext, QString aFieldString, TPtrC aData ) +QContactDetail CCreatorContactField::CreateContactDetailL(CCreatorEngine* aEngine,CPhonebookParameters* aParameters,QString aDetail, QString aFieldContext, QString aFieldString, TPtrC aData ) { QContactDetail contactDetail; @@ -1258,10 +1005,10 @@ QString avatarFile = QString::fromUtf16( destPath.Ptr(),destPath.Length() ); - QPixmap avatarPix(avatarFile); + //QPixmap avatarPix(avatarFile); contactAvatar.setAvatar(avatarFile); - contactAvatar.setPixmap(avatarPix); + //contactAvatar.setPixmap(avatarPix); return contactAvatar; } diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/src/creator_phonebookbase.cpp --- a/creator/engine/src/creator_phonebookbase.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/src/creator_phonebookbase.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -30,11 +30,13 @@ return; } + const TDesC* showText = &KSavingText; TBool finished(EFalse); TBool retval(ETrue); switch(aUserData) { case ECreatorPhonebookDelete: + showText = &KDeletingText; finished = ETrue; iEntriesToBeCreated = 1; break; @@ -44,25 +46,17 @@ ); break; case ECreatorPhonebookGetContactFields: - if(!iDefaultFieldsSelected) + if(iDummy==0)// first item, use default fields + { - if(iDummy==0)// first item, use default fields - - { - iDefaultFieldsSelected = ETrue; - retval = iEngine->GetEngineWrapper()->YesNoQueryDialog(_L("Add all the other fields to contacts?"), this, ECreatorPhonebookGetContactFields); - } - else - { - retval = iEngine->GetEngineWrapper()->EntriesQueryDialog(&iNumberOfPhoneNumberFields, _L("Amount of phone number fields in one contact?"), - ETrue, this, ECreatorPhonebookGetPhoneNumbersCount - ); - } + iDefaultFieldsSelected = ETrue; + finished = ETrue; } else { - iAddAllFields = aPositiveAction; - finished = ETrue; + retval = iEngine->GetEngineWrapper()->EntriesQueryDialog(&iNumberOfPhoneNumberFields, _L("Amount of phone number fields in one contact?"), + ETrue, this, ECreatorPhonebookGetPhoneNumbersCount + ); } break; case ECreatorPhonebookGetPhoneNumbersCount: @@ -76,6 +70,10 @@ ); break; case ECreatorPhonebookGetEmailsCount: + retval = iEngine->GetEngineWrapper()->YesNoQueryDialog(_L("Add all the other fields to contacts?"), this, ECreatorPhonebookContactsAllFields); + break; + case ECreatorPhonebookContactsAllFields: + iAddAllFields = aPositiveAction; // finaly we have all informations from user, start engine finished = ETrue; break; @@ -109,7 +107,7 @@ // add this command to command array iEngine->AppendToCommandArrayL(iCommand, NULL, iEntriesToBeCreated); // started exucuting commands - iEngine->ExecuteFirstCommandL( KSavingText ); + iEngine->ExecuteFirstCommandL( *showText ); } } diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/src/creator_scriptentry.cpp --- a/creator/engine/src/creator_scriptentry.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/src/creator_scriptentry.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -84,14 +84,23 @@ { User::LeaveIfNull(iSearchArray); - if( aUserData == EGetingScript && aPositiveAction && iSearchArray->Count() ) + if( aUserData == EGetingScript ) { - iObserver->FileChosenL( ETrue, iSearchArray->MdcaPoint(iSelectedItem) ); + if(aPositiveAction) + { + iObserver->ScriptChosenL( ETrue, iSearchArray->MdcaPoint(iSelectedItem) ); + } + else + { + iObserver->ScriptChosenL( EFalse ); + } } else if( aUserData == EGetingRandomDataFile && aPositiveAction && iSearchArray->Count() ) { - TFileName fileName; - if (iSelectedItem == (iSearchArray->Count() - 1)) + if(aPositiveAction) + { + TFileName fileName; + if (iSelectedItem == (iSearchArray->Count() - 1)) { // "default" (resource file) selected fileName.Copy(KNullDesC); @@ -101,15 +110,13 @@ // xml file selected fileName.Copy(iSearchArray->MdcaPoint(iSelectedItem)); } - iObserver->FileChosenL( ETrue, fileName ); + iObserver->RandomDataFileChosenL( ETrue, fileName ); + } + else + { + iObserver->RandomDataFileChosenL( EFalse ); + } } - else - { - iObserver->FileChosenL( EFalse ); - } - delete iSearchArray; - iSearchArray = NULL; - iObserver = NULL; } // --------------------------------------------------------------------------- @@ -127,6 +134,7 @@ // init the search array delete iSearchArray; + iSearchArray = NULL; iSearchArray = new(ELeave) CDesCArrayFlat(20); // wait dialog @@ -381,11 +389,15 @@ #endif */ -TBool CCommandParser::GetRandomDataFilenameL(TDes& aFilename) +TBool CCommandParser::GetRandomDataFilenameL(MCommandParserObserver *aObserver) { LOGSTRING("Creator: CCommandParser::GetRandomDataFilenameL"); TBool ret = EFalse; + User::LeaveIfNull( aObserver ); + iObserver = aObserver; + iSelectedItem = 0; + // init the search array if (iSearchArray) { @@ -466,7 +478,7 @@ // add "default" (resource file) to list fileNameArray->AppendL(_L("Default")); - ret = iEngine->GetEngineWrapper()->PopupListDialog(_L("Select random data file"), fileNameArray, &iSelectedItem, this); + ret = iEngine->GetEngineWrapper()->PopupListDialog(_L("Select random data file"), fileNameArray, &iSelectedItem, this, EGetingRandomDataFile); CleanupStack::PopAndDestroy(fileNameArray); } else // no random data files found from the search paths diff -r 271e901a9423 -r 4cc0d1a608c1 creator/engine/src/creator_scriptparser.cpp --- a/creator/engine/src/creator_scriptparser.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/engine/src/creator_scriptparser.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -149,6 +149,7 @@ { LOGSTRING2("Creator: CCreatorScriptParser::OnEndDocumentL (Error code: %d)", aErrorCode); User::LeaveIfError(aErrorCode); + iEngine->SortCommands(); } void CCreatorScriptParser::OnStartPrefixMappingL( const RString& /*aPrefix*/, diff -r 271e901a9423 -r 4cc0d1a608c1 creator/files/HTML-20kB.dat --- a/creator/files/HTML-20kB.dat Fri May 14 16:10:39 2010 +0300 +++ b/creator/files/HTML-20kB.dat Tue Jun 01 14:40:54 2010 +0300 @@ -1,378 +1,378 @@ - -
-My HTML page -
- -

My HTML page

- -
  • item 1
  • -
  • item 2
  • -
  • item 3
  • -
  • item 4
  • - -

    - COPYRIGHT LICENSE -

    - - NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR - CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS - -

    - -This Software Agreement ("Agreement") is between You (either an -individual or an entity), the End User, and Nokia Corporation -("Nokia"). The Agreement authorizes You to use the Software specified -in Clause 1 below, which may be stored on a CD-ROM, sent to You by -electronic mail, or downloaded from Nokia's Web pages or Servers or -from other sources under the terms and conditions set forth below. -This is an agreement on end-user rights and not an agreement for sale. -Nokia continues to own the copy of the Software and the physical media -contained in the sales package and any other copy that You are -authorized to make pursuant to this Agreement. - -Read this Agreement carefully before installing, downloading, or using -the Software. By clicking on the "I Accept" button while installing, -downloading, and/or using the Software, You agree to the terms and -conditions of this Agreement. If You do not agree to all of the terms -and conditions of this Agreement, promptly click the "Decline" or -"I Do Not Accept" button, cancel the installation or downloading, or -destroy or return the Software and accompanying documentation to -Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU -HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS -TERMS AND CONDITIONS. - -

    - -

    - COPYRIGHT LICENSE -

    - NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR - CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS -

    -This Software Agreement ("Agreement") is between You (either an -individual or an entity), the End User, and Nokia Corporation -("Nokia"). The Agreement authorizes You to use the Software specified -in Clause 1 below, which may be stored on a CD-ROM, sent to You by -electronic mail, or downloaded from Nokia's Web pages or Servers or -from other sources under the terms and conditions set forth below. -This is an agreement on end-user rights and not an agreement for sale. -Nokia continues to own the copy of the Software and the physical media -contained in the sales package and any other copy that You are -authorized to make pursuant to this Agreement. - -Read this Agreement carefully before installing, downloading, or using -the Software. By clicking on the "I Accept" button while installing, -downloading, and/or using the Software, You agree to the terms and -conditions of this Agreement. If You do not agree to all of the terms -and conditions of this Agreement, promptly click the "Decline" or -"I Do Not Accept" button, cancel the installation or downloading, or -destroy or return the Software and accompanying documentation to -Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU -HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS -TERMS AND CONDITIONS. - -

    - -

    - COPYRIGHT LICENSE -

    - NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR - CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS -

    -This Software Agreement ("Agreement") is between You (either an -individual or an entity), the End User, and Nokia Corporation -("Nokia"). The Agreement authorizes You to use the Software specified -in Clause 1 below, which may be stored on a CD-ROM, sent to You by -electronic mail, or downloaded from Nokia's Web pages or Servers or -from other sources under the terms and conditions set forth below. -This is an agreement on end-user rights and not an agreement for sale. -Nokia continues to own the copy of the Software and the physical media -contained in the sales package and any other copy that You are -authorized to make pursuant to this Agreement. - -Read this Agreement carefully before installing, downloading, or using -the Software. By clicking on the "I Accept" button while installing, -downloading, and/or using the Software, You agree to the terms and -conditions of this Agreement. If You do not agree to all of the terms -and conditions of this Agreement, promptly click the "Decline" or -"I Do Not Accept" button, cancel the installation or downloading, or -destroy or return the Software and accompanying documentation to -Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU -HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS -TERMS AND CONDITIONS. - -

    - -

    - COPYRIGHT LICENSE -

    - NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR - CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS -

    -This Software Agreement ("Agreement") is between You (either an -individual or an entity), the End User, and Nokia Corporation -("Nokia"). The Agreement authorizes You to use the Software specified -in Clause 1 below, which may be stored on a CD-ROM, sent to You by -electronic mail, or downloaded from Nokia's Web pages or Servers or -from other sources under the terms and conditions set forth below. -This is an agreement on end-user rights and not an agreement for sale. -Nokia continues to own the copy of the Software and the physical media -contained in the sales package and any other copy that You are -authorized to make pursuant to this Agreement. - -Read this Agreement carefully before installing, downloading, or using -the Software. By clicking on the "I Accept" button while installing, -downloading, and/or using the Software, You agree to the terms and -conditions of this Agreement. If You do not agree to all of the terms -and conditions of this Agreement, promptly click the "Decline" or -"I Do Not Accept" button, cancel the installation or downloading, or -destroy or return the Software and accompanying documentation to -Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU -HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS -TERMS AND CONDITIONS. - -

    - -

    - COPYRIGHT LICENSE -

    - NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR - CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS -

    -This Software Agreement ("Agreement") is between You (either an -individual or an entity), the End User, and Nokia Corporation -("Nokia"). The Agreement authorizes You to use the Software specified -in Clause 1 below, which may be stored on a CD-ROM, sent to You by -electronic mail, or downloaded from Nokia's Web pages or Servers or -from other sources under the terms and conditions set forth below. -This is an agreement on end-user rights and not an agreement for sale. -Nokia continues to own the copy of the Software and the physical media -contained in the sales package and any other copy that You are -authorized to make pursuant to this Agreement. - -Read this Agreement carefully before installing, downloading, or using -the Software. By clicking on the "I Accept" button while installing, -downloading, and/or using the Software, You agree to the terms and -conditions of this Agreement. If You do not agree to all of the terms -and conditions of this Agreement, promptly click the "Decline" or -"I Do Not Accept" button, cancel the installation or downloading, or -destroy or return the Software and accompanying documentation to -Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU -HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS -TERMS AND CONDITIONS. - -

    - -

    - COPYRIGHT LICENSE -

    - NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR - CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS -

    -This Software Agreement ("Agreement") is between You (either an -individual or an entity), the End User, and Nokia Corporation -("Nokia"). The Agreement authorizes You to use the Software specified -in Clause 1 below, which may be stored on a CD-ROM, sent to You by -electronic mail, or downloaded from Nokia's Web pages or Servers or -from other sources under the terms and conditions set forth below. -This is an agreement on end-user rights and not an agreement for sale. -Nokia continues to own the copy of the Software and the physical media -contained in the sales package and any other copy that You are -authorized to make pursuant to this Agreement. - -Read this Agreement carefully before installing, downloading, or using -the Software. By clicking on the "I Accept" button while installing, -downloading, and/or using the Software, You agree to the terms and -conditions of this Agreement. If You do not agree to all of the terms -and conditions of this Agreement, promptly click the "Decline" or -"I Do Not Accept" button, cancel the installation or downloading, or -destroy or return the Software and accompanying documentation to -Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU -HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS -TERMS AND CONDITIONS. - -

    - -

    - COPYRIGHT LICENSE -

    - NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR - CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS -

    -This Software Agreement ("Agreement") is between You (either an -individual or an entity), the End User, and Nokia Corporation -("Nokia"). The Agreement authorizes You to use the Software specified -in Clause 1 below, which may be stored on a CD-ROM, sent to You by -electronic mail, or downloaded from Nokia's Web pages or Servers or -from other sources under the terms and conditions set forth below. -This is an agreement on end-user rights and not an agreement for sale. -Nokia continues to own the copy of the Software and the physical media -contained in the sales package and any other copy that You are -authorized to make pursuant to this Agreement. - -Read this Agreement carefully before installing, downloading, or using -the Software. By clicking on the "I Accept" button while installing, -downloading, and/or using the Software, You agree to the terms and -conditions of this Agreement. If You do not agree to all of the terms -and conditions of this Agreement, promptly click the "Decline" or -"I Do Not Accept" button, cancel the installation or downloading, or -destroy or return the Software and accompanying documentation to -Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU -HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS -TERMS AND CONDITIONS. - -

    - -

    - COPYRIGHT LICENSE -

    - NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR - CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS -

    -This Software Agreement ("Agreement") is between You (either an -individual or an entity), the End User, and Nokia Corporation -("Nokia"). The Agreement authorizes You to use the Software specified -in Clause 1 below, which may be stored on a CD-ROM, sent to You by -electronic mail, or downloaded from Nokia's Web pages or Servers or -from other sources under the terms and conditions set forth below. -This is an agreement on end-user rights and not an agreement for sale. -Nokia continues to own the copy of the Software and the physical media -contained in the sales package and any other copy that You are -authorized to make pursuant to this Agreement. - -Read this Agreement carefully before installing, downloading, or using -the Software. By clicking on the "I Accept" button while installing, -downloading, and/or using the Software, You agree to the terms and -conditions of this Agreement. If You do not agree to all of the terms -and conditions of this Agreement, promptly click the "Decline" or -"I Do Not Accept" button, cancel the installation or downloading, or -destroy or return the Software and accompanying documentation to -Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU -HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS -TERMS AND CONDITIONS. - -

    - -

    - COPYRIGHT LICENSE -

    - NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR - CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS -

    -This Software Agreement ("Agreement") is between You (either an -individual or an entity), the End User, and Nokia Corporation -("Nokia"). The Agreement authorizes You to use the Software specified -in Clause 1 below, which may be stored on a CD-ROM, sent to You by -electronic mail, or downloaded from Nokia's Web pages or Servers or -from other sources under the terms and conditions set forth below. -This is an agreement on end-user rights and not an agreement for sale. -Nokia continues to own the copy of the Software and the physical media -contained in the sales package and any other copy that You are -authorized to make pursuant to this Agreement. - -Read this Agreement carefully before installing, downloading, or using -the Software. By clicking on the "I Accept" button while installing, -downloading, and/or using the Software, You agree to the terms and -conditions of this Agreement. If You do not agree to all of the terms -and conditions of this Agreement, promptly click the "Decline" or -"I Do Not Accept" button, cancel the installation or downloading, or -destroy or return the Software and accompanying documentation to -Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU -HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS -TERMS AND CONDITIONS. - -

    - -

    - COPYRIGHT LICENSE -

    - NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR - CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS -

    -This Software Agreement ("Agreement") is between You (either an -individual or an entity), the End User, and Nokia Corporation -("Nokia"). The Agreement authorizes You to use the Software specified -in Clause 1 below, which may be stored on a CD-ROM, sent to You by -electronic mail, or downloaded from Nokia's Web pages or Servers or -from other sources under the terms and conditions set forth below. -This is an agreement on end-user rights and not an agreement for sale. -Nokia continues to own the copy of the Software and the physical media -contained in the sales package and any other copy that You are -authorized to make pursuant to this Agreement. - -Read this Agreement carefully before installing, downloading, or using -the Software. By clicking on the "I Accept" button while installing, -downloading, and/or using the Software, You agree to the terms and -conditions of this Agreement. If You do not agree to all of the terms -and conditions of this Agreement, promptly click the "Decline" or -"I Do Not Accept" button, cancel the installation or downloading, or -destroy or return the Software and accompanying documentation to -Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU -HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS -TERMS AND CONDITIONS. - -

    - -

    - COPYRIGHT LICENSE -

    - NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR - CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS -

    -This Software Agreement ("Agreement") is between You (either an -individual or an entity), the End User, and Nokia Corporation -("Nokia"). The Agreement authorizes You to use the Software specified -in Clause 1 below, which may be stored on a CD-ROM, sent to You by -electronic mail, or downloaded from Nokia's Web pages or Servers or -from other sources under the terms and conditions set forth below. -This is an agreement on end-user rights and not an agreement for sale. -Nokia continues to own the copy of the Software and the physical media -contained in the sales package and any other copy that You are -authorized to make pursuant to this Agreement. - -Read this Agreement carefully before installing, downloading, or using -the Software. By clicking on the "I Accept" button while installing, -downloading, and/or using the Software, You agree to the terms and -conditions of this Agreement. If You do not agree to all of the terms -and conditions of this Agreement, promptly click the "Decline" or -"I Do Not Accept" button, cancel the installation or downloading, or -destroy or return the Software and accompanying documentation to -Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU -HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS -TERMS AND CONDITIONS. - -

    - -

    - COPYRIGHT LICENSE -

    - NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR - CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS -

    -This Software Agreement ("Agreement") is between You (either an -individual or an entity), the End User, and Nokia Corporation -("Nokia"). The Agreement authorizes You to use the Software specified -in Clause 1 below, which may be stored on a CD-ROM, sent to You by -electronic mail, or downloaded from Nokia's Web pages or Servers or -from other sources under the terms and conditions set forth below. -This is an agreement on end-user rights and not an agreement for sale. -Nokia continues to own the copy of the Software and the physical media -contained in the sales package and any other copy that You are -authorized to make pursuant to this Agreement. - -Read this Agreement carefully before installing, downloading, or using -the Software. By clicking on the "I Accept" button while installing, -downloading, and/or using the Software, You agree to the terms and -conditions of this Agreement. If You do not agree to all of the terms -and conditions of this Agreement, promptly click the "Decline" or -"I Do Not Accept" button, cancel the installation or downloading, or -destroy or return the Software and accompanying documentation to -Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU -HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS -TERMS AND CONDITIONS. - -

    - - - + +
    +My HTML page +
    + +

    My HTML page

    + +
  • item 1
  • +
  • item 2
  • +
  • item 3
  • +
  • item 4
  • + +

    + COPYRIGHT LICENSE +

    + + NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR + CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS + +

    + +This Software Agreement ("Agreement") is between You (either an +individual or an entity), the End User, and Nokia Corporation +("Nokia"). The Agreement authorizes You to use the Software specified +in Clause 1 below, which may be stored on a CD-ROM, sent to You by +electronic mail, or downloaded from Nokia's Web pages or Servers or +from other sources under the terms and conditions set forth below. +This is an agreement on end-user rights and not an agreement for sale. +Nokia continues to own the copy of the Software and the physical media +contained in the sales package and any other copy that You are +authorized to make pursuant to this Agreement. + +Read this Agreement carefully before installing, downloading, or using +the Software. By clicking on the "I Accept" button while installing, +downloading, and/or using the Software, You agree to the terms and +conditions of this Agreement. If You do not agree to all of the terms +and conditions of this Agreement, promptly click the "Decline" or +"I Do Not Accept" button, cancel the installation or downloading, or +destroy or return the Software and accompanying documentation to +Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU +HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. + +

    + +

    + COPYRIGHT LICENSE +

    + NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR + CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS +

    +This Software Agreement ("Agreement") is between You (either an +individual or an entity), the End User, and Nokia Corporation +("Nokia"). The Agreement authorizes You to use the Software specified +in Clause 1 below, which may be stored on a CD-ROM, sent to You by +electronic mail, or downloaded from Nokia's Web pages or Servers or +from other sources under the terms and conditions set forth below. +This is an agreement on end-user rights and not an agreement for sale. +Nokia continues to own the copy of the Software and the physical media +contained in the sales package and any other copy that You are +authorized to make pursuant to this Agreement. + +Read this Agreement carefully before installing, downloading, or using +the Software. By clicking on the "I Accept" button while installing, +downloading, and/or using the Software, You agree to the terms and +conditions of this Agreement. If You do not agree to all of the terms +and conditions of this Agreement, promptly click the "Decline" or +"I Do Not Accept" button, cancel the installation or downloading, or +destroy or return the Software and accompanying documentation to +Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU +HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. + +

    + +

    + COPYRIGHT LICENSE +

    + NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR + CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS +

    +This Software Agreement ("Agreement") is between You (either an +individual or an entity), the End User, and Nokia Corporation +("Nokia"). The Agreement authorizes You to use the Software specified +in Clause 1 below, which may be stored on a CD-ROM, sent to You by +electronic mail, or downloaded from Nokia's Web pages or Servers or +from other sources under the terms and conditions set forth below. +This is an agreement on end-user rights and not an agreement for sale. +Nokia continues to own the copy of the Software and the physical media +contained in the sales package and any other copy that You are +authorized to make pursuant to this Agreement. + +Read this Agreement carefully before installing, downloading, or using +the Software. By clicking on the "I Accept" button while installing, +downloading, and/or using the Software, You agree to the terms and +conditions of this Agreement. If You do not agree to all of the terms +and conditions of this Agreement, promptly click the "Decline" or +"I Do Not Accept" button, cancel the installation or downloading, or +destroy or return the Software and accompanying documentation to +Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU +HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. + +

    + +

    + COPYRIGHT LICENSE +

    + NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR + CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS +

    +This Software Agreement ("Agreement") is between You (either an +individual or an entity), the End User, and Nokia Corporation +("Nokia"). The Agreement authorizes You to use the Software specified +in Clause 1 below, which may be stored on a CD-ROM, sent to You by +electronic mail, or downloaded from Nokia's Web pages or Servers or +from other sources under the terms and conditions set forth below. +This is an agreement on end-user rights and not an agreement for sale. +Nokia continues to own the copy of the Software and the physical media +contained in the sales package and any other copy that You are +authorized to make pursuant to this Agreement. + +Read this Agreement carefully before installing, downloading, or using +the Software. By clicking on the "I Accept" button while installing, +downloading, and/or using the Software, You agree to the terms and +conditions of this Agreement. If You do not agree to all of the terms +and conditions of this Agreement, promptly click the "Decline" or +"I Do Not Accept" button, cancel the installation or downloading, or +destroy or return the Software and accompanying documentation to +Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU +HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. + +

    + +

    + COPYRIGHT LICENSE +

    + NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR + CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS +

    +This Software Agreement ("Agreement") is between You (either an +individual or an entity), the End User, and Nokia Corporation +("Nokia"). The Agreement authorizes You to use the Software specified +in Clause 1 below, which may be stored on a CD-ROM, sent to You by +electronic mail, or downloaded from Nokia's Web pages or Servers or +from other sources under the terms and conditions set forth below. +This is an agreement on end-user rights and not an agreement for sale. +Nokia continues to own the copy of the Software and the physical media +contained in the sales package and any other copy that You are +authorized to make pursuant to this Agreement. + +Read this Agreement carefully before installing, downloading, or using +the Software. By clicking on the "I Accept" button while installing, +downloading, and/or using the Software, You agree to the terms and +conditions of this Agreement. If You do not agree to all of the terms +and conditions of this Agreement, promptly click the "Decline" or +"I Do Not Accept" button, cancel the installation or downloading, or +destroy or return the Software and accompanying documentation to +Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU +HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. + +

    + +

    + COPYRIGHT LICENSE +

    + NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR + CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS +

    +This Software Agreement ("Agreement") is between You (either an +individual or an entity), the End User, and Nokia Corporation +("Nokia"). The Agreement authorizes You to use the Software specified +in Clause 1 below, which may be stored on a CD-ROM, sent to You by +electronic mail, or downloaded from Nokia's Web pages or Servers or +from other sources under the terms and conditions set forth below. +This is an agreement on end-user rights and not an agreement for sale. +Nokia continues to own the copy of the Software and the physical media +contained in the sales package and any other copy that You are +authorized to make pursuant to this Agreement. + +Read this Agreement carefully before installing, downloading, or using +the Software. By clicking on the "I Accept" button while installing, +downloading, and/or using the Software, You agree to the terms and +conditions of this Agreement. If You do not agree to all of the terms +and conditions of this Agreement, promptly click the "Decline" or +"I Do Not Accept" button, cancel the installation or downloading, or +destroy or return the Software and accompanying documentation to +Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU +HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. + +

    + +

    + COPYRIGHT LICENSE +

    + NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR + CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS +

    +This Software Agreement ("Agreement") is between You (either an +individual or an entity), the End User, and Nokia Corporation +("Nokia"). The Agreement authorizes You to use the Software specified +in Clause 1 below, which may be stored on a CD-ROM, sent to You by +electronic mail, or downloaded from Nokia's Web pages or Servers or +from other sources under the terms and conditions set forth below. +This is an agreement on end-user rights and not an agreement for sale. +Nokia continues to own the copy of the Software and the physical media +contained in the sales package and any other copy that You are +authorized to make pursuant to this Agreement. + +Read this Agreement carefully before installing, downloading, or using +the Software. By clicking on the "I Accept" button while installing, +downloading, and/or using the Software, You agree to the terms and +conditions of this Agreement. If You do not agree to all of the terms +and conditions of this Agreement, promptly click the "Decline" or +"I Do Not Accept" button, cancel the installation or downloading, or +destroy or return the Software and accompanying documentation to +Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU +HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. + +

    + +

    + COPYRIGHT LICENSE +

    + NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR + CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS +

    +This Software Agreement ("Agreement") is between You (either an +individual or an entity), the End User, and Nokia Corporation +("Nokia"). The Agreement authorizes You to use the Software specified +in Clause 1 below, which may be stored on a CD-ROM, sent to You by +electronic mail, or downloaded from Nokia's Web pages or Servers or +from other sources under the terms and conditions set forth below. +This is an agreement on end-user rights and not an agreement for sale. +Nokia continues to own the copy of the Software and the physical media +contained in the sales package and any other copy that You are +authorized to make pursuant to this Agreement. + +Read this Agreement carefully before installing, downloading, or using +the Software. By clicking on the "I Accept" button while installing, +downloading, and/or using the Software, You agree to the terms and +conditions of this Agreement. If You do not agree to all of the terms +and conditions of this Agreement, promptly click the "Decline" or +"I Do Not Accept" button, cancel the installation or downloading, or +destroy or return the Software and accompanying documentation to +Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU +HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. + +

    + +

    + COPYRIGHT LICENSE +

    + NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR + CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS +

    +This Software Agreement ("Agreement") is between You (either an +individual or an entity), the End User, and Nokia Corporation +("Nokia"). The Agreement authorizes You to use the Software specified +in Clause 1 below, which may be stored on a CD-ROM, sent to You by +electronic mail, or downloaded from Nokia's Web pages or Servers or +from other sources under the terms and conditions set forth below. +This is an agreement on end-user rights and not an agreement for sale. +Nokia continues to own the copy of the Software and the physical media +contained in the sales package and any other copy that You are +authorized to make pursuant to this Agreement. + +Read this Agreement carefully before installing, downloading, or using +the Software. By clicking on the "I Accept" button while installing, +downloading, and/or using the Software, You agree to the terms and +conditions of this Agreement. If You do not agree to all of the terms +and conditions of this Agreement, promptly click the "Decline" or +"I Do Not Accept" button, cancel the installation or downloading, or +destroy or return the Software and accompanying documentation to +Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU +HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. + +

    + +

    + COPYRIGHT LICENSE +

    + NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR + CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS +

    +This Software Agreement ("Agreement") is between You (either an +individual or an entity), the End User, and Nokia Corporation +("Nokia"). The Agreement authorizes You to use the Software specified +in Clause 1 below, which may be stored on a CD-ROM, sent to You by +electronic mail, or downloaded from Nokia's Web pages or Servers or +from other sources under the terms and conditions set forth below. +This is an agreement on end-user rights and not an agreement for sale. +Nokia continues to own the copy of the Software and the physical media +contained in the sales package and any other copy that You are +authorized to make pursuant to this Agreement. + +Read this Agreement carefully before installing, downloading, or using +the Software. By clicking on the "I Accept" button while installing, +downloading, and/or using the Software, You agree to the terms and +conditions of this Agreement. If You do not agree to all of the terms +and conditions of this Agreement, promptly click the "Decline" or +"I Do Not Accept" button, cancel the installation or downloading, or +destroy or return the Software and accompanying documentation to +Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU +HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. + +

    + +

    + COPYRIGHT LICENSE +

    + NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR + CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS +

    +This Software Agreement ("Agreement") is between You (either an +individual or an entity), the End User, and Nokia Corporation +("Nokia"). The Agreement authorizes You to use the Software specified +in Clause 1 below, which may be stored on a CD-ROM, sent to You by +electronic mail, or downloaded from Nokia's Web pages or Servers or +from other sources under the terms and conditions set forth below. +This is an agreement on end-user rights and not an agreement for sale. +Nokia continues to own the copy of the Software and the physical media +contained in the sales package and any other copy that You are +authorized to make pursuant to this Agreement. + +Read this Agreement carefully before installing, downloading, or using +the Software. By clicking on the "I Accept" button while installing, +downloading, and/or using the Software, You agree to the terms and +conditions of this Agreement. If You do not agree to all of the terms +and conditions of this Agreement, promptly click the "Decline" or +"I Do Not Accept" button, cancel the installation or downloading, or +destroy or return the Software and accompanying documentation to +Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU +HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. + +

    + +

    + COPYRIGHT LICENSE +

    + NOKIA CORPORATION END-USER SOFTWARE AGREEMENT FOR + CARBIDE.C++ AND ASSOCIATED ON-DEVICE APPLICATIONS +

    +This Software Agreement ("Agreement") is between You (either an +individual or an entity), the End User, and Nokia Corporation +("Nokia"). The Agreement authorizes You to use the Software specified +in Clause 1 below, which may be stored on a CD-ROM, sent to You by +electronic mail, or downloaded from Nokia's Web pages or Servers or +from other sources under the terms and conditions set forth below. +This is an agreement on end-user rights and not an agreement for sale. +Nokia continues to own the copy of the Software and the physical media +contained in the sales package and any other copy that You are +authorized to make pursuant to this Agreement. + +Read this Agreement carefully before installing, downloading, or using +the Software. By clicking on the "I Accept" button while installing, +downloading, and/or using the Software, You agree to the terms and +conditions of this Agreement. If You do not agree to all of the terms +and conditions of this Agreement, promptly click the "Decline" or +"I Do Not Accept" button, cancel the installation or downloading, or +destroy or return the Software and accompanying documentation to +Nokia. YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU +HAVE READ THIS AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. + +

    + + + \ No newline at end of file diff -r 271e901a9423 -r 4cc0d1a608c1 creator/files/JAD-1kB.dat --- a/creator/files/JAD-1kB.dat Fri May 14 16:10:39 2010 +0300 +++ b/creator/files/JAD-1kB.dat Tue Jun 01 14:40:54 2010 +0300 @@ -1,7 +1,7 @@ -MIDlet-1: HelloWorld, , helloworld.HelloWorld -MIDlet-Icon: \HelloWorld.png -MIDlet-Jar-Size: 6817 -MIDlet-Jar-URL: HelloWorld.jar -MIDlet-Name: HelloWorld -MIDlet-Vendor: My Vendor -MIDlet-Version: 1.0 +MIDlet-1: HelloWorld, , helloworld.HelloWorld +MIDlet-Icon: \HelloWorld.png +MIDlet-Jar-Size: 6817 +MIDlet-Jar-URL: HelloWorld.jar +MIDlet-Name: HelloWorld +MIDlet-Vendor: My Vendor +MIDlet-Version: 1.0 diff -r 271e901a9423 -r 4cc0d1a608c1 creator/files/SVG-15kB.dat --- a/creator/files/SVG-15kB.dat Fri May 14 16:10:39 2010 +0300 +++ b/creator/files/SVG-15kB.dat Tue Jun 01 14:40:54 2010 +0300 @@ -1,62 +1,62 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff -r 271e901a9423 -r 4cc0d1a608c1 creator/files/TXT-10kB.dat --- a/creator/files/TXT-10kB.dat Fri May 14 16:10:39 2010 +0300 +++ b/creator/files/TXT-10kB.dat Tue Jun 01 14:40:54 2010 +0300 @@ -1,19 +1,19 @@ -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... \ No newline at end of file diff -r 271e901a9423 -r 4cc0d1a608c1 creator/files/TXT-70kB.dat --- a/creator/files/TXT-70kB.dat Fri May 14 16:10:39 2010 +0300 +++ b/creator/files/TXT-70kB.dat Tue Jun 01 14:40:54 2010 +0300 @@ -1,147 +1,147 @@ -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing.Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... TestiTesting... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing..ing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Te. Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - -Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... - - +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing.Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... TestiTesting... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing..ing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Te. Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + +Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... + + Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... Testing... ng... .. \ No newline at end of file diff -r 271e901a9423 -r 4cc0d1a608c1 creator/files/VCF-1kB.dat --- a/creator/files/VCF-1kB.dat Fri May 14 16:10:39 2010 +0300 +++ b/creator/files/VCF-1kB.dat Tue Jun 01 14:40:54 2010 +0300 @@ -1,17 +1,17 @@ -BEGIN:VCARD -VERSION:2.1 -N:Smith;John -FN:John Smith -ORG:Firm -TITLE:Boss -NOTE;ENCODING=QUOTED-PRINTABLE:Liirum larum.=0D=0A -TEL;WORK;VOICE:132456798 -TEL;HOME;VOICE:654654987 -TEL;CELL;VOICE:0400654987654 -TEL;WORK;FAX:2321654987987 -ADR;WORK:;;Firmstreet 1;New City;Sawo;00000;Finland -LABEL;WORK;ENCODING=QUOTED-PRINTABLE:Firmstreet 1=0D=0ANew City, Sawo 00000=0D=0AFinland -URL;WORK:http://www.nokia.com -EMAIL;PREF;INTERNET:John.Smith@firm.com -REV:20080306T115812Z -END:VCARD +BEGIN:VCARD +VERSION:2.1 +N:Smith;John +FN:John Smith +ORG:Firm +TITLE:Boss +NOTE;ENCODING=QUOTED-PRINTABLE:Liirum larum.=0D=0A +TEL;WORK;VOICE:132456798 +TEL;HOME;VOICE:654654987 +TEL;CELL;VOICE:0400654987654 +TEL;WORK;FAX:2321654987987 +ADR;WORK:;;Firmstreet 1;New City;Sawo;00000;Finland +LABEL;WORK;ENCODING=QUOTED-PRINTABLE:Firmstreet 1=0D=0ANew City, Sawo 00000=0D=0AFinland +URL;WORK:http://www.nokia.com +EMAIL;PREF;INTERNET:John.Smith@firm.com +REV:20080306T115812Z +END:VCARD diff -r 271e901a9423 -r 4cc0d1a608c1 creator/files/VCS-1kB.dat --- a/creator/files/VCS-1kB.dat Fri May 14 16:10:39 2010 +0300 +++ b/creator/files/VCS-1kB.dat Tue Jun 01 14:40:54 2010 +0300 @@ -1,15 +1,15 @@ -BEGIN:VCALENDAR -PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN -VERSION:1.0 -BEGIN:VEVENT -DTSTART:20080306T060000Z -DTEND:20080306T070000Z -LOCATION;ENCODING=QUOTED-PRINTABLE:Meeting room -UID:040000008200E00074C5B7101A82E00800000000000CEF7E917FC8010000000000000000100 - 000008AA6A7A7250C0A4E97153769E69DD064 -DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Remember to bring laptop and document= -ation=0D=0A -SUMMARY;ENCODING=QUOTED-PRINTABLE:Meeting with BOSS -PRIORITY:3 -END:VEVENT -END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN +VERSION:1.0 +BEGIN:VEVENT +DTSTART:20080306T060000Z +DTEND:20080306T070000Z +LOCATION;ENCODING=QUOTED-PRINTABLE:Meeting room +UID:040000008200E00074C5B7101A82E00800000000000CEF7E917FC8010000000000000000100 + 000008AA6A7A7250C0A4E97153769E69DD064 +DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Remember to bring laptop and document= +ation=0D=0A +SUMMARY;ENCODING=QUOTED-PRINTABLE:Meeting with BOSS +PRIORITY:3 +END:VEVENT +END:VCALENDAR diff -r 271e901a9423 -r 4cc0d1a608c1 creator/inc/engine.h --- a/creator/inc/engine.h Fri May 14 16:10:39 2010 +0300 +++ b/creator/inc/engine.h Tue Jun 01 14:40:54 2010 +0300 @@ -103,15 +103,24 @@ { public: /** - * Called when CCommandParser user has choosen some file(script file, random data file) + * 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 FileChosenL(TBool aSuccess, const TDesC& aFileName = KNullDesC) = 0; + 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; }; /** @@ -135,6 +144,10 @@ class CCreatorEngine : public CActive, public MUIObserver, public MCommandParserObserver { +enum ECreatorEngineState{ + ECreatorEngineDeleteAllEntries, + ECreatorEngineDeleteAllCreatorEntries, +}; public: enum TRandomStringType @@ -268,14 +281,24 @@ public: // from MCommandParserObserver /** - * Called when CCommandParser user has choosen some file(script file, random data file) + * 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 FileChosenL(TBool aSuccess, const TDesC& aFileName = KNullDesC); + 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); @@ -341,6 +364,8 @@ void WriteEntryIdsToStoreL( RArray& aEntryIds, const TUid aModuleUid ); void RemoveStoreL( const TUid aModuleUid ); void ProgressDialogCancelledL(); + + void SortCommands(); private: // needed by the engine itself @@ -348,7 +373,6 @@ CEikonEnv* iEnv; //CCreatorAppUi* iAppUi; TInt iCurrentEntry; - TInt iEntriesToBeCreated; TInt iFailedCommands; CDesCArrayFlat* iSoundFileArray; diff -r 271e901a9423 -r 4cc0d1a608c1 creator/inc/enginewrapper.h --- a/creator/inc/enginewrapper.h Fri May 14 16:10:39 2010 +0300 +++ b/creator/inc/enginewrapper.h Tue Jun 01 14:40:54 2010 +0300 @@ -103,37 +103,37 @@ /** * Create entries query dialog */ - TBool EntriesQueryDialog(TInt* aNumberOfEntries, const TDesC& aPrompt, TBool aAcceptsZero = EFalse, MUIObserver* aObserver = NULL, int userData = 0); + TBool EntriesQueryDialog(TInt* aNumberOfEntries, const TDesC& aPrompt, TBool aAcceptsZero, MUIObserver* aObserver, TInt aUserData); /** * Create time query dialog */ - TBool TimeQueryDialog(TTime* aTime, const TDesC& aPrompt, MUIObserver* aObserver = NULL, int userData = 0); + TBool TimeQueryDialog(TTime* aTime, const TDesC& aPrompt, MUIObserver* aObserver, TInt aUserData); /** * Create yes or no query dialog */ - TBool YesNoQueryDialog(const TDesC& aPrompt, MUIObserver* aObserver = NULL, int userData = 0); + TBool YesNoQueryDialog(const TDesC& aPrompt, MUIObserver* aObserver, int userData); /** * Popup list dialog for selecting item from dialog list */ - TBool PopupListDialog(const TDesC& aPrompt, const CDesCArray* aFileNameArray, TInt* aIndex, MUIObserver* aObserver = NULL, TInt aUserData=0); + TBool PopupListDialog(const TDesC& aPrompt, const CDesCArray* aFileNameArray, TInt* aIndex, MUIObserver* aObserver, TInt aUserData); /** * Directory query dialog */ - bool DirectoryQueryDialog(const TDesC& aPrompt, TFileName& aDirectory); + TBool DirectoryQueryDialog(const TDesC& aPrompt, TDes& aDirectory, MUIObserver* aObserver, TInt aUserData); /** * Create list query single-selection dialog */ - TBool ListQueryDialog(const TDesC& aPrompt, TListQueryId aId, TInt* aSeletedItem, MUIObserver* aObserver = NULL, TInt aUserData=0); + TBool ListQueryDialog(const TDesC& aPrompt, TListQueryId aId, TInt* aSeletedItem, MUIObserver* aObserver, TInt aUserData); /** * Create list query multi-selection dialog */ - TBool ListQueryDialog(const TDesC& aPrompt, TListQueryId aId, CArrayFixFlat* aSelectedItems, MUIObserver* aObserver = NULL, TInt aUserData=0); + TBool ListQueryDialog(const TDesC& aPrompt, TListQueryId aId, CArrayFixFlat* aSelectedItems, MUIObserver* aObserver, TInt aUserData); /** diff -r 271e901a9423 -r 4cc0d1a608c1 creator/inc/notifications.h --- a/creator/inc/notifications.h Fri May 14 16:10:39 2010 +0300 +++ b/creator/inc/notifications.h Tue Jun 01 14:40:54 2010 +0300 @@ -56,31 +56,6 @@ */ static HbProgressDialog* showProgressBar(const QString& text, int max); - /** - * Entries query dialog - */ - static bool entriesQueryDialog(int& numberOfEntries, const QString& text, bool acceptsZero); - - /** - * Time query dialog - */ - static bool timeQueryDialog(QDate& date, const QString& text); - - /** - * Yes or No query dialog - */ - static bool yesNoQueryDialog(const QString& text); - - /** - * popup list dialog for selecting one item from list - */ - static void popupListDialog(const QString& text, QStringList& items, HbAbstractItemView::SelectionMode mode, QObject* receiver = 0, const char* member = 0); - - /** - * directory query dialog - */ - static bool directoryQueryDialog(const QString& text, QString& directory); - /** * shows global HbGlobalCommonNote type note */ @@ -129,12 +104,16 @@ Q_OBJECT public: static void launch(const QString& label, int* value, bool acceptZero, MUIObserver* observer, int userData) throw( std::exception ); + static void launch(const QString& label, TDes& value, MUIObserver* observer, int userData) throw( std::exception ); protected: - CreatorInputDialog(int*value, MUIObserver* observer, int userData); + CreatorInputDialog(int* value, MUIObserver* observer, int userData); + CreatorInputDialog(TDes& value, MUIObserver* observer, int userData); protected slots: void DialogClosed(HbAction*); private: - int *mValue; + int *mIntValue; + TDes& mStrValue; + TBuf<1> mDummy; }; class CreatorSelectionDialog : public HbSelectionDialog, public CreatorDialog diff -r 271e901a9423 -r 4cc0d1a608c1 creator/scripts/browserEx.creatorxml --- a/creator/scripts/browserEx.creatorxml Fri May 14 16:10:39 2010 +0300 +++ b/creator/scripts/browserEx.creatorxml Tue Jun 01 14:40:54 2010 +0300 @@ -1,48 +1,48 @@ - - - - - - - Creator bookmark - http://example.net - User - passwd - - - - - - - - - - - - - - - - - Creator bookmarks - - - - - - - Creator saved pages - - - - - - - Creator saved page - - - - - + + + + + + + Creator bookmark + http://example.net + User + passwd + + + + + + + + + + + + + + + + + Creator bookmarks + + + + + + + Creator saved pages + + + + + + + Creator saved page + + + + + diff -r 271e901a9423 -r 4cc0d1a608c1 creator/scripts/calendarEx.creatorxml --- a/creator/scripts/calendarEx.creatorxml Fri May 14 16:10:39 2010 +0300 +++ b/creator/scripts/calendarEx.creatorxml Tue Jun 01 14:40:54 2010 +0300 @@ -1,103 +1,103 @@ - - - - - - - - - - - - Project meeting - Let's have a bi-weekly project meeting. Welcome everyone! - Meeting room 1 - 2008-03-27T13:02:57 - 2008-03-27T16:15:00 - weekly - 2 - 2008-03-27 - 2009-03-27 - - - - - John Doe - john.doe@example.net - - - - - - - - - - - - - - - - - - Jane - - - - - - - - - - - Appointment with Jane - 2008-02-29T14:00:00 - 2008-02-29T15:00:00 - - - - - - - - - - - Tech Days - Annual tech days, let's have fun! - 2008-05-01 - 2008-05-03 - - - - - - - Remember to buy Lotto! - 2008-02-28T18:00:00 - 2008-02-28T18:00:00 - - - - - - - - - - - - - - - Should do something...? - 2008-02-29T10:00:00 - 2008-02-29T12:00:00 - - - - + + + + + + + + + + + + Project meeting + Let's have a bi-weekly project meeting. Welcome everyone! + Meeting room 1 + 2008-03-27T13:02:57 + 2008-03-27T16:15:00 + weekly + 2 + 2008-03-27 + 2009-03-27 + + + + + John Doe + john.doe@example.net + + + + + + + + + + + + + + + + + + Jane + + + + + + + + + + + Appointment with Jane + 2008-02-29T14:00:00 + 2008-02-29T15:00:00 + + + + + + + + + + + Tech Days + Annual tech days, let's have fun! + 2008-05-01 + 2008-05-03 + + + + + + + Remember to buy Lotto! + 2008-02-28T18:00:00 + 2008-02-28T18:00:00 + + + + + + + + + + + + + + + Should do something...? + 2008-02-29T10:00:00 + 2008-02-29T12:00:00 + + + + diff -r 271e901a9423 -r 4cc0d1a608c1 creator/scripts/connectionmethodEx.creatorxml --- a/creator/scripts/connectionmethodEx.creatorxml Fri May 14 16:10:39 2010 +0300 +++ b/creator/scripts/connectionmethodEx.creatorxml Tue Jun 01 14:40:54 2010 +0300 @@ -1,54 +1,54 @@ - - - - - - CR_Example - GPRS - http://wap.example.net - connectionoriented - ipv4 - john - no - doe - no - 10.10.10.101 - 255.255.255.0 - 10.10.10.102 - no - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + CR_Example + GPRS + http://wap.example.net + connectionoriented + ipv4 + john + no + doe + no + 10.10.10.101 + 255.255.255.0 + 10.10.10.102 + no + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 271e901a9423 -r 4cc0d1a608c1 creator/scripts/contactEx.creatorxml --- a/creator/scripts/contactEx.creatorxml Fri May 14 16:10:39 2010 +0300 +++ b/creator/scripts/contactEx.creatorxml Tue Jun 01 14:40:54 2010 +0300 @@ -1,59 +1,59 @@ - - - - - - - - - - - - - - - - - - - - - John - Smith - +35800101010101 - 00101010102 - john.smith@example.com - Mr. - - - - - - - - - - - - - - - ExampleCompany Ltd. - Software Designer - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + John + Smith + +35800101010101 + 00101010102 + john.smith@example.com + Mr. + + + + + + + + + + + + + + + ExampleCompany Ltd. + Software Designer + + + + + + + + + + + + + + + diff -r 271e901a9423 -r 4cc0d1a608c1 creator/scripts/filesEx.creatorxml --- a/creator/scripts/filesEx.creatorxml Fri May 14 16:10:39 2010 +0300 +++ b/creator/scripts/filesEx.creatorxml Tue Jun 01 14:40:54 2010 +0300 @@ -1,60 +1,60 @@ - - - - - - - - JPEG-25kB - c:\data\images - - - - - - - MIDI-10kB - c:\data\Sounds - - - - - - - - - 3GPP-70kB - c:\data\Videos - - - - - P0Y0M0DT0H21M1S - - 2 - - - - - - - - - GIF-2kB - c:\data\Images - - - - - P0Y0M0DT1H30M0S - - 2008-09-26T13:49:57 - 2009-03-27T16:15:00 - - - - - - + + + + + + + + JPEG-25kB + c:\data\images + + + + + + + MIDI-10kB + c:\data\Sounds + + + + + + + + + 3GPP-70kB + c:\data\Videos + + + + + P0Y0M0DT0H21M1S + + 2 + + + + + + + + + GIF-2kB + c:\data\Images + + + + + P0Y0M0DT1H30M0S + + 2008-09-26T13:49:57 + 2009-03-27T16:15:00 + + + + + + diff -r 271e901a9423 -r 4cc0d1a608c1 creator/scripts/impsEx.creatorxml --- a/creator/scripts/impsEx.creatorxml Fri May 14 16:10:39 2010 +0300 +++ b/creator/scripts/impsEx.creatorxml Tue Jun 01 14:40:54 2010 +0300 @@ -1,17 +1,17 @@ - - - - - - - Creator_test_imps - - - - - - - + + + + + + + Creator_test_imps + + + + + + + \ No newline at end of file diff -r 271e901a9423 -r 4cc0d1a608c1 creator/scripts/landmarkEx.creatorxml --- a/creator/scripts/landmarkEx.creatorxml Fri May 14 16:10:39 2010 +0300 +++ b/creator/scripts/landmarkEx.creatorxml Tue Jun 01 14:40:54 2010 +0300 @@ -1,52 +1,52 @@ - - - - - - - CreatorExample - accommodation - business - communication - educational - entertainment - food - geographical - outdoor - people - public - religious - shopping - sightseeing - sports - transport - This is an example landmark! - Landmark street 1 - 00445 - Landmark City - Landmark State - Landmark Country - 111222333 - http://www.example.net - -76.0023 - 98.1002 - 2 - -4.1 - 3 - - - - - - - - - - - - - - + + + + + + + CreatorExample + accommodation + business + communication + educational + entertainment + food + geographical + outdoor + people + public + religious + shopping + sightseeing + sports + transport + This is an example landmark! + Landmark street 1 + 00445 + Landmark City + Landmark State + Landmark Country + 111222333 + http://www.example.net + -76.0023 + 98.1002 + 2 + -4.1 + 3 + + + + + + + + + + + + + + \ No newline at end of file diff -r 271e901a9423 -r 4cc0d1a608c1 creator/scripts/logEx.creatorxml --- a/creator/scripts/logEx.creatorxml Fri May 14 16:10:39 2010 +0300 +++ b/creator/scripts/logEx.creatorxml Tue Jun 01 14:40:54 2010 +0300 @@ -1,45 +1,45 @@ - - - - - - - missed - 2008-03-25T13:11:21 - 1115555554112 - - - - - - - in - 2008-03-24T10:21:56 - 11155554112 - 241 - - - - - - - out - 2008-03-22T12:01:06 - 0555554555 - 445 - - - - - - - - - - - - - - + + + + + + + missed + 2008-03-25T13:11:21 + 1115555554112 + + + + + + + in + 2008-03-24T10:21:56 + 11155554112 + 241 + + + + + + + out + 2008-03-22T12:01:06 + 0555554555 + 445 + + + + + + + + + + + + + + diff -r 271e901a9423 -r 4cc0d1a608c1 creator/scripts/mailboxEx.creatorxml --- a/creator/scripts/mailboxEx.creatorxml Fri May 14 16:10:39 2010 +0300 +++ b/creator/scripts/mailboxEx.creatorxml Tue Jun 01 14:40:54 2010 +0300 @@ -1,35 +1,35 @@ - - - - - - cr_pop mail - - - yes - no - no - - - - - - - - cr_imap4 mail - creator@example.net - cc - yes - yes - creator - creator - cr_mail.example.net - no - no - no - getbodytextandattachments - - - + + + + + + cr_pop mail + + + yes + no + no + + + + + + + + cr_imap4 mail + creator@example.net + cc + yes + yes + creator + creator + cr_mail.example.net + no + no + no + getbodytextandattachments + + + diff -r 271e901a9423 -r 4cc0d1a608c1 creator/scripts/messagesEx.creatorxml --- a/creator/scripts/messagesEx.creatorxml Fri May 14 16:10:39 2010 +0300 +++ b/creator/scripts/messagesEx.creatorxml Tue Jun 01 14:40:54 2010 +0300 @@ -1,58 +1,58 @@ - - - - - - - - - - - - - - - - - - inbox - This is an example SMS created by Creator. - new - - - - - - - sent - Good music! - new - MP3-250kB - - - - - - - - - inbox - - - new - JPEG-200kB - - - - - - 123456 - inbox - This is an example SMS created by Creator. - new - - - - + + + + + + + + + + + + + + + + + + inbox + This is an example SMS created by Creator. + new + + + + + + + sent + Good music! + new + MP3-250kB + + + + + + + + + inbox + + + new + JPEG-200kB + + + + + + 123456 + inbox + This is an example SMS created by Creator. + new + + + + diff -r 271e901a9423 -r 4cc0d1a608c1 creator/scripts/notepadEx.creatorxml --- a/creator/scripts/notepadEx.creatorxml Fri May 14 16:10:39 2010 +0300 +++ b/creator/scripts/notepadEx.creatorxml Tue Jun 01 14:40:54 2010 +0300 @@ -1,27 +1,27 @@ - - - - - - - This is a Creator example note! - - - - - - - - - - - - - - - - - - + + + + + + + This is a Creator example note! + + + + + + + + + + + + + + + + + + diff -r 271e901a9423 -r 4cc0d1a608c1 creator/src/engine.cpp --- a/creator/src/engine.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/src/engine.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -58,8 +58,6 @@ _LIT(KEDriveError, "Not available"); _LIT(KTempPathDrive, "d"); _LIT(KTempPath, ":\\Creator\\"); -//_LIT(KSavingText, "Saving"); -_LIT(KDeletingText, "Deleting"); const TInt KRegisterDrive = EDriveC; _LIT(KRegisterFileName, "creator_created_items.dat"); _LIT(KResourceFileName, "z:\\Resource\\apps\\datacreator.RSC"); @@ -486,18 +484,17 @@ iNotepad->DeleteAllL(); break; } -/* + case ECmdDeleteIMPSs: { - iIMPS->DeleteAllL(); +// iIMPS->DeleteAllL(); break; } case ECmdDeleteCreatorIMPSs: { - iIMPS->DeleteAllCreatedByCreatorL(); +// iIMPS->DeleteAllCreatedByCreatorL(); break; - } -*/ + } case ECmdDeleteBrowserBookmarks: { iBrowser->DeleteAllBookmarksL(); @@ -652,6 +649,12 @@ } // --------------------------------------------------------------------------- +void CCreatorEngine::SortCommands() + { + TKeyArrayFix iBufKey(_FOFF(TCommand, iCommandId),ECmpTInt); + iCommandArray->Sort(iBufKey); + } +// --------------------------------------------------------------------------- // This callback function is called when cancel button of the progress bar was pressed @@ -714,9 +717,6 @@ // start from the beginning iCurrentEntry = 0; - // we'll retrieve a correct number for this later - iEntriesToBeCreated = 0; - // init the command array __ASSERT_ALWAYS(!iCommandArray, User::Panic(_L("iCommandArray"), 701)); iCommandArray = new(ELeave) CCommandArray(10000); @@ -814,13 +814,7 @@ iTimer.Cancel(); } -// --------------------------------------------------------------------------- -void CCreatorEngine::QueryDialogClosedL( TBool /*aPositiveAction*/, TInt /*aUserData*/ ) - { - - } - -void CCreatorEngine::FileChosenL( TBool aSuccess, const TDesC& aFileName ) +void CCreatorEngine::ScriptChosenL( TBool aSuccess, const TDesC& aFileName ) { if( aSuccess ) { @@ -855,8 +849,6 @@ msgBuf.Format(KErrMsg, parseErr); iEngineWrapper->ShowErrorMessage(msgBuf); ShutDownEnginesL(); - delete iCommandParser; - iCommandParser = NULL; return; } } @@ -882,6 +874,7 @@ // use the command parser module to init the command array from a script file delete iCommandParser; + iCommandParser = NULL; iCommandParser = CCommandParser::NewL(this); TBool ret = EFalse; TRAPD(err, ret = iCommandParser->OpenScriptL( this ) ); @@ -936,6 +929,63 @@ } // --------------------------------------------------------------------------- +void CCreatorEngine::QueryDialogClosedL( TBool aPositiveAction, TInt aUserData ) + { + LOGSTRING("Creator: CCreatorEngine::QueryDialogClosedL"); + + if( aPositiveAction == EFalse ) + { + ShutDownEnginesL(); + return; + } + + switch(aUserData) + { + case ECreatorEngineDeleteAllEntries: + AppendToCommandArrayL( ECmdDeleteContacts, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteContactGroups, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCalendarEntries, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteBrowserBookmarks, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteBrowserBookmarkFolders, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteBrowserSavedPages, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteBrowserSavedPageFolders, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteLogs, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteMessages, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteIAPs, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteIMPSs, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteNotes, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteLandmarks, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorFiles, NULL, 1 ); + + // started exucuting delete commands + ExecuteFirstCommandL( KDeletingText ); + break; + case ECreatorEngineDeleteAllCreatorEntries: + AppendToCommandArrayL( ECmdDeleteCreatorContacts, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorContactGroups, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorCalendarEntries, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorBrowserBookmarks, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorBrowserBookmarkFolders, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorBrowserSavedPages, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorBrowserSavedPageFolders, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorFiles, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorLogs, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorMessages, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorIAPs, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorIMPSs, NULL, 1 ); + AppendToCommandArrayL( ECmdDeleteCreatorLandmarks, NULL, 1 ); + + // started exucuting delete commands + ExecuteFirstCommandL( KDeletingText ); + break; + default: + //some error + ShutDownEnginesL(); + break; + } + } + +// --------------------------------------------------------------------------- void CCreatorEngine::ExecuteOptionsMenuCommandL(TInt aCommand) { @@ -1106,27 +1156,7 @@ { if ( aCommand == ECmdDeleteAllEntries ) { - if ( iEngineWrapper->YesNoQueryDialog( _L("Delete all entries?") ) ) - { - AppendToCommandArrayL( ECmdDeleteContacts, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteContactGroups, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCalendarEntries, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteBrowserBookmarks, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteBrowserBookmarkFolders, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteBrowserSavedPages, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteBrowserSavedPageFolders, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteLogs, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteMessages, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteIAPs, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteIMPSs, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteNotes, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteLandmarks, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorFiles, NULL, 1 ); - - // started exucuting delete commands - ExecuteFirstCommandL( KDeletingText ); - } - else + if ( !iEngineWrapper->YesNoQueryDialog( _L("Delete all entries?"), this, ECreatorEngineDeleteAllEntries) ) { // cancelled, free resources ShutDownEnginesL(); @@ -1134,58 +1164,23 @@ } else if ( aCommand == ECmdDeleteAllCreatorEntries ) { - if ( iEngineWrapper->YesNoQueryDialog( _L("Delete all entries created with Creator?") ) ) - { - AppendToCommandArrayL( ECmdDeleteCreatorContacts, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorContactGroups, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorCalendarEntries, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorBrowserBookmarks, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorBrowserBookmarkFolders, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorBrowserSavedPages, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorBrowserSavedPageFolders, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorFiles, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorLogs, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorMessages, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorIAPs, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorIMPSs, NULL, 1 ); - AppendToCommandArrayL( ECmdDeleteCreatorLandmarks, NULL, 1 ); - - // started exucuting delete commands - ExecuteFirstCommandL( KDeletingText ); - } - else + if ( !iEngineWrapper->YesNoQueryDialog( _L("Delete all entries created with Creator?"), this, ECreatorEngineDeleteAllCreatorEntries ) ) { // cancelled, free resources ShutDownEnginesL(); } } - else if ( iUsedOptionsMenuModule->AskDataFromUserL( aCommand ) ) + else if ( !iUsedOptionsMenuModule->AskDataFromUserL( aCommand ) ) { - // add this command to command array -// AppendToCommandArrayL( aCommand, NULL, 1 ); - - // started exucuting commands -// ExecuteFirstCommandL( KDeletingText ); - } - else - { - // cancelled, free resources + // cancelled or error, free resources ShutDownEnginesL(); } } // ask user data, if query accepted start processing... - else if (iUsedOptionsMenuModule->AskDataFromUserL(aCommand)) + else if (!iUsedOptionsMenuModule->AskDataFromUserL(aCommand)) { - // add this command to command array - //AppendToCommandArrayL(aCommand, NULL, iEntriesToBeCreated); - - // started exucuting commands - //ExecuteFirstCommandL( KSavingText ); - } - else - { - // cancelled, free resources + // cancelled or error, free resources ShutDownEnginesL(); } } @@ -1240,20 +1235,23 @@ } } +// --------------------------------------------------------------------------- +void CCreatorEngine::RandomDataFileChosenL( TBool aSuccess, const TDesC& aFileName ) + { + if( aSuccess ) + { + GetRandomDataFromFileL( aFileName ); + } + } // --------------------------------------------------------------------------- TBool CCreatorEngine::GetRandomDataL() { - TFileName fileName; - CCommandParser* commandParser = CCommandParser::NewLC(this); - TBool ret = commandParser->GetRandomDataFilenameL(fileName); - CleanupStack::PopAndDestroy(commandParser); - if (ret) - { - ret = GetRandomDataFromFileL(fileName); - } - return ret; + delete iCommandParser; + iCommandParser = NULL; + iCommandParser = CCommandParser::NewL( this ); + return iCommandParser->GetRandomDataFilenameL( this ); } // --------------------------------------------------------------------------- diff -r 271e901a9423 -r 4cc0d1a608c1 creator/src/enginewrapper.cpp --- a/creator/src/enginewrapper.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/src/enginewrapper.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -116,6 +116,10 @@ void EngineWrapper::ShowProgressBar(const TDesC& aPrompt, int aMax) { QString text((QChar*)aPrompt.Ptr(), aPrompt.Length()); + if(iProgressDialog){ + delete iProgressDialog; + iProgressDialog = NULL; + } iProgressDialog = Notifications::showProgressBar(text, aMax); connect(iProgressDialog, SIGNAL(cancelled()), this, SLOT(ProgressDialogCancelled())); } @@ -124,7 +128,8 @@ void EngineWrapper::IncrementProgressbarValue() { - iProgressDialog->setProgressValue(iProgressDialog->progressValue() + 1); + if(iProgressDialog) + iProgressDialog->setProgressValue(iProgressDialog->progressValue() + 1); } // --------------------------------------------------------------------------- @@ -132,8 +137,9 @@ void EngineWrapper::CloseProgressbar() { if(iProgressDialog){ + disconnect(iProgressDialog, SIGNAL(cancelled()), this, SLOT(ProgressDialogCancelled())); delete iProgressDialog; - iProgressDialog = 0; + iProgressDialog = NULL; } } @@ -226,7 +232,6 @@ aFileNameArray->MdcaPoint(i).Ptr(), aFileNameArray->MdcaPoint(i).Length())); } - // TODO: HbSelectionDialog handle close & user choice TBool success(EFalse); try{ CreatorSelectionDialog::launch(text, itemList, aIndex, aObserver, aUserData); @@ -241,16 +246,19 @@ // --------------------------------------------------------------------------- -bool EngineWrapper::DirectoryQueryDialog(const TDesC& aPrompt, TFileName& aDirectory) +TBool EngineWrapper::DirectoryQueryDialog(const TDesC& aPrompt, TDes& aDirectory, MUIObserver* aObserver, TInt aUserData) { QString text((QChar*)aPrompt.Ptr(), aPrompt.Length()); - QString directory = QString((QChar*)aDirectory.Ptr(), aDirectory.Length()); - bool ret = Notifications::directoryQueryDialog(text, directory); - if (ret == true) { - aDirectory = TFileName(directory.utf16()); - } - return ret; - + TBool success(EFalse); + try{ + CreatorInputDialog::launch(text, aDirectory, aObserver, aUserData); + success = ETrue; + } + catch (std::exception& e) + { + Notifications::error( QString("exception: ")+e.what() ); + } + return success; } @@ -314,7 +322,6 @@ return ret; } } - // TODO: HbSelectionDialog handle close & user choice TBool success(EFalse); try{ CreatorSelectionDialog::launch(text, itemList, aIndex, aObserver, aUserData); diff -r 271e901a9423 -r 4cc0d1a608c1 creator/src/notifications.cpp --- a/creator/src/notifications.cpp Fri May 14 16:10:39 2010 +0300 +++ b/creator/src/notifications.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -75,6 +75,7 @@ HbProgressDialog *note = new HbProgressDialog(HbProgressDialog::ProgressDialog); note->setText(text); note->setMaximum(max); + note->setAutoClose(false); note->show(); return note; @@ -87,42 +88,6 @@ showMessageBox(type, text, QString("Creator"), timeout); } -// --------------------------------------------------------------------------- - -bool Notifications::directoryQueryDialog(const QString& text, QString& directory) -{ - bool err = false; - HbDialog *popup = new HbDialog(); - popup->setDismissPolicy(HbPopup::TapOutside); - popup->setTimeout(HbPopup::NoTimeout); - - HbLabel *title = new HbLabel(); - HbLineEdit *edit = new HbLineEdit(); - HbAction *actionOk = new HbAction("Ok"); - HbAction *actionCancel = new HbAction("Cancel"); - - title->setPlainText(text); - popup->setHeadingWidget(title); - popup->setContentWidget(edit); - edit->setMaxLength(256); - edit->setText(directory); - edit->setSelection(0, directory.length()); - - popup->setPrimaryAction(actionOk); - popup->setSecondaryAction(actionCancel); - - // Launch popup syncronously - popup->setAttribute(Qt::WA_DeleteOnClose); - // TODO: handle dialog close & user input - popup->open(); - - // continue if ok selected and valid user input exists in line editor - /*if (action && action->text() == "Ok" && edit->text() != "") { - directory = edit->text(); - err = true; - }*/ - return err; -} // --------------------------------------------------------------------------- @@ -155,12 +120,21 @@ CreatorInputDialog::CreatorInputDialog(int* value, MUIObserver* module, int userData) : HbInputDialog(NULL), CreatorDialog(module, userData), - mValue(value) + mIntValue(value), + mStrValue(mDummy)// will not be used { if(!value) throw std::invalid_argument("value cannot be the null!"); } +CreatorInputDialog::CreatorInputDialog(TDes& value, MUIObserver* module, int userData) : + HbInputDialog(NULL), + CreatorDialog(module, userData), + mIntValue(NULL), + mStrValue(value) +{ +} + void CreatorInputDialog::launch(const QString& label, int* value, bool acceptsZero, MUIObserver* observer, int userData) throw( std::exception ) { CreatorInputDialog* dlg = new CreatorInputDialog(value, observer, userData); @@ -184,12 +158,29 @@ dlg->open(dlg, SLOT(DialogClosed(HbAction*))); } +void CreatorInputDialog::launch(const QString& label, TDes& value, MUIObserver* observer, int userData) throw( std::exception ) +{ + CreatorInputDialog* dlg = new CreatorInputDialog(value, observer, userData); + dlg->setPromptText(label); + dlg->lineEdit()->setMaxLength(value.MaxLength()); + dlg->setValue(QString::fromUtf16(value.Ptr(), value.Length())); + dlg->lineEdit()->setSelection(0, dlg->value().toString().length()); + dlg->setInputMode(TextInput); + dlg->setAttribute(Qt::WA_DeleteOnClose); + dlg->open(dlg, SLOT(DialogClosed(HbAction*))); +} + void CreatorInputDialog::DialogClosed(HbAction *action) { TBool PositiveAction(EFalse); if(action && (action->softKeyRole()==QAction::PositiveSoftKey || !action->text().compare("ok", Qt::CaseInsensitive))){ - bool ok = false; - *mValue = value().toInt(&ok); + bool ok = true; + if( inputMode() == IntInput ) + *mIntValue = value().toInt(&ok); + else if( inputMode() == TextInput && mStrValue.MaxLength() >= value().toString().length() ) + mStrValue.Copy(value().toString().utf16()); + else + ok = false; PositiveAction = ok ? ETrue : EFalse; } NotifyObserver(PositiveAction); diff -r 271e901a9423 -r 4cc0d1a608c1 filebrowser/engine/FB.hrh --- a/filebrowser/engine/FB.hrh Fri May 14 16:10:39 2010 +0300 +++ b/filebrowser/engine/FB.hrh Tue Jun 01 14:40:54 2010 +0300 @@ -274,4 +274,15 @@ EFileChecksumsSHA1 }; +enum TListingMode + { + ENormalEntries = 0, + ESearchResults, + EOpenFiles, + EMsgAttachmentsInbox, + EMsgAttachmentsDrafts, + EMsgAttachmentsSentItems, + EMsgAttachmentsOutbox + }; + #endif // FILEBROWSER_HRH diff -r 271e901a9423 -r 4cc0d1a608c1 filebrowser/engine/FBFileUtils.cpp --- a/filebrowser/engine/FBFileUtils.cpp Fri May 14 16:10:39 2010 +0300 +++ b/filebrowser/engine/FBFileUtils.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -204,7 +204,7 @@ // -------------------------------------------------------------------------------------------- -void CFileBrowserFileUtils::StartExecutingCommandsL(const TDesC& /*aLabel*/) +void CFileBrowserFileUtils::StartExecutingCommandsL(const TDesC& aLabel) { if (iCommandArray->Count() >= 2) { @@ -217,6 +217,8 @@ // iProgressInfo->SetFinalValue( CommandArrayCount() ); // iProgressDialog->RunLD(); // iProgressDialog->MakeVisible( ETrue ); + iEngine->FileBrowserUI()->ShowProgressDialog(aLabel, 0, CommandArrayCount()); + isProgressDialog = ETrue; } else if (iCommandArray->Count() >= 1) { @@ -226,6 +228,8 @@ // iWaitDialog->PrepareLC(R_GENERAL_WAIT_NOTE); // iWaitDialog->SetTextL( aLabel ); // iWaitDialog->RunLD(); + iEngine->FileBrowserUI()->ShowWaitDialog(aLabel); + isWaitDialog = ETrue; } else { @@ -251,6 +255,15 @@ __ASSERT_ALWAYS(!IsActive(), User::Panic(_L("FileUtils:IsActive"), 333)); // execute a command after a very short delay (25ms) + if (isWaitDialog) + { + iEngine->FileBrowserUI()->ProcessEvents(); + } + if (isProgressDialog) + { + TInt newValue = iCurrentEntry; + iEngine->FileBrowserUI()->SetProgressValue(newValue); + } iTimer.After(iStatus, 25); SetActive(); } @@ -365,6 +378,16 @@ iFileOps->DeActivateSecureBackUpViaFileOp(); // dismiss any wait/progress dialogs + if (isWaitDialog) + { + iEngine->FileBrowserUI()->CancelWaitDialog(); + isWaitDialog = EFalse; + } + if (isProgressDialog) + { + iEngine->FileBrowserUI()->CancelProgressDialog(); + isProgressDialog = EFalse; + } // if (iWaitDialog) // { // TRAP_IGNORE(iWaitDialog->ProcessFinishedL()); @@ -422,29 +445,29 @@ RefreshViewL(); - } + } else - { - // maintain requests - iCurrentEntry++; - - //LOGSTRING2("Creator: CCreatorEngine::CheckForMoreCommandsL iCurrentEntry=%d", iCurrentEntry); - - ExecuteCommand(); - } + { + // maintain requests + iCurrentEntry++; + + //LOGSTRING2("Creator: CCreatorEngine::CheckForMoreCommandsL iCurrentEntry=%d", iCurrentEntry); + + ExecuteCommand(); + } } // -------------------------------------------------------------------------------------------- // This callback function is called when cancel button of the progress bar was pressed -void CFileBrowserFileUtils::DialogDismissedL(TInt aButtonId) +void CFileBrowserFileUtils::DialogDismissedL(/*TInt aButtonId*/) { // iProgressDialog = NULL; // iProgressInfo = NULL; // iWaitDialog = NULL; // check if cancel button was pressed - if (aButtonId == EAknSoftkeyCancel) - { +// if (aButtonId == EAknSoftkeyCancel) +// { // cancel the active object, command executer Cancel(); @@ -452,8 +475,10 @@ ResetCommandArray(); + isProgressDialog = EFalse; + iEngine->FileBrowserUI()->ShowInformationNote(_L("Cancelled"), _L("")); - } +// } } // -------------------------------------------------------------------------------------------- diff -r 271e901a9423 -r 4cc0d1a608c1 filebrowser/engine/FBFileUtils.h --- a/filebrowser/engine/FBFileUtils.h Fri May 14 16:10:39 2010 +0300 +++ b/filebrowser/engine/FBFileUtils.h Tue Jun 01 14:40:54 2010 +0300 @@ -28,6 +28,7 @@ #include #include #include +#include "FB.hrh" _LIT(KIRAppPath, "z:\\sys\\bin\\irapp.exe"); _LIT(KBTAppPath, "z:\\sys\\bin\\btui.exe"); @@ -181,7 +182,7 @@ -class CFileBrowserFileUtils : public CActive, public MAknServerAppExitObserver, public MMsvSessionObserver, public MProgressDialogCallback +class CFileBrowserFileUtils : public CActive, public MAknServerAppExitObserver, public MMsvSessionObserver//, public MProgressDialogCallback { private: enum TState // active object states @@ -195,17 +196,6 @@ EClipBoardModeCopy }; - enum TListingMode - { - ENormalEntries = 0, - ESearchResults, - EOpenFiles, - EMsgAttachmentsInbox, - EMsgAttachmentsDrafts, - EMsgAttachmentsSentItems, - EMsgAttachmentsOutbox - }; - public: static CFileBrowserFileUtils* NewL(CEngine* aEngine); ~CFileBrowserFileUtils(); @@ -216,7 +206,7 @@ private: // from CActive void RunL(); - TInt RunError(TInt aError); + TInt RunError(TInt aError); void DoCancel(); private: // from MAknServerAppExitObserver @@ -225,8 +215,8 @@ private: // from MMsvSessionObserver void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3); -private: //from MProgressDialogCallback - void DialogDismissedL(TInt aButtonId); +public: //from MProgressDialogCallback + void DialogDismissedL(/*TInt aButtonId*/); public: // command handling void StartExecutingCommandsL(const TDesC& aLabel); @@ -343,6 +333,7 @@ inline CFileEntryList* CurrentSelectionList() { return iCurrentSelectionList; } inline TBool IsDriveListViewActive() { return iCurrentPath==KNullDesC && iListingMode==ENormalEntries; } inline TBool IsNormalModeActive() { return iListingMode==ENormalEntries; } + inline TListingMode ListingMode() { return iListingMode; } inline TFileName CurrentPath() { return iCurrentPath; } inline TSearchAttributes GetSearchAttributes(){ return iSearchAttributes; }; @@ -356,6 +347,8 @@ CEngine* iEngine; CFileBrowserFileOps* iFileOps; // CAknWaitDialog* iWaitDialog; + TBool isWaitDialog; + TBool isProgressDialog; // CAknProgressDialog* iProgressDialog; CEikProgressInfo* iProgressInfo; CCommandArray* iCommandArray; diff -r 271e901a9423 -r 4cc0d1a608c1 filebrowser/engine/engine.h --- a/filebrowser/engine/engine.h Fri May 14 16:10:39 2010 +0300 +++ b/filebrowser/engine/engine.h Tue Jun 01 14:40:54 2010 +0300 @@ -78,10 +78,10 @@ class MFileBrowserUI { public: - /** - * Method from getting current index - * @return current index. - */ +// /** +// * Method from getting current index +// * @return current index. +// */ // virtual TInt QueryCurrentItemIndex() = 0; /** @@ -106,14 +106,26 @@ */ virtual void ShowConfirmationNote(const TDesC& aText, TBool aNoTimeout = EFalse) = 0; -// /** -// * Shows progress bar with text -// * @param aText A text to be shown at top of the progress bar. -// * @param aMinimum A minimum progress bar value. -// * @param aMaximum A maximum progress bar value. -// * @return None. -// */ -// virtual void ShowProgressBar(const TDesC& aText, TInt aMinimum, TInt aMaximum ) = 0; + /** + * Shows progress bar with text + * @param aText A text to be shown at top of the progress bar. + * @param aMinimum A minimum progress bar value. + * @param aMaximum A maximum progress bar value. + * @return None. + */ + virtual void ShowProgressDialog(const TDesC& aDescText, TInt aMinimum, TInt aMaximum ) = 0; + + /** + * Cancel progress dialog + * @return None. + */ + virtual void CancelProgressDialog() = 0; + + /** + * Set progress dialog value + * @param aValue A vaule to be shown at top of the progress dialog. + */ + virtual void SetProgressValue(TInt aValue) = 0; // // /** // * Sets progress bar value diff -r 271e901a9423 -r 4cc0d1a608c1 filebrowser/group/ReleaseNotes_FileBrowser.txt --- a/filebrowser/group/ReleaseNotes_FileBrowser.txt Fri May 14 16:10:39 2010 +0300 +++ b/filebrowser/group/ReleaseNotes_FileBrowser.txt Tue Jun 01 14:40:54 2010 +0300 @@ -1,7 +1,7 @@ =============================================================================== -RELEASE NOTES - FILEBROWSER v5.0.0 -RELEASED 23th April 2010 +RELEASE NOTES - FILEBROWSER v5.0.1 +RELEASED 21st May 2010 SUPPORTS S60 3.0+ @@ -37,9 +37,11 @@ =============================================================================== -What's New in v5.0.0 +What's New in v5.0.1 ==================== -- Orbit UI +- Error fixes +- All files to text file with file sizes +- Usability improvements =============================================================================== @@ -109,6 +111,10 @@ Version History: ================ +Version 5.0.0 - 23th April 2010 +----------------------------- +- Orbit UI + Version 4.5.2 - 10th December 2009 ----------------------------- - Fix: UI layout problems fixed diff -r 271e901a9423 -r 4cc0d1a608c1 filebrowser/ui/inc/enginewrapper.h --- a/filebrowser/ui/inc/enginewrapper.h Fri May 14 16:10:39 2010 +0300 +++ b/filebrowser/ui/inc/enginewrapper.h Tue Jun 01 14:40:54 2010 +0300 @@ -81,9 +81,15 @@ void ShowInformationNote(const TDesC &aDescText, const TDesC &aDescTitle); void ShowErrorNote(const TDesC& aDescText, TBool aNoTimeout = EFalse); void ShowConfirmationNote(const TDesC& aDescText, TBool aNoTimeout = EFalse); + + void ShowProgressDialog(const TDesC& aDescText, TInt aMinimum, TInt aMaximum); + void CancelProgressDialog(); + void SetProgressValue(TInt aValue); + void ShowWaitDialog(const TDesC& aText); void CancelWaitDialog(); void ProcessEvents(); + TBool ShowConfirmationQuery(const TDesC& aDescText); public: @@ -100,6 +106,7 @@ void startExecutingCommands(const QString &aCommandsExecutionMessage); void refreshView(); + inline TListingMode listingMode() { return mEngine->FileUtils()->ListingMode(); } // TBool IsCurrentDriveReadOnly(); // TBool IsCurrentItemDirectory(); void moveUpOneLevel(); @@ -168,6 +175,7 @@ void showFileCheckSums(const QModelIndex &aIndex, TFileBrowserCmdFileChecksums checksumType); private slots: + void progressDialogCancelled(); void waitDialogCancelled(); private: @@ -176,6 +184,7 @@ // List of found files results for Ui QStringList mFilesFound; FileBrowserSettings mSettings; + HbProgressDialog *mProgressDialog; HbProgressDialog *mWaitDialog; }; diff -r 271e901a9423 -r 4cc0d1a608c1 filebrowser/ui/inc/filebrowserview.h --- a/filebrowser/ui/inc/filebrowserview.h Fri May 14 16:10:39 2010 +0300 +++ b/filebrowser/ui/inc/filebrowserview.h Tue Jun 01 14:40:54 2010 +0300 @@ -25,7 +25,7 @@ #include #include -#include +#include // Forward declarations class QFileInfo; @@ -39,6 +39,8 @@ class HbToolBar; class HbLabel; class HbDialog; +class HbAbstractViewItem; +class HbMenu; class FileBrowserMainWindow; class EditorView; @@ -55,25 +57,24 @@ explicit FileBrowserView(FileBrowserMainWindow &mainWindow); virtual ~FileBrowserView(); void init(EngineWrapper *engineWrapper); - QModelIndex currentItemIndex(); - QModelIndexList getSelectedItemsOrCurrentItem(); public slots: void refreshList(); private: void fileOverwriteDialog(); - void openListDialog(const QStringList& items, const QString &titleText, QObject* receiver, const char* member); + void openListDialog(const QStringList &items, const QString &titleText, QObject *receiver, const char *member); + + void openPropertyDialog(const QStringList &propertyList, const QString &title); - void openPropertyDialog(const QStringList& propertyList, const QString& title); + QModelIndex currentItemIndex(); + void storeSelectedItemsOrCurrentItem(); - void createToolBar(); // Menu related methods void createMenu(); void createFileMenu(); void createEditMenu(); void createViewMenu(); - void createDiskAdminMenu(); void createToolsMenu(); void createSelectionMenuItem(); @@ -81,6 +82,13 @@ void createAboutMenuItem(); void createExitMenuItem(); + void createContextMenu(); + void createFileContextMenu(); + void createEditContextMenu(); + void createViewContextMenu(); + void createDiskAdminContextMenu(); + void createToolBar(); + // void refreshList(); void populateFolderContent(); @@ -143,10 +151,10 @@ void doDiskAdminSetDrivePassword(HbAction *); void diskAdminUnlockDrive(); - void doDiskAdminUnlockDrive(HbAction *action); + void doDiskAdminUnlockDrive(HbAction *); void diskAdminClearDrivePassword(); - void doDiskAdminClearDrivePassword(HbAction *action); + void doDiskAdminClearDrivePassword(HbAction *); void diskAdminEraseDrivePassword(); void doDiskAdminEraseDrivePassword(HbAction *); @@ -163,10 +171,10 @@ void doDiskAdminScanDrive(HbAction *); void diskAdminSetDriveName(); - void doDiskAdminSetDriveName(HbAction *action); + void doDiskAdminSetDriveName(HbAction *); void diskAdminSetDriveVolumeLabel(); - void doDiskAdminSetDriveVolumeLabel(HbAction*); + void doDiskAdminSetDriveVolumeLabel(HbAction *); void diskAdminEjectDrive(); void diskAdminDismountDrive(); @@ -193,14 +201,14 @@ void toolsDisableExtendedErrors(); void toolsDumpMsgStoreWalk(); void toolsEditDataTypes(); - void toolsEnableExtendedErrors (); + void toolsEnableExtendedErrors(); void toolsErrorSimulateLeave(); - void doToolsErrorSimulateLeave(HbAction *action); + void doToolsErrorSimulateLeave(HbAction *); void toolsErrorSimulatePanic(); - void doToolsErrorSimulatePanicCode(HbAction *action); - void doToolsErrorSimulatePanic(HbAction *action); + void doToolsErrorSimulatePanicCode(HbAction *); + void doToolsErrorSimulatePanic(HbAction *); void toolsErrorSimulateException(); void doToolsErrorSimulateException(HbAction *); @@ -233,11 +241,13 @@ private slots: void itemHighlighted(const QModelIndex &index); //void itemSelected(const QModelIndex &index); - void updateMenu(); - void selectionChanged(const QItemSelection &/*selected*/, const QItemSelection &/*deselected*/); + void updateOptionMenu(); + void updateContextMenu(); + void selectionChanged(const QItemSelection &, const QItemSelection &); void activated(const QModelIndex& index); void activateSelectionMode(); void deActivateSelectionMode(); + void onLongPressed(HbAbstractViewItem *, QPointF); void fileOpen(HbAction *); void fileOverwrite(HbAction *); @@ -252,15 +262,14 @@ HbLabel *mNaviPane; QGraphicsLinearLayout *mMainLayout; - QString mDirectory; - // selected path - QString mSelectedFilePath; - // initial path - //QDir mInitDirPath; // file info contains all needed information of selected file from file model - QModelIndexList mClipboardIndices; + QModelIndexList mClipboardIndexes; + QModelIndexList mSelectionIndexes; + FileBrowserModel *mFileBrowserModel; - MenuAction mFileViewMenuActions; + OptionMenuActions mOptionMenuActions; + ContextMenuActions mContextMenuActions; + HbMenu *mContextMenu; HbAction *mToolbarBackAction; // flags @@ -270,6 +279,7 @@ bool mRemoveFileAfterCopied; bool mClipBoardInUse; bool mFolderContentChanged; + QModelIndex mCurrentIndex; // temporarily storage QString mOldPassword; diff -r 271e901a9423 -r 4cc0d1a608c1 filebrowser/ui/inc/menuaction.h --- a/filebrowser/ui/inc/menuaction.h Fri May 14 16:10:39 2010 +0300 +++ b/filebrowser/ui/inc/menuaction.h Tue Jun 01 14:40:54 2010 +0300 @@ -21,11 +21,10 @@ class HbMenu; class HbAction; -class MenuAction +class OptionMenuActions { public: - MenuAction() : - //NoAction = 0, + OptionMenuActions() : mFileMenu(0), mFileBackMoveUp(0), mFileOpenDrive(0), @@ -114,10 +113,9 @@ } - ~MenuAction() { } + ~OptionMenuActions() { } public: //File menu operations - //NoAction = 0, HbMenu *mFileMenu; HbAction *mFileBackMoveUp; HbAction *mFileOpenDrive; @@ -219,41 +217,40 @@ }; -class FileViewDriveContextMenu +class ContextMenuActions { public: - FileViewDriveContextMenu() : -// //NoAction = 0, -// mFileMenu(0), -// mFileBackMoveUp(0), -// mFileOpenDrive(0), -// mFileOpenDirectory(0), -// mFileSearch(0), -// mFileNewMenu(0), -// mFileNewFile(0), -// mFileNewDirectory(0), -// mFileDelete(0), -// mFileRename(0), -// mFileTouch(0), -// mFileProperties(0), -// mFileChecksumsMenu(0), -// mFileChecksumsMD5(0), -// mFileChecksumsMD2(0), -// mFileChecksumsSHA1(0), -// mFileSetAttributes(0), -// //Edit - -// mEditMenu(0), + ContextMenuActions() : + mFileMenu(0), + mFileBackMoveUp(0), + mFileOpenDrive(0), + mFileOpenDirectory(0), + mFileSearch(0), + mFileNewMenu(0), + mFileNewFile(0), + mFileNewDirectory(0), + mFileDelete(0), + mFileRename(0), + mFileTouch(0), + mFileProperties(0), + mFileChecksumsMenu(0), + mFileChecksumsMD5(0), + mFileChecksumsMD2(0), + mFileChecksumsSHA1(0), + mFileSetAttributes(0), + //Edit - + mEditMenu(0), // mEditSnapShotToE(0), -// mEditCut(0), -// mEditCopy(0), -// mEditPaste(0), -// mEditCopyToFolder(0), -// mEditMoveToFolder(0), + mEditCut(0), + mEditCopy(0), + mEditPaste(0), + mEditCopyToFolder(0), + mEditMoveToFolder(0), // mEditSelect(0), // mEditUnselect(0), // mEditSelectAll(0), // mEditUnselectAll(0), -// // View - + // View - // mViewMenu(0), // mViewFilterEntries(0), // mViewRefresh(0), @@ -308,36 +305,35 @@ } - ~FileViewDriveContextMenu() { } + ~ContextMenuActions() { } public: //File menu operations - //NoAction = 0, -// HbMenu *mFileMenu; -// HbAction *mFileBackMoveUp; -// HbAction *mFileOpenDrive; -// HbAction *mFileOpenDirectory; -// HbAction *mFileSearch; -// HbMenu *mFileNewMenu; -// HbAction *mFileNewFile; -// HbAction *mFileNewDirectory; -// HbAction *mFileDelete; -// HbAction *mFileRename; -// HbAction *mFileTouch; -// HbAction *mFileProperties; -// HbMenu *mFileChecksumsMenu; -// HbAction *mFileChecksumsMD5; -// HbAction *mFileChecksumsMD2; -// HbAction *mFileChecksumsSHA1; -// HbAction *mFileSetAttributes; -// -// //Edit - -// HbMenu *mEditMenu; + HbMenu *mFileMenu; + HbAction *mFileBackMoveUp; + HbAction *mFileOpenDrive; + HbAction *mFileOpenDirectory; + HbAction *mFileSearch; + HbMenu *mFileNewMenu; + HbAction *mFileNewFile; + HbAction *mFileNewDirectory; + HbAction *mFileDelete; + HbAction *mFileRename; + HbAction *mFileTouch; + HbAction *mFileProperties; + HbMenu *mFileChecksumsMenu; + HbAction *mFileChecksumsMD5; + HbAction *mFileChecksumsMD2; + HbAction *mFileChecksumsSHA1; + HbAction *mFileSetAttributes; + + //Edit - + HbMenu *mEditMenu; // HbAction *mEditSnapShotToE; -// HbAction *mEditCut; -// HbAction *mEditCopy; -// HbAction *mEditPaste; -// HbAction *mEditCopyToFolder; -// HbAction *mEditMoveToFolder; + HbAction *mEditCut; + HbAction *mEditCopy; + HbAction *mEditPaste; + HbAction *mEditCopyToFolder; + HbAction *mEditMoveToFolder; // HbAction *mEditSelect; // HbAction *mEditUnselect; // HbAction *mEditSelectAll; @@ -407,168 +403,5 @@ // HbAction *mToolsShowOpenFilesHere; }; -class FileViewFileContextMenu -{ -public: - FileViewFileContextMenu() : - //NoAction = 0, - mFileMenu(0), - mFileBackMoveUp(0), -// mFileOpenDrive(0), -//?? mFileOpenDirectory(0), -// mFileSearch(0), - mFileNewMenu(0), - mFileNewFile(0), - mFileNewDirectory(0), - mFileDelete(0), - mFileRename(0), - mFileTouch(0), - mFileProperties(0), - mFileChecksumsMenu(0), - mFileChecksumsMD5(0), - mFileChecksumsMD2(0), - mFileChecksumsSHA1(0), - mFileSetAttributes(0), - //Edit - - mEditMenu(0), -//?? mEditSnapShotToE(0), - mEditCut(0), - mEditCopy(0), - mEditPaste(0), - mEditCopyToFolder(0), - mEditMoveToFolder(0) -// mEditSelect(0), -// mEditUnselect(0), -// mEditSelectAll(0), -// mEditUnselectAll(0), -// // View - -// mViewMenu(0), -// mViewFilterEntries(0), -// mViewRefresh(0), -// // Tools - -// mToolsMenu(0), -// mToolsAllAppsToTextFile(0), -// mToolsAllFilesToTextFile(0), -// mToolsAvkonIconCacheMenu(0), -// mToolsAvkonIconCacheEnable(0), -// mToolsAvkonIconCacheDisable(0), -// mToolsDisableExtendedErrors(0), -// mToolsDumpMsgStoreWalk(0), -// mToolsEditDataTypes(0), -// mToolsEnableExtendedErrors(0), -// mToolsErrorSimulateMenu(0), -// mToolsErrorSimulateLeave(0), -// mToolsErrorSimulatePanic(0), -// mToolsErrorSimulateException(0), -// mToolsMessageAttachmentsMenu(0), -// mToolsMessageInbox(0), -// mToolsMessageDrafts(0), -// mToolsMessageSentItems(0), -// mToolsMessageOutbox(0), -// // mLocalConnectivityMenu(0), -// // mToolsLocalConnectivityActivateInfrared(0), -// // mToolsLocalConnectivityLaunchBTUI(0), -// // mToolsLocalConnectivityLaunchUSBUI(0), -// mToolsMemoryInfo(0), -// mToolsSecureBackupMenu(0), -// mToolsSecureBackStart(0), -// mToolsSecureBackRestore(0), -// mToolsSecureBackStop(0), -// mToolsSetDebugMask(0), -// mToolsShowOpenFilesHere(0), -// mSelection(0), -// mSetting(0), -// mAbout(0), -// mExit(0) - { - - } - - ~FileViewFileContextMenu() { } -public: - //File menu operations - //NoAction = 0, - HbMenu *mFileMenu; - HbAction *mFileBackMoveUp; -// HbAction *mFileOpenDrive; -//?? HbAction *mFileOpenDirectory; -// HbAction *mFileSearch; - HbMenu *mFileNewMenu; - HbAction *mFileNewFile; - HbAction *mFileNewDirectory; - HbAction *mFileDelete; - HbAction *mFileRename; - HbAction *mFileTouch; - HbAction *mFileProperties; - HbMenu *mFileChecksumsMenu; - HbAction *mFileChecksumsMD5; - HbAction *mFileChecksumsMD2; - HbAction *mFileChecksumsSHA1; - HbAction *mFileSetAttributes; - - //Edit - - HbMenu *mEditMenu; -//?? HbAction *mEditSnapShotToE; - HbAction *mEditCut; - HbAction *mEditCopy; - HbAction *mEditPaste; - HbAction *mEditCopyToFolder; - HbAction *mEditMoveToFolder; -// HbAction *mEditSelect; -// HbAction *mEditUnselect; -// HbAction *mEditSelectAll; -// HbAction *mEditUnselectAll; -// -// // View - -// HbMenu *mViewMenu; -// HbAction *mViewFilterEntries; -// HbAction *mViewRefresh; -// -// // Tools - -// HbMenu *mToolsMenu; -// HbAction *mToolsAllAppsToTextFile; -// HbAction *mToolsAllFilesToTextFile; -// -// HbMenu *mToolsAvkonIconCacheMenu; -// HbAction *mToolsAvkonIconCacheEnable; -// HbAction *mToolsAvkonIconCacheDisable; -// -// HbAction *mToolsDisableExtendedErrors; -// HbAction *mToolsDumpMsgStoreWalk; -// HbAction *mToolsEditDataTypes; -// -// HbAction *mToolsEnableExtendedErrors; -// -// HbMenu *mToolsErrorSimulateMenu; -// HbAction *mToolsErrorSimulateLeave; -// HbAction *mToolsErrorSimulatePanic; -// HbAction *mToolsErrorSimulateException; -// -// HbMenu *mToolsMessageAttachmentsMenu; -// HbAction *mToolsMessageInbox; -// HbAction *mToolsMessageDrafts; -// HbAction *mToolsMessageSentItems; -// HbAction *mToolsMessageOutbox; -// -// HbMenu *mToolsLocalConnectivityMenu; -// HbAction *mToolsLocalConnectivityActivateInfrared; -// HbAction *mToolsLocalConnectivityLaunchBTUI; -// HbAction *mToolsLocalConnectivityLaunchUSBUI; -// -// HbAction *mToolsMemoryInfo; -// -// HbMenu *mToolsSecureBackupMenu; -// HbAction *mToolsSecureBackStart; -// HbAction *mToolsSecureBackRestore; -// HbAction *mToolsSecureBackStop; -// -// HbAction *mToolsSetDebugMask; -// HbAction *mToolsShowOpenFilesHere; -// -// HbAction *mSelection; -// HbAction *mSetting; -// HbAction *mAbout; -// HbAction *mExit; -}; #endif // MENUACTION_H diff -r 271e901a9423 -r 4cc0d1a608c1 filebrowser/ui/src/enginewrapper.cpp --- a/filebrowser/ui/src/enginewrapper.cpp Fri May 14 16:10:39 2010 +0300 +++ b/filebrowser/ui/src/enginewrapper.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -36,6 +36,7 @@ : mEngine(0), mFilesFound(), mSettings(0), + mProgressDialog(0), mWaitDialog(0) { } @@ -48,6 +49,9 @@ TRAP_IGNORE(mEngine->DeActivateEngineL()); delete mEngine; } + if (mProgressDialog) + delete mProgressDialog; + if (mWaitDialog) delete mWaitDialog; } @@ -730,6 +734,38 @@ Notifications::showConfirmationNote(qText, aNoTimeout); } +void EngineWrapper::ShowProgressDialog(const TDesC& aDescText, TInt aMinimum, TInt aMaximum ) +{ + const QString qText = QString::fromUtf16(aDescText.Ptr(), aDescText.Length()); + if (!mProgressDialog) { + mProgressDialog = new HbProgressDialog(HbProgressDialog::WaitDialog); + QObject::connect(mProgressDialog, SIGNAL(cancelled ()), this, SLOT(progressDialogCancelled())); + } + + mProgressDialog->setText(qText); + mProgressDialog->setMinimum(aMinimum); + mProgressDialog->setMaximum(aMaximum); + mEngine->FileUtils()->SetAllowProcessing(true); + mProgressDialog->show(); +} + +void EngineWrapper::CancelProgressDialog() +{ + if (mProgressDialog) + mProgressDialog->cancel(); +} + +void EngineWrapper::SetProgressValue(TInt aValue) +{ + if (mProgressDialog) + mProgressDialog->setProgressValue(aValue); +} + +void EngineWrapper::progressDialogCancelled() +{ + mEngine->FileUtils()->DialogDismissedL(); +} + void EngineWrapper::ShowWaitDialog(const TDesC& aDescText) { const QString qText = QString::fromUtf16(aDescText.Ptr(), aDescText.Length()); diff -r 271e901a9423 -r 4cc0d1a608c1 filebrowser/ui/src/filebrowserview.cpp --- a/filebrowser/ui/src/filebrowserview.cpp Fri May 14 16:10:39 2010 +0300 +++ b/filebrowser/ui/src/filebrowserview.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -62,16 +62,17 @@ mToolBar(0), mNaviPane(0), mMainLayout(0), - mDirectory(), - mSelectedFilePath(), mFileBrowserModel(0), - mFileViewMenuActions(), + mOptionMenuActions(), + mContextMenuActions(), + mContextMenu(0), mToolbarBackAction(0), mItemHighlighted(false), mLocationChanged(false), mRemoveFileAfterCopied(false), - mClipBoardInUse(false), +// mClipBoardInUse(false), mFolderContentChanged(false), + mCurrentIndex(), mOldPassword(), mPanicCategory(), mAbsoluteFilePath(), @@ -84,6 +85,7 @@ setTitle("File Browser"); createMenu(); + createContextMenu(); createToolBar(); } @@ -108,6 +110,8 @@ mListView->setScrollingStyle(HbScrollArea::PanWithFollowOn); connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(activated(QModelIndex))); + connect(mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), + this, SLOT(onLongPressed(HbAbstractViewItem*, QPointF))); mNaviPane = new HbLabel(this); mNaviPane->setPlainText(QString(" ")); // TODO get from settings or default @@ -130,12 +134,457 @@ // if (mEngineWrapper) { // delete mEngineWrapper; // } + if (mContextMenu) { + mContextMenu->deleteLater(); + } + delete mFileBrowserModel; delete mListView; delete mToolBar; } /** + Initial setup for options menu. + Dynamic menu update during the runtime is performed by updateOptionMenu() which + to menu's aboutToShow() signal. + */ +void FileBrowserView::createMenu() +{ + createFileMenu(); + createEditMenu(); + createViewMenu(); + createToolsMenu(); + + createSelectionMenuItem(); + createSettingsMenuItem(); + createAboutMenuItem(); + createExitMenuItem(); + + // menu dynamic update + connect(menu(), SIGNAL(aboutToShow()), this, SLOT(updateOptionMenu())); +} + +/** + Initial setup for File submenu + */ +void FileBrowserView::createFileMenu() +{ + mOptionMenuActions.mFileMenu = menu()->addMenu("File"); + + mOptionMenuActions.mFileBackMoveUp = mOptionMenuActions.mFileMenu->addAction("Back/Move up (<-)", this, SLOT(fileBackMoveUp())); + mOptionMenuActions.mFileOpenDrive = mOptionMenuActions.mFileMenu->addAction("Open drive (->)", this, SLOT(fileOpenDrive())); + mOptionMenuActions.mFileOpenDirectory = mOptionMenuActions.mFileMenu->addAction("Open directory (->)", this, SLOT(fileOpenDirectory())); + mOptionMenuActions.mFileSearch = mOptionMenuActions.mFileMenu->addAction("Search...", this, SLOT(fileSearch())); + //mOptionMenuActions.mFileSearch->setVisible(false); + + mOptionMenuActions.mFileNewMenu = mOptionMenuActions.mFileMenu->addMenu("New"); + mOptionMenuActions.mFileNewFile = mOptionMenuActions.mFileNewMenu->addAction("File", this, SLOT(fileNewFile())); + mOptionMenuActions.mFileNewDirectory = mOptionMenuActions.mFileNewMenu->addAction("Directory", this, SLOT(fileNewDirectory())); + + mOptionMenuActions.mFileDelete = mOptionMenuActions.mFileMenu->addAction("Delete", this, SLOT(fileDelete())); + mOptionMenuActions.mFileRename = mOptionMenuActions.mFileMenu->addAction("Rename", this, SLOT(fileRename())); + mOptionMenuActions.mFileTouch = mOptionMenuActions.mFileMenu->addAction("Touch", this, SLOT(fileTouch())); + mOptionMenuActions.mFileProperties = mOptionMenuActions.mFileMenu->addAction("Properties", this, SLOT(fileProperties())); + +// mOptionMenuActions.mFileChecksumsMenu = mOptionMenuActions.mFileMenu->addMenu("Checksums"); +// mOptionMenuActions.mFileChecksumsMD5 = mOptionMenuActions.mFileChecksumsMenu->addAction("MD5", this, SLOT(fileChecksumsMD5())); +// mOptionMenuActions.mFileChecksumsMD2 = mOptionMenuActions.mFileChecksumsMenu->addAction("MD2", this, SLOT(fileChecksumsMD2())); +// mOptionMenuActions.mFileChecksumsSHA1 = mOptionMenuActions.mFileChecksumsMenu->addAction("SHA-1", this, SLOT(fileChecksumsSHA1())); + + mOptionMenuActions.mFileSetAttributes = mOptionMenuActions.mFileMenu->addAction("Set attributes...", this, SLOT(fileSetAttributes())); + mOptionMenuActions.mFileSetAttributes->setVisible(false); +} + +/** + Initial setup for Edit submenu + */ +void FileBrowserView::createEditMenu() +{ + mOptionMenuActions.mEditMenu = menu()->addMenu("Edit"); + + mOptionMenuActions.mEditSnapShotToE = mOptionMenuActions.mEditMenu->addAction("Snap shot to E:", this, SLOT(editSnapShotToE())); + mOptionMenuActions.mEditSnapShotToE->setVisible(false); + mOptionMenuActions.mEditCut = mOptionMenuActions.mEditMenu->addAction("Cut", this, SLOT(editCut())); + mOptionMenuActions.mEditCopy = mOptionMenuActions.mEditMenu->addAction("Copy", this, SLOT(editCopy())); + mOptionMenuActions.mEditPaste = mOptionMenuActions.mEditMenu->addAction("Paste", this, SLOT(editPaste())); + + mOptionMenuActions.mEditCopyToFolder = mOptionMenuActions.mEditMenu->addAction("Copy to folder...", this, SLOT(editCopyToFolder())); + mOptionMenuActions.mEditMoveToFolder = mOptionMenuActions.mEditMenu->addAction("Move to folder...", this, SLOT(editMoveToFolder())); + + mOptionMenuActions.mEditSelect = mOptionMenuActions.mEditMenu->addAction("Select", this, SLOT(editSelect())); + mOptionMenuActions.mEditUnselect = mOptionMenuActions.mEditMenu->addAction("Unselect", this, SLOT(editUnselect())); + mOptionMenuActions.mEditSelectAll = mOptionMenuActions.mEditMenu->addAction("Select all", this, SLOT(editSelectAll())); + mOptionMenuActions.mEditUnselectAll = mOptionMenuActions.mEditMenu->addAction("Unselect all", this, SLOT(editUnselectAll())); +} + +/** + Initial setup for View submenu + */ +void FileBrowserView::createViewMenu() +{ + mOptionMenuActions.mViewMenu = menu()->addMenu("View"); + mOptionMenuActions.mViewMenu->menuAction()->setVisible(false); + + mOptionMenuActions.mViewFilterEntries = mOptionMenuActions.mViewMenu->addAction("Filter entries", this, SLOT(viewFilterEntries())); + mOptionMenuActions.mViewRefresh = mOptionMenuActions.mViewMenu->addAction("Refresh", this, SLOT(viewRefresh())); +} + +/** + Initial setup for Tools submenu + */ +void FileBrowserView::createToolsMenu() +{ + mOptionMenuActions.mToolsMenu = menu()->addMenu("Tools"); + + mOptionMenuActions.mToolsAllAppsToTextFile = mOptionMenuActions.mToolsMenu->addAction("All apps to a text file", this, SLOT(toolsAllAppsToTextFile())); + mOptionMenuActions.mToolsAllAppsToTextFile->setVisible(false); + mOptionMenuActions.mToolsAllFilesToTextFile = mOptionMenuActions.mToolsMenu->addAction("All files to a text file", this, SLOT(toolsAllFilesToTextFile())); + //mOptionMenuActions.mToolsAllFilesToTextFile->setVisible(false); + + mOptionMenuActions.mToolsAvkonIconCacheMenu = mOptionMenuActions.mToolsMenu->addMenu("Avkon icon cache"); + mOptionMenuActions.mToolsAvkonIconCacheMenu->menuAction()->setVisible(false); + mOptionMenuActions.mToolsAvkonIconCacheEnable = mOptionMenuActions.mToolsAvkonIconCacheMenu->addAction("Enable", this, SLOT(toolsAvkonIconCacheEnable())); + mOptionMenuActions.mToolsAvkonIconCacheDisable = mOptionMenuActions.mToolsAvkonIconCacheMenu->addAction("Clear and disable", this, SLOT(toolsAvkonIconCacheDisable())); + + mOptionMenuActions.mToolsDisableExtendedErrors = mOptionMenuActions.mToolsMenu->addAction("Disable extended errors", this, SLOT(toolsDisableExtendedErrors())); + mOptionMenuActions.mToolsDumpMsgStoreWalk = mOptionMenuActions.mToolsMenu->addAction("Dump msg. store walk", this, SLOT(toolsDumpMsgStoreWalk())); + mOptionMenuActions.mToolsDumpMsgStoreWalk->setVisible(false); + mOptionMenuActions.mToolsEditDataTypes = mOptionMenuActions.mToolsMenu->addAction("Edit data types", this, SLOT(toolsEditDataTypes())); + mOptionMenuActions.mToolsEditDataTypes->setVisible(false); + mOptionMenuActions.mToolsEnableExtendedErrors = mOptionMenuActions.mToolsMenu->addAction("Enable extended errors", this, SLOT(toolsEnableExtendedErrors())); + + mOptionMenuActions.mToolsErrorSimulateMenu = mOptionMenuActions.mToolsMenu->addMenu("Error simulate"); + mOptionMenuActions.mToolsErrorSimulateLeave = mOptionMenuActions.mToolsErrorSimulateMenu->addAction("Leave", this, SLOT(toolsErrorSimulateLeave())); + mOptionMenuActions.mToolsErrorSimulatePanic = mOptionMenuActions.mToolsErrorSimulateMenu->addAction("Panic", this, SLOT(toolsErrorSimulatePanic())); + mOptionMenuActions.mToolsErrorSimulatePanic->setVisible(false); + mOptionMenuActions.mToolsErrorSimulateException = mOptionMenuActions.mToolsErrorSimulateMenu->addAction("Exception", this, SLOT(toolsErrorSimulateException())); + +// mOptionMenuActions.mLocalConnectivityMenu = mOptionMenuActions.mToolsMenu->addMenu("Local connectivity"); +// mOptionMenuActions.mToolsLocalConnectivityActivateInfrared = mOptionMenuActions.mLocalConnectivityMenu->addAction("Activate infrared", this, SLOT(toolsLocalConnectivityActivateInfrared())); +// mOptionMenuActions.mToolsLocalConnectivityLaunchBTUI = mOptionMenuActions.mLocalConnectivityMenu->addAction("Launch BT UI", this, SLOT(toolsLocalConnectivityLaunchBTUI())); +// mOptionMenuActions.mToolsLocalConnectivityLaunchUSBUI = mOptionMenuActions.mLocalConnectivityMenu->addAction("Launch USB UI", this, SLOT(toolsLocalConnectivityLaunchUSBUI())); + + mOptionMenuActions.mToolsMessageAttachmentsMenu = mOptionMenuActions.mToolsMenu->addMenu("Message attachments"); + mOptionMenuActions.mToolsMessageAttachmentsMenu->menuAction()->setVisible(false); + mOptionMenuActions.mToolsMessageInbox = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Inbox", this, SLOT(toolsMessageInbox())); + mOptionMenuActions.mToolsMessageDrafts = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Drafts", this, SLOT(toolsMessageDrafts())); + mOptionMenuActions.mToolsMessageSentItems = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Sent items", this, SLOT(toolsMessageSentItems())); + mOptionMenuActions.mToolsMessageOutbox = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Outbox", this, SLOT(toolsMessageOutbox())); + + mOptionMenuActions.mToolsMemoryInfo = mOptionMenuActions.mToolsMenu->addAction("Memory info", this, SLOT(toolsMemoryInfo())); + mOptionMenuActions.mToolsMemoryInfo->setVisible(false); + + mOptionMenuActions.mToolsSecureBackupMenu = mOptionMenuActions.mToolsMenu->addMenu("Secure backup"); + mOptionMenuActions.mToolsSecureBackupMenu->menuAction()->setVisible(false); + mOptionMenuActions.mToolsSecureBackStart = mOptionMenuActions.mToolsSecureBackupMenu->addAction("Start backup", this, SLOT(toolsSecureBackStart())); + mOptionMenuActions.mToolsSecureBackRestore = mOptionMenuActions.mToolsSecureBackupMenu->addAction("Start restore", this, SLOT(toolsSecureBackRestore())); + mOptionMenuActions.mToolsSecureBackStop = mOptionMenuActions.mToolsSecureBackupMenu->addAction("Stop", this, SLOT(toolsSecureBackStop())); + + mOptionMenuActions.mToolsSetDebugMask = mOptionMenuActions.mToolsMenu->addAction("Set debug mask", this, SLOT(toolsSetDebugMaskQuestion())); + mOptionMenuActions.mToolsShowOpenFilesHere = mOptionMenuActions.mToolsMenu->addAction("Show open files here", this, SLOT(toolsShowOpenFilesHere())); + mOptionMenuActions.mToolsShowOpenFilesHere->setVisible(false); +} + +/** + Creates Selection mode menu item in option menu + */ +void FileBrowserView::createSelectionMenuItem() +{ + if (!mOptionMenuActions.mSelection) { + mOptionMenuActions.mSelection = menu()->addAction("Selection mode"); + mOptionMenuActions.mSelection->setToolTip("Selection mode"); + mOptionMenuActions.mSelection->setCheckable(true); + connect(mOptionMenuActions.mSelection, SIGNAL(triggered()), this, SLOT(selectionModeChanged())); + } +} + +/** + Creates Setting menu item in option menu + */ +void FileBrowserView::createSettingsMenuItem() +{ + mOptionMenuActions.mSetting = menu()->addAction("Settings..."); + connect(mOptionMenuActions.mSetting, SIGNAL(triggered()), this, SIGNAL(aboutToShowSettingsView())); +} + + +/** + Creates About menu item in option menu + */ +void FileBrowserView::createAboutMenuItem() +{ + // about note + mOptionMenuActions.mAbout = menu()->addAction("About"); + connect(mOptionMenuActions.mAbout, SIGNAL(triggered()), this, SLOT(about())); +} + +/** + Creates Exit menu item in option menu + */ +void FileBrowserView::createExitMenuItem() +{ + // application exit + mOptionMenuActions.mExit = menu()->addAction("Exit"); + connect(mOptionMenuActions.mExit, SIGNAL(triggered()), qApp, SLOT(quit())); +} + +/** + update menu: disk admin available only in device root view. edit available only in folder view + when file or folder content exist in current folder, or clipboard has copied item. + file and view menus updated every time regarding the folder content. + tools, settings, about, exit always available. + If there's remove and add operations at same time, always remove first + to keep to the correct menu items order. + */ +void FileBrowserView::updateOptionMenu() +{ + bool isFileItemListEmpty = mFileBrowserModel->rowCount() == 0; + bool isDriveListActive = mEngineWrapper->isDriveListViewActive(); + bool isNormalModeActive = true; //iModel->FileUtils()->IsNormalModeActive(); + bool currentDriveReadOnly = mEngineWrapper->isCurrentDriveReadOnly(); //iModel->FileUtils()->IsCurrentDriveReadOnly(); + bool currentItemDirectory = mEngineWrapper->getFileEntry(currentItemIndex()).isDir(); + bool listBoxSelections = mListView->selectionModel()->selection().count() == 0; + bool isSelectionMode = mOptionMenuActions.mSelection && mOptionMenuActions.mSelection->isChecked(); + bool emptyClipBoard = !mEngineWrapper->isClipBoardListInUse(); + bool showSnapShot = false; //iModel->FileUtils()->DriveSnapShotPossible(); + + bool showEditMenu(true); + if (isDriveListActive) { + if (!showSnapShot || isFileItemListEmpty && emptyClipBoard) + showEditMenu = false; + else + showEditMenu = true; + } else { + if (isFileItemListEmpty && emptyClipBoard) + showEditMenu = false; + else + showEditMenu = true; + } + + mOptionMenuActions.mEditMenu->menuAction()->setVisible(showEditMenu); + // TODO mContextMenuActions.mDiskAdminMenu->menuAction()->setVisible(isDriveListActive); + + mOptionMenuActions.mFileBackMoveUp->setVisible( !isDriveListActive); + + //aMenuPane->SetItemDimmed(EFileBrowserCmdFileOpen, isFileItemListEmpty || isDriveListActive || currentItemDirectory); + mOptionMenuActions.mFileOpenDrive->setVisible( !(isFileItemListEmpty || !isDriveListActive)); + mOptionMenuActions.mFileOpenDirectory->setVisible( !(isFileItemListEmpty || isDriveListActive || !currentItemDirectory)); + + //aMenuPane->SetItemDimmed(EFileBrowserCmdFileView, isFileItemListEmpty || listBoxSelections || currentItemDirectory || isDriveListActive); + //aMenuPane->SetItemDimmed(EFileBrowserCmd FileEdit, isFileItemListEmpty || listBoxSelections || currentItemDirectory || isDriveListActive); + //aMenuPane->SetItemDimmed(EFileBrowserCmdFileSendTo, isFileItemListEmpty || driveListActive || currentItemDirectory); + + mOptionMenuActions.mFileNewMenu->menuAction()->setVisible(!(isDriveListActive || currentDriveReadOnly)); + mOptionMenuActions.mFileDelete->setVisible(!isFileItemListEmpty && !isDriveListActive && !currentDriveReadOnly && isSelectionMode); + mOptionMenuActions.mFileRename->setVisible(!isFileItemListEmpty && !isDriveListActive && !currentDriveReadOnly && !listBoxSelections && isSelectionMode); + mOptionMenuActions.mFileTouch->setVisible(!(isFileItemListEmpty || isDriveListActive || currentDriveReadOnly)); + mOptionMenuActions.mFileProperties->setVisible(!(isFileItemListEmpty || listBoxSelections)); + // TODO mOptionMenuActions.mFileChecksumsMenu->setVisible(!(isFileItemListEmpty || listBoxSelections || currentItemDirectory || isDriveListActive)); + // TODO mOptionMenuActions.mFileSetAttributes->setVisible(!(isFileItemListEmpty || isDriveListActive || currentDriveReadOnly)); + // TODO mOptionMenuActions.mFileCompress->setVisible(!(currentDriveReadOnly || isFileItemListEmpty || listBoxSelections || currentItemDirectory || isDriveListActive)); + // TODO mOptionMenuActions.mFileDecompress->setVisible(!(currentDriveReadOnly || isFileItemListEmpty || listBoxSelections || currentItemDirectory || isDriveListActive)); + +// bool currentSelected = true; //iContainer->ListBox()->View()->ItemIsSelected(iContainer->ListBox()->View()->CurrentItemIndex()); + bool allSelected = mListView->selectionModel()->selection().count() == mFileBrowserModel->rowCount(); + bool noneSelected = mListView->selectionModel()->selection().count() != 0; + + //mOptionMenuActions.mEditSnapShotToE->setVisible(isDriveListActive); // TODO + mOptionMenuActions.mEditCut->setVisible(!isDriveListActive && !currentDriveReadOnly && !isFileItemListEmpty && !isSelectionMode); + mOptionMenuActions.mEditCopy->setVisible(!isDriveListActive && !isFileItemListEmpty); + mOptionMenuActions.mEditPaste->setVisible(!(isDriveListActive || emptyClipBoard || currentDriveReadOnly)); + mOptionMenuActions.mEditCopyToFolder->setVisible(!(isDriveListActive || isFileItemListEmpty)); + mOptionMenuActions.mEditMoveToFolder->setVisible(!(isDriveListActive || currentDriveReadOnly || isFileItemListEmpty)); + + mOptionMenuActions.mEditSelect->setVisible(false/*!isDriveListActive && !currentSelected && !isFileItemListEmpty*/); + mOptionMenuActions.mEditUnselect->setVisible(false/*!isDriveListActive && currentSelected && !isFileItemListEmpty*/); + mOptionMenuActions.mEditSelectAll->setVisible(!isDriveListActive && !allSelected && !isFileItemListEmpty); + mOptionMenuActions.mEditUnselectAll->setVisible(!isDriveListActive && !noneSelected && !isFileItemListEmpty); + + // TODO mOptionMenuActions.mViewSort->setVisible(!(!isNormalModeActive || isDriveListActive || isFileItemListEmpty)); + // TODO mOptionMenuActions.mViewOrder->setVisible(!(!isNormalModeActive || isDriveListActive || isFileItemListEmpty)); + mOptionMenuActions.mViewRefresh->setVisible(isNormalModeActive); + mOptionMenuActions.mViewFilterEntries->setVisible(!isFileItemListEmpty); + + // TODO R_FILEBROWSER_VIEW_SORT_SUBMENU + // aMenuPane->SetItemButtonState(iModel->FileUtils()->SortMode(), EEikMenuItemSymbolOn); + + // TODO R_FILEBROWSER_VIEW_ORDER_SUBMENU + // aMenuPane->SetItemButtonState(iModel->FileUtils()->OrderMode(), EEikMenuItemSymbolOn); + + // aResourceId == R_FILEBROWSER_TOOLS_SUBMENU + bool noExtendedErrorsAllowed = mEngineWrapper->ErrRdFileExists(); + mOptionMenuActions.mToolsDisableExtendedErrors->setVisible(noExtendedErrorsAllowed); + mOptionMenuActions.mToolsEnableExtendedErrors->setVisible(!noExtendedErrorsAllowed); + +// bool infraRedAllowed = mEngineWrapper->FileExists(KIRAppPath); +// bool bluetoothAllowed = mEngineWrapper->FileExists(KBTAppPath); +// bool usbAllowed = mEngineWrapper->FileExists(KUSBAppPath); +// +// bool noLocalCon = !infraRedAllowed && !bluetoothAllowed && !usbAllowed; +// mOptionMenuActions.mToolsLocalConnectivityMenu->menuAction()->setVisible(!noLocalCon); +// +// mOptionMenuActions.mToolsLocalConnectivityActivateInfrared->setVisible(infraRedAllowed); +// mOptionMenuActions.mToolsLocalConnectivityLaunchBTUI->setVisible(bluetoothAllowed); +// mOptionMenuActions.mToolsLocalConnectivityLaunchUSBUI->setVisible(usbAllowed); +} + +void FileBrowserView::createContextMenu() +{ + mContextMenu = new HbMenu(); + connect(mContextMenu, SIGNAL(aboutToShow()), this, SLOT(updateContextMenu())); + + createFileContextMenu(); + createEditContextMenu(); + createViewContextMenu(); + createDiskAdminContextMenu(); +} + + +void FileBrowserView::createFileContextMenu() +{ + mContextMenuActions.mFileMenu = mContextMenu->addMenu("File"); + + mContextMenuActions.mFileBackMoveUp = mContextMenuActions.mFileMenu->addAction("Back/Move up (<-)", this, SLOT(fileBackMoveUp())); + mContextMenuActions.mFileOpenDrive = mContextMenuActions.mFileMenu->addAction("Open drive (->)", this, SLOT(fileOpenDrive())); + mContextMenuActions.mFileOpenDirectory = mContextMenuActions.mFileMenu->addAction("Open directory (->)", this, SLOT(fileOpenDirectory())); +// mContextMenuActions.mFileSearch = mContextMenuActions.mFileMenu->addAction("Search...", this, SLOT(fileSearch())); + //mContextMenuActions.mFileSearch->setVisible(false); + +// mContextMenuActions.mFileNewMenu = mContextMenuActions.mFileMenu->addMenu("New"); +// mContextMenuActions.mFileNewFile = mContextMenuActions.mFileNewMenu->addAction("File", this, SLOT(fileNewFile())); +// mContextMenuActions.mFileNewDirectory = mContextMenuActions.mFileNewMenu->addAction("Directory", this, SLOT(fileNewDirectory())); + + mContextMenuActions.mFileDelete = mContextMenuActions.mFileMenu->addAction("Delete", this, SLOT(fileDelete())); + mContextMenuActions.mFileRename = mContextMenuActions.mFileMenu->addAction("Rename", this, SLOT(fileRename())); + mContextMenuActions.mFileTouch = mContextMenuActions.mFileMenu->addAction("Touch", this, SLOT(fileTouch())); + mContextMenuActions.mFileProperties = mContextMenuActions.mFileMenu->addAction("Properties", this, SLOT(fileProperties())); + + mContextMenuActions.mFileChecksumsMenu = mContextMenuActions.mFileMenu->addMenu("Checksums"); + mContextMenuActions.mFileChecksumsMD5 = mContextMenuActions.mFileChecksumsMenu->addAction("MD5", this, SLOT(fileChecksumsMD5())); + mContextMenuActions.mFileChecksumsMD2 = mContextMenuActions.mFileChecksumsMenu->addAction("MD2", this, SLOT(fileChecksumsMD2())); + mContextMenuActions.mFileChecksumsSHA1 = mContextMenuActions.mFileChecksumsMenu->addAction("SHA-1", this, SLOT(fileChecksumsSHA1())); + +// mContextMenuActions.mFileSetAttributes = mContextMenuActions.mFileMenu->addAction("Set attributes...", this, SLOT(fileSetAttributes())); +// mContextMenuActions.mFileSetAttributes->setVisible(false); +} + +void FileBrowserView::createEditContextMenu() +{ + mContextMenuActions.mEditMenu = mContextMenu->addMenu("Edit"); + + //mContextMenuActions.mEditSnapShotToE = mContextMenuActions.mEditMenu->addAction("Snap shot to E:", this, SLOT(editSnapShotToE())); +// mContextMenuActions.mEditSnapShotToE->setVisible(false); + mContextMenuActions.mEditCut = mContextMenuActions.mEditMenu->addAction("Cut", this, SLOT(editCut())); + mContextMenuActions.mEditCopy = mContextMenuActions.mEditMenu->addAction("Copy", this, SLOT(editCopy())); + mContextMenuActions.mEditPaste = mContextMenuActions.mEditMenu->addAction("Paste", this, SLOT(editPaste())); + + mContextMenuActions.mEditCopyToFolder = mContextMenuActions.mEditMenu->addAction("Copy to folder...", this, SLOT(editCopyToFolder())); + mContextMenuActions.mEditMoveToFolder = mContextMenuActions.mEditMenu->addAction("Move to folder...", this, SLOT(editMoveToFolder())); +} + +void FileBrowserView::createViewContextMenu() +{ + +} + +/** + Initial setup for Disk Admin submenu + */ +void FileBrowserView::createDiskAdminContextMenu() +{ + mContextMenuActions.mDiskAdminMenu = mContextMenu->addMenu("Disk admin"); + //mContextMenuActions.mDiskAdminMenu->menuAction()->setVisible(false); + + mContextMenuActions.mDiskAdminSetDrivePassword = mContextMenuActions.mDiskAdminMenu->addAction("Set drive password", this, SLOT(diskAdminSetDrivePassword())); + mContextMenuActions.mDiskAdminUnlockDrive = mContextMenuActions.mDiskAdminMenu->addAction("Unlock drive", this, SLOT(diskAdminUnlockDrive())); + mContextMenuActions.mDiskAdminClearDrivePassword = mContextMenuActions.mDiskAdminMenu->addAction("Clear drive password", this, SLOT(diskAdminClearDrivePassword())); + mContextMenuActions.mDiskAdminEraseDrivePassword = mContextMenuActions.mDiskAdminMenu->addAction("Erase drive password", this, SLOT(diskAdminEraseDrivePassword())); + + mContextMenuActions.mDiskAdminFormatDrive = mContextMenuActions.mDiskAdminMenu->addAction("Format drive", this, SLOT(diskAdminFormatDrive())); + mContextMenuActions.mDiskAdminFormatDrive->setVisible(false); + mContextMenuActions.mDiskAdminQuickFormatDrive = mContextMenuActions.mDiskAdminMenu->addAction("Quick format drive", this, SLOT(diskAdminQuickFormatDrive())); + mContextMenuActions.mDiskAdminQuickFormatDrive->setVisible(false); + + mContextMenuActions.mDiskAdminCheckDisk = mContextMenuActions.mDiskAdminMenu->addAction("Check disk", this, SLOT(diskAdminCheckDisk())); + mContextMenuActions.mDiskAdminScanDrive = mContextMenuActions.mDiskAdminMenu->addAction("Scan drive", this, SLOT(diskAdminScanDrive())); + mContextMenuActions.mDiskAdminSetDriveName = mContextMenuActions.mDiskAdminMenu->addAction("Set drive name", this, SLOT(diskAdminSetDriveName())); + mContextMenuActions.mDiskAdminSetDriveVolumeLabel = mContextMenuActions.mDiskAdminMenu->addAction("Set drive volume label", this, SLOT(diskAdminSetDriveVolumeLabel())); + mContextMenuActions.mDiskAdminEjectDrive = mContextMenuActions.mDiskAdminMenu->addAction("Eject drive", this, SLOT(diskAdminEjectDrive())); + mContextMenuActions.mDiskAdminDismountDrive = mContextMenuActions.mDiskAdminMenu->addAction("Dismount drive", this, SLOT(diskAdminDismountDrive())); + mContextMenuActions.mDiskAdminEraseMBR = mContextMenuActions.mDiskAdminMenu->addAction("Erase MBR", this, SLOT(diskAdminEraseMBR())); + mContextMenuActions.mDiskAdminPartitionDrive = mContextMenuActions.mDiskAdminMenu->addAction("Partition drive", this, SLOT(diskAdminPartitionDrive())); +} + +void FileBrowserView::updateContextMenu() +{ + bool isFileItemListEmpty = mFileBrowserModel->rowCount() == 0; + bool isDriveListActive = mEngineWrapper->isDriveListViewActive(); +// bool isNormalModeActive = true; //iModel->FileUtils()->IsNormalModeActive(); + bool currentDriveReadOnly = mEngineWrapper->isCurrentDriveReadOnly(); + bool currentItemDirectory = mEngineWrapper->getFileEntry(mCurrentIndex /*currentItemIndex()*/).isDir(); + bool listBoxSelections = mListView->selectionModel()->selection().count() == 0; + bool isSelectionMode = mOptionMenuActions.mSelection && mOptionMenuActions.mSelection->isChecked(); + bool emptyClipBoard = !mEngineWrapper->isClipBoardListInUse(); +// bool showSnapShot = false; //iModel->FileUtils()->DriveSnapShotPossible(); + +// bool showEditMenu(true); +// if (isDriveListActive) { +// if (!showSnapShot || isFileItemListEmpty && emptyClipBoard) +// showEditMenu = false; +// else +// showEditMenu = true; +// } else { +// if (isFileItemListEmpty && emptyClipBoard) +// showEditMenu = false; +// else +// showEditMenu = true; +// } + + // File submenu + mContextMenuActions.mFileBackMoveUp->setVisible( !isDriveListActive); + mContextMenuActions.mFileOpenDrive->setVisible( !isFileItemListEmpty && isDriveListActive); + mContextMenuActions.mFileOpenDirectory->setVisible( !isFileItemListEmpty && !isDriveListActive && currentItemDirectory); + +// mContextMenuActions.mFileNewMenu->menuAction()->setVisible(!(isDriveListActive || currentDriveReadOnly)); + mContextMenuActions.mFileDelete->setVisible(!isFileItemListEmpty && !isDriveListActive && !currentDriveReadOnly); + mContextMenuActions.mFileRename->setVisible(!isFileItemListEmpty && !isDriveListActive && !currentDriveReadOnly && !listBoxSelections); + mContextMenuActions.mFileTouch->setVisible(!isFileItemListEmpty && !isDriveListActive && !currentDriveReadOnly); + mContextMenuActions.mFileProperties->setVisible(!isFileItemListEmpty && !listBoxSelections && !isSelectionMode); + + mContextMenuActions.mFileChecksumsMenu->menuAction()->setVisible(!(isFileItemListEmpty || isSelectionMode /*|| listBoxSelections*/ || currentItemDirectory || isDriveListActive)); + // Edit submenu + mContextMenuActions.mEditMenu->menuAction()->setVisible(!isDriveListActive); + mContextMenuActions.mEditCut->setVisible(!(isDriveListActive || currentDriveReadOnly || isFileItemListEmpty)); + mContextMenuActions.mEditCopy->setVisible(!(isDriveListActive || isFileItemListEmpty)); + mContextMenuActions.mEditPaste->setVisible(!isDriveListActive && !emptyClipBoard && !currentDriveReadOnly); + mContextMenuActions.mEditCopyToFolder->setVisible(!(isDriveListActive || isFileItemListEmpty)); + mContextMenuActions.mEditMoveToFolder->setVisible(!(isDriveListActive || currentDriveReadOnly || isFileItemListEmpty)); + //DiskAdmin submenu + mContextMenuActions.mDiskAdminMenu->menuAction()->setVisible(isDriveListActive); +} + +// --------------------------------------------------------------------------- + +void FileBrowserView::onLongPressed(HbAbstractViewItem *listViewItem, QPointF coords) +{ + //Q_UNUSED(listViewItem); + +// QItemSelectionModel *selectionIndexes = mListView->selectionModel(); + + // by default use selected items +// if (selectionIndexes && selectionIndexes->hasSelection()) { +// mSelectionIndexes = mListView->selectionModel()->selectedIndexes(); +// } else { + mCurrentIndex = listViewItem->modelIndex(); +// mSelectionIndexes.clear(); +// mSelectionIndexes.append(mModelIndex); +// } + mContextMenu->setPreferredPos(coords); + mContextMenu->show(); +} + + +/** Create a file browser tool bar */ void FileBrowserView::createToolBar() @@ -148,335 +597,39 @@ connect(mToolbarBackAction, SIGNAL(triggered()), this, SLOT(fileBackMoveUp())); mToolBar->addAction(mToolbarBackAction); - if (mFileViewMenuActions.mSelection) { - mToolBar->addAction(mFileViewMenuActions.mSelection); + if (mOptionMenuActions.mSelection) { + mToolBar->addAction(mOptionMenuActions.mSelection); } setToolBar(mToolBar); } /** - Initial setup for options menu. - Dynamic menu update during the runtime is performed by updateMenu() which - to menu's aboutToShow() signal. - */ -void FileBrowserView::createMenu() -{ - createFileMenu(); - createEditMenu(); - createViewMenu(); - createDiskAdminMenu(); - createToolsMenu(); - - createSelectionMenuItem(); - createSettingsMenuItem(); - createAboutMenuItem(); - createExitMenuItem(); - - // menu dynamic update - connect(menu(), SIGNAL(aboutToShow()), this, SLOT(updateMenu())); -} - -/** - Initial setup for File submenu - */ -void FileBrowserView::createFileMenu() -{ - mFileViewMenuActions.mFileMenu = menu()->addMenu("File"); - - mFileViewMenuActions.mFileBackMoveUp = mFileViewMenuActions.mFileMenu->addAction("Back/Move up (<-)", this, SLOT(fileBackMoveUp())); - mFileViewMenuActions.mFileOpenDrive = mFileViewMenuActions.mFileMenu->addAction("Open drive (->)", this, SLOT(fileOpenDrive())); - mFileViewMenuActions.mFileOpenDirectory = mFileViewMenuActions.mFileMenu->addAction("Open directory (->)", this, SLOT(fileOpenDirectory())); - mFileViewMenuActions.mFileSearch = mFileViewMenuActions.mFileMenu->addAction("Search...", this, SLOT(fileSearch())); - //mFileViewMenuActions.mFileSearch->setVisible(false); - - mFileViewMenuActions.mFileNewMenu = mFileViewMenuActions.mFileMenu->addMenu("New"); - mFileViewMenuActions.mFileNewFile = mFileViewMenuActions.mFileNewMenu->addAction("File", this, SLOT(fileNewFile())); - mFileViewMenuActions.mFileNewDirectory = mFileViewMenuActions.mFileNewMenu->addAction("Directory", this, SLOT(fileNewDirectory())); - - mFileViewMenuActions.mFileDelete = mFileViewMenuActions.mFileMenu->addAction("Delete", this, SLOT(fileDelete())); - mFileViewMenuActions.mFileRename = mFileViewMenuActions.mFileMenu->addAction("Rename", this, SLOT(fileRename())); - mFileViewMenuActions.mFileTouch = mFileViewMenuActions.mFileMenu->addAction("Touch", this, SLOT(fileTouch())); - mFileViewMenuActions.mFileProperties = mFileViewMenuActions.mFileMenu->addAction("Properties", this, SLOT(fileProperties())); - - mFileViewMenuActions.mFileChecksumsMenu = mFileViewMenuActions.mFileMenu->addMenu("Checksums"); - mFileViewMenuActions.mFileChecksumsMD5 = mFileViewMenuActions.mFileChecksumsMenu->addAction("MD5", this, SLOT(fileChecksumsMD5())); - mFileViewMenuActions.mFileChecksumsMD2 = mFileViewMenuActions.mFileChecksumsMenu->addAction("MD2", this, SLOT(fileChecksumsMD2())); - mFileViewMenuActions.mFileChecksumsSHA1 = mFileViewMenuActions.mFileChecksumsMenu->addAction("SHA-1", this, SLOT(fileChecksumsSHA1())); - - mFileViewMenuActions.mFileSetAttributes = mFileViewMenuActions.mFileMenu->addAction("Set attributes...", this, SLOT(fileSetAttributes())); - mFileViewMenuActions.mFileSetAttributes->setVisible(false); -} - -/** - Initial setup for Edit submenu - */ -void FileBrowserView::createEditMenu() -{ - mFileViewMenuActions.mEditMenu = menu()->addMenu("Edit"); - - mFileViewMenuActions.mEditSnapShotToE = mFileViewMenuActions.mEditMenu->addAction("Snap shot to E:", this, SLOT(editSnapShotToE())); - mFileViewMenuActions.mEditSnapShotToE->setVisible(false); - mFileViewMenuActions.mEditCut = mFileViewMenuActions.mEditMenu->addAction("Cut", this, SLOT(editCut())); - mFileViewMenuActions.mEditCopy = mFileViewMenuActions.mEditMenu->addAction("Copy", this, SLOT(editCopy())); - mFileViewMenuActions.mEditPaste = mFileViewMenuActions.mEditMenu->addAction("Paste", this, SLOT(editPaste())); - - mFileViewMenuActions.mEditCopyToFolder = mFileViewMenuActions.mEditMenu->addAction("Copy to folder...", this, SLOT(editCopyToFolder())); - mFileViewMenuActions.mEditMoveToFolder = mFileViewMenuActions.mEditMenu->addAction("Move to folder...", this, SLOT(editMoveToFolder())); - - mFileViewMenuActions.mEditSelect = mFileViewMenuActions.mEditMenu->addAction("Select", this, SLOT(editSelect())); - mFileViewMenuActions.mEditUnselect = mFileViewMenuActions.mEditMenu->addAction("Unselect", this, SLOT(editUnselect())); - mFileViewMenuActions.mEditSelectAll = mFileViewMenuActions.mEditMenu->addAction("Select all", this, SLOT(editSelectAll())); - mFileViewMenuActions.mEditUnselectAll = mFileViewMenuActions.mEditMenu->addAction("Unselect all", this, SLOT(editUnselectAll())); -} - -/** - Initial setup for View submenu - */ -void FileBrowserView::createViewMenu() -{ - mFileViewMenuActions.mViewMenu = menu()->addMenu("View"); - mFileViewMenuActions.mViewMenu->menuAction()->setVisible(false); - - mFileViewMenuActions.mViewFilterEntries = mFileViewMenuActions.mViewMenu->addAction("Filter entries", this, SLOT(viewFilterEntries())); - mFileViewMenuActions.mViewRefresh = mFileViewMenuActions.mViewMenu->addAction("Refresh", this, SLOT(viewRefresh())); -} - -/** - Initial setup for Disk Admin submenu - */ -void FileBrowserView::createDiskAdminMenu() -{ - mFileViewMenuActions.mDiskAdminMenu = menu()->addMenu("Disk admin"); - mFileViewMenuActions.mDiskAdminMenu->menuAction()->setVisible(false); - - mFileViewMenuActions.mDiskAdminSetDrivePassword = mFileViewMenuActions.mDiskAdminMenu->addAction("Set drive password", this, SLOT(diskAdminSetDrivePassword())); - mFileViewMenuActions.mDiskAdminUnlockDrive = mFileViewMenuActions.mDiskAdminMenu->addAction("Unlock drive", this, SLOT(diskAdminUnlockDrive())); - mFileViewMenuActions.mDiskAdminClearDrivePassword = mFileViewMenuActions.mDiskAdminMenu->addAction("Clear drive password", this, SLOT(diskAdminClearDrivePassword())); - mFileViewMenuActions.mDiskAdminEraseDrivePassword = mFileViewMenuActions.mDiskAdminMenu->addAction("Erase drive password", this, SLOT(diskAdminEraseDrivePassword())); - - mFileViewMenuActions.mDiskAdminFormatDrive = mFileViewMenuActions.mDiskAdminMenu->addAction("Format drive", this, SLOT(diskAdminFormatDrive())); - mFileViewMenuActions.mDiskAdminFormatDrive->setVisible(false); - mFileViewMenuActions.mDiskAdminQuickFormatDrive = mFileViewMenuActions.mDiskAdminMenu->addAction("Quick format drive", this, SLOT(diskAdminQuickFormatDrive())); - mFileViewMenuActions.mDiskAdminQuickFormatDrive->setVisible(false); - - mFileViewMenuActions.mDiskAdminCheckDisk = mFileViewMenuActions.mDiskAdminMenu->addAction("Check disk", this, SLOT(diskAdminCheckDisk())); - mFileViewMenuActions.mDiskAdminScanDrive = mFileViewMenuActions.mDiskAdminMenu->addAction("Scan drive", this, SLOT(diskAdminScanDrive())); - mFileViewMenuActions.mDiskAdminSetDriveName = mFileViewMenuActions.mDiskAdminMenu->addAction("Set drive name", this, SLOT(diskAdminSetDriveName())); - mFileViewMenuActions.mDiskAdminSetDriveVolumeLabel = mFileViewMenuActions.mDiskAdminMenu->addAction("Set drive volume label", this, SLOT(diskAdminSetDriveVolumeLabel())); - mFileViewMenuActions.mDiskAdminEjectDrive = mFileViewMenuActions.mDiskAdminMenu->addAction("Eject drive", this, SLOT(diskAdminEjectDrive())); - mFileViewMenuActions.mDiskAdminDismountDrive = mFileViewMenuActions.mDiskAdminMenu->addAction("Dismount drive", this, SLOT(diskAdminDismountDrive())); - mFileViewMenuActions.mDiskAdminEraseMBR = mFileViewMenuActions.mDiskAdminMenu->addAction("Erase MBR", this, SLOT(diskAdminEraseMBR())); - mFileViewMenuActions.mDiskAdminPartitionDrive = mFileViewMenuActions.mDiskAdminMenu->addAction("Partition drive", this, SLOT(diskAdminPartitionDrive())); -} - -/** - Initial setup for Tools submenu - */ -void FileBrowserView::createToolsMenu() -{ - mFileViewMenuActions.mToolsMenu = menu()->addMenu("Tools"); - - mFileViewMenuActions.mToolsAllAppsToTextFile = mFileViewMenuActions.mToolsMenu->addAction("All apps to a text file", this, SLOT(toolsAllAppsToTextFile())); - mFileViewMenuActions.mToolsAllAppsToTextFile->setVisible(false); - mFileViewMenuActions.mToolsAllFilesToTextFile = mFileViewMenuActions.mToolsMenu->addAction("All files to a text file", this, SLOT(toolsAllFilesToTextFile())); - //mFileViewMenuActions.mToolsAllFilesToTextFile->setVisible(false); - - mFileViewMenuActions.mToolsAvkonIconCacheMenu = mFileViewMenuActions.mToolsMenu->addMenu("Avkon icon cache"); - mFileViewMenuActions.mToolsAvkonIconCacheMenu->menuAction()->setVisible(false); - mFileViewMenuActions.mToolsAvkonIconCacheEnable = mFileViewMenuActions.mToolsAvkonIconCacheMenu->addAction("Enable", this, SLOT(toolsAvkonIconCacheEnable())); - mFileViewMenuActions.mToolsAvkonIconCacheDisable = mFileViewMenuActions.mToolsAvkonIconCacheMenu->addAction("Clear and disable", this, SLOT(toolsAvkonIconCacheDisable())); - - mFileViewMenuActions.mToolsDisableExtendedErrors = mFileViewMenuActions.mToolsMenu->addAction("Disable extended errors", this, SLOT(toolsDisableExtendedErrors())); - mFileViewMenuActions.mToolsDumpMsgStoreWalk = mFileViewMenuActions.mToolsMenu->addAction("Dump msg. store walk", this, SLOT(toolsDumpMsgStoreWalk())); - mFileViewMenuActions.mToolsDumpMsgStoreWalk->setVisible(false); - mFileViewMenuActions.mToolsEditDataTypes = mFileViewMenuActions.mToolsMenu->addAction("Edit data types", this, SLOT(toolsEditDataTypes())); - mFileViewMenuActions.mToolsEditDataTypes->setVisible(false); - mFileViewMenuActions.mToolsEnableExtendedErrors = mFileViewMenuActions.mToolsMenu->addAction("Enable extended errors", this, SLOT(toolsEnableExtendedErrors())); - - mFileViewMenuActions.mToolsErrorSimulateMenu = mFileViewMenuActions.mToolsMenu->addMenu("Error simulate"); - mFileViewMenuActions.mToolsErrorSimulateLeave = mFileViewMenuActions.mToolsErrorSimulateMenu->addAction("Leave", this, SLOT(toolsErrorSimulateLeave())); - mFileViewMenuActions.mToolsErrorSimulatePanic = mFileViewMenuActions.mToolsErrorSimulateMenu->addAction("Panic", this, SLOT(toolsErrorSimulatePanic())); - mFileViewMenuActions.mToolsErrorSimulatePanic->setVisible(false); - mFileViewMenuActions.mToolsErrorSimulateException = mFileViewMenuActions.mToolsErrorSimulateMenu->addAction("Exception", this, SLOT(toolsErrorSimulateException())); - -// mFileViewMenuActions.mLocalConnectivityMenu = mFileViewMenuActions.mToolsMenu->addMenu("Local connectivity"); -// mFileViewMenuActions.mToolsLocalConnectivityActivateInfrared = mFileViewMenuActions.mLocalConnectivityMenu->addAction("Activate infrared", this, SLOT(toolsLocalConnectivityActivateInfrared())); -// mFileViewMenuActions.mToolsLocalConnectivityLaunchBTUI = mFileViewMenuActions.mLocalConnectivityMenu->addAction("Launch BT UI", this, SLOT(toolsLocalConnectivityLaunchBTUI())); -// mFileViewMenuActions.mToolsLocalConnectivityLaunchUSBUI = mFileViewMenuActions.mLocalConnectivityMenu->addAction("Launch USB UI", this, SLOT(toolsLocalConnectivityLaunchUSBUI())); - - mFileViewMenuActions.mToolsMessageAttachmentsMenu = mFileViewMenuActions.mToolsMenu->addMenu("Message attachments"); - mFileViewMenuActions.mToolsMessageAttachmentsMenu->menuAction()->setVisible(false); - mFileViewMenuActions.mToolsMessageInbox = mFileViewMenuActions.mToolsMessageAttachmentsMenu->addAction("Inbox", this, SLOT(toolsMessageInbox())); - mFileViewMenuActions.mToolsMessageDrafts = mFileViewMenuActions.mToolsMessageAttachmentsMenu->addAction("Drafts", this, SLOT(toolsMessageDrafts())); - mFileViewMenuActions.mToolsMessageSentItems = mFileViewMenuActions.mToolsMessageAttachmentsMenu->addAction("Sent items", this, SLOT(toolsMessageSentItems())); - mFileViewMenuActions.mToolsMessageOutbox = mFileViewMenuActions.mToolsMessageAttachmentsMenu->addAction("Outbox", this, SLOT(toolsMessageOutbox())); - - mFileViewMenuActions.mToolsMemoryInfo = mFileViewMenuActions.mToolsMenu->addAction("Memory info", this, SLOT(toolsMemoryInfo())); - mFileViewMenuActions.mToolsMemoryInfo->setVisible(false); - - mFileViewMenuActions.mToolsSecureBackupMenu = mFileViewMenuActions.mToolsMenu->addMenu("Secure backup"); - mFileViewMenuActions.mToolsSecureBackupMenu->menuAction()->setVisible(false); - mFileViewMenuActions.mToolsSecureBackStart = mFileViewMenuActions.mToolsSecureBackupMenu->addAction("Start backup", this, SLOT(toolsSecureBackStart())); - mFileViewMenuActions.mToolsSecureBackRestore = mFileViewMenuActions.mToolsSecureBackupMenu->addAction("Start restore", this, SLOT(toolsSecureBackRestore())); - mFileViewMenuActions.mToolsSecureBackStop = mFileViewMenuActions.mToolsSecureBackupMenu->addAction("Stop", this, SLOT(toolsSecureBackStop())); - - mFileViewMenuActions.mToolsSetDebugMask = mFileViewMenuActions.mToolsMenu->addAction("Set debug mask", this, SLOT(toolsSetDebugMaskQuestion())); - mFileViewMenuActions.mToolsShowOpenFilesHere = mFileViewMenuActions.mToolsMenu->addAction("Show open files here", this, SLOT(toolsShowOpenFilesHere())); - mFileViewMenuActions.mToolsShowOpenFilesHere->setVisible(false); -} - -/** - Creates Selection mode menu item in option menu - */ -void FileBrowserView::createSelectionMenuItem() -{ - if (!mFileViewMenuActions.mSelection) { - mFileViewMenuActions.mSelection = menu()->addAction("Selection mode"); - mFileViewMenuActions.mSelection->setToolTip("Selection mode"); - mFileViewMenuActions.mSelection->setCheckable(true); - connect(mFileViewMenuActions.mSelection, SIGNAL(triggered()), this, SLOT(selectionModeChanged())); - } -} - -/** - Creates Setting menu item in option menu - */ -void FileBrowserView::createSettingsMenuItem() -{ - mFileViewMenuActions.mSetting = menu()->addAction("Settings..."); - connect(mFileViewMenuActions.mSetting, SIGNAL(triggered()), this, SIGNAL(aboutToShowSettingsView())); -} - - -/** - Creates About menu item in option menu - */ -void FileBrowserView::createAboutMenuItem() -{ - // about note - mFileViewMenuActions.mAbout = menu()->addAction("About"); - connect(mFileViewMenuActions.mAbout, SIGNAL(triggered()), this, SLOT(about())); -} - -/** - Creates Exit menu item in option menu - */ -void FileBrowserView::createExitMenuItem() -{ - // application exit - mFileViewMenuActions.mExit = menu()->addAction("Exit"); - connect(mFileViewMenuActions.mExit, SIGNAL(triggered()), qApp, SLOT(quit())); -} - -/** - update menu: disk admin available only in device root view. edit available only in folder view - when file or folder content exist in current folder, or clipboard has copied item. - file and view menus updated every time regarding the folder content. - tools, settings, about, exit always available. - If there's remove and add operations at same time, always remove first - to keep to the correct menu items order. - */ -void FileBrowserView::updateMenu() -{ - bool emptyListBox = mFileBrowserModel->rowCount() == 0; //iContainer->ListBoxNumberOfVisibleItems() == 0; - bool driveListActive = mEngineWrapper->isDriveListViewActive(); //iModel->FileUtils()->IsDriveListViewActive(); - bool normalModeActive = true; //iModel->FileUtils()->IsNormalModeActive(); - bool currentDriveReadOnly = mEngineWrapper->isCurrentDriveReadOnly(); //iModel->FileUtils()->IsCurrentDriveReadOnly(); - bool currentItemDirectory = mEngineWrapper->getFileEntry(currentItemIndex()).isDir(); //iModel->FileUtils()->IsCurrentItemDirectory(); - bool listBoxSelections = mListView->selectionModel()->selection().count() == 0; //iContainer->ListBoxSelectionIndexesCount() == 0; - bool emptyClipBoard = !mEngineWrapper->isClipBoardListInUse(); - bool showSnapShot = false; //iModel->FileUtils()->DriveSnapShotPossible(); - - bool showEditMenu(true); - if (driveListActive) { - if (!showSnapShot || emptyListBox && emptyClipBoard) - showEditMenu = false; - else - showEditMenu = true; - } else { - if (emptyListBox && emptyClipBoard) - showEditMenu = false; - else - showEditMenu = true; - } - - mFileViewMenuActions.mEditMenu->menuAction()->setVisible(showEditMenu); - // TODO mFileViewMenuActions.mDiskAdminMenu->menuAction()->setVisible(driveListActive); - - mFileViewMenuActions.mFileBackMoveUp->setVisible( !driveListActive); - - //aMenuPane->SetItemDimmed(EFileBrowserCmdFileOpen, emptyListBox || driveListActive || currentItemDirectory); - mFileViewMenuActions.mFileOpenDrive->setVisible( !(emptyListBox || !driveListActive)); - mFileViewMenuActions.mFileOpenDirectory->setVisible( !(emptyListBox || driveListActive || !currentItemDirectory)); - - //aMenuPane->SetItemDimmed(EFileBrowserCmdFileView, emptyListBox || listBoxSelections || currentItemDirectory || driveListActive); - //aMenuPane->SetItemDimmed(EFileBrowserCmd FileEdit, emptyListBox || listBoxSelections || currentItemDirectory || driveListActive); - //aMenuPane->SetItemDimmed(EFileBrowserCmdFileSendTo, emptyListBox || driveListActive || currentItemDirectory); - - mFileViewMenuActions.mFileNewMenu->menuAction()->setVisible(!(driveListActive || currentDriveReadOnly)); - mFileViewMenuActions.mFileDelete->setVisible(!(emptyListBox || driveListActive || currentDriveReadOnly)); - mFileViewMenuActions.mFileRename->setVisible(!(emptyListBox || driveListActive || currentDriveReadOnly || listBoxSelections)); - mFileViewMenuActions.mFileTouch->setVisible(!(emptyListBox || driveListActive || currentDriveReadOnly)); - mFileViewMenuActions.mFileProperties->setVisible(!(emptyListBox || listBoxSelections)); - // TODO mFileViewMenuActions.mFileChecksums->setVisible(!(emptyListBox || listBoxSelections || currentItemDirectory || driveListActive)); - // TODO mFileViewMenuActions.mFileSetAttributes->setVisible(!(emptyListBox || driveListActive || currentDriveReadOnly)); - // TODO mFileViewMenuActions.mFileCompress->setVisible(!(currentDriveReadOnly || emptyListBox || listBoxSelections || currentItemDirectory || driveListActive)); - // TODO mFileViewMenuActions.mFileDecompress->setVisible(!(currentDriveReadOnly || emptyListBox || listBoxSelections || currentItemDirectory || driveListActive)); - - bool currentSelected = true; //iContainer->ListBox()->View()->ItemIsSelected(iContainer->ListBox()->View()->CurrentItemIndex()); - bool allSelected = mListView->selectionModel()->selection().count() == mFileBrowserModel->rowCount(); //iContainer->ListBox()->SelectionIndexes()->Count() == iContainer->ListBox()->Model()->NumberOfItems(); - bool noneSelected = mListView->selectionModel()->selection().count() != 0; //iContainer->ListBox()->SelectionIndexes()->Count() == 0; - - //mFileViewMenuActions.mEditSnapShotToE->setVisible(driveListActive); // TODO - mFileViewMenuActions.mEditCut->setVisible(!(driveListActive || currentDriveReadOnly || emptyListBox)); - mFileViewMenuActions.mEditCopy->setVisible(!(driveListActive || emptyListBox)); - mFileViewMenuActions.mEditPaste->setVisible(!(driveListActive || emptyClipBoard || currentDriveReadOnly)); - mFileViewMenuActions.mEditCopyToFolder->setVisible(!(driveListActive || emptyListBox)); - mFileViewMenuActions.mEditMoveToFolder->setVisible(!(driveListActive || currentDriveReadOnly || emptyListBox)); - mFileViewMenuActions.mEditSelect->setVisible(!(driveListActive || currentSelected || emptyListBox)); - mFileViewMenuActions.mEditUnselect->setVisible(!(driveListActive || !currentSelected || emptyListBox)); - mFileViewMenuActions.mEditSelectAll->setVisible(!(driveListActive || allSelected || emptyListBox)); - mFileViewMenuActions.mEditUnselectAll->setVisible(!(driveListActive || noneSelected || emptyListBox)); - - // TODO mFileViewMenuActions.mViewSort->setVisible(!(!normalModeActive || driveListActive || emptyListBox)); - // TODO mFileViewMenuActions.mViewOrder->setVisible(!(!normalModeActive || driveListActive || emptyListBox)); - mFileViewMenuActions.mViewRefresh->setVisible(normalModeActive); - mFileViewMenuActions.mViewFilterEntries->setVisible(!emptyListBox); - - // TODO R_FILEBROWSER_VIEW_SORT_SUBMENU - // aMenuPane->SetItemButtonState(iModel->FileUtils()->SortMode(), EEikMenuItemSymbolOn); - - // TODO R_FILEBROWSER_VIEW_ORDER_SUBMENU - // aMenuPane->SetItemButtonState(iModel->FileUtils()->OrderMode(), EEikMenuItemSymbolOn); - - // aResourceId == R_FILEBROWSER_TOOLS_SUBMENU - bool noExtendedErrorsAllowed = mEngineWrapper->ErrRdFileExists(); - mFileViewMenuActions.mToolsDisableExtendedErrors->setVisible(noExtendedErrorsAllowed); - mFileViewMenuActions.mToolsEnableExtendedErrors->setVisible(!noExtendedErrorsAllowed); - -// bool infraRedAllowed = mEngineWrapper->FileExists(KIRAppPath); -// bool bluetoothAllowed = mEngineWrapper->FileExists(KBTAppPath); -// bool usbAllowed = mEngineWrapper->FileExists(KUSBAppPath); -// -// bool noLocalCon = !infraRedAllowed && !bluetoothAllowed && !usbAllowed; -// mFileViewMenuActions.mToolsLocalConnectivityMenu->menuAction()->setVisible(!noLocalCon); -// -// mFileViewMenuActions.mToolsLocalConnectivityActivateInfrared->setVisible(infraRedAllowed); -// mFileViewMenuActions.mToolsLocalConnectivityLaunchBTUI->setVisible(bluetoothAllowed); -// mFileViewMenuActions.mToolsLocalConnectivityLaunchUSBUI->setVisible(usbAllowed); -} - -/** Refresh FileBrowser view */ void FileBrowserView::refreshList() { mEngineWrapper->refreshView(); - mNaviPane->setPlainText(QString(mEngineWrapper->currentPath())); +// mNaviPane->setPlainText(QString(mEngineWrapper->currentPath())); mListView->reset(); mListView->setModel(mFileBrowserModel); mToolbarBackAction->setEnabled(!mEngineWrapper->isDriveListViewActive()); + + TListingMode listingMode = mEngineWrapper->listingMode(); + if (listingMode == ENormalEntries) + mNaviPane->setPlainText(QString(mEngineWrapper->currentPath())); + else if (listingMode == ESearchResults) + mNaviPane->setPlainText(QString(tr("Search results"))); + else if (listingMode == EOpenFiles) + mNaviPane->setPlainText(QString(tr("Open files"))); + else if (listingMode == EMsgAttachmentsInbox) + mNaviPane->setPlainText(QString(tr("Attachments in Inbox"))); + else if (listingMode == EMsgAttachmentsDrafts) + mNaviPane->setPlainText(QString(tr("Attachments in Drafts"))); + else if (listingMode == EMsgAttachmentsSentItems) + mNaviPane->setPlainText(QString(tr("Attachments in Sent Items"))); + else if (listingMode == EMsgAttachmentsOutbox) + mNaviPane->setPlainText(QString(tr("Attachments in Outbox"))); } /** @@ -626,16 +779,17 @@ dialog->open(); } -QModelIndexList FileBrowserView::getSelectedItemsOrCurrentItem() +void FileBrowserView::storeSelectedItemsOrCurrentItem() { - QModelIndexList modelIndexList; QItemSelectionModel *selectionIndexes = mListView->selectionModel(); // by default use selected items if (selectionIndexes) { if (selectionIndexes->hasSelection()) { - modelIndexList = mListView->selectionModel()->selectedIndexes(); + mSelectionIndexes = mListView->selectionModel()->selectedIndexes(); } else { // or if none selected, use the current item index + mSelectionIndexes.clear(); + mSelectionIndexes.append(mCurrentIndex); // QModelIndex currentIndex = currentItemIndex(); // if (mFileBrowserModel->rowCount(currentItemIndex) > currentItemIndex && currentItemIndex >= 0) // { @@ -643,15 +797,14 @@ // } } } - mClipBoardInUse = true; - return modelIndexList; +// mClipBoardInUse = true; } // --------------------------------------------------------------------------- QModelIndex FileBrowserView::currentItemIndex() { - return mListView->selectionModel()->currentIndex(); + return mCurrentIndex;//mListView->selectionModel()->currentIndex(); } // --------------------------------------------------------------------------- @@ -694,13 +847,13 @@ mLocationChanged = true; // get selected drive or directory from list view model and open it: //if (mListView->selectionModel()->hasSelection()) { - if (mListView->selectionModel()->selection().count() != 0) { - QModelIndex currentIndex = currentItemIndex(); - mEngineWrapper->moveDownToDirectory(currentIndex); +// if (mListView->selectionModel()->selection().count() != 0) { +// QModelIndex currentIndex = currentItemIndex(); + mEngineWrapper->moveDownToDirectory(mCurrentIndex); populateFolderContent(); - } else { - Notifications::showErrorNote("not selected item!"); - } +// } else { +// Notifications::showErrorNote("not selected item!"); +// } } void FileBrowserView::fileOpenDirectory() @@ -708,13 +861,13 @@ mLocationChanged = true; // get selected drive or directory from list view model and open it: //if (mListView->selectionModel()->hasSelection()) { - if (mListView->selectionModel()->selection().count() != 0) { - QModelIndex currentIndex = currentItemIndex(); - mEngineWrapper->moveDownToDirectory(currentIndex); +// if (mListView->selectionModel()->selection().count() != 0) { +// QModelIndex currentIndex = currentItemIndex(); + mEngineWrapper->moveDownToDirectory(mCurrentIndex); populateFolderContent(); - } else { - Notifications::showErrorNote("not selected item!"); - } +// } else { +// Notifications::showErrorNote("not selected item!"); +// } } void FileBrowserView::fileSearch() @@ -779,9 +932,9 @@ */ void FileBrowserView::fileDelete() { - QModelIndexList currentSelection = getSelectedItemsOrCurrentItem(); + storeSelectedItemsOrCurrentItem(); const QString messageFormat = "Delete %1 entries?"; - QString message = messageFormat.arg(currentSelection.count()); + QString message = messageFormat.arg(mSelectionIndexes.count()); HbMessageBox::question(message, this, SLOT(doFileDelete(HbAction*))); } @@ -791,8 +944,8 @@ void FileBrowserView::doFileDelete(HbAction* action) { if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) { - QModelIndexList currentSelection = getSelectedItemsOrCurrentItem(); - mEngineWrapper->deleteItems(currentSelection); + //storeSelectedItemsOrCurrentItem(); + mEngineWrapper->deleteItems(mSelectionIndexes); refreshList(); } } @@ -802,12 +955,12 @@ */ void FileBrowserView::fileRename() { - QModelIndexList currentSelection = getSelectedItemsOrCurrentItem(); - mEngineWrapper->setCurrentSelection(currentSelection); + storeSelectedItemsOrCurrentItem(); + mEngineWrapper->setCurrentSelection(mSelectionIndexes); - for (int i(0), ie(currentSelection.count()); i < ie; ++i ) { + for (int i(0), ie(mSelectionIndexes.count()); i < ie; ++i ) { mProceed = (i == ie-1); // if the last item - mModelIndex = currentSelection.at(i); + mModelIndex = mSelectionIndexes.at(i); FileEntry entry = mEngineWrapper->getFileEntry(mModelIndex); QString heading = QString("Enter new name"); @@ -857,8 +1010,8 @@ */ void FileBrowserView::fileTouch() { - QModelIndexList currentSelection = getSelectedItemsOrCurrentItem(); - mEngineWrapper->setCurrentSelection(currentSelection); + storeSelectedItemsOrCurrentItem(); + mEngineWrapper->setCurrentSelection(mSelectionIndexes); if (mEngineWrapper->selectionHasDirs()) { const QString message = "Recurse touch for all selected dirs?"; @@ -900,8 +1053,8 @@ void FileBrowserView::fileChecksums(TFileBrowserCmdFileChecksums checksumType) { - QModelIndex currentIndex = currentItemIndex(); - mEngineWrapper->showFileCheckSums(currentIndex, checksumType); +// QModelIndex currentIndex = currentItemIndex(); + mEngineWrapper->showFileCheckSums(mCurrentIndex, checksumType); } /** @@ -933,11 +1086,12 @@ */ void FileBrowserView::editCut() { - mClipboardIndices = getSelectedItemsOrCurrentItem(); + storeSelectedItemsOrCurrentItem(); + mClipboardIndexes = mSelectionIndexes; - mEngineWrapper->clipboardCut(mClipboardIndices); + mEngineWrapper->clipboardCut(mClipboardIndexes); - int operations = mClipboardIndices.count(); + int operations = mClipboardIndexes.count(); const QString message = QString ("%1 entries cut to clipboard"); QString noteMsg = message.arg(operations); @@ -950,11 +1104,12 @@ */ void FileBrowserView::editCopy() { - mClipboardIndices = getSelectedItemsOrCurrentItem(); + storeSelectedItemsOrCurrentItem(); + mClipboardIndexes = mSelectionIndexes; - mEngineWrapper->clipboardCopy(mClipboardIndices); + mEngineWrapper->clipboardCopy(mClipboardIndexes); - int operations = mClipboardIndices.count(); + int operations = mClipboardIndexes.count(); const QString message = QString ("%1 entries copied to clipboard"); QString noteMsg = message.arg(operations); @@ -972,7 +1127,7 @@ // TODO Set entry items here - someEntryExists = mEngineWrapper->isDestinationEntriesExists(mClipboardIndices, mEngineWrapper->currentPath()); + someEntryExists = mEngineWrapper->isDestinationEntriesExists(mClipboardIndexes, mEngineWrapper->currentPath()); if (someEntryExists) { fileOverwriteDialog(); } @@ -999,10 +1154,10 @@ bool someEntryExists(false); // TODO Set entry items here - QModelIndexList currentSelection = getSelectedItemsOrCurrentItem(); - mEngineWrapper->setCurrentSelection(currentSelection); + storeSelectedItemsOrCurrentItem(); + mEngineWrapper->setCurrentSelection(mSelectionIndexes); - someEntryExists = mEngineWrapper->isDestinationEntriesExists(currentSelection, targetDir); + someEntryExists = mEngineWrapper->isDestinationEntriesExists(mSelectionIndexes, targetDir); if (someEntryExists) { fileOverwriteDialog(); } @@ -1031,10 +1186,10 @@ bool someEntryExists(false); // TODO Set entry items here - QModelIndexList currentSelection = getSelectedItemsOrCurrentItem(); - mEngineWrapper->setCurrentSelection(currentSelection); + storeSelectedItemsOrCurrentItem(); + mEngineWrapper->setCurrentSelection(mSelectionIndexes); - someEntryExists = mEngineWrapper->isDestinationEntriesExists(currentSelection, targetDir); + someEntryExists = mEngineWrapper->isDestinationEntriesExists(mSelectionIndexes, targetDir); if (someEntryExists) { fileOverwriteDialog(); } @@ -1758,7 +1913,7 @@ // --------------------------------------------------------------------------- void FileBrowserView::selectionModeChanged() { - if (mFileViewMenuActions.mSelection->isChecked()) { + if (mOptionMenuActions.mSelection->isChecked()) { activateSelectionMode(); } else { deActivateSelectionMode(); diff -r 271e901a9423 -r 4cc0d1a608c1 filebrowser/ui/src/notifications.cpp --- a/filebrowser/ui/src/notifications.cpp Fri May 14 16:10:39 2010 +0300 +++ b/filebrowser/ui/src/notifications.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -38,7 +38,7 @@ void Notifications::showAboutNote() { showMessageBox(HbMessageBox::MessageTypeInformation, - "Version 5.0.0 - 23h April 2010. Copyright © 2010 Nokia Corporation" + "Version 5.0.1 - 21st May 2010. Copyright © 2010 Nokia Corporation" "and/or its subsidiary(-ies). All rights reserved." "Licensed under Eclipse Public License v1.0.", "About File Browser" diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiAdmin/data/1020DEB6.rss --- a/htiui/HtiAdmin/data/1020DEB6.rss Fri May 14 16:10:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* Copyright (c) 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: A startup control file to add HtiFramework.exe to startup list. -* -*/ - -#include - -RESOURCE STARTUP_ITEM_INFO hti_framework - { - executable_name = "!:\\sys\\bin\\HtiFramework.exe"; - recovery = EStartupItemExPolicyNone; - } - - -// End of file diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiAdmin/group/HtiAdmin.mmp --- a/htiui/HtiAdmin/group/HtiAdmin.mmp Fri May 14 16:10:39 2010 +0300 +++ b/htiui/HtiAdmin/group/HtiAdmin.mmp Tue Jun 01 14:40:54 2010 +0300 @@ -57,11 +57,6 @@ TARGETPATH /private/10003a3f/apps END -START RESOURCE 1020DEB6.rss -HEADER -TARGETPATH /private/101f875a/import -END - LIBRARY apparc.lib LIBRARY avkon.lib LIBRARY cone.lib diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiDeviceReboot/src/HtiDeviceReboot.cpp --- a/htiui/HtiDeviceReboot/src/HtiDeviceReboot.cpp Fri May 14 16:10:39 2010 +0300 +++ b/htiui/HtiDeviceReboot/src/HtiDeviceReboot.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -80,7 +80,7 @@ } else { - error = Reboot((RStarterSession::TResetReason)input); + error = Reboot(static_cast(input)); } } } diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiServicePlugins/HtiAppServicePlugin/src/HtiAppControl.cpp --- a/htiui/HtiServicePlugins/HtiAppServicePlugin/src/HtiAppControl.cpp Fri May 14 16:10:39 2010 +0300 +++ b/htiui/HtiServicePlugins/HtiAppServicePlugin/src/HtiAppControl.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -631,7 +631,7 @@ TInt language = iInstOpts.iLang; if (parameters.Length() == offset+2) { - language = parameters[offset] + parameters[offset+1]<<8; + language = parameters[offset] + (parameters[offset+1]<<8); } if (parameters.Length() == offset+1) { diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiServicePlugins/HtiCameraServicePlugin/data/2002EA9D.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/data/2002EA9D.rss Tue Jun 01 14:40:54 2010 +0300 @@ -0,0 +1,66 @@ +/* +* Copyright (c) 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: HTI service plugin for playing audio. +* +*/ + + + +// RESOURCE IDENTIFIER + +// INCLUDES +#include + +// CONSTANTS + +// MACROS + + +// RESOURCE DEFINITIONS +// ----------------------------------------------------------------------------- +// +// theInfo +// ECom registry info resource. +// +// ----------------------------------------------------------------------------- +// + +RESOURCE REGISTRY_INFO theInfo + { + // UID for the DLL + dll_uid = 0x2002EA9D; + // Declare array of interface info + interfaces = + { + INTERFACE_INFO + { + // UID of interface that is implemented + interface_uid = 0x1020DEB7; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0x2002EA9E; + version_no = 1; + display_name = "Camera Service"; + default_data = "Camera"; + opaque_data = ""; + } + }; + } + }; + } + + +// End of File diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/inc/EngineVideoRecording.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/inc/EngineVideoRecording.h Tue Jun 01 14:40:54 2010 +0300 @@ -0,0 +1,524 @@ +/* +* Copyright (c) 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: Video recording engine implementation class. +* +*/ + +#ifndef ENGINEVIDEORECORDING_H +#define ENGINEVIDEORECORDING_H + +// INCLUDES +#include +#include +#include + +// CONSTANTS +const TInt KCameraPriority = -1; // Relative priority (-100...100) of camera HW + +// FORWARD DECLARATIONS +class CVideoRecorderUtility; +class CVideoRecordingQualityLevels; + + +class TEngineVideoRecordingInfo + { + public: + + // Camera hardware version present. + TVersion iHardwareVersion; + // Camera driver software version present. + TVersion iSoftwareVersion; + // Actual orientation of the camera. + TCameraInfo::TCameraOrientation iOrientation; + + // Bitfield of CCamera::TOptions available. + TUint32 iOptionsSupported; + // Bitfield of CCamera::TFlash modes available. + TUint32 iFlashModesSupported; + // Bitfield of CCamera::TExposure modes available. + TUint32 iExposureModesSupported; + // Bitfield of CCamera::TWhiteBalance modes available. + TUint32 iWhiteBalanceModesSupported; + + // Minimum zoom value allowed. Must be negative or + // zero (for not supported). + TInt iMinZoom; + // Maximum zoom value allowed. Must be positive or + // zero (for not supported). + TInt iMaxZoom; + // Maximum digital zoom value allowed. Must be positive or + // zero (for not supported). + TInt iMaxDigitalZoom; + + // Image size multiplier corresponding to minimum zoom value. + // Must be between 0 and 1 inclusive. + TReal32 iMinZoomFactor; + // Image size multiplier corresponding to maximum zoom value. + // Must be greater than or equal to 1. + TReal32 iMaxZoomFactor; + // Image size multiplier corresponding to maximum digital zoom value. + // Must be greater than or equal to 1. + TReal32 iMaxDigitalZoomFactor; + + // Count of still image capturing sizes allowed. + TInt iNumImageSizesSupported; + // Bitfield of still image CCamera::TFormat values supported. + TUint32 iImageFormatsSupported; + + // Count of still image capturing quality levels initialized. + TInt iNumStillQualityLevelsSupported; + // Count of video recording quality levels initialized. + TInt iNumVideoQualityLevelsSupported; + + // Bitfield of CCaeEngine::TOptions available. + TUint32 iCaeOptionsSupported; + + // Integer (e.g. -9) that corresponds to minimum EV compensation value. + TInt iMinEvCompensation; + // Integer (e.g. 9) that corresponds to maximum EV compensation value. + TInt iMaxEvCompensation; + // Minimum camera EV compensation value (e.g. -3.0). + TReal32 iMinEvCompensationValue; + // Maximum camera EV compensation value (e.g. 3.0). + TReal32 iMaxEvCompensationValue; + }; + +class MEngineVideoRecordingObserver + { + + public: + /** + * Called asynchronously when CEngineVideoRecording::Init(), CCaeEngine::CEngineVideoRecording(), + * or CEngineVideoRecording::Reserve() completes. + * Indicates if Video Recording Engine is ready for operation, + * the camera is reserved and its power is switched on. + * @param aError Error code KErrNone to indicate success or a standard Symbian OS error code. + * @return void + */ + virtual void MevroInitComplete( TInt aError ) = 0; + + /** + * Called asynchronously when preparing of video recording completes + * after PrepareVideoRecordingL() has been called. + * May be called second time with an error code after a successful preparation + * if video recording loses its prepared state for some reason (e.g. audio HW + * is reserved for some other application). + * @param aError Error code KErrNone to indicate success or a standard Symbian OS error code. + * @return void + */ + virtual void MevroVideoPrepareComplete( TInt aError ) = 0; + + /** + * Called (possibly asynchronously) when video recording is running + * after CEngineVideoRecording::StartVideoRecording() or + * CEngineVideoRecording::ResumeVideoRecording() has been called. + * @param aError Error code KErrNone to indicate success or a standard Symbian OS error code. + * @return void + */ + virtual void MevroVideoRecordingOn( TInt aError ) = 0; + + /** + * Called (possibly asynchronously) when video recording is paused after + * CEngineVideoRecording::PauseVideoRecording() has been called. + * @param aError Error code KErrNone to indicate success or a standard Symbian OS error code. + * @return void + */ + virtual void MevroVideoRecordingPaused( TInt aError ) = 0; + + /** + * Called (possibly asynchronously) when video recording is completed + * after CEngineVideoRecording::StopVideoRecording() has been called or + * recording has been completed for some other reason. + * @param aError Error code KErrNone to indicate success or a standard Symbian OS error code. + * if aError == KErrDiskFull, then disk storage is full. + * if aError == KErrCompletion, then clip max size was reached. + * @return void + */ + virtual void MevroVideoRecordingComplete( TInt aError ) = 0; + }; + + +NONSHARABLE_CLASS( CEngineVideoRecording ) : public CBase, + public MVideoRecorderUtilityObserver, + public MCameraObserver, + public MCameraObserver2 + { + public: + // Possible zooming modes. + enum TZoomMode + { + EZoomModeDigital = 0x00, // Digital zoom (default). + EZoomModeOptical = 0x01, // Optical zoom. + EZoomModeOpticalDigital = 0x02 // Optical+digital zoom. + }; + + public: + /** + * Destructor. + */ + virtual ~CEngineVideoRecording(); + + // Construction and destruction + static CEngineVideoRecording* NewL(MEngineVideoRecordingObserver& aObserver, + TInt aCameraIndex); + + void InitL(); + + void InitVideoRecorderL(); + + void SetVideoRecordingFileNameL( + const TDesC& aVideoClipFileName ); + + void ChangeVideoFileNameL(); + + void PrepareVideoRecordingL( + TInt aVideoQualityIndex ); + + void PrepareVideoRecordingL( + const TSize& aFrameSize, + TReal32 aFrameRate, + TInt aBitRate, + TBool aAudioEnabled, + const TDesC8& aMimeType, + const TDesC& aPreferredSupplier, + const TDesC8& aVideoType = KNullDesC8, + const TDesC8& aAudioType = KNullDesC8 ); + + void PrepareVideoRecordingL( + const TSize& aFrameSize, + TReal32 aFrameRate, + TInt aBitRate, + TBool aAudioEnabled, + TInt aAudioBitRate, + const TDesC8& aMimeType, + const TDesC& aPreferredSupplier, + const TDesC8& aVideoType, + const TDesC8& aAudioType ); + + void CloseVideoRecording(); + + TInt VideoQualityIndex() const; + + TInt VideoQualityCount() const; + + void GetVideoFrameSize( + TInt aVideoQualityIndex, + TSize& aSize ) const; + + TReal32 VideoFrameRate( + TInt aVideoQualityIndex ) const; + + TInt EstimatedVideoRecordingBitRateL( + TInt aVideoQualityIndex ) const; + + void SetVideoClipMaxSizeL( + TInt aMaxClipSizeInBytes = 0 ); + + TInt VideoClipMaxSize() const; + + void SetVideoAudioL( + TBool aAudioEnabled ); + + TBool VideoAudio() const; + + void StartVideoRecording(); + + void StopVideoRecording(); + + void PauseVideoRecording(); + + void ResumeVideoRecording(); + + TTimeIntervalMicroSeconds RemainingVideoRecordingTime() const; + + TBool IsVideoRecording() const; + + void Reserve(); + + void Release(); + + void PowerOn(); + + void PowerOff(); + + void SetZoomModeL(TZoomMode aZoomMode = EZoomModeDigital); + + TZoomMode ZoomMode() const; + + void SetZoomValueL(TInt aZoomValue = 0); + + TInt ZoomValue() const; + + TInt MaxZoomValue() const; + TInt MinZoomValue() const; + + void SetBrightnessL(TInt aBrightness = 0); + + TInt Brightness() const; + + void SetContrastL(TInt aContrast = 0); + + TInt Contrast() const; + + void SetExposureModeL(CCamera::TExposure aExposureMode = + CCamera::EExposureAuto); + + CCamera::TExposure ExposureMode() const; + + void SetWhiteBalanceModeL(CCamera::TWhiteBalance aWhiteBalanceMode = + CCamera::EWBAuto); + + CCamera::TWhiteBalance WhiteBalanceMode() const; + + void SetFlashModeL(CCamera::TFlash aFlashMode = CCamera::EFlashNone); + + CCamera::TFlash FlashMode() const; + + void ResetToDefaultsL(); + private: + void InitializeInfo(const CCamera& aCamera); + + /** + * Checks that power is on. If not, then leaves. + * @since 2.1 + * @return void + */ + void CheckPowerL(); + + void CancelVideoRecording(); + + void PrepareVideoSettingsL(); + + void FindVideoUidsL(const TDesC8& aMimeType, + const TDesC& aPreferredSupplier); + + TFourCC ConvertAndSetVideoAudioTypeL(const TDesC8& aAudioType); + + private: + + /** + * From MVideoRecorderUtilityObserver + * Notification to the client that the opening of the video clip has completed, + * successfully, or otherwise. + * @param aError + * The status of the video recorder after initialisation. + * This is either KErrNone if the open has completed successfully, + * or one of the system wide error codes. + */ + virtual void MvruoOpenComplete(TInt aError); + + /** + * From MVideoRecorderUtilityObserver + * Notification that video recorder is ready to begin recording. This callback + * is generated in response to a call to Prepare. + * @param aError + * This is either KErrNone if the video recorder has been prepared for + * recording successfully, or one of the system wide error codes + */ + virtual void MvruoPrepareComplete(TInt aError); + + /** + * From MVideoRecorderUtilityObserver + * Notification that video recording has completed. This is not called if + * recording is explicitly stopped by calling Stop. + * @param aError + * This is either KErrNone if recording was completed successfully, + * or one of the system wide error codes. + */ + virtual void MvruoRecordComplete(TInt aError); + + /** + * From MVideoRecorderUtilityObserver + * General event notification from controller. These events are specified by + * the supplier of the controller. + * @param aEvent + * The event sent by the controller. + */ + virtual void MvruoEvent(const TMMFEvent& aEvent); + + private: // From Camera Observer / ECam.h + + void ReserveComplete( + TInt aError ); + + void PowerOnComplete( + TInt aError ); + + void ViewFinderFrameReady( + CFbsBitmap& aFrame ){}; + + void ImageReady( + CFbsBitmap* aBitmap, + HBufC8* aData, + TInt aError ){}; + + void FrameBufferReady( + MFrameBuffer* /*aFrameBuffer*/, + TInt /*aError*/ ) {}; // Empty default because not in use. + + private: // From Camera Observer2 / ECam.h + + void HandleEvent(const TECAMEvent& aEvent); + + void ViewFinderReady(MCameraBuffer& aCameraBuffer,TInt aError){}; + + void ImageBufferReady(MCameraBuffer& aCameraBuffer,TInt aError){}; + + void VideoBufferReady(MCameraBuffer& aCameraBuffer,TInt aError){}; + protected: + + /** + * C++ default constructor. + */ + CEngineVideoRecording(); + + /** + * 2nd phase constructor. + */ + void ConstructL(MEngineVideoRecordingObserver& aObserver, + TInt aCameraIndex); + + private: + // Camera API implementation object. + CCamera* iCamera; + + // Video Recorder API implementation object. + CVideoRecorderUtility* iVideoRecorder; + + // Video Recording observer + MEngineVideoRecordingObserver* iVideoRecordingObserver; + + // Video Recording Engine info object. + TEngineVideoRecordingInfo* iInfo; + + // Video recording quality levels container. + CVideoRecordingQualityLevels* iVideoQualityLevels; + + // Video recording frame size. + // This is ptr because video recorder is not necessarily initialized. + TSize* iVideoFrameSize; + + // Video recording frame size (to be prepared). + // This is ptr because video recorder is not necessarily initialized. + TSize* iVideoFrameSizePrep; + + // Video clip file name. + HBufC* iVideoClipFileName; + + // Video Recorder video type. + HBufC8* iVideoType; + + // Boolean indicating if camera module is reserved for the engine. + TBool iReserved; + + // Boolean indicating if camera module power is on. + TBool iPowerOn; + + // Boolean indicating if video recording is initialized. + TBool iVideoInitialized; + + // Boolean indicating if video recording is opened. + TBool iVideoOpened; + + // Boolean indicating if video recording is prepared. + TBool iVideoPrepared; + + // Boolean indicating if video recording is currently running. + TBool iVideoRecordingRunning; + + // Boolean indicating if video recording is currently paused. + TBool iVideoRecordingPaused; + + // Video recording quality level index currently prepared. + TInt iVideoQualityIndex; + + // Handle to the camera used. + TInt iCameraHandle; + + // Video Recorder controller UID. + TUid iVideoControllerUid; + + // Video Recorder format UID. + TUid iVideoFormatUid; + + // Video Recorder audio type. + TFourCC iVideoAudioType; + + //// Camera module settings related variables. //// + + // Current zoom mode. + TZoomMode iZoomMode; + + // Current zoom value. + TInt iZoomValue; + + // Current brightness value. + TInt iBrightness; + + // Current contrast value. + TInt iContrast; + + // Camera exposure mode. + CCamera::TExposure iExposureMode; + + // Camera white balance mode. + CCamera::TWhiteBalance iWhiteBalanceMode; + + // Camera flash mode. + CCamera::TFlash iFlashMode; + //// Video recording parameters prepared. //// + + // Video recording frame rate. + TReal32 iVideoFrameRate; + + // Video recording bit rate. + TInt iVideoBitRate; + + // Boolean indicating if audio is enabled with video recording. + TBool iVideoAudioEnabled; + + // Video recording audio bit rate. + TInt iVideoAudioBitRate; + + // Video recording maximum clip size in bytes. + TInt iMaxClipSizeInBytes; + + //// Video recording parameters to be prepared. //// + + // Video recording frame rate (to be prepared). + TReal32 iVideoFrameRatePrep; + + // Video recording bit rate (to be prepared). + TInt iVideoBitRatePrep; + + // Boolean indicating if audio is enabled with video recording (to be prepared). + TBool iVideoAudioEnabledPrep; + + // Video recording audio bit rate (to be prepared). + TInt iVideoAudioBitRatePrep; + + // Video recording maximum clip size in bytes (to be prepared). + TInt iMaxClipSizeInBytesPrep; + + // Boolean indicating if parameters are/were prepared in video recording preparation.. + TBool iPrepPars; + + // Boolean indicating if video audio bit rate should be prepared. + TBool iPrepareVideoAudioBitRate; + }; + + + + +#endif //ENGINEVIDEORECORDING_H diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/inc/VideoRecordingQualityLevels.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/inc/VideoRecordingQualityLevels.h Tue Jun 01 14:40:54 2010 +0300 @@ -0,0 +1,135 @@ +/* +* Copyright (c) 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: Engine video quality level and container. +* +*/ + +#ifndef VIDEORECORDINGQUALITYLEVELS_H_ +#define VIDEORECORDINGQUALITYLEVELS_H_ + + +const TInt KMaxVideoStringParLength = 32; +const TInt KMaxAudioTypeStringParLength = 4; + +const TInt KMaxVideoQltyLevelCount = 6; + +const TInt KImgWidthSubQCIF = 128; +const TInt KImgHeightSubQCIF = 96; + +const TInt KImgWidthQCIF = 176; +const TInt KImgHeightQCIF = 144; + +const TInt KImgWidthCIF = 352; +const TInt KImgHeightCIF = 288; + +_LIT8(KVideoMimeType, "video/3gpp"); + +_LIT(KPreferredSupplier, "Nokia"); + +_LIT8(KVideoType, "video/H263-2000"); + +_LIT8(KAudioType, " AMR"); + +class CVideoRecordingQualityLevel : public CBase + { +public: + CVideoRecordingQualityLevel(){} + virtual ~CVideoRecordingQualityLevel(){} + +public: + + // The video recording frame size. + TSize iFrameSize; + + // The video recording frame rate. + TReal32 iFrameRate; + + // The video recording bit rate. + TInt iBitRate; + + // A Boolean indicating if video recording audio is enabled or not. + TBool iAudioEnabled; + + // The video recording audio bit rate. + TInt iAudioBitRate; + + // The video MIME type (e.g. "video/3gpp"). + TBuf8 iMimeType; + + // The preferred supplier of video controller (e.g. "Company X"). + TBuf iPreferredSupplier; + + // The video type (e.g. "video/H263-2000"). + TBuf8 iVideoType; + + // The audio type expressed with four characters (e.g. " AMR"). + TBuf8 iAudioType; + + // The estimated video recording bit rate to storage (bits per second). + TInt iStorageRate; + }; + + +class CVideoRecordingQualityLevels : public CBase + { +public: + /** + * Destructor. + */ + virtual ~CVideoRecordingQualityLevels(); + + /** + * Two-phased constructor. + */ + static CVideoRecordingQualityLevels* NewL(); + + /** + * Initializes quality levels to hardcoded default values. + * @return The count of quality levels initialized + */ + TInt InitDefaultsL(); + + /** + * Gets the quality level count. + * @return Quality level count + */ + TInt Count() const; + + /** + * Gets the specified quality level. + * @param aIndex Quality level index + * @return Video quality level + */ + CVideoRecordingQualityLevel& At( + TInt aIndex ) const; + +private: + + /** + * C++ constructor. + */ + CVideoRecordingQualityLevels(); + + /** + * Symbian OS 2nd phase constructor that can leave. + */ + void ConstructL(); + +private: + + // Supported video recording quality levels. + CArrayFixFlat* iQualityLevels; + }; + +#endif /* VIDEORECORDINGQUALITYLEVELS_H_ */ diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/src/EngineVideoRecording.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/src/EngineVideoRecording.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -0,0 +1,1429 @@ +/* +* Copyright (c) 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: Engine implementation video recording methods. +* +*/ + + +// INCLUDE FILES +#include +#include // For MMF audio preference definitions. + + +#include "EngineVideoRecording.h" +#include "VideoRecordingQualityLevels.h" +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CEngineVideoRecording::CEngineVideoRecording +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CEngineVideoRecording::CEngineVideoRecording() : + iZoomMode( EZoomModeDigital ), + iExposureMode( CCamera::EExposureAuto ), + iWhiteBalanceMode( CCamera::EWBAuto ), + iFlashMode( CCamera::EFlashNone ), + iMaxClipSizeInBytes( KMMFNoMaxClipSize ), + iMaxClipSizeInBytesPrep( KMMFNoMaxClipSize ) + { + } + + +// ----------------------------------------------------------------------------- +// CEngineVideoRecording::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CEngineVideoRecording::ConstructL(MEngineVideoRecordingObserver& aObserver, + TInt aCameraIndex) + { + HTI_LOG_FUNC_IN( "CEngineVideoRecording::ConstructL" ); + iVideoRecordingObserver = &aObserver; + + if ( ( aCameraIndex < 0 ) || + ( aCameraIndex >= CCamera::CamerasAvailable() ) ) + { + HTI_LOG_FORMAT("Cae: CEngineVideoRecording::ConstructL leaving KErrHardwareNotAvailable, aCameraIndex=%d", aCameraIndex ); + User::Leave( KErrHardwareNotAvailable ); + } + + // Create a new Camera API implementation object, if supported + TRAPD( err, iCamera = CCamera::New2L( static_cast(*this), aCameraIndex, KCameraPriority ) ); + if ( err ) + { + HTI_LOG_FORMAT("CEngineVideoRecording::ConstructL() CCamera::New2L return code=%d", err ); + + // Create old Camera API implementation object. + iCamera = CCamera::NewL( static_cast(*this), aCameraIndex ); + HTI_LOG_TEXT("CEngineVideoRecording::ConstructL() using MCameraObserver"); + } + else + { + HTI_LOG_TEXT("CEngineVideoRecording::ConstructL() using MCameraObserver2"); + } + + + // Get camera handle. + iCameraHandle = iCamera->Handle(); + + // Create and initialize info object. + iInfo = new( ELeave ) TEngineVideoRecordingInfo; + InitializeInfo( *iCamera ); + + HTI_LOG_FUNC_OUT( "CEngineVideoRecording::ConstructL" ); + } + + +// ----------------------------------------------------------------------------- +// CEngineVideoRecording::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CEngineVideoRecording* CEngineVideoRecording::NewL(MEngineVideoRecordingObserver& aObserver, + TInt aCameraIndex) + { + CEngineVideoRecording* self = new (ELeave) CEngineVideoRecording; + CleanupStack::PushL( self ); + self->ConstructL(aObserver, aCameraIndex); + CleanupStack::Pop(); + return self; + } + + +// Destructor +CEngineVideoRecording::~CEngineVideoRecording() + { + HTI_LOG_FUNC_IN( "CEngineVideoRecording::~CEngineVideoRecording"); + + delete iVideoType; + delete iVideoClipFileName; + + // Turn camera power off first, then release camera. + if ( iCamera ) + { + if ( iReserved ) + { + if ( iPowerOn ) + { + iCamera->PowerOff(); + } + iCamera->Release(); + } + } + + delete iVideoFrameSizePrep; + delete iVideoFrameSize; + + delete iVideoRecorder; + + delete iVideoQualityLevels; + + delete iCamera; + + REComSession::FinalClose(); + + HTI_LOG_FUNC_OUT( "CEngineVideoRecording::~CEngineVideoRecording"); + } + +void CEngineVideoRecording::InitL( ) + { + HTI_LOG_FUNC_IN( "CEngineVideoRecording::InitL"); + + // To allow re-initialization, release the camera (first cancels possible + // activities and turns camera power off). + Release(); + + iCamera->Reserve(); + + HTI_LOG_FUNC_OUT( "CEngineVideoRecording::InitL"); + } + +void CEngineVideoRecording::InitializeInfo( + const CCamera& aCamera ) + { + + // Initialise Camera (API) info. + + TCameraInfo cameraInfo; + aCamera.CameraInfo( cameraInfo ); + + iInfo->iHardwareVersion = cameraInfo.iHardwareVersion; + iInfo->iSoftwareVersion = cameraInfo.iSoftwareVersion; + + iInfo->iOrientation = cameraInfo.iOrientation; + + iInfo->iOptionsSupported = cameraInfo.iOptionsSupported; + + iInfo->iFlashModesSupported = cameraInfo.iFlashModesSupported; + + iInfo->iExposureModesSupported = cameraInfo.iExposureModesSupported; + + iInfo->iWhiteBalanceModesSupported = cameraInfo.iWhiteBalanceModesSupported; + + iInfo->iMinZoom = cameraInfo.iMinZoom; + iInfo->iMaxZoom = cameraInfo.iMaxZoom; + iInfo->iMaxDigitalZoom = cameraInfo.iMaxDigitalZoom; + + iInfo->iMinZoomFactor = cameraInfo.iMinZoomFactor; + iInfo->iMaxZoomFactor = cameraInfo.iMaxZoomFactor; + iInfo->iMaxDigitalZoomFactor = cameraInfo.iMaxDigitalZoomFactor; + + iInfo->iNumImageSizesSupported = cameraInfo.iNumImageSizesSupported; + iInfo->iImageFormatsSupported = cameraInfo.iImageFormatsSupported; + + // Initialize EV compensation info (no supported in this version) + iInfo->iMinEvCompensation = 0; + iInfo->iMaxEvCompensation = 0; + iInfo->iMinEvCompensationValue = 0; + iInfo->iMaxEvCompensationValue = 0; + + // Initialize engine info. + + iInfo->iNumStillQualityLevelsSupported = 0; // Quality levels are initialized separately. + iInfo->iNumVideoQualityLevelsSupported = 0; // Quality levels are initialized separately. + + } +void CEngineVideoRecording::InitVideoRecorderL() + { + HTI_LOG_FUNC_IN( "CEngineVideoRecording::InitVideoRecorderL()"); + + iVideoInitialized = EFalse; + + // Close video recording if previously opened/prepared. + CloseVideoRecording(); + + // (Re-)initialize these. + iMaxClipSizeInBytes = KMMFNoMaxClipSize; + iMaxClipSizeInBytesPrep = KMMFNoMaxClipSize; + + // Create video quality levels container object. + iVideoQualityLevels = CVideoRecordingQualityLevels::NewL(); + + // Destroy possible video clip file name. (Its allocated elsewhere when file name is set.) + delete iVideoClipFileName; + iVideoClipFileName = NULL; + + // Create video recorder. + delete iVideoRecorder; + iVideoRecorder = NULL; + iVideoRecorder = CVideoRecorderUtility::NewL( *this , KAudioPriorityVideoRecording, + TMdaPriorityPreference( KAudioPrefVideoRecording ) ); + + delete iVideoFrameSize; + iVideoFrameSize = NULL; + iVideoFrameSize = new( ELeave ) TSize(); + + delete iVideoFrameSizePrep; + iVideoFrameSizePrep = NULL; + iVideoFrameSizePrep = new( ELeave ) TSize(); + + iInfo->iNumVideoQualityLevelsSupported = iVideoQualityLevels->InitDefaultsL(); + iVideoInitialized = ETrue; + + HTI_LOG_FUNC_OUT( "CEngineVideoRecording::InitVideoRecorderL()"); + } + +void CEngineVideoRecording::SetVideoRecordingFileNameL( + const TDesC& aVideoClipFileName ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::SetVideoRecordingFileNameL"); + + if ( !iVideoInitialized || iVideoRecordingRunning ) + { + HTI_LOG_TEXT("CEngineVideoRecording::SetVideoRecordingFileNameL leaving KErrNotReady" ); + User::Leave( KErrNotReady ); + } + + if ( aVideoClipFileName.Length() > 0 ) + { + // Memorize the video clip file name. + delete iVideoClipFileName; + iVideoClipFileName = NULL; + iVideoClipFileName = aVideoClipFileName.AllocL(); + } + else + { + HTI_LOG_TEXT("CEngineVideoRecording::SetVideoRecordingFileNameL leaving KErrArgument"); + User::Leave( KErrArgument ); + } + + if ( iVideoPrepared ) + { + // Does the actual change of file name, only if video is prepared. + // Note: Variated implementation + ChangeVideoFileNameL(); + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetVideoRecordingFileNameL"); + } + +void CEngineVideoRecording::ChangeVideoFileNameL() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::ChangeVideoFileNameL"); + + // Close if previously prepared. + CloseVideoRecording(); + // Open video recorder. + iVideoOpened = ETrue; // This is always set to ETrue when + // OpenFileL has been called to allow + // freeing resources by CloseVideoRecording(). + iVideoRecorder->OpenFileL( iVideoClipFileName->Des(), + iCameraHandle, + iVideoControllerUid, + iVideoFormatUid, + iVideoType->Des(), + iVideoAudioType ); + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::ChangeVideoFileNameL"); + } + +void CEngineVideoRecording::PrepareVideoRecordingL( + TInt aVideoQualityIndex ) + { + HTI_LOG_TEXT("CEngineVideoRecording::PrepareVideoRecordingL with video quality index"); + + if ( ( aVideoQualityIndex < 0 ) || + ( aVideoQualityIndex >= iVideoQualityLevels->Count() ) ) + { + HTI_LOG_TEXT("PrepareVideoRecordingL() leaving KErrArgument"); + User::Leave( KErrArgument ); + } + + PrepareVideoRecordingL( iVideoQualityLevels->At( aVideoQualityIndex ).iFrameSize, + iVideoQualityLevels->At( aVideoQualityIndex ).iFrameRate, + iVideoQualityLevels->At( aVideoQualityIndex ).iBitRate, + iVideoQualityLevels->At( aVideoQualityIndex ).iAudioEnabled, + iVideoQualityLevels->At( aVideoQualityIndex ).iAudioBitRate, + iVideoQualityLevels->At( aVideoQualityIndex ).iMimeType, + iVideoQualityLevels->At( aVideoQualityIndex ).iPreferredSupplier, + iVideoQualityLevels->At( aVideoQualityIndex ).iVideoType, + iVideoQualityLevels->At( aVideoQualityIndex ).iAudioType ); + + iVideoQualityIndex = aVideoQualityIndex; + } + +void CEngineVideoRecording::PrepareVideoRecordingL( + const TSize& aFrameSize, + TReal32 aFrameRate, + TInt aBitRate, + TBool aAudioEnabled, + const TDesC8& aMimeType, + const TDesC& aPreferredSupplier, + const TDesC8& aVideoType, + const TDesC8& aAudioType ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::PrepareVideoRecordingL"); + // Leave if not initialized properly or busy doing something else. + if ( !iVideoInitialized || + !iVideoClipFileName || + iVideoRecordingRunning ) + { + HTI_LOG_TEXT("PrepareVideoRecordingL leaving KErrNotReady"); + User::Leave( KErrNotReady ); + } + + CheckPowerL(); + + // Leave if video clip file name is not set properly. + if ( iVideoClipFileName->Length() == 0 ) + { + HTI_LOG_TEXT("PrepareVideoRecordingL() leaving KErrArgument (iVideoClipFileName)"); + User::Leave( KErrArgument ); + } + + // Close if previously opened/prepared. + CloseVideoRecording(); + + // Find values for iVideoControllerUid and iVideoFormatUid. + // Those are also needed if clip file name is changed when prepared. + FindVideoUidsL( aMimeType, aPreferredSupplier ); + + // Memorize video type. + delete iVideoType; + iVideoType = NULL; + iVideoType = aVideoType.AllocL(); + + // Convert audio type from TDesC8 to TFourCC. + iVideoAudioType = ConvertAndSetVideoAudioTypeL( aAudioType ); + + // Memorize the parameters to be prepared. + *iVideoFrameSizePrep = aFrameSize; + iVideoFrameRatePrep = aFrameRate; + iVideoBitRatePrep = aBitRate; + iVideoAudioEnabledPrep = aAudioEnabled; + + // Open video recorder. + iVideoOpened = ETrue; // This is always set to ETrue when + // OpenFileL has been called to allow + // freeing resources by CloseVideoRecording(). + iVideoRecorder->OpenFileL( iVideoClipFileName->Des(), + iCameraHandle, + iVideoControllerUid, + iVideoFormatUid, + iVideoType->Des(), + iVideoAudioType ); + HTI_LOG_FUNC_OUT("CEngineVideoRecording::PrepareVideoRecordingL"); + } + +void CEngineVideoRecording::PrepareVideoRecordingL( + const TSize& aFrameSize, + TReal32 aFrameRate, + TInt aBitRate, + TBool aAudioEnabled, + TInt aAudioBitRate, + const TDesC8& aMimeType, + const TDesC& aPreferredSupplier, + const TDesC8& aVideoType, + const TDesC8& aAudioType ) + { + HTI_LOG_TEXT("CEngineVideoRecording::PrepareVideoRecordingL with audio bit rate"); + // Memorize video audio bit rate value to be prepared. + iVideoAudioBitRatePrep = aAudioBitRate; + // Force audio bit rate preparation. + iPrepareVideoAudioBitRate = ETrue; + + // Call the version without audio bit rate argument. + // This is possible because the separate PrepareVideoSettingsL() is doing + // settings after succesfull opening of video recording. + PrepareVideoRecordingL( aFrameSize, + aFrameRate, + aBitRate, + aAudioEnabled, + aMimeType, + aPreferredSupplier, + aVideoType, + aAudioType ); + } + +void CEngineVideoRecording::CloseVideoRecording() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::CloseVideoRecording"); + + if ( iVideoPrepared ) + { + CancelVideoRecording(); + iVideoPrepared = EFalse; + } + + if ( iVideoOpened ) + { + iVideoRecorder->Close(); + iVideoOpened = EFalse; + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::CloseVideoRecording"); + } + +TInt CEngineVideoRecording::VideoQualityIndex() const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::VideoQualityIndex"); + + TInt qualityIndex( -1 ); + if ( iVideoPrepared ) + { + qualityIndex = iVideoQualityIndex; + } + HTI_LOG_FUNC_OUT("CEngineVideoRecording::VideoQualityIndex"); + return qualityIndex; + } + +TInt CEngineVideoRecording::VideoQualityCount() const + { + return iVideoQualityLevels->Count(); + } + + +void CEngineVideoRecording::GetVideoFrameSize( + TInt aVideoQualityIndex, + TSize& aFrameSize ) const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::GetVideoFrameSize"); + + if ( aVideoQualityIndex >= 0 && + aVideoQualityIndex < iVideoQualityLevels->Count() ) + { + aFrameSize = iVideoQualityLevels->At( aVideoQualityIndex ).iFrameSize; + } + HTI_LOG_FUNC_OUT("CEngineVideoRecording::GetVideoFrameSize"); + } + +TReal32 CEngineVideoRecording::VideoFrameRate( + TInt aVideoQualityIndex ) const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::VideoFrameRate"); + + TReal32 frameRate( 0.0 ); + if ( aVideoQualityIndex >= 0 && + aVideoQualityIndex < iVideoQualityLevels->Count() ) + { + frameRate = iVideoQualityLevels->At( aVideoQualityIndex ).iFrameRate; + } + HTI_LOG_FUNC_OUT("CEngineVideoRecording::VideoFrameRate"); + return frameRate; + } + +TInt CEngineVideoRecording::EstimatedVideoRecordingBitRateL( + TInt aVideoQualityIndex ) const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::EstimatedVideoRecordingBitRateL"); + + TInt storageRate( 0 ); + if ( aVideoQualityIndex >= 0 && + aVideoQualityIndex < iVideoQualityLevels->Count() ) + { + storageRate = iVideoQualityLevels->At( aVideoQualityIndex ).iStorageRate; + } + HTI_LOG_FUNC_OUT("CEngineVideoRecording::EstimatedVideoRecordingBitRateL"); + return storageRate; + } + +void CEngineVideoRecording::SetVideoClipMaxSizeL( + TInt aMaxClipSizeInBytes ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::SetVideoClipMaxSizeL"); + + if ( !iVideoInitialized || iVideoRecordingRunning ) + { + HTI_LOG_TEXT("SetVideoClipMaxSizeL leaving KErrNotReady"); + User::Leave( KErrNotReady ); + } + + if ( aMaxClipSizeInBytes > 0 ) + { + iMaxClipSizeInBytesPrep = aMaxClipSizeInBytes; + } + else + { + iMaxClipSizeInBytesPrep = KMMFNoMaxClipSize; + } + + if ( iVideoPrepared ) + { + iPrepPars = ETrue; + iVideoRecorder->SetMaxClipSizeL( iMaxClipSizeInBytesPrep ); + iVideoRecorder->Prepare(); + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetVideoClipMaxSizeL"); + } + +TInt CEngineVideoRecording::VideoClipMaxSize() const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::VideoClipMaxSize"); + + TInt maxClipSizeInBytes( 0 ); + if ( iMaxClipSizeInBytes != KMMFNoMaxClipSize ) + { + maxClipSizeInBytes = iMaxClipSizeInBytes; + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::VideoClipMaxSize"); + return maxClipSizeInBytes; + } + +void CEngineVideoRecording::SetVideoAudioL( + TBool aAudioEnabled ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::SetVideoAudioL"); + + if ( !iVideoInitialized || iVideoRecordingRunning ) + { + HTI_LOG_TEXT("SetVideoAudioL leaving KErrNotReady"); + User::Leave( KErrNotReady ); + } + + iVideoAudioEnabledPrep = aAudioEnabled; + iVideoRecorder->SetAudioEnabledL( iVideoAudioEnabledPrep ); + iPrepPars = ETrue; + iVideoRecorder->Prepare(); + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetVideoAudioL"); + } + +TBool CEngineVideoRecording::VideoAudio() const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::VideoAudio"); + + TBool audioEnabled( EFalse ); + if ( iVideoRecorder ) + { + TRAPD( error, { audioEnabled = iVideoRecorder->AudioEnabledL(); } ); + if ( error != KErrNone ) + { + audioEnabled = EFalse; + } + } + HTI_LOG_FUNC_OUT("CEngineVideoRecording::VideoAudio"); + return audioEnabled; + } + +void CEngineVideoRecording::StartVideoRecording() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::StartVideoRecording"); + + TInt error( KErrNone ); + + if ( iVideoPrepared && !iVideoRecordingRunning ) + { + iVideoRecordingRunning = ETrue; + iVideoRecordingPaused = EFalse; + + // Start video recording. + iVideoRecorder->Record(); + } + else + { + error = KErrNotReady; + } + + + iVideoRecordingObserver->MevroVideoRecordingOn( error ); + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::StartVideoRecording"); + } + +void CEngineVideoRecording::StopVideoRecording() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::StopVideoRecording"); + + TInt stoppingError( KErrNone ); + + if ( iVideoRecordingRunning ) + { + iVideoRecordingRunning = EFalse; + stoppingError = iVideoRecorder->Stop(); + + // Can't be paused anymore. + iVideoRecordingPaused = EFalse; + } + else + { + stoppingError = KErrNotReady; + } + + iVideoRecordingObserver->MevroVideoRecordingComplete( stoppingError ); + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::StopVideoRecording"); + } + +void CEngineVideoRecording::PauseVideoRecording() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::PauseVideoRecording"); + + TInt error( KErrNone ); + + if ( iVideoRecordingRunning && !iVideoRecordingPaused ) + { + // Pause video recording. + TRAP( error, iVideoRecorder->PauseL() ); + + if ( error == KErrNone ) + { + iVideoRecordingPaused = ETrue; + } + } + else + { + error = KErrNotReady; + } + + iVideoRecordingObserver->MevroVideoRecordingPaused( error ); + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::PauseVideoRecording"); + } + +void CEngineVideoRecording::ResumeVideoRecording() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::ResumeVideoRecording"); + + TInt error( KErrNone ); + + if ( iVideoRecordingRunning && iVideoRecordingPaused ) + { + // Start video recording. + iVideoRecorder->Record(); + iVideoRecordingPaused = EFalse; + } + else + { + error = KErrNotReady; + } + + iVideoRecordingObserver->MevroVideoRecordingOn( error ); + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::ResumeVideoRecording"); + } + +TTimeIntervalMicroSeconds CEngineVideoRecording::RemainingVideoRecordingTime() const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::RemainingVideoRecordingTime"); + + TTimeIntervalMicroSeconds remaining( 0 ); + if ( iVideoRecorder ) + { + remaining = iVideoRecorder->RecordTimeAvailable(); + } + HTI_LOG_FUNC_OUT("CEngineVideoRecording::RemainingVideoRecordingTime"); + return remaining; + } + +TBool CEngineVideoRecording::IsVideoRecording() const + { + return iVideoRecordingRunning; + } + + +void CEngineVideoRecording::CancelVideoRecording() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::CancelVideoRecording"); + + if ( iVideoRecordingRunning ) + { + iVideoRecordingRunning = EFalse; + // Stop video recording. Do not call MevroVideoRecordingComplete() + (void) iVideoRecorder->Stop(); + iVideoRecordingPaused = EFalse; + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::CancelVideoRecording"); + } + +void CEngineVideoRecording::PrepareVideoSettingsL() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::PrepareVideoSettingsL"); + + iVideoRecorder->SetVideoFrameSizeL( *iVideoFrameSizePrep ); + iVideoRecorder->SetVideoFrameRateL( iVideoFrameRatePrep ); + iVideoRecorder->SetVideoBitRateL( iVideoBitRatePrep ); + iVideoRecorder->SetAudioEnabledL( iVideoAudioEnabledPrep ); + if ( iPrepareVideoAudioBitRate ) + { + iVideoRecorder->SetAudioBitRateL( iVideoAudioBitRatePrep ); + iPrepareVideoAudioBitRate = EFalse; + } + iVideoRecorder->SetMaxClipSizeL( iMaxClipSizeInBytesPrep ); + + // Set the recording gain to the maximum + TInt gain = iVideoRecorder->GainL(); + HTI_LOG_FORMAT("CEngineVideoRecording::PrepareVideoSettingsL() GainL was %d", gain ); + gain = iVideoRecorder->MaxGainL(); + HTI_LOG_FORMAT("CEngineVideoRecording::PrepareVideoSettingsL() MaxGainL is %d", gain ); + iVideoRecorder->SetGainL( gain ); + gain = iVideoRecorder->GainL(); + HTI_LOG_FORMAT("CEngineVideoRecording::PrepareVideoSettingsL() GainL set to %d", gain ); + + iPrepPars = ETrue; + iVideoRecorder->Prepare(); + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::PrepareVideoSettingsL"); + } + +void CEngineVideoRecording::FindVideoUidsL( + const TDesC8& aMimeType, + const TDesC& aPreferredSupplier ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::FindVideoUidsL"); + + iVideoControllerUid.iUid = 0; + iVideoFormatUid.iUid = 0; + + // Retrieve a list of possible controllers from ECOM. + // + // Controller must support recording the requested mime type. + // Controller must be provided by preferred supplier. + + CMMFControllerPluginSelectionParameters* cSelect = + CMMFControllerPluginSelectionParameters::NewLC(); + CMMFFormatSelectionParameters* fSelect = + CMMFFormatSelectionParameters::NewLC(); + + fSelect->SetMatchToMimeTypeL( aMimeType ); + cSelect->SetRequiredRecordFormatSupportL( *fSelect ); + cSelect->SetPreferredSupplierL( aPreferredSupplier, + CMMFPluginSelectionParameters::EOnlyPreferredSupplierPluginsReturned ); + + RMMFControllerImplInfoArray controllers; + CleanupResetAndDestroyPushL( controllers ); + cSelect->ListImplementationsL( controllers ); + + if ( controllers.Count() < 1 ) + { + // No appropriate controllers found. + HTI_LOG_TEXT("CEngineVideoRecording::FindVideoUidsL() leaving KErrNotSupported (no controllers found)"); + User::Leave( KErrNotSupported ); + } + + TBool found( EFalse ); + for ( TInt contInd = 0; contInd < controllers.Count() && !found; contInd++ ) // there can be more than one controller, search from all of them + { + // Get the controller UID. + iVideoControllerUid = controllers[contInd]->Uid(); + HTI_LOG_FORMAT("CEngineVideoRecording::FindVideoUidsL() iVideoControllerUid=%x", iVideoControllerUid.iUid ); + + // Inquires the controller about supported formats. + RMMFFormatImplInfoArray formats = controllers[contInd]->RecordFormats(); + + // Get the first format that supports our mime type. + for ( TInt i = 0; i < formats.Count(); i++ ) + { + if ( formats[i]->SupportsMimeType( aMimeType ) ) + { + iVideoFormatUid = formats[i]->Uid(); // set the UID + found = ETrue; + HTI_LOG_FORMAT("CEngineVideoRecording::FindVideoUidsL() Found iVideoFormatUid=%x", iVideoFormatUid.iUid); + break; + } + } + } + if ( !found ) + { + // No appropriate video format found. + HTI_LOG_TEXT("CEngineVideoRecording::FindVideoUidsL() leaving KErrNotSupported (no video format found)"); + User::Leave( KErrNotSupported ); + } + + CleanupStack::PopAndDestroy( 3, cSelect ); // cselect, fselect, controllers + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::FindVideoUidsL"); + } + + +TFourCC CEngineVideoRecording::ConvertAndSetVideoAudioTypeL( + const TDesC8& aAudioType ) + { + if ( aAudioType == KNullDesC8 ) + { + return KMMFFourCCCodeNULL; + } + else + { + if ( aAudioType.Length() != 4 ) + { + User::Leave( KErrArgument ); + } + return TFourCC( aAudioType[0], aAudioType[1], aAudioType[2], aAudioType[3] ); + } + } + +void CEngineVideoRecording::Reserve() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::Reserve"); + + if ( !iReserved ) + { + iCamera->Reserve(); + } + else if ( !iPowerOn ) // in case previous reserve ok, but poweron failed + { + PowerOn(); + } + + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::Reserve"); + } + + +void CEngineVideoRecording::Release() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::Release"); + + if ( iReserved ) + { + PowerOff(); // Cancel all activities (if any) and turn power off. + iCamera->Release(); // Release Camera HW. + iReserved = EFalse; + iVideoPrepared = EFalse; + iVideoOpened = EFalse; + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::Release"); + } + + +void CEngineVideoRecording::PowerOn() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::PowerOn"); + + if ( iReserved && !iPowerOn ) + { + iCamera->PowerOn(); + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::PowerOn"); + } + + +void CEngineVideoRecording::PowerOff() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::PowerOff"); + + if ( iPowerOn ) + { + iCamera->PowerOff(); + iPowerOn = EFalse; + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::PowerOff"); + } + + +void CEngineVideoRecording::SetZoomModeL( + TZoomMode aZoomMode ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::SetZoomModeL"); + + // Currently supporting digital and optical zooms, not EZoomModeOpticalDigital. + if ( ( aZoomMode != EZoomModeDigital ) && ( aZoomMode != EZoomModeOptical ) ) + { + HTI_LOG_FORMAT("CEngineVideoRecording::SetZoomModeL leaving KErrNotSupported, aZoomMode=%d", aZoomMode ); + User::Leave( KErrNotSupported ); + } + + iZoomMode = aZoomMode; + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetZoomModeL"); + } + + +CEngineVideoRecording::TZoomMode CEngineVideoRecording::ZoomMode() const + { + HTI_LOG_TEXT("CEngineVideoRecording::ZoomMode"); + + return iZoomMode; + } + + +void CEngineVideoRecording::SetZoomValueL( + TInt aZoomValue ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::SetZoomValueL"); + + CheckPowerL(); + + switch ( iZoomMode ) + { + case EZoomModeDigital: + // Leave if zoom factor is out of range. + if ( ( aZoomValue < 0 ) || + ( aZoomValue > iInfo->iMaxDigitalZoom ) ) + { + HTI_LOG_FORMAT("CEngineVideoRecording::SetZoomValueL leaving KErrArgument, aZoomValue=%d", aZoomValue ); + HTI_LOG_FORMAT("The min digital zool value is 0, the max is %d", iInfo->iMaxDigitalZoom); + User::Leave( KErrArgument ); + } + // Set DIGITAL zoom value. + iCamera->SetDigitalZoomFactorL( aZoomValue ); + iZoomValue = aZoomValue; + break; + case EZoomModeOptical: + // Leave if zoom factor is out of range. + if ( ( aZoomValue < iInfo->iMinZoom ) || + ( aZoomValue > iInfo->iMaxZoom ) ) + { + HTI_LOG_FORMAT("CEngineVideoRecording::SetZoomValueL leaving KErrArgument, aZoomValue=%d", aZoomValue ); + HTI_LOG_FORMAT("The max optical zoom value is %d", iInfo->iMaxZoom); + HTI_LOG_FORMAT("The min optical zoom value is %d", iInfo->iMinZoom); + if(iInfo->iMinZoom == iInfo->iMaxZoom) + { + User::Leave(KErrNotSupported); + } + User::Leave( KErrArgument ); + } + // Set OPTICAL zoom value. + iCamera->SetZoomFactorL( aZoomValue ); + iZoomValue = aZoomValue; + break; + default: + // EZoomModeOpticalDigital not supported + HTI_LOG_FORMAT("CEngineVideoRecording::SetZoomValueL leaving KErrNotSupported, iZoomMode=%d", iZoomMode ); + User::Leave( KErrNotSupported ); + break; + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetZoomValueL"); + } + + +TInt CEngineVideoRecording::ZoomValue() const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::ZoomValue"); + + TInt zoomValue( 0 ); + if ( iPowerOn ) + { + switch ( iZoomMode ) + { + case EZoomModeDigital: + zoomValue = iCamera->DigitalZoomFactor(); + break; + case EZoomModeOptical: + zoomValue = iCamera->ZoomFactor(); + break; + default: + // EZoomModeOpticalDigital not supported + break; + } + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::ZoomValue"); + return zoomValue; + } + +TInt CEngineVideoRecording::MaxZoomValue() const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::MaxZoomValue"); + + TInt zoomValue( 0 ); + if ( iPowerOn ) + { + switch ( iZoomMode ) + { + case EZoomModeDigital: + zoomValue = iInfo->iMaxDigitalZoom; + break; + case EZoomModeOptical: + zoomValue = iInfo->iMaxZoom; + break; + default: + // EZoomModeOpticalDigital not supported + break; + } + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::MaxZoomValue"); + return zoomValue; + } + +TInt CEngineVideoRecording::MinZoomValue() const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::MinZoomValue"); + + TInt zoomValue( 0 ); + if ( iPowerOn ) + { + switch ( iZoomMode ) + { + case EZoomModeDigital: + zoomValue = 0; + break; + case EZoomModeOptical: + zoomValue = iInfo->iMinZoom; + break; + default: + // EZoomModeOpticalDigital not supported + break; + } + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::MinZoomValue"); + return zoomValue; + } +void CEngineVideoRecording::SetBrightnessL( + TInt aBrightness ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::SetBrightnessL"); + // Leave if not supported. + if ( !( iInfo->iOptionsSupported & TCameraInfo::EBrightnessSupported ) ) + { + HTI_LOG_FORMAT("CEngineVideoRecording::SetBrightnessL leaving KErrNotSupported, aBrightness=%d", aBrightness ); + User::Leave( KErrNotSupported ); + } + + CheckPowerL(); + + iCamera->SetBrightnessL( aBrightness ); + iBrightness = aBrightness; + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetBrightnessL"); + } + + +TInt CEngineVideoRecording::Brightness() const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::Brightness"); + + TInt brightness( 0 ); + if ( iPowerOn && ( iInfo->iOptionsSupported & TCameraInfo::EBrightnessSupported ) ) + { + brightness = iCamera->Brightness(); + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::Brightness"); + return brightness; + } + + +void CEngineVideoRecording::SetContrastL( + TInt aContrast ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::SetContrastL"); + + // Leave if not supported. + if ( !( iInfo->iOptionsSupported & TCameraInfo::EContrastSupported ) ) + { + HTI_LOG_FORMAT("CEngineVideoRecording::SetContrastL leaving KErrNotSupported, aContrast=%d", aContrast ); + User::Leave( KErrNotSupported ); + } + + CheckPowerL(); + + iCamera->SetContrastL( aContrast ); + iContrast = aContrast; + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetContrastL"); + } + + +TInt CEngineVideoRecording::Contrast() const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::Contrast"); + TInt contrast( 0 ); + if ( iPowerOn && ( iInfo->iOptionsSupported & TCameraInfo::EContrastSupported ) ) + { + contrast = iCamera->Contrast(); + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::Contrast"); + return contrast; + } + + +void CEngineVideoRecording::SetExposureModeL( + CCamera::TExposure aExposureMode ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::SetExposureModeL"); + + // Leave is requested exposure mode is not supported, + // EExposureAuto should be always supported. + if ( ( ( aExposureMode != CCamera::EExposureAuto ) && + !( aExposureMode & iInfo->iExposureModesSupported ) ) || + ( aExposureMode < 0 ) ) + { + HTI_LOG_FORMAT("CEngineVideoRecording::SetExposureModeL leaving KErrNotSupported, aExposureMode=%d", aExposureMode ); + User::Leave( KErrNotSupported ); + } + + CheckPowerL(); + + iCamera->SetExposureL( aExposureMode ); + iExposureMode = aExposureMode; + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetExposureModeL"); + } + + +CCamera::TExposure CEngineVideoRecording::ExposureMode() const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::ExposureMode"); + + CCamera::TExposure exposureMode( CCamera::EExposureAuto ); + if ( iPowerOn ) + { + exposureMode = iCamera->Exposure(); + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::ExposureMode"); + return exposureMode; + } + + +void CEngineVideoRecording::SetWhiteBalanceModeL( + CCamera::TWhiteBalance aWhiteBalanceMode ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::SetWhiteBalanceModeL"); + + // Leave is requested WB mode is not supported. + // EWBAuto is always supported. + if ( ( ( aWhiteBalanceMode != CCamera::EWBAuto ) && + !( aWhiteBalanceMode & iInfo->iWhiteBalanceModesSupported ) ) || + ( aWhiteBalanceMode < 0 ) ) + { + HTI_LOG_FORMAT("CEngineVideoRecording::SetWhiteBalanceModeL leaving KErrNotSupported, aWhiteBalanceMode=%d", aWhiteBalanceMode ); + User::Leave( KErrNotSupported ); + } + + CheckPowerL(); + + iCamera->SetWhiteBalanceL( aWhiteBalanceMode ); + iWhiteBalanceMode = aWhiteBalanceMode; + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetWhiteBalanceModeL"); + } + + +CCamera::TWhiteBalance CEngineVideoRecording::WhiteBalanceMode() const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::WhiteBalanceMode"); + + CCamera::TWhiteBalance whiteBalanceMode( CCamera::EWBAuto ); + if ( iPowerOn ) + { + whiteBalanceMode = iCamera->WhiteBalance(); + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::WhiteBalanceMode"); + return whiteBalanceMode; + } + + +void CEngineVideoRecording::SetFlashModeL( + CCamera::TFlash aFlashMode ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::SetFlashModeL"); + + // Leave is requested flash mode is not supported. + // EFlashNone is always supported. + if ( ( ( aFlashMode != CCamera::EFlashNone ) && + !( aFlashMode & iInfo->iFlashModesSupported ) ) || + ( aFlashMode < 0 ) ) + { + HTI_LOG_FORMAT("CEngineVideoRecording::SetFlashModeL leaving KErrNotSupported, aFlashMode=%d", aFlashMode ); + User::Leave( KErrNotSupported ); + } + + CheckPowerL(); + + iCamera->SetFlashL( aFlashMode ); + iFlashMode = aFlashMode; + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetFlashModeL"); + } + + +CCamera::TFlash CEngineVideoRecording::FlashMode() const + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::FlashMode"); + + CCamera::TFlash flashMode( CCamera::EFlashNone ); + if ( iPowerOn ) + { + flashMode = iCamera->Flash(); + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::FlashMode"); + return flashMode; + } + + +void CEngineVideoRecording::ResetToDefaultsL() + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::ResetToDefaultsL"); + + SetExposureModeL(); + SetWhiteBalanceModeL(); + SetZoomModeL(); + SetZoomValueL(); + SetFlashModeL(); + + // Reset this setting only if it is supported by Camera API. + if ( iInfo->iOptionsSupported & TCameraInfo::EBrightnessSupported ) + { + SetBrightnessL(); + } + + // Reset this setting only if it is supported by Camera API. + if ( iInfo->iOptionsSupported & TCameraInfo::EContrastSupported ) + { + SetContrastL(); + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::ResetToDefaultsL"); + } + +void CEngineVideoRecording::CheckPowerL() + { + if ( !iPowerOn ) + { + HTI_LOG_TEXT("CEngineVideoRecording::CheckPowerL() leaving KErrNotReady (iPowerOn)"); + User::Leave( KErrNotReady ); + } + } + +void CEngineVideoRecording::MvruoOpenComplete(TInt aError) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::MvruoOpenComplete"); + + HTI_LOG_FORMAT("aError = %d", aError); + if ( aError == KErrNone ) + { + // To get default video audio bit rate. + TRAP( aError, { iVideoAudioBitRate = iVideoRecorder->AudioBitRateL(); } ); + // (ignore possible error) + // Prepare settings only if no errors in opening. + TRAP( aError, PrepareVideoSettingsL() ); + if ( aError != KErrNone ) + { + iVideoRecordingObserver->MevroVideoPrepareComplete( aError ); + } + } + else + { + iVideoRecordingObserver->MevroVideoPrepareComplete( aError ); + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::MvruoOpenComplete"); + } + +void CEngineVideoRecording::MvruoPrepareComplete(TInt aError) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::MvruoPrepareComplete"); + + HTI_LOG_FORMAT("aError = %d", aError); + if ( iVideoOpened && ( aError == KErrNone ) ) + { + iVideoPrepared = ETrue; // Later errors with settings after + // do not change the value. + } + + if ( iPrepPars ) + { + iPrepPars = EFalse; + // If no error, then fresh parameters are valid. + // Otherwise, old parameters are kept. + if ( aError == KErrNone ) + { + *iVideoFrameSize = *iVideoFrameSizePrep; + iVideoFrameRate = iVideoFrameRatePrep; + iVideoBitRate = iVideoBitRatePrep; + iVideoAudioEnabled = iVideoAudioEnabledPrep; + iVideoAudioBitRate = iVideoAudioBitRatePrep; + iMaxClipSizeInBytes = iMaxClipSizeInBytesPrep; + } + else + { + *iVideoFrameSizePrep = *iVideoFrameSize; + iVideoFrameRatePrep = iVideoFrameRate; + iVideoBitRatePrep = iVideoBitRate; + iVideoAudioEnabledPrep = iVideoAudioEnabled; + iVideoAudioBitRatePrep = iVideoAudioBitRate; + iMaxClipSizeInBytesPrep = iMaxClipSizeInBytes; + } + } + + iVideoRecordingObserver->MevroVideoPrepareComplete( aError ); + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::MvruoPrepareComplete"); + } + +void CEngineVideoRecording::MvruoRecordComplete(TInt aError) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::MvruoRecordComplete"); + + HTI_LOG_FORMAT("aError = %d", aError); + + // Recording stopped: can't be paused anymore. + iVideoRecordingPaused = EFalse; + + if ( iVideoRecordingRunning) // To ensure that McaeoVideoRecordingComplete + { // gets called just once per recording. + iVideoRecordingRunning = EFalse; + + // Close video recording always in error case. Otherwise the camcorder plugin would + // be in indeterminated state. + // The code KErrCompletion means that video reocording has been completed by timer + if ( aError && aError != KErrCompletion && aError != KErrDiskFull ) + { + CloseVideoRecording(); + } + + iVideoRecordingObserver->MevroVideoRecordingComplete( aError ); + } + + HTI_LOG_FUNC_IN("CEngineVideoRecording::MvruoRecordComplete"); + } + +void CEngineVideoRecording::MvruoEvent(const TMMFEvent& /*aEvent*/) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::MvruoEvent"); + HTI_LOG_FUNC_OUT("CEngineVideoRecording::MvruoEvent"); + } + +void CEngineVideoRecording::ReserveComplete( + TInt aError ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::ReserveComplete"); + + if ( aError == KErrNone ) + { + iReserved = ETrue; + PowerOn(); + } + else + { + iVideoRecordingObserver->MevroInitComplete( aError ); + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::ReserveComplete"); + } + + +void CEngineVideoRecording::PowerOnComplete( + TInt aError ) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::PowerOnComplete"); + + if ( aError == KErrNone ) + { + iPowerOn = ETrue; + } + + iVideoRecordingObserver->MevroInitComplete( aError ); + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::PowerOnComplete"); + } + +void CEngineVideoRecording::HandleEvent( const TECAMEvent& aEvent) + { + HTI_LOG_FUNC_IN("CEngineVideoRecording::HandleEvent"); + if (aEvent.iEventType == KUidECamEventCameraNoLongerReserved) + { + HTI_LOG_TEXT("CEngineVideoRecording::HandleEvent() KUidECamEventCameraNoLongerReserved"); + iPowerOn = EFalse; + iReserved = EFalse; + iVideoPrepared = EFalse; + iVideoOpened = EFalse; + iVideoRecordingObserver->MevroInitComplete(KErrInUse); // Tell the client that other application has taken the camera + } + else if (aEvent.iEventType == KUidECamEventPowerOnComplete) + { + HTI_LOG_TEXT("CEngineVideoRecording::HandleEvent() KUidECamEventPowerOnComplete"); + PowerOnComplete(aEvent.iErrorCode); + } + else if (aEvent.iEventType == KUidECamEventReserveComplete) + { + HTI_LOG_TEXT("CEngineVideoRecording::HandleEvent() KUidECamEventReserveComplete"); + ReserveComplete(aEvent.iErrorCode); + } + + HTI_LOG_FUNC_OUT("CEngineVideoRecording::HandleEvent"); + } diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/src/VideoRecordingQualityLevels.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/src/VideoRecordingQualityLevels.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -0,0 +1,144 @@ +/* +* Copyright (c) 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: Engine video quality level and container. +* +*/ + + +#include +#include + + +#include "VideoRecordingQualityLevels.h" + + +// CONSTANTS +const TInt KQualityLevelArrayGranularity = 3; + +CVideoRecordingQualityLevels::CVideoRecordingQualityLevels() + { + // TODO Auto-generated constructor stub + + } + +CVideoRecordingQualityLevels::~CVideoRecordingQualityLevels() + { + delete iQualityLevels; + } + +void CVideoRecordingQualityLevels::ConstructL() + { + + iQualityLevels = new( ELeave ) CArrayFixFlat( KQualityLevelArrayGranularity ); + + } + +CVideoRecordingQualityLevels* CVideoRecordingQualityLevels::NewL() + { + + CVideoRecordingQualityLevels* self = new( ELeave ) CVideoRecordingQualityLevels; + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + + return self; + } + +TInt CVideoRecordingQualityLevels::InitDefaultsL() + { + + // Delete all elements from the array and + // free the memory allocated to the array buffer. + iQualityLevels->Reset(); + + // Initialize hardcoded default quality levels. + + TSize size; + + CVideoRecordingQualityLevel* videoQualityLevel = new( ELeave ) CVideoRecordingQualityLevel; + CleanupStack::PushL( videoQualityLevel ); + + // Level 0: + size.SetSize( KImgWidthQCIF, KImgHeightQCIF ); + videoQualityLevel->iFrameSize = size; + videoQualityLevel->iFrameRate = 15.0; // Frames per second. Basically HW dependent. + videoQualityLevel->iBitRate = 64000; // Bits per second. Basically HW dependent. + videoQualityLevel->iAudioEnabled = EFalse; + videoQualityLevel->iAudioBitRate = 12200; // Bits per second. Basically HW dependent. + videoQualityLevel->iMimeType.Copy( KVideoMimeType ); + videoQualityLevel->iPreferredSupplier.Copy( KPreferredSupplier ); + videoQualityLevel->iVideoType.Copy( KVideoType ); + videoQualityLevel->iAudioType.Copy( KAudioType ); + videoQualityLevel->iStorageRate = 78000; // That many bits per second to store. Estimate only + + iQualityLevels->AppendL( *videoQualityLevel ); + + // Level 1: + size.SetSize( KImgWidthSubQCIF, KImgHeightSubQCIF ); + videoQualityLevel->iFrameSize = size; + videoQualityLevel->iFrameRate = 15.0; // Frames per second. Basically HW dependent. + videoQualityLevel->iBitRate = 60000; // Bits per second. Basically HW dependent. + videoQualityLevel->iAudioEnabled = EFalse; + videoQualityLevel->iAudioBitRate = 6700; // Bits per second. Basically HW dependent. + videoQualityLevel->iMimeType.Copy( KVideoMimeType ); + videoQualityLevel->iPreferredSupplier.Copy( KPreferredSupplier ); + videoQualityLevel->iVideoType.Copy( KVideoType ); + videoQualityLevel->iAudioType.Copy( KAudioType ); + videoQualityLevel->iStorageRate = 68000; // That many bits per second to store. Estimate only + + iQualityLevels->AppendL( *videoQualityLevel ); + + // Level 2: + size.SetSize( KImgWidthSubQCIF, KImgHeightSubQCIF ); + videoQualityLevel->iFrameSize = size; + videoQualityLevel->iFrameRate = 5.0; // Frames per second. Basically HW dependent. + videoQualityLevel->iBitRate = 40000; // Bits per second. Basically HW dependent. + videoQualityLevel->iAudioEnabled = EFalse; + videoQualityLevel->iAudioBitRate = 5150; // Bits per second. Basically HW dependent. + videoQualityLevel->iMimeType.Copy( KVideoMimeType ); + videoQualityLevel->iPreferredSupplier.Copy( KPreferredSupplier ); + videoQualityLevel->iVideoType.Copy( KVideoType ); + videoQualityLevel->iAudioType.Copy( KAudioType ); + videoQualityLevel->iStorageRate = 47000; // That many bits per second to store. Estimate only + + iQualityLevels->AppendL( *videoQualityLevel ); + + CleanupStack::PopAndDestroy( videoQualityLevel ); + + + return iQualityLevels->Count(); + } + + +// ----------------------------------------------------------------------------- +// CCaeVideoQualityLevelsCont::Count +// ----------------------------------------------------------------------------- +// +TInt CVideoRecordingQualityLevels::Count() const + { + return iQualityLevels->Count(); + } + + +// ----------------------------------------------------------------------------- +// CCaeVideoQualityLevelsCont::At +// ----------------------------------------------------------------------------- +// +CVideoRecordingQualityLevel& CVideoRecordingQualityLevels::At( + TInt aIndex ) const + { + return iQualityLevels->At( aIndex ); + } diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiServicePlugins/HtiCameraServicePlugin/group/HtiCameraServicePlugin.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/group/HtiCameraServicePlugin.mmp Tue Jun 01 14:40:54 2010 +0300 @@ -0,0 +1,55 @@ +/* +* Copyright (c) 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: HTI service plugin for controlling audio playback. +* +*/ + + +#include + +TARGET HtiCameraServicePlugin.dll +TARGETTYPE PLUGIN + +// ECom Dll recognition UID followed by the unique UID for this dll +UID 0x10009D8D 0x2002EA9D + +VENDORID 0x101FB657 + +CAPABILITY ALL -TCB + +SOURCEPATH ../src +SOURCE proxy.cpp +SOURCE HtiCameraServicePlugin.cpp + +SOURCE ../engine/src/EngineVideoRecording.cpp +SOURCE ../engine/src/VideoRecordingQualityLevels.cpp + +USERINCLUDE ../inc +USERINCLUDE ../engine/inc +APP_LAYER_SYSTEMINCLUDE + +START RESOURCE ../data/2002EA9D.rss +TARGET HtiCameraServicePlugin.rsc +END + +LIBRARY ecom.lib +LIBRARY efsrv.lib +LIBRARY euser.lib +LIBRARY flogger.lib +LIBRARY mediaclientvideo.lib +LIBRARY MMFControllerFramework.lib +LIBRARY ECAM.lib +SMPSAFE + +// End of file \ No newline at end of file diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiServicePlugins/HtiCameraServicePlugin/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/group/bld.inf Tue Jun 01 14:40:54 2010 +0300 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 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: Build information file for HtiAudioServicePlugin +* +*/ + + + +PRJ_PLATFORMS + +PRJ_EXPORTS + +PRJ_MMPFILES +HtiCameraServicePlugin.mmp + +// End of File diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiServicePlugins/HtiCameraServicePlugin/inc/HtiCameraServicePlugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/inc/HtiCameraServicePlugin.h Tue Jun 01 14:40:54 2010 +0300 @@ -0,0 +1,203 @@ +/* +* Copyright (c) 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: Defines the ECom plugin for HTI camera service. +* +*/ + + + +#ifndef HTICAMERASERVICEPLUGIN_H +#define HTICAMERASERVICEPLUGIN_H + +// INCLUDES +#include +#include "EngineVideoRecording.h" +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CEngineVideoRecording; +class MEngineVideoRecordingObserver; + +// CLASS DECLARATION + +/** +* The ECom plugin for HTI camera service. +* +*/ +class CHtiCameraServicePlugin : public CHTIServicePluginInterface, + public MEngineVideoRecordingObserver + { + + protected: + // commands + enum TCommands + { + ECmdInit = 0x01, + ECmdPrepareVideoRecording = 0x02, + ECmdStartVideoRecording = 0x05, + ECmdPausingVideoRecording = 0x06, + ECmdResumeVideoRecording = 0x07, + ECmdStopVideoRecording = 0x08, + ECmdCloseVideoRecording = 0x09, + ECmdGetZoom = 0x0a, + ECmdSetZoom = 0x0b, + + + EResultOk = 0xFF // only for response message + }; + + + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CHtiCameraServicePlugin* NewL(); + + public: // New functions + + public: + // Functions from base classes + + /** + * From CHTIServicePluginInterface + * Called by the HTI Framework when sending message to this service. + * @param aMessage message body destinated to a servive + * @param aPriority message priority + */ + void ProcessMessageL(const TDesC8& aMessage, + THtiMessagePriority aPriority); + + /** + * From CHTIServicePluginInterface + * Indicates to HTI Framework whether the plugin is ready to process + * a new message or if it's busy processing previous message. + */ + TBool IsBusy(); + + + protected: // New functions + + /** + * C++ default constructor. + */ + CHtiCameraServicePlugin(); + + /** + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * Destructor. + */ + virtual ~CHtiCameraServicePlugin(); + + protected: + // Functions from base classes + + /** + * From MEngineVideoRecordingObserver + * Called asynchronously when CEngineVideoRecording::Init(), CCaeEngine::CEngineVideoRecording(), + * or CEngineVideoRecording::Reserve() completes. + * Indicates if Video Recording Engine is ready for operation, + * the camera is reserved and its power is switched on. + * @param aError Error code KErrNone to indicate success or a standard Symbian OS error code. + * @return void + */ + virtual void MevroInitComplete( TInt aError ); + + /** + * From MEngineVideoRecordingObserver + * Called asynchronously when preparing of video recording completes + * after PrepareVideoRecordingL() has been called. + * May be called second time with an error code after a successful preparation + * if video recording loses its prepared state for some reason (e.g. audio HW + * is reserved for some other application). + * @param aError Error code KErrNone to indicate success or a standard Symbian OS error code. + * @return void + */ + virtual void MevroVideoPrepareComplete(TInt aError); + + /** + * From MEngineVideoRecordingObserver + * Called (possibly asynchronously) when video recording is running + * after CEngineVideoRecording::StartVideoRecording() or + * CEngineVideoRecording::ResumeVideoRecording() has been called. + * @param aError Error code KErrNone to indicate success or a standard Symbian OS error code. + * @return void + */ + virtual void MevroVideoRecordingOn(TInt aError); + + /** + * From MEngineVideoRecordingObserver + * Called (possibly asynchronously) when video recording is paused after + * CEngineVideoRecording::PauseVideoRecording() has been called. + * @param aError Error code KErrNone to indicate success or a standard Symbian OS error code. + * @return void + */ + virtual void MevroVideoRecordingPaused(TInt aError); + + /** + * From MEngineVideoRecordingObserver + * Called (possibly asynchronously) when video recording is completed + * after CEngineVideoRecording::StopVideoRecording() has been called or + * recording has been completed for some other reason. + * @param aError Error code KErrNone to indicate success or a standard Symbian OS error code. + * if aError == KErrDiskFull, then disk storage is full. + * if aError == KErrCompletion, then clip max size was reached. + * @return void + */ + virtual void MevroVideoRecordingComplete(TInt aError); + + private: + void HandleInitCmdL(const TDesC8& aData); + void HandlePrepareVideoRecordingCmdL(const TDesC8& aData); + void HandleStartVideoRecordingCmdL( const TDesC8& aData ); + void HandlePausingVideoRecordingCmdL( const TDesC8& aData ); + void HandleResumeVideoRecordingCmdL( const TDesC8& aData ); + void HandleStopVideoRecordingCmdL( const TDesC8& aData ); + void HandleCloseVideoRecordingCmdL( const TDesC8& aData ); + void HandleGetZoomCmdL( const TDesC8& aData ); + void HandleSetZoomCmdL( const TDesC8& aData ); + + void SendOkMsgL( const TDesC8& aData ); + void SendErrorMessageL( TInt aError, const TDesC8& aDescription ); + + TInt ParseString( const TDesC8& aRequest, + TInt aOffset, TDes& aResult ); + + public: // Data + + protected: // Data + + private: // Data + // Flag telling if the service is busy processing a message + TBool iIsBusy; + + TInt iError; + CEngineVideoRecording* iVideoRecordingEngine; + CActiveSchedulerWait* iWaiter; + + }; + +#endif // HTICAMERASERVICEPLUGIN_H + +// End of File diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiServicePlugins/HtiCameraServicePlugin/src/HtiCameraServicePlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/src/HtiCameraServicePlugin.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -0,0 +1,550 @@ +/* +* Copyright (c) 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: Implements the ECom plugin for HTI camera +* service. +* +*/ + + + +// INCLUDE FILES +#include +#include + + +#include "HtiCameraServicePlugin.h" + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS +const static TUid KCameraServiceUid = { 0x2002EA9E }; + + + +// NOTE: Max length for error description is defined +// in HtiDispatcherInterface.h (currently 118). + +_LIT8( KErrorNoCommand, "ERROR: No command given" ); +_LIT8( KErrorUnknownCmd, "ERROR: Unknown Camera Service command" ); +_LIT8( KErrorInitFailed, "ERROR: Failed to init"); +_LIT8( KErrInvalidateParameters, "ERROR: Invalidate parameters"); +_LIT8( KErrQualityLevel, "ERROR: Invalidate quality level"); +_LIT8( KErrorPrepareVideoRecordingFailed, "ERROR: Prepare video recording failed"); +_LIT8( KErrorStartVideoRecordingFailed, "ERROR: Start video recording failed"); +_LIT8( KErrorPausingVideoRecordingFailed, "ERROR: Pausing video recording failed"); +_LIT8( KErrorResumeVideoRecordingFailed, "ERROR: Resume video recording failed"); +_LIT8( KErrorStopVideoRecordingFailed, "ERROR: Stop video recording failed"); +_LIT8( KErrorSetZoomModeFailed, "ERROR: Set zoom mode failed"); +_LIT8( KErrorSetZoomValueFailed, "ERROR: Set zoom value failed"); + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CHtiCameraServicePlugin::CHtiCameraServicePlugin +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CHtiCameraServicePlugin::CHtiCameraServicePlugin():iIsBusy(EFalse), iError(0), + iVideoRecordingEngine(NULL), iWaiter(NULL) + { + } + + +// ----------------------------------------------------------------------------- +// CHtiCameraServicePlugin::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CHtiCameraServicePlugin::ConstructL() + { + HTI_LOG_TEXT( "CHtiCameraServicePlugin::ConstructL" ); + iVideoRecordingEngine = CEngineVideoRecording::NewL(*this, 0); + iWaiter = new ( ELeave ) CActiveSchedulerWait; + } + + +// ----------------------------------------------------------------------------- +// CHtiCameraServicePlugin::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CHtiCameraServicePlugin* CHtiCameraServicePlugin::NewL() + { + CHtiCameraServicePlugin* self = new (ELeave) CHtiCameraServicePlugin; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + + +// Destructor +CHtiCameraServicePlugin::~CHtiCameraServicePlugin() + { + delete iVideoRecordingEngine; + iVideoRecordingEngine = NULL; + + delete iWaiter; + iWaiter = NULL; + } + + +// ----------------------------------------------------------------------------- +// CHtiCameraServicePlugin::ProcessMessageL +// ----------------------------------------------------------------------------- +// +void CHtiCameraServicePlugin::ProcessMessageL( const TDesC8& aMessage, + THtiMessagePriority /*aPriority*/ ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::ProcessMessageL" ); + HTI_LOG_FORMAT( "Message length = %d", aMessage.Length() ); + + if ( iIsBusy ) + { + HTI_LOG_TEXT( "Plugin is busy - leaving" ); + User::Leave( KErrInUse ); + } + + // Will be set to EFalse in the SendResponseMsg or SendErrorResponseMsg + // methods when the response has been successfully sent and the plugin is + // ready for next message. + iIsBusy = ETrue; + + if ( aMessage.Length() < 1 ) + { + SendErrorMessageL( KErrArgument, KErrorNoCommand ); + return; + } + + TUint8 command = aMessage.Ptr()[0]; + TInt err = KErrNone; + + switch (command) + { + case ECmdInit: + TRAP(err, HandleInitCmdL(aMessage.Right( aMessage.Length() - 1 ))); + break; + case ECmdPrepareVideoRecording: + TRAP(err, HandlePrepareVideoRecordingCmdL(aMessage.Right( aMessage.Length() - 1 ))); + break; + case ECmdStartVideoRecording: + TRAP(err, HandleStartVideoRecordingCmdL(aMessage.Right( aMessage.Length() - 1 ))); + break; + case ECmdPausingVideoRecording: + TRAP(err, HandlePausingVideoRecordingCmdL(aMessage.Right( aMessage.Length() - 1 ))); + break; + case ECmdResumeVideoRecording: + TRAP(err, HandleResumeVideoRecordingCmdL(aMessage.Right( aMessage.Length() - 1 ))); + break; + case ECmdStopVideoRecording: + TRAP(err, HandleStopVideoRecordingCmdL(aMessage.Right( aMessage.Length() - 1 ))); + break; + case ECmdCloseVideoRecording: + TRAP(err, HandleCloseVideoRecordingCmdL(aMessage.Right( aMessage.Length() - 1 ))); + break; + case ECmdGetZoom: + TRAP(err, HandleGetZoomCmdL(aMessage.Right( aMessage.Length() - 1 ))); + break; + case ECmdSetZoom: + TRAP(err, HandleSetZoomCmdL(aMessage.Right( aMessage.Length() - 1 ))); + break; + default: + TRAP(err, SendErrorMessageL(KErrArgument, KErrorUnknownCmd)); + break; + } + + if(err != KErrNone) + { + iIsBusy = EFalse; + User::Leave( err ); + } + + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::ProcessMessageL" ); + } + +void CHtiCameraServicePlugin::HandleInitCmdL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::HandleInitCmdL" ); + if(aData.Length() != 0) + { + SendErrorMessageL(KErrArgument, KErrInvalidateParameters); + return; + } + + HTI_LOG_TEXT("Initializes Camera Application Engine"); + iVideoRecordingEngine->InitL(); + iWaiter->Start(); + if(iError != KErrNone) + { + SendErrorMessageL(iError, KErrorInitFailed); + } + else + { + HTI_LOG_TEXT("Initializes video recording"); + iVideoRecordingEngine->InitVideoRecorderL(); + + SendOkMsgL(KNullDesC8); + } + + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::HandleInitCmdL" ); + } + + +void CHtiCameraServicePlugin::HandlePrepareVideoRecordingCmdL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::HandlePrepareVideoRecordingCmdL" ); + if(aData.Length() < 2 || aData[1] != aData.Length() -2) + { + SendErrorMessageL(KErrArgument, KErrInvalidateParameters); + return; + } + + TInt qualityLevelIndex = aData[0]; + if(qualityLevelIndex < 0 || qualityLevelIndex > iVideoRecordingEngine->VideoQualityCount() -1) + { + SendErrorMessageL(KErrOverflow, KErrQualityLevel); + return; + } + + TBuf<255> filePath; + TInt nextOffset = ParseString( aData, 1, filePath ); + if ( filePath.Length() < 1 || nextOffset < 0 ) + { + SendErrorMessageL(KErrArgument, KErrInvalidateParameters); + return; + } + + HTI_LOG_FORMAT("Set video recording file name: %S", &filePath); + iVideoRecordingEngine->SetVideoRecordingFileNameL(filePath); + + HTI_LOG_FORMAT("Prepare video recording with quality level index: %d", qualityLevelIndex); + iVideoRecordingEngine->PrepareVideoRecordingL(qualityLevelIndex); + + iWaiter->Start(); + if(iError != KErrNone) + { + SendErrorMessageL(iError, KErrorPrepareVideoRecordingFailed); + } + else + { + SendOkMsgL(KNullDesC8); + } + + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::HandlePrepareVideoRecordingCmdL" ); + } + +void CHtiCameraServicePlugin::HandleStartVideoRecordingCmdL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::HandleStartVideoRecordingCmdL" ); + if(aData.Length() != 0) + { + SendErrorMessageL(KErrArgument, KErrInvalidateParameters); + return; + } + + HTI_LOG_TEXT("Start video recording..."); + iVideoRecordingEngine->StartVideoRecording(); + + if(iError != KErrNone) + { + SendErrorMessageL(iError, KErrorStartVideoRecordingFailed); + } + else + { + SendOkMsgL(KNullDesC8); + } + + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::HandleStartVideoRecordingCmdL" ); + } + +void CHtiCameraServicePlugin::HandlePausingVideoRecordingCmdL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::HandlePausingVideoRecordingCmdL" ); + if(aData.Length() != 0) + { + SendErrorMessageL(KErrArgument, KErrInvalidateParameters); + return; + } + + HTI_LOG_TEXT("Pausing video recording"); + iVideoRecordingEngine->PauseVideoRecording(); + if(iError != KErrNone) + { + SendErrorMessageL(iError, KErrorPausingVideoRecordingFailed); + } + else + { + SendOkMsgL(KNullDesC8); + } + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::HandlePausingVideoRecordingCmdL" ); + } + +void CHtiCameraServicePlugin::HandleResumeVideoRecordingCmdL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::HandleResumeVideoRecordingCmdL" ); + if(aData.Length() != 0) + { + SendErrorMessageL(KErrArgument, KErrInvalidateParameters); + return; + } + + HTI_LOG_TEXT("Resume video recording..."); + iVideoRecordingEngine->ResumeVideoRecording(); + + if(iError != KErrNone) + { + SendErrorMessageL(iError, KErrorResumeVideoRecordingFailed); + } + else + { + SendOkMsgL(KNullDesC8); + } + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::HandleResumeVideoRecordingCmdL" ); + } + +void CHtiCameraServicePlugin::HandleStopVideoRecordingCmdL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::HandleStopVideoRecordingCmdL" ); + if(aData.Length() != 0) + { + SendErrorMessageL(KErrArgument, KErrInvalidateParameters); + return; + } + + HTI_LOG_TEXT("Stop video recording"); + iVideoRecordingEngine->StopVideoRecording(); + if(iError != KErrNone) + { + SendErrorMessageL(iError, KErrorStopVideoRecordingFailed); + } + else + { + SendOkMsgL(KNullDesC8); + } + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::HandleStopVideoRecordingCmdL" ); + } + +void CHtiCameraServicePlugin::HandleCloseVideoRecordingCmdL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::HandleCloseVideoRecordingCmdL" ); + if(aData.Length() != 0) + { + SendErrorMessageL(KErrArgument, KErrInvalidateParameters); + return; + } + + HTI_LOG_TEXT("Close video recording"); + iVideoRecordingEngine->CloseVideoRecording(); + SendOkMsgL(KNullDesC8); + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::HandleCloseVideoRecordingCmdL" ); + } + +void CHtiCameraServicePlugin::HandleGetZoomCmdL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::HandleGetZoomCmdL" ); + if(aData.Length() != 0) + { + SendErrorMessageL(KErrArgument, KErrInvalidateParameters); + return; + } + + TUint8 zoomMode = (TUint8)iVideoRecordingEngine->ZoomMode(); + HTI_LOG_FORMAT("Current zoom mode: %d", zoomMode); + + TUint32 zoomValue = iVideoRecordingEngine->ZoomValue(); + HTI_LOG_FORMAT("Current zoom value: %d", zoomValue); + + TUint32 zoomMinValue = iVideoRecordingEngine->MinZoomValue(); + HTI_LOG_FORMAT("Min zoom value: %d", zoomMinValue); + + TUint32 zoomMaxValue = iVideoRecordingEngine->MaxZoomValue(); + HTI_LOG_FORMAT("Max zoom value: %d", zoomMaxValue); + + TBuf8<13> buf; + buf.Append(zoomMode); + buf.Append((TUint8*)&zoomValue, 4); + buf.Append((TUint8*)&zoomMinValue, 4); + buf.Append((TUint8*)&zoomMaxValue, 4); + SendOkMsgL( buf ); + + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::HandleGetZoomCmdL" ); + } + +void CHtiCameraServicePlugin::HandleSetZoomCmdL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::HandleSetZoomCmdL" ); + if(aData.Length() != 5) + { + SendErrorMessageL(KErrArgument, KErrInvalidateParameters); + return; + } + + CEngineVideoRecording::TZoomMode zoomMode = (CEngineVideoRecording::TZoomMode)aData[0]; + HTI_LOG_FORMAT("Set zoom mode: %d", zoomMode); + TRAPD(err, iVideoRecordingEngine->SetZoomModeL(zoomMode)); + if(err != KErrNone) + { + SendErrorMessageL(err, KErrorSetZoomModeFailed); + } + else + { + TInt value = aData[1] + ( aData[2] << 8 ) + + ( aData[3] << 16 ) + + ( aData[4] << 24 ); + HTI_LOG_FORMAT("Set zoom value: %d", value); + TRAPD(err, iVideoRecordingEngine->SetZoomValueL(value)); + if(err != KErrNone) + { + SendErrorMessageL(err, KErrorSetZoomValueFailed); + } + else + { + SendOkMsgL(KNullDesC8); + } + } + + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::HandleSetZoomCmdL" ); + } + + +// ----------------------------------------------------------------------------- +// CHtiCameraServicePlugin::IsBusy +// ----------------------------------------------------------------------------- +// +TBool CHtiCameraServicePlugin::IsBusy() + { + return iIsBusy; + } + + +// ---------------------------------------------------------------------------- +void CHtiCameraServicePlugin::SendOkMsgL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::SendOkMsgL: Starting" ); + + User::LeaveIfNull( iDispatcher ); + + HBufC8* temp = HBufC8::NewL( aData.Length() + 1 ); + TPtr8 response = temp->Des(); + response.Append( ( TChar ) EResultOk ); + response.Append( aData ); + User::LeaveIfError( iDispatcher->DispatchOutgoingMessage( + temp, KCameraServiceUid ) ); + iIsBusy = EFalse; + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::SendOkMsgL: Done" ); + } + +// ---------------------------------------------------------------------------- +void CHtiCameraServicePlugin::SendErrorMessageL( TInt aError, const TDesC8& aDescription ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::SendErrorMessageL: Starting" ); + User::LeaveIfNull( iDispatcher ); + User::LeaveIfError( iDispatcher->DispatchOutgoingErrorMessage( + aError, aDescription, KCameraServiceUid ) ); + iIsBusy = EFalse; + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::SendErrorMessageL: Done" ); + } + +TInt CHtiCameraServicePlugin::ParseString( const TDesC8& aRequest, + TInt aOffset, + TDes& aResult ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::ParseString" ); + + // If offset outside the string return empty string + if ( aOffset >= aRequest.Size() ) + { + return aOffset; + } + + TInt length = aRequest[aOffset]; + HTI_LOG_FORMAT( "String length = %d", length ); + + // If length is zero return empty string + if ( length < 1 ) + { + return aOffset + 1; + } + + if ( length > aResult.MaxLength() ) + { + return KErrBadDescriptor; + } + + TInt nextOffset = length + aOffset + 1; + HTI_LOG_FORMAT( "Next offset = %d", nextOffset ); + HTI_LOG_FORMAT( "Request size = %d", aRequest.Size() ); + + if ( nextOffset > aRequest.Size() ) + { + return KErrArgument; + } + + aResult.Copy( aRequest.Mid( aOffset + 1, length ) ); + + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::ParseString" ); + return nextOffset; + } + +void CHtiCameraServicePlugin::MevroInitComplete( TInt aError ) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::MevroInitComplete" ); + HTI_LOG_FORMAT("aError = %d", aError); + iWaiter->AsyncStop(); + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::MevroInitComplete" ); + } + +void CHtiCameraServicePlugin::MevroVideoPrepareComplete(TInt aError) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::MevroVideoPrepareComplete" ); + HTI_LOG_FORMAT("aError = %d", aError); + iWaiter->AsyncStop(); + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::MevroVideoPrepareComplete" ); + } + +void CHtiCameraServicePlugin::MevroVideoRecordingOn(TInt aError) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::MevroVideoRecordingOn" ); + HTI_LOG_FORMAT("aError = %d", aError); + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::MevroVideoRecordingOn" ); + } + +void CHtiCameraServicePlugin::MevroVideoRecordingPaused(TInt aError) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::MevroVideoRecordingPaused" ); + HTI_LOG_FORMAT("aError = %d", aError); + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::MevroVideoRecordingPaused" ); + } + +void CHtiCameraServicePlugin::MevroVideoRecordingComplete(TInt aError) + { + HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::MevroVideoRecordingComplete" ); + HTI_LOG_FORMAT("aError = %d", aError); + HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::MevroVideoRecordingComplete" ); + } +// End of File diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/HtiServicePlugins/HtiCameraServicePlugin/src/proxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/src/proxy.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 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: Implementation proxy for the ECom plugin. +* +*/ + + + +// INCLUDE FILES +#include +#include +#include "HtiCameraServicePlugin.h" + +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( 0x2002EA9E, CHtiCameraServicePlugin::NewL ) + }; + +// Function used to return an instance of the proxy table. +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); + return ImplementationTable; + } diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/group/bld.inf --- a/htiui/group/bld.inf Fri May 14 16:10:39 2010 +0300 +++ b/htiui/group/bld.inf Tue Jun 01 14:40:54 2010 +0300 @@ -30,6 +30,7 @@ // Service plugins #include "../HtiServicePlugins/HtiAppServicePlugin/group/bld.inf" #include "../HtiServicePlugins/HtiAudioServicePlugin/group/bld.inf" +#include "../HtiServicePlugins/HtiCameraServicePlugin/group/bld.inf" #include "../HtiServicePlugins/HtiKeyEventServicePlugin/group/bld.inf" #include "../HtiServicePlugins/HtiMessagesServicePlugin/group/bld.inf" #include "../HtiServicePlugins/HtiPIMServicePlugin/group/bld.inf" diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/rom/htiui.iby --- a/htiui/rom/htiui.iby Fri May 14 16:10:39 2010 +0300 +++ b/htiui/rom/htiui.iby Tue Jun 01 14:40:54 2010 +0300 @@ -29,6 +29,7 @@ // Test service plug-ins ECOM_PLUGIN(HtiAudioServicePlugin.dll,HtiAudioServicePlugin.rsc) +ECOM_PLUGIN(HtiCameraServicePlugin.dll,HtiCameraServicePlugin.rsc) ECOM_PLUGIN(HtiKeyEventServicePlugin.dll,HtiKeyEventServicePlugin.rsc) ECOM_PLUGIN(HtiMessagesServicePlugin.dll,HtiMessagesServicePlugin.rsc) ECOM_PLUGIN(HtiPIMServicePlugin.dll,HtiPIMServicePlugin.rsc) diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/rom/htiui_10_1.iby --- a/htiui/rom/htiui_10_1.iby Fri May 14 16:10:39 2010 +0300 +++ b/htiui/rom/htiui_10_1.iby Tue Jun 01 14:40:54 2010 +0300 @@ -27,6 +27,7 @@ // Test service plug-ins ECOM_PLUGIN(HtiAudioServicePlugin.dll,HtiAudioServicePlugin.rsc) +ECOM_PLUGIN(HtiCameraServicePlugin.dll,HtiCameraServicePlugin.rsc) ECOM_PLUGIN(HtiKeyEventServicePlugin.dll,HtiKeyEventServicePlugin.rsc) ECOM_PLUGIN(HtiMessagesServicePlugin.dll,HtiMessagesServicePlugin.rsc) ECOM_PLUGIN(HtiPIMServicePlugin.dll,HtiPIMServicePlugin.rsc) diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/sis/HTI_S60-10_1.pkg --- a/htiui/sis/HTI_S60-10_1.pkg Fri May 14 16:10:39 2010 +0300 +++ b/htiui/sis/HTI_S60-10_1.pkg Tue Jun 01 14:40:54 2010 +0300 @@ -18,7 +18,7 @@ &EN ; Using UID of HtiFramework project -#{"HTI"},(0x1020DEB6),2,22,0 +#{"HTI"},(0x1020DEB6),2,23,0 ; Series60 product id for S60 5.2 [0x20022E6D], 0, 0, 0, {"Series60ProductID"} @@ -84,6 +84,8 @@ "\epoc32\data\Z\Resource\Plugins\HtiPIMServicePlugin.rsc" - "!:\Resource\Plugins\HtiPIMServicePlugin.rsc" "\epoc32\release\armv5\urel\HtiIpProxyServicePlugin.dll" - "!:\sys\bin\HtiIpProxyServicePlugin.dll" "\epoc32\data\Z\Resource\Plugins\HtiIpProxyServicePlugin.rsc" - "!:\Resource\Plugins\HtiIpProxyServicePlugin.rsc" +"\epoc32\release\armv5\urel\HtiCameraServicePlugin.dll" - "!:\sys\bin\HtiCameraServicePlugin.dll" +"\epoc32\data\Z\Resource\Plugins\HtiCameraServicePlugin.rsc" - "!:\Resource\Plugins\HtiCameraServicePlugin.rsc" ; File helper with capability ALL - for file operations to TCB folders "\epoc32\release\armv5\urel\HtiFileHlp.exe" - "!:\sys\bin\HtiFileHlp.exe" @@ -108,4 +110,4 @@ "\epoc32\release\armv5\urel\HtiStartupWait.dll" - "!:\sys\bin\HtiStartupWait.dll" ; Startup list resource file for starting HTIFramework.exe in device boot -"\epoc32\data\Z\private\101f875a\import\1020deb6.rsc" - "c:\private\101f875a\import\[1020deb6].rsc" +;"\epoc32\data\Z\private\101f875a\import\1020deb6.rsc" - "c:\private\101f875a\import\[1020deb6].rsc" diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/sis/HTI_S60-52.pkg --- a/htiui/sis/HTI_S60-52.pkg Fri May 14 16:10:39 2010 +0300 +++ b/htiui/sis/HTI_S60-52.pkg Tue Jun 01 14:40:54 2010 +0300 @@ -18,7 +18,7 @@ &EN ; Using UID of HtiFramework project -#{"HTI"},(0x1020DEB6),2,22,0 +#{"HTI"},(0x1020DEB6),2,23,0 ; Series60 product id for S60 5.2 [0x20022E6D], 0, 0, 0, {"Series60ProductID"} @@ -84,6 +84,8 @@ "\epoc32\data\Z\Resource\Plugins\HtiPIMServicePlugin.rsc" - "!:\Resource\Plugins\HtiPIMServicePlugin.rsc" "\epoc32\release\armv5\urel\HtiIpProxyServicePlugin.dll" - "!:\sys\bin\HtiIpProxyServicePlugin.dll" "\epoc32\data\Z\Resource\Plugins\HtiIpProxyServicePlugin.rsc" - "!:\Resource\Plugins\HtiIpProxyServicePlugin.rsc" +"\epoc32\release\armv5\urel\HtiCameraServicePlugin.dll" - "!:\sys\bin\HtiCameraServicePlugin.dll" +"\epoc32\data\Z\Resource\Plugins\HtiCameraServicePlugin.rsc" - "!:\Resource\Plugins\HtiCameraServicePlugin.rsc" ; Helper to add notepad memos "\epoc32\release\armv5\urel\HtiNpdHlp.exe" - "!:\sys\bin\HtiNpdHlp.exe" @@ -111,4 +113,4 @@ "\epoc32\release\armv5\urel\HtiStartupWait.dll" - "!:\sys\bin\HtiStartupWait.dll" ; Startup list resource file for starting HTIFramework.exe in device boot -"\epoc32\data\Z\private\101f875a\import\1020deb6.rsc" - "c:\private\101f875a\import\[1020deb6].rsc" +;"\epoc32\data\Z\private\101f875a\import\1020deb6.rsc" - "c:\private\101f875a\import\[1020deb6].rsc" diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/sis/HTI_S60_Upgrade-10_1.pkg --- a/htiui/sis/HTI_S60_Upgrade-10_1.pkg Fri May 14 16:10:39 2010 +0300 +++ b/htiui/sis/HTI_S60_Upgrade-10_1.pkg Tue Jun 01 14:40:54 2010 +0300 @@ -18,7 +18,7 @@ &EN ; Using UID of HtiFramework project -#{"HTI"},(0x1020DEB6),2,22,0,TYPE=SA,RU +#{"HTI"},(0x1020DEB6),2,23,0,TYPE=SA,RU ; Series60 product id for S60 5.2 [0x20022E6D], 0, 0, 0, {"Series60ProductID"} @@ -84,6 +84,8 @@ "\epoc32\data\Z\Resource\Plugins\HtiPIMServicePlugin.rsc" - "!:\Resource\Plugins\HtiPIMServicePlugin.rsc" "\epoc32\release\armv5\urel\HtiIpProxyServicePlugin.dll" - "!:\sys\bin\HtiIpProxyServicePlugin.dll" "\epoc32\data\Z\Resource\Plugins\HtiIpProxyServicePlugin.rsc" - "!:\Resource\Plugins\HtiIpProxyServicePlugin.rsc" +"\epoc32\release\armv5\urel\HtiCameraServicePlugin.dll" - "!:\sys\bin\HtiCameraServicePlugin.dll" +"\epoc32\data\Z\Resource\Plugins\HtiCameraServicePlugin.rsc" - "!:\Resource\Plugins\HtiCameraServicePlugin.rsc" ; File helper with capability ALL - for file operations to TCB folders "\epoc32\release\armv5\urel\HtiFileHlp.exe" - "!:\sys\bin\HtiFileHlp.exe" @@ -108,4 +110,4 @@ "\epoc32\release\armv5\urel\HtiStartupWait.dll" - "!:\sys\bin\HtiStartupWait.dll" ; Startup list resource file for starting HTIFramework.exe in device boot -"\epoc32\data\Z\private\101f875a\import\1020deb6.rsc" - "c:\private\101f875a\import\[1020deb6].rsc" +;"\epoc32\data\Z\private\101f875a\import\1020deb6.rsc" - "c:\private\101f875a\import\[1020deb6].rsc" diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/sis/HTI_S60_Upgrade-52.pkg --- a/htiui/sis/HTI_S60_Upgrade-52.pkg Fri May 14 16:10:39 2010 +0300 +++ b/htiui/sis/HTI_S60_Upgrade-52.pkg Tue Jun 01 14:40:54 2010 +0300 @@ -18,7 +18,7 @@ &EN ; Using UID of HtiFramework project -#{"HTI"},(0x1020DEB6),2,22,0,TYPE=SA,RU +#{"HTI"},(0x1020DEB6),2,23,0,TYPE=SA,RU ; Series60 product id for S60 5.2 [0x20022E6D], 0, 0, 0, {"Series60ProductID"} @@ -84,6 +84,8 @@ "\epoc32\data\Z\Resource\Plugins\HtiPIMServicePlugin.rsc" - "!:\Resource\Plugins\HtiPIMServicePlugin.rsc" "\epoc32\release\armv5\urel\HtiIpProxyServicePlugin.dll" - "!:\sys\bin\HtiIpProxyServicePlugin.dll" "\epoc32\data\Z\Resource\Plugins\HtiIpProxyServicePlugin.rsc" - "!:\Resource\Plugins\HtiIpProxyServicePlugin.rsc" +"\epoc32\release\armv5\urel\HtiCameraServicePlugin.dll" - "!:\sys\bin\HtiCameraServicePlugin.dll" +"\epoc32\data\Z\Resource\Plugins\HtiCameraServicePlugin.rsc" - "!:\Resource\Plugins\HtiCameraServicePlugin.rsc" ; Helper to add notepad memos "\epoc32\release\armv5\urel\HtiNpdHlp.exe" - "!:\sys\bin\HtiNpdHlp.exe" @@ -111,4 +113,4 @@ "\epoc32\release\armv5\urel\HtiStartupWait.dll" - "!:\sys\bin\HtiStartupWait.dll" ; Startup list resource file for starting HTIFramework.exe in device boot -"\epoc32\data\Z\private\101f875a\import\1020deb6.rsc" - "c:\private\101f875a\import\[1020deb6].rsc" +;"\epoc32\data\Z\private\101f875a\import\1020deb6.rsc" - "c:\private\101f875a\import\[1020deb6].rsc" diff -r 271e901a9423 -r 4cc0d1a608c1 htiui/sis/HTI_stub.pkg --- a/htiui/sis/HTI_stub.pkg Fri May 14 16:10:39 2010 +0300 +++ b/htiui/sis/HTI_stub.pkg Tue Jun 01 14:40:54 2010 +0300 @@ -18,7 +18,7 @@ &EN ; Using UID of HtiFramework project -#{"HTI"},(0x1020DEB6),2,22,0 +#{"HTI"},(0x1020DEB6),2,23,0 ; Localised Vendor name %{"Nokia"} @@ -81,6 +81,8 @@ ""- "z:\Resource\Plugins\HtiPIMServicePlugin.rsc" ""- "z:\sys\bin\HtiIpProxyServicePlugin.dll" ""- "z:\Resource\Plugins\HtiIpProxyServicePlugin.rsc" +""- "z:\sys\bin\HtiCameraServicePlugin.dll" +""- "z:\Resource\Plugins\HtiCameraServicePlugin.rsc" ; Helper to add notepad memos ""- "z:\sys\bin\HtiNpdHlp.exe" diff -r 271e901a9423 -r 4cc0d1a608c1 launcher/ReleaseNotes_Launcher.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/launcher/ReleaseNotes_Launcher.txt Tue Jun 01 14:40:54 2010 +0300 @@ -0,0 +1,135 @@ +=============================================================================== + +RELEASE NOTES - LAUNCHER v4.0.1 +RELEASED 21st May 2010 + +SUPPORTS S60 3.0+ + +=============================================================================== + +Product Description: +==================== +Launcher is a testing utility application aimed to help test the launching of +applications installed in the system, both on user side disk drives and on +ROM. Launcher tests if an application can be launched and then, if the launch +has failed, reports the possible reason for the failure. It is a very useful +application when checking the build as the user can instantly see if the +applications work. Launcher can also be used when testing binary +compatibility issues because it can reveal any DLL files missing from the +device. + +Main Features: +============== +- Show a list of installed applications in all drives +- Launch selected applications and read their statuses from threads +- In case of a failure, report thread's exit type, reason and category +- Show missing DLL files required by the binary to be launched +- Show problems on the UI and print all cases to a log file +- Generate a list of DLLs in the device to a file +- Analyse binary compatibility of system DLLs comparing them to a user + given reference data. Report any binary compatibility issues or missing + DLL files. + +=============================================================================== + +What's New in v4.0.1 +==================== +- Feature: Orbit UI improvements +- Fix: Launching DLL analysis not starting + +=============================================================================== + +Installation Notes: +=================== +Launcher is typically preinstalled on ROM. If not, it can be added to the +ROM with the .iby file. Alternatively, a .sis file can be found under the sis- +directory, but the user needs to sign it with their own developer certificate. +In Nokia R&D environment, you can use directly the R&D-signed .sis file under the +internal\sis directory. + +When signing with own developer certificate, the following capabilities are +needed: + PowerMgmt + ReadDeviceData + WriteDeviceData + AllFiles + ReadUserData + WriteUserData + +When building Launcher against S60 3.0 or 3.1, you may need to patch your SDK +environment first with some fixes. For more information, please refer to the +instructions under the "envpatcher" directory. + +=============================================================================== + +System Requirements: +==================== +Basic Requirements: +- Any S60 3.x device or emulator environment + +=============================================================================== + +Compatibility Issues: +===================== +N/A + +=============================================================================== + +Known Issues: +============= + +Fails in a test despite the application is working correctly +------------------------------------------------------------ +- Some application may exit immediately after a launch. This can be + normal behavior and should be checked manually. Such application is, for example, + irapp.exe. + +Binary compatibility check support +---------------------------------- +- Currently, only uncompressed and deflate compressed ELF binaries are + supported. This means that for example WINSCW is not supported. + +=============================================================================== + +Version History: +================ +3.7.0 - 29th May 2009 +- Feature: Binary compatiblity check for DLLs, which checks UID1, UID2, UID3, SID +and capability values of system DLLs against an XML-formatted input file. +- Fix: Launcher panics when comparing a large DLL list against system DLLs. +- Fix: Launcher panics when application launching is cancelled. + +Version 3.6.3 - 14th March 2008 +------------------------------- +- Change: Removed unnecessary capabilities + +Version 3.6.2 - 6th November 2007 +-------------------------------- +- Fix: Applications can be selected/unselected on a touch UI +- Fix: Scroll bar in the output view can be scrolled on a touch UI + +Version 3.6.1 - 9th October 2007 +-------------------------------- +- Fix: Layout in out tab in mirrored mode +- Fix: Codescanner high warnings + +Version 3.6.0 - 25th January 2007 +--------------------------------- +- Fix: Re-fix problems when reading import section from binaries +- Fix: Output screen for larger resolutions +- Fix: Stopping of launching + +Version 3.5.0 - 4th December 2006 +--------------------------------- +- Fix: Problems when reading import section from binaries +- Change: Marquee used for items in the application list view + +=============================================================================== + +Copyright (c) 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". diff -r 271e901a9423 -r 4cc0d1a608c1 launcher/engine/src/launcherengine.cpp --- a/launcher/engine/src/launcherengine.cpp Fri May 14 16:10:39 2010 +0300 +++ b/launcher/engine/src/launcherengine.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -1033,7 +1033,7 @@ if (iBCLogFile.Open(iEnv->FsSession(), iBCLogFilePath, EFileWrite) != KErrNone) { iEnv->FsSession().MkDirAll(iLogFilePath); - iBCLogFile.Replace(iEnv->FsSession(), iBCLogFilePath, EFileWrite); + User::LeaveIfError( iBCLogFile.Replace(iEnv->FsSession(), iBCLogFilePath, EFileWrite) ); } else { @@ -1099,9 +1099,14 @@ void CLauncherEngine::CancelBCAnalysis() { LOGSTRING("Launcher: CLauncherEngine::CancelBCAnalysis"); - iXMLParser->Cancel(); + if( iXMLParser ) + { + iXMLParser->Cancel(); + } iLauncherUI->PrintText(_L("\nAnalysis cancelled.\n\n")); - + WriteInitialStuffToTheLogL(_L("Analysis cancelled by user"), iBCLogFile); + iLogWriteBuf->Des().Zero(); + iBCLogFile.Close(); } // --------------------------------------------------------------------------- diff -r 271e901a9423 -r 4cc0d1a608c1 launcher/src/enginewrapper.cpp --- a/launcher/src/enginewrapper.cpp Fri May 14 16:10:39 2010 +0300 +++ b/launcher/src/enginewrapper.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -21,6 +21,7 @@ #include #include #include +#include #include #include "launchermainwindow.h" @@ -207,7 +208,7 @@ void EngineWrapper::doCompareDlls(HbAction* action) { HbInputDialog *dlg = static_cast(sender()); - if(action == dlg->primaryAction()) + if( action && !action->text().compare("ok", Qt::CaseInsensitive) ) { TFileName fileName( dlg->value().toString().utf16() ); TRAPD(error, mEngine->AnalyseDLLsL( fileName ) ); diff -r 271e901a9423 -r 4cc0d1a608c1 launcher/src/notifications.cpp --- a/launcher/src/notifications.cpp Fri May 14 16:10:39 2010 +0300 +++ b/launcher/src/notifications.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -45,7 +45,7 @@ { Notifications::showMessageBox( HbMessageBox::MessageTypeInformation, - "Version 4.0.0 - 3rd March 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.", + "Version 4.0.1 - 21st May 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.", "About Launcher" ); } diff -r 271e901a9423 -r 4cc0d1a608c1 layers.sysdef.xml --- a/layers.sysdef.xml Fri May 14 16:10:39 2010 +0300 +++ b/layers.sysdef.xml Tue Jun 01 14:40:54 2010 +0300 @@ -34,7 +34,7 @@ - + diff -r 271e901a9423 -r 4cc0d1a608c1 perfmon/group/ReleaseNotes_PerfMon.txt --- a/perfmon/group/ReleaseNotes_PerfMon.txt Fri May 14 16:10:39 2010 +0300 +++ b/perfmon/group/ReleaseNotes_PerfMon.txt Tue Jun 01 14:40:54 2010 +0300 @@ -1,9 +1,9 @@ =============================================================================== -RELEASE NOTES - PERFORMANCE MONITOR v1.0.0 -RELEASED 6th March 2008 +RELEASE NOTES - PERFORMANCE MONITOR v1.1.1 +RELEASED 21st May 2010 -SUPPORTS S60 3.0+ +SUPPORTS S60 5.2+ =============================================================================== @@ -26,9 +26,10 @@ =============================================================================== -What's New in v1.0.0 +What's New in v1.1.1 ==================== -- Initial version +- Improved Orbit UI +- Error corrections =============================================================================== diff -r 271e901a9423 -r 4cc0d1a608c1 perfmon/ui/hb/app/src/mainview.cpp --- a/perfmon/ui/hb/app/src/mainview.cpp Fri May 14 16:10:39 2010 +0300 +++ b/perfmon/ui/hb/app/src/mainview.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -128,7 +128,7 @@ void MainView::showAbout() { HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation); - messageBox->setText("Version 1.1.0 - 15th March 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0."); + messageBox->setText("Version 1.1.1 - 21st May 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0."); HbLabel *header = new HbLabel("About PerfMon", messageBox); messageBox->setHeadingWidget(header); messageBox->setAttribute(Qt::WA_DeleteOnClose); diff -r 271e901a9423 -r 4cc0d1a608c1 perfmon/ui/hb/app/src/valuedatacontainer.cpp --- a/perfmon/ui/hb/app/src/valuedatacontainer.cpp Fri May 14 16:10:39 2010 +0300 +++ b/perfmon/ui/hb/app/src/valuedatacontainer.cpp Tue Jun 01 14:40:54 2010 +0300 @@ -42,7 +42,10 @@ // set proper font and prepare font metrics for text height calculation painter->setFont(mFont); - painter->setPen(HbColorScheme::color("foreground")); + QColor col = HbColorScheme::color("qtc_textedit_normal"); + if(col.isValid()) + painter->setPen(col); + QFontMetricsF metrics(mFont); QList entries = engine().sampleEntries(); diff -r 271e901a9423 -r 4cc0d1a608c1 piprofilerui/ui/avkon/group/piprofilerui.mmp --- a/piprofilerui/ui/avkon/group/piprofilerui.mmp Fri May 14 16:10:39 2010 +0300 +++ b/piprofilerui/ui/avkon/group/piprofilerui.mmp Tue Jun 01 14:40:54 2010 +0300 @@ -61,7 +61,7 @@ LIBRARY euser.lib LIBRARY eiksrv.lib -LIBRARY commonengine.lib +LIBRARY CommonEngine.lib LIBRARY apparc.lib LIBRARY cone.lib LIBRARY eikcore.lib diff -r 271e901a9423 -r 4cc0d1a608c1 stifui/avkon/group/ReleaseNote.txt --- a/stifui/avkon/group/ReleaseNote.txt Fri May 14 16:10:39 2010 +0300 +++ b/stifui/avkon/group/ReleaseNote.txt Tue Jun 01 14:40:54 2010 +0300 @@ -1,5 +1,5 @@ ======================================================================== -RELEASE NOTE FOR STIF UI - STIF_201018 (7.3.32) +RELEASE NOTE FOR STIF UI - STIF_201020 (7.3.33) SUPPORTING SERIES 60 3.0 -> ======================================================================== diff -r 271e901a9423 -r 4cc0d1a608c1 stifui/avkon/sis/Stifui_31.sis Binary file stifui/avkon/sis/Stifui_31.sis has changed diff -r 271e901a9423 -r 4cc0d1a608c1 stifui/avkon/stifui/inc/version.h --- a/stifui/avkon/stifui/inc/version.h Fri May 14 16:10:39 2010 +0300 +++ b/stifui/avkon/stifui/inc/version.h Tue Jun 01 14:40:54 2010 +0300 @@ -20,9 +20,9 @@ #define STIFUI_MAJOR_VERSION 7 #define STIFUI_MINOR_VERSION 3 -#define STIFUI_BUILD_VERSION 32 +#define STIFUI_BUILD_VERSION 33 -#define STIFUI_REL_DATE "5th May 2010" +#define STIFUI_REL_DATE "18th May 2010" #define TO_UNICODE(text) _L(text) diff -r 271e901a9423 -r 4cc0d1a608c1 stifui/qt/ReleaseNote.txt --- a/stifui/qt/ReleaseNote.txt Fri May 14 16:10:39 2010 +0300 +++ b/stifui/qt/ReleaseNote.txt Tue Jun 01 14:40:54 2010 +0300 @@ -1,5 +1,5 @@ ======================================================================== -RELEASE NOTE FOR STFUI_201018 (7.3.32) +RELEASE NOTE FOR STFUI_201020 (7.3.33) ======================================================================== Product Description: