diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/msgsrvnstore/mtmbase/src/mturutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgsrvnstore/mtmbase/src/mturutils.cpp Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,202 @@ +// Copyright (c) 2000-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: +// + +#include +#include +#include +#include +#include +#include +#include +#include "MTMUIBAS.H" +#include "MTUDPAN.H" + +_LIT(KThreadName, "LaunchEditor"); +const TInt KLaunchMinHeapSize=0x1000; +const TInt KLaunchMaxHeapSize=0x80000; + +//********************************** +// CMturEnv +//********************************** + +class CMturEnv : public CEikonEnv + { +public: + void DestroyEnvironment(); + void ConstructL(); + }; + +void CMturEnv::DestroyEnvironment() + { + CEikonEnv::DestroyEnvironment(); + } + +void CMturEnv::ConstructL() + { + CEikonEnv::ConstructL(); + SetAutoForwarding(ETrue); + } + +//********************************** +// CMturAppUi +//********************************** + +class CMturAppUi : public CEikAppUi + { +public: + ~CMturAppUi(); + void ConstructL(); + }; + +CMturAppUi::~CMturAppUi() + { + } + +void CMturAppUi::ConstructL() + { + CEikAppUi::BaseConstructL(ENoAppResourceFile); + } + +//********************************** +// CDummyObserver +//********************************** + +class CDummyObserver : public CBase, public MMsvSessionObserver + { +public: + void HandleSessionEventL(TMsvSessionEvent, TAny*, TAny*, TAny*) {}; + }; + +//********************************** +// Global +//********************************** + +static void DoLaunchEditorL(TMsvId aId) + { + // Create an observer + CDummyObserver* ob = new(ELeave)CDummyObserver; + CleanupStack::PushL(ob); + + // Create a message server session + CMsvSession* session = CMsvSession::OpenSyncL(*ob); + CleanupStack::PushL(session); + + // Create a client registry + CClientMtmRegistry* clientReg = CClientMtmRegistry::NewL(*session); + CleanupStack::PushL(clientReg); + + // Create a client entry sitting on the message + CMsvEntry* cEntry = CMsvEntry::NewL(*session, aId, TMsvSelectionOrdering()); + CleanupStack::PushL(cEntry); + + // Create the required client Mtm + CBaseMtm* client = clientReg->NewMtmL(cEntry->Entry().iMtm); + CleanupStack::PushL(client); + + // Create a UI registry + CMtmUiRegistry* uiReg = CMtmUiRegistry::NewL(*session); + CleanupStack::PushL(uiReg); + + // Create the required UI + CBaseMtmUi* ui = uiReg->NewMtmUiL(*client); + CleanupStack::PushL(ui); + + // Give the client entry to the UI + CleanupStack::Pop(); // cEntry + client->SetCurrentEntryL(cEntry); + + // Start the waiter + CMsvOperationWait* wait = CMsvOperationWait::NewLC(); + wait->Start(); + + // Launch the editor + CMsvOperation* op = NULL; + TRAPD(error, op = ui->EditL(wait->iStatus)); + if (error) + { + TRequestStatus* status = &(wait->iStatus); + User::RequestComplete(status, KErrNone); + } + + // Compete the operation + CActiveScheduler::Start(); + delete op; + + // Tidy up + CleanupStack::Pop(7); // wait, ui, uiReg, client, clientReg, session, ob + + // Order of deletion is significant + delete wait; + delete ui; + delete client; + delete uiReg; + delete clientReg; + delete session; + delete ob; + } + +static TInt LaunchEditor(TMsvId aId) + { + TRAPD(error, DoLaunchEditorL(aId)); + return error; + } + +static TInt DoThreadStart(TAny* aParam) + { + CMturEnv* env = new CMturEnv; + __ASSERT_ALWAYS(env, Panic(EMturThreadStartPanic1)); + CMturAppUi* ui = new CMturAppUi; + __ASSERT_ALWAYS(ui, Panic(EMturThreadStartPanic2)); + + TRAPD(error, env->ConstructL(); ui->ConstructL()); + __ASSERT_ALWAYS(!error, Panic(EMturThreadStartPanic3)); + env->DisableExitChecks(ETrue); + + LaunchEditor((TMsvId)aParam); + + ui->PrepareToExit(); + env->DestroyEnvironment(); + return KErrNone; + } + +//********************************** +// MturUtils +//********************************** + +EXPORT_C void MturUtils::LaunchEditorL(TMsvId aId) + { + RThread thread; + User::LeaveIfError(thread.Create(KThreadName, DoThreadStart, KDefaultStackSize, KLaunchMinHeapSize, KLaunchMaxHeapSize, (TAny*)aId, EOwnerThread)); + thread.Resume(); + thread.Close(); + } + +EXPORT_C void MturUtils::LaunchEditorAndWaitL(TMsvId aId) + { + TRequestStatus aStatus; + RThread thread; + User::LeaveIfError(thread.Create(KThreadName, DoThreadStart, KDefaultStackSize, KLaunchMinHeapSize, KLaunchMaxHeapSize, (TAny*)aId, EOwnerThread)); + thread.Logon(aStatus); + thread.Resume(); + User::WaitForRequest(aStatus); + thread.Close(); + } + +EXPORT_C void MturUtils::LaunchEditorL(TMsvId aId, RThread& aThread, TRequestStatus& aStatus) + { + User::LeaveIfError(aThread.Create(KThreadName, DoThreadStart, KDefaultStackSize, KLaunchMinHeapSize, KLaunchMaxHeapSize, (TAny*)aId, EOwnerThread)); + aThread.Logon(aStatus); + aThread.Resume(); + }