phoneplugins/telbranding/src/telbrandingbubble.cpp
changeset 0 5f000ab63145
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneplugins/telbranding/src/telbrandingbubble.cpp	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,225 @@
+/*
+* 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:  Wraps bubble into one class.
+*
+*/
+
+#include "telbrandingbubble.h"
+#include "telbrandingcallindicator.h"
+#include "telbrandingserverhandler.h"
+#include "telbrandingimage.h"
+
+#include <telbubbleextensionobserver.h>
+#include <telbubbleextensiondata.h>
+#include <telbubblecustomelement.h>
+#include <telbubbleimage.h>
+
+// ======== CONSTANTS ========
+_LIT8( KBrandImageId, "bubble_manager_brand_image" );
+_LIT8( KCallIndicatorImageId, "bubble_manager_call_indicator_image" );
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CTelBrandingBubble::CTelBrandingBubble
+// ---------------------------------------------------------------------------
+//
+CTelBrandingBubble::CTelBrandingBubble( MTelBubbleExtensionData& aCallData ) :
+    iCallData( aCallData )
+    {
+
+    }
+
+
+// ---------------------------------------------------------------------------
+// CTelBrandingBubble::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingBubble::ConstructL(
+    CTelBrandingServerHandler& aServer )
+    {
+    // Branded call indication
+    TRAP_IGNORE( 
+        CreateCallIndicationElementL( 
+            aServer, 
+            CTelBubbleCustomElement::ESmallCallIndicator ); 
+        
+        CreateCallIndicationElementL( 
+            aServer, 
+            CTelBubbleCustomElement::EBigCallIndicator ); 
+        )
+    
+    if( !iElements.Count() )
+        {
+        // Basic brand image
+        TRAP_IGNORE( AddBrandingImageWithPriorityL( 
+                KBrandImageId, 
+                aServer, 
+                CTelBubbleCustomElement::EBrandImage ); 
+            )
+        }
+
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingBubble::NewLC
+// ---------------------------------------------------------------------------
+//
+CTelBrandingBubble* CTelBrandingBubble::NewLC(
+    MTelBubbleExtensionData& aCallData, 
+    CTelBrandingServerHandler& aServer )
+    {
+    CTelBrandingBubble* self = new( ELeave ) CTelBrandingBubble( aCallData );
+    CleanupStack::PushL( self );
+    self->ConstructL( aServer );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CTelBrandingBubble::~CTelBrandingBubble
+// ---------------------------------------------------------------------------
+//
+CTelBrandingBubble::~CTelBrandingBubble()
+    {
+    iElements.ResetAndDestroy();
+    iElements.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingBubble::CreateCallIndicationElementL
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingBubble::CreateCallIndicationElementL( 
+    CTelBrandingServerHandler& aServer,
+    CTelBubbleCustomElement::TElementType aType )
+    {
+    CFbsBitmap* bitmap = NULL;
+    CFbsBitmap* mask = NULL;
+    
+    // Call indicator
+    aServer.GetBrandIconL( 
+        KCallIndicatorImageId,
+        bitmap,
+        mask );
+    
+    CEikImage* image = new(ELeave) CEikImage;
+    image->SetPicture( bitmap, mask );
+    CleanupStack::PushL( image );
+
+    CTelBrandingCallIndicator* indicator = 
+        CTelBrandingCallIndicator::NewL( iCallData, image );
+    
+    CleanupStack::Pop( image );
+    CleanupStack::PushL( indicator );
+    
+    CTelBubbleCustomElement* customElement =
+        CTelBubbleCustomElement::NewL( indicator, aType );
+    
+    CleanupStack::Pop( indicator );
+    
+    AddElementToArrayL( customElement );
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingBubble::AddBrandingImageWithPriorityL
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingBubble::AddBrandingImageWithPriorityL( 
+    const TDesC8& aImageType,
+    CTelBrandingServerHandler& aServer,
+    CTelBubbleCustomElement::TElementType aType )
+    {
+    CTelBrandingImage* image = 
+        CTelBrandingImage::NewLC();
+    
+    CFbsBitmap* bitmap = NULL;
+    CFbsBitmap* mask = NULL;
+    
+    aServer.GetBrandIconL( 
+        aImageType,
+        bitmap,
+        mask );
+    
+    image->SetPicture( bitmap, mask );
+    
+    CTelBubbleCustomElement* customElement =
+        CTelBubbleCustomElement::NewL( image, aType );
+    
+    CleanupStack::Pop( image );
+
+    TInt lowerIndex = iElements.Count()-1;
+    if( lowerIndex != KErrNotFound )
+        {
+        // Set previous element to lower priority
+        CTelBrandingImage* lowerImage = 
+            static_cast<CTelBrandingImage*>( iElements[lowerIndex]->Control() );
+        image->SetLowerPriorityBranding( lowerImage );
+        }
+    
+    AddElementToArrayL( customElement );
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingBubble::AddElementToArrayL
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingBubble::AddElementToArrayL( CTelBubbleCustomElement* aElement )
+    {
+    CleanupStack::PushL( aElement );
+
+    iElements.AppendL( aElement );
+
+    CleanupStack::Pop( aElement );
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingBubble::BubbleId
+// ---------------------------------------------------------------------------
+//
+TInt CTelBrandingBubble::BubbleId() const
+    {
+    return iCallData.BubbleId();
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingBubble::AttachElements
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingBubble::AttachElements( MTelBubbleExtensionObserver& aObs ) const
+    {
+    for( TInt i = 0; i < iElements.Count(); i++ )
+        {
+        aObs.AttachElement(
+            BubbleId(), iElements[i] );
+        }
+    
+    }
+
+// ---------------------------------------------------------------------------
+// CTelBrandingBubble::DetechElements
+// ---------------------------------------------------------------------------
+//
+void CTelBrandingBubble::DetechElements( MTelBubbleExtensionObserver& aObs ) const
+    {
+    for( TInt i = 0; i < iElements.Count(); i++ )
+        {
+        aObs.DetachElement(
+            BubbleId(), iElements[i] );
+        }
+    }
+