lafagnosticuifoundation/uigraphicsutils/tulsrc/tulstringresourcereader.cpp
changeset 0 2f259fa3e83a
--- /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
+