wvuing/wvvariant/Src/CCASkinVariant20.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvvariant/Src/CCASkinVariant20.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,296 @@
+/*
+* Copyright (c) 2006 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:  Active implementation of skin feature.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "CCASkinVariant20.h"
+#include    "CABitmapMapping.h"     // defines the skinned bitmap ids
+#include    "ccaiconfileprovider.h"
+#include	"MCAOpBrandVariant.h"
+#include    "ChatDebugPrint.h"
+#include    "ChatDebugAssert.h"
+#include	<aknappui.h>
+#include	<AknsSkinInstance.h>	// skins 
+#include	<AknsUtils.h>
+#include	<AknUtils.h>
+#include	<AknsDrawUtils.h>
+#include	<AknsBasicBackgroundControlContext.h>
+#include	<gulicon.h>
+#include    <akniconutils.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCASkinVariant20::CCASkinVariant20
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCASkinVariant20::CCASkinVariant20()
+        : iFs( CCoeEnv::Static()->FsSession() )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CCASkinVariant20::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCASkinVariant20::ConstructL( MCAOpBrandVariant* aOpBrandVariant )
+    {
+    User::LeaveIfError( iFs.ShareProtected() );
+
+    iOpBrandVariant = aOpBrandVariant;
+    TRect mainPane( 0, 0, 0, 0 );
+
+    // Return value can be safely ignored.
+    // from AknLayoutUtils::LayoutMetricsRect documentation:
+    //
+    // Returns EFalse for status pane descendants if requested
+    // layout component is not available in current layout. For
+    // other components returns always ETrue (returned rectangle is
+    // from layout definition).
+    //
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, mainPane );
+
+    iBgContext = CAknsBasicBackgroundControlContext::NewL(
+                     KAknsIIDQsnBgAreaMain, mainPane, EFalse );
+    }
+
+// -----------------------------------------------------------------------------
+// CCASkinVariant20::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCASkinVariant20* CCASkinVariant20::NewL( MCAOpBrandVariant* aOpBrandVariant )
+    {
+    CCASkinVariant20* self = new( ELeave ) CCASkinVariant20;
+
+    CleanupStack::PushL( self );
+    self->ConstructL( aOpBrandVariant );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// Destructor
+CCASkinVariant20::~CCASkinVariant20()
+    {
+    delete iBgContext;
+    delete iBitmapFile;
+    }
+
+// -----------------------------------------------------------------------------
+// CCASkinVariant20::SkinFlag
+// returns skins-enabled flag
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCASkinVariant20::SkinFlag() const
+    {
+    return CAknAppUi::EAknEnableSkin;
+    }
+
+// -----------------------------------------------------------------------------
+// CCASkinVariant20::ClearChatListBoxBackGround
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCASkinVariant20::ClearChatListBoxBackGround( CWindowGc& aGc,
+                                                   const TRect& aUsedPortionOfViewRect,
+                                                   MAknsControlContext* aContext )
+    {
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    AknsDrawUtils::Background( skin, aContext, NULL, aGc,
+                               aUsedPortionOfViewRect );
+    }
+
+// -----------------------------------------------------------------------------
+// CCASkinVariant20::MainPaneBackgroundContext
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+MAknsControlContext* CCASkinVariant20::MainPaneBackgroundContext() const
+    {
+    return iBgContext;
+    }
+
+// -----------------------------------------------------------------------------
+// CCASkinVariant20::UpdateLayout
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCASkinVariant20::UpdateLayout()
+    {
+    TRect screen( 0, 0, 0, 0 );
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screen );
+    iBgContext->SetRect( screen );
+    }
+
+// -----------------------------------------------------------------------------
+// CCASkinVariant20::DrawSkinnedEditor
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CCASkinVariant20::DrawSkinnedEditor( const CCoeControl* aControl,
+                                           CWindowGc& aGc,
+                                           TRect& /*aParentRect*/,
+                                           TRect& aEditorRect,
+                                           TRect& aOutlineRect )
+    {
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+
+    // draw editor surroundings
+    AknsDrawUtils::BackgroundBetweenRects( skin, MainPaneBackgroundContext(),
+                                           aControl, aGc, aOutlineRect,
+                                           aEditorRect );
+
+    TRect innerRect( aOutlineRect );
+    //why 6 ? don't ask me. It was 3x3 for 176x208.
+    innerRect.Shrink( TSize( 6, 6 ) );
+    // draw editor frames
+    return  AknsDrawUtils::DrawFrame( skin, aGc, aOutlineRect, innerRect,
+                                      KAknsIIDQsnFrInput, KAknsIIDQsnFrInputCenter );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CCASkinVariant20::LoadBitmapL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CGulIcon* CCASkinVariant20::LoadBitmapL( TInt aBitmapId, TInt aMaskId,
+                                         const TDesC& aFullPath, TBool aOverrideBrand,
+                                         TRgb* aCustomColor )
+    {
+    CHAT_DP_TXT( "CCASkinVariant20::LoadBitmapL - start" );
+
+    CFbsBitmap* bitmap = NULL;
+    CFbsBitmap* mask = NULL;
+
+    if ( iOpBrandVariant )
+        {
+        // brand overrides skinned bitmaps if bitmap is not forced to be
+        // read through skins (aOverrideBrand)
+        if ( iOpBrandVariant->BrandBitmapsActivatedL() && !aOverrideBrand )
+            {
+            CHAT_DP_TXT( "CCASkinVariant20::LoadBitmapL - \
+                          returning branded icon" );
+
+            // get a copy of filename
+            HBufC* temp = aFullPath.AllocL();
+            delete iBitmapFile;
+            iBitmapFile = temp;
+
+            // icon server take ownership of of icon file provider
+            CCAIconFileProvider* ifp = CCAIconFileProvider::NewL( iFs, *iBitmapFile );
+            CleanupStack::PushL( ifp );
+
+            AknIconUtils::CreateIconLC( bitmap, mask, *ifp, aBitmapId,
+                                        aMaskId );
+
+            CleanupStack::Pop( 3, ifp ); // bitmap, mask, ifp
+
+            CGulIcon* gulIcon = CGulIcon::NewL( bitmap, mask );
+            return gulIcon;
+            }
+
+        }
+
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+
+    TAknsItemID itemId( KAknsIIDNone );
+    TInt colorGroupId( 0 );
+    MapFromBitmapIdToAknsItemId( aBitmapId, itemId, colorGroupId );
+
+    if ( colorGroupId != 0 )
+        {
+        CHAT_DP_TXT( "CCASkinVariant20::LoadBitmapL - color change group" );
+
+        if ( aBitmapId == EMbmChatngQgn_prop_im_tome
+             || aBitmapId == EMbmChatngQgn_prop_im_from )
+            {
+            // Special case, these icons are using the same color
+            // and color group as text
+            if ( aCustomColor )
+                {
+                // If user has set a special color for text
+                AknIconUtils::CreateIconLC( bitmap, mask, aFullPath,
+                                            aBitmapId, aMaskId );
+                AknIconUtils::SetIconColor( bitmap, *aCustomColor );
+                }
+            else
+                {
+                AknsUtils::CreateColorIconLC( skin,
+                                              itemId, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6,
+                                              bitmap, mask, aFullPath, aBitmapId, aMaskId, KRgbBlack );
+                }
+            }
+        else
+            {
+            AknsUtils::CreateColorIconLC( skin,
+                                          itemId, KAknsIIDQsnIconColors, colorGroupId,
+                                          bitmap, mask, aFullPath, aBitmapId, aMaskId, KRgbBlack );
+            }
+        }
+    else
+        {
+        AknsUtils::CreateIconLC( skin,
+                                 itemId,
+                                 bitmap, mask, aFullPath, aBitmapId, aMaskId );
+        }
+
+    CGulIcon* gulIcon = CGulIcon::NewL( bitmap, mask );
+    CleanupStack::Pop( 2 ); // bitmap, mask
+
+    CHAT_DP_TXT( "CCASkinVariant20::LoadBitmapL - returning skinned or default \
+                  icon" );
+    return gulIcon;
+    }
+
+// -----------------------------------------------------------------------------
+// CCASkinVariant20::MapFromBitmapIdToAknsItemId
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCASkinVariant20::MapFromBitmapIdToAknsItemId( TInt aBitmapId,
+                                                    TAknsItemID& aItemId, TInt& aColorGroupId )
+    {
+    for ( TInt i( 0 ); KCABitmaps[i].iBitmapId != KErrNotFound; i++ )
+        {
+        if ( KCABitmaps[ i ].iBitmapId == aBitmapId )
+            {
+            // found it
+            CHAT_DP( D_CHAT_LIT( "CCASkinVariant20::MapFromBitmapIdToAknsItemId \
+                                  - id found for %d!" ), aBitmapId );
+            aItemId = *( KCABitmaps[ i ].iItemId );
+            aColorGroupId = KCABitmaps[ i ].iColorGroupId;
+            return;
+            }
+        }
+
+    // not found
+    CHAT_DP( D_CHAT_LIT( "CCASkinVariant20::MapFromBitmapIdToAknsItemId - \
+                          id not found for %d!" ), aBitmapId );
+    CHAT_DP_TXT( "!!!!!!!! every bitmap enumeration should be found from \
+                  CABitmapMapping.h !!!!!!!! " );
+
+    __CHAT_ASSERT_DEBUG( EFalse );
+    }
+
+
+//  End of File