diff -r 8466d47a6819 -r 12c456ceeff2 emailuis/emailui/src/FreestyleMessageHeaderHTML.cpp --- a/emailuis/emailui/src/FreestyleMessageHeaderHTML.cpp Thu Dec 17 08:39:21 2009 +0200 +++ b/emailuis/emailui/src/FreestyleMessageHeaderHTML.cpp Thu Jan 07 12:38:38 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* 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" @@ -46,7 +46,6 @@ _LIT8( KBccFieldName, "bcc_field"); _LIT8( KSentFieldName, "sent_field"); _LIT8( KSubjectFieldName, "subject_field"); -_LIT8( KAttachmentFieldName, "attachment_field"); _LIT8( KToImageName, "to_img"); _LIT8( KCcImageName, "cc_img"); @@ -58,34 +57,36 @@ _LIT8( KSpace8, " "); _LIT8( KMetaHeader, "\n" ); -const TInt KMaxEventLength = 256; +const TInt KMaxEventLength( 256 ); +const TInt KFreestyleMessageHeaderHTMLRightMarginInPx( 10 ); +const TInt KFreestyleMessageHeaderHTMLMaxBufferSizeForWidth( 5 ); -EXPORT_C CFreestyleMessageHeaderHTML* CFreestyleMessageHeaderHTML::NewL( CFSMailMessage& aMailMessage ) +EXPORT_C CFreestyleMessageHeaderHTML* CFreestyleMessageHeaderHTML::NewL( CFSMailMessage& aMailMessage, TInt aVisibleWidth ) { - CFreestyleMessageHeaderHTML* self = new (ELeave) CFreestyleMessageHeaderHTML( aMailMessage ); + CFreestyleMessageHeaderHTML* self = new (ELeave) CFreestyleMessageHeaderHTML( aMailMessage, aVisibleWidth ); self->ConstructL(); return self; } -EXPORT_C void CFreestyleMessageHeaderHTML::ExportL( CFSMailMessage& aMailMessage, RWriteStream& aWriteStream ) +EXPORT_C void CFreestyleMessageHeaderHTML::ExportL( CFSMailMessage& aMailMessage, RWriteStream& aWriteStream, TInt aVisibleWidth ) { - CFreestyleMessageHeaderHTML* headerHtml = CFreestyleMessageHeaderHTML::NewL( aMailMessage ); + CFreestyleMessageHeaderHTML* headerHtml = CFreestyleMessageHeaderHTML::NewL( aMailMessage, aVisibleWidth ); CleanupStack::PushL( headerHtml ); headerHtml->ExportL( aWriteStream ); CleanupStack::PopAndDestroy( headerHtml ); } -EXPORT_C void CFreestyleMessageHeaderHTML::ExportL( CFSMailMessage& aMailMessage, RFile& aFile ) +EXPORT_C void CFreestyleMessageHeaderHTML::ExportL( CFSMailMessage& aMailMessage, RFile& aFile, TInt aVisibleWidth ) { - CFreestyleMessageHeaderHTML* headerHtml = CFreestyleMessageHeaderHTML::NewL( aMailMessage ); + CFreestyleMessageHeaderHTML* headerHtml = CFreestyleMessageHeaderHTML::NewL( aMailMessage, aVisibleWidth ); CleanupStack::PushL( headerHtml ); headerHtml->ExportL( aFile ); CleanupStack::PopAndDestroy( headerHtml ); } -EXPORT_C void CFreestyleMessageHeaderHTML::ExportL( CFSMailMessage& aMailMessage, RFs& aFs, const TPath& aFilePath) +EXPORT_C void CFreestyleMessageHeaderHTML::ExportL( CFSMailMessage& aMailMessage, RFs& aFs, const TPath& aFilePath, TInt aVisibleWidth ) { - CFreestyleMessageHeaderHTML* headerHtml = CFreestyleMessageHeaderHTML::NewL( aMailMessage ); + CFreestyleMessageHeaderHTML* headerHtml = CFreestyleMessageHeaderHTML::NewL( aMailMessage, aVisibleWidth ); CleanupStack::PushL( headerHtml ); headerHtml->ExportL( aFs, aFilePath ); CleanupStack::PopAndDestroy( headerHtml ); @@ -122,11 +123,12 @@ CleanupStack::PopAndDestroy( &fwstream ); } -CFreestyleMessageHeaderHTML::CFreestyleMessageHeaderHTML( CFSMailMessage& aMailMessage ) +CFreestyleMessageHeaderHTML::CFreestyleMessageHeaderHTML( CFSMailMessage& aMailMessage, TInt aVisibleWidth ) : iMailMessage( aMailMessage ) { - } - + iVisibleWidth = aVisibleWidth - KFreestyleMessageHeaderHTMLRightMarginInPx; + } + void CFreestyleMessageHeaderHTML::ConstructL() { iMailMessage.AttachmentListL( iAttachments ); @@ -184,10 +186,10 @@ ExportToL( aWriteStream ); ExportCcL( aWriteStream ); ExportBccL( aWriteStream ); - ExportAttachmentsL( aWriteStream ); ExportSentTimeL( aWriteStream ); ExportSubjectL( aWriteStream ); EndHeaderTableL( aWriteStream ); + ExportAttachmentsL( aWriteStream ); HTMLBodyEndL( aWriteStream ); } @@ -198,14 +200,24 @@ } void CFreestyleMessageHeaderHTML::ExportInitialTableL( RWriteStream& aWriteStream ) const { - aWriteStream.WriteL(_L8("\n")); - aWriteStream.WriteL(_L8("\n")); + + // set the width, using the visible screen width + TBuf8 tableWidth; + tableWidth.AppendNum( iVisibleWidth ); + aWriteStream.WriteL(_L8("
\n")); + - // Add "show details" image - aWriteStream.WriteL(_L8("\n")); - - //Sent time - aWriteStream.WriteL(_L8("\n")); - if ( iAttachments.Count() > 0 ) - { - aWriteStream.WriteL(_L8("\n")); - } - else - { - aWriteStream.WriteL(_L8("\n")); - } - aWriteStream.WriteL(_L8("\n")); + aWriteStream.WriteL(_L8("\n\n
")); + // start first row: table with the sent info and the '+' icon + aWriteStream.WriteL(_L8("
\n")); + + aWriteStream.WriteL(_L8("\n")); + + // add Sent time and date + aWriteStream.WriteL(_L8("\n\n")); - aWriteStream.WriteL(_L8("\n")); + + aWriteStream.WriteL(_L8("\n")); + + // add "show details" image on the same line as Sent time and date + aWriteStream.WriteL(_L8("\n")); + + // finish first row + aWriteStream.WriteL(_L8("\n")); + aWriteStream.WriteL(_L8("
")); HBufC* dateText = TFsEmailUiUtility::DateTextFromMsgLC( &iMailMessage ); HBufC* timeText = TFsEmailUiUtility::TimeTextFromMsgLC( &iMailMessage ); @@ -223,29 +235,32 @@ CleanupStack::PopAndDestroy( sentTimeText ); CleanupStack::PopAndDestroy( timeText ); CleanupStack::PopAndDestroy( dateText ); - - aWriteStream.WriteL(_L8("
")); - //Subject + //============================= + // start second row which contains subject + aWriteStream.WriteL(_L8("
")); + HBufC8* subject8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( iMailMessage.GetSubject() ); CleanupStack::PushL( subject8 ); aWriteStream.WriteL( *subject8 ); CleanupStack::PopAndDestroy( subject8 ); - aWriteStream.WriteL(_L8("
\n")); - + aWriteStream.WriteL(_L8("\n")); + aWriteStream.WriteL(_L8("\n")); // finish subject row + + // end table_initial + aWriteStream.WriteL(_L8("\n")); + aWriteStream.CommitL(); } void CFreestyleMessageHeaderHTML::HTMLBodyEndL( RWriteStream& aWriteStream ) const @@ -258,7 +273,7 @@ { aWriteStream.WriteL( _L8("\n") ); + aWriteStream.WriteL( _L8("\">") ); aWriteStream.WriteL( _L8("") ); @@ -267,9 +282,11 @@ aWriteStream.WriteL( *subjectHeadingText ); CleanupStack::PopAndDestroy( subjectHeadingText ); aWriteStream.WriteL( _L8("") ); - aWriteStream.WriteL( _L8("\n") ); + aWriteStream.WriteL( _L8("") ); aWriteStream.WriteL( _L8("\n") ); - aWriteStream.WriteL( _L8("\n") ); + + // subject text + aWriteStream.WriteL( _L8("") ); aWriteStream.WriteL( _L8("") ); HBufC8* subject8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( iMailMessage.GetSubject() ); @@ -277,8 +294,7 @@ aWriteStream.WriteL( *subject8 ); CleanupStack::PopAndDestroy( subject8 ); - aWriteStream.WriteL( _L8("\n") ); - + aWriteStream.WriteL( _L8("") ); aWriteStream.WriteL( _L8("\n") ); aWriteStream.CommitL(); @@ -293,26 +309,30 @@ { froms.AppendL( from ); } - ExportEmailAddressesL(aWriteStream, FreestyleMessageHeaderURLFactory::EEmailAddressTypeFrom, froms ); + ExportEmailAddressesL( aWriteStream, FreestyleMessageHeaderURLFactory::EEmailAddressTypeFrom, froms, + KFromFieldName, KFromTableName, R_FREESTYLE_EMAIL_UI_VIEWER_FROM ); CleanupStack::PopAndDestroy( &froms ); } void CFreestyleMessageHeaderHTML::ExportToL( RWriteStream& aWriteStream ) const { RPointerArray& recipients = iMailMessage.GetToRecipients(); - ExportEmailAddressesL( aWriteStream, FreestyleMessageHeaderURLFactory::EEmailAddressTypeTo, recipients ); + ExportEmailAddressesL( aWriteStream, FreestyleMessageHeaderURLFactory::EEmailAddressTypeTo, recipients, + KToFieldName, KToTableName, R_FREESTYLE_EMAIL_UI_VIEWER_TO ); } void CFreestyleMessageHeaderHTML::ExportCcL( RWriteStream& aWriteStream ) const { RPointerArray& recipients = iMailMessage.GetCCRecipients(); - ExportEmailAddressesL( aWriteStream, FreestyleMessageHeaderURLFactory::EEmailAddressTypeCc, recipients ); + ExportEmailAddressesL( aWriteStream, FreestyleMessageHeaderURLFactory::EEmailAddressTypeCc, recipients, + KCcFieldName, KCcTableName, R_FREESTYLE_EMAIL_UI_VIEWER_CC ); } void CFreestyleMessageHeaderHTML::ExportBccL( RWriteStream& aWriteStream ) const { RPointerArray& recipients = iMailMessage.GetBCCRecipients(); - ExportEmailAddressesL( aWriteStream, FreestyleMessageHeaderURLFactory::EEmailAddressTypeBcc, recipients ); + ExportEmailAddressesL( aWriteStream, FreestyleMessageHeaderURLFactory::EEmailAddressTypeBcc, recipients, + KBccFieldName, KBccTableName, R_FREESTYLE_EMAIL_UI_VIEWER_BCC ); } void CFreestyleMessageHeaderHTML::ExportSentTimeL( RWriteStream& aWriteStream ) const @@ -320,7 +340,7 @@ aWriteStream.WriteL( _L8("\n") ); + aWriteStream.WriteL( _L8("\">") ); aWriteStream.WriteL( _L8("") ); @@ -329,10 +349,10 @@ aWriteStream.WriteL( *sentHeadingText ); CleanupStack::PopAndDestroy( sentHeadingText ); aWriteStream.WriteL( _L8("") ); - aWriteStream.WriteL( _L8("\n") ); + aWriteStream.WriteL( _L8("") ); aWriteStream.WriteL( _L8("\n") ); - aWriteStream.WriteL( _L8("\n") ); + aWriteStream.WriteL( _L8("") ); aWriteStream.WriteL( _L8("") ); HBufC* dateText = TFsEmailUiUtility::DateTextFromMsgLC( &iMailMessage ); @@ -352,7 +372,7 @@ CleanupStack::PopAndDestroy( timeText ); CleanupStack::PopAndDestroy( dateText ); - aWriteStream.WriteL( _L8("\n") ); + aWriteStream.WriteL( _L8("") ); aWriteStream.WriteL( _L8("\n") ); @@ -361,150 +381,77 @@ void CFreestyleMessageHeaderHTML::ExportAttachmentsL( RWriteStream& aWriteStream ) const { - if ( iAttachments.Count() > 0 ) + + TInt attachmentsCount( iAttachments.Count() ); + if ( attachmentsCount ) { - aWriteStream.WriteL( _L8("\n") ); - - aWriteStream.WriteL( _L8("") ); - aWriteStream.WriteL( _L8("") ); + // The attachments table consists of one row that contains 2 cells + // first cell contains the attachment icon + // second cell contains a table which contains the attachments list - HBufC8* attachmentHeadingText = HeadingTextLC( R_FREESTYLE_EMAIL_UI_VIEWER_ATTACHMENT, iAttachments.Count()); - aWriteStream.WriteL( *attachmentHeadingText ); - CleanupStack::PopAndDestroy( attachmentHeadingText ); - - - aWriteStream.WriteL( _L8(":") ); - aWriteStream.WriteL( _L8("\n") ); - aWriteStream.WriteL( _L8("\n") ); - - + // start attachments table + aWriteStream.WriteL( _L8("\n") ); // width is set at 100% intentionally + + // start row + aWriteStream.WriteL( _L8("\n") ); + + // add attachment icon + aWriteStream.WriteL( _L8("\n") ); + + // start table of attachments as a table within a cell aWriteStream.WriteL( _L8("
\n") ); - StartTableL( aWriteStream, KAttachmentTableName ); - for (TInt i=0; i\n")); + for (TInt i=0; i < attachmentsCount; i++) { AddAttachmentL( aWriteStream, *iAttachments[i] ); } - EndTableL( aWriteStream ); + + aWriteStream.WriteL(_L8("
\n")); // end table_attachments_list aWriteStream.WriteL( _L8("\n") ); - + aWriteStream.WriteL( _L8("\n") ); + aWriteStream.WriteL(_L8("\n")); // end attachments table } } -void CFreestyleMessageHeaderHTML::ExportEmailAddressesL( RWriteStream& aWriteStream, - FreestyleMessageHeaderURLFactory::TEmailAddressType aEmailAddressType, - const RPointerArray& aEmailAddresses ) const +void CFreestyleMessageHeaderHTML::ExportEmailAddressesL( RWriteStream& aWriteStream, + FreestyleMessageHeaderURLFactory::TEmailAddressType aEmailAddressType, + const RPointerArray& aEmailAddresses, + const TDesC8& aRowId, + const TDesC8& /*aTableId*/, + TInt aHeaderTextResourceId ) const { - if (aEmailAddresses.Count() == 0) - { - return; - } - - aWriteStream.WriteL( _L8("\n") ); - - - aWriteStream.WriteL( _L8("") ); - aWriteStream.WriteL( _L8("") ); - - switch ( aEmailAddressType ) - { - case FreestyleMessageHeaderURLFactory::EEmailAddressTypeFrom: + // begin table row + aWriteStream.WriteL( _L8("") ); + + // heading text + aWriteStream.WriteL( _L8("")); + HBufC8* headingText = HeadingTextLC( aHeaderTextResourceId ); + aWriteStream.WriteL( *headingText ); + CleanupStack::PopAndDestroy( headingText ); + aWriteStream.WriteL( _L8("")); + + aWriteStream.WriteL( _L8("\n") ); // end table row + + // add addresses, one address per row + TInt count( aEmailAddresses.Count() ); + for (TInt i = 0; i < count; ++i ) { - HBufC8* fromHeadingText = HeadingTextLC( R_FREESTYLE_EMAIL_UI_VIEWER_FROM ); - aWriteStream.WriteL( *fromHeadingText ); - CleanupStack::PopAndDestroy( fromHeadingText ); + aWriteStream.WriteL( _L8("") ); + AddEmailAddressL (aWriteStream, aEmailAddressType, *aEmailAddresses[i] ); + aWriteStream.WriteL( _L8("\n") ); } - break; - - case FreestyleMessageHeaderURLFactory::EEmailAddressTypeTo: - { - HBufC8* toHeadingText = HeadingTextLC( R_FREESTYLE_EMAIL_UI_VIEWER_TO ); - aWriteStream.WriteL( *toHeadingText ); - CleanupStack::PopAndDestroy( toHeadingText ); - } - break; - case FreestyleMessageHeaderURLFactory::EEmailAddressTypeCc: - { - HBufC8* ccHeadingText = HeadingTextLC( R_FREESTYLE_EMAIL_UI_VIEWER_CC ); - aWriteStream.WriteL( *ccHeadingText ); - CleanupStack::PopAndDestroy( ccHeadingText ); - } - break; - - case FreestyleMessageHeaderURLFactory::EEmailAddressTypeBcc: - { - HBufC8* bccHeadingText = HeadingTextLC( R_FREESTYLE_EMAIL_UI_VIEWER_BCC ); - aWriteStream.WriteL( *bccHeadingText ); - CleanupStack::PopAndDestroy( bccHeadingText ); - } - break; - - default: - User::Leave( KErrNotSupported ); + aWriteStream.CommitL(); } - aWriteStream.WriteL( _L8("") ); - aWriteStream.WriteL( _L8("\n") ); - aWriteStream.WriteL( _L8("\n") ); - - aWriteStream.WriteL( _L8("\n") ); - aWriteStream.WriteL( _L8("") ); - - switch ( aEmailAddressType ) - { - case FreestyleMessageHeaderURLFactory::EEmailAddressTypeTo: - StartTableL( aWriteStream, KToTableName ); - break; - - case FreestyleMessageHeaderURLFactory::EEmailAddressTypeCc: - StartTableL( aWriteStream, KCcTableName ); - break; - - case FreestyleMessageHeaderURLFactory::EEmailAddressTypeBcc: - StartTableL( aWriteStream, KBccTableName ); - break; - case FreestyleMessageHeaderURLFactory::EEmailAddressTypeFrom: - StartTableL( aWriteStream, KFromTableName ); - break; - - default: - User::Leave( KErrNotSupported ); - } - for ( TInt i=0; i") ); - AddEmailAddressL (aWriteStream, aEmailAddressType, *aEmailAddresses[i] ); - aWriteStream.WriteL( _L8("\n") ); - } - - EndTableL( aWriteStream ); - aWriteStream.WriteL( _L8("\n") ); - aWriteStream.WriteL( _L8("\n") ); - aWriteStream.CommitL(); } void CFreestyleMessageHeaderHTML::AddEmailAddressL( RWriteStream& aWriteStream, @@ -542,7 +489,7 @@ void CFreestyleMessageHeaderHTML::AddAttachmentL( RWriteStream& aWriteStream, CFSMailMessagePart& aAttachment ) const { - aWriteStream.WriteL( _L8("") ); + aWriteStream.WriteL( _L8("") ); // pad bottom to allow some space between the lines TUint id = aAttachment.GetPartId().Id(); TBuf<32> itemId; @@ -568,10 +515,10 @@ TUint sizeInKB = size / 1024; if ( size % 1024 ) - { - // round up - ++sizeInKB; - } + { + // round up + ++sizeInKB; + } TBuf8<32> sizeText; sizeText.Append( KSpace8 ); @@ -639,12 +586,21 @@ aWriteStream.WriteL( aTableId ); // use style="display:none" so that full header table is hidden initially - aWriteStream.WriteL( _L8("\" border=\"0\" width=\"50%\" style=\"display: none\">\n") ); + aWriteStream.WriteL( _L8("\" border=\"0\" width=\"100%\" style=\"display: none\">\n") ); + - // Add "hide details" image - aWriteStream.WriteL(_L8("\n")); - aWriteStream.WriteL(_L8("\n")); - aWriteStream.WriteL(_L8("\n")); + TBuf8 tableWidth; + tableWidth.AppendNum( iVisibleWidth ); + + // Add "hide details" image as its own table with its own width + aWriteStream.WriteL( _L8("\n")); + aWriteStream.WriteL(_L8("\n")); + aWriteStream.WriteL( _L8("\n")); + aWriteStream.WriteL( _L8("\n")); + aWriteStream.WriteL( _L8("\n")); + aWriteStream.WriteL( _L8("
\n")); aWriteStream.CommitL(); } @@ -780,3 +736,6 @@ aWriteStream.WriteL( _L8("\n") ); aWriteStream.CommitL(); } + + +