--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/cphonebubblemapping.cpp Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,379 @@
+/*
+* Copyright (c) 2002 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: Implementation of CPhoneBubbleMapping class.
+*
+*/
+
+
+// INCLUDE FILES
+#include "cphonebubblemapping.h"
+#include "pevirtualengine.h"
+#include "phoneui.pan"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CPhoneBubbleMapping::CPhoneBubbleMapping
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPhoneBubbleMapping::CPhoneBubbleMapping()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneBubbleMapping::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPhoneBubbleMapping::ConstructL( TInt aMaximumAmount )
+ {
+ iMappingReserve = aMaximumAmount;
+ iMapping = new ( ELeave ) CMappingArray( aMaximumAmount );
+ iMapping->SetReserveL( aMaximumAmount );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneBubbleMapping::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPhoneBubbleMapping* CPhoneBubbleMapping::NewL(
+ TInt aMaximumAmount )
+ {
+ CPhoneBubbleMapping* self =
+ new ( ELeave ) CPhoneBubbleMapping;
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aMaximumAmount );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+CPhoneBubbleMapping::~CPhoneBubbleMapping()
+ {
+ delete iMapping;
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::FindBubbleByCall
+// ---------------------------------------------------------
+//
+TBool CPhoneBubbleMapping::FindBubbleByCall(
+ TInt aCallId,
+ CBubbleManager::TBubbleId& aId ) const
+ {
+ const TInt count = iMapping->Count();
+ TInt index;
+ TBool result = EFalse;
+
+ for ( index = 0; index < count; index++ )
+ {
+ TMappingItem& item = iMapping->At( index );
+
+ if ( aCallId == item.iCallId )
+ {
+ result = ETrue;
+ aId = item.iBubbleId;
+ break;
+ }
+
+ }
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::FindCallByBubble
+// ---------------------------------------------------------
+//
+TBool CPhoneBubbleMapping::FindCallByBubble(
+ CBubbleManager::TBubbleId aId,
+ TInt& aCallId ) const
+ {
+ const TInt count = iMapping->Count();
+ TInt index;
+ TBool result = EFalse;
+
+ for ( index = 0; index < count; index++ )
+ {
+ TMappingItem& item = iMapping->At( index );
+
+ if ( aId == item.iBubbleId )
+ {
+ result = ETrue;
+ aCallId = item.iCallId;
+ break;
+ }
+ }
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::FindThumbnailByCall
+// ---------------------------------------------------------
+//
+const CFbsBitmap* CPhoneBubbleMapping::FindThumbnailByCall(
+ TInt aCallId ) const
+ {
+ TInt index;
+ const CFbsBitmap* thumbnail = NULL;
+
+ if ( FindIndexByCall( aCallId, index ) )
+ {
+ thumbnail = ThumbnailAt( index );
+ }
+
+ return thumbnail;
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::AddToMappingL
+// ---------------------------------------------------------
+//
+void CPhoneBubbleMapping::AddToMappingL(
+ CBubbleManager::TBubbleId aId,
+ TInt aCallId,
+ CBubbleManager::TPhoneCallState aCallState,
+ CFbsBitmap* aThumbnail )
+ {
+ CBubbleManager::TBubbleId bubbleId;
+
+ if ( !FindBubbleByCall( aCallId, bubbleId ) )
+ {
+ TMappingItem item;
+ item.iBubbleId = aId;
+ item.iCallId = aCallId;
+ item.iThumbnail = aThumbnail;
+ item.iCallState = aCallState;
+
+ if ( iMapping->Count() < iMappingReserve )
+ {
+ iMapping->AppendL( item ); // Doesn't leave.
+ return;
+ }
+ }
+ Panic( EPhoneViewInvariant );
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::RemoveFromMapping
+// ---------------------------------------------------------
+//
+void CPhoneBubbleMapping::RemoveFromMapping(
+ TInt aCallId )
+ {
+ const TInt count = iMapping->Count();
+ TInt index;
+
+ for ( index = 0; index < count; index++ )
+ {
+ TMappingItem& item = iMapping->At( index );
+
+ if ( aCallId == item.iCallId )
+ {
+ iMapping->Delete( index );
+ iMapping->Compress();
+ return;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::ItemCount
+// ---------------------------------------------------------
+//
+TInt CPhoneBubbleMapping::ItemCount() const
+ {
+ return iMapping->Count();
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::BubbleAt
+// ---------------------------------------------------------
+//
+CBubbleManager::TBubbleId CPhoneBubbleMapping::BubbleAt(
+ TInt aIndex ) const
+ {
+ __ASSERT_ALWAYS( aIndex >= 0 && aIndex < iMapping->Count(),
+ Panic( EPhoneViewIndexOutOfBounds ) );
+ return iMapping->At( aIndex ).iBubbleId;
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::CallAt
+// ---------------------------------------------------------
+//
+TInt CPhoneBubbleMapping::CallIdAt(
+ TInt aIndex ) const
+ {
+ __ASSERT_ALWAYS( aIndex >= 0 && aIndex < iMapping->Count(),
+ Panic( EPhoneViewIndexOutOfBounds ) );
+ return iMapping->At( aIndex ).iCallId;
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::ThumbnailAt
+// ---------------------------------------------------------
+//
+const CFbsBitmap* CPhoneBubbleMapping::ThumbnailAt(
+ TInt aIndex ) const
+ {
+ __ASSERT_ALWAYS( aIndex >= 0 && aIndex < iMapping->Count(),
+ Panic( EPhoneViewIndexOutOfBounds ) );
+ return iMapping->At( aIndex ).iThumbnail;
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::SetThumbnailAt
+// ---------------------------------------------------------
+//
+void CPhoneBubbleMapping::SetThumbnailAt(
+ TInt aIndex,
+ CFbsBitmap* aThumbnail )
+ {
+ __ASSERT_ALWAYS( aIndex >= 0 && aIndex < iMapping->Count(),
+ Panic( EPhoneViewIndexOutOfBounds ) );
+
+ TMappingItem& item = iMapping->At( aIndex );
+ item.iThumbnail = aThumbnail;
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::SetThumbnailByCall
+// ---------------------------------------------------------
+//
+void CPhoneBubbleMapping::SetThumbnailByCall(
+ TInt aCallId,
+ CFbsBitmap* aThumbnail )
+ {
+ TInt index;
+
+ // if a matching bubble is found
+ if ( FindIndexByCall( aCallId, index ) )
+ {
+ SetThumbnailAt( index, aThumbnail );
+ }
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::CallStateAt
+// ---------------------------------------------------------
+//
+CBubbleManager::TPhoneCallState CPhoneBubbleMapping::CallStateAt(
+ TInt aIndex ) const
+ {
+ __ASSERT_ALWAYS( aIndex >= 0 && aIndex < iMapping->Count(),
+ Panic( EPhoneViewIndexOutOfBounds ) );
+ return iMapping->At( aIndex ).iCallState;
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::SetCallStateAt
+// ---------------------------------------------------------
+//
+void CPhoneBubbleMapping::SetCallStateAt(
+ TInt aIndex,
+ CBubbleManager::TPhoneCallState aCallState )
+ {
+ __ASSERT_ALWAYS( aIndex >= 0 && aIndex < iMapping->Count(),
+ Panic( EPhoneViewIndexOutOfBounds ) );
+ TMappingItem& item = iMapping->At( aIndex );
+ item.iCallState = aCallState;
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::SetCallStateByCall
+// ---------------------------------------------------------
+//
+void CPhoneBubbleMapping::SetCallStateByCall(
+ TInt aCallId,
+ CBubbleManager::TPhoneCallState aCallState )
+ {
+ TInt index;
+
+ // if a matching bubble is found
+ if ( FindIndexByCall( aCallId, index ) )
+ {
+ SetCallStateAt( index, aCallState );
+ }
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::FindCallStateByCall
+// ---------------------------------------------------------
+//
+CBubbleManager::TPhoneCallState CPhoneBubbleMapping::FindCallStateByCall(
+ TInt aCallId ) const
+ {
+ TInt index;
+ CBubbleManager::TPhoneCallState callState = CBubbleManager::ENone;
+
+ if ( FindIndexByCall( aCallId, index ) )
+ {
+ callState = CallStateAt( index );
+ }
+
+ return callState;
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::FindCallIdByCallState
+// ---------------------------------------------------------
+//
+TInt CPhoneBubbleMapping::FindCallIdByCallState (
+ CBubbleManager::TPhoneCallState aCallState )
+ {
+ const TInt count = iMapping->Count();
+ TInt index;
+
+ for ( index = 0; index < count; index++ )
+ {
+ if ( CallStateAt( index ) == aCallState )
+ {
+ return CallIdAt( index );
+ }
+ }
+ return KErrNotFound; // Not found CallId by this callState
+ }
+
+// ---------------------------------------------------------
+// CPhoneBubbleMapping::FindIndexByCall
+// ---------------------------------------------------------
+//
+TBool CPhoneBubbleMapping::FindIndexByCall(
+ TInt aCallId,
+ TInt& aIndex ) const
+ {
+ TBool result = EFalse;
+
+ for ( aIndex = 0; aIndex < iMapping->Count(); aIndex ++ )
+ {
+ TMappingItem& item = iMapping->At( aIndex );
+
+ if ( aCallId == item.iCallId )
+ {
+ // Horray, we found it
+ result = ETrue;
+ break;
+ }
+ }
+
+ return result;
+ }
+
+// End of File