commonuis/CommonUi/src/FindItemDialog.cpp
branchRCL_3
changeset 56 d48ab3b357f1
parent 55 aecbbf00d063
child 72 a5e7a4f63858
--- a/commonuis/CommonUi/src/FindItemDialog.cpp	Tue Aug 31 15:28:30 2010 +0300
+++ b/commonuis/CommonUi/src/FindItemDialog.cpp	Wed Sep 01 12:16:19 2010 +0100
@@ -35,6 +35,11 @@
 #include <eikbtgpc.h> // for ButtonGroupContainer
 #include <uikon.hrh> // for EKeyOk
 
+#include <favouriteslimits.h> // KFavouritesMaxUrl
+#include <favouritesitem.h> // for CBookmarkItem
+
+#include <favouritesdb.h>
+
 #include <apgcli.h> // RApaLsSession for WMLBrowser launch
 
 #ifndef RD_VIRTUAL_PHONEBOOK
@@ -47,10 +52,16 @@
 #include <AiwContactAssignDataTypes.h> // AiwContactAssign
 #endif // !RD_VIRTUAL_PHONEBOOK
 
+#include <sendui.h> // for CSendAppUi
+#include <CMessageData.h> // for CMessageData
+#include <SendUiConsts.h> // Mtm uids
+
 #include <commonphoneparser.h> // Phonenumber parser
 
 #include <baclipb.h> // For CClipboard
 
+#include <schemehandler.h> // For CSchemeHandler
+
 #include <aknnotewrappers.h>
 
 #include <finditemui.rsg>
@@ -84,6 +95,7 @@
 #include <aknnavilabel.h> // for changing the lable of navipane
 
 #include <AknTasHook.h> // for testability hooks
+#include <touchfeedback.h>
 _LIT( KResFileName, "z:\\resource\\finditemui.rsc" );
 
 // Panic
@@ -225,51 +237,50 @@
     }    
 
 NONSHARABLE_CLASS(CItemFinderExtension) : public CBase
-	{
+    {
 public: 
-	~CItemFinderExtension(); 
-	static CItemFinderExtension* NewL(); 
-	
-	//new function
+    ~CItemFinderExtension(); 
+    static CItemFinderExtension* NewL(); 
+
+    //new function
 public:
-	PBAiwNotify* CallBack();
-	
+    PBAiwNotify* CallBack();
+
 private: 
-	CItemFinderExtension(); 
-	void ConstructL();	
-	
+    CItemFinderExtension(); 
+    void ConstructL();	
+
 public:
-	PBAiwNotify iCallBack;
-	};
+    PBAiwNotify iCallBack;
+    };
 
 CItemFinderExtension::~CItemFinderExtension()
-	{
-	
-	}
+    {
+    }
 
 CItemFinderExtension* CItemFinderExtension::NewL()
-	{
-	CItemFinderExtension* self = new ( ELeave )CItemFinderExtension;
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop();
-	return self;
-	}
+    {
+    CItemFinderExtension* self = new ( ELeave )CItemFinderExtension;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
 
 PBAiwNotify* CItemFinderExtension::CallBack()
-	{
-	return &iCallBack;
-	}
+    {
+    return &iCallBack;
+    }
 
 CItemFinderExtension::CItemFinderExtension()
-	{
-	
-	}
+    {
+
+    }
 
 void CItemFinderExtension::ConstructL()
-	{
-	
-	}
+    {
+
+    }
 
 
 
@@ -297,6 +308,7 @@
     delete iSBFrame;
     delete iItemArrayForScrollBar;
 
+    delete iSendUi;
 #ifndef RD_VIRTUAL_PHONEBOOK
     delete iPbkDataSave;
     delete iPbkEngine;
@@ -307,6 +319,8 @@
     delete iServiceHandler;
     delete iFindItemVoIPExtension;
 
+    delete iSchemeHandler;
+
     delete iBgContext;
 
     delete iTitleText;
@@ -443,8 +457,121 @@
     iFindItemVoIPExtension = CFindItemVoIPExtension::NewL();
     
     iExtension = CItemFinderExtension::NewL();
+    iFeedback = MTouchFeedback::Instance();
+    }
+
+// -----------------------------------------------------------------------------
+// CFindItemDialog::HandlePointerEventL
+// -----------------------------------------------------------------------------
+//
+void CFindItemDialog::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+    {
+    if ( !iSingleClick )
+        {
+        if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+            {
+            this->PointerEvent( NULL, aPointerEvent );
+            }
+        }
+    else
+        {
+        DoHandlePointerEventL( aPointerEvent );
+        }
     }
 
