diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/coctlsrc/smileyinforeader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/coctlsrc/smileyinforeader.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,149 @@ +/* +* Copyright (c) 2008 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: smiely engine class +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "smileymanager.h" +#include "smileymodel.h" +#include "smileyinforeader.h" + +const TText KSmileyZDrive = 'Z'; +_LIT( KSmileyResourceDir, "C:\\resource\\" ); +_LIT( KSmileyIconDir, "C:\\resource\\apps\\" ); +_LIT( KDefaultFileName, "smiley" ); +_LIT( KRscFileExtName, ".rsc" ); +_LIT( KMifFileExtName, ".mif" ); +const TInt KSmileyPathLength = 60; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CSmileyInfoReader::CSmileyInfoReader +// --------------------------------------------------------------------------- +// +CSmileyInfoReader::CSmileyInfoReader( CSmileyModel& aModel ) : + iModel( &aModel ) + { + } + +// --------------------------------------------------------------------------- +// CSmileyInfoReader::~CSmileyInfoReader +// --------------------------------------------------------------------------- +// +CSmileyInfoReader::~CSmileyInfoReader() + { + } + +// --------------------------------------------------------------------------- +// CSmileyInfoReader::ReadCenRepInfoL +// --------------------------------------------------------------------------- +// +void CSmileyInfoReader::ReadCenRepInfoL( TInt& aResourceId, + TDes& aResourceFile, TDes& aIconFile ) + { + aResourceId = R_SMILEY_ICONS_INFO; + const TInt fileNameLength( 30 ); + HBufC* fileName( HBufC::NewL( fileNameLength ) ); + CleanupStack::PushL( fileName ); + TPtr ptr( fileName->Des() ); + CRepository* repository( CRepository::NewL( KCRUidAvkon ) ); + TInt err( repository->Get( KAknEmotionResourceFileName, + ptr ) ); + if ( err != KErrNone ) + { + ptr.Copy( KDefaultFileName ); + } + delete repository; + + aResourceFile.Append( KSmileyResourceDir ); + aResourceFile.Append( ptr ); + aResourceFile.Append( KRscFileExtName ); + aIconFile.Append( KSmileyIconDir ); + aIconFile.Append( ptr ); + aIconFile.Append( KMifFileExtName ); + CleanupStack::PopAndDestroy( fileName ); + + if ( ConeUtils::FileExists( aResourceFile ) && + ConeUtils::FileExists( aIconFile ) ) + { + return; + } + aResourceFile[0] = KSmileyZDrive; + aIconFile[0] = KSmileyZDrive; + if ( !ConeUtils::FileExists( aResourceFile ) || + !ConeUtils::FileExists( aIconFile ) ) + { + User::Leave( KErrNotFound ); + } + } + +// --------------------------------------------------------------------------- +// CSmileyInfoReader::LoadSmileysFromResource +// --------------------------------------------------------------------------- +// +void CSmileyInfoReader::ReadSmileyL( CSmileyInfo& aInfo, + TResourceReader& aReader ) + { + aInfo.iImageInfo.iIsAnimation = ( aReader.ReadInt16() == 1 ); + aInfo.iImageInfo.iCode = aReader.ReadInt16(); + aInfo.iImageInfo.iBmpId = aReader.ReadInt32(); + aInfo.iImageInfo.iMaskId = aReader.ReadInt32(); + aInfo.iImageInfo.iStaticBmpId = aReader.ReadInt32(); + aInfo.iImageInfo.iStaticMaskId = aReader.ReadInt32(); + TPtrC ptrc( aReader.ReadTPtrC() ); + aInfo.SetSmileyText( ptrc ); + } + +// --------------------------------------------------------------------------- +// CSmileyInfoReader::LoadSmileysFromResource +// --------------------------------------------------------------------------- +// +void CSmileyInfoReader::LoadSmileysFromResourceL() + { + TInt resourceId( 0 ); + TBuf resourceFile; + TBuf iconFile; + ReadCenRepInfoL( resourceId, resourceFile, iconFile ); + iModel->SetSmileyIconFileL( iconFile ); + + CEikonEnv* env( CEikonEnv::Static() ); + TInt offset( env->AddResourceFileL( resourceFile ) ); + TResourceReader reader; + env->CreateResourceReaderLC( reader, resourceId ); + TInt count( reader.ReadInt16() ); + if ( count > 0 ) + { + CSmileyInfo* info( new( ELeave ) CSmileyInfo ); + CleanupStack::PushL( info ); + for ( TInt i( 0 ); i < count; i++ ) + { + info->Reset(); + ReadSmileyL( *info, reader ); + iModel->AddSimleyL( *info ); + } + CleanupStack::PopAndDestroy( info ); + } + CleanupStack::PopAndDestroy(); // reader + env->DeleteResourceFile( offset ); + } +