diff -r d189ee25cf9d -r 3533d4323edc meetingrequest/mrgui/src/cesmrtrackingviewdialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrgui/src/cesmrtrackingviewdialog.cpp Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,389 @@ +/* +* Copyright (c) 2009 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 : ESMR tracking view dialog +* Version : %version: e002sa32#15.1.1 % +* +*/ + +#include "emailtrace.h" +#include "cesmrtrackingviewdialog.h" + +// SYSTEM INCLUDE +#include +#include +#include +#include +// +#include "cesmrpolicy.h" +// +#include + +#include "esmrgui.hrh" +#include "cesmrtrackingview.h" +#include "cesmrviewerfieldstorage.h" +#include "mesmrcalentry.h" +#include "cesmrcontactmenuhandler.h" +#include "esmrconfig.hrh" +#include "esmrinternaluid.h" + +#ifdef _DEBUG +namespace // codescanner::namespace +{ +// Literal for viewer dialog +_LIT( KESMRTrackinglgPanicTxt, "ESMRTrackingDlg" ); + +enum TESMRViewerDlgPanic + { + EESMRTrackingVieweDlgInvalidCommand + }; + +void Panic( TESMRViewerDlgPanic aPanic ) + { + User::Panic( KESMRTrackinglgPanicTxt, aPanic ); + } +} +#endif + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::NewL +// --------------------------------------------------------------------------- +// +CESMRTrackingViewDialog* CESMRTrackingViewDialog::NewL( + const CESMRPolicy& aPolicy, + MESMRCalEntry& aEntry, + MAgnEntryUiCallback& aCallback ) + { + FUNC_LOG; + CESMRTrackingViewDialog* self = + new (ELeave) CESMRTrackingViewDialog( aPolicy, aEntry, aCallback); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::~CESMRTrackingViewDialog +// --------------------------------------------------------------------------- +// +CESMRTrackingViewDialog::~CESMRTrackingViewDialog() + { + FUNC_LOG; + + iESMRStatic.Close(); + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::CESMRTrackingViewDialog +// --------------------------------------------------------------------------- +// +CESMRTrackingViewDialog::CESMRTrackingViewDialog( + const CESMRPolicy& aPolicy, + MESMRCalEntry& aEntry, + MAgnEntryUiCallback& aCallback) : + iPolicy( aPolicy ), + iEntry( aEntry ), + iCallback(aCallback) + { + FUNC_LOG; + // Do nothing + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::ConstructL +// --------------------------------------------------------------------------- +// +void CESMRTrackingViewDialog::ConstructL() + { + FUNC_LOG; + CAknDialog::ConstructL ( R_TRACKING_DIALOG_MENUBAR ); + iESMRStatic.ConnectL(); + iESMRStatic.ContactMenuHandlerL().Reset(); + + TRect clientRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, clientRect ); + + // Sort the attendees list so that Req attendeees comes first + // and then opt attendees + SortAttendeesL(); + + // Set the index of builder to zero so that + // participant field is created from index. + + iESMRStatic.SetCurrentFieldIndex(0); + + iView = CESMRTrackingView::NewL( iEntry, clientRect, + CountAttendeesL(CCalAttendee::EReqParticipant), + CountAttendeesL(CCalAttendee::EOptParticipant)); + iView->SetParentDialog(this); + + if ( iEntry.Entry().SummaryL().Length() == 0 ) + { + // if no title, set unnamed text: + HBufC* title = StringLoader::LoadLC (R_QTN_MEET_REQ_CONFLICT_UNNAMED); + iView->SetTitleL( *title ); + CleanupStack::PopAndDestroy( title ); + } + else + { + iView->SetTitleL( iEntry.Entry().SummaryL() ); + } + + iMenuBar->SetContextMenuTitleResourceId( R_MR_TRACKING_VIEW_CONTEXT_MENU ); + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::CreateCustomControlL +// --------------------------------------------------------------------------- +// +SEikControlInfo + CESMRTrackingViewDialog::CreateCustomControlL( TInt aType ) + { + FUNC_LOG; + SEikControlInfo controlInfo; + controlInfo.iControl = NULL; + controlInfo.iFlags = 0; + controlInfo.iTrailerTextId = 0; + + if ( aType == EEsMrTrackingType ) + { + controlInfo.iControl = iView; + } + + return controlInfo; + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::OfferKeyEventL +// --------------------------------------------------------------------------- +// +TKeyResponse CESMRTrackingViewDialog::OfferKeyEventL + (const TKeyEvent& aEvent, TEventCode aType) + { + FUNC_LOG; + TKeyResponse response = CAknDialog::OfferKeyEventL( aEvent, aType ); + + if ( ( response == EKeyWasNotConsumed && aEvent.iCode != EKeyEscape) + && (!MenuShowing()) ) + { + response = iView->OfferKeyEventL( aEvent, aType ); + } + return response; + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::OkToExitL +// --------------------------------------------------------------------------- +// +TBool CESMRTrackingViewDialog::OkToExitL (TInt aButtonId) + { + FUNC_LOG; + TBool res( EFalse ); + // show options + switch ( aButtonId ) + { + case EAknSoftkeyOptions: + { + CAknDialog::DisplayMenuL(); + break; + } + case EESMRCmdBack: + { + res = ETrue; + break; + } + case EESMRCmdCall: + { + iESMRStatic.ContactMenuHandlerL().ExecuteOptionsMenuL( + EESMRCmdActionMenuFirst ); + break; + } + default: + { + res = CAknDialog::OkToExitL( aButtonId ); + break; + } + } + + return res; + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::CountAttendeesL +// --------------------------------------------------------------------------- +// +TInt CESMRTrackingViewDialog::CountAttendeesL( // codescanner::intleaves + CCalAttendee::TCalRole aRole) + { + FUNC_LOG; + RPointerArray& calAttendeeList = iEntry.Entry().AttendeesL(); + + TInt totalParticipants = calAttendeeList.Count(); + TInt totalAttendees(0); + + for (TInt i=0; i< totalParticipants; i++) + { + CCalAttendee::TCalRole role = CCalAttendee::ENonParticipant; + role = calAttendeeList[i]->RoleL(); + if ( role == aRole ) + { + ++totalAttendees; + } + } + return totalAttendees; + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::SortAttendeesL +// --------------------------------------------------------------------------- +// +void CESMRTrackingViewDialog::SortAttendeesL() + { + FUNC_LOG; + RPointerArray& attendees = iEntry.Entry().AttendeesL(); + // Sort the attendees so that REqPart come first and then optPart + // This is required once only + TInt i, j; + TBool flag = ETrue; // set flag to true to begin initial pass + TInt arrayLength = attendees.Count(); + for(i = 1; (i <= arrayLength) && flag; i++) + { + flag = EFalse; + for (j=0; j < (arrayLength -1); j++) + { + CCalAttendee::TCalRole lhs = CCalAttendee::ENonParticipant; + CCalAttendee::TCalRole rhs = CCalAttendee::ENonParticipant; + lhs = attendees[j+1]->RoleL(); + rhs = attendees[j]->RoleL(); + if ( lhs < rhs ) + { + CCalAttendee* tempAttendee = attendees[j]; + attendees[j] = attendees[j+1]; + attendees[j+1] = tempAttendee; + flag = ETrue; // indicates that a swap occurred. + } + }// Inner loop (j) + } // Outer loop (i) + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::ProcessCommandL +// --------------------------------------------------------------------------- +// +void CESMRTrackingViewDialog::ProcessCommandL( TInt aCommand ) + { + FUNC_LOG; + TRAPD( err, DoProcessCommandL( aCommand ) ); + if ( err != KErrNone && + err != KErrCancel && + err != KErrArgument ) + { + User::Leave(err); + } + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::DoProcessCommandL +// --------------------------------------------------------------------------- +// +void CESMRTrackingViewDialog::DoProcessCommandL( TInt aCommand ) + { + FUNC_LOG; + CAknDialog::ProcessCommandL( aCommand ); + switch ( aCommand ) + { + case EAknCmdExit: + { + TryExitL( aCommand ); + break; + } + case EAknCmdHelp: + { + iView->LaunchViewerHelpL(); + break; + } + default: + { + if ( aCommand >= EESMRCmdActionMenuFirst && + aCommand <= EESMRCmdActionMenuLast ) + { + iESMRStatic.ContactMenuHandlerL().ExecuteOptionsMenuL( + aCommand ); + } + else + { + __ASSERT_DEBUG( EFalse, + Panic( EESMRTrackingVieweDlgInvalidCommand ) ); + } + break; + } + } + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::DynInitMenuPaneL +// --------------------------------------------------------------------------- +// +void CESMRTrackingViewDialog::DynInitMenuPaneL( + TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + FUNC_LOG; + if ( aResourceId == R_ACTION_MENU ) + { + iESMRStatic.ContactMenuHandlerL().InitOptionsMenuL( aMenuPane ); + } + + if ( aResourceId == R_MR_TRACKING_VIEW_MENU ) + { + aMenuPane->SetItemDimmed( EESMRCmdActionMenu, + !iESMRStatic.ContactMenuHandlerL().OptionsMenuAvailable() ); + } + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::ActivateL +// --------------------------------------------------------------------------- +// +void CESMRTrackingViewDialog::ActivateL() + { + FUNC_LOG; + CAknDialog::ActivateL(); + iView->InternalizeL(); + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::ExecuteViewLD +// --------------------------------------------------------------------------- +// +TInt CESMRTrackingViewDialog::ExecuteViewLD() + { + FUNC_LOG; + return ExecuteLD( R_MRTRACKING_DIALOG ); + } + +// --------------------------------------------------------------------------- +// CESMRTrackingViewDialog::HandleFieldEventL +// --------------------------------------------------------------------------- + +void CESMRTrackingViewDialog::HandleListEventL() + { + FUNC_LOG; + iMenuBar->TryDisplayContextMenuBarL(); + } + +// End of File +