diff -r b01126ce0bec -r ba63c83f4716 idlehomescreen/xmluirendering/renderingplugins/xnclockfactory/src/xndatecontrol.cpp --- a/idlehomescreen/xmluirendering/renderingplugins/xnclockfactory/src/xndatecontrol.cpp Wed Sep 15 12:00:00 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,281 +0,0 @@ -/* -* Copyright (c) 2006-2008 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: Clock control -* -*/ - - -// System includes -#include -#include -#include -#include -#include -#include -#include - -// User includes -#include "xndatecontrol.h" -#include "xncontroladapter.h" -#include "xnclockadapter.h" -#include "xnnodepluginif.h" -#include "xnproperty.h" -#include "xnuienginepluginif.h" -#include "c_xnutils.h" - -// Constants -const TInt KMaxDateStringLength = 100; -const TInt KMaxDayNumberStringLength = 10; - -_LIT( KTimeFormat, "%0U %1U" ); - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CXnDateControl::CXnDateControl -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CXnDateControl::CXnDateControl( CXnClockAdapter& aAdapter, - TXnDateType aType ) - : iAdapter( aAdapter ), iDateType( aType ) - { - } - -// ----------------------------------------------------------------------------- -// CXnDateControl::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CXnDateControl::ConstructL() - { - // Create enviroment notifier - iEnvNotifier = CEnvironmentChangeNotifier::NewL( - CActive::EPriorityStandard, TCallBack( HandleCallBackL, this ) ); - // Start listening notifications - iEnvNotifier->Start(); - } - -// ----------------------------------------------------------------------------- -// CXnDateControl::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CXnDateControl* CXnDateControl::NewL( CXnClockAdapter& aAdapter, - TXnDateType aType ) - { - CXnDateControl* self = new (ELeave) CXnDateControl( aAdapter, aType ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// Destructor -// ----------------------------------------------------------------------------- -// -CXnDateControl::~CXnDateControl() - { - delete iDateText; - delete iEnvNotifier; - } - -// ----------------------------------------------------------------------------- -// CXnDateControl::DrawL -// ----------------------------------------------------------------------------- -// -void CXnDateControl::DrawL( CWindowGc& aGc, CXnNodePluginIf* aNode ) - { - if ( !aNode || - !iDateText || - ( aNode && aNode->Rect().IsEmpty() ) ) - { - return; - } - - const CAknLayoutFont* dateFont( CreateFontL( *aNode ) ); - if ( !dateFont ) - { - return; - } - - const TRgb& color( CreateColorL( *aNode ) ); - - CGraphicsContext::TTextAlign align = iAdapter.GetTextAlignL( *aNode ); - - const TInt deltaHeight( aNode->Rect().Height() - dateFont->TextPaneHeight() ); - TInt offset( dateFont->TextPaneTopToBaseline() + deltaHeight / 2 ); - - aGc.SetPenColor( color ); - aGc.UseFont( dateFont ); - aGc.DrawText( *iDateText, aNode->Rect(), offset, align ); - aGc.DiscardFont(); - } - -// ----------------------------------------------------------------------------- -// CXnDateControl::ConstructDateStringL -// ----------------------------------------------------------------------------- -// -HBufC* CXnDateControl::ConstructDateStringL() - { - // Construct date string using date format from resource file - CCoeEnv* coeEnv = CCoeEnv::Static(); - - if( !coeEnv ) - { - User::Leave( KErrNotReady ); - } - - TTime time; - time.HomeTime(); - - HBufC* aiDateString = HBufC::NewLC( KMaxDateStringLength ); - HBufC* aiDateFormatString = HBufC::NewLC( KMaxDateStringLength ); - aiDateFormatString->Des().Copy( KTimeFormat() ); - // TODO: when localisation is ready read format string from resource - //HBufC* aiDateFormatString = StringLoader::LoadLC( R_ACTIVEIDLE_TIME_FORMAT, - // coeEnv ); - HBufC* dateStringBuf = HBufC::NewLC( KMaxDateStringLength ); - HBufC* dateFormatString = StringLoader::LoadLC( R_QTN_DATE_SHORT_WITH_ZERO, - coeEnv ); - TPtr dateString( dateStringBuf->Des() ); - time.FormatL( dateString, *dateFormatString ); - CleanupStack::PopAndDestroy( dateFormatString ); - - //now dateString contains string which is formatted using - //R_QTN_DATE_USUAL_WITH_ZERO - - // To arabic - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( dateString ); - - TPtr aiDateStringPtr = aiDateString->Des(); - - TDayNameAbb wkDayAbb = TDayNameAbb(); - wkDayAbb.Set(time.DayNoInWeek()); - - //add date to string - StringLoader::Format( aiDateStringPtr, *aiDateFormatString, 1,dateString ); - - //reuse dateString - dateString.Copy( aiDateStringPtr ); - - //add weekday to string - StringLoader::Format( aiDateStringPtr, dateString, 0, wkDayAbb ); - - CleanupStack::PopAndDestroy( dateStringBuf );//dateStringBuf, aiDateFormatString - CleanupStack::PopAndDestroy( aiDateFormatString ); - - CleanupStack::Pop( aiDateString ); - return aiDateString; - } - -// ----------------------------------------------------------------------------- -// CXnDateControl::ConstructDayStringL -// ----------------------------------------------------------------------------- -// -HBufC* CXnDateControl::ConstructDayStringL() - { - TTime time; - time.HomeTime(); - - HBufC* aiDayString = HBufC::NewLC( KMaxDayNumberStringLength ); - aiDayString->Des().Num( time.DayNoInMonth() + 1 ); - // To arabic - TPtr dayStringPtr = aiDayString->Des(); - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( dayStringPtr ); - CleanupStack::Pop( aiDayString ); - return aiDayString; - } - -// ----------------------------------------------------------------------------- -// CXnDateControl::CreateFontL -// ----------------------------------------------------------------------------- -// -const CAknLayoutFont* CXnDateControl::CreateFontL( CXnNodePluginIf& aNode ) - { - if ( !iDateFont ) - { - iAdapter.CreateFontL( aNode, iDateFont ); - } - return CAknLayoutFont::AsCAknLayoutFontOrNull( iDateFont ); - } - -// ----------------------------------------------------------------------------- -// CXnDateControl::CreateColorL -// ----------------------------------------------------------------------------- -// -const TRgb& CXnDateControl::CreateColorL( CXnNodePluginIf& aNode ) - { - if ( !iIsColorSet ) - { - iAdapter.CreateColorL( aNode, iDateColor ); - iIsColorSet = ETrue; - } - return iDateColor; - } - -// ----------------------------------------------------------------------------- -// CXnDateControl::ResetFont -// ----------------------------------------------------------------------------- -// -void CXnDateControl::ResetFont() - { - iDateFont = NULL; - iIsColorSet = EFalse; - } - -// ----------------------------------------------------------------------------- -// CXnDateControl::RefreshDateL -// ----------------------------------------------------------------------------- -// -void CXnDateControl::RefreshDateL() - { - delete iDateText; - iDateText = NULL; - if ( iDateType == EDate ) - { - iDateText = ConstructDateStringL(); - } - else if ( iDateType == EDay ) - { - iDateText = ConstructDayStringL(); - } - } - -// ----------------------------------------------------------------------------- -// CXnDateControl::HandleCallBackL -// ----------------------------------------------------------------------------- -// -TInt CXnDateControl::HandleCallBackL( TAny *aPtr ) - { - CXnDateControl* self = static_cast( aPtr ); - - if( self ) - { - TInt changes( self->iEnvNotifier->Change() ); - - if ( changes & - ( EChangesLocale | EChangesMidnightCrossover | EChangesSystemTime ) ) - { - self->RefreshDateL(); - } - } - - return KErrNone; - } - -// End of File