diff -r 000000000000 -r 72b543305e3a mobilemessaging/mmsui/viewersrc/MmsViewerHeader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/mmsui/viewersrc/MmsViewerHeader.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,447 @@ +/* +* Copyright (c) 2002-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: +* MMS viewer header +* +*/ + + + +// INCLUDE FILES + +#include + +#include + +#include +#include + +#include + +#include +#include + +#include +#include "MmsViewer.hrh" +#include "MmsViewerHeader.h" + +#include +#include +#include +#include +#include +#include "UniMmsViewerDocument.h" + + +// ========================================================== + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES +GLREF_C void Panic( TMmsViewerExceptions aPanic ); + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CMmsViewerHeader::CMmsViewerHeader +// +// Constructor. +// --------------------------------------------------------- +// +CMmsViewerHeader::CMmsViewerHeader( CMmsClientMtm& aMtm, + CUniObjectList& aAttachmentList, + CMsgEditorView& aView, + RFs& aFs ) + : CUniBaseHeader( aMtm, aView, aFs ), + iAttachmentList( aAttachmentList ) + { + } + + +// --------------------------------------------------------- +// CMmsViewerHeader::ConstructL +// +// +// --------------------------------------------------------- +// +void CMmsViewerHeader::ConstructL( ) + { + + AddHeadersVariationL( EFalse ); + AddHeadersConfigL( ); + + // subject is shown, if configured or contains data + // (even if variated off ) + const TPtrC subject = iMtm.SubjectL(); + if ( iAddHeadersConfig & EUniFeatureSubject + || subject.Length() ) + { + iAddDelayed |= EUniFeatureSubject; + } + iAddDelayed |= EUniFeatureAttachment; + TBool mobileTerminated( ETrue ); + TInt addressesInStore = MtmAddressTypes(); + + TMmsMsvEntry mmsEntry = + static_cast( iMtm.Entry().Entry() ); + mobileTerminated = mmsEntry.IsMobileTerminated(); + if ( mobileTerminated ) + { + iAddDelayed |= EUniFeatureFrom; + } + else + { + // see also below necessity of the To: field + if ( addressesInStore & EUniFeatureTo ) + { + iAddDelayed |= EUniFeatureTo; + } + + if ( iAddHeadersVariation & EUniFeatureCc + && addressesInStore & EUniFeatureCc ) + { + // variated on and contains data + iAddDelayed |= EUniFeatureCc; + } + // show in the other field if variated off + else if ( ! ( iAddHeadersVariation & EUniFeatureCc ) + && addressesInStore & EUniFeatureCc ) + { + // Cc: data exists, add it into To: + iAddDelayed |= EUniFeatureTo; + iAddIntoOtherCc |= EUniFeatureTo; + } + + if ( iAddHeadersVariation & EUniFeatureBcc + && addressesInStore & EUniFeatureBcc ) + { + // variated on and contains data + iAddDelayed |= EUniFeatureBcc; + } + // show in the other field if variated off + else if ( ! ( iAddHeadersVariation & EUniFeatureBcc ) + && addressesInStore & EUniFeatureBcc ) + { + if ( iAddHeadersVariation & EUniFeatureCc ) + { + // Bcc: data exists, add it into Cc: + iAddDelayed |= EUniFeatureCc; + iAddIntoOtherBcc |= EUniFeatureCc; + } + else + { + // No Cc:, must be added into To: + iAddDelayed |= EUniFeatureTo; + iAddIntoOtherBcc |= EUniFeatureTo; + } + } + + } + DoAddToViewL( ETrue ); + } + +// --------------------------------------------------------- +// CMmsViewerHeader::NewL +// +// Two-phased constructor. +// --------------------------------------------------------- +// +CMmsViewerHeader* CMmsViewerHeader::NewL( CMmsClientMtm& aMtm, + CUniObjectList& aAttachmentList, + CMsgEditorView& aView, + RFs& aFs ) + { + CMmsViewerHeader* self = new ( ELeave ) CMmsViewerHeader( + aMtm, aAttachmentList, aView, aFs ); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------- +// CMmsViewerHeader::~CMmsViewerHeader +// --------------------------------------------------------- +CMmsViewerHeader::~CMmsViewerHeader() + { + delete iAlias; + } + +// --------------------------------------------------------- +// InsertRecipientL +// --------------------------------------------------------- +void CMmsViewerHeader::InsertRecipientL(TAddressData& aData, + THeaderFields aRecipientType, + TBool aReadContent) + { + TInt res( R_MMSVIEWER_TO ); + TInt flag( EUniFeatureTo ); + + if ( aRecipientType == EHeaderAddressCc ) + { + res = R_MMSVIEWER_CC; + flag = EUniFeatureCc; + } + else if ( aRecipientType == EHeaderAddressBcc ) + { + res = R_MMSVIEWER_BCC; + flag = EUniFeatureBcc; + } + else if ( aRecipientType != EHeaderAddressTo ) + { + return; + } + + DoInsertRecipientL( aData, + res, + aReadContent, + flag ); // read from MTM + } + +// --------------------------------------------------------- +// DoInsertRecipientL +// --------------------------------------------------------- +void CMmsViewerHeader::DoInsertRecipientL( TAddressData& aData, + TInt aResource, + TBool /*aReadContent*/, + TInt aAddHeadersRecipientType ) + { + // cannot add existing control + __ASSERT_DEBUG( !aData.iControl, Panic( EMmsViewerNullPointer ) ); + + const CMsvRecipientList& addresses = iMtm.AddresseeList(); + iView.AddControlFromResourceL( aResource, + EMsgAddressControl, + EMsgAppendControl, + EMsgHeader ); + aData.iControl = static_cast + ( iView.ControlById( aData.iControlType ) ); + aData.iOwned = EFalse; + + CMsgRecipientList* recipientList = CMsgRecipientList::NewL(); + CleanupStack::PushL( recipientList ); + + TInt count = addresses.Count(); + TMsvRecipientTypeValues msvRecipientType( aData.iRecipientTypeValue ); + for (TInt k = aData.iRecipientTypeValue; k <= EMsvRecipientBcc ; k++ ) + { + // on the first round copy 'native' addresses then additional headers + if ( k == 1 + && iAddIntoOtherCc & aAddHeadersRecipientType ) + { + msvRecipientType = EMsvRecipientCc; + } + else if ( k == 2 + && iAddIntoOtherBcc & aAddHeadersRecipientType ) + { + msvRecipientType = EMsvRecipientBcc; + } + if ( k > aData.iRecipientTypeValue + && msvRecipientType == aData.iRecipientTypeValue ) + { + // no update in the initial value + continue; + } + + for ( TInt i = 0; i < count; i++) + { + if ( addresses.Type(i) == msvRecipientType ) + { + CMsgRecipientItem* recipient = CMsgRecipientItem::NewLC( + TMmsGenUtils::Alias( addresses[i] ), + TMmsGenUtils::PureAddress( addresses[i] ) ); + recipient->SetVerified( ETrue ); + recipientList->AppendL( recipient ); + CleanupStack::Pop( recipient ); + recipient = NULL; + } + } + } + static_cast( aData.iControl )->AddRecipientsL( *recipientList ); + aData.iControl->Editor().SetCursorPosL( 0, EFalse ); + + CleanupStack::PopAndDestroy( recipientList ); + } + +// --------------------------------------------------------- +// InsertFromL +// --------------------------------------------------------- +void CMmsViewerHeader::InsertFromL( TBool /*aReadContent*/ ) + { + iView.AddControlFromResourceL( R_MMSVIEWER_FROM, EMsgAddressControl, EMsgAppendControl, EMsgHeader ); + iHeaders[EHeaderAddressFrom].iControl = static_cast + ( iView.ControlById( EMsgComponentIdFrom ) ); + iHeaders[EHeaderAddressFrom].iOwned = EFalse; + + const TPtrC sender = static_cast(iMtm).Sender(); + const TPtrC details = iMtm.Entry().Entry().iDetails; + + if ( sender.Length() ) + { + iSenderType = MsvUiServiceUtilitiesInternal::ResolveAddressTypeL( + TMmsGenUtils::PureAddress( sender ), + CommonPhoneParser::ESMSNumber ); + + if ( iSenderType != EMuiuAddressTypePhoneNumber ) + { + //We trust on that there won't be illegal addresses + //in received messages + iSenderType = EMuiuAddressTypeEmail; + } + + //Check if MMS engine has put an alias into iDetails field + if ( sender.Compare( details ) != 0 ) + { + TPtrC alias = KNullDesC(); + if ( details.Length() && !iAlias ) + { + iAlias = details.AllocL( ); + alias.Set( *iAlias ); + } + + // Resolve whether this is remote alias. Local alias takes precedence + TPtrC tempAlias( TMmsGenUtils::Alias( sender ) ); + if ( iAlias + && tempAlias.Length() + && !tempAlias.CompareF( *iAlias ) ) + + { + iRemoteAlias = ETrue; + } + + MVPbkContactLink* link = NULL; + static_cast( iHeaders[EHeaderAddressFrom].iControl ) + ->AddRecipientL( alias, + TMmsGenUtils::PureAddress( sender ), + ETrue, + link ); + } + else + { + MVPbkContactLink* link = NULL; + static_cast( iHeaders[EHeaderAddressFrom].iControl ) + ->AddRecipientL( TMmsGenUtils::Alias( sender ), + TMmsGenUtils::PureAddress( sender ), + ETrue, + link ); + } + } + } + +// --------------------------------------------------------- +// RemoveSubjectContentL +// --------------------------------------------------------- +// +void CMmsViewerHeader::RemoveSubjectContentL( ) + { + if ( iHeaders[EHeaderSubject].iControl + && iHeaders[EHeaderSubject].iControl->Editor().TextLength() ) + { + // without this change Japanese pictographs in subject field + // appear on slides 2,... + iHeaders[EHeaderSubject].iControl->Editor().SetCursorPosL( 0, EFalse ); + TPtrC nullPtrC( KNullDesC() ); + iHeaders[EHeaderSubject].iControl->Editor().SetTextL( &nullPtrC ); + } + } + + +// --------------------------------------------------------- +// RestoreSubjectContentL +// --------------------------------------------------------- +// +void CMmsViewerHeader::RestoreSubjectContentL() + { + InsertSubjectL( ETrue ); + } + +// --------------------------------------------------------- +// InsertSubjectL +// --------------------------------------------------------- +// +void CMmsViewerHeader::InsertSubjectL( TBool /*aReadContent*/ ) + { + HBufC* subject = iMtm.SubjectL().AllocLC(); + TPtr subjectPtr = subject->Des(); + subjectPtr.Trim(); + if ( subjectPtr.Length() + && !iHeaders[EHeaderSubject].iControl ) + { + iView.AddControlFromResourceL( R_MMSVIEWER_SUBJECT, EMsgExpandableControl, EMsgAppendControl, EMsgHeader ); + iHeaders[EHeaderSubject].iControl = static_cast + ( iView.ControlById( EMsgComponentIdSubject ) ); + iHeaders[EHeaderSubject].iOwned = EFalse; + + iHeaders[EHeaderSubject].iControl->Editor().SetTextL( subject ); + } + else if ( subjectPtr.Length() + && iHeaders[EHeaderSubject].iControl + && !iHeaders[EHeaderSubject].iControl->Editor().TextLength() ) + { + iHeaders[EHeaderSubject].iControl->Editor().SetTextL( subject ); + } + CleanupStack::PopAndDestroy(); //subject + } + +// --------------------------------------------------------- +// CUniEditorHeader::InsertAttachmentL +// --------------------------------------------------------- +// +void CMmsViewerHeader::InsertAttachmentL( TBool /*aReadContent*/) + { + if ( iAttachmentList.Count() ) + { + CMsgAttachmentControl* attachmentControl = CMsgAttachmentControl::NewL( iView, iView ); + CleanupStack::PushL( attachmentControl ); + iView.AddControlL( attachmentControl, + EMsgComponentIdAttachment, + EMsgAppendControl, + EMsgHeader ); + CleanupStack::Pop( attachmentControl ); + + iHeaders[EHeaderAttachment].iControl = + static_cast( iView.ControlById( EMsgComponentIdAttachment ) ); + + iHeaders[EHeaderAttachment].iOwned = EFalse; + + for( TInt index = 0; index < iAttachmentList.Count(); index++ ) + { + TParsePtrC fileParser( iAttachmentList.GetByIndex( index )->MediaInfo()->FullFilePath() ); + attachmentControl->AppendAttachmentL( fileParser.NameAndExt() ); + } + } + + } + + +// --------------------------------------------------------- +// RemoveAttachmentL +// --------------------------------------------------------- +// +void CMmsViewerHeader::RemoveAttachmentL( ) + { + RemoveFromViewL( EUniFeatureAttachment ); + } + +// End of File