+// -----------------------------------------------------------------------------
+// CFindItemDialog::DoHandlePointerEventL
+// -----------------------------------------------------------------------------
+//
+void CFindItemDialog::DoHandlePointerEventL ( const TPointerEvent& aPointerEvent )
+    {
+    if ( aPointerEvent.iType == TPointerEvent::EButton1Up ||
+             aPointerEvent.iType == TPointerEvent::EButton1Down )
+        {
+        TPoint tapPoint( aPointerEvent.iPosition - iTappingOffset );
+        TInt pos = 0;
+        TInt len = iEdwin->TextLayout()->PosRangeInBand( pos );
+        CFindItemEngine::SFoundItem item;
+        TRect rect;
+        TInt i = 0;
+        while ( i < iController->ItemCount() ) // Check visible rects
+            {
+            if ( !iController->Item( i, item ) ) // Get item.
+                {
+                break; // Error: invalid item.
+                }
+            TInt end = item.iStartPos + item.iLength - 1;
+            if ( end < pos )
+                {
+                i++;
+                continue; // item not visible.
+                }
+            TInt start = item.iStartPos;
+            if ( start >= ( pos + len ) )
+                {
+                break; // item not visible.
+                }
+            TInt lastLine = iEdwin->TextLayout()->GetLineNumber( end );
+            TInt nextLine = 0;
+            TInt lastPos = start;
+            do // Check all rects of one item.
+                {
+                TInt error = KErrNone;
+                TRAP( error, rect =
+                        iEdwin->TextLayout()->GetLineRectL( start, end ) );
+                if ( error == KErrNone )
+                    {
+                    if ( rect.Contains( tapPoint ) ) // Item rect tapped.
+                        {
+                        if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+                            {
+                            TRAP( error, iController->TappedItemL( i ) );
+                            // Change selection
+                            if ( error != KErrNone )
+                                {
+                                return; // Error: no selection made.
+                                }
+                            if ( iFeedback )
+                                {
+                                iFeedback->InstantFeedback( ETouchFeedbackBasicButton );	
+                                }
+                            iLastTappedItem = TPoint ( item.iStartPos, item.iLength
+                                + item.iStartPos );
+                            return; // Hit, no further handling.
+                            }
+                        else if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
+                            {
+                            if ( iLastTappedItem == TPoint ( item.iStartPos,
+                                item.iLength + item.iStartPos ) )
+                                {
+                                iIsSensitiveMenu = ETrue;
+                                iMenuBar->SetMenuType( CEikMenuBar::EMenuContext );
+                                TRAP_IGNORE( CAknDialog::DisplayMenuL() );
+                                }
+                            return; // Hit, no further handling.
+                            }
+                        }
+                    }
+                else
+                    {
+                    return; // Error: no rect.
+                    }
+                TPoint midPoint( rect.iBr.iX,
+                        ( rect.iBr.iY + rect.iTl.iY ) / 2 );
+                TRAP( error, lastPos =
+                        iEdwin->TextLayout()->XyPosToDocPosL( midPoint ) );
+                if ( error != KErrNone )
+                    {
+                    return; // Error: no last pos.
+                    }
+                start = lastPos + 1;
+                nextLine = iEdwin->TextLayout()->GetLineNumber( lastPos );
+                } while ( nextLine != lastLine );
+            i++;
+            }
+        }
+    return;   // No hit, no further handling.
+    }
 
 // -----------------------------------------------------------------------------
 // CFindItemDialog::DoCopyToClipboardL
