emailuis/emailui/src/FreestyleEmailUiHtmlViewerView.cpp
changeset 1 12c456ceeff2
parent 0 8466d47a6819
child 2 5253a20d2a1e
--- a/emailuis/emailui/src/FreestyleEmailUiHtmlViewerView.cpp	Thu Dec 17 08:39:21 2009 +0200
+++ b/emailuis/emailui/src/FreestyleEmailUiHtmlViewerView.cpp	Thu Jan 07 12:38:38 2010 +0200
@@ -129,6 +129,7 @@
     iOpenMessages = new (ELeave) CStack<CFSMailMessage, ETrue>();
     iEmbeddedMessages = new (ELeave) CStack<CFSMailMessage, EFalse>();
     iNextOrPrevMessageSelected = EFalse; 
+    iForwardingMessage = EFalse;
     }
 
 // -----------------------------------------------------------------------------
@@ -290,6 +291,7 @@
                         iContainer->ResetContent();
                         }
 
+                    iForwardingMessage = ETrue;
                     iAppUi.LaunchEditorL( KEditorCmdForward, params );
                     }
                 }
@@ -647,7 +649,7 @@
             else{
                 iAttachmentsListModel->UpdateListL( iOpenMessages->Head() );         
                 }                
-                
+            
     
             TRAPD( error, LoadContentFromMailMessageL( iOpenMessages->Head() ) );
             if ( error == KErrNotFound || error == KErrInUse || error == KErrLocked )
@@ -703,7 +705,7 @@
                 iAppUi.SetTitlePaneTextL(*emailAddress);
                 CleanupStack::PopAndDestroy(emailAddress);
                 }
-            CleanupStack::PopAndDestroy( displayName );      
+        CleanupStack::PopAndDestroy( displayName );
             }
         }
     
@@ -736,6 +738,7 @@
             }
        }
     iNextOrPrevMessageSelected = EFalse;
+    iForwardingMessage = EFalse;
     }
 
 // -----------------------------------------------------------------------------
@@ -814,8 +817,14 @@
 void CFsEmailUiHtmlViewerView::ChildDoDeactivate()
     {
     FUNC_LOG;
-    CancelFetchings();
-   
+    // Don't cancel fetching the message parts when forwarding the message:
+    // it would also cancel the fetchings initiated by the forwarding,
+    // causing the forwarding to abort.
+    if ( !iForwardingMessage )
+        {
+        CancelFetchings();
+        }
+
     if ( iContainer )
         {
         HideContainer();
@@ -1036,13 +1045,13 @@
     }
 
 
-void CFsEmailUiHtmlViewerView::HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType /*aType*/ )
+void CFsEmailUiHtmlViewerView::HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType aType )
     {
     FUNC_LOG;
-
+    
     if ( iContainer )
         {
-        iContainer->SetRect( ClientRect() );
+        iContainer->HandleResourceChange( aType );
         }
     }
 
@@ -1112,22 +1121,45 @@
             HideContainer();
             iContainer->ResetContent();
             }
-
+        
         RArray<TFSMailMsgId> msgIds;
         CleanupClosePushL( msgIds );
-        msgIds.Append( iMessage->GetMessageId() );
+        TFSMailMsgId currentMsgId = iMessage->GetMessageId();    
+        msgIds.Append( currentMsgId );
         TFSMailMsgId mailBox = iMessage->GetMailBoxId();
-        TFSMailMsgId folderId = iMessage->GetFolderId();
+        TFSMailMsgId folderId = iMessage->GetFolderId();        
+ 
+		//Get the id and check if there is a previous message available 
+		TFSMailMsgId prevMsgId;
+		TFSMailMsgId prevMsgFolderId;  
+		
+		//Get the previous message if it exists
+		TBool available = iAppUi.IsPreviousMsgAvailable( currentMsgId, 
+												   prevMsgId, 
+                        		                   prevMsgFolderId );
+        
+        //Delete the message
         iAppUi.GetMailClient()->DeleteMessagesByUidL( mailBox, folderId, msgIds );
         CleanupStack::PopAndDestroy( &msgIds );
 
         // Notify appui of deleted mail item
-        SendEventToAppUiL( TFSEventMailDeleted );
-
+        SendEventToAppUiL( TFSEventMailDeleted ); 
+        
         if ( iAppUi.CurrentActiveView()->Id() == HtmlViewerId )
-            {
-            NavigateBackL();
-            }
+			{	
+			//Open the previous message or navigate back to list viewer
+			if ( available )
+				{
+				iAppUi.MoveToPreviousMsgAfterDeleteL( prevMsgId );				
+				}	
+			else
+				{
+				ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );
+				NavigateBackL();
+				}
+			//inform user that mail is deleted	
+			TFsEmailUiUtility::ShowGlobalInfoNoteL( R_FREESTYLE_EMAIL_MAIL_DELETED );
+			}        
         }
     }
 
@@ -1140,11 +1172,10 @@
         TFSMailMsgId aMailbox, TAny* aParam1, TAny* /*aParam2*/, TAny* /*aParam3*/ )
     {
     FUNC_LOG;
-
     if ( /*iFirstStartCompleted &&*/ iMessage && aMailbox.Id() == iAppUi.GetActiveMailboxId().Id() &&
                                      aEvent == TFSEventMailDeleted && aParam1 ) // Safety, in list events that only concern active mailbox are handled
         {
-        TFSMailMsgId curMsgId = iMessage->GetMessageId();
+        TFSMailMsgId curMsgId = iMessage->GetMessageId();       
         RArray<TFSMailMsgId>* removedEntries = static_cast<RArray<TFSMailMsgId>*>( aParam1 );
         // <cmail> break-keyword should be used only in switch-clauses
         TBool cont = ETrue;
@@ -1152,13 +1183,12 @@
         for ( TInt i = 0 ; i < removedEntries->Count() && cont; i++ )
             {
             if ( curMsgId == ( *removedEntries )[i] )
-                {
-                ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );
-                NavigateBackL();
+                {                
                 cont = EFalse;
-                }
-            }
+                }            
+            } 
         }
