emailservices/emailframework/src/CFSMailBrand.cpp
changeset 0 8466d47a6819
child 8 e1b6206813b4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailframework/src/CFSMailBrand.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,369 @@
+/*
+* Copyright (c) 2007-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: This file implements class CFSMailBrand.
+*
+*/
+
+
+#include "emailtrace.h"
+#include <barsread.h>
+#include <AknIconUtils.h>
+#include <gulicon.h>
+#include <centralrepository.h>
+//<cmail>
+#include "FreestyleEmailCenRepKeys.h"
+//</cmail>
+
+#include "CFSMailBrand.h"
+
+const TInt KElementArrayGranularity = 5;
+const TInt KMaxStringLenFromCenrep = 256;
+const TInt KMaxDesLen = 256;
+_LIT(KSpace, " ");
+// -----------------------------------------------------------------------------
+// CFSMailBrand::NewL
+// -----------------------------------------------------------------------------
+CFSMailBrand* CFSMailBrand::NewL( TResourceReader& aReader, TBool aIsWhiteLabel )
+	{
+    FUNC_LOG;
+	CFSMailBrand* brManager =  CFSMailBrand::NewLC(aReader, aIsWhiteLabel);
+  	CleanupStack:: Pop(brManager);
+  	return brManager;
+	}
+
+// -----------------------------------------------------------------------------
+// CFSMailBrand::NewLC
+// -----------------------------------------------------------------------------
+CFSMailBrand* CFSMailBrand::NewLC( TResourceReader& aReader, TBool aIsWhiteLabel )
+	{
+    FUNC_LOG;
+    CFSMailBrand* self = new ( ELeave ) CFSMailBrand();
+    CleanupStack::PushL( self );
+    if ( aIsWhiteLabel )
+    	{
+    	self->ConstructFromCenrepL( );
+    	}
+    else
+    	{
+    	self->ConstructFromResourceL( aReader );
+    	}
+    return self;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CFSMailBrand::ConstructFromCenrepL
+// -----------------------------------------------------------------------------
+void CFSMailBrand::ConstructFromCenrepL( )
+    {
+    FUNC_LOG;
+    
+    TBuf<KMaxStringLenFromCenrep> tBuf; // Temporary buffer
+    HBufC*    mailboxName;
+
+    iGraphicElements = new ( ELeave )
+        CArrayFixSeg< TBrandedGraphic >( KElementArrayGranularity );
+
+    iTextElements = new ( ELeave )
+        CArrayFixSeg< TBrandedText >( KElementArrayGranularity );
+
+    iTexts = new ( ELeave ) CDesCArraySeg( KElementArrayGranularity );
+
+    CRepository* repository = NULL;
+    TRAPD( ret, repository = CRepository::NewL( KFreestyleEmailCenRep ));
+    if ( ret == KErrNone )
+        {
+        CleanupStack::PushL( repository );
+        TInt err_count = 0;
+        // Read all WLB related parameters from Central Repository
+        TInt err = repository->Get( KFreestyleWLBBrandIdMatchString, tBuf );
+        HBufC* buf = tBuf.AllocL();
+        iBrandMatchStrings.AppendL(buf);
+        if ( err != KErrNone )
+            {
+            err_count++;
+            }
+        err = repository->Get( KFreestyleWLBMailboxName, tBuf );
+        mailboxName = tBuf.AllocLC();
+        if ( err != KErrNone )
+            {
+            err_count++;
+            }
+        err = repository->Get( KFreestyleWLBMIFFilePathWithTargetFilename, tBuf );
+        iIconFilePath = tBuf.AllocL();
+        if ( err != KErrNone )
+            {
+            err_count++;
+            }
+        if ( err_count == 0 )
+            {
+            // Create WLB graphic elements
+            TBrandedGraphic newMailboxIconElement;
+            newMailboxIconElement.iElementId = ( TFSBrandElement ) EFSMailboxIcon;
+            err = repository->Get( KFreestyleWLBMailboxIconID, newMailboxIconElement.iIconId );
+            if ( err != KErrNone )
+                newMailboxIconElement.iIconId = 0x4000; // Use default if Cenrep read fails
+            newMailboxIconElement.iMaskId = newMailboxIconElement.iIconId + 1;      
+            iGraphicElements->AppendL( newMailboxIconElement );
+
+            TBrandedText newMailboxNameElement;
+            newMailboxNameElement.iElementId = ( TFSBrandElement) EFSMailboxName;
+            iTexts->AppendL( *mailboxName );
+            newMailboxNameElement.iText.Set( iTexts->MdcaPoint( iTexts->Count() - 1 ) );
+            iTextElements->AppendL( newMailboxNameElement );
+            }
+        CleanupStack::PopAndDestroy( mailboxName );
+        CleanupStack::PopAndDestroy( repository );
+        }
+   }
+
+// -----------------------------------------------------------------------------
+// CFSMailBrand::ConstructFromResourceL
+// -----------------------------------------------------------------------------
+void CFSMailBrand::ConstructFromResourceL( TResourceReader& aReader )
+    {
+    FUNC_LOG;
+
+    // read icon filepath
+    iIconFilePath = aReader.ReadHBufCL();
+
+    // read match strings
+    TInt count = aReader.ReadInt16();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        iBrandMatchStrings.AppendL(aReader.ReadHBufCL());        
+        }   
+
+    // read graphics
+    iGraphicElements = new ( ELeave )
+        CArrayFixSeg< TBrandedGraphic >( KElementArrayGranularity );
+    count = aReader.ReadInt16();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        TBrandedGraphic newElement;
+        newElement.iElementId = ( TFSBrandElement ) aReader.ReadInt32();
+        newElement.iIconId = aReader.ReadInt32();
+        newElement.iMaskId = aReader.ReadInt32();
+        iGraphicElements->AppendL( newElement );
+        }
+
+    // read texts
+    iTexts = new ( ELeave ) CDesCArraySeg( KElementArrayGranularity );
+    iTextElements = new ( ELeave )
+        CArrayFixSeg< TBrandedText >( KElementArrayGranularity );
+    count = aReader.ReadInt16();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        TBrandedText newElement;
+        newElement.iElementId = ( TFSBrandElement) aReader.ReadInt32();
+        HBufC* text = aReader.ReadTPtrC().AllocLC();
+        iTexts->AppendL( *text );
+        CleanupStack::PopAndDestroy( text );
+        newElement.iText.Set( iTexts->MdcaPoint( iTexts->Count() - 1 ) );
+        iTextElements->AppendL( newElement );
+        }
+
+    // read colors
+    iColorElements = new ( ELeave )
+        CArrayFixSeg< TBrandedColor >( KElementArrayGranularity );
+    count = aReader.ReadInt16();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        TBrandedColor newElement;
+        newElement.iElementId = ( TFSBrandElement ) aReader.ReadInt32();
+        newElement.iColor.SetRed( aReader.ReadInt16() );
+        newElement.iColor.SetGreen( aReader.ReadInt16() );
+        newElement.iColor.SetBlue( aReader.ReadInt16() );
+        newElement.iColor.SetAlpha( aReader.ReadInt16() );
+        iColorElements->AppendL( newElement );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBrand::~CFSMailBrand()
+// -----------------------------------------------------------------------------
+CFSMailBrand::~CFSMailBrand()
+	{
+    FUNC_LOG;
+	iBrandMatchStrings.ResetAndDestroy();
+	delete iIconFilePath;
+	delete iGraphicElements;
+	delete iTextElements;
+	delete iColorElements;
+	delete iTexts;
+	delete iEmpty;
+	}
+
+// -----------------------------------------------------------------------------
+// CFSMailBrand::CFSMailBrand()
+// -----------------------------------------------------------------------------
+CFSMailBrand::CFSMailBrand()
+	{
+    FUNC_LOG;
+		// prepare null empty descriptor
+	iEmpty = HBufC::New(1);
+	iEmpty->Des().Copy(KNullDesC());
+
+	}
+
+// -----------------------------------------------------------------------------
+// CFSMailBrand::IsMatching
+// -----------------------------------------------------------------------------
+TBool CFSMailBrand::IsMatching( const TDesC& aBrandId )
+    {
+    FUNC_LOG;
+
+    TInt count = iBrandMatchStrings.Count();
+    for(TInt i=0;i<count;i++)
+        {
+        if ( aBrandId.MatchC( *iBrandMatchStrings[i] ) == KErrNone )
+            {
+            return ETrue;
+            }
+        }
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBrand::GetText
+// -----------------------------------------------------------------------------
+TDesC& CFSMailBrand::GetText( TFSBrandElement aElementId )
+    {
+    FUNC_LOG;
+    TInt textCount( iTextElements->Count() );
+
+    for ( TInt i( 0 ); i < textCount; i++ )
+        {
+        if ( iTextElements->At( i ).iElementId == aElementId )
+            {
+            return iTextElements->At( i ).iText;
+            }
+        }
+        
+    return *iEmpty;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBrand::GetColor
+// -----------------------------------------------------------------------------
+TInt CFSMailBrand::GetColor( TFSBrandElement aElementId, TRgb& aColor )
+    {
+    FUNC_LOG;
+    TInt colorCount( iColorElements->Count() );
+
+    for ( TInt i( 0 ); i < colorCount; i++ )
+        {
+        if ( iColorElements->At( i ).iElementId == aElementId )
+            {
+            aColor = iColorElements->At( i ).iColor;
+            return KErrNone;
+            }
+        }
+    
+    return KErrNotFound;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBrand::GetGraphicL
+// -----------------------------------------------------------------------------
+CGulIcon* CFSMailBrand::GetGraphicL( TFSBrandElement aElementId )
+    {
+    FUNC_LOG;
+    TInt graphicsCount( iGraphicElements->Count() );
+
+    for ( TInt i( 0 ); i < graphicsCount; i++ )
+        {
+        TBrandedGraphic element = iGraphicElements->At( i );
+
+        if ( element.iElementId == aElementId )
+            {
+            CFbsBitmap* icon( NULL );
+            CFbsBitmap* mask( NULL );            
+
+            if ( iIconFilePath == NULL )
+                {
+                // If graphic element is found but no path is defined it is
+                // deemed as an error situation.
+                User::Leave( KErrNotFound );
+                }
+                
+            TFileName dllFileName;
+            Dll::FileName( dllFileName );
+		 	TParse parse;
+		    User::LeaveIfError( parse.Set( *iIconFilePath, &dllFileName, NULL) );
+		    TFileName iconFileName( parse.FullName() );
+                
+                
+            AknIconUtils::CreateIconLC( icon,
+                                        mask,
+                                        iconFileName,
+                                        element.iIconId,
+                                        element.iMaskId );
+            CGulIcon* gulIcon = CGulIcon::NewL( icon, mask );
+
+            CleanupStack::Pop( 2 ); // icon, mask
+            
+            return gulIcon;
+            }
+        }
+
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBrand::GetGraphicIdsL
+// -----------------------------------------------------------------------------
+TInt CFSMailBrand::GetGraphicIdsL( TFSBrandElement aElementId,
+                                   TDes& aIconIds)
+    {
+    FUNC_LOG;
+    
+    aIconIds.Zero();
+    TInt graphicsCount( iGraphicElements->Count() );
+
+    for ( TInt i( 0 ); i < graphicsCount; i++ )
+        {
+        TBrandedGraphic element = iGraphicElements->At( i );
+
+        if ( element.iElementId == aElementId )
+            {
+            if ( iIconFilePath == NULL )
+                {
+                // If graphic element is found but no path is defined it is
+                // deemed as an error situation.
+                User::Leave( KErrNotFound );
+                }
+                
+            TFileName dllFileName;
+            Dll::FileName( dllFileName );
+		 	TParse parse;
+		    User::LeaveIfError( parse.Set( *iIconFilePath, &dllFileName, NULL) );
+		    TFileName iconFileName( parse.FullName() );
+            
+		    TBuf<KMaxDesLen> id;
+		    aIconIds.Copy(iconFileName);
+		    aIconIds.Append(KSpace);
+		    id.Num(element.iIconId);
+		    aIconIds.Append(id);
+		    aIconIds.Append(KSpace);
+		    id.Num(element.iMaskId);
+            aIconIds.Append(id);
+            
+            return KErrNone;
+            }
+        }
+
+    return KErrNotFound;
+    }
+