diff -r 000000000000 -r f979ecb2b13e calendarui/commonutils/src/CalenStatusPaneUtilsImpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calendarui/commonutils/src/CalenStatusPaneUtilsImpl.cpp Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,401 @@ +/* +* Copyright (c) 2007 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: For view of calendar application. + * +*/ + + //debug + #include "calendarui_debug.h" + #include "calencontext.h" + #include "CalenStatusPaneUtilsImpl.h" + #include "calentitlepane.h" + #include + + #include + #include + #include + #include + #include + #include + + + #include + #include + + + + // ================= MEMBER FUNCTIONS ========================================= + +// local static funtions +static void ReplaceNewlines(TDes& aBuf) + { + TRACE_ENTRY_POINT; + + _LIT(KReplaceNewline, "\n"); + const TChar KSpace(' '); + AknTextUtils::ReplaceCharacters( aBuf, KReplaceNewline, KSpace ); + + TRACE_EXIT_POINT; + } + +static void ReplaceNewlines(HBufC& aBuf) + { + TRACE_ENTRY_POINT; + + TPtr ptr = aBuf.Des(); + ReplaceNewlines( ptr ); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenStatusPaneUtilsImpl::HideNaviPane() + { + TRACE_ENTRY_POINT; + + if( iNaviLabel != NULL ) + { + iNaviContainer->Pop( iNaviLabel ); + delete iNaviLabel; + iNaviLabel = NULL; + } + + TRACE_EXIT_POINT; + } +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// + CAknNavigationDecorator* CCalenStatusPaneUtilsImpl::ShowNaviPaneL( const TTime& aActiveDay ) + { + TRACE_ENTRY_POINT; + + TTime activeDay = aActiveDay; + TBuf naviDes; + + /* if( iNaviLabel != NULL ) + { + delete iNaviLabel; + iNaviLabel = NULL; + iNaviContainer->Pop( iNaviLabel ); + } + */ + activeDay.FormatL(naviDes, *iLongDateFormat); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion(naviDes); + + iNaviLabel = iNaviContainer->Top(); + if(iNaviLabel != NULL) + { + CCoeControl* coeRes = iNaviLabel->DecoratedControl(); + CAknNaviLabel *actualLabel = static_cast(coeRes); + actualLabel->SetTextL(naviDes); + iNaviContainer->ReplaceL(*iNaviLabel, *iNaviLabel); + } + else + { + CCalenNaviLabel* label = new (ELeave) CCalenNaviLabel; + CleanupStack::PushL(label); + label->SetContainerWindowL( *iNaviContainer ); + label->SetTextL(naviDes); + label->SetNaviLabelType(CAknNaviLabel::ENavigationLabel); + CleanupStack::Pop( label ); // label + iNaviLabel = CAknNavigationDecorator::NewL( iNaviContainer, + static_cast(label), + CAknNavigationDecorator::ENaviLabel ); + iNaviLabel->SetContainerWindowL( *iNaviContainer ); + iNaviLabel->SetControlContext( iNaviContainer ); + iNaviLabel->MakeScrollButtonVisible(EFalse); + iNaviContainer->PushL(*iNaviLabel); + } + + + TRACE_EXIT_POINT; + return iNaviLabel; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCalenStatusPaneUtilsImpl* CCalenStatusPaneUtilsImpl::NewL( CEikStatusPane* aStatusPane ) + { + TRACE_ENTRY_POINT; + + CCalenStatusPaneUtilsImpl* self = new(ELeave) CCalenStatusPaneUtilsImpl( aStatusPane ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + TRACE_EXIT_POINT; + return self; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCalenStatusPaneUtilsImpl::CCalenStatusPaneUtilsImpl( CEikStatusPane* aStatusPane ) + : iStatusPane( aStatusPane ) + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenStatusPaneUtilsImpl::ConstructL() + { + TRACE_ENTRY_POINT; + + iTitlePane = static_cast( + iStatusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ))); + iNaviContainer = static_cast( + iStatusPane->ControlL(TUid::Uid( EEikStatusPaneUidNavi ))); + // Date format strings are used in all status pane variants + iNoYearDateFormat = StringLoader::LoadL(R_QTN_DATE_WITHOUT_YEAR_WITH_ZERO); + iShortDateFormat = StringLoader::LoadL(R_QTN_DATE_SHORT_WITH_ZERO); + iLongDateFormat = StringLoader::LoadL(R_QTN_DATE_USUAL_WITH_ZERO); + + // construct Month name array + iMonthArray = new(ELeave)CDesCArrayFlat(12); + + for (TInt i(0); i < 12; ++i) + { + HBufC* month = StringLoader::LoadLC(KMonthNames[i]); + iMonthArray->AppendL(*month); + CleanupStack::PopAndDestroy(month); + } + + // construct Day name array + iDayNameArray = new(ELeave)CDesCArrayFlat(KCalenDaysInWeek); + for (TInt i(0); i < KCalenDaysInWeek; ++i) + { + HBufC* day = StringLoader::LoadLC( KDayNames[i] ); + iDayNameArray->AppendL(*day); + CleanupStack::PopAndDestroy(day); + } + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCalenStatusPaneUtilsImpl::~CCalenStatusPaneUtilsImpl() + { + TRACE_ENTRY_POINT; + + delete iNoYearDateFormat; + delete iShortDateFormat; + delete iLongDateFormat; + delete iMonthArray; + delete iDayNameArray; + if( iNaviLabel ) + { + delete iNaviLabel; + } + + + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenStatusPaneUtilsImpl::SetTitleTextL( TDes& aText ) + { + TRACE_ENTRY_POINT; + // In Arabic variant, month names are not displayed because there is no + // universal way to represent months in Arabic market area. + // Instead, Avkon.loc contains month numbers for month names. + // They are defined as latin numbers. + // We need to convert number to display digits (e.g. Arabic-Indic) + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( aText ); + TBool isOneRowTitle = iTitlePane->MaxNumberOfVisibleTextRows() == 1; + if ( isOneRowTitle ) + { + ReplaceNewlines( aText ); + } + iTitlePane->SetTextL( aText ); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenStatusPaneUtilsImpl::SetTitleText( HBufC* aText ) + { + TRACE_ENTRY_POINT; + // In Arabic variant, month names are not displayed because there is no + // universal way to represent months in Arabic market area. + // Instead, Avkon.loc contains month numbers for month names. + // They are defined as latin numbers. + // We need to convert number to display digits (e.g. Arabic-Indic) + TPtr ptr( aText->Des() ); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); + TBool isOneRowTitle = iTitlePane->MaxNumberOfVisibleTextRows() == 1; + if ( isOneRowTitle ) + { + ReplaceNewlines( *aText ); + } + iTitlePane->SetText( aText ); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenStatusPaneUtilsImpl::UnderLineTitleText( TBool aUnderLine ) + { + TRACE_ENTRY_POINT; + + // Only CCalenTitlePane can SetUnderLine + iTitlePane->SetUnderLine( aUnderLine ); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenStatusPaneUtilsImpl::MonthNameByActiveTime( TDes& name, const TTime& aTime ) + { + TRACE_ENTRY_POINT; + + name = (*iMonthArray)[aTime.DateTime().Month()]; + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenStatusPaneUtilsImpl::DayNameByActiveTime( TDes& name, const TTime& aTime ) + { + TRACE_ENTRY_POINT; + + name = (*iDayNameArray)[aTime.DayNoInWeek()]; + + TRACE_EXIT_POINT + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +HBufC* CCalenStatusPaneUtilsImpl::WeekNameByActiveTimeL( const TTime& aTime, + TDay aDayFormat, + TCalenWeekTitle aType ) + { + TRACE_ENTRY_POINT; + + HBufC* firstRow = NULL; + // Calculate first day of week + TTime firstDay(aTime); + TLocale locale; + TInt column = aTime.DayNoInWeek() - locale.StartOfWeek(); + if (column < 0) + { + column += KCalenDaysInWeek; + } + firstDay -= TTimeIntervalDays(column); + + // Decide what goes to first row + // Week view duration is shown. + if ( aDayFormat != EMonday || aType == EWeekTitleDuration) + { + TTime lastDay(firstDay + TTimeIntervalDays(KCalenDaysInWeek - 1)); + + CDesCArrayFlat* array = new(ELeave)CDesCArrayFlat(2); + CleanupStack::PushL(array); + TBuf tmp; + TBool isOneRowTitle = iTitlePane->MaxNumberOfVisibleTextRows() == 1; + + const TDesC& fmt = isOneRowTitle ? + *iNoYearDateFormat : *iShortDateFormat; + + firstDay.FormatL(tmp, fmt ); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion(tmp); + array->AppendL(tmp); + + lastDay.FormatL(tmp, fmt ); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion(tmp); + array->AppendL(tmp); + + firstRow = StringLoader::LoadL( R_CALENDAR_WEEK_PERIOD_TITLE, *array ); + CleanupStack::PopAndDestroy( array ); + } + // Week number is shown + else + { + firstRow = StringLoader::LoadL( R_CALENDAR_WEEK_VIEW_TITLE, + firstDay.WeekNoInYear() ); + } + + TRACE_EXIT_POINT; + return firstRow; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenStatusPaneUtilsImpl::RefreshStatusPane() + { + TRACE_ENTRY_POINT; + + iStatusPane->DrawNow(); + + TRACE_EXIT_POINT; + } +// End of file