uifw/EikStd/coctlsrc/smileyinforeader.cpp
changeset 0 2f259fa3e83a
--- /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 <smiley.rsg>
+#include <eikenv.h>
+#include <barsread.h>
+#include <eikon.hrh>
+#include <f32file.h>
+#include <centralrepository.h>
+#include <AvkonInternalCRKeys.h>
+#include <coeutils.h>
+#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<KSmileyPathLength> resourceFile;
+    TBuf<KSmileyPathLength> 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 );
+    }
+