@@ -607,7 +734,39 @@
 //
 void CFindItemDialog::SendMessageL( const TUid aMtmUid )
     {
-	
+    __ASSERT_DEBUG( iEdwin->SelectionLength() > 0, Panic( ENoItemSelected ) );
+
+    if ( !iSendUi )
+        {
+        return;
+        }
+
+    // Hide options menu if showing
+    if ( CAknDialog::MenuShowing() )
+        {
+        CAknDialog::HideMenu();
+        }
+
+    TCursorSelection selection = iEdwin->Selection();
+    HBufC* number = HBufC::NewLC( selection.Length() );
+    TPtr numberPtr = number->Des();
+    numberPtr.Append(
+        iPlainText.Mid(
+            selection.LowerPos(), selection.Length() ) );
+    if ( iSearchCase & CFindItemEngine::EFindItemSearchPhoneNumberBin )
+        {
+        CommonPhoneParser::ParsePhoneNumber(
+            numberPtr, CommonPhoneParser::EPlainPhoneNumber );
+        AknTextUtils::ConvertDigitsTo( numberPtr, EDigitTypeWestern );            
+        }
+
+    CMessageData* messageData = CMessageData::NewL();
+    CleanupStack::PushL( messageData );
+    messageData->AppendToAddressL( *number );
+
+    iSendUi->CreateAndSendMessageL( aMtmUid, messageData );
+    CleanupStack::PopAndDestroy(2); // messageData, number
+
     }
 
 // -----------------------------------------------------------------------------
@@ -661,6 +820,23 @@
         }
     // If current app is other than Browser, use schemehandler for launching
     // file
+    else
+        {
+        if ( iSchemeHandler )
+            {
+            delete iSchemeHandler;
+            iSchemeHandler = 0;
+            }
+        iSchemeHandler = CSchemeHandler::NewL( itemtextPtr );
+        if ( itemtext->FindF( KRtspUrlAddress ) != KErrNotFound )
+            {
+            iSchemeHandler->HandleUrlEmbeddedL();
+            }
+        else
+            {
+            iSchemeHandler->HandleUrlStandaloneL();
+            }
+        }
 
     CleanupStack::PopAndDestroy(); // itemtext
     return EFalse;
@@ -681,7 +857,9 @@
     TPtr paramPtr = parameters->Des();
     paramPtr.Copy( KWmlBrowserParameter );
     paramPtr.Append( KSpace );
-    paramPtr.Append( aItemtextPtr.Mid( 0, aItemtextPtr.Length() ) );
+    paramPtr.Append(
+        aItemtextPtr.Mid(
+            0, Min( aItemtextPtr.Length(), KFavouritesMaxUrl ) ) );
 
     TApaTaskList taskList( iEikonEnv->WsSession() );
     TApaTask task = taskList.FindApp( KWapUid );
@@ -713,6 +891,10 @@
     {
     __ASSERT_DEBUG( iEdwin->SelectionLength() > 0, Panic( ENoItemSelected ) );
 
+    // Create an item and fill with meaningful data.
+    CFavouritesItem* item = CFavouritesItem::NewLC();
+    item->SetParentFolder( KFavouritesRootUid );
+    item->SetType( CFavouritesItem::EItem );
     // Read default name from resources
     HBufC* defaultName =
         iEikonEnv->AllocReadResourceLC( R_FINDITEM_DEFAULT_BOOKMARK_NAME );
@@ -727,20 +909,44 @@
     if ( !dlg->ExecuteLD( R_FINDITEM_BOOKMARK_QUERY_DIALOG ) )
         {
         // User press cancel - do not add bookmark
+        CleanupStack::PopAndDestroy( ); // item
         return;
         }
-    
+
+    item->SetNameL( retName );
     TCursorSelection selection = iEdwin->Selection();
-    
+    item->SetUrlL( iPlainText.Mid( selection.LowerPos(), selection.Length() ) );
+
+    RFavouritesSession sess;
+    RFavouritesDb db;
+
+    User::LeaveIfError( sess.Connect() );
+    CleanupClosePushL<RFavouritesSession>( sess );
+    User::LeaveIfError( db.Open( sess, KBrowserBookmarks ) );
+    CleanupClosePushL<RFavouritesDb>( db );
+
+    // Add item.
+    db.Add( *item, ETrue );
+    // Close the database.
+    db.Close();
+
     HBufC* msgBuffer =
         iCoeEnv->AllocReadResourceLC( R_FINDITEM_BOOKMARK_SAVED );
     CAknConfirmationNote* note = new (ELeave)CAknConfirmationNote( ETrue );
     note->ExecuteLD( *msgBuffer );
 
-    CleanupStack::PopAndDestroy();   // magBuffer
+    CleanupStack::PopAndDestroy( 4 );   // magBuffer, db, sess, item
     }
 
 // -----------------------------------------------------------------------------
