diff -r 000000000000 -r 094583676ce7 wvuing/wvvariant/Src/CCAIconFileProvider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvvariant/Src/CCAIconFileProvider.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,119 @@ +/* +* Copyright (c) 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: Icon file provider. + * +*/ + + +// INCLUDE FILES +#include "ccaiconfileprovider.h" +#include +#include + +_LIT( KMif, ".mif" ); +_LIT( KMbm, ".mbm" ); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CCAIconFileProvider::CCAIconFileProvider +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CCAIconFileProvider::CCAIconFileProvider( RFs& aFs ) + : iFs( aFs ) + { + } + +// ----------------------------------------------------------------------------- +// CCAIconFileProvider::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CCAIconFileProvider::ConstructL( const TDesC& aIconFilename ) + { + iFilename = aIconFilename.AllocL(); + } + +// ----------------------------------------------------------------------------- +// CCAIconFileProvider::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CCAIconFileProvider* CCAIconFileProvider::NewL( + RFs& aFs, const TDesC& aIconFilename ) + { + CCAIconFileProvider* self = new( ELeave ) CCAIconFileProvider( aFs ); + + CleanupStack::PushL( self ); + self->ConstructL( aIconFilename ); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CCAIconFileProvider::~CCAIconFileProvider() + { + delete iFilename; + } + +// ----------------------------------------------------------------------------- +// CCAIconFileProvider::RetrieveIconFileHandleL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCAIconFileProvider::RetrieveIconFileHandleL( + RFile& aFile, const TIconFileType aType ) + { + if ( ! iFilename->Length() ) + { + User::Leave( KErrNotFound ); + } + + // get the wanted extension + TPtrC ext( aType == MAknIconFileProvider::EMbmFile ? KMbm : KMif ); + TInt extLen( ext.Length() ); + + // and replace it to given filename + HBufC* name = iFilename->AllocLC(); + TPtr namePtr( name->Des() ); + TInt nameLen( namePtr.Length() ); + + if ( nameLen <= extLen ) + { + // name was invalid + User::Leave( KErrArgument ); + } + + namePtr.Replace( nameLen - extLen, extLen, ext ); + + // load file + TInt retCode = aFile.Open( iFs, namePtr, EFileRead | EFileShareReadersOnly ); + User::LeaveIfError( retCode ); + CleanupStack::PopAndDestroy( name ); + } + +// ----------------------------------------------------------------------------- +// CCAIconFileProvider::Finished +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCAIconFileProvider::Finished() + { + // commit suicide because Avkon Icon Server said so + delete this; + } + +// End of File