secureswitools/swisistools/source/rscparser/aplapplistitem.cpp
changeset 25 98b66e4fb0be
child 50 c6e8afe0ba85
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/aplapplistitem.cpp	Fri Apr 16 15:05:20 2010 +0300
@@ -0,0 +1,461 @@
+// Copyright (c) 2009 - 2010 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:
+// aplapplistitem.cpp
+//
+/** 
+* @file aplapplistitem.cpp
+*
+* @internalComponent
+* @released
+*/
+#include "aplapplistitem.h"
+#include "barsc2.h"
+#include "parse.h"
+#include "uidtype.h"
+
+//
+// class CAppLocalOpaqueDataInfo
+//
+
+//Default Constructor for class CAppLocalOpaqueDataInfo
+CAppLocalOpaqueDataInfo::CAppLocalOpaqueDataInfo()
+	: iServiceUid(0),
+	  iLocale(0),
+	  iOpaqueData(NULL)
+{
+}
+
+//Destructor for class CAppLocalOpaqueDataInfo
+CAppLocalOpaqueDataInfo::~CAppLocalOpaqueDataInfo()
+{
+	delete iOpaqueData;
+}
+
+//Constructor for class CAppLocalOpaqueDataInfo
+CAppLocalOpaqueDataInfo::CAppLocalOpaqueDataInfo(TInt aLocale, TUint32 aServiceUid, Ptr8* aOpaqueData)
+	: iLocale(aLocale),
+	  iServiceUid(aServiceUid),
+	  iOpaqueData(aOpaqueData)
+{
+	assert(iOpaqueData);
+}
+
+
+CAppLocalOpaqueDataInfo* CAppLocalOpaqueDataInfo::NewL(TInt aLocale, TUint32 aServiceUid, Ptr8* aOpaqueData)
+{
+	CAppLocalOpaqueDataInfo* self=new CAppLocalOpaqueDataInfo(aLocale, aServiceUid, aOpaqueData);
+	if(NULL==self)
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+
+	return self;	
+}
+
+
+Ptr8* CAppLocalOpaqueDataInfo::GetOpaqueData()
+{
+	return iOpaqueData;
+}
+
+TUint32 CAppLocalOpaqueDataInfo::GetServiceUid()
+{
+	return iServiceUid;
+}
+
+TInt CAppLocalOpaqueDataInfo::GetLocale()
+{
+	return iLocale;
+}
+
+//
+// Class CAppLocalizableInfo
+//
+CAppLocalizableInfo::~CAppLocalizableInfo()
+{
+	delete iCaption;
+	delete iShortCaption;
+	delete iGroupName;
+	delete iIconFileName;
+	if(iViewDataArray)
+		iViewDataArray->clear();
+	delete iViewDataArray;
+	delete iOpaqueData;
+}
+
+CAppLocalizableInfo::CAppLocalizableInfo(const std::string& aRegistrationFileName, const std::string& aLocalizeFilePath)
+	: iNumOfAppIcons(0),
+	iRegistrationFilePath(aRegistrationFileName),
+	iLocalPath(aLocalizeFilePath)
+{
+	iCaption = NULL;
+	iShortCaption = NULL;
+	iIconFileName = NULL;
+	iGroupName = NULL;
+	iViewDataArray = NULL;
+	iOpaqueData = NULL;
+}
+
+CAppLocalizableInfo* CAppLocalizableInfo::NewL(const std::string& aRegistrationFileName,const std::string& aLocalizeFilePath)
+{
+	CAppLocalizableInfo* self=new CAppLocalizableInfo(aRegistrationFileName, aLocalizeFilePath);
+	if(NULL==self)
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+
+	return self;	
+}
+
+
+void CAppLocalizableInfo::SetCaption(Ptr16* Caption)
+{	
+	iCaption = Caption;
+}
+void CAppLocalizableInfo::SetShortCaption(Ptr16* ShortCaption)
+{
+	iShortCaption = ShortCaption;
+}
+void CAppLocalizableInfo::SetGroupName(Ptr16* GroupName)
+{
+	iGroupName = GroupName;
+}
+void CAppLocalizableInfo::SetIconFileName(Ptr16* IconFileName)
+{
+	iIconFileName = IconFileName;
+}
+
+void CAppLocalizableInfo::SetNumOfAppIcons(TInt NumOfAppIcons)
+{
+	iNumOfAppIcons = NumOfAppIcons;
+}
+
+void CAppLocalizableInfo::SetLocale(TInt Locale)
+{
+	iLocale = Locale;
+}
+
+void CAppLocalizableInfo::SetOpaqueData(Ptr8* OpaqueData)
+{
+	iOpaqueData = OpaqueData;
+}
+
+std::vector<CAppViewData*>* CAppLocalizableInfo::GetViewDataArray()
+{
+	return iViewDataArray;
+}
+Ptr16* CAppLocalizableInfo::GetGroupName()
+{
+	return iGroupName;
+}
+
+Ptr16* CAppLocalizableInfo::GetCaption()
+{
+	return iCaption;
+}
+
+Ptr16* CAppLocalizableInfo::GetShortCaption()
+{
+	return iShortCaption;
+}
+
+Ptr16* CAppLocalizableInfo::GetIconFileName()
+{
+	return iIconFileName;
+}
+
+TInt CAppLocalizableInfo::GetNumOfAppIcons()
+{
+	return iNumOfAppIcons;
+}
+
+TInt CAppLocalizableInfo::GetLocale()
+{
+	return iLocale;
+}	
+
+Ptr8* CAppLocalizableInfo::GetOpaqueData()
+{
+	return iOpaqueData;
+}
+
+//Read ViewData struct of Localizable resource file.
+void CAppLocalizableInfo::ReadViewDataL(RResourceReader& aResourceReader)
+{
+	// read LEN WORD STRUCT view_list[]
+	const TInt numOfViews = aResourceReader.ReadInt16L();
+
+	if (numOfViews > 0)
+	{
+		iViewDataArray = new std::vector<CAppViewData*>;
+		if(NULL==iViewDataArray)
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+	}
+
+	for(TInt view = 0; view < numOfViews; ++view)
+	{
+		CAppViewData* viewData = CAppViewData::NewL();
+		aResourceReader.ReadUint32L(); // skip over LONG reserved_long
+		aResourceReader.ReadUint32L(); // skip over LLINK reserved_llink
+
+		// read LONG uid
+		const TUid viewUid =  {aResourceReader.ReadInt32L()};
+		viewData->SetUid(viewUid);
+		// read LONG screen_mode
+		const TInt screenMode = aResourceReader.ReadInt32L();
+		viewData->SetScreenMode(screenMode);
+
+		aResourceReader.ReadUint32L(); // skip over LONG reserved_long
+		aResourceReader.ReadUint32L(); // skip over LLINK reserved_llink
+
+		// read LTEXT caption
+		PtrC16* viewCaption = aResourceReader.ReadTPtrCL();
+		if(NULL != viewCaption)
+		{
+			viewData->SetCaptionL(viewCaption);
+
+			viewCaption->iPtr = NULL; //To Avoid double delete in destructor. To be destroyed by RResourceReader.
+			delete viewCaption;
+		}
+		// read WORD number_of_icons
+		const TInt numOfViewIcons = aResourceReader.ReadInt16L();
+		viewData->SetNumOfViewIcons(numOfViewIcons);
+
+		// read LTEXT icon_file
+		PtrC16* viewIconFile = aResourceReader.ReadTPtrCL();
+		if(NULL != viewIconFile)
+		{
+
+			Ptr16*	fullViewIconFileName = ViewDataIconFileNameL(viewIconFile);
+			if (fullViewIconFileName)
+			{
+				viewData->SetIconFileNameL(fullViewIconFileName);
+				viewData->SetNonMbmIconFile(true);
+				delete fullViewIconFileName;
+			}
+			else
+			{
+				viewIconFile->iPtr = NULL;
+				viewIconFile->iMaxLength = 0;
+
+				if (numOfViewIcons > 0 && iIconFileName)
+				{ // default to app icon filename
+					viewIconFile->iPtr = iIconFileName->GetPtr(); 
+					viewIconFile->iMaxLength = iIconFileName->GetLength();
+				std::string errMsg= "Failed : ServiceInfo Icon File not present in Device.";
+				throw CResourceFileException(errMsg);
+				}
+			}
+		}
+
+		iViewDataArray->push_back(viewData);
+		if(NULL != viewIconFile)
+		{
+			viewIconFile->iPtr = NULL; //To Avoid double delete in destructor. To be destroyed by RResourceReader.
+		}
+		delete viewIconFile;
+	}
+
+}
+
+
+Ptr16* CAppLocalizableInfo::ViewDataIconFileNameL(const PtrC16* aIconFileName) const
+{
+	Ptr16* filename = NULL;
+	if (aIconFileName->iMaxLength == 0)
+		return NULL;
+
+	/*
+	 * aIconFileName may contain a valid string in some format (for eg. URI format) other than path to a regular file on disk
+	 * and that can be a mbm or non-mbm file. Such a filename will be reported as invalid filename by iFs.IsValidName() method. 
+	 * aIconFileName will be returned since it is a valid string. 
+	 */	
+	ParsePtrC parsePtr(aIconFileName);
+	if (parsePtr.IsWild() || !parsePtr.PathPresent() || !parsePtr.NamePresent())
+		return NULL;
+
+	filename = new Ptr16(aIconFileName->iMaxLength);
+	if(NULL==filename || NULL == filename->GetPtr())
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+	filename->UpdateLength(aIconFileName->iMaxLength);
+	BufCpy(filename->GetPtr(),aIconFileName->iPtr,aIconFileName->iMaxLength);
+
+	std::wstring iFileName = Ptr16ToWstring(filename);
+	std::wstring iFilePath = string2wstring(iLocalPath);
+	std::string fullnamewitoutdrive = parsePtr.FullNameWithoutDrive();
+	std::wstring iFilename1 = string2wstring(fullnamewitoutdrive);
+
+	if(parsePtr.DrivePresent())
+		iFilePath.append(iFilename1);
+	else
+		iFilePath.append(iFileName);
+
+	// check for fully qualified icon filename
+	if (parsePtr.DrivePresent() && FileExists(iFileName))
+	{
+		parsePtr.SetToNull();
+		return filename;	
+	}
+	else
+	{
+		// check for icon file on same drive as localisable resource file
+		std::string localisableResourceFileDrive = parsePtr.Drive();
+		TInt ret = FindWild(aIconFileName);
+		if(ret == 0 && FileExists(iFilePath))
+		{
+			parsePtr.SetToNull();
+			return filename;
+		}
+		else
+		{
+			ParsePtrC parsePtr_reg(iRegistrationFilePath);
+			std::string registrationFileDrive = parsePtr_reg.Drive();
+
+			if(registrationFileDrive.compare(localisableResourceFileDrive))
+			{
+				// check for icon file on same drive as registration file
+				std::string registrationfilepath(parsePtr_reg.FullPath());
+				registrationfilepath.append(parsePtr.NameAndExt());
+				std::wstring iRegFilePath = string2wstring(registrationfilepath);
+				std::string iconfile = parsePtr.StrName();
+			
+				ret = FindWild(registrationFileDrive,iconfile,localisableResourceFileDrive);
+				if(ret == 0 && FileExists(iRegFilePath))
+				{
+					parsePtr_reg.SetToNull();
+					parsePtr.SetToNull();
+					return filename;
+				}
+			}
+			parsePtr_reg.SetToNull();
+		}
+	}
+	parsePtr.SetToNull();	//To Avoid double delete in destructor. To be destroyed by RResourceReader.
+							//Same as iIconFileName data member of class CAppInfoReader. Destructor will delete.
+	return NULL;					// Or to be deleted by calling function.
+}
+
+//
+// Class CAppViewData
+//
+
+CAppViewData::~CAppViewData()
+{
+	delete iCaption;
+	delete iIconFileName;
+}
+
+CAppViewData::CAppViewData()
+	: iNonMbmIconFile(false),iNumOfViewIcons(0),iScreenMode(0)
+{
+	iCaption = NULL;
+	iIconFileName = NULL;
+	iUid = NullUid;
+}
+
+CAppViewData* CAppViewData::NewL()
+{
+	CAppViewData* self=new CAppViewData();
+	if(NULL==self)
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+
+	return self;	
+}
+
+void CAppViewData::SetUid(TUid aUid)
+{
+	iUid=aUid;
+}
+
+void CAppViewData::SetScreenMode(TInt aScreenMode)
+{
+	iScreenMode=aScreenMode;
+}
+
+void CAppViewData::SetCaptionL(const PtrC16* aCaption)
+{
+	if(aCaption != NULL)
+	{
+		iCaption=new Ptr16(aCaption->iMaxLength);
+		if(NULL==iCaption || NULL==iCaption->GetPtr())
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+		iCaption->UpdateLength(aCaption->iMaxLength);
+		BufCpy(iCaption->GetPtr(),aCaption->iPtr,aCaption->iMaxLength);
+	}
+	else
+		iCaption = NULL;
+}
+
+void CAppViewData::SetIconFileNameL(const Ptr16* aFileName)
+{
+	if(aFileName != NULL)
+	{
+		iIconFileName = new Ptr16(aFileName->GetLength());
+		if(NULL==iIconFileName || NULL==iIconFileName->GetPtr())
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+		iIconFileName->UpdateLength(aFileName->GetLength());
+		BufCpy(iIconFileName->GetPtr(),aFileName->GetPtr(),aFileName->GetLength());
+	}
+	else
+		iIconFileName = NULL;
+}
+
+void CAppViewData::SetNumOfViewIcons(TInt aNumOfViewIcons)
+{
+	iNumOfViewIcons = aNumOfViewIcons;
+}
+
+void CAppViewData::SetNonMbmIconFile(TBool aNonMbmIconFile)
+{
+	iNonMbmIconFile = aNonMbmIconFile;
+}
+
+TUid CAppViewData::Uid() const
+{
+	return iUid;
+}
+
+Ptr16* CAppViewData::GetCaption()
+{
+	return iCaption;
+}
+TInt CAppViewData::GetScreenMode()
+{
+	return iScreenMode;
+}
+Ptr16* CAppViewData::GetIconFileName()
+{
+	return iIconFileName;
+}
+TInt CAppViewData::GetNumOfViewIcons()
+{
+	return iNumOfViewIcons;
+}