diff -r b13141f05c3d -r b5fbb9b25d57 meetingrequest/mrgui/mrfieldbuilderplugin/src/cmrviewerattachmentfield.cpp --- a/meetingrequest/mrgui/mrfieldbuilderplugin/src/cmrviewerattachmentfield.cpp Tue Apr 27 16:20:14 2010 +0300 +++ b/meetingrequest/mrgui/mrfieldbuilderplugin/src/cmrviewerattachmentfield.cpp Tue May 11 15:57:15 2010 +0300 @@ -30,14 +30,14 @@ #include "mcalremoteattachmentoperation.h" #include "cesmrglobalnote.h" -#include +#include #include #include -#include +#include #include #include #include -#include +#include #include // DEBUG @@ -263,7 +263,7 @@ { ++count; } - + if ( iLockIcon ) { ++count; @@ -302,7 +302,7 @@ FUNC_LOG; TRect rect( Rect() ); - TAknLayoutRect rowLayoutRect( + TAknLayoutRect rowLayoutRect( NMRLayoutManager::GetFieldRowLayoutRect( rect, 1 ) ); TRect rowRect( rowLayoutRect.Rect() ); @@ -318,22 +318,22 @@ // Layouting lock icon if( iLockIcon ) { - TAknWindowComponentLayout iconLayout( - NMRLayoutManager::GetWindowComponentLayout( + TAknWindowComponentLayout iconLayout( + NMRLayoutManager::GetWindowComponentLayout( NMRLayoutManager::EMRLayoutSingleRowDColumnGraphic ) ); AknLayoutUtils::LayoutImage( iLockIcon, rowRect, iconLayout ); } - + // Layouting viewer rect TAknLayoutText viewerLayoutText; if( iLockIcon ) { - viewerLayoutText = NMRLayoutManager::GetLayoutText( rowRect, + viewerLayoutText = NMRLayoutManager::GetLayoutText( rowRect, NMRLayoutManager::EMRTextLayoutSingleRowEditorText ); } else { - viewerLayoutText = NMRLayoutManager::GetLayoutText( rowRect, + viewerLayoutText = NMRLayoutManager::GetLayoutText( rowRect, NMRLayoutManager::EMRTextLayoutTextEditor ); } @@ -342,7 +342,7 @@ // Resize height according to actual height required by edwin. viewerRect.Resize( 0, iSize.iHeight - viewerRect.Height() ); iRichTextViewer->SetRect( viewerRect ); - + // Layouting focus TRect bgRect( 0, 0, 0, 0 ); if( iAttachmentCount > 1 ) @@ -364,7 +364,7 @@ // Move focus rect so that it's relative to field's position. bgRect.Move( -Position() ); SetFocusRect( bgRect ); - + // Failures are ignored. TRAP_IGNORE( // Set font @@ -458,7 +458,7 @@ TBool CMRViewerAttachmentsField::ExecuteGenericCommandL( TInt aCommand ) { FUNC_LOG; - // TODO: Changes from other fields have to be implemented here + TBool handled( EFalse ); //handle locked field first @@ -468,7 +468,7 @@ aCommand == EAknCmdOpen ) { HandleTactileFeedbackL(); - + CESMRGlobalNote::ExecuteL( CESMRGlobalNote::EESMRUnableToEdit ); return ETrue; @@ -489,7 +489,7 @@ iAttachmentCommandHandler->HandleAttachmentCommandL( aCommand, *currentLink ); - + HandleTactileFeedbackL(); } else @@ -497,7 +497,7 @@ iAttachmentCommandHandler->HandleRemoteAttachmentCommandL( aCommand, *currentLink ); - + HandleTactileFeedbackL(); } @@ -538,7 +538,7 @@ { TRAP_IGNORE( NotifyEventL( EMRLaunchAttachmentContextMenu )); ret = ETrue; - + TRAP_IGNORE( HandleTactileFeedbackL() ); } @@ -576,56 +576,51 @@ attachmentLinks.ReserveL( iAttachmentCount ); for ( TInt i = 0; i < iAttachmentCount; ++i ) { - CCalAttachment* att = iEntry->Entry().AttachmentL( i ); // Ownership not gained + CCalAttachment* attachment = iEntry->Entry().AttachmentL( i ); // Ownership not gained - // Reducing space required by file size information from - // max line width, so that file name can be trimmed to correct - // length - TInt maxLineWidth = layoutText.TextRect().Width(); - const CFont* font = layoutText.Font(); + const CFont* font = layoutText.Font(); + TInt maxFileNameLengthInPixels( MaxTextLengthInPixelsL() ); - HBufC* attachmentSize = AttachmentNameAndSizeL( KNullDesC(), *att ); - TInt attachmentSizeLength = attachmentSize->Length(); - maxLineWidth -= font->TextWidthInPixels( *attachmentSize ); - delete attachmentSize; - attachmentSize = NULL; + // Size information needs to be reduced from max filename length + HBufC* attachmentSizeOnly( + AttachmentNameAndSizeL( KNullDesC(), *attachment ) ); + TInt sizeInformationLengthInPixels( + font->TextWidthInPixels( *attachmentSizeOnly ) ); + maxFileNameLengthInPixels -= sizeInformationLengthInPixels; - // TODO: correct icon zise to correct one. Ask from UI specifier. - TSize iconSize( 20, 20); - maxLineWidth -= iconSize.iWidth; - - // Trimming file name to fit to one line - TPtrC text = att->Label(); - HBufC* clippedTextHBufC = ClipTextLC( text, *font, maxLineWidth ); - TPtr clippedText = clippedTextHBufC->Des(); - clippedText.Trim(); + // Trimming file name to fit to one line + TPtrC text = attachment->Label(); + HBufC* clippedTextHBufC = ClipTextLC( + text, *font, maxFileNameLengthInPixels ); + TPtr clippedText = clippedTextHBufC->Des(); + clippedText.Trim(); if ( clippedText.Length() > 0 ) { - // Creating rich text link - CESMRRichTextLink* link = CESMRRichTextLink::NewL( - buffer.Length(), - clippedText.Length() + attachmentSizeLength, - text, - CESMRRichTextLink::ETypeAttachment, - CESMRRichTextLink::ETriggerKeyRight ); - CleanupStack::PushL( link ); - attachmentLinks.AppendL( link ); - CleanupStack::Pop( link ); + HBufC* buf = AttachmentNameAndSizeL( clippedText, *attachment ); + CleanupStack::PushL( buf ); - HBufC* buf = AttachmentNameAndSizeL( clippedText, *att ); - CleanupStack::PushL( buf ); + // Creating rich text link + CESMRRichTextLink* link = CESMRRichTextLink::NewL( + buffer.Length(), + buf->Length(), + text, + CESMRRichTextLink::ETypeAttachment, + CESMRRichTextLink::ETriggerKeyRight ); + CleanupStack::PushL( link ); + attachmentLinks.AppendL( link ); + CleanupStack::Pop( link ); - // Append attachment name and size with line feed to buffer - buffer.ReAllocL( buffer.Length() + - clippedText.Length() + - buf->Length() + - KNewLine().Length() ); + // Append attachment name and size with line feed to buffer + buffer.ReAllocL( buffer.Length() + + clippedText.Length() + + buf->Length() + + KNewLine().Length() ); - buffer.Append( buf->Des() ); - buffer.Append( KNewLine ); + buffer.Append( buf->Des() ); + buffer.Append( KNewLine ); - CleanupStack::PopAndDestroy( buf ); + CleanupStack::PopAndDestroy( buf ); } CleanupStack::PopAndDestroy( clippedTextHBufC ); @@ -744,7 +739,7 @@ attachmentStrings->AppendL( aDes ); stringholder = StringLoader::LoadLC( - R_MEET_REQ_ATTACHMENT_FILE_LESS_THAN_KILOBYTE , + R_MEET_REQ_ATTACHMENT_FILE_LESS_THAN_KILOBYTE , *attachmentStrings ); } else @@ -959,7 +954,7 @@ FUNC_LOG; TInt commandInProgress( iAttachmentCommandHandler->CurrentCommandInProgress() ); - + // Get selected attachment CCalAttachment* selectedAttachment = NULL; @@ -980,21 +975,21 @@ ASSERT( selectedAttachment ); - + /* * Case 1: Download in progress */ if( commandInProgress ) { - // A) If selected attachment is remote attachment and download is in progress + // A) If selected attachment is remote attachment and download is in progress // or attachment is queued for downloading - if( selectedAttachment->Type() == CCalAttachment::EUri && + if( selectedAttachment->Type() == CCalAttachment::EUri && EESMRViewerSaveAllAttachments == commandInProgress ) { aMenuPane->SetItemDimmed( EESMRViewerOpenAttachment, ETrue ); - + aMenuPane->SetItemDimmed( EESMRViewerSaveAttachment, ETrue ); @@ -1003,7 +998,7 @@ EESMRViewerSaveAllAttachments, ETrue ); } - + // B) If selected attachment is local attachment else if( selectedAttachment->Type() == CCalAttachment::EFile ) { @@ -1011,7 +1006,7 @@ aMenuPane->SetItemDimmed( EESMRViewerCancelAttachmentDownload, ETrue ); - + // If attachment count is one, hide 'Save All' also if ( iAttachmentCount == 1 ) { @@ -1020,11 +1015,11 @@ ETrue ); } } - + // C) If selected attachment is Uri, and some other command is in progress // than save all - else if( selectedAttachment->Type() == CCalAttachment::EUri && - commandInProgress != EESMRViewerSaveAllAttachments ) + else if( selectedAttachment->Type() == CCalAttachment::EUri && + commandInProgress != EESMRViewerSaveAllAttachments ) { // If this attachment is the one being downloaded if( IsAttachmentDownloadInProgress( *selectedAttachment ) ) @@ -1032,25 +1027,25 @@ aMenuPane->SetItemDimmed( EESMRViewerOpenAttachment, ETrue ); - + aMenuPane->SetItemDimmed( EESMRViewerSaveAttachment, ETrue ); - + aMenuPane->SetItemDimmed( EESMRViewerSaveAllAttachments, ETrue ); } - - + + // if this attacment is not the one being downloaded else - { + { // Always hide cancel attachment download item aMenuPane->SetItemDimmed( EESMRViewerCancelAttachmentDownload, ETrue ); - + // If attachment count is one, hide 'Save All' also if ( iAttachmentCount == 1 ) { @@ -1061,7 +1056,7 @@ } } } - + /* * Case 2: No download in progress */ @@ -1071,7 +1066,7 @@ aMenuPane->SetItemDimmed( EESMRViewerCancelAttachmentDownload, ETrue ); - + // If attachment count is one, hide 'Save All' also if ( iAttachmentCount == 1 ) { @@ -1086,16 +1081,16 @@ // CMRViewerAttachmentsField::IsAttachmentDownloadInProgress // --------------------------------------------------------------------------- // -TBool CMRViewerAttachmentsField::IsAttachmentDownloadInProgress( +TBool CMRViewerAttachmentsField::IsAttachmentDownloadInProgress( const CCalAttachment& aAttachment ) { TBool ret( EFalse ); - + RPointerArray& remoteOperations( iAttachmentCommandHandler->RemoteOperations() ); TPtrC currentAttachmentName( aAttachment.Label() ); - + TInt downloadOperationCount( remoteOperations.Count() ); if ( downloadOperationCount ) { @@ -1106,7 +1101,7 @@ remoteOperations[i]->AttachmentInformation(); TPtrC label( attachInfo.AttachmentLabel() ); - + if ( label.Compare( currentAttachmentName ) == 0 ) { ret = ETrue; @@ -1117,4 +1112,53 @@ return ret; } +// --------------------------------------------------------------------------- +// CMRViewerAttachmentsField::SupportsLongTapFunctionalityL +// --------------------------------------------------------------------------- +// +TBool CMRViewerAttachmentsField::SupportsLongTapFunctionalityL( + const TPointerEvent &aPointerEvent ) + { + FUNC_LOG; + TBool ret( EFalse ); + + if ( iRichTextViewer->Rect().Contains( aPointerEvent.iPosition ) ) + { + if( iRichTextViewer->PointerEventOccuresOnALinkL( aPointerEvent ) ) + { + ret = ETrue; + } + } + + return ret; + } + +// --------------------------------------------------------------------------- +// CMRViewerAttachmentsField::MaxTextLengthInPixelsL +// --------------------------------------------------------------------------- +// +TInt CMRViewerAttachmentsField::MaxTextLengthInPixelsL() + { + FUNC_LOG; + /* + * RichTextViewer length cannot be used here directly, since + * this value is not always available. Value needs to be calculated. + */ + TRect tempFieldRect( TPoint( 0, 0 ), MinimumSize() ); + + // Rich Text viewer width is the same as other common rich text components + // width + TAknLayoutRect rowLayoutRect( + NMRLayoutManager::GetFieldRowLayoutRect( tempFieldRect, 1 ) ); + TRect rowRect( rowLayoutRect.Rect() ); + + TAknLayoutText layoutText( NMRLayoutManager::GetLayoutText( + rowRect, + NMRLayoutManager::EMRTextLayoutTextEditor ) ); + + TRect tempRichTextViewerRect( layoutText.TextRect() ); + + return tempRichTextViewerRect.Width(); + } + //EOF