--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vtuis/lcvtplugin/src/base/clcvtcmdexecutor.cpp Tue Aug 31 15:16:10 2010 +0300
@@ -0,0 +1,360 @@
+/*
+* Copyright (c) 2008 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 of the CLcVtCmdExecutor class.
+*
+*/
+
+
+// INCLUDE FILES
+#include "clcvtcmdexecutor.h"
+#include "mlcvtenginecommandmanager.h"
+#include <mvtengcommandhandler.h>
+#include <cvtlogger.h>
+
+// MODULE DATA STRUCTURES
+
+/**
+* Active object to perform asynchronous commands.
+* @since Series 60 2.6
+*/
+class CLcVtCmdExecutor::CActiveCmd
+ : public CActive
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Constructor.
+ */
+ CActiveCmd(
+ CLcVtCmdExecutor& aDialog,
+ MVtEngCommandHandler& aCommandHandler,
+ TVtEngCommandId aCommand,
+ TDesC8* aParams );
+
+ /**
+ * Destructor.
+ */
+ ~CActiveCmd();
+
+ public: // New functions
+
+ /**
+ * Starts active object. Command will be performed in RunL.
+ */
+ void Start();
+
+ /**
+ * Checks if command has been performed.
+ * @return ETrue if command has been performed.
+ */
+ TBool CommandPerformed() const;
+
+ private:
+
+ /**
+ * @see CActive::RunL
+ */
+ void RunL();
+
+ /**
+ * @see CActive::DoCancel.
+ */
+ void DoCancel();
+
+ /**
+ * @see CActive::RunError.
+ */
+ TInt RunError( TInt aResult );
+
+ private:
+
+ // Ref to dialog.
+ CLcVtCmdExecutor& iExecutor;
+
+ // Ref to command handler.
+ MVtEngCommandHandler& iCommandHandler;
+
+ // Command to be executed.
+ TVtEngCommandId iCommand;
+
+ // Owned parameters.
+ TDesC8* iCommandParams;
+
+ // ETrue if command has been performed.
+ TBool iCommandPerformed;
+
+ };
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CLcVtCmdExecutor::CLcVtCmdExecutor
+// -----------------------------------------------------------------------------
+//
+CLcVtCmdExecutor::CLcVtCmdExecutor(
+ CLcVtCmdExecutor** aSelfPtr,
+ MVtEngCommandHandler& aCommandHandler,
+ MLcVtEngineCommandManager& aCommandManager )
+ : iSelfPtr( aSelfPtr ),
+ iCommandHandler( aCommandHandler ),
+ iCommandManager( aCommandManager )
+ {
+ iRequest = NULL;
+ __VTPRINT2( DEBUG_GEN, "CLcVtCmdExecutor.Ctor this=%d", (TInt)this )
+ }
+
+// -----------------------------------------------------------------------------
+// CLcVtCmdExecutor::~CLcVtCmdExecutor
+// -----------------------------------------------------------------------------
+//
+CLcVtCmdExecutor::~CLcVtCmdExecutor()
+ {
+ __VTPRINTENTER( "CLcVtCmdExecutor.~" )
+ __VTPRINT2( DEBUG_GEN, "CLcVtCmdExecutor.~ this=%d", (TInt)this )
+ if ( iActiveCmd )
+ {
+ if ( !iCommandCompleted && iActiveCmd->CommandPerformed() )
+ {
+ iCommandHandler.CancelCommand( iCommand ); // ignore error
+ }
+ }
+ delete iCommandParams;
+ delete iActiveCmd;
+
+ iCommandManager.RemoveObserver( *this );
+
+ if ( iSelfPtr )
+ {
+ *iSelfPtr = NULL;
+ iSelfPtr = NULL;
+ }
+
+ if ( iRequest )
+ {
+ __VTPRINT(DEBUG_GEN, "CLcVtCmdExecutor::~CLcVtCmdExecutor RequestComplete")
+ User::RequestComplete( iRequest, KErrCancel );
+ iRequest = NULL;
+ }
+ else
+ {
+ if ( iWait.IsStarted())
+ {
+ __VTPRINT(DEBUG_GEN, "CLcVtCmdExecutor::~CLcVtCmdExecutor AsyncStop")
+ iWait.AsyncStop();
+ }
+ }
+
+
+ __VTPRINTEXIT( "CLcVtCmdExecutor.~" )
+ }
+
+// -----------------------------------------------------------------------------
+// CLcVtCmdExecutor::ExecuteCmdL
+// -----------------------------------------------------------------------------
+//
+void CLcVtCmdExecutor::ExecuteCmdL(
+ const TVtEngCommandId aCommandId,
+ TDesC8* aParams,
+ TRequestStatus* aRequest )
+ {
+ __VTPRINTENTER( "CLcVtCmdExecutor.ExecuteCmdL" )
+ __VTPRINT2( DEBUG_GEN, "CLcVtCmdExecutor.ExecuteCmdL this=%d", (TInt)this )
+ iCommand = aCommandId;
+ CleanupStack::PushL( this );
+ if ( aParams )
+ {
+ iCommandParams = aParams->AllocL();
+ }
+
+ iCommandManager.AddObserverL( *this );
+ CleanupStack::Pop( this );
+
+ iActiveCmd =
+ new ( ELeave ) CActiveCmd(
+ *this, iCommandHandler, iCommand, iCommandParams );
+ iActiveCmd->Start();
+
+ if ( !aRequest )
+ {
+ TInt error = KErrNone;
+ iError = &error;
+ //Start Active Schedule
+ iWait.Start();
+ User::LeaveIfError( error );
+ }
+ else
+ {
+ *aRequest = KRequestPending;
+ iRequest = aRequest;
+ }
+
+ __VTPRINTEXIT( "CLcVtCmdExecutor.ExecuteCmdL" )
+ }
+
+
+// -----------------------------------------------------------------------------
+// CLcVtCmdExecutor::Complete
+// -----------------------------------------------------------------------------
+//
+void CLcVtCmdExecutor::Complete( const TInt aError )
+ {
+ if ( iError )
+ {
+ *iError = aError;
+ }
+
+ if ( iRequest )
+ {
+ User::RequestComplete( iRequest, aError );
+ iRequest = NULL;
+ }
+
+ delete this;
+ }
+
+// -----------------------------------------------------------------------------
+// CLcVtCmdExecutor::HandleVTCommandPerformedL
+// -----------------------------------------------------------------------------
+//
+void CLcVtCmdExecutor::HandleVTCommandPerformedL(
+ TVtEngCommandId aCommand,
+ const TInt aError )
+ {
+ __VTPRINTENTER( "CLcVtCmdExecutor.HandleVTCommandPerformed" )
+ __VTPRINT2( DEBUG_GEN, "CLcVtCmdExecutor.HandleVTCommandPerformed.cmd.%d", aCommand )
+ __VTPRINT2( DEBUG_GEN, "CLcVtCmdExecutor.HandleVTCommandPerformed.err.%d", aError )
+ if ( iActiveCmd && ( aCommand == iCommand ) )
+ {
+ if ( iActiveCmd->CommandPerformed() && !iCommandCompleted )
+ {
+ __VTPRINT( DEBUG_GEN, "CLcVtCmdExecutor.match" )
+ iCommandCompleted = ETrue;
+ // Corrupted images may leave during initialization, thus we have
+ // to mask out errors when they happen during share initialize.
+ // Error code is handled correctly in CVtUiAppUi::CEventObserver::
+ // HandleVTCommandPerformedL() method, thus it will not be ignored.
+ if ( aCommand == KVtEngInitializeShareImage )
+ {
+ Complete( KErrNone );
+ }
+ else
+ {
+ Complete( aError );
+ }
+ }
+ }
+ __VTPRINTEXIT( "CLcVtCmdExecutor.HandleVTCommandPerformed" )
+ }
+
+// -----------------------------------------------------------------------------
+// CLcVtCmdExecutor::HandleExecuteFailed
+// -----------------------------------------------------------------------------
+//
+void CLcVtCmdExecutor::HandleExecuteFailed( TInt aResult )
+ {
+ __VTPRINT3( DEBUG_GEN, "CLcVtCmdExecutor.Fail this=%d res=%d",
+ (TInt)this, aResult )
+ Complete( aResult );
+ }
+
+// Implementation of CLcVtCmdExecutor::CActiveCmd:
+
+// -----------------------------------------------------------------------------
+// CLcVtCmdExecutor::CActiveCmd::CActiveCmd
+// -----------------------------------------------------------------------------
+//
+CLcVtCmdExecutor::CActiveCmd::CActiveCmd(
+ CLcVtCmdExecutor& aExecutor,
+ MVtEngCommandHandler& aCommandHandler,
+ TVtEngCommandId aCommand,
+ TDesC8* aParams)
+ : CActive( CActive::EPriorityHigh ),
+ iExecutor( aExecutor ),
+ iCommandHandler( aCommandHandler ),
+ iCommand( aCommand ),
+ iCommandParams( aParams )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CLcVtCmdExecutor::CActiveCmd::~CActiveCmd
+// -----------------------------------------------------------------------------
+//
+CLcVtCmdExecutor::CActiveCmd::~CActiveCmd()
+ {
+ __VTPRINT2( DEBUG_GEN, "CLcVtCmdExecutor.CActiveCmd.Dtor this=%d", (TInt)this )
+ Cancel();
+ }
+
+// -----------------------------------------------------------------------------
+// CLcVtCmdExecutor::CActiveCmd::Start
+// -----------------------------------------------------------------------------
+//
+void CLcVtCmdExecutor::CActiveCmd::Start()
+ {
+ __VTPRINTENTER( "CLcVtCmdExecutor.CActiveCmd.Start" )
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+ SetActive();
+ __VTPRINTEXITR( "CLcVtCmdExecutor.CActiveCmd.Start this=%d", (TInt)this )
+ }
+
+// -----------------------------------------------------------------------------
+// CLcVtCmdExecutor::CActiveCmd::CommandPerformed
+// -----------------------------------------------------------------------------
+//
+TBool CLcVtCmdExecutor::CActiveCmd::CommandPerformed() const
+ {
+ __VTPRINT3( DEBUG_GEN, "CLcVtCmdExecutor.CActiveCmd.Perf this=%d,cmd=%d",
+ (TInt)this, iCommandPerformed )
+ return iCommandPerformed;
+ }
+
+// -----------------------------------------------------------------------------
+// CLcVtCmdExecutor::CActiveCmd::RunL
+// -----------------------------------------------------------------------------
+//
+void CLcVtCmdExecutor::CActiveCmd::RunL()
+ {
+ __VTPRINTENTER( "CLcVtCmdExecutor.CActiveCmd.RunL" )
+ iCommandHandler.ExecuteL( iCommand, iCommandParams );
+ iCommandPerformed = ETrue;
+ __VTPRINTEXITR( "CLcVtCmdExecutor.CActiveCmd.RunL this=%d", (TInt)this )
+ }
+
+// -----------------------------------------------------------------------------
+// CLcVtCmdExecutor::CActiveCmd::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CLcVtCmdExecutor::CActiveCmd::DoCancel()
+ {
+ __VTPRINT2( DEBUG_GEN, "CLcVtCmdExecutor.CActiveCmd.DoCnl this=%d", (TInt)this )
+ // Request is completed immediately.
+ }
+
+// -----------------------------------------------------------------------------
+// CVtUiExecuteCmdDialog::CActiveCmd::RunError
+// -----------------------------------------------------------------------------
+//
+TInt CLcVtCmdExecutor::CActiveCmd::RunError( TInt aResult )
+ {
+ __VTPRINTENTER( "CLcVtCmdExecutor.CActiveCmd.RunError" )
+ // Exception was raised in RunL. Inform the dialog to close itself.
+ iExecutor.HandleExecuteFailed( aResult );
+ __VTPRINTEXITR( "CLcVtCmdExecutor.CActiveCmd.RunError this=%d", (TInt)this )
+ return KErrNone;
+ }
+
+// End of File