diff -r 90fe62538f66 -r 5f281e37a2f5 defaultapplicationsettings/services_db/src/services_db.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/defaultapplicationsettings/services_db/src/services_db.cpp Wed Sep 01 12:33:30 2010 +0100 @@ -0,0 +1,230 @@ +/* +* Copyright (c) 2005-2006 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: Implements the Services DB API +* +*/ + + +#include +#include +#include + +#include + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CServicesDB::NewLC() +// +// +// --------------------------------------------------------------------------- +// +EXPORT_C CServicesDB* CServicesDB::NewLC( TResourceReader* aResReader ) + { + CServicesDB* self = new (ELeave) CServicesDB(); + CleanupStack::PushL(self); + self->ConstructL(aResReader); + return self; + } + +// --------------------------------------------------------------------------- +// CServicesDB::NewL() +// +// +// --------------------------------------------------------------------------- +// +EXPORT_C CServicesDB* CServicesDB::NewL( TResourceReader* aResReader ) + { + CServicesDB* self = CServicesDB::NewLC(aResReader); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// CServicesDB::CServicesDB() +// +// +// --------------------------------------------------------------------------- +// +CServicesDB::CServicesDB() + { + //no implementation necessary + } + +// --------------------------------------------------------------------------- +// CServicesDB::~CServicesDB() +// +// +// --------------------------------------------------------------------------- +// +EXPORT_C CServicesDB::~CServicesDB() + { + iServiceUids.Close(); + iServiceNames.ResetAndDestroy(); + iServiceLoc.ResetAndDestroy(); + } + +// --------------------------------------------------------------------------- +// The class is constructed by reading the data from the specified resource id into memory +// --------------------------------------------------------------------------- +// +void CServicesDB::ConstructL( TResourceReader* aResReader ) + { + TInt i; + TInt count = aResReader->ReadInt16(); + for ( i = 0; i < count; i++ ) + { + //read the service uid + TInt uid=aResReader->ReadInt32(); + if(uid == 0)User::Leave(KErrArgument); + //read the service name + HBufC* service=aResReader->ReadHBufCL(); + if(!service)User::Leave(KErrArgument); + //read the localized string + HBufC* serviceLoc=aResReader->ReadHBufCL(); + if(!serviceLoc)User::Leave(KErrArgument); + + //append things + iServiceUids.Append(uid); + iServiceNames.Append(service);//takes ownership + iServiceLoc.Append(serviceLoc);//takes ownership + } + //done + } + +// --------------------------------------------------------------------------- +// Returns the number of available services +// (the number of services read from the resource during construction) +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CServicesDB::Count() const + { + return iServiceUids.Count(); + } + +// --------------------------------------------------------------------------- +// Function to return the Uid of a service (by index). +// --------------------------------------------------------------------------- +// +EXPORT_C TUid CServicesDB::ServiceUidL(TInt aIndex) const + { + if(aIndex<0 || aIndex>=iServiceUids.Count()) + User::Leave(KErrArgument); + return TUid::Uid(iServiceUids[aIndex]); + } + + +// --------------------------------------------------------------------------- +// Function to return the localized name associated with a service. If the returned +// strings accepts a parameter, this can be specified as aParam +// --------------------------------------------------------------------------- +// +EXPORT_C HBufC* CServicesDB::ServiceStringLC(TInt aIndex, const TDes& aParam) const + { + TInt size=aParam.Size(); + HBufC *string=NULL; + + //check parameters + if(aIndex<0 || aIndex>=iServiceUids.Count()) + User::Leave(KErrArgument); + + //get the size of the new string + size+=iServiceLoc[aIndex]->Size(); + //allocate the string + string = HBufC::NewLC(size); + //create string content + TPtr ptr=string->Des(); + if(aParam.Size()) + { + //we have something in aParam + //ptr.Format(*iServiceLoc[aIndex],&aParam); + StringLoader::Format(ptr,*iServiceLoc[aIndex],-1,aParam); + } + else + { + //nothing in aParam, just copy the localized string to string + ptr.Copy(*iServiceLoc[aIndex]); + } + //done, return + return string; //string is on the stack, too + } + +// --------------------------------------------------------------------------- +// Function to return the localized name associated with a service. If the returned +// strings accepts a parameter, this can be specified as aParam +// --------------------------------------------------------------------------- +// +EXPORT_C HBufC* CServicesDB::ServiceStringLC(TUid aServiceUid, const TDes& aParam) const + { + HBufC* string=NULL; + TInt i; + + //look for the service UIDs + for(i=0; i=iServiceUids.Count()) + User::Leave(KErrArgument); + + //get the size of the new string + size=iServiceNames[aIndex]->Size(); + //allocate the string + string = HBufC::NewLC(size); + //create string content + TPtr ptr=string->Des(); + ptr.Copy(*iServiceNames[aIndex]); + return string; + } + +// --------------------------------------------------------------------------- +// Function to return the generic name of a service. +// --------------------------------------------------------------------------- +// +EXPORT_C HBufC* CServicesDB::ServiceNameLC(TUid aServiceUid) const + { + HBufC* string=NULL; + TInt i; + + //loc for the service UIDs + for(i=0; i