+// CFindItemDialog::EnableSingleClick
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFindItemDialog::EnableSingleClick ( TBool aEnable )
+    {
+    iSingleClick = aEnable;
+    }
+
 // CFindItemDialog::ProcessCommandL
 //  Prosesses menu commands
 // -----------------------------------------------------------------------------
@@ -785,15 +991,105 @@
             }
         // Phone number cmds
         case EFindItemCmdCall:
-            { // bit awkward but correct functionality provided.
-            TKeyEvent keyEvent;
-            keyEvent.iCode = EKeyPhoneSend;
-            OfferKeyEventL( keyEvent, EEventKey );
+            {
+            if ( !iHideCallSubMenu )
+                { // bit awkward but correct functionality provided.
+                TKeyEvent keyEvent;
+                keyEvent.iCode = EKeyPhoneSend;
+                OfferKeyEventL( keyEvent, EEventKey );
+                }
+            else
+                {
+                if ( !iDialData )
+                    {
+                    break;
+                    }
+                FormatDialDataL( aCommandId );
+
+                CAiwGenericParamList& paramList =
+                    iServiceHandler->InParamListL();
+
+                if ( iFindItemVoIPExtension->VoIPProfilesExistL() &&
+                    ( iSearchCase ==
+                    CFindItemEngine::EFindItemSearchMailAddressBin ||
+                    iSearchCase == KSearchTelInternetNumber ) )
+                    {
+                    //voip
+                    iDialData->SetCallType( CAiwDialData::EAIWVoiP );
+                    }
+
+                iDialData->FillInParamListL( paramList );
+
+                iServiceHandler->ExecuteServiceCmdL(
+                    KAiwCmdCall,
+                    paramList,
+                    iServiceHandler->OutParamListL(),
+                    0, // No options used.
+                    NULL ); // Dial results are not wanted.
+                }
             break;
             }
         // fix for FAMZ-7JVQ4Y
         case EFindItemSubMenuSend:
            {
+           CFindItemEngine::SFoundItem item;
+           TBool founditem = iController->Item( item );
+           TSendingCapabilities sendingCapabilities;
+           sendingCapabilities.iFlags = TSendingCapabilities::ESupportsEditor;
+           CArrayFixFlat<TUid>* mtmFilter = new(ELeave) CArrayFixFlat<TUid>( 1 );
+           CleanupStack::PushL(mtmFilter);
+           mtmFilter->AppendL(KSenduiMtmPostcardUid);// hide postcard
+           // Hide MMs
+           #ifndef RD_UNIFIED_EDITOR
+           if( !iMMSFeatureSupported )
+               {
+               mtmFilter->AppendL(KSenduiMtmMmsUid);
+               }
+           #endif
+           
+           // Hide Sms
+           if ( iSearchCase == CFindItemEngine::EFindItemSearchMailAddressBin ||
+              ( iFindItemVoIPExtension->IsVoIPSupported() &&
+                  founditem && item.iItemType == CFindItemEngine::EFindItemSearchMailAddressBin &&
+                  iSearchCase == KSearchTelInternetNumber ) )
+              {
+              #ifndef RD_UNIFIED_EDITOR
+              if ( !iEmailOverSmsFeatureSupported )
+                  {
+                  mtmFilter->AppendL(KSenduiMtmSmsUid);
+                  }
+              #endif
+              }
+              
+           // Hide Mail
+           else if ( !iEmailUiFeatureSupported ||
+               ( iSearchCase == CFindItemEngine::EFindItemSearchPhoneNumberBin ||
+               ( iFindItemVoIPExtension->IsVoIPSupported() && founditem &&
+                   item.iItemType == CFindItemEngine::EFindItemSearchPhoneNumberBin &&
+                   iSearchCase == KSearchTelInternetNumber ) ) )
+               {
+               mtmFilter->AppendL(KSenduiMtmSmtpUid);
+               mtmFilter->AppendL(KSenduiMtmImap4Uid);
+               mtmFilter->AppendL(KSenduiMtmPop3Uid);
+               mtmFilter->AppendL(KSenduiMtmSyncMLEmailUid);
+               }
+           // Hide Audio
+           if ( iSearchCase != CFindItemEngine::EFindItemSearchPhoneNumberBin ||
+               !iAudioMessagingFeatureSupported )
+               {
+               mtmFilter->AppendL(KSenduiMtmAudioMessageUid);
+               }
+               
+           TUid uid = iSendUi->ShowTypedQueryL( CSendUi::EWriteMenu, NULL, sendingCapabilities, mtmFilter );
+          
+           CleanupStack::PopAndDestroy();
+           
+           if ( uid == KNullUid )
+              {
+              break;
+              }
+           SendMessageL(uid);  
+           
            break;
            }
         case EFindItemCmdGoToUrl:
@@ -888,15 +1184,23 @@
         }
 
     CFindItemEngine::SFoundItem item;
