meetingrequest/mrgui/mrfieldbuildercommon/src/cmrbackground.cpp
changeset 0 8466d47a6819
child 16 4ce476e64c59
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrgui/mrfieldbuildercommon/src/cmrbackground.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,252 @@
+/*
+* 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:  Background/focus component for fields.
+*
+*/
+
+#include "cmrbackground.h"
+#include <AknUtils.h>
+
+
+// unnamed namespace for local definitions
+namespace // codescanner::namespace 
+    { 
+    const TInt KEdge (8);
+    const TInt KGranularity( 9 );
+    
+    #ifdef _DEBUG
+        enum TPanic
+            {
+            EErrorItemCount = 1
+            };
+        
+        void Panic( TPanic aPanic )
+            {
+            _LIT( KCategory, "CMRBackground" );
+            User::Panic( KCategory(), aPanic );
+            }
+    #endif // _DEBUG
+    }//namespace
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CMRBackground::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C 
+CMRBackground* CMRBackground::NewL( CESMRLayoutManager& aLayoutManager )
+    {
+    CMRBackground* self = new (ELeave) CMRBackground( aLayoutManager );
+    CleanupStack::PushL( self );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CMRBackground::CMRBackground
+// ---------------------------------------------------------------------------
+//
+CMRBackground::CMRBackground( CESMRLayoutManager& aLayoutManager )
+    : iLayoutManager( aLayoutManager )
+    {
+    // Do nothing
+    }
+
+// ---------------------------------------------------------------------------
+// CMRBackground::~CMRBackground
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CMRBackground::~CMRBackground()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CMRBackground::Draw
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CMRBackground::Draw(
+        CWindowGc& aGc,
+        const CCoeControl& aControl,
+        const TRect& /*aRect*/ ) const
+    {
+    const CESMRField& ctrl = 
+            static_cast<const CESMRField&> ( aControl );
+    TBool hasOutlineFocus = ctrl.HasOutlineFocus();
+    TESMRFieldFocusType focusType = ctrl.GetFocusType();
+    // highlight bitmap target rect:
+    TRect rect( ctrl.GetFocusRect() );
+    rect.Move( ctrl.Position() );
+    
+    if ( hasOutlineFocus )
+        {
+        if( focusType == EESMRHighlightFocus )
+            {
+            if( ctrl.FieldMode() == EESMRFieldModeView )
+                {
+                // Focused viewer field
+                DrawFocus( aGc, rect, aControl, EViewerFieldWithFocus );
+                }            
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMRBackground::IconSkinIdL
+// ---------------------------------------------------------------------------
+// 
+CArrayFixFlat<NMRBitmapManager::TMRBitmapId>* 
+CMRBackground::IconSkinIdL( TBgType aType ) const
+    {
+    CArrayFixFlat<NMRBitmapManager::TMRBitmapId>* array = 
+        new (ELeave) CArrayFixFlat<NMRBitmapManager::TMRBitmapId>( KGranularity );
+    CleanupStack::PushL( array );
+    if( aType == EViewerFieldWithFocus )
+        {
+        array->AppendL( NMRBitmapManager::EMRBitmapListTopLeft );
+        array->AppendL( NMRBitmapManager::EMRBitmapListLeft );
+        array->AppendL( NMRBitmapManager::EMRBitmapListBottomLeft );
+        array->AppendL( NMRBitmapManager::EMRBitmapListTop );
+        array->AppendL( NMRBitmapManager::EMRBitmapListCenter );
+        array->AppendL( NMRBitmapManager::EMRBitmapListBottom );
+        array->AppendL( NMRBitmapManager::EMRBitmapListTopRight );
+        array->AppendL( NMRBitmapManager::EMRBitmapListRight );
+        array->AppendL( NMRBitmapManager::EMRBitmapListBottomRight );   
+        }
+    else
+        {
+        array->AppendL( NMRBitmapManager::EMRBitmapSetOptTopLeft );
+        array->AppendL( NMRBitmapManager::EMRBitmapSetOptLeft );
+        array->AppendL( NMRBitmapManager::EMRBitmapSetOptBottomLeft );
+        array->AppendL( NMRBitmapManager::EMRBitmapSetOptTop );
+        array->AppendL( NMRBitmapManager::EMRBitmapSetOptCenter );
+        array->AppendL( NMRBitmapManager::EMRBitmapSetOptBottom );
+        array->AppendL( NMRBitmapManager::EMRBitmapSetOptTopRight );
+        array->AppendL( NMRBitmapManager::EMRBitmapSetOptRight );
+        array->AppendL( NMRBitmapManager::EMRBitmapSetOptBottomRight );    
+        }
+ 
+    CleanupStack::Pop( array );
+    return array;
+    }
+
+// ---------------------------------------------------------------------------
+// CMRBackground::DrawFocus
+// ---------------------------------------------------------------------------
+//    
+void CMRBackground::DrawFocus( 
+        CWindowGc& aGc, 
+        TRect aRect, 
+        const CCoeControl& aControl, 
+        TBgType aType ) const
+        {
+        CFbsBitmap* selector = NULL;
+        CFbsBitmap* selectorMask = NULL;
+        
+        CArrayFixFlat<NMRBitmapManager::TMRBitmapId>* iconIds = NULL;
+        // Error does not matter, we'll check that array is created and 
+        // it contains all items.
+        TRAP_IGNORE( iconIds = IconSkinIdL( aType ) );
+        
+        if( iconIds )
+            {
+            __ASSERT_DEBUG( 
+                    iconIds->Count() == KGranularity, 
+                    Panic(EErrorItemCount) );
+            TSize corner(KEdge, KEdge);
+            TInt error = NMRBitmapManager::GetSkinBasedBitmap( 
+                    (*iconIds)[0], selector, selectorMask, corner );
+    
+            if( selector && selectorMask && error == KErrNone )
+                {
+                //corner TL
+                aGc.BitBltMasked( 
+                        aRect.iTl, selector, corner, selectorMask, EFalse );
+    
+                //side L
+                TSize side(KEdge, (aRect.Height() - 2 * KEdge) );
+                NMRBitmapManager::GetSkinBasedBitmap( 
+                        (*iconIds)[1], selector, selectorMask, side );
+                aGc.BitBltMasked( TPoint(aRect.iTl.iX, aRect.iTl.iY + KEdge),
+                                  selector, side, selectorMask, EFalse );
+    
+                //corner BL
+                NMRBitmapManager::GetSkinBasedBitmap( 
+                        (*iconIds)[2], selector, selectorMask, corner );
+                aGc.BitBltMasked( 
+                        TPoint(aRect.iTl.iX, 
+                                aRect.iTl.iY + KEdge + side.iHeight),
+                        selector, corner, selectorMask, EFalse );
+    
+                //top
+                TSize top( (aRect.Width() - 2 * KEdge) , KEdge);
+                NMRBitmapManager::GetSkinBasedBitmap( 
+                        (*iconIds)[3], selector, selectorMask, top );
+                aGc.BitBltMasked( TPoint(aRect.iTl.iX + KEdge, aRect.iTl.iY),
+                                  selector, top, selectorMask, EFalse );
+    
+                //center
+                TSize center( top.iWidth, side.iHeight);
+                NMRBitmapManager::GetSkinBasedBitmap( 
+                        (*iconIds)[4], selector, selectorMask, center );
+                aGc.BitBltMasked( 
+                        TPoint(aRect.iTl.iX + KEdge, aRect.iTl.iY + KEdge),
+                            selector, center, selectorMask, EFalse );
+    
+                //bottom
+                NMRBitmapManager::GetSkinBasedBitmap( 
+                        (*iconIds)[5], selector, selectorMask, top );
+                aGc.BitBltMasked( 
+                TPoint(aRect.iTl.iX + KEdge, 
+                        aRect.iTl.iY + side.iHeight + KEdge),
+                selector, top, selectorMask, EFalse );
+    
+                //corner TR
+                NMRBitmapManager::GetSkinBasedBitmap( 
+                        (*iconIds)[6], selector, selectorMask, corner );
+                aGc.BitBltMasked( 
+                        TPoint(aRect.iTl.iX + KEdge + top.iWidth, 
+                                aRect.iTl.iY),
+                        selector, corner, selectorMask, EFalse );
+    
+                //side R
+                NMRBitmapManager::GetSkinBasedBitmap( 
+                        (*iconIds)[7], selector, selectorMask, side );
+                aGc.BitBltMasked( 
+                        TPoint(aRect.iTl.iX + KEdge + top.iWidth, 
+                                aRect.iTl.iY + KEdge),
+                 selector, side, selectorMask, EFalse );
+    
+                //corner Br
+                NMRBitmapManager::GetSkinBasedBitmap( 
+                        (*iconIds)[8], selector, selectorMask, corner );
+                aGc.BitBltMasked( 
+                        TPoint(aRect.iTl.iX + KEdge + top.iWidth, 
+                                aRect.iTl.iY + KEdge + side.iHeight),
+                                    selector, corner, selectorMask, EFalse );        
+                }
+            else // This should NOT be called ever.
+                {
+                aGc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+                aGc.SetPenStyle( CGraphicsContext::ENullPen );
+                aGc.SetBrushColor( KRgbGreen );
+                aGc.DrawRect( aControl.Rect() );
+                }
+
+            delete selector;
+            delete selectorMask;
+            }
+        delete iconIds;
+        }
+// EOF