diff -r 000000000000 -r 72b543305e3a mobilemessaging/unieditor/utils/src/UniBaseHeader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/unieditor/utils/src/UniBaseHeader.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,449 @@ +/* +* Copyright (c) 2005-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: +* Defines implementation of CUniBaseHeader class methods. +* +*/ + + + +// INCLUDE FILES +#include "UniBaseHeader.h" + +#include +#include // CRichText +#include + +#include // link against centralrepository.lib +#include // for Central Repository keys + +#include + +#include + +#include +#include + +#include +#include + + +// ========================================================== + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CUniBaseHeader::CUniBaseHeader +// +// Constructor. +// --------------------------------------------------------- +// +EXPORT_C CUniBaseHeader::CUniBaseHeader( CBaseMtm& aMtm, + CMsgEditorView& aView, + RFs& aFs ) : + iMtm( aMtm ), + iView( aView ), + iFs( aFs ) + { + iHeaders[EHeaderAddressFrom].iControlType = EMsgComponentIdFrom; + iHeaders[EHeaderAddressTo].iControlType = EMsgComponentIdTo; + iHeaders[EHeaderAddressCc].iControlType = EMsgComponentIdCc; + iHeaders[EHeaderAddressBcc].iControlType = EMsgComponentIdBcc; + iHeaders[EHeaderSubject].iControlType = EMsgComponentIdSubject; + iHeaders[EHeaderAttachment].iControlType = EMsgComponentIdAttachment; + iHeaders[EHeaderAddressTo].iRecipientTypeValue = EMsvRecipientTo; + iHeaders[EHeaderAddressCc].iRecipientTypeValue = EMsvRecipientCc; + iHeaders[EHeaderAddressBcc].iRecipientTypeValue = EMsvRecipientBcc; + } + +// --------------------------------------------------------- +// CUniBaseHeader::~CUniBaseHeader +// --------------------------------------------------------- +// +EXPORT_C CUniBaseHeader::~CUniBaseHeader() + { + for (TInt i = EHeaderAddressFrom; i <= EHeaderAttachment; i++ ) + { + if ( iHeaders[i].iOwned ) + { + delete iHeaders[i].iControl; + } + delete iHeaders[i].iAddressHandler; + } + } + +// --------------------------------------------------------- +// CUniBaseHeader::AddToViewL +// +// Assumes that slide is automatically correct. Caller's responsibility +// --------------------------------------------------------- +// +EXPORT_C void CUniBaseHeader::AddToViewL() + { + DoAddToViewL( EFalse ); // do not read data + } + +// --------------------------------------------------------- +// CUniBaseHeader::DoAddToViewL +// --------------------------------------------------------- +// +EXPORT_C void CUniBaseHeader::DoAddToViewL( TBool aReadContent ) + { + TInt flag = EUniFeatureFrom; + + // Headers must be in right order. Remove additional first + RemoveFromViewL( EUniFeatureCc | EUniFeatureBcc | EUniFeatureSubject | EUniFeatureAttachment ); + + for ( TInt i = EHeaderAddressFrom; i <= EHeaderAttachment; i++ ) + { + if ( i == EHeaderAddressTo ) + { + flag = EUniFeatureTo; + } + else if ( i == EHeaderAddressCc ) + { + flag = EUniFeatureCc; + } + else if ( i == EHeaderAddressBcc ) + { + flag = EUniFeatureBcc; + } + else if ( i == EHeaderSubject ) + { + flag = EUniFeatureSubject; + } + else if ( i == EHeaderAttachment ) + { + flag = EUniFeatureAttachment; + } + + if ( iHeaders[i].iControl && + !iView.ControlById( iHeaders[i].iControlType ) ) + { + iView.AddControlL( iHeaders[i].iControl, + iHeaders[i].iControlType, + EMsgAppendControl, + EMsgHeader ); + iHeaders[i].iOwned = EFalse; + } + else if ( iAddDelayed & EUniFeatureFrom && + i == EHeaderAddressFrom ) + { + InsertFromL( aReadContent ); // read from MTM + iAddDelayed &= ( ~EUniFeatureFrom ); + } + else if ( iAddDelayed & EUniFeatureSubject && + i == EHeaderSubject ) + { + InsertSubjectL( aReadContent ); + iAddDelayed &= ( ~EUniFeatureSubject ); + } + else if ( iAddDelayed & EUniFeatureAttachment && + i == EHeaderAttachment ) + { + InsertAttachmentL( aReadContent ); + iAddDelayed &= ( ~EUniFeatureAttachment ); + } + else if ( iAddDelayed & flag && + ( i == EHeaderAddressTo || + i == EHeaderAddressCc || + i == EHeaderAddressBcc ) ) + { + InsertRecipientL( iHeaders[i], + static_cast ( i ), + aReadContent); // read from MTM + iAddDelayed &= ( ~flag ); + } + } + iAddDelayed = 0; + } + +// --------------------------------------------------------- +// CUniBaseHeader::InsertFromL +// --------------------------------------------------------- +// +EXPORT_C void CUniBaseHeader::InsertFromL( TBool /*aReadContent*/) // read from MTM + { + } + +// --------------------------------------------------------- +// CUniBaseHeader::RemoveFromViewL +// +// Assumes that slide is automatically correct. Caller's responsibility +// --------------------------------------------------------- +// +EXPORT_C void CUniBaseHeader::RemoveFromViewL( TInt aFlags ) + { + for ( TInt i = EHeaderAddressFrom; i <= EHeaderAttachment; i++ ) + { + TInt flag( EUniFeatureTo ); + if ( i == EHeaderAddressFrom ) + { + flag = EUniFeatureFrom; + } + else if ( i == EHeaderAddressCc ) + { + flag = EUniFeatureCc; + } + else if ( i == EHeaderAddressBcc ) + { + flag = EUniFeatureBcc; + } + else if ( i == EHeaderSubject ) + { + flag = EUniFeatureSubject; + } + else if ( i == EHeaderAttachment ) + { + flag = EUniFeatureAttachment; + } + + if ( aFlags & flag && + iHeaders[i].iControl ) + { + if ( iView.RemoveControlL( iHeaders[i].iControlType ) ) + { + iHeaders[i].iOwned = ETrue; + } + // else - not removed + } + } + } + +// --------------------------------------------------------- +// MtmAddressTypes +// --------------------------------------------------------- +// +EXPORT_C TInt CUniBaseHeader::MtmAddressTypes() + { + TInt ret(0); + const CMsvRecipientList& addresses = iMtm.AddresseeList(); + + TInt addrCnt = addresses.Count(); + for ( TInt i = 0; i < addrCnt; i++ ) + { + if ( addresses.Type(i) == EMsvRecipientTo ) + { + ret |= EUniFeatureTo; + } + else if ( addresses.Type(i) == EMsvRecipientCc ) + { + ret |= EUniFeatureCc; + } + else if ( addresses.Type(i) == EMsvRecipientBcc ) + { + ret |= EUniFeatureBcc; + } + } + return ret; + } + +// --------------------------------------------------------- +// CUniBaseHeader::FocusedAddressField +// --------------------------------------------------------- +// +EXPORT_C TInt CUniBaseHeader::FocusedAddressField( CMsgBaseControl* aFocusedControl ) + { + TInt ret = KErrNotFound; + for ( TInt i = EHeaderAddressFrom; i <= EHeaderAttachment ; i++ ) + { + if ( iHeaders[i].iControl == aFocusedControl ) + { + return iHeaders[i].iControlType; + } + } + return ret; + } + +// --------------------------------------------------------- +// CUniBaseHeader::AddHeadersVariation +// --------------------------------------------------------- +// +EXPORT_C void CUniBaseHeader::AddHeadersVariationL( TBool aIsUpload ) + { + TInt featureBitmask = 0; + + CRepository* repository = CRepository::NewL( KCRUidMuiuVariation ); + repository->Get( KMuiuMmsFeatures, featureBitmask ); + delete repository; + + // bit 0x2 + if ( featureBitmask & KMmsFeatureIdEditorSubjectField ) + { // Subject is supported + iAddHeadersVariation |= EUniFeatureSubject; + if( featureBitmask & KMmsFeatureIdEditorSubjectConfigurable ) + { // It is also configurable + iAddHeadersVariation |= EUniFeatureSubjectConfigurable; + } + } + // bit 0x400 + // do not show for upload messages + if ( featureBitmask & KMmsFeatureIdEditorCcField && + !aIsUpload ) + { + iAddHeadersVariation |= EUniFeatureCc; + } + // bit 0x800 + // do not show for upload messages + if ( featureBitmask & KMmsFeatureIdEditorBccField && + !aIsUpload ) + { + iAddHeadersVariation |= EUniFeatureBcc; + } + } + +// --------------------------------------------------------- +// CUniBaseHeader::AddHeadersConfig +// --------------------------------------------------------- +// +EXPORT_C TInt CUniBaseHeader::AddHeadersConfigL() + { + TInt featureBitmask = 0; + TInt ret = 0; + CRepository* repository = CRepository::NewL( KCRUidMmsui ); + repository->Get( KMmsuiAdditionalHeaders, featureBitmask ); + delete repository; + + // set bit to null if variation is OFF + if ( featureBitmask & KMmsuiHeaderSubject && + iAddHeadersVariation & EUniFeatureSubjectConfigurable ) + { + ret |= EUniFeatureSubject; + } + if ( featureBitmask & KMmsuiHeaderCC && + iAddHeadersVariation & EUniFeatureCc ) + { + ret |= EUniFeatureCc; + } + if ( featureBitmask & KMmsuiHeaderBCC && + iAddHeadersVariation & EUniFeatureBcc ) + { + ret |= EUniFeatureBcc; + } + iAddHeadersConfig = ret; + return ret; + } + +// --------------------------------------------------------- +// CUniBaseHeader::SaveAddHeadersConfigL +// --------------------------------------------------------- +// +EXPORT_C void CUniBaseHeader::SaveAddHeadersConfigL(TInt aFlags) + { + TInt featureBitmask = 0; + CRepository* repository = CRepository::NewL( KCRUidMmsui ); + + // Do not set bit if variation is OFF + if ( aFlags & EUniFeatureSubject && + iAddHeadersVariation & EUniFeatureSubjectConfigurable ) + { + featureBitmask |= KMmsuiHeaderSubject; + } + if ( aFlags & EUniFeatureCc && + iAddHeadersVariation & EUniFeatureCc ) + { + featureBitmask |= KMmsuiHeaderCC; + } + if ( aFlags & EUniFeatureBcc && + iAddHeadersVariation & EUniFeatureBcc ) + { + featureBitmask |= KMmsuiHeaderBCC; + } + + // Don't save anything, which is variated off + repository->Set( KMmsuiAdditionalHeaders, featureBitmask ); + delete repository; + } + +// --------------------------------------------------------- +// CUniBaseHeader::HasRecipients +// --------------------------------------------------------- +// +EXPORT_C TBool CUniBaseHeader::HasRecipients( ) + { + TBool result( EFalse ); + + for ( TInt i = EHeaderAddressTo; i <= EHeaderAddressBcc ; i++ ) + { + if ( iHeaders[i].iControl ) + { + CMsgRecipientArray* recipients = NULL; + TRAP_IGNORE( recipients = + static_cast( iHeaders[i].iControl )->GetRecipientsL() ); + if ( recipients && + recipients->Count() > 0 ) + { + result = ETrue; + break; + } + } + } + + return result; + } + +// --------------------------------------------------------- +// CUniBaseHeader::IsAddressControl +// --------------------------------------------------------- +// +EXPORT_C TBool CUniBaseHeader::IsAddressControl (TInt aId ) + { + TBool result( EFalse ); + + for ( TInt i = EHeaderAddressTo; i <= EHeaderAddressBcc ; i++ ) + { + if ( iHeaders[i].iControl && + iHeaders[i].iControlType == aId ) + { + result = ETrue; + break; + } + } + + return result; + } + +// --------------------------------------------------------- +// CUniBaseHeader::HandleResourceChange +// --------------------------------------------------------- +// +EXPORT_C void CUniBaseHeader::HandleResourceChange( TInt aType ) + { + for ( TInt i = EHeaderAddressFrom; i <= EHeaderAttachment ; i++ ) + { + if ( iHeaders[i].iControl && + iHeaders[i].iOwned ) + { + iHeaders[i].iControl->HandleResourceChange( aType ); + } + } + + } + + +// End of File