+     
     if (iMessage && aMailbox.Id() == iAppUi.GetActiveMailboxId().Id() && aEvent == TFSEventNewMail)
         {
         UpdateNaviPaneL();
@@ -1389,7 +1419,26 @@
     HBufC* textData = aEmailAddress.AllocLC();
     CFSMailBox* mailBox = iAppUi.GetMailClient()->GetMailBoxByUidL( iMessage->GetMailBoxId() );
     CleanupStack::PushL( mailBox );
+  
+    //UI options Delete and Actions dimmed in Remote Lookup.
+    const TInt resourceId(ToolbarResourceId());
+    RArray<TInt> dimmedItems;
+    CleanupClosePushL(dimmedItems);
+    GetInitiallyDimmedItemsL(resourceId, dimmedItems); // get the currently dimmed buttons
+    
+    SetToolbarItemDimmed( EFsEmailUiTbCmdActions, ETrue);
+    SetToolbarItemDimmed( EFsEmailUiTbCmdDelete, ETrue);
+        
     CFsDelayedLoader::InstanceL()->GetContactHandlerL()->LaunchRemoteLookupWithQueryL( *mailBox, *textData );
+    
+    SetToolbarItemDimmed( EFsEmailUiTbCmdActions, EFalse);
+    SetToolbarItemDimmed( EFsEmailUiTbCmdDelete, EFalse);
+   
+    for (TInt i = 0; i < dimmedItems.Count(); i++) // restore the buttons
+        {
+        SetToolbarItemDimmed(dimmedItems[i], ETrue);
+        }
+    CleanupStack::PopAndDestroy(); // dimmedItems.Close()
     CleanupStack::PopAndDestroy( mailBox );
     CleanupStack::PopAndDestroy( textData );
     }
@@ -2459,11 +2508,16 @@
         case EESMRCmdDownloadAttachment:
         case EESMRCmdDownloadAllAttachments:
             {
+            if(iAttachmentsListModel == NULL)
+                {
+                iAttachmentsListModel = CFSEmailUiAttachmentsListModel::NewL( iAppUi, *this );
+                iAttachmentsListModel->UpdateListL( iOpenMessages->Head() );
+                }
             // Check that message has attachments to display
             if ( messagePtr->IsFlagSet( EFSMsgFlag_Attachments ) )
                 {
                 iOpResult.iResultCode = KErrNone;
-                //StartDowloadingAttachmentsL();
+                DownloadAllAttachmentsL();
                 CompletePendingMrCommand();
                 }
             }
@@ -2471,6 +2525,11 @@
         case EESMRCmdSaveAttachment:
         case EESMRCmdSaveAllAttachments:
             {
+            if(iAttachmentsListModel == NULL)
+                {
+                iAttachmentsListModel = CFSEmailUiAttachmentsListModel::NewL( iAppUi, *this );
+                iAttachmentsListModel->UpdateListL( iOpenMessages->Head() );
+                }
             // Check that message has attachments to display
             if ( messagePtr->IsFlagSet( EFSMsgFlag_Attachments ) )
                 {
@@ -2777,21 +2836,28 @@
         TFSMailMsgId currentMsgId = iMessage->GetMessageId();
         TFSMailMsgId tmpMsgId;
         TFSMailMsgId tmpMsgFolderId;
+        CAknNavigationDecorator::TScrollButton nextButton = CAknNavigationDecorator::ERightButton;
+        CAknNavigationDecorator::TScrollButton prevButton = CAknNavigationDecorator::ELeftButton;
+        if (AknLayoutUtils::LayoutMirrored())
+            {
+            nextButton = CAknNavigationDecorator::ELeftButton;
+            prevButton = CAknNavigationDecorator::ERightButton;
+            }
         if ( iAppUi.IsNextMsgAvailable( currentMsgId, tmpMsgId, tmpMsgFolderId ) )
             {
-            naviDecorator->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, EFalse );
+            naviDecorator->SetScrollButtonDimmed( nextButton, EFalse );
             }
         else
             {
-            naviDecorator->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, ETrue );
+            naviDecorator->SetScrollButtonDimmed( nextButton, ETrue );
             }
         if ( iAppUi.IsPreviousMsgAvailable( currentMsgId, tmpMsgId, tmpMsgFolderId ) )
             {
-            naviDecorator->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, EFalse );
+            naviDecorator->SetScrollButtonDimmed( prevButton, EFalse );
             }
         else
             {
-            naviDecorator->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, ETrue );
+            naviDecorator->SetScrollButtonDimmed( prevButton, ETrue );
             }
 
         // Set this view's navipane to the top of the navipane control stack
@@ -2847,7 +2913,12 @@
         {
         naviDecorator->SetNaviDecoratorObserver( NULL );
         }
-    if( aEventID == MAknNaviDecoratorObserver::EAknNaviDecoratorEventRightTabArrow )
+    MAknNaviDecoratorObserver::TAknNaviDecoratorEvents nextButton = MAknNaviDecoratorObserver::EAknNaviDecoratorEventRightTabArrow;
+    if (AknLayoutUtils::LayoutMirrored())
+        {
+        nextButton = MAknNaviDecoratorObserver::EAknNaviDecoratorEventLeftTabArrow;
+        }
+    if( aEventID == nextButton )
         {
         ShowNextMessageL();
         }