diff -r 000000000000 -r 8466d47a6819 meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrsyncfield.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrsyncfield.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,296 @@ +/* +* Copyright (c) 2007-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 Synchronization field implementation + * +*/ + +#include "emailtrace.h" +#include "cesmrsyncfield.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "cesmrsync.h" +#include "cesmrlistquery.h" +#include + +// Unnamed namespace for local definitions and functions +namespace{ // codescanner::namespace + +CCalEntry::TReplicationStatus MapToReplicationStatus( + TESMRSyncValue aSyncValue ) + { + CCalEntry::TReplicationStatus ret; + switch ( aSyncValue ) + { + case ESyncNone: + { + ret = CCalEntry::ERestricted; + break; + } + case ESyncPrivate: + { + ret = CCalEntry::EPrivate; + break; + } + case ESyncPublic: + { + ret = CCalEntry::EOpen; + break; + } + default: + { + ret = CCalEntry::ERestricted; + } + } + + return ret; + } + +} // namespace + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CESMRSyncField::NewL +// --------------------------------------------------------------------------- +// +CESMRSyncField* CESMRSyncField::NewL( ) + { + FUNC_LOG; + CESMRSyncField* self = new (ELeave) CESMRSyncField; + CleanupStack::PushL ( self ); + self->ConstructL ( ); + CleanupStack::Pop ( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CESMRSyncField::~CESMRSyncField +// --------------------------------------------------------------------------- +// +CESMRSyncField::~CESMRSyncField( ) + { + FUNC_LOG; + iArray.ResetAndDestroy ( ); + iArray.Close ( ); + } + +// --------------------------------------------------------------------------- +// CESMRSyncField::InitializeL +// --------------------------------------------------------------------------- +// +void CESMRSyncField::InitializeL() + { + FUNC_LOG; + iSync->SetFont( iLayout->Font( iCoeEnv, iFieldId ) ); + iSync->SetLabelAlignment( CESMRLayoutManager::IsMirrored() + ? ELayoutAlignRight : ELayoutAlignLeft ); + AknLayoutUtils::OverrideControlColorL(*iSync, + EColorLabelText, + iLayout->GeneralListAreaTextColor() ); + } + +// --------------------------------------------------------------------------- +// CESMRSyncField::InternalizeL +// --------------------------------------------------------------------------- +// +void CESMRSyncField::InternalizeL( MESMRCalEntry& aEntry ) + { + FUNC_LOG; + TInt synchValue = aEntry.Entry().ReplicationStatusL ( ); + + // esmrgui.rss + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC ( reader, R_ESMREDITOR_SYNC ); + + // Read sync items to array + iArray.ResetAndDestroy( ); + TInt count = reader.ReadInt16 ( ); + for (TInt i(0); i < count; i++ ) + { + CESMRSync* sync = new (ELeave) CESMRSync(); + CleanupStack::PushL( sync ); + sync->ConstructFromResourceL ( reader ); + iArray.AppendL ( sync ); + CleanupStack::Pop( sync ); + if ( synchValue == MapToReplicationStatus ( sync->Id ( ) ) ) + { + iIndex = i; + iSync->SetTextL ( sync->TextL ( ) ); + } + } + // resource reader + CleanupStack::PopAndDestroy(); // codescanner::cleanup + } + +// --------------------------------------------------------------------------- +// CESMRSyncField::ExternalizeL +// --------------------------------------------------------------------------- +// +void CESMRSyncField::ExternalizeL( MESMRCalEntry& aEntry ) + { + FUNC_LOG; + if ( iIndex < iArray.Count() ) + { + CCalEntry::TReplicationStatus + repStatus = MapToReplicationStatus ( iArray[iIndex]->Id ( ) ); + aEntry.Entry().SetReplicationStatusL (repStatus ); + } + else + { + User::Leave( KErrOverflow ); + } + } + +// --------------------------------------------------------------------------- +// CESMRPriorityField::SetOutlineFocusL +// --------------------------------------------------------------------------- +// +void CESMRSyncField::SetOutlineFocusL( TBool aFocus ) + { + FUNC_LOG; + CESMRField::SetOutlineFocusL ( aFocus ); + + //Focus gained + if ( aFocus ) + { + ChangeMiddleSoftKeyL(EESMRCmdOpenSyncQuery, R_QTN_MSK_OPEN); + } + } + +// --------------------------------------------------------------------------- +// CESMRPriorityField::ExecuteGenericCommandL +// --------------------------------------------------------------------------- +// +void CESMRSyncField::ExecuteGenericCommandL( TInt aCommand ) + { + FUNC_LOG; + if(aCommand == EESMRCmdOpenSyncQuery || + aCommand == EAknCmdOpen ) + { + ExecuteSyncQueryL(); + } + } + +// --------------------------------------------------------------------------- +// CESMRPriorityField::ExecuteSyncQuery +// --------------------------------------------------------------------------- +// +void CESMRSyncField::ExecuteSyncQueryL() + { + FUNC_LOG; + + TInt ret = + CESMRListQuery::ExecuteL( CESMRListQuery::EESMRSynchronizationPopup ); + if ( ret != KErrCancel ) + { + iIndex = ret; + UpdateLabelL (ret ); + } + } + + +// --------------------------------------------------------------------------- +// CESMRSyncField::OfferKeyEventL +// --------------------------------------------------------------------------- +// +TKeyResponse CESMRSyncField::OfferKeyEventL( const TKeyEvent& aEvent, + TEventCode aType ) + { + FUNC_LOG; + TKeyResponse response( EKeyWasNotConsumed); + if ( aType == EEventKey ) + { + switch ( aEvent.iScanCode ) + { + case EStdKeyLeftArrow: + { + if ( iIndex > 0 ) + { + UpdateLabelL ( --iIndex ); + response = EKeyWasConsumed; + } + } + break; + + case EStdKeyRightArrow: + { + if ( iIndex < (iArray.Count() - 1) ) + { + UpdateLabelL ( ++iIndex ); + response = EKeyWasConsumed; + } + } + break; + + default: + break; + } + } + return response; + } + +// --------------------------------------------------------------------------- +// CESMRSyncField::CESMRSyncField +// --------------------------------------------------------------------------- +// +CESMRSyncField::CESMRSyncField( ) : + iIndex(0) + { + FUNC_LOG; + //do nothing + } + +// --------------------------------------------------------------------------- +// CESMRSyncField::ConstructL +// --------------------------------------------------------------------------- +// +void CESMRSyncField::ConstructL( ) + { + FUNC_LOG; + SetFieldId( EESMRFieldSync ); + + iSync = new (ELeave) CEikLabel; + iSync->SetTextL( KNullDesC ); + + TGulAlignment align; + align.SetHAlignment( EHLeft ); + align.SetVAlignment( EVCenter ); + iSync->SetAlignment( align ); + + CESMRIconField::ConstructL( + KAknsIIDQgnFscalIndiSynchronisation, + iSync ); + } + +// --------------------------------------------------------------------------- +// CESMRSyncField::UpdateLabelL +// --------------------------------------------------------------------------- +// +void CESMRSyncField::UpdateLabelL( TInt aIndex ) + { + FUNC_LOG; + CESMRSync* sync = iArray[ aIndex ]; + iSync->SetTextL( sync->TextL() ); + iSync->DrawDeferred(); + } + +// EOF +