diff -r f8280f3bfeb7 -r 9b2cffad4b5e creator/src/creator_scriptelement.cpp --- a/creator/src/creator_scriptelement.cpp Tue Sep 14 21:20:12 2010 +0300 +++ b/creator/src/creator_scriptelement.cpp Wed Sep 15 12:13:45 2010 +0300 @@ -387,6 +387,51 @@ return iIsCommandElement; } +void CCreatorScriptElement::AsyncExecuteCommandAndWaitL() + { + iAsyncCallback.Cancel(); + iLoopIndex = 0; + iAsyncOpError = KErrNone; + // start async executing + iAsyncCallback.CallBack(); + // wait until async executing is finished + iWaiter.Start(); + User::LeaveIfError( iAsyncOpError ); + } + +TInt CCreatorScriptElement::ExecuteCommandCB( TAny* aPtr ) + { + static_cast( aPtr )->AsyncExecuteCommand(); + return KErrNone; + } + +void CCreatorScriptElement::AsyncExecuteCommand() + { + TRAPD( err, AsyncExecuteCommandL() ); + if( err != KErrNone ) + { + iAsyncOpError = err; + iAsyncCallback.Cancel(); + iWaiter.AsyncStop(); + } + } + +void CCreatorScriptElement::AsyncExecuteCommandL() + { + User::Panic(_L("CCreatorScriptElement::AsyncExecuteCommandL not written"), -1000); + } + +void CCreatorScriptElement::StartNextLoop() + { + iLoopIndex++; + iAsyncCallback.CallBack(); + } + +void CCreatorScriptElement::AsyncCommandFinished() + { + iWaiter.AsyncStop(); + } + void CCreatorScriptElement::ExecuteCommandL() { @@ -400,12 +445,15 @@ return EFalse; } -CCreatorScriptElement::CCreatorScriptElement(CCreatorEngine* aEngine) -: -iIsCommandElement(EFalse), -iIsRoot(EFalse), -iEngine(aEngine) - {} +CCreatorScriptElement::CCreatorScriptElement(CCreatorEngine* aEngine) : + iIsCommandElement(EFalse), + iIsRoot(EFalse), + iEngine(aEngine), + iAsyncCallback( CActive::EPriorityLow ) + { + TCallBack callback( ExecuteCommandCB, this); + iAsyncCallback.Set( callback ); + } void CCreatorScriptElement::ConstructL(const TDesC& aName, const TDesC& aContext) { @@ -693,29 +741,3 @@ iIsRoot=ETrue; } - -CCreatorCalendarElementBase* CCreatorCalendarElementBase::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext) - { - CCreatorCalendarElementBase* self = new (ELeave) CCreatorCalendarElementBase(aEngine); - CleanupStack::PushL(self); - self->ConstructL(aName, aContext); - CleanupStack::Pop(); - return self; - } -CCreatorCalendarElementBase::CCreatorCalendarElementBase(CCreatorEngine* aEngine) -: -CCreatorScriptElement(aEngine) - { } - -CCreatorMessageElementBase* CCreatorMessageElementBase::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext) - { - CCreatorMessageElementBase* self = new (ELeave) CCreatorMessageElementBase(aEngine); - CleanupStack::PushL(self); - self->ConstructL(aName, aContext); - CleanupStack::Pop(); - return self; - } -CCreatorMessageElementBase::CCreatorMessageElementBase(CCreatorEngine* aEngine) -: -CCreatorScriptElement(aEngine) - { }