phoneuis/BubbleManager/Src/BMBubbleOutlookMiddle.cpp
changeset 0 5f000ab63145
child 19 544e34b3255a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookMiddle.cpp	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,511 @@
+/*
+* Copyright (c) 2007 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:  Outlook Middle
+*
+*/
+
+
+// INCLUDE FILES
+#include    "BMBubbleManager.h" //for enumerations
+#include    "BMBubbleOutlookMiddle.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    <AknsDrawUtils.h>
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookMiddle::CBubbleOutlookMiddle
+//
+//  
+// ---------------------------------------------------------------------------
+//
+CBubbleOutlookMiddle::CBubbleOutlookMiddle( CBubbleManager& aBubbleManager ) 
+ : CBubbleOutlookTwoLined( aBubbleManager )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookMiddle::ConstructL
+// 
+// ---------------------------------------------------------------------------
+//
+void CBubbleOutlookMiddle::ConstructL()
+    {  
+    iIsUnder = EFalse;
+    CBubbleOutlookTwoLined::ConstructL( );
+    }
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookMiddle::~CBubbleOutlookMiddle
+//
+//  
+// ---------------------------------------------------------------------------
+//
+CBubbleOutlookMiddle::~CBubbleOutlookMiddle()
+    {
+    Reset();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookMiddle::Reset( )
+//
+//  
+// ---------------------------------------------------------------------------
+//
+void CBubbleOutlookMiddle::Reset( )
+    {
+    iIsUnder = EFalse;
+    CBubbleOutlookTwoLined::Reset();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookMiddle::ReadBubbleHeader
+//
+//  
+// ---------------------------------------------------------------------------
+//
+void CBubbleOutlookMiddle::ReadBubbleHeader( CBubbleHeader& aHeader )
+    {
+    iHeader = &aHeader;
+    
+    iBubble = iBubbleManager.ResourceManager().ReserveEikImage( ETrue );        
+    
+    if ( !iCallObjectDisplay )
+        {
+        GetCall1BubbleBitmaps();    
+        }
+
+    CBubbleOutlookTwoLined::ReadBubbleHeader( aHeader );
+    }
+    
+    
+    
+// ---------------------------------------------------------------------------
+// CBubbleOutlookMiddle::SizeChanged
+// called by framwork when the view size is changed
+//  
+// ---------------------------------------------------------------------------
+//
+void CBubbleOutlookMiddle::SizeChanged()
+    {
+    if( !iHeader )
+        {
+        return;
+        }
+
+    AknsUtils::RegisterControlPosition( this );
+    
+    if ( !iCallObjectDisplay )
+        {
+        DoCall1Layout();    
+        }
+    else
+        {
+        TRAPD( err, DoCall2LayoutL() );
+        if ( err )    
+            {
+            iBubble->SetPicture( NULL, NULL );
+                
+            MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+            AknsDrawUtils::PrepareFrame( skin,
+                                         iOuterRect,
+                                         iInnerRect,
+                                         iFrameId,
+                                         KAknsIIDDefault );    
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookMiddle::SetIsUnder
+//
+//  
+// ---------------------------------------------------------------------------
+//
+void CBubbleOutlookMiddle::SetIsUnder( const TBool& aIsUnder )
+    {
+    iIsUnder = aIsUnder;
+    }
+    
+// ---------------------------------------------------------------------------
+// CBubbleOutlookMiddle::DoCall1Layout
+// ---------------------------------------------------------------------------
+//    
+void CBubbleOutlookMiddle::DoCall1Layout()
+    {
+    // Deprecated
+    }
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookMiddle::DoCall2Layout
+// ---------------------------------------------------------------------------
+//
+void CBubbleOutlookMiddle::DoCall2LayoutL()
+    {
+    iBubble->SetPictureOwnedExternally( EFalse );
+    iBubble->SetPicture( NULL, NULL );
+    
+    const TRect rect = Rect();
+    CBubbleManager::TPhoneCallState callState = iHeader->CallState();
+    switch ( callState )
+        {
+        case CBubbleManager::EWaiting:
+        case CBubbleManager::EIncoming:
+        case CBubbleManager::EOutgoing:
+        case CBubbleManager::EAlerting:
+        case CBubbleManager::EAlertToDisconnected:
+            {
+            ///////////////////////////////////////////////////////////////////
+            // Incoming call layout. Number entry open.
+            ///////////////////////////////////////////////////////////////////
+            
+            TAknLayoutRect bubbleRect;
+            bubbleRect.LayoutRect( 
+                rect, 
+                BubbleLayout2::popup_call2_audio_in_background(5) );
+            
+            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) );
+            
+            // Ciphering off
+            BubbleUtils::LayoutControl( 
+                iCyphOffImage, 
+                rect,
+                BubbleLayout2::popup_call2_audio_in_ciphering_icon(5) );                
+            
+            // Number type icon
+            BubbleUtils::LayoutCustomElement(
+                iNumberType, 
+                rect, 
+                BubbleLayout2::popup_call2_audio_in_call_number_type_icon(5) );
+
+            // Text line 1
+            BubbleUtils::LayoutLabel( 
+                iTextLine1, 
+                rect, 
+                BubbleLayout2::popup_call2_audio_in_call_text_1(5) );
+            
+            // Smaller rect for text if brand image exists
+            if ( iBrandImage )
+                {
+                // Text line 2
+                BubbleUtils::LayoutLabel(
+                    iTextLine2,
+                    rect,
+                    BubbleLayout2::popup_call2_audio_in_call_text_2(9) );
+
+                //Brand image
+                BubbleUtils::LayoutCustomElement(
+                    iBrandImage,
+                    rect,
+                    BubbleLayout2::popup_call2_audio_in_brand_image(4) );
+                }
+            else
+                {
+                // Text line 2
+                BubbleUtils::LayoutLabel(
+                    iTextLine2,
+                    rect,
+                    BubbleLayout2::popup_call2_audio_in_call_text_2(5) );
+                }
+                
+            // Create call object bitmaps
+            iBubble->SetRect( bubbleRect.Rect() );                
+
+            BubbleUtils::PrepareBubbleImageL( 
+                iFrameId,
+                outerRect,
+                innerRect,
+                iBubble );
+                
+            if ( iHeader->CallObjectImage()  &&
+                 !iHeader->CallObjectText().Length() )
+                {
+                // Add transparency
+                BubbleUtils::AddTransparencyToBubbleImageL( 
+                    KAknsIIDQsnFrCall2RectCoMask, // gradient tp mask
+                    outerRect,
+                    innerRect,
+                    iBubble );                    
+                }                
+            break;
+            }
+        case CBubbleManager::EDisconnected:
+        case CBubbleManager::EActive:
+        case CBubbleManager::EOnHold:
+            {
+            ///////////////////////////////////////////////////////////////////
+            // First call layout. Two calls.
+            ///////////////////////////////////////////////////////////////////
+            
+            TAknLayoutRect bubbleRect;
+            bubbleRect.LayoutRect( 
+                rect, 
+                BubbleLayout2::popup_call2_audio_first_call_background(13) );
+            
+            TRect frameRect( TPoint(0,0), bubbleRect.Rect().Size() );
+            TRect outerRect;
+            TRect innerRect;
+            BubbleLayout2::BubbleFrameInnerOuterRects( frameRect, 
+                                                       outerRect, 
+                                                       innerRect);
+            
+            TAknsItemID coMaskFrameId;
+            if ( callState == CBubbleManager::EOnHold )
+                {
+                iFrameId = KAknsIIDQsnFrCall2Bubble;    
+                coMaskFrameId = KAknsIIDQsnFrCall2BubbleCoMask;    
+                }
+            else if ( callState == CBubbleManager::EDisconnected )
+                {
+                iFrameId = KAknsIIDQsnFrCall2BubbleFirstDisconn; 
+                coMaskFrameId = KAknsIIDQsnFrCall2BubbleFirstCoMask;       
+                }
+            else
+                {
+                iFrameId = KAknsIIDQsnFrCall2BubbleFirst;
+                coMaskFrameId = KAknsIIDQsnFrCall2BubbleFirstCoMask;    
+                }                
+            
+            iOuterRect = outerRect;
+            iOuterRect.Move( Rect().iTl );
+            iInnerRect = innerRect;
+            iInnerRect.Move( Rect().iTl );
+
+            // Call icon
+            BubbleUtils::LayoutCustomElement( 
+                iSmallCallIndication, 
+                rect,
+                BubbleLayout2::popup_call2_audio_first_call_status_icon(12) );
+                
+            // Ciphering off
+            BubbleUtils::LayoutControl( 
+                iCyphOffImage, 
+                rect,
+                BubbleLayout2::popup_call2_audio_first_call_window_ciphering_icon(11) );
+            
+            // Call type pane    
+            BubbleUtils::LayoutCallTypeIndicators(
+                rect,
+                BubbleLayout2::popup_call2_audio_first_call_type_icon(11),
+                iTypeIndication1,   // Data/Fax
+                iTypeIndication2 ); // ALS line 2                
+
+            // Text line 1
+            BubbleUtils::LayoutLabel( 
+                iTextLine1, 
+                rect, 
+                BubbleLayout2::popup_call2_audio_first_call_cli_text(15) );
+            
+            // Smaller rect for text if brand image exists
+            if ( iBrandImage )
+                {
+                // Text line 2 - call state
+                BubbleUtils::LayoutLabel(
+                    iTextLine2,
+                    rect,
+                    BubbleLayout2::popup_call2_audio_first_call_state_text(16) );
+
+                // Text line 2 - call timer
+                BubbleUtils::LayoutLabel(
+                    iTimerCost,
+                    rect,
+                    BubbleLayout2::popup_call2_audio_first_call_state_text(17) );
+
+                //Brand image
+                BubbleUtils::LayoutCustomElement(
+                    iBrandImage,
+                    rect,
+                    BubbleLayout2::popup_call2_audio_first_brand_image(2) );
+                }
+            else
+                {
+                // Text line 2 - call state
+                BubbleUtils::LayoutLabel(
+                    iTextLine2,
+                    rect,
+                    BubbleLayout2::popup_call2_audio_first_call_state_text(12) );
+
+                // Text line 2 - call timer
+                BubbleUtils::LayoutLabel(
+                    iTimerCost,
+                    rect,
+                    BubbleLayout2::popup_call2_audio_first_call_state_text(13) );
+                }
+                
+            // Create call object bitmaps
+            iBubble->SetRect( bubbleRect.Rect() );
+            
+            BubbleUtils::PrepareBubbleImageL( 
+                iFrameId,
+                outerRect,
+                innerRect,
+                iBubble );
+            
+            // Add transparency
+            BubbleUtils::AddTransparencyToBubbleImageL( 
+                coMaskFrameId,
+                outerRect,
+                innerRect,
+                iBubble );
+            
+            if ( iHeader->CallObjectImage() )
+                {
+                BubbleUtils::PrepareCallObjectImageL(
+                    *iHeader,
+                    iBubbleManager.CallObjectImageIncallSize() );
+                
+                TBool dimmed = !iBubbleManager.IsCallDroppedByEndKey( 
+                                   iHeader->CallState() );
+                                   
+                TAknLayoutRect cliRect;
+                cliRect.LayoutRect( 
+                    frameRect, 
+                    BubbleLayout2::popup_call2_bubble_pane_graphics_cli() );                                   
+                                   
+                // Combine image to bubble image
+                BubbleUtils::PrepareCallObjectToBubbleImageL(
+                    iHeader->CallObjectImage(),
+                    iHeader->CallObjectImageMask(),
+                    cliRect.Rect(),
+                    coMaskFrameId, // gradient image mask
+                    outerRect,
+                    innerRect,
+                    iBubble,
+                    dimmed );                                        
+                }                
+            break;
+            }
+        case CBubbleManager::ENone:
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CBubbleOutlookMiddle::GetCall1BubbleBitmaps
+// ---------------------------------------------------------------------------
+//    
+void CBubbleOutlookMiddle::GetCall1BubbleBitmaps()
+    {
+    CBubbleManager::TPhoneCallState callState = iHeader->CallState();
+    
+    TInt bubblePicture = KErrNotFound;
+    TInt bubblePictureMask = KErrNotFound;
+    
+    // set call bubble
+    switch ( callState )
+        {
+        case CBubbleManager::EWaiting:
+        case CBubbleManager::EIncoming:
+        case CBubbleManager::EOutgoing:
+        case CBubbleManager::EAlerting:
+            {
+            bubblePicture = EQgn_graf_call_rec_big_left;
+            bubblePictureMask = EQgn_graf_call_rec_big_left_mask;
+            }
+            break;
+        case CBubbleManager::EAlertToDisconnected:
+            {
+            bubblePicture = EQgn_graf_call_rec_big_left_disconn;
+            bubblePictureMask = EQgn_graf_call_rec_big_left_disconn_mask;
+            }
+            break;
+        case CBubbleManager::EActive:
+            {
+            if ( iIsUnder )
+                {
+                bubblePicture = EQgn_graf_call_first_wait_active;
+                bubblePictureMask = EQgn_graf_call_first_wait_active_mask;
+                }
+            else 
+                {
+                bubblePicture = EQgn_graf_call_first_two_active;
+                bubblePictureMask = EQgn_graf_call_first_two_active_mask;
+                }
+            break;
+            }
+        case CBubbleManager::EOnHold:
+            bubblePicture = EQgn_graf_call_first_two_held;
+            bubblePictureMask = EQgn_graf_call_first_two_held_mask;
+            break;
+        case CBubbleManager::EDisconnected:
+            if ( iIsUnder )
+                {
+                bubblePicture = EQgn_graf_call_first_wait_disconn;
+                bubblePictureMask = EQgn_graf_call_first_wait_disconn_mask;
+                }
+            else 
+                {
+                bubblePicture = EQgn_graf_call_first_two_disconn;
+                bubblePictureMask = EQgn_graf_call_first_two_disconn_mask;
+                }
+            break;
+        case CBubbleManager::ENone:
+        default:        
+            bubblePicture = KErrNotFound;
+            bubblePictureMask = KErrNotFound;
+            break;
+        }
+    
+    if ( bubblePicture != KErrNotFound )
+        {
+        if ( bubblePictureMask == KErrNotFound )
+            {
+            iBubbleManager.ImageManager().SetBitmapToImage( iBubble, 
+                                            (TBMIcons) bubblePicture );
+            }
+        else
+            {
+            iBubbleManager.ImageManager().SetBitmapToImage( iBubble, 
+                                            (TBMIcons) bubblePicture , 
+                                            (TBMIcons) bubblePictureMask);
+            }
+        }    
+   }    
+
+// End of File