--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/BubbleManager/Src/BMCustomManager.cpp Wed Sep 01 12:30:10 2010 +0100
@@ -0,0 +1,279 @@
+/*
+* Copyright (c) 2008 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: Customization manager
+*
+*/
+
+#include "BMCustomManager.h"
+#include "BMDefaultManager.h"
+#include "BMBubbleHeader.h"
+#include "BMPanic.h"
+
+
+// ---------------------------------------------------------------------------
+// TArrayItem class
+// ---------------------------------------------------------------------------
+//
+class TArrayItem
+ {
+public:
+ TArrayItem(
+ CTelBubbleCustomElement* aElement,
+ TInt aPriority ):
+ iElement( *aElement ),
+ iPriority( aPriority ) {};
+
+ static TInt Compare( const TArrayItem& aFirst, const TArrayItem& aSecond )
+ {
+ if( aFirst.iPriority > aSecond.iPriority )
+ {
+ return 1;
+ }
+ else if( aFirst.iPriority < aSecond.iPriority )
+ {
+ return -1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
+ CTelBubbleCustomElement* Item() { return &iElement; }
+private:
+ CTelBubbleCustomElement& iElement;
+ TInt iPriority;
+ };
+
+// ---------------------------------------------------------------------------
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CBubbleCustomManager::CBubbleCustomManager( CBubbleManager& aBubbleManager ) :
+ iBubbleManager( aBubbleManager )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CBubbleCustomManager::ConstructL()
+ {
+ // create default implementations
+ iDefaultManager = CBubbleDefaultManager::NewL( iBubbleManager );
+ }
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+CBubbleCustomManager* CBubbleCustomManager::NewL(
+ CBubbleManager& aBubbleManager )
+ {
+ CBubbleCustomManager* self =
+ new( ELeave ) CBubbleCustomManager( aBubbleManager );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CBubbleCustomManager::~CBubbleCustomManager()
+ {
+ for( TInt i = 0; i < iCustomizations.Count(); i++)
+ {
+ for( TInt j = 0; j < iCustomizations[j].Count(); j++ )
+ {
+ iCustomizations[i][j].Reset();
+ iCustomizations[i][j].Close();
+ }
+ }
+
+ delete iDefaultManager;
+ }
+
+// ---------------------------------------------------------------------------
+// AddCustomElement
+// ---------------------------------------------------------------------------
+//
+void CBubbleCustomManager::AddCustomElement(
+ const CBubbleManager::TBubbleId& aBubbleId,
+ CTelBubbleCustomElement* aElement,
+ TInt aPriority )
+ {
+ __ASSERT_DEBUG( aElement->Control(), Panic( EBMPanicCustomization ) ) ;
+ TRAPD( err, aElement->Control()->SetContainerWindowL( iBubbleManager ) );
+
+ if ( !err )
+ {
+ TArrayItem item( aElement, aPriority );
+ iCustomizations[aBubbleId]
+ [aElement->ElementType()].InsertInOrderAllowRepeats(
+ item, TLinearOrder<TArrayItem>(TArrayItem::Compare) );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveCustomElement
+// ---------------------------------------------------------------------------
+//
+void CBubbleCustomManager::RemoveCustomElement(
+ const CBubbleManager::TBubbleId& aBubbleId,
+ CTelBubbleCustomElement* aElement )
+ {
+ RArray<TArrayItem>& array =
+ iCustomizations[aBubbleId][aElement->ElementType()];
+
+ for( TInt j = 0; j < array.Count(); j++ )
+ {
+ if( array[j].Item() == aElement )
+ {
+ array.Remove(j);
+ return;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveCustomElements
+// ---------------------------------------------------------------------------
+//
+void CBubbleCustomManager::RemoveCustomElements(
+ const CBubbleManager::TBubbleId& aBubbleId )
+ {
+ for( TInt i = 0; i < iCustomizations[aBubbleId].Count(); i++ )
+ {
+ iCustomizations[aBubbleId][i].Reset();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ReserveCustomElement
+// ---------------------------------------------------------------------------
+//
+CTelBubbleCustomElement* CBubbleCustomManager::ReserveCustomElement(
+ const CBubbleHeader& aBubbleHeader,
+ CTelBubbleCustomElement::TElementType aElement )
+ {
+ TBool isDefault;
+ return ReserveCustomElement( aBubbleHeader, aElement, isDefault );
+ }
+
+// ---------------------------------------------------------------------------
+// ReserveCustomElement
+// ---------------------------------------------------------------------------
+//
+CTelBubbleCustomElement* CBubbleCustomManager::ReserveCustomElement(
+ const CBubbleHeader& aBubbleHeader,
+ CTelBubbleCustomElement::TElementType aElement,
+ TBool& aIsDefault )
+ {
+ const CBubbleManager::TBubbleId bubbleId = aBubbleHeader.BubbleId();
+ CTelBubbleCustomElement* customElement = NULL;
+ aIsDefault = EFalse;
+
+ if( bubbleId != KBubbleConferenceId &&
+ iCustomizations[bubbleId][aElement].Count() )
+ {
+ // Get custom implmentation.
+ customElement =
+ iCustomizations[aBubbleHeader.BubbleId()][aElement][0].Item();
+ customElement->Control()->MakeVisible( ETrue );
+ }
+
+ if ( !customElement )
+ {
+ // Get default implementation, if exists.
+ customElement = DefaultElement( aBubbleHeader, aElement );
+ if ( customElement )
+ {
+ aIsDefault = ETrue;
+ }
+ }
+
+ return customElement;
+ }
+
+// ---------------------------------------------------------------------------
+// ReleaseCustomElement
+// ---------------------------------------------------------------------------
+//
+void CBubbleCustomManager::ReleaseCustomElement(
+ CTelBubbleCustomElement*& aCustomElement )
+ {
+ if ( aCustomElement )
+ {
+ aCustomElement->Control()->MakeVisible( EFalse );
+ iDefaultManager->ReleaseElement( aCustomElement );
+ aCustomElement = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// DefaultElement
+// ---------------------------------------------------------------------------
+//
+CTelBubbleCustomElement* CBubbleCustomManager::DefaultElement(
+ const CBubbleHeader& aBubbleHeader,
+ CTelBubbleCustomElement::TElementType aElement )
+ {
+ CTelBubbleCustomElement* element = NULL;
+
+ switch( aElement )
+ {
+ case CTelBubbleCustomElement::EBigCallIndicator:
+ {
+ element = iDefaultManager->ReserveBigCallIndicatorElement(
+ aBubbleHeader );
+ }
+ break;
+ case CTelBubbleCustomElement::ENumberTypeIcon:
+ {
+ element = iDefaultManager->ReserveNumberTypeIconElement(
+ aBubbleHeader );
+ }
+ break;
+ case CTelBubbleCustomElement::ESmallCallIndicator:
+ {
+ element = iDefaultManager->ReserveSmallCallIndicatorElement(
+ aBubbleHeader );
+ }
+ break;
+ case CTelBubbleCustomElement::ECallImage:
+ {
+ element = iDefaultManager->ReserveCallImageElement(
+ aBubbleHeader );
+ }
+ break;
+ default:
+ // NULL
+ break;
+ }
+
+ if ( element )
+ {
+ // Make found element visible
+ element->Control()->MakeVisible( ETrue );
+ }
+
+ return element;
+ }
+