phoneapp/phoneuiview/src/cphonebubblemapping.cpp
changeset 0 5f000ab63145
--- /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