meetingrequest/mrgui/mrfieldbuildercommon/src/cesmriconfield.cpp
changeset 0 8466d47a6819
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrgui/mrfieldbuildercommon/src/cesmriconfield.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,237 @@
+/*
+* Copyright (c) 2007-2009 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:  Base class for icon fields
+*
+*/
+
+
+#include "emailtrace.h"
+#include <AknIconUtils.h>
+#include <fbs.h>
+#include <eikimage.h>
+#include <layoutmetadata.cdl.h>
+#include <AknsItemID.h>
+#include <AknsUtils.h>
+#include <data_caging_path_literals.hrh>
+
+#include "cesmriconfield.h"
+#include "cesmrborderlayer.h"
+#include "esmrhelper.h"
+#include "cesmrlayoutmgr.h"
+
+using namespace ESMRLayout;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CESMRIconField::CESMRIconField
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CESMRIconField::CESMRIconField()
+    {
+    FUNC_LOG;
+    // Do nothing
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRIconField::~CESMRIconField
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CESMRIconField::~CESMRIconField()
+    {
+    FUNC_LOG;
+    delete iIcon;
+    delete iBitmap;
+    delete iBitmapMask;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRIconField::ConstructL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CESMRIconField::ConstructL( 
+		TAknsItemID aIconID,
+        CCoeControl* aControl,
+        TESMRFieldFocusType aFocusType )
+    {
+    FUNC_LOG;
+    IconL( aIconID );
+    iIconID = aIconID;
+    CESMRField::ConstructL( aControl, aFocusType );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRIconField::SetContainerWindowL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CESMRIconField::SetContainerWindowL(
+		const CCoeControl& aContainer )
+    {
+    FUNC_LOG;
+    CESMRField::SetContainerWindowL( aContainer );
+
+    if ( iIcon )
+        {
+        iIcon->SetContainerWindowL( aContainer );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRIconField::IconL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CESMRIconField::IconL( TAknsItemID aIconID )
+    {
+    FUNC_LOG;
+
+    // update the icon id:
+    iIconID = aIconID;
+
+    delete iIcon;
+    iIcon = NULL;
+    delete iBitmap;
+    iBitmap = NULL;
+    delete iBitmapMask;
+    iBitmapMask = NULL;
+
+    TInt fileIndex(-1);
+    TInt fileMaskIndex(-1);
+
+    CESMRLayoutManager::SetBitmapFallback( aIconID, fileIndex, fileMaskIndex );
+
+    TFileName bitmapFilePath;
+    ESMRHelper::LocateResourceFile(
+            KESMRMifFile,
+            KDC_APP_BITMAP_DIR,
+            bitmapFilePath);
+
+    AknsUtils::CreateIconL( AknsUtils::SkinInstance(),
+                            aIconID,
+                            iBitmap,
+                            iBitmapMask,
+                            bitmapFilePath,
+                            fileIndex,
+                            fileMaskIndex
+                            );
+
+
+    // Even if creating mask failed, bitmap can be used 
+    // (background is just not displayed correctly)
+    if( iBitmap )
+        {
+        AknIconUtils::SetSize( iBitmap, KIconSize, EAspectRatioPreserved );
+        iIcon = new (ELeave) CEikImage;
+        iIcon->SetPictureOwnedExternally(ETrue);
+        iIcon->SetBrushStyle( CWindowGc::ENullBrush );
+        iIcon->SetPicture( iBitmap, iBitmapMask );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRIconField::CountComponentControls
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CESMRIconField::CountComponentControls() const
+    {
+    FUNC_LOG;
+    TInt count( 0 );
+    if ( iBorder )
+    	{
+        ++count;
+    	}
+
+    if ( iIcon )
+    	{
+        ++count;
+    	}
+
+    return count;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRIconField::ComponentControl
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CCoeControl* CESMRIconField::ComponentControl( TInt aInd ) const
+    {
+    FUNC_LOG;
+    switch( aInd )
+    	{
+    	case 0:
+    		{
+    		return iIcon;    		
+    		}
+    	case 1:
+    		{
+    		return iBorder;
+    		}
+    	default:
+    		{
+    		return NULL;
+    		}
+    	}
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRIconField::SizeChanged
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CESMRIconField::SizeChanged()
+    {
+    FUNC_LOG;
+    TRect rect = Rect();
+    TPoint iconPos( 
+    		TPoint( rect.iTl.iX, rect.iTl.iY + iLayout->IconTopMargin() ));
+    TPoint borderPos( 
+    		iconPos.iX + KIconSize.iWidth + KIconBorderMargin, rect.iTl.iY );
+    TSize borderSize( 
+    	rect.Width() - (KIconSize.iWidth + KIconBorderMargin ), rect.Height() );
+
+    TRAPD( error, IconL( iIconID ) );
+
+    if ( CESMRLayoutManager::IsMirrored() )
+        {
+        CCoeControl* parent = Parent();
+        TRect r = parent->Rect();
+
+        iconPos.iX = r.iBr.iX - KIconSize.iWidth - KMirroredIconMargin;
+        borderPos.iX = iconPos.iX - (borderSize.iWidth + KIconBorderMargin );
+        }
+
+    if ( iIcon && error == KErrNone )
+        {
+        iIcon->SetPosition( iconPos );
+        iIcon->SetSize( KIconSize );
+        }
+
+    if ( iBorder && error == KErrNone )
+        {
+        // reserve icon rect.
+        iBorder->SetExtent( borderPos, BorderSize() );
+        }
+        }
+
+// ---------------------------------------------------------------------------
+// CESMRIconField::BorderSize
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TSize CESMRIconField::BorderSize() const
+    {
+    FUNC_LOG;
+    TSize borderSize( Rect().Width() - ( KIconSize.iWidth + 
+            KIconBorderMargin ), Rect().Height() );
+    
+    return borderSize;
+    }
+