meetingrequest/mrgui/mrfieldbuilderpluginextension/src/cesmrviewerattachmentsfield.cpp
branchRCL_3
changeset 12 4ce476e64c59
parent 11 0396474f30f5
child 13 8592a65ad3fb
--- a/meetingrequest/mrgui/mrfieldbuilderpluginextension/src/cesmrviewerattachmentsfield.cpp	Mon Mar 15 12:39:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,686 +0,0 @@
-/*
-* Copyright (c) 2007-2009 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:  Meeting request attachments field
- *
-*/
-#include "emailtrace.h"
-#include "cesmrviewerattachmentsfield.h"
-
-//<cmail>
-#include "mesmrcalentry.h"
-#include "cesmrcontactmenuattachmenthandler.h"
-//</cmail>
-#include <esmrgui.rsg>
-#include <StringLoader.h>
-//<cmail>
-#include "esmricalvieweropcodes.hrh"
-#include "cfsmailmessage.h"
-//</cmail>
-
-#include "cesmrrichtextviewer.h"
-#include "cesmrrichtextlink.h"
-#include "mesmrlistobserver.h"
-#include "mesmrmeetingrequestentry.h"
-#include "tesmrinputparams.h"
-#include "cesmrattachment.h"
-#include "cesmrattachmentinfo.h"
-#include "cesmrcontactmenuhandler.h"
-#include "cmrimage.h"
-#include "nmrlayoutmanager.h"
-
-
-// Unnamed namespace for local definitions
-namespace { // codescanner::namespace
-
-//<cmail>
-// MR does not contain attachments
-const TInt KNoAttachments( 0 );
-// MR contains one attachment
-const TInt KOneAttachment( 1 );
-//</cmail>
-
-const TInt KOneKiloByte( 1024 );
-
-}//namespace
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::CESMRViewerAttachmentsField
-// ---------------------------------------------------------------------------
-//
-CESMRViewerAttachmentsField::CESMRViewerAttachmentsField()
-: iFocused(EFalse)
-    {
-    FUNC_LOG;
-    SetFieldId( EESMRFieldAttachments );
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::~CESMRViewerAttachmentsField
-// ---------------------------------------------------------------------------
-//
-CESMRViewerAttachmentsField::~CESMRViewerAttachmentsField()
-    {
-    FUNC_LOG;
-    delete iFieldIcon;
-    delete iRichTextViewer;
-    delete iAttachmentText;
-    
-    iESMRStatic.Close();
-    
-    delete iAttachmentInfo;
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::NewL
-// ---------------------------------------------------------------------------
-//
-CESMRViewerAttachmentsField* CESMRViewerAttachmentsField::NewL()
-    {
-    FUNC_LOG;
-    CESMRViewerAttachmentsField* self = new( ELeave )CESMRViewerAttachmentsField;
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::ConstructL()
-// ---------------------------------------------------------------------------
-//
-void CESMRViewerAttachmentsField::ConstructL()
-    {
-    FUNC_LOG;
-    SetFocusType( EESMRNoFocus );
-    
-    iFieldIcon = CMRImage::NewL(  NMRBitmapManager::EMRBitmapMailAttachment );
-    iFieldIcon->SetParent( this );
-    
-    iRichTextViewer = CESMRRichTextViewer::NewL( this );
-    iRichTextViewer->SetEdwinSizeObserver( this );
-    iRichTextViewer->SetLinkObserver( this );
-    iRichTextViewer->SetParent( this );
-    
-    iRichTextViewer->SetActionMenuStatus( ETrue );
-    iESMRStatic.ConnectL();   
-    iCntMenuHdlr = &iESMRStatic.ContactMenuHandlerL();
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::MinimumSize
-// ---------------------------------------------------------------------------
-//
-TSize CESMRViewerAttachmentsField::MinimumSize()
-    {
-    // Let's calculate the required rect of the iRichTextViewer.
-    // We will not use directly the iRichTextViewer height, because it might
-    // not exist, or the height of the viewer might still be incorrect
-    TRect richTextViewerRect = RichTextViewerRect();
-
-    // We will use as minimum size the parents width 
-    // but the calculated iRichTextViewers height 
-    return TSize( Parent()->Size().iWidth, richTextViewerRect.Height() );
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::InitializeL
-// ---------------------------------------------------------------------------
-//
-void CESMRViewerAttachmentsField::InitializeL()
-    {
-    FUNC_LOG;
-    // Setting Font for the rich text viewer
-    TAknLayoutText text = NMRLayoutManager::GetLayoutText( 
-            Rect(), 
-            NMRLayoutManager::EMRTextLayoutTextEditor );
-    
-    iRichTextViewer->SetFontL( text.Font(), iLayout );
-        
-    // This is called so theme changes will apply when changing theme "on the fly"
-    if ( IsFocused() )
-        {
-        iRichTextViewer->FocusChanged( EDrawNow );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::InternalizeL()
-// ---------------------------------------------------------------------------
-//
-void CESMRViewerAttachmentsField::InternalizeL( MESMRCalEntry& aEntry )
-    {
-    FUNC_LOG;
-    MESMRMeetingRequestEntry* mrEntry = NULL;
-    if ( aEntry.Type() != MESMRCalEntry::EESMRCalEntryMeetingRequest )
-        {
-        // This is not meeting request entry so attachment field should be removed from ui
-        iObserver->RemoveControl( FieldId() );
-        return;
-        }
-    else
-        {
-        mrEntry = static_cast<MESMRMeetingRequestEntry*>( &aEntry );
-
-        TESMRInputParams startupParams;
-        if ( mrEntry && mrEntry->StartupParameters(startupParams) )
-            {
-            // Startup parameters exist --> Let's check if there are attachments
-
-            if ( startupParams.iAttachmentInfo )
-                {
-                iMailMessage = startupParams.iMailMessage;
-                
-                UpdateAttachmentInfoL();
-                
-                iCntMenuHdlr->SetCommandObserver( this );
-                
-                iAttachmentCount = 0;
-                
-                if ( iAttachmentInfo )
-                    {
-                    iAttachmentCount = iAttachmentInfo->AttachmentCount();
-                    }
-
-                if ( iAttachmentCount > KOneAttachment )
-                    {
-                    // There are more than one attachments
-                    TInt attachmentsSizeSum(0);
-                    for (TInt i(0); i < iAttachmentCount; ++i )
-                        {
-                        const CESMRAttachment& attachment(
-                                iAttachmentInfo->AttachmentL( i ) );
-
-                        TInt attachmentSize( attachment.AttachmentSizeInBytes() );
-                        attachmentsSizeSum += attachmentSize;
-                        }
-                    if ( attachmentsSizeSum >= KOneKiloByte )
-                        {
-                        CArrayFixFlat<TInt>* ints =
-                                new ( ELeave ) CArrayFixFlat<TInt>( 1 );
-
-                        CleanupStack::PushL(ints);
-                        ints->AppendL( iAttachmentCount );
-                        ints->AppendL( attachmentsSizeSum / KOneKiloByte );
-
-                        iAttachmentText = StringLoader::LoadL(
-                                R_QTN_FSE_VIEWER_HEADER_ATTACHMENTS_TOTAL,
-                                *ints );
-
-                        CleanupStack::PopAndDestroy(ints);
-                        }
-                    else
-                        {
-                        iAttachmentText = StringLoader::LoadL(
-                                R_QTN_FSE_VIEWER_HEADER_ATTACHMENTS_LESS_THAN_KB,
-                                iAttachmentCount);
-                        }
-                    }
-                else if ( iAttachmentCount > 0 )
-                    {
-                    // There is one attachment
-                    const CESMRAttachment& attachment(
-                            iAttachmentInfo->AttachmentL( 0 ) );
-                    TPtrC attachmentName( attachment.AttachmentName() );
-
-                    TInt attachmentSize( attachment.AttachmentSizeInBytes() );
-
-                    if ( attachmentSize >= KOneKiloByte )
-                        {
-                        // "%0U %1N kB"
-
-                        CDesCArrayFlat* attachmentStrings = 
-							new(ELeave)CDesCArrayFlat( 1 );
-                        CleanupStack::PushL( attachmentStrings );
-                        //First string
-                        attachmentStrings->AppendL( attachmentName ); 
-
-                        CArrayFixFlat<TInt>* integers =
-                                new (ELeave) CArrayFixFlat<TInt>(1);
-                        CleanupStack::PushL( integers );
-                        integers->AppendL( attachmentSize / KOneKiloByte );
-
-                        iAttachmentText = StringLoader::LoadL(
-                                R_QTN_FSE_VIEWER_HEADER_ATTACHMENT,
-                                *attachmentStrings,
-                                *integers );
-
-                        // Pop and delete strings array
-                        CleanupStack::PopAndDestroy( integers );
-                        CleanupStack::PopAndDestroy( attachmentStrings );
-                        }
-                    else
-                        {
-                        iAttachmentText = StringLoader::LoadL(
-                                R_QTN_FSE_VIEWER_HEADER_ATTACHMENT_LESS_THAN_KB,
-                                attachmentName);
-                        }
-                    }
-
-                if ( iAttachmentText )
-                    {
-                    iRichTextViewer->SetTextL( iAttachmentText, EFalse );
-                    // After setting the text, the viewer line count is known
-                    iLineCount = iRichTextViewer->LineCount();
-                    
-                    CESMRRichTextLink* link = CESMRRichTextLink::NewL (
-                            0, iAttachmentText->Length ( ),
-                            iAttachmentText->Des(),
-                            CESMRRichTextLink::ETypeAttachment,
-                            CESMRRichTextLink::ETriggerKeyRight );
-                    
-                    CleanupStack::PushL( link );
-                    iRichTextViewer->AddLinkL( link );
-                    CleanupStack::Pop( link );
-                    }
-                }
-            }
-        }
-
-    if ( KNoAttachments == iAttachmentCount )
-        {
-        iObserver->RemoveControl( FieldId() );
-        }
-    
-    iDisableRedraw = ETrue;
-    }
-
-// -----------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::HandleRichTextLinkSelection
-// -----------------------------------------------------------------------------
-//
-TBool CESMRViewerAttachmentsField::HandleRichTextLinkSelection(
-        const CESMRRichTextLink* /*aLink*/ )
-    {
-    FUNC_LOG;
-    
-    // <cmail>
-    TRAP_IGNORE( iCntMenuHdlr->ShowActionMenuL() );
-    // </cmail>
-    
-    return ETrue;
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::OfferKeyEventL()
-// ---------------------------------------------------------------------------
-//
-TKeyResponse CESMRViewerAttachmentsField::OfferKeyEventL(
-        const TKeyEvent& aEvent,
-        TEventCode aType )
-    {
-    FUNC_LOG;
-    TKeyResponse response( EKeyWasNotConsumed );
-
-    if ( ( aType == EEventKey || aType == EEventKeyUp ) &&
-            aEvent.iScanCode == EStdKeyDevice3 )
-        {
-        // Selection key was pressed --> Trigger open attachment view command
-        NotifyEventL( EESMRCmdMskOpenEmailAttachment );
-                
-        response = EKeyWasConsumed;
-        }
-    else
-        {
-        response = iRichTextViewer->OfferKeyEventL ( aEvent, aType );
-        }
-
-    return response;
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::HandleEdwinSizeEventL()
-// ---------------------------------------------------------------------------
-//
-TBool CESMRViewerAttachmentsField::HandleEdwinSizeEventL( 
-        CEikEdwin* aEdwin,
-        TEdwinSizeEvent /*aType*/, 
-        TSize aSize )
-    {
-    FUNC_LOG;
-    TBool reDraw( EFalse );
-        
-     // Let's save the required size for the iRichTextViewer
-     iSize = aSize;
-     
-     if ( iObserver && aEdwin == iRichTextViewer )
-        {
-        iObserver->ControlSizeChanged( this );
-        reDraw = ETrue;
-        }
-     return reDraw;
-     }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::ListObserverSet
-// ---------------------------------------------------------------------------
-//
-void CESMRViewerAttachmentsField::ListObserverSet()
-    {
-    FUNC_LOG;
-    iRichTextViewer->SetListObserver( iObserver );
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::SetOutlineFocusL
-// ---------------------------------------------------------------------------
-//
-void CESMRViewerAttachmentsField::SetOutlineFocusL( TBool aFocus )
-    {
-    FUNC_LOG;
-    CESMRField::SetOutlineFocusL( aFocus );
-    
-    if ( iRichTextViewer )
-        {
-        iRichTextViewer->SetFocus( aFocus );
-        }
-
-    if ( aFocus && aFocus != iFocused )
-        {
-        // <cmail>
-        UpdateAttachmentInfoL();
-    	
-        if( iAttachmentInfo->AttachmentCount() > KOneAttachment )
-        	{
-	        ChangeMiddleSoftKeyL( EESMRCmdOpenAttachmentView,
-	                              R_QTN_MSK_VIEWLIST );
-        	}
-       	else
-       		{
-            // There is one attachment
-            const CESMRAttachment& attachment(
-                    iAttachmentInfo->AttachmentL( 0 ) );
-       		
-       		if( attachment.AttachmenState() == CESMRAttachment::EAttachmentStateDownloaded )
-       			{
-       			ChangeMiddleSoftKeyL( EESMRCmdOpenAttachment,
-	                              R_QTN_MSK_OPEN );
-       			}
-       		else
-       			{
-       			ChangeMiddleSoftKeyL( EESMRCmdDownloadAttachment,
-	                              R_QTN_MSK_DOWNLOAD );
-       			}
-       		}       		
-        // </cmail>
-        }
-    iFocused = aFocus;    
-    }
-
-// <cmail>    
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::MessagePartPointerArrayCleanup
-// ---------------------------------------------------------------------------
-//
-void CESMRViewerAttachmentsField::MessagePartPointerArrayCleanup( TAny* aArray )
-    {
-    FUNC_LOG;
-    RPointerArray<CFSMailMessagePart>* messagePartArray =
-        static_cast<RPointerArray<CFSMailMessagePart>*>( aArray );
-
-    messagePartArray->ResetAndDestroy();
-    messagePartArray->Close();
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::UpdateAttachmentInfoL
-// ---------------------------------------------------------------------------
-//
-void CESMRViewerAttachmentsField::UpdateAttachmentInfoL()
-    {
-    if ( iMailMessage->IsFlagSet( EFSMsgFlag_Attachments ) )
-        {
-        RPointerArray<CFSMailMessagePart> attachmentParts;
-        CleanupStack::PushL(
-                TCleanupItem(
-                    MessagePartPointerArrayCleanup,
-                    &attachmentParts) );
-
-        iMailMessage->AttachmentListL( attachmentParts );
-
-        // find  calendar part from the list
-        CFSMailMessagePart* calendarPart = 
-            iMailMessage->FindBodyPartL( KFSMailContentTypeTextCalendar );
-        CleanupStack::PushL( calendarPart );
-        
-        if ( calendarPart )
-            {
-            // remove calendar body part from attachment list
-            for ( TInt ii = attachmentParts.Count() - 1; ii >= 0; --ii )
-                {
-                if ( attachmentParts[ii]->GetPartId() == calendarPart->GetPartId() )
-                    {
-                    delete attachmentParts[ii];
-                    attachmentParts.Remove(ii);
-                    break;
-                    }
-                }
-            }
-        CleanupStack::PopAndDestroy( calendarPart );
-
-        iAttachmentCount = attachmentParts.Count();
-        if ( iAttachmentCount > 0 )
-            {
-            delete iAttachmentInfo;
-            iAttachmentInfo = NULL;
-
-            CESMRAttachmentInfo* attachmentInfo = CESMRAttachmentInfo::NewL();
-            CleanupStack::PushL( attachmentInfo );
-
-            for( TInt i(0); i < iAttachmentCount; ++i )
-                {
-                CESMRAttachment::TESMRAttachmentState state(
-                        CESMRAttachment::EAttachmentStateDownloaded );
-
-                if ( EFSFull != attachmentParts[i]->FetchLoadState() )
-                    {
-                    state = CESMRAttachment::EAttachmentStateNotDownloaded;
-                    }
-
-                TInt contentSize( attachmentParts[i]->ContentSize() );
-                TPtrC attachmentName( attachmentParts[i]->AttachmentNameL() );
-                if ( contentSize > 0 && attachmentName.Length() )
-                    {
-                    attachmentInfo->AddAttachmentInfoL(
-                            attachmentName,
-                            contentSize,
-                            state );
-                    }
-                }
-
-            if ( attachmentInfo->AttachmentCount() )
-                {
-                iAttachmentInfo = attachmentInfo;
-                CleanupStack::Pop( attachmentInfo );
-                }
-            else
-                {
-                CleanupStack::PopAndDestroy( attachmentInfo );
-                }
-
-            attachmentInfo = NULL;
-            }
-        CleanupStack::PopAndDestroy(); // attachmentparts
-
-        // relay attachment info to contact menu so we can display
-        // options based on attachment state
-        if ( iAttachmentInfo )
-            {
-            iCntMenuHdlr->SetAttachmentInfoL( iAttachmentInfo );
-            }
-        }    
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::ExecuteGenericCommandL
-// ---------------------------------------------------------------------------
-//
-void CESMRViewerAttachmentsField::ExecuteGenericCommandL( TInt aCommand )
-    {
-    FUNC_LOG;
-
-    switch ( aCommand )
-        {
-       	case EESMRCmdOpenAttachment:// Fall through
-        case EESMRCmdOpenAttachmentView:// Fall through
-        case EESMRCmdDownloadAttachment: // Fall through
-            {
-            NotifyEventL( aCommand );
-            
-            break;
-            }
-        case EESMRCmdClipboardCopy:
-            {
-            iRichTextViewer->CopyCurrentLinkValueToClipBoardL();
-            break;
-            }
-         default:
-            {
-            break;
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CESMRRichTextViewer::ProcessCommandL
-// -----------------------------------------------------------------------------
-//
-void CESMRViewerAttachmentsField::ProcessCommandL( TInt aCommandId )
-    {
-    FUNC_LOG;
-
-    NotifyEventL( aCommandId );
-    }
-
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::CountComponentControls
-// ---------------------------------------------------------------------------
-//
-TInt CESMRViewerAttachmentsField::CountComponentControls() const
-    {
-    TInt count( 0 );
-    if ( iFieldIcon )
-        {
-        ++count;
-        }
-
-    if ( iRichTextViewer )
-        {
-        ++count;
-        }
-    return count;
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::ComponentControl
-// ---------------------------------------------------------------------------
-//
-CCoeControl* CESMRViewerAttachmentsField::ComponentControl( 
-        TInt aIndex ) const
-    {
-    switch ( aIndex )
-        {
-        case 0:
-            return iFieldIcon;
-        case 1:
-            return iRichTextViewer;
-        default:
-            return NULL;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::SizeChanged
-// ---------------------------------------------------------------------------
-//
-void CESMRViewerAttachmentsField::SizeChanged( )
-    {
-    TRect rect = Rect();
-
-    // LAYOUTING FIELD ICON
-    if( iFieldIcon )
-        {
-        TAknWindowComponentLayout iconLayout = 
-            NMRLayoutManager::GetWindowComponentLayout( 
-                    NMRLayoutManager::EMRLayoutTextEditorIcon );
-        AknLayoutUtils::LayoutImage( iFieldIcon, rect, iconLayout );
-        }
-
-    // LAYOUTING FIELD BACKGROUND
-    TAknLayoutRect bgLayoutRect =
-        NMRLayoutManager::GetLayoutRect( 
-                rect, NMRLayoutManager::EMRLayoutTextEditorBg );
-    TRect bgRect( bgLayoutRect.Rect() );
-    // Move focus rect so that it's relative to field's position
-    bgRect.Move( -Position() );
-    SetFocusRect( bgRect );
-    
-    
-    // LAYOUTING FIELD TEXT VIEWER
-    if( iRichTextViewer )
-        {
-        iRichTextViewer->SetRect( RichTextViewerRect() );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::SetContainerWindowL
-// ---------------------------------------------------------------------------
-//
-void CESMRViewerAttachmentsField::SetContainerWindowL( 
-        const CCoeControl& aContainer )
-    {
-    CCoeControl::SetContainerWindowL( aContainer );
-    iRichTextViewer->SetContainerWindowL( aContainer );
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRViewerAttachmentsField::RichTextViewerRect
-// ---------------------------------------------------------------------------
-//
-TRect CESMRViewerAttachmentsField::RichTextViewerRect()
-    {
-    TRect rect = Rect();
-    
-    TAknTextComponentLayout edwinLayout = NMRLayoutManager::GetTextComponentLayout( 
-            NMRLayoutManager::EMRTextLayoutTextEditor );
-
-    // Text layout rect for one line viewer
-    TAknLayoutText textLayout;
-    textLayout.LayoutText( rect, edwinLayout );
-    TRect textLayoutRect = textLayout.TextRect();
-
-    TRect viewerRect = textLayoutRect;
-    
-    // If iRichTextViewer has lines and iSize has been set, 
-    // we will use iSize.iHeight as the viewers height
-    if( iLineCount > 0 && iSize.iHeight > 0 )
-        {
-        viewerRect.SetHeight( iSize.iHeight );
-        }
-    // Otherwise we will use one row height as the height of the 
-    // iRichTextViewer
-    else
-        {
-        TAknLayoutRect rowLayoutRect = 
-            NMRLayoutManager::GetFieldRowLayoutRect( rect, 1 );
-        viewerRect.SetHeight( rowLayoutRect.Rect().Height() );
-        }
-   
-    return viewerRect;
-    }
-
-//EOF