--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/uiklaf/src/LafNew.CPP Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,155 @@
+/*
+* Copyright (c) 1997 - 2004 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 <uiklaf/private/lafshut.h>
+#include <ecom/ecom.h>
+#include <s32mem.h>
+#include <AknNotifySignature.h>
+#include <aknconsts.h>
+#include <AknUtils.h>
+#include <avkon.hrh>
+#include <featmgr.h>
+#include <eikserverapp.h>
+#include <AknSgcc.h>
+#include <AknCapServerClient.h>
+
+#include <uiklaf/private/lafenv.h>
+
+const TInt KMaxGlobalNoteLength = 64; // maximum length of a 'static' global note
+
+void GlobalNoteThroughRNotiferL(const TDesC& aNoteText)
+ {
+ // 29 bytes required for int fields, including 4 in descriptor header.
+ const TInt KGlobalNoteBufferLength = (KMaxGlobalNoteLength * 2) + 32; // 29 rounded up to 32
+ TBuf8<KGlobalNoteBufferLength> globalNoteBuffer;
+
+ RDesWriteStream bufStream(globalNoteBuffer);
+
+ // None of these should leave since the space is already allocated
+
+ bufStream.WriteInt32L(KAKNNOTIFIERSIGNATURE);
+
+ bufStream.WriteInt16L(EAknGlobalErrorNote);
+ bufStream << aNoteText;
+
+ // Set default parameters
+
+ bufStream.WriteInt16L(0); // iPriority
+ bufStream.WriteInt32L(R_AVKON_SOFTKEYS_OK_EMPTY); // iSoftkeys
+ bufStream.WriteInt16L(-1); // iGraphic;
+ bufStream.WriteInt16L(-1); // iGraphicMask
+ bufStream.WriteInt32L(0); // iAnimation
+ bufStream.WriteInt16L(-1); // iTone
+ bufStream.WriteInt8L(0); // adapter used Ffalse
+ bufStream.WriteInt8L(1); // Do text processing
+ bufStream.WriteInt8L(0); // no secondary display info
+
+ bufStream.CommitL();
+
+ TPckgBuf<SAknGlobalNoteReturnParams> retPckg;
+
+ RNotifier notify;
+ notify.Connect();
+ notify.StartNotifier(KAknGlobalNoteUid, globalNoteBuffer, retPckg);
+ notify.Close();
+ }
+
+void GlobalNoteThroughRAknSrvL(const TDesC& aNoteText)
+ {
+ RAknUiServer* aknSrv = CAknSgcClient::AknSrv();
+ if (!aknSrv)
+ User::Leave(KErrNotReady);
+
+ aknSrv->ShowGlobalNoteL(aNoteText, EAknGlobalErrorNote);
+ }
+
+EXPORT_C void LafEnv::DisplayAlertAsNotifier(const TDesC& aMsg1, const TDesC& aMsg2)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic,1);
+
+ TBuf<KMaxGlobalNoteLength> noteText;
+
+ if (aMsg1.Length() > KMaxGlobalNoteLength)
+ {
+ noteText = aMsg1.Left(KMaxGlobalNoteLength);
+ }
+ else
+ {
+ noteText = aMsg1;
+ TInt left = KMaxGlobalNoteLength - aMsg1.Length();
+ // Insert a newline between the two texts if both are not
+ // empty, and there is enough space
+ if (aMsg1.Length() && aMsg2.Length() && left > 0)
+ {
+ left--;
+ noteText.Append('\n');
+ }
+ // Insert Msg2 if there is enough space
+ if (aMsg2.Length() > left)
+ {
+ noteText.Append(aMsg2.Left(left));
+ }
+ else
+ {
+ noteText.Append(aMsg2);
+ }
+ }
+
+ TRAPD(aknSrvErr, GlobalNoteThroughRAknSrvL(noteText));
+ if (aknSrvErr)
+ GlobalNoteThroughRNotiferL(noteText);
+
+ __UHEAP_RESET;
+ }
+
+
+EXPORT_C void LafEnv::HandleExtensionEventL( CEikonEnv& aEnv, TLafEnvExtensionEvent aEvent )
+ {
+ switch (aEvent)
+ {
+ case ELafEnvPreCoeEnvConstructL:
+ CAknEnv::InstallAknEnvAsExtensionL(&aEnv);
+ break;
+
+ case ELafEnvPostCoeEnvConstructL:
+ STATIC_CAST(CAknEnv*,aEnv.Extension())->ConstructL();
+ break;
+
+ default:
+ break;
+ }
+ }
+
+EXPORT_C TInt LafEnv::PolicyItem( TLafEnvPolicyItem aItem )
+ {
+ switch( aItem )
+ {
+ case ELafEnvPolicyExitIfErrorDuringStartup:
+ return ETrue;
+
+ case ELafEnvPolicyDeleteCorruptDocumentAndContinue:
+ return ETrue;
+
+ case ELAfEnvPolicyDeferredEnvironmentDeletion:
+ return ETrue;
+
+ default:
+ return EFalse;
+ }
+ }
+