--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/mtmbase/src/mturutils.cpp Mon Jan 18 20:36:02 2010 +0200
@@ -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 <eikenv.h>
+#include <msvapi.h>
+#include <mtclreg.h>
+#include <mtuireg.h>
+#include <mtclbase.h>
+#include <eikappui.h>
+#include <mturutils.h>
+#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();
+ }