uifw/uiklaf/src/LafNew.CPP
changeset 0 2f259fa3e83a
--- /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;
+        }
+    }
+