--- /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 <barsread.h> // TResourceReader
+#include <bautils.h> // 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
+