-    TBool founditem = iController->Item( item );
-
+    TBool foundItem = iController->Item( item );
+    if ( iSingleClick )
+        {
+        // foundItem remains as ETrue, if item found by controller is exactly
+        // same as highlighted selection
+        foundItem = foundItem && ( item.iLength == iEdwin->SelectionLength()
+                && item.iStartPos == Min( iEdwin->Selection().iCursorPos,
+                iEdwin->Selection().iAnchorPos ) );
+        }
+        
     if ( aMenuId == R_FINDITEM_CALLUI_AIW_SUBMENU )
         {
         if ( iFindItemVoIPExtension->IsVoIPSupported() &&
             ( iSearchCase ==
                 CFindItemEngine::EFindItemSearchMailAddressBin ||
             ( iSearchCase == KSearchTelInternetNumber &&
-            founditem && item.iItemType ==
+            foundItem && item.iItemType ==
                 CFindItemEngine::EFindItemSearchMailAddressBin ) ) )
             {
             CAiwGenericParamList* inList = CAiwGenericParamList::NewLC();
@@ -980,11 +1284,12 @@
 
         aMenuPane->AddMenuItemsL( resource, EAknFormMaxDefault - 1, ETrue );
 
+
         if ( iSearchCase == KSearchTelInternetNumber &&
             iFindItemVoIPExtension->VoIPProfilesExistL() ||
             iSearchCase == KSearchTelInternetNumber &&
             !iFindItemVoIPExtension->VoIPProfilesExistL() &&
-            founditem &&
+            foundItem &&
             item.iItemType ==
                 CFindItemEngine::EFindItemSearchPhoneNumberBin ||
             iSearchCase & CFindItemEngine::EFindItemSearchMailAddressBin &&
@@ -1004,7 +1309,7 @@
             }
         else if (
             iSearchCase & CFindItemEngine::EFindItemSearchPhoneNumberBin &&
-            !iHideCallMenu )
+            !iHideCallMenu && !iHideCallSubMenu )
             {
             aMenuPane->SetItemDimmed( EFindItemCmdCall, ETrue );
             aMenuPane->AddMenuItemsL(
@@ -1068,6 +1373,18 @@
         }
     }
 
+
+// -----------------------------------------------------------------------------
+// CFindItemDialog::SetCallSubMenuVisibility
+// Sets AIW submenu visibility
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFindItemDialog::SetCallSubMenuVisibility( TBool aVisible )
+    {
+    iHideCallSubMenu = !aVisible;
+    }
+
+
 // -----------------------------------------------------------------------------
 // CFindItemDialog::OfferKeyEventL
 //  Handles key events
@@ -1098,10 +1415,10 @@
             iController->NextItemL();
             break;
         case EKeyDownArrow:
-            iController->MoveDownL();
+            iController->MoveDownL();   
             break;
         case EKeyLeftArrow:
-            iController->PrevItemL();
+            iController->PrevItemL();	
             break;
         case EKeyUpArrow:
             iController->MoveUpL();
@@ -1113,11 +1430,11 @@
             CAknDialog::DisplayMenuL();
             break;
         case EKeyPhoneSend:
+
             if ( !iDialData )
                 {
                 break;
                 }
-
             CFindItemEngine::SFoundItem item;
             founditem = iController->Item( item );
 
@@ -1245,23 +1562,24 @@
     TRgb color;
     MAknsSkinInstance* skin = AknsUtils::SkinInstance();
     TInt error = AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors, 
-    												EAknsCIQsnTextColorsCG6 );
+        EAknsCIQsnTextColorsCG6 );
     if(error==KErrNone)
