diff -r 84d9eb65b26f -r 2981cb3aa489 messagingappbase/mce/src/MceDeliveryReportView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/mce/src/MceDeliveryReportView.cpp Wed Nov 03 09:52:46 2010 +0530 @@ -0,0 +1,355 @@ +/* +* Copyright (c) 2002 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: +* Messaging Centre application "Delivery Reports" view class +* implementation. +* +*/ + + + +// INCLUDE FILES + + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include + +#include "MceDeliveryReportView.h" +#include "MceDeliveryReportControlContainer.h" +#include "MceApplication.h" +#include "MceDocument.h" +#include "mceui.h" +#include "MceCommands.hrh" // UID enumeration. +#include "MceLogEngine.h" + +#include +#include +#include +#include +#include +#include "MceSessionHolder.h" + +// For Muiu split +#include + +// The position of the middle soft key +const TInt KMSKPosition = 3; + + +// ================= MEMBER FUNCTIONS ======================= + +CMceDeliveryReportView* CMceDeliveryReportView::NewL( CMceSessionHolder& aSessionHolder ) + { + CMceDeliveryReportView* self = new(ELeave) CMceDeliveryReportView(aSessionHolder); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +CMceDeliveryReportView::CMceDeliveryReportView( CMceSessionHolder& aSessionHolder ) : + iSessionHolder(aSessionHolder) + { + iSessionHolder.AddClient(); + } + +CMceDeliveryReportView::~CMceDeliveryReportView() + { + iCoeEnv->RemoveForegroundObserver( *this ); + + if (iContainer) + { + AppUi()->RemoveFromViewStack(*this,iContainer); + + // Destroy the control container + delete iContainer; + } + + + ClosePopup(); + + FeatureManager::UnInitializeLib(); + iSessionHolder.RemoveClient(); + } + +CMceUi* CMceDeliveryReportView::MceAppUi() + { + // Explicit cast: the app ui must always be of type CMceUi. + return STATIC_CAST( CMceUi*, CAknView::AppUi() ); + } + + +void CMceDeliveryReportView::HandleCommandL( TInt aCommandId ) + { + switch (aCommandId ) + { + case EMceCmdCall: + { + if( iPopup ) + { + iPopup->StopDisplayingMenuBar(); + ClosePopup(); + } + TInt index( 0 ); + index = iContainer->ListBox()->CurrentItemIndex(); + TPhCltTelephoneNumber tel; + tel = MceAppUi()->LogEngine()->Event( index )->Number(); + + // Check the validity of the phone number and initiate the call + TBool validNumber = CommonPhoneParser::ParsePhoneNumber( tel, CommonPhoneParser::EPlainPhoneNumber ); + if ( validNumber ) + { + TPhCltNameBuffer recipientstring( KNullDesC ); + iAvkonAppUi->SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort | CAknAppUiBase::EDisableSendKeyLong ); + MsvUiServiceUtilitiesInternal::CallToSenderQueryL( tel, recipientstring, ETrue ); + iAvkonAppUi->SetKeyEventFlags( 0x00 ); + } + } + break; + case EMceClearDrList: + { + CAknQueryDialog* queryDlg = CAknQueryDialog::NewL(); + if( queryDlg->ExecuteLD( R_MCE_CLEAR_LIST_CONFIRMATION_QUERY ) ) + { + MceAppUi()->LogEngine()->ClearDrListL(); + } + SetMSKButtonL(); + } + break; + case EAknCmdHideInBackground: + // handled by app ui and sent directly to appui by avkon framework so ignore this by view. + break; + default: + MceAppUi()->HandleCommandL( aCommandId ); + break; + } + } + + +TUid CMceDeliveryReportView::Id() const + { + return KMceDeliveryReportViewId; + } + + +void CMceDeliveryReportView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ) + { + TInt aPosition = -1; + + if( aMenuPane->MenuItemExists( EAknCmdHelp, aPosition ) ) + { + // KFeatureIdHelp is used by Feature Mgr to check if help is supported + if( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse ); + } + else + { + aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); + } + } + + switch( aResourceId ) + { + case R_MCE_DELIVERY_REPORT_SYSTEM_MENU: + + if( ! MceAppUi()->LogEngine()-> + IsNumberAvailable( iContainer->ListBox()->CurrentItemIndex() ) ) + { + if ( aMenuPane->MenuItemExists( EMceCmdCall, aPosition ) ) + { + aMenuPane->DeleteMenuItem( EMceCmdCall ); + } + } + + if ( iContainer->ListBox()->Model()->NumberOfItems() == 0 ) + { + aMenuPane->DeleteMenuItem( EMceClearDrList ); + } + break; + + default: + break; + } + } + + +void CMceDeliveryReportView::HandleClientRectChange() + { + iContainer->SetRect(ClientRect()); + } + +void CMceDeliveryReportView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/) + { + if ( iContainer == NULL ) + { + // Create the control container + iContainer = CMceDeliveryReportControlContainer::NewL(this, iSessionHolder, ClientRect() ); + AppUi()->AddToViewStackL(*this,iContainer); + } + iContainer->ListBox()->SetListBoxObserver(this); + + + // Fetch pointer to the default title pane control + CAknTitlePane* title=(CAknTitlePane *)StatusPane()->ControlL( + TUid::Uid(EEikStatusPaneUidTitle)); + HBufC* text = StringLoader::LoadLC( R_MCE_DELIVERY_REPORTS_VIEW_TITLE ); + title->SetTextL( *text ); + CleanupStack::PopAndDestroy(); // text + + MceAppUi()->SetMceViewActive( EMceDeliveryReportsViewActive ); + + // Just ignore if this leaves. Worst thing happens here is that user sees empty delivery reports view. + TRAP_IGNORE( MceAppUi()->LogEngine()->ForegroundGainedL() ); + if( iContainer->LogDisabledL() == KMceDRLogingOff ) + { + iContainer->PopUpNoteL(); + } + } + +void CMceDeliveryReportView::DoDeactivate() + { + if (iContainer) + { + // Remove view and its control from the view stack + AppUi()->RemoveFromViewStack(*this, iContainer); + + // Destroy the container control + delete iContainer; + iContainer = NULL; + } + } + +void CMceDeliveryReportView::ConstructL() + { + // Sets up TLS, must be done before FeatureManager is used. + FeatureManager::InitializeLibL(); + + // Init base class + BaseConstructL( R_MCE_DELIVERY_REPORT_VIEW ); + iCoeEnv->AddForegroundObserverL( *this ); + } + +void CMceDeliveryReportView::HandleListBoxEventL( + CEikListBox* /*aListBox*/, + TListBoxEvent aEventType) + { + if ( aEventType == EEventItemSingleClicked ) + { + ProcessCommandL( EAknSoftkeyContextOptions ); + } + } + +void CMceDeliveryReportView::LaunchPopupMenuL( TInt aResourceId ) + { + ClosePopup(); + iPopup = new ( ELeave ) CEikMenuBar; + TRAPD( err, DoLaunchPopupL( aResourceId ) ); + if( err ) + { + ClosePopup(); + User::Leave( err ); + } + } + +void CMceDeliveryReportView::ClosePopup() + { + if( iPopup ) + { + AppUi()->RemoveFromViewStack( *this, iPopup ); + delete( iPopup ); + iPopup = NULL; + } + } + +void CMceDeliveryReportView::DoLaunchPopupL( TInt aResourceId ) + { + iPopup->ConstructL( this, 0, aResourceId ); + AppUi()->AddToViewStackL( *this, iPopup, ECoeStackPriorityMenu, + ECoeStackFlagRefusesFocus ); + iPopup->SetMenuType(CEikMenuBar::EMenuContext); + iPopup->TryDisplayMenuBarL(); + } + + +void CMceDeliveryReportView::HandleGainingForeground() + { + if ( MceAppUi()->MceViewActive( EMceDeliveryReportsViewActive ) ) + { + // Just ignore if this leaves. Worst thing happens here is that user sees empty delivery reports view. + TRAP_IGNORE( MceAppUi()->LogEngine()->ForegroundGainedL() ); + } + } + +void CMceDeliveryReportView::HandleLosingForeground() + { + MceAppUi()->LogEngine()->ForegroundLost(); + } + +void CMceDeliveryReportView::ProcessCommandL( TInt aCommand ) + { + TInt index( 0 ); + TBool validNumber = EFalse ; + index = iContainer->ListBox()->CurrentItemIndex(); + if ( index >= 0 ) + { + TPhCltTelephoneNumber tel; + tel = MceAppUi()->LogEngine()->Event( index )->Number(); + // Check the validity of the phone number and initiate the call + validNumber = CommonPhoneParser::ParsePhoneNumber( tel, CommonPhoneParser::EPlainPhoneNumber ); + } + if ( validNumber && aCommand == EAknSoftkeyContextOptions ) + { + aCommand = EAknSoftkeyOptions; + MenuBar()->SetMenuTitleResourceId( R_MCE_DELIVERY_REPORT_OK_MENUBAR ); + MenuBar()->SetMenuType(CEikMenuBar::EMenuContext); + } + else + { + MenuBar()->SetMenuTitleResourceId( R_MCE_DELIVERY_REPORT_MENUBAR ); + MenuBar()->SetMenuType(CEikMenuBar::EMenuOptions); + } + + CAknView::ProcessCommandL( aCommand ); + } + +void CMceDeliveryReportView::SetMSKButtonL() + { + TInt resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS; + if ( iContainer->ListBox()->Model()->NumberOfItems() == 0 || + !MceAppUi()->LogEngine()-> + IsNumberAvailable( iContainer->ListBox()->CurrentItemIndex() ) ) + { + resourceId = R_MCE_MSK_BUTTON_EMPTY; + } + CEikButtonGroupContainer* cba = Cba(); + cba->SetCommandL( KMSKPosition, resourceId ); + cba->DrawDeferred(); + } + +// End of File