charconvfw/charconv_fw/src/convnames/convnames.cpp
changeset 0 1fb32624e06b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/charconvfw/charconv_fw/src/convnames/convnames.cpp	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,154 @@
+/*
+* Copyright (c) 2000-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: 
+*
+*/
+
+
+#include <e32std.h>
+#include <e32base.h>
+#include <f32file.h>
+#include <banamedplugins.h>
+#include <charconv.h>
+#include <convnames.h>
+
+
+_LIT(KLitNameOfResourceFileForBuiltInCharacterSets, "z:\\resource\\charconv\\BUILTIN.RSC");
+_LIT(KLitRscExtension, ".RSC");
+
+
+// CCnvCharacterSetNames
+
+EXPORT_C CCnvCharacterSetNames* CCnvCharacterSetNames::NewL(RFs& aFileServerSession, const TArray<CCnvCharacterSetConverter::SCharacterSet>& aArrayOfCharacterSetsAvailable)
+/** Allocates and constructs a localised list of character set encoding names.
+
+@param aFileServerSession A connected session with the file server.
+@param aArrayOfCharacterSetsAvailable The array of character sets available 
+on the phone. This can be created using CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableL() 
+or CreateArrayOfCharacterSetsAvailableLC().
+@return Pointer to the newly created object. */
+	{
+	CCnvCharacterSetNames* arrayOfNamedCharacterSets=NewLC(aFileServerSession, aArrayOfCharacterSetsAvailable);
+	CleanupStack::Pop(arrayOfNamedCharacterSets);
+	return arrayOfNamedCharacterSets;
+	}
+
+
+EXPORT_C CCnvCharacterSetNames* CCnvCharacterSetNames::NewLC(RFs& aFileServerSession, const TArray<CCnvCharacterSetConverter::SCharacterSet>& aArrayOfCharacterSetsAvailable)
+/** Allocates and constructs a localised list of character set encoding names. 
+Puts a pointer to the object on the cleanup stack.
+
+@param aFileServerSession A connected session with the file server.
+@param aArrayOfCharacterSetsAvailable The array of character sets available 
+on the phone. This can be created using CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableL() 
+or CreateArrayOfCharacterSetsAvailableLC().
+@return Pointer to the newly created object. */
+	{
+	CCnvCharacterSetNames* arrayOfNamedCharacterSets=new(ELeave) CCnvCharacterSetNames;
+	CleanupStack::PushL(arrayOfNamedCharacterSets);
+	arrayOfNamedCharacterSets->ConstructL(aFileServerSession, aArrayOfCharacterSetsAvailable);
+	return arrayOfNamedCharacterSets;
+	}
+
+EXPORT_C CCnvCharacterSetNames::~CCnvCharacterSetNames()
+/** Deletes the array of named plug-ins owned by the object prior to its destruction. */
+	{
+	delete iNamedPlugins;
+	}
+
+
+EXPORT_C TInt CCnvCharacterSetNames::IndexOfIdentifier(TUint aIdentifier) const
+/** Gets the index into the sorted list of the character set identifier specified. 
+
+@param aIdentifier The character set identifier. This must not be zero, or 
+a panic occurs.
+@return The index into the list of the character set identifier, or KErrNotFound 
+if the identifier does not exist in the list. */
+	{
+	return iNamedPlugins->IndexOfUid(TUid::Uid(aIdentifier));
+	}
+
+
+EXPORT_C TUint CCnvCharacterSetNames::IdentifierAtIndex(TInt aIndex) const
+/** Gets the character set identifier at the specified index into the list.
+
+@param aIndex The index into the list. Must be within the bounds of the array, 
+or a panic occurs.
+@return The character set identifier at the specified index. */
+	{
+	return iNamedPlugins->UidAtIndex(aIndex).iUid;
+	}
+
+CCnvCharacterSetNames::CCnvCharacterSetNames()
+	:iNamedPlugins(NULL)
+	{
+	}
+
+void CCnvCharacterSetNames::DestroyResourceFileArray(TAny* aArrayOfCharconvResourceFiles)
+	{
+	RArray<CBaNamedPlugins::TResourceFile>& arrayOfCharconvResourceFiles=*STATIC_CAST(RArray<CBaNamedPlugins::TResourceFile>*, aArrayOfCharconvResourceFiles);
+	for (TInt i=arrayOfCharconvResourceFiles.Count()-1; i>=0; --i)
+		{
+		const CBaNamedPlugins::TResourceFile& resourceFile=arrayOfCharconvResourceFiles[i];
+		delete resourceFile.iFullFileName;
+		delete resourceFile.iIdentifier;
+		}
+	arrayOfCharconvResourceFiles.Close();
+	}
+
+void CCnvCharacterSetNames::ConstructL(RFs& aFileServerSession, const TArray<CCnvCharacterSetConverter::SCharacterSet>& aArrayOfCharacterSetsAvailable)
+	{
+	RArray<CBaNamedPlugins::TResourceFile> arrayOfCharconvResourceFiles;
+	CleanupStack::PushL(TCleanupItem(DestroyResourceFileArray, &arrayOfCharconvResourceFiles));
+	TParse* parser=new(ELeave) TParse;
+	CleanupStack::PushL(parser);
+	CBaNamedPlugins::TResourceFile resourceFile;
+	resourceFile.iFullFileName=KLitNameOfResourceFileForBuiltInCharacterSets().AllocLC();
+	resourceFile.iIdentifier=NULL;
+	resourceFile.iUid=KNullUid;
+	resourceFile.iFormat=CBaNamedPlugins::TResourceFile::EFormatArrayOfUidNamePairs;
+	User::LeaveIfError(arrayOfCharconvResourceFiles.Append(resourceFile));
+	CleanupStack::Pop(resourceFile.iFullFileName);
+	for (TInt i=aArrayOfCharacterSetsAvailable.Count()-1; i>=0; --i)
+		{
+		const CCnvCharacterSetConverter::SCharacterSet& characterSet=aArrayOfCharacterSetsAvailable[i];
+		if (characterSet.NameIsFileName())
+			{
+			const TPtrC fileNameOfCharacterSetPlugIn(characterSet.Name());
+			User::LeaveIfError(parser->SetNoWild(KLitRscExtension, &fileNameOfCharacterSetPlugIn, NULL));
+			CBaNamedPlugins::TResourceFile resourceFile;
+			resourceFile.iFullFileName=parser->FullName().AllocLC();
+			resourceFile.iIdentifier=NULL;
+			resourceFile.iUid=TUid::Uid(characterSet.Identifier());
+			resourceFile.iFormat=CBaNamedPlugins::TResourceFile::EFormatTbuf;
+			User::LeaveIfError(arrayOfCharconvResourceFiles.Append(resourceFile));
+			CleanupStack::Pop(resourceFile.iFullFileName);
+			}
+		}
+	CleanupStack::PopAndDestroy(parser);
+	CBaNamedPlugins::CParameters* const parameters=CBaNamedPlugins::CParameters::NewLC(aFileServerSession, arrayOfCharconvResourceFiles.Array());
+	iNamedPlugins=CBaNamedPlugins::NewL(*parameters);
+	CleanupStack::PopAndDestroy(2, &arrayOfCharconvResourceFiles);
+	}
+
+TInt CCnvCharacterSetNames::MdcaCount() const
+	{
+	return iNamedPlugins->MdcaCount();
+	}
+
+TPtrC CCnvCharacterSetNames::MdcaPoint(TInt aIndex) const
+	{
+	return iNamedPlugins->MdcaPoint(aIndex);
+	}
+