-    	{
-      	TCharFormat charFormat;
-    	TCharFormatMask charFormatMask;
-    	charFormatMask.SetAttrib(EAttColor);
-    	charFormat.iFontPresentation.iTextColor = color; 
-    
-    	CRichText * richText = NULL;
-    	richText = iEdwin->RichText();
-    	if( NULL!=richText )
-    		{
-    		TInt length = richText->DocumentLength();
-    		length++;
-    		// apply the color to text
-    		TRAP_IGNORE(richText->ApplyCharFormatL( charFormat, charFormatMask, 0, length ));
-    		}
+        {
+        TCharFormat charFormat;
+        TCharFormatMask charFormatMask;
+        charFormatMask.SetAttrib(EAttColor);
+        charFormat.iFontPresentation.iTextColor = color; 
+
+        CRichText * richText = NULL;
+        richText = iEdwin->RichText();
+        if( NULL!=richText )
+            {
+            TInt length = richText->DocumentLength();
+            length++;
+            // apply the color to text
+            TRAP_IGNORE(richText->ApplyCharFormatL( charFormat,
+                charFormatMask, 0, length ));
+            }
        	}
     if ( anyFound )
         {
@@ -1412,7 +1730,7 @@
         {
         return EFalse;
         }
-    TBool pos2 = EFalse;        
+    TBool pos2 = EFalse;
     TPoint point2;
     TRAP( error, pos2 = iEdwin->TextLayout()->DocPosToXyPosL( 
         aItem2, point2, CLayoutData::EFWholeTBoxesOnly ) );
@@ -1494,6 +1812,7 @@
         if ( iSearchCase == KSearchTelInternetNumber )
             {
             resource = R_FINDITEM_TITLE_TELINTERNET;
+            iSendUi = CSendUi::NewL();
             }
         else if ( iSearchCase & CFindItemEngine::EFindItemSearchURLBin )
             {
@@ -1502,10 +1821,12 @@
         else if ( iSearchCase & CFindItemEngine::EFindItemSearchMailAddressBin )
             {
             resource = R_FINDITEM_TITLE_MAIL;
+            iSendUi = CSendUi::NewL();
             }
         else if ( iSearchCase & CFindItemEngine::EFindItemSearchPhoneNumberBin )
             {
             resource = R_FINDITEM_TITLE_PHONE;
+            iSendUi = CSendUi::NewL();
             }
         else
           {
@@ -1661,17 +1982,17 @@
         KPosIndicator, iController->Position() + 1, iController->ItemCount() );
 
     if(NULL == iNaviDecorator)
-    	{
-    	iNaviDecorator = iNaviPane->CreateNavigationLabelL( naviText );
-       	iNaviDecorator->SetNaviDecoratorObserver( this );  
-       	iNaviDecorator->MakeScrollButtonVisible( ETrue );
-       	}
+        {
+        iNaviDecorator = iNaviPane->CreateNavigationLabelL( naviText );
+        iNaviDecorator->SetNaviDecoratorObserver( this );
+        iNaviDecorator->MakeScrollButtonVisible( ETrue );
+        }
     else
-    	{
-    	// Change the label on Nave pane control...
-    	CAknNaviLabel * label =( CAknNaviLabel* )iNaviDecorator->DecoratedControl();
-    	label->SetTextL(naviText);
-    	}
+        {
+        // Change the label on Nave pane control...
+        CAknNaviLabel * label =( CAknNaviLabel* )iNaviDecorator->DecoratedControl();
+        label->SetTextL(naviText);
+        }
 
     // Dimm arrows if needed
     if ( iController->LastItem() )
@@ -1790,10 +2111,10 @@
     {
 	//Update Horizantal Scroll bar color if skin changes
     if( aType == KAknsMessageSkinChange)
-    	{
-    	CAknScrollBar *scrollBar = iSBFrame->VerticalScrollBar();
-    	scrollBar->HandleResourceChange(aType);
-    	}
+        {
+        CAknScrollBar *scrollBar = iSBFrame->VerticalScrollBar();
+        scrollBar->HandleResourceChange(aType);
+        }
     CAknDialog::HandleResourceChange( aType );
     }
 
@@ -1822,6 +2143,18 @@
 
     iTappingOffset = iEdwin->Rect().iTl - Rect().iTl;
 
+    CFindItemEngine::SFoundItem item;
+    TBool anyFound = iController->Item( item );
+    if( anyFound )
+    	{
+        TInt pos = 0;
+        TInt length = iEdwin->TextLayout()->PosRangeInBand( pos );
+        if( item.iStartPos >= pos + length )
+            {
+            TRAP_IGNORE( iEdwin->MoveDisplayL( TCursorPosition::EFPageDown ) );
+            }
+        }
+
     TRAP_IGNORE( UpdateScrollIndicatorL() );
     }
 
@@ -1877,7 +2210,7 @@
     if ( AknLayoutUtils::PenEnabled() &&
         aPointerEvent.iType == TPointerEvent::EButton1Down )
         {
-        TPoint tapPoint( aPointerEvent.iPosition - iTappingOffset );        
+        TPoint tapPoint( aPointerEvent.iPosition - iTappingOffset );
         TInt pos = 0;
         TInt len = iEdwin->TextLayout()->PosRangeInBand( pos );
         CFindItemEngine::SFoundItem item;
@@ -1889,12 +2222,12 @@
                 {
                 break; // Error: invalid item.
                 };
-            TInt end = item.iStartPos + item.iLength - 1;                            
+            TInt end = item.iStartPos + item.iLength - 1;
             if ( end < pos )
                 {
                 i++;
-                continue; // item not visible.                
-                };                                            
+                continue; // item not visible.
+                };
             TInt start = item.iStartPos;
             if ( start >= ( pos + len ) )
                 {
@@ -1904,13 +2237,13 @@
             TInt nextLine = 0;
             TInt lastPos = start;
             do // Check all rects of one item.
-                {     
-                TInt error = KErrNone;                   
+                {
+                TInt error = KErrNone;
                 TRAP( error, rect = iEdwin->TextLayout()->GetLineRectL( start, end ) );
                 if ( error == KErrNone )
                     {
                     if ( rect.Contains( tapPoint ) ) // Item rect tapped.
-                        {                                    
+                        {
                         TRAP( error, iController->TappedItemL( i ) ); // Change selection
                         if ( error != KErrNone )
                             {
@@ -1925,15 +2258,15 @@
                 else
                     {
                     return false; // Error: no rect.
-                    }                                                    
+                    }
                 TPoint midPoint( rect.iBr.iX, ( rect.iBr.iY + rect.iTl.iY) / 2 );
-                TRAP( error, lastPos = iEdwin->TextLayout()->XyPosToDocPosL( midPoint ) );            
+                TRAP( error, lastPos = iEdwin->TextLayout()->XyPosToDocPosL( midPoint ) );
                 if ( error != KErrNone )
                     {
                     return false; // Error: no last pos.
                     }
                 start = lastPos + 1;
-                nextLine = iEdwin->TextLayout()->GetLineNumber( lastPos );                       
+                nextLine = iEdwin->TextLayout()->GetLineNumber( lastPos );
                 } while ( nextLine != lastLine ); 
             i++;
             }
@@ -1998,7 +2331,8 @@
         default:
             break;
         }    
-    }   
+    }
+
 
 //
 // CONTAINER CLASS
@@ -2084,24 +2418,24 @@
         TRgb color;
         MAknsSkinInstance* skin = AknsUtils::SkinInstance();
         TInt error = AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors, 
-        												EAknsCIQsnTextColorsCG6 );
+            EAknsCIQsnTextColorsCG6 );
         if(error==KErrNone)
-        	{
-           	TCharFormat charFormat;
-        	TCharFormatMask charFormatMask;
-        	charFormatMask.SetAttrib(EAttColor);
-        	charFormat.iFontPresentation.iTextColor = color; 
-     
-        	CRichText * richText = NULL;
-        	richText = iEditor->RichText();
-        	if( NULL!=richText )
-        		{
-        		TInt length = richText->DocumentLength();
-        		length++;
-        		// apply the color to the text
-        		TRAP_IGNORE(richText->ApplyCharFormatL( charFormat, charFormatMask, 0, length ));
-        		}
-           	}
+            {
+            TCharFormat charFormat;
+            TCharFormatMask charFormatMask;
+            charFormatMask.SetAttrib(EAttColor);
+            charFormat.iFontPresentation.iTextColor = color; 
+
+            CRichText * richText = NULL;
+            richText = iEditor->RichText();
+            if( NULL!=richText )
+                {
+                TInt length = richText->DocumentLength();
+                length++;
+                // apply the color to the text
+                TRAP_IGNORE(richText->ApplyCharFormatL( charFormat, charFormatMask, 0, length ));
+                }
+            }
         }
     }