phoneuis/BubbleManager/Src/BMBubbleOutlookBottomText.cpp
changeset 0 5f000ab63145
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomText.cpp	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,336 @@
+/*
+* Copyright (c) 2006 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:  Bubble for call object text display.
+*
+*/
+
+
+// INCLUDE FILES
+#include    "BMBubbleManager.h" //for enumerations
+#include    "BMBubbleOutlookBottomText.h"
+#include    "BMBubbleImageManager.h"
+#include    "BMResourceManager.h"
+#include    "BMBubbleHeader.h"
+#include    "BMUtils.h"
+#include    "BMLayout.h"
+#include    "BMLayout2.h"
+#include    "telbubblecustomelement.h"
+
+#include    <eiklabel.h> 
+#include    <eikimage.h>
+#include    <eikenv.h>
+#include    <AknsUtils.h>
+#include    <AknUtils.h>
+#include    <AknBidiTextUtils.h>
+#include    <AknsDrawUtils.h>
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookBottomText::CBubbleOutlookBottomText
+//
+//  
+// ---------------------------------------------------------------------------
+//
+CBubbleOutlookBottomText::CBubbleOutlookBottomText( 
+    CBubbleManager& aBubbleManager ) : CBubbleOutlookFiveLined( aBubbleManager )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookBottomText::ConstructL
+// 
+// ---------------------------------------------------------------------------
+//
+void CBubbleOutlookBottomText::ConstructL()
+    { 
+    CBubbleOutlookFiveLined::ConstructL();
+    }
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookBottomText::~CBubbleOutlookBottomText
+//
+//  
+// ---------------------------------------------------------------------------
+//
+CBubbleOutlookBottomText::~CBubbleOutlookBottomText()
+    {
+    Reset();
+    }
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookBottomText::ReadBubbleHeader
+//
+//  
+// ---------------------------------------------------------------------------
+//
+void CBubbleOutlookBottomText::ReadBubbleHeader( CBubbleHeader& aHeader )
+    {
+    iHeader = &aHeader;
+    
+    iBubble = iBubbleManager.ResourceManager().ReserveEikImage( ETrue );        
+    
+    iThreeLinedLayout = ( iHeader->CNAP().Length() > 0 );
+    
+    CBubbleOutlookFiveLined::ReadBubbleHeader( aHeader );
+    }
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookBottomText::SizeChanged
+// called by framework when the view size is changed
+//  
+// ---------------------------------------------------------------------------
+//
+void CBubbleOutlookBottomText::SizeChanged()
+    {
+    if( !iHeader )
+        {
+        return;
+        }
+
+    AknsUtils::RegisterControlPosition( this );
+    
+    TRAPD( err, DoCall2LayoutL() );
+    if ( err )    
+        {
+        iBubble->SetPicture( NULL, NULL );
+                
+        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+        AknsDrawUtils::PrepareFrame( skin,
+                                     iOuterRect,
+                                     iInnerRect,
+                                     iFrameId,
+                                     KAknsIIDDefault );    
+        }        
+    }
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookBottomText::PositionChanged
+// ---------------------------------------------------------------------------
+//
+void CBubbleOutlookBottomText::PositionChanged()
+    {
+    AknsUtils::RegisterControlPosition( this );
+    }
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookBottomText::DoCall2Layout
+// ---------------------------------------------------------------------------
+//
+void CBubbleOutlookBottomText::DoCall2LayoutL()
+    {
+    iBubble->SetPictureOwnedExternally( EFalse );
+    iBubble->SetPicture( NULL, NULL );
+    
+    const TRect rect = Rect();
+    CBubbleManager::TPhoneCallState callState = iHeader->CallState();
+    switch ( callState )
+        {
+        case CBubbleManager::EIncoming:
+        case CBubbleManager::EOutgoing:
+        case CBubbleManager::EAlerting:
+        case CBubbleManager::EAlertToDisconnected:
+            {
+            ///////////////////////////////////////////////////////////////////
+            // Incoming call layout for single call. Call object text.
+            ///////////////////////////////////////////////////////////////////
+            
+            TInt variety = iThreeLinedLayout ? 4 : 3;
+            
+            TAknLayoutRect bubbleRect;
+            bubbleRect.LayoutRect( 
+                rect, 
+                BubbleLayout2::popup_call2_audio_in_background( variety ) );
+            
+            TRect frameRect( TPoint(0,0), bubbleRect.Rect().Size() );
+            TRect outerRect;
+            TRect innerRect;
+            BubbleLayout2::RectFrameInnerOuterRects( frameRect, 
+                                                     outerRect, 
+                                                     innerRect);
+            
+            iFrameId = ( callState == 
+                         CBubbleManager::EAlertToDisconnected ) ?
+                         KAknsIIDQsnFrCall2RectDisconn : 
+                         KAknsIIDQsnFrCall2Rect;
+            
+            iOuterRect = outerRect;
+            iOuterRect.Move( Rect().iTl );
+            iInnerRect = innerRect;
+            iInnerRect.Move( Rect().iTl );                
+            
+            
+            // Call indicator
+            BubbleUtils::LayoutCustomElement(
+                iBigCallIndicator, 
+                rect, 
+                BubbleLayout2::popup_call2_audio_out_call_waiting_icon(1) );
+                
+            BubbleUtils::LayoutControl( 
+                iCyphOffImage, 
+                rect,
+                BubbleLayout2::popup_call2_audio_in_ciphering_icon(variety) );                                
+            
+            BubbleUtils::LayoutCustomElement(
+                iNumberType, 
+                rect, 
+                BubbleLayout2::popup_call2_audio_in_call_number_type_icon(variety) );
+
+            BubbleUtils::LayoutLabel( 
+                iTextLine1, 
+                rect, 
+                BubbleLayout2::popup_call2_audio_in_call_text_1(variety));
+
+            BubbleUtils::LayoutLabel( 
+                iTextLine2, 
+                rect, 
+                BubbleLayout2::popup_call2_audio_in_call_text_2(variety));
+            
+            
+            if ( iThreeLinedLayout )
+                {
+                // Textual cli 1
+                BubbleUtils::LayoutLabel( 
+                    iTextLine3, 
+                    rect, 
+                    BubbleLayout2::popup_call2_audio_in_call_text_3(2));
+            
+                // Textual cli 2
+                BubbleUtils::LayoutLabel( 
+                    iTextLine4, 
+                    rect, 
+                    BubbleLayout2::popup_call2_audio_in_cli_textual_2(1));
+
+                // Textual cli 3
+                BubbleUtils::LayoutLabel( 
+                    iTextLine5, 
+                    rect, 
+                    BubbleLayout2::popup_call2_audio_in_cli_textual_3(1));
+                
+            
+                CEikLabel* labels[] = { iTextLine4, iTextLine5 };
+                SetCallObjectTextToLabelsL( iHeader->CallObjectText(),
+                                            2, labels );                    
+                }
+            else
+                {
+                // Textual cli 1
+                BubbleUtils::LayoutLabel( 
+                    iTextLine3, 
+                    rect, 
+                    BubbleLayout2::popup_call2_audio_in_cli_textual_1(0));
+            
+                // Textual cli 2
+                BubbleUtils::LayoutLabel( 
+                    iTextLine4, 
+                    rect, 
+                    BubbleLayout2::popup_call2_audio_in_cli_textual_2(0));
+
+                // Textual cli 3
+                BubbleUtils::LayoutLabel( 
+                    iTextLine5, 
+                    rect, 
+                    BubbleLayout2::popup_call2_audio_in_cli_textual_3(0));
+                
+            
+                CEikLabel* labels[] = { iTextLine3, iTextLine4, iTextLine5 };
+                SetCallObjectTextToLabelsL( iHeader->CallObjectText(),
+                                            3, labels );                
+                }
+            
+            // Create call object bitmaps
+            iBubble->SetRect( bubbleRect.Rect() );                
+            
+            BubbleUtils::PrepareBubbleImageL( 
+                iFrameId,
+                outerRect,
+                innerRect,
+                iBubble );
+            
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookBottomText::SetCliTextToLabelsL
+// ---------------------------------------------------------------------------
+//    
+void CBubbleOutlookBottomText::SetCallObjectTextToLabelsL(
+    const TDesC& aText,
+    TInt aLabelCount,
+    CEikLabel* aLabels[] )
+    {
+    if ( aLabelCount == 0 )
+        {
+        return;    
+        }
+    
+    CEikLabel* label1 = aLabels[0];
+    if ( !label1 )
+        {
+        return;            
+        }
+        
+    CArrayFix<TPtrC>* wrappedText = 
+        new(ELeave) CArrayFixFlat<TPtrC>(aLabelCount);
+    CleanupStack::PushL( wrappedText );
+    
+    CArrayFix<TInt>* lineWidths = 
+        new(ELeave) CArrayFixFlat<TInt>(aLabelCount);
+    CleanupStack::PushL( lineWidths );
+    
+    for ( TInt index(0); index < aLabelCount; index++ )
+        {
+        CEikLabel* label = aLabels[index];
+        if ( label )         
+            {
+            lineWidths->InsertL( index, label->Size().iWidth );
+            }
+        }
+    
+    HBufC* buffer = HBufC::NewL( aText.Length() + 
+        ( KAknBidiExtraSpacePerLine * aLabelCount ) );
+    CleanupStack::PushL( buffer );
+    *buffer = aText;
+    TPtr text( buffer->Des() );
+    
+    AknBidiTextUtils::ConvertToVisualAndWrapToArrayL( 
+        text,
+        *lineWidths,
+        *label1->Font(),
+        *wrappedText,
+        ETrue );
+    
+    // set wrapped text to labels
+    TInt lineCount = wrappedText->Count();
+    for ( TInt index(0); index < aLabelCount && index < lineCount ; index++ )
+        {
+        CEikLabel* label = aLabels[index];
+        TPtrC& line = wrappedText->At(index);
+         
+        if ( line.Length() && label )         
+            {
+            label->SetTextL( line );    
+            }
+        }
+
+    CleanupStack::PopAndDestroy( buffer );
+    CleanupStack::PopAndDestroy( lineWidths );
+    CleanupStack::PopAndDestroy( wrappedText );
+    }
+
+// End of File