diff -r 000000000000 -r 05e9090e2422 uigraphics/AknIcon/srvsrc/AknIconSrvTlsData.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uigraphics/AknIcon/srvsrc/AknIconSrvTlsData.cpp Thu Dec 17 09:14:12 2009 +0200 @@ -0,0 +1,150 @@ +/* +* Copyright (c) 2002 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: TLS data. +* +*/ + + + +// INCLUDE FILES +#include "AknIconSrvTlsData.h" +#include "AknIconLoader.h" +#include "AknIconLocationInfo.h" +#include "AknIconFileNameCache.h" + +// CONSTANTS + +// ================= MEMBER FUNCTIONS ========================================== + +CAknIconSrvTlsData::CAknIconSrvTlsData() + { + } + +CAknIconSrvTlsData::~CAknIconSrvTlsData() + { + iIconSession.Close(); + delete iLoader; + iFsSession.Close(); + iPointers.Close(); + delete iFileName; + iIconLocations.ResetAndDestroy(); + delete iFileNameCache; + Dll::FreeTls(); + } + +void CAknIconSrvTlsData::CreateSingletonL() + { + CAknIconSrvTlsData* data = new( ELeave ) CAknIconSrvTlsData; + CleanupStack::PushL( data ); + data->ConstructL(); + CleanupStack::Pop(); + } + +void CAknIconSrvTlsData::ConstructL() + { + User::LeaveIfError( iIconSession.ConnectToServer() ); + iIconSession.GetInitData( iInitData ); + iFileNameCache = CAknIconFileNameCache::NewL(); + User::LeaveIfError( Dll::SetTls( this ) ); + } + +// ----------------------------------------------------------------------------- +// CAknIconSrvTlsData::InitIconLoaderL +// ----------------------------------------------------------------------------- +// +void CAknIconSrvTlsData::InitIconLoaderL( const TDesC& aFileName, RFile* aFile ) + { + // If the icon file name is different than the one used by the existing icon loader, + // create a new icon loader. It also opens the file. + if ( !iFileName || iFileName->CompareF( aFileName ) != 0 ) + { + delete iFileName; + iFileName = NULL; + + delete iLoader; + iLoader = NULL; + + if ( aFile ) + { + iLoader = CAknIconLoader::NewL( *aFile ); + } + else + { + iLoader = CAknIconLoader::NewL( FsSessionL(), aFileName ); + } + + iFileName = aFileName.AllocL(); + } + // Icon loader exists for the requested icon file. Re-open the file. + else + { + if ( aFile ) + { + iLoader->OpenFileL( *aFile ); + } + else + { + iLoader->OpenFileL( FsSessionL(), aFileName ); + } + } + } + +// ----------------------------------------------------------------------------- +// CAknIconSrvTlsData::GetIconLocationInfo +// ----------------------------------------------------------------------------- +// +TInt CAknIconSrvTlsData::GetIconLocationInfo( + const TDesC& aFileName, TInt16& aBitmapId, TInt16& aMaskId ) + { + // Compare item. Can be instantiated in stack with this constructor. + CAknIconLocationInfo info( aFileName ); + + TInt index = iIconLocations.FindInOrder( + &info, CAknIconLocationInfo::LinearOrder ); + + if ( index >= 0 ) + { + return iIconLocations[index]->GetIconLocation( aBitmapId, aMaskId ); + } + else + { + return KErrNotFound; + } + } + +// ----------------------------------------------------------------------------- +// CAknIconSrvTlsData::StoreIconLocationInfoL +// ----------------------------------------------------------------------------- +// +void CAknIconSrvTlsData::StoreIconLocationInfoL( CAknIconLocationInfo* aInfo ) + { + User::LeaveIfError( iIconLocations.InsertInOrder( + aInfo, CAknIconLocationInfo::LinearOrder ) ); + } + +// ----------------------------------------------------------------------------- +// CAknIconSrvTlsData::FsSessionL +// ----------------------------------------------------------------------------- +// +RFs& CAknIconSrvTlsData::FsSessionL() + { + if ( !iFsSession.Handle() ) + { + User::LeaveIfError( iFsSession.Connect() ); + } + + return iFsSession; + } + +// End of File