phoneplugins/telbranding/src/telbrandingcallindicator.cpp
changeset 0 5f000ab63145
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneplugins/telbranding/src/telbrandingcallindicator.cpp	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 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:  Branding specific call indication.
+*
+*/
+
+#include <telbubbleextensiondata.h>
+#include <AknsUtils.h>
+#include <eikimage.h>
+#include <callstatus.mbg> // From bubblemanager
+#include <aknconsts.h>
+#include <AknBitmapAnimation.h>  // Animation definition
+#include <AknUtils.h>
+
+#include "telbrandingcallindicator.h"
+
+
+// ======== LOCAL FUNCTIONS ========
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::CTelBrandingCallIndicator
+// ---------------------------------------------------------------------------
+//
+CTelBrandingCallIndicator::CTelBrandingCallIndicator( 
+    MTelBubbleExtensionData& aCallData, CEikImage* aBrand ) :
+    iCallData( aCallData ),
+    iBrand( aBrand ),
+    iCallIndicator( NULL )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingCallIndicator::ConstructL()
+    {
+    CTelBubbleAnim::ConstructL( 500 );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::NewL
+// ---------------------------------------------------------------------------
+//
+CTelBrandingCallIndicator* CTelBrandingCallIndicator::NewL(
+    MTelBubbleExtensionData& aCallData, CEikImage* aBrand )
+    {
+    CTelBrandingCallIndicator* self = 
+        CTelBrandingCallIndicator::NewLC( aCallData, aBrand );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::NewLC
+// ---------------------------------------------------------------------------
+//
+CTelBrandingCallIndicator* CTelBrandingCallIndicator::NewLC(
+    MTelBubbleExtensionData& aCallData, CEikImage* aBrand )
+    {
+    CTelBrandingCallIndicator* self = 
+        new( ELeave ) CTelBrandingCallIndicator( aCallData, aBrand );
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::~CTelBrandingCallIndicator
+// ---------------------------------------------------------------------------
+//
+CTelBrandingCallIndicator::~CTelBrandingCallIndicator()
+    {
+    delete iBrand;
+    delete iCallIndicator;
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::MakeVisible
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingCallIndicator::MakeVisible( TBool aVisible )
+    {
+    CTelBubbleAnim::MakeVisible( aVisible );
+
+    if( aVisible )
+        {
+        TRAP_IGNORE( DoVisibleL() );
+        }
+    else
+        {
+        StopAnimation();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::Draw
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingCallIndicator::Draw( const TRect& /*aRect*/ ) const
+    {
+    CWindowGc& gc = SystemGc();
+    
+    // Position is botton right corner minus image size
+    TPoint brandPlace = Rect().iBr - iBrand->MinimumSize();
+    TPoint callIndPlace = Rect().iTl;
+
+    if( AknLayoutUtils::LayoutMirrored() )
+        {
+        // Fix position when arabic variant is in use
+        brandPlace.iX = Rect().iTl.iX;
+        
+        if( iCallIndicator )
+            {
+            callIndPlace.iX = Rect().iBr.iX - iCallIndicator->MinimumSize().iWidth;
+            }
+        
+        }
+    
+    gc.BitBltMasked( brandPlace,
+                     iBrand->Bitmap(),
+                     iBrand->MinimumSize(),
+                     iBrand->Mask(),
+                     ETrue );
+    
+    if( iCallIndicator )
+        {
+        gc.BitBltMasked( callIndPlace,
+            iCallIndicator->Bitmap(),
+            iCallIndicator->MinimumSize(),
+            iCallIndicator->Mask(),
+            ETrue );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::SizeChanged
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingCallIndicator::SizeChanged()
+    {
+    CCoeControl::SizeChanged();
+    TPoint place = Rect().iTl;
+    
+    TSize imageSize = Rect().Size();
+    imageSize.iHeight /= 1.5;
+    imageSize.iWidth /= 1.5;
+
+    if( AknLayoutUtils::LayoutMirrored() )
+        {
+        // Fix position when arabic variant is in use
+        place.iX = Rect().iBr.iX - imageSize.iWidth;
+        }
+    
+    iAnimation->SetRect( TRect( place, imageSize ) );
+    
+    if ( iBrand->Bitmap() )
+        {
+        AknIconUtils::SetSize( 
+            const_cast<CFbsBitmap*> ( iBrand->Bitmap() ), 
+            imageSize );
+        }
+    
+    if ( iCallIndicator )
+        {
+        AknIconUtils::SetSize( 
+            const_cast<CFbsBitmap*> ( iCallIndicator->Bitmap() ), 
+            imageSize );
+        }
+    
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::DoVisibleL
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingCallIndicator::DoVisibleL()
+    {
+    Reset();
+    delete iCallIndicator;
+    iCallIndicator = NULL;
+    
+    switch( iCallData.State() )
+        {
+        case MTelBubbleExtensionData::EOnHold:
+            // Show icon
+            iCallIndicator = GetImageL( 
+                KAknsIIDQgnIndiCallHeld,
+                EMbmCallstatusQgn_indi_call_held,
+                EMbmCallstatusQgn_indi_call_held_mask );
+            break;
+        case MTelBubbleExtensionData::EAlertToDisconnected:
+        case MTelBubbleExtensionData::EDisconnected:
+            // Show icon
+            iCallIndicator = GetImageL( 
+                KAknsIIDQgnIndiCallDisconn,
+                EMbmCallstatusQgn_indi_call_disconn,
+                EMbmCallstatusQgn_indi_call_disconn_mask );
+            break;
+        case MTelBubbleExtensionData::EOutgoing:
+        case MTelBubbleExtensionData::EActive:
+            // Show icon
+            iCallIndicator = GetImageL( 
+                KAknsIIDQgnIndiCallActive,
+                EMbmCallstatusQgn_indi_call_active,
+                EMbmCallstatusQgn_indi_call_active_mask );
+            break;
+        case MTelBubbleExtensionData::EIncoming:
+        case MTelBubbleExtensionData::EWaiting:
+        case MTelBubbleExtensionData::EAlerting:
+            // frame 1
+            AddBrandedFrameToAnimationL( 
+                KAknsIIDQgnIndiCallActive,
+                EMbmCallstatusQgn_indi_call_active,
+                EMbmCallstatusQgn_indi_call_active_mask );
+            
+            // frame 2
+            AddBrandedFrameToAnimationL( 
+                KAknsIIDQgnIndiCallActive2,
+                EMbmCallstatusQgn_indi_call_active_2,
+                EMbmCallstatusQgn_indi_call_active_2_mask );
+            break;
+            
+        case MTelBubbleExtensionData::ENone:
+        default:
+            // Do nothing
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::ShowAnimationL
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingCallIndicator::ShowAnimationL()
+    {
+
+
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::ShowImageL
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingCallIndicator::ShowImageL()
+    {
+
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::AddBrandedFrameToAnimationL
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingCallIndicator::AddBrandedFrameToAnimationL( 
+    TAknsItemID aSkinId, TInt aBitmap, TInt aMask )
+    {
+    CEikImage* image = GetImageL( aSkinId, aBitmap, aMask );
+    AddFrameToAnimationLD( image );
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingCallIndicator::GetImageL
+// ---------------------------------------------------------------------------
+//
+CEikImage* CTelBrandingCallIndicator::GetImageL(
+    TAknsItemID aSkinId, 
+    TInt aBitmap, 
+    TInt aMask )
+    {
+    CFbsBitmap* bitmap;
+    CFbsBitmap* mask;
+    
+    CEikImage* image = new(ELeave) CEikImage;
+    CleanupStack::PushL( image );
+        
+    AknsUtils::CreateIconL( 
+        AknsUtils::SkinInstance(),
+        aSkinId,
+        bitmap,
+        mask,
+        KCallStatusBitmapFile,
+        aBitmap,
+        aMask
+        );
+
+    image->SetPicture( bitmap, mask );
+    
+    CleanupStack::Pop( image );
+    return image;
+    }
+
+// End of file