--- /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;
+}