--- /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