messagingappbase/smartmessaging/bva/src/BvaAppUi.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/smartmessaging/bva/src/BvaAppUi.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,298 @@
+/*
+* Copyright (c) 2002-2006 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:   Declares UI class for BVA application.
+*
+*/
+
+
+
+#include <akntitle.h>
+#include <msgbiocontrol.h>
+#include <aknnotewrappers.h>      // CAknInformationNote
+#include <bva.rsg>
+#include "BvaContainer.h"
+#include "BvaDocument.h"
+#include "BvaAppUi.h"
+#include "bvalog.h"
+
+#include <featmgr.h>
+#include <hlplch.h>                 // for HlpLauncher
+#include <AiwCommon.hrh>
+// CONSTANTS
+const TInt KBvaFirstFreeCommandId = 10000;
+_LIT(KBVAAppUI,"BVA AppUI");
+
+// ================= MEMBER FUNCTIONS =======================
+void CBvaAppUi::ConstructL()
+    {
+    LOG("CBvaAppUi::ConstructL begin");
+    BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible );
+    iContainer = new (ELeave) CBvaContainer;
+    iContainer->ConstructL(ClientRect());
+    AddToStackL( iContainer );
+    iEikonEnv->AppUiFactory()->MenuBar()->SetContextMenuTitleResourceId( R_BVA_CONTEXT_MENUBAR );
+    iFileHandleSize = -1;
+	FeatureManager::InitializeLibL();
+    
+	//assume that the loading of BC can fail with any arbitrary
+    //leave code or not to happen at all...
+    iBioControlLoadFailed = ETrue;
+	LOG("CBvaAppUi::ConstructL end");
+    }
+
+void CBvaAppUi::LoadBioControlL( const RFile& aFile )
+	{
+	LOG("CBvaAppUi::LoadBioControlL begin");
+    TInt err0 = aFile.Size( iFileHandleSize );
+	if ( err0 )
+		{
+		iFileHandleSize = 0;
+		}
+
+	TRAPD(err, iContainer->LoadBioControlL( aFile ));
+
+    if( err == KErrMsgBioMessageNotValid )
+        {
+        // no note is displayed as that is handled by the launching application
+        // Exit application.
+        HandleCommandL(EAknCmdExit);
+        }
+
+    else if ( err == KErrNone )
+        {
+        //set the flag to EFalse as the BIO control has been instantiated
+        //succesfully
+        iBioControlLoadFailed = EFalse;
+
+        //
+        // Update the heading
+        //
+        HBufC* text = iContainer->BioControl().HeaderTextL();
+        CleanupStack::PushL(text);
+        CAknTitlePane* titlePane = STATIC_CAST(
+            CAknTitlePane*,
+            StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle )));
+        titlePane->SetTextL( *text );
+        CleanupStack::PopAndDestroy(text); // text
+        }
+
+    else
+        {
+        User::LeaveIfError(err);
+        }
+    LOG("CBvaAppUi::LoadBioControlL end");
+	}
+
+CBvaAppUi::~CBvaAppUi()
+    {
+	if (iContainer)
+		{
+		RemoveFromStack(iContainer);
+		delete iContainer;
+		}
+    FeatureManager::UnInitializeLib();
+    }
+
+void CBvaAppUi::DynInitMenuPaneL(
+    TInt aResourceId, CEikMenuPane* aMenuPane)
+    {
+	__ASSERT_ALWAYS(aMenuPane,Panic(EMenuPaneNull));
+    if (aResourceId == R_BVA_MENU)
+        {
+        // disable aiw menu item for calender, enabled in vcalbc
+        aMenuPane->SetItemDimmed( KAiwCmdSaveToCalendar, ETrue );
+
+        // Check that datafile exist
+        if (!NoDataFile())
+            {
+            TUint32 permBio = 0;
+            if(iContainer->IsBioControl())
+                {
+                permBio = iContainer->BioControl().OptionMenuPermissionsL();
+                }
+
+            if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) || !( permBio & EMsgBioHelp ))
+                {
+                aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+                }
+            if(iContainer->IsBioControl())
+                {
+                iContainer->BioControl().SetMenuCommandSetL(*aMenuPane);
+                }
+            }
+        }
+    else if ( aResourceId == R_BVA_CONTEXT_MENU )
+        {
+        // Check that datafile exist
+        if ( !NoDataFile() )
+            {
+            if(iContainer->IsBioControl())
+                {
+                iContainer->BioControl().SetMenuCommandSetL( *aMenuPane );
+                }
+            }
+        }
+
+    }
+
+TKeyResponse CBvaAppUi::HandleKeyEventL(
+    const TKeyEvent& aKeyEvent,TEventCode aType)
+    {
+    if (NoDataFile())
+        {
+        // someone launched this app the wrong way.
+        return EKeyWasNotConsumed;
+        }
+
+    return iContainer->OfferKeyEventL(aKeyEvent, aType);
+    }
+
+void CBvaAppUi::HandleCommandL(TInt aCommand)
+    {
+    LOG("CBvaAppUi::HandleCommandL begin");
+    switch ( aCommand )
+        {
+        case EAknSoftkeyBack:
+        case EAknCmdExit:
+        case EEikCmdExit: // seems that currently it is this one
+            {
+            //closing the BVA application is not possible
+            //until the BIO control has been created, unless the
+            //instantiation of the control has failed altogether!
+            if( iBioControlLoadFailed || iContainer->IsBioControl() )
+                {
+                if (iDoorObserver   )
+                    {
+                    iDoorObserver->NotifyExit(MApaEmbeddedDocObserver::ENoChanges);
+                    }
+                Exit();
+                }
+            break;
+            }
+        case EAknCmdHelp:
+            {
+            LaunchHelpL();
+            break;
+            }
+        case EAknSoftkeyContextOptions:
+            ProcessCommandL(EAknSoftkeyContextOptions);
+        break;	
+        default:
+            break;
+        }
+    if ( aCommand >=  FirstFreeCommand() && !NoDataFile() )
+        {
+        iContainer->BioControl().HandleBioCommandL(aCommand);
+        }
+    LOG("CBvaAppUi::HandleCommandL end");
+    }
+
+TInt CBvaAppUi::FirstFreeCommand() const
+    {
+    return KBvaFirstFreeCommandId;
+    }
+
+TInt CBvaAppUi::RequestHandleCommandL(TMsgCommands aCommand)
+    {
+
+    switch(aCommand)
+    	{
+    	case EMsgClose:
+    		{
+    		HandleCommandL(EAknCmdExit);
+    		break;
+    		}
+    	//intentional fallthrough
+    	case EMsgNone:
+    	case EMsgSave:
+    	case EMsgReply:
+    	case EMsgForwad:
+    	case EMsgSend:
+    	case EMsgAddressBook:
+    		{
+			break;
+			}
+		}
+
+    return KErrNone;
+    }
+
+TBool CBvaAppUi::IsCommandSupported(TMsgCommands /*aCommand*/) const
+    {
+    //Nothing supported
+    return EFalse;
+    }
+
+TBool CBvaAppUi::NoDataFile()
+    {
+	return (iFileHandleSize == 0);
+    }
+
+// ----------------------------------------------------------------------------
+// CBvaAppUi::LaunchHelpL
+// launch help using context
+//
+// ----------------------------------------------------------------------------
+void CBvaAppUi::LaunchHelpL()
+    {
+    // activate Help application
+    CArrayFix<TCoeHelpContext>* helpContext = AppHelpContextL();
+    HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CBvaAppUi::HelpContextL
+// returns help context
+//
+// ----------------------------------------------------------------------------
+CArrayFix<TCoeHelpContext>* CBvaAppUi::HelpContextL() const
+	{
+
+    TCoeHelpContext bioControlHelpContext;
+	if(iContainer->IsBioControl())
+	    {
+    	iContainer->BioControl().GetHelpContext( bioControlHelpContext );
+
+    	if(!bioControlHelpContext.IsNull())
+			{
+			return CreateHelpContextArrayL(bioControlHelpContext);
+			}
+		// if help context not available for bio control
+		else
+			{
+			return NULL;
+			}
+	    }
+	return NULL;
+	}
+
+CArrayFix<TCoeHelpContext>* CBvaAppUi::CreateHelpContextArrayL(
+	const TCoeHelpContext& aHelpContext ) const
+	{
+	CArrayFix<TCoeHelpContext>* help =
+		new(ELeave) CArrayFixFlat<TCoeHelpContext>(1);
+	CleanupStack::PushL(help);
+	help->AppendL(aHelpContext);
+	CleanupStack::Pop(help);
+	return help;
+	}
+
+void CBvaAppUi::Panic(TBVAPanic aCode)
+    {
+    User::Panic(KBVAAppUI, aCode);
+    }
+
+
+// End of File