diff -r 000000000000 -r 72b543305e3a messagingappbase/smartmessaging/bva/src/BvaAppUi.cpp --- /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 +#include +#include // CAknInformationNote +#include +#include "BvaContainer.h" +#include "BvaDocument.h" +#include "BvaAppUi.h" +#include "bvalog.h" + +#include +#include // for HlpLauncher +#include +// 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* helpContext = AppHelpContextL(); + HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext ); + } + + +// ---------------------------------------------------------------------------- +// CBvaAppUi::HelpContextL +// returns help context +// +// ---------------------------------------------------------------------------- +CArrayFix* 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* CBvaAppUi::CreateHelpContextArrayL( + const TCoeHelpContext& aHelpContext ) const + { + CArrayFix* help = + new(ELeave) CArrayFixFlat(1); + CleanupStack::PushL(help); + help->AppendL(aHelpContext); + CleanupStack::Pop(help); + return help; + } + +void CBvaAppUi::Panic(TBVAPanic aCode) + { + User::Panic(KBVAAppUI, aCode); + } + + +// End of File