diff -r d189ee25cf9d -r 3533d4323edc meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrsyncfield.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrsyncfield.cpp Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,352 @@ +/* +* 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 Synchronization field implementation + * +*/ + +#include "cesmrsyncfield.h" +#include "cmrimage.h" +#include "cmrlabel.h" +#include "cesmrtextitem.h" +#include "cesmrlistquery.h" +#include "nmrlayoutmanager.h" + +#include +#include +#include +#include +#include +#include +// DEBUG +#include "emailtrace.h" + +// 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; + } + + // Field's component count, icon and label + const TInt KComponentCount( 2 ); + } // 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 ( ); + + delete iIcon; + } + +// --------------------------------------------------------------------------- +// 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++ ) + { + CESMRTextItem* sync = new (ELeave) CESMRTextItem(); + CleanupStack::PushL( sync ); + sync->ConstructFromResourceL ( reader ); + iArray.AppendL ( sync ); + CleanupStack::Pop( sync ); + if ( synchValue == MapToReplicationStatus ( static_cast( 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 ( static_cast( 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 +// --------------------------------------------------------------------------- +// +TBool CESMRSyncField::ExecuteGenericCommandL( TInt aCommand ) + { + FUNC_LOG; + TBool isUsed( EFalse ); + if(aCommand == EESMRCmdOpenSyncQuery || + aCommand == EAknCmdOpen ) + { + HandleTactileFeedbackL(); + + ExecuteSyncQueryL(); + isUsed = ETrue; + } + return isUsed; + } + +// --------------------------------------------------------------------------- +// 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; + SetFieldId( EESMRFieldSync ); + SetFocusType( EESMRHighlightFocus ); + } + +// --------------------------------------------------------------------------- +// CESMRSyncField::ConstructL +// --------------------------------------------------------------------------- +// +void CESMRSyncField::ConstructL( ) + { + FUNC_LOG; + iSync = CMRLabel::NewL(); + CESMRField::ConstructL( iSync ); + iSync->SetTextL( KNullDesC() ); + + TGulAlignment align; + align.SetHAlignment( EHLeft ); + align.SetVAlignment( EVCenter ); + iSync->SetAlignment( align ); + + iIcon = CMRImage::NewL( NMRBitmapManager::EMRBitmapSynchronization ); + } + +// --------------------------------------------------------------------------- +// CESMRSyncField::UpdateLabelL +// --------------------------------------------------------------------------- +// +void CESMRSyncField::UpdateLabelL( TInt aIndex ) + { + FUNC_LOG; + CESMRTextItem* sync = iArray[ aIndex ]; + iSync->SetTextL( sync->TextL() ); + iSync->DrawDeferred(); + } + +// --------------------------------------------------------------------------- +// CESMRSyncField::CountComponentControls +// --------------------------------------------------------------------------- +// +TInt CESMRSyncField::CountComponentControls() const + { + return KComponentCount; + } + +// --------------------------------------------------------------------------- +// CESMRSyncField::ComponentControl +// --------------------------------------------------------------------------- +// +CCoeControl* CESMRSyncField::ComponentControl( TInt aIndex ) const + { + CCoeControl* control = NULL; + switch( aIndex ) + { + case 0: + { + control = iSync; + break; + } + case 1: + { + control = iIcon; + break; + } + default: + ASSERT( EFalse ); + } + + return control; + } + +// --------------------------------------------------------------------------- +// CESMRSyncField::SizeChanged +// --------------------------------------------------------------------------- +// +void CESMRSyncField::SizeChanged() + { + TRect rect( Rect() ); + TAknLayoutRect iconLayout = + NMRLayoutManager::GetLayoutRect( + rect, NMRLayoutManager::EMRLayoutTextEditorIcon ); + TRect iconRect( iconLayout.Rect() ); + iIcon->SetRect( iconRect ); + + TAknLayoutRect bgLayoutRect = + NMRLayoutManager::GetLayoutRect( + rect, NMRLayoutManager::EMRLayoutTextEditorBg ); + TRect bgRect( bgLayoutRect.Rect() ); + // Move focus rect so that it's relative to field's position. + bgRect.Move( -Position() ); + SetFocusRect( bgRect ); + + TAknTextComponentLayout editorLayout = + NMRLayoutManager::GetTextComponentLayout( + NMRLayoutManager::EMRTextLayoutTextEditor ); + + AknLayoutUtils::LayoutLabel( iSync, rect, editorLayout ); + } + +// EOF +