diff -r 000000000000 -r 2f259fa3e83a lafagnosticuifoundation/uigraphicsutils/tulsrc/tulstringresourcereader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lafagnosticuifoundation/uigraphicsutils/tulsrc/tulstringresourcereader.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,182 @@ +// Copyright (c) 2002-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: +// + + + +// INCLUDES +#include // TResourceReader +#include // BaflUtils + +#include "tulstringresourcereader.h" + +#ifdef _DEBUG +_LIT( KStringResourceReaderPanic, "CTulStringResourceReader" ); +#endif // _DEBUG + +const TInt KRIMask(0x00000fff); + + +// CLASS DECLARATION + +/** +C++ default constructor. +*/ +CTulStringResourceReader::CTulStringResourceReader() + { + } + +/** +Creates a new String Resource Reader object. +@param aResFile The resource file from which the string(s) are to be read. +@return a pointer to an new instance of CTulStringResourceReader class. +@leave KErrNone, if successful; otherwise one of the other system-wide error codes. +*/ +EXPORT_C CTulStringResourceReader* CTulStringResourceReader::NewL(TFileName& aResFile) + { + CTulStringResourceReader* self = CTulStringResourceReader::NewLC(aResFile); + CleanupStack::Pop(self); + return self; + } + +/** +Creates a new String Resource Reader object. +@param aResFile The resource file from which the string(s) are to be read. +@param aFs A handle to a shared file server session. +@return a pointer to an new instance of CTulStringResourceReader class. +@leave KErrNone, if successful; otherwise one of the other system-wide error codes. +*/ +EXPORT_C CTulStringResourceReader* CTulStringResourceReader::NewL(TFileName& aResFile, RFs& aFs) + { + CTulStringResourceReader* self = CTulStringResourceReader::NewLC(aResFile, aFs); + CleanupStack::Pop(self); + return self; + } + +/** +Creates a new String Resource Reader object, and puts a pointer to it onto the cleanup stack. +@param aResFile The resource file from which the string(s) are to be read. +@return a pointer to an new instance of CTulStringResourceReader class. +@leave KErrNone, if successful; otherwise one of the other system-wide error codes. +*/ +EXPORT_C CTulStringResourceReader* CTulStringResourceReader::NewLC(TFileName& aResFile) + { + CTulStringResourceReader* self = new (ELeave) CTulStringResourceReader(); + CleanupStack::PushL( self ); + self->ConstructL( aResFile ); + return self; + } + +/** +Creates a new String Resource Reader object, and puts a pointer to it onto the cleanup stack. +@param aResFile The resource file from which the string(s) are to be read. +@param aFs A handle to a shared file server session. +@return a pointer to an new instance of CTulStringResourceReader class. +@leave KErrNone, if successful; otherwise one of the other system-wide error codes. +*/ +EXPORT_C CTulStringResourceReader* CTulStringResourceReader::NewLC(TFileName& aResFile, RFs& aFs) + { + CTulStringResourceReader* self = new (ELeave) CTulStringResourceReader(); + CleanupStack::PushL( self ); + self->ConstructL( aResFile, aFs ); + return self; + } + +/* +Destructor +*/ +CTulStringResourceReader::~CTulStringResourceReader() + { + iResourceFile.Close(); + + if ( iFsConnected ) + iFsSession.Close(); + + delete iResourceBuffer; + } + +/** +ReadResourceString: returns the string that match with the resource id. +No lenght limitations are imposed on read string. +@param aResourceId: resource id of looked string resource +@return String buffer if the string associated with the given resource Id is found, else returns empty descriptor. +@panic aResourceId If the alignment of Unicode strings within the resource is incorrect, +*/ +EXPORT_C const TDesC& CTulStringResourceReader::ReadResourceString(TInt aResourceId) + { + delete iResourceBuffer; + iResourceBuffer = NULL; + + HBufC8* tempBuffer = NULL; + TRAPD(err,tempBuffer = iResourceFile.AllocReadL((KRIMask & aResourceId))); // Remove offset from id + if(err) + return KNullDesC; + + __ASSERT_DEBUG((tempBuffer->Length()%2)==0, User::Panic(KStringResourceReaderPanic, aResourceId)); + + // do bitwise shift to halve the length for mapping the tempBuffer to unicode. + TInt newLen = tempBuffer->Length()>>1; + TPtrC tempPointer((TText*)tempBuffer->Ptr(), newLen); + iResourceBuffer = tempPointer.Alloc(); + delete tempBuffer; + + if (iResourceBuffer) + return *iResourceBuffer; + else + return KNullDesC; + } + +// Symbian OS constructor. + +/** +By default Symbian OS constructor is private. +*/ +void CTulStringResourceReader::ConstructL(TFileName& aResFile) + { + User::LeaveIfError( iFsSession.Connect() ); + iFsConnected = ETrue; + + TFileName filename; + Dll::FileName( filename ); + + TParse parse; + // The default file specification is set to NULL to omit it. + parse.Set( aResFile, &filename, NULL ); + aResFile = parse.FullName(); + + BaflUtils::NearestLanguageFile( iFsSession, aResFile ); + iResourceFile.OpenL( iFsSession, aResFile ); + } + +/** +By default Symbian OS constructor is private. +*/ +void CTulStringResourceReader::ConstructL(TFileName& aResFile, RFs& aFs) + { + iFsConnected = EFalse; + TFileName filename; + Dll::FileName( filename ); + + TParse parse; + // The default file specification is set to NULL to omit it. + parse.Set( aResFile, &filename, NULL ); + aResFile = parse.FullName(); + + BaflUtils::NearestLanguageFile( aFs, aResFile ); + + iResourceFile.OpenL( aFs, aResFile ); + } + +// End of File +