diff -r d189ee25cf9d -r 3533d4323edc meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrviewerrecurrencedatefield.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrviewerrecurrencedatefield.cpp Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,293 @@ +/* +* 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: Recurrence date field for viewers + * +*/ + + +#include "cesmrviewerrecurrencedatefield.h" +#include "mesmrresponseobserver.h" +#include "mesmrlistobserver.h" +#include "esmrfieldbuilderdef.h" +#include "cmrlabel.h" +#include "nmrlayoutmanager.h" +#include "nmrcolormanager.h" +#include "cesmrglobalnote.h" + +#include +#include +#include +#include +#include +#include +#include +// DEBUG +#include "emailtrace.h" +namespace // codescanner::namespace + { + const TInt KComponentCount( 2 ); + } +// ======== MEMBER FUNCTIONS ======== + +// ----------------------------------------------------------------------------- +// CESMRViewerRecurrenceDateField::CESMRViewerRecurrenceDateField +// ----------------------------------------------------------------------------- +// +CESMRViewerRecurrenceDateField::CESMRViewerRecurrenceDateField() +: iRepeatUntilDate( Time::NullTTime() ) + { + FUNC_LOG; + SetFieldId( EESMRFieldRecurrenceDate ); + SetFocusType( EESMRHighlightFocus ); + } + +// ----------------------------------------------------------------------------- +// CESMRViewerRecurrenceDateField::~CESMRViewerRecurrenceDateField +// ----------------------------------------------------------------------------- +// +CESMRViewerRecurrenceDateField::~CESMRViewerRecurrenceDateField() + { + FUNC_LOG; + delete iRepeatTopic; + delete iRepeatDate; + } + +// ----------------------------------------------------------------------------- +// CESMRViewerRecurrenceDateField::NewL +// ----------------------------------------------------------------------------- +// +CESMRViewerRecurrenceDateField* CESMRViewerRecurrenceDateField::NewL() + { + FUNC_LOG; + CESMRViewerRecurrenceDateField* self = + new (ELeave) CESMRViewerRecurrenceDateField(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CESMRViewerRecurrenceDateField::ConstructL +// ----------------------------------------------------------------------------- +// +void CESMRViewerRecurrenceDateField::ConstructL() + { + FUNC_LOG; + CESMRField::ConstructL( NULL ); + iRepeatTopic = CMRLabel::NewL( this ); + iRepeatDate = CMRLabel::NewL( this ); + + iRepeatTopic->SetTextL( KNullDesC ); + iRepeatDate->SetTextL( KNullDesC ); + } + +// ----------------------------------------------------------------------------- +// CESMRViewerRecurrenceDateField::InitializeL +// ----------------------------------------------------------------------------- +// +void CESMRViewerRecurrenceDateField::InitializeL() + { + FUNC_LOG; + NMRColorManager::SetColor( *iRepeatTopic, + NMRColorManager::EMRMainAreaTextColor ); + + NMRColorManager::SetColor( *iRepeatDate, + NMRColorManager::EMRMainAreaTextColor ); + //this control cannot ever get keyboard focus + SetFocusing(EFalse); + } + +// ----------------------------------------------------------------------------- +// CESMRViewerRecurrenceDateField::ExecuteGenericCommandL +// ----------------------------------------------------------------------------- +// +TBool CESMRViewerRecurrenceDateField::ExecuteGenericCommandL( TInt aCommand ) + { + FUNC_LOG; + + TBool retValue( EFalse ); + + if( (aCommand == EAknCmdOpen) && IsLocked() ) + { + HandleTactileFeedbackL(); + + CESMRGlobalNote::ExecuteL( + CESMRGlobalNote::EESMRUnableToEdit ); + retValue = ETrue; + } + else if ( EMRCmdDoEnvironmentChange == aCommand ) + { + FormatRepeatUntilDateL(); + retValue = ETrue; + } + + return retValue; + } + +// ----------------------------------------------------------------------------- +// CESMRViewerRecurrenceDateField::SizeChanged +// ----------------------------------------------------------------------------- +// +void CESMRViewerRecurrenceDateField::SizeChanged() + { + FUNC_LOG; + TRect rect( Rect() ); + // First row + TAknLayoutRect row1LayoutRect = + NMRLayoutManager::GetFieldRowLayoutRect( rect, 1 ); + rect = row1LayoutRect.Rect(); + + TAknTextComponentLayout topicLayoutText = + NMRLayoutManager::GetTextComponentLayout( + NMRLayoutManager::EMRTextLayoutMultiRowTextEditor ); + + AknLayoutUtils::LayoutLabel( iRepeatTopic, rect, topicLayoutText ); + + rect = Rect(); + // Move the iY down the height of the topic field + TInt movement = row1LayoutRect.Rect().Height(); + rect.Move( 0, movement ); + + // Second row + TAknLayoutRect row2LayoutRect = + NMRLayoutManager::GetFieldRowLayoutRect( rect, 2 ); + rect = row2LayoutRect.Rect(); + + TAknTextComponentLayout dateLayoutText = + NMRLayoutManager::GetTextComponentLayout( + NMRLayoutManager::EMRTextLayoutMultiRowTextEditor ); + + AknLayoutUtils::LayoutLabel( iRepeatDate, rect, dateLayoutText ); + } + +// ----------------------------------------------------------------------------- +// CESMRViewerRecurrenceDateField::MinimumSize +// ----------------------------------------------------------------------------- +// +TSize CESMRViewerRecurrenceDateField::MinimumSize() + { + TInt height( 0 ); + // First row + TAknLayoutRect row1LayoutRect = + NMRLayoutManager::GetFieldRowLayoutRect( Rect(), 1 ); + height += row1LayoutRect.Rect().Height(); + // Second row + TAknLayoutRect row2LayoutRect = + NMRLayoutManager::GetFieldRowLayoutRect( Rect(), 2 ); + height += row2LayoutRect.Rect().Height(); + + TInt width( Parent()->Size().iWidth ); + return TSize( width, height ); + } + +// ----------------------------------------------------------------------------- +// CESMRViewerRecurrenceDateField::InternalizeL +// ----------------------------------------------------------------------------- +// +void CESMRViewerRecurrenceDateField::InternalizeL( + MESMRCalEntry& aEntry ) + { + FUNC_LOG; + // Get recurrence + TESMRRecurrenceValue recValue( ERecurrenceNot ); + aEntry.GetRecurrenceL( recValue, iRepeatUntilDate ); + + // Recurrence time has to be shown in the viewer as local time + TCalTime recurrenceTime; + recurrenceTime.SetTimeUtcL( iRepeatUntilDate ); + iRepeatUntilDate = recurrenceTime.TimeLocalL(); + + if( aEntry.IsRecurrentEventL() && + recValue != ERecurrenceNot && + Time::NullTTime() != iRepeatUntilDate ) + { + FormatRepeatUntilDateL(); + } + else + { + MakeVisible( EFalse ); + } + } + +// ----------------------------------------------------------------------------- +// CESMRViewerRecurrenceDateField::CountComponentControls +// ----------------------------------------------------------------------------- +// +TInt CESMRViewerRecurrenceDateField::CountComponentControls() const + { + FUNC_LOG; + return KComponentCount; + } + +// ----------------------------------------------------------------------------- +// CESMRViewerRecurrenceDateField::ComponentControl +// ----------------------------------------------------------------------------- +// +CCoeControl* CESMRViewerRecurrenceDateField::ComponentControl( TInt aInd ) const + { + FUNC_LOG; + CCoeControl* retVal = NULL; + switch( aInd ) + { + case 0: + { + retVal = iRepeatTopic; + break; + } + case 1: + { + retVal = iRepeatDate; + break; + } + default:; + } + + return retVal; + } + +// ----------------------------------------------------------------------------- +// CESMRViewerRecurrenceDateField::FormatRepeatUntilDateL +// ----------------------------------------------------------------------------- +// +void CESMRViewerRecurrenceDateField::FormatRepeatUntilDateL() + { + FUNC_LOG; + + HBufC* topicHolder = + StringLoader::LoadLC( + R_QTN_MEET_REQ_REPEAT_UNTIL, + iEikonEnv ); + + // Set text for repeat topic (e.g. "Repeat until") + iRepeatTopic->SetTextL( *topicHolder ); + CleanupStack::PopAndDestroy( topicHolder ); + + // Format date string + HBufC* timeFormatString = iEikonEnv->AllocReadResourceLC( + R_QTN_DATE_USUAL); + + TBuf< KDateStringLength > finalBuf; + iRepeatUntilDate.FormatL( finalBuf, *timeFormatString ); + + // Set repeat until date value + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( finalBuf ); + iRepeatDate->SetTextL( finalBuf ); + CleanupStack::PopAndDestroy( timeFormatString ); + timeFormatString = NULL; + } + +// End of file + +