emailuis/nmailui/src/nmviewerview.cpp
changeset 44 c2d07d913565
parent 43 99bcbff212ad
child 47 f83bd4ae1fe3
child 54 997a02608b3a
--- a/emailuis/nmailui/src/nmviewerview.cpp	Fri May 28 13:56:43 2010 +0300
+++ b/emailuis/nmailui/src/nmviewerview.cpp	Thu Jun 10 16:14:05 2010 +0300
@@ -1,19 +1,19 @@
 /*
-* Copyright (c) 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"
-* 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:
-*
-*/
+ * Copyright (c) 2009-2010 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:
+ *
+ */
 
 #include "nmuiheaders.h"
 
@@ -58,7 +58,6 @@
 mViewerContent(NULL),
 mWebView(NULL),
 mHeaderWidget(NULL),
-mViewerContentLayout(NULL),
 mMessageFetchingOperation(NULL),
 mDisplayingPlainText(false),
 mDocumentLoader(NULL),
@@ -71,10 +70,9 @@
 mAttaIndexUnderFetch(NmNotFoundError),
 mAttaWidget(NULL),
 mViewReady(false),
-mWaitNoteCancelled(false)
+mWaitNoteCancelled(false),
+mErrorNote(NULL)
     {
-    NM_FUNCTION;
-    
     // Create documentloader
     mDocumentLoader = new NmUiDocumentLoader(mMainWindow);
     // Get screensize
@@ -95,8 +93,8 @@
 */
 NmViewerView::~NmViewerView()
 {
-    NM_FUNCTION;
-    
+    delete mErrorNote;
+    mErrorNote=NULL;
     delete mWebView;
     mWebView = NULL;
     delete mMessage;
@@ -116,8 +114,6 @@
 */
 void NmViewerView::aboutToExitView()
 {
-    NM_FUNCTION;
-    
     // View is about to exit, for safety, stop 
     // loading of content before closing the view
     if (mWebView){
@@ -153,17 +149,13 @@
         mViewerContent = reinterpret_cast<HbWidget *>(
                 mDocumentLoader->findObject(NMUI_MESSAGE_VIEWER_CONTENT));
         // Find scroll area
-        mScrollArea = reinterpret_cast<NmBaseViewScrollArea *>(
+        mScrollArea = reinterpret_cast<HbScrollArea *>(
                 mDocumentLoader->findObject(NMUI_MESSAGE_VIEWER_SCROLL_AREA));
         if (mScrollArea) {
             mScrollArea->setParentItem(this);
             mScrollArea->setScrollDirections(Qt::Vertical | Qt::Horizontal);
             connect(mScrollArea, SIGNAL(scrollPositionChanged(QPointF)),
                 this, SLOT(contentScrollPositionChanged(QPointF)));
-            connect(mScrollArea, SIGNAL(handleMousePressEvent(QGraphicsSceneMouseEvent*)),
-                this, SLOT(handleMousePressEvent(QGraphicsSceneMouseEvent*)));
-            connect(mScrollArea, SIGNAL(handleMouseReleaseEvent(QGraphicsSceneMouseEvent*)),
-                this, SLOT(handleMouseReleaseEvent(QGraphicsSceneMouseEvent*)));
 
             // Get scroll area contents and set layout margins
             mScrollAreaContents = qobject_cast<HbWidget *>(
@@ -200,10 +192,7 @@
                 if (settings) {
                     settings->setAttribute(QWebSettings::AutoLoadImages, true);
                     settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, true);   
-                }                             
-                HbEditorInterface editorInterface(mWebView);
-                editorInterface.setInputConstraints(HbEditorConstraintIgnoreFocus);
-                mWebView->setAcceptedMouseButtons(Qt::NoButton);
+                }
                 QWebPage *page = mWebView->page();
                 if (page) {
                     QWebFrame *frame = page->mainFrame();
@@ -225,8 +214,6 @@
 */
 void NmViewerView::viewReady()
 {
-    NM_FUNCTION;
-    
     if (!mViewReady){
         // Set mailbox name to title
         setMailboxName();
@@ -323,10 +310,10 @@
  */
 void NmViewerView::messageFetched(int result)
 {
-    NM_FUNCTION;
+    mWaitDialog->close();
+    disconnect(mWaitDialog->mainWindow(), SIGNAL(orientationChanged(Qt::Orientation)),
+                this, SLOT(orientationChanged(Qt::Orientation)));
     
-    mWaitDialog->close();
-
     if (result == NmNoError && mMessageFetchingOperation) {
         if (mMessage) {
             delete mMessage;
@@ -353,8 +340,6 @@
  */
 void NmViewerView::waitNoteCancelled()
 {
-    NM_FUNCTION;
-    
     if (!mWaitNoteCancelled) {
         if (mMessageFetchingOperation && mMessageFetchingOperation->isRunning()) { 
 	        mMessageFetchingOperation->cancelOperation();
@@ -386,6 +371,10 @@
         NmViewerViewNetManager &netMngr = mApplication.networkAccessManager();
         netMngr.setView(this);
         page->setNetworkAccessManager(&netMngr);
+        QWebSettings *webSettings = page->settings();
+        if (webSettings) {
+            webSettings->setObjectCacheCapacities(0,0,0);
+        }
 
         connect(page, SIGNAL(loadFinished(bool)),
                     this, SLOT(webFrameLoaded(bool)));
@@ -494,8 +483,13 @@
         else if (messageParts[i]->partId() == attaId) {
             XQSharableFile file = mUiEngine.messagePartFile(mailboxId, folderId,
                                                             messageId, attaId);
-            NmUtilities::openFile(file);
+            int error = NmUtilities::openFile(file);
             file.close();
+            if (error==NmNotFoundError){
+                delete mErrorNote;
+                mErrorNote=NULL;
+                mErrorNote = NmUtilities::displayWarningNote(hbTrId("txt_mail_dialog_unable_to_open_attachment_file_ty"));
+            }
         }
     }
 }
@@ -592,8 +586,6 @@
 */
 void NmViewerView::reloadViewContents(NmUiStartParam* startParam)
 {
-    NM_FUNCTION;
-    
     // Check start parameter validity, message view cannot
     // be updated if given parameter is zero.
     if (startParam && startParam->viewId() == NmUiViewMessageViewer &&
@@ -618,8 +610,6 @@
 */
 NmUiViewId NmViewerView::nmailViewId() const
 {
-    NM_FUNCTION;
-    
     return NmUiViewMessageViewer;
 }
 
@@ -628,8 +618,6 @@
 */
 void NmViewerView::webFrameLoaded(bool loaded)
 {
-    NM_FUNCTION;
-    
     if (loaded){
         webFrameloadingCompleted = true;
         // Scale web view after loading the
@@ -643,8 +631,6 @@
 */
 void NmViewerView::scaleWebViewWhenLoading(const QSize &size)
 {
-    NM_FUNCTION;
-    
     // Try to scale web view while mainframe is being loaded.
     // So that screen is scrollable even before images are fully loaded
     // First check that new size is different than previous, no need to react if
@@ -673,8 +659,6 @@
 */
 void NmViewerView::scaleWebViewWhenLoaded()
 {
-    NM_FUNCTION;
-    
     if (mWebView&&mWebView->page()) {
         QSizeF contentSize = mWebView->page()->mainFrame()->contentsSize();
         int width = (int)contentSize.width();
@@ -707,8 +691,6 @@
 */
 void NmViewerView::adjustViewDimensions()
 {
-    NM_FUNCTION;
-    
     // Update current screensize
     mScreenSize = mApplication.screenSize();
     // Scale header to screen width
@@ -759,8 +741,6 @@
 */
 void NmViewerView::orientationChanged(Qt::Orientation orientation)
 {
-    NM_FUNCTION;
-    
     Q_UNUSED(orientation);
     QTimer::singleShot(NmOrientationTimer, this, SLOT(adjustViewDimensions()));
 }
@@ -794,32 +774,11 @@
 }
 
 /*!
-   Send mouse release event to web view
-*/
-void NmViewerView::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
-    NM_FUNCTION;
-    handleMouseEvent(event, false);
-
-}
-
-/*!
-   Send mouse press event
-*/
-void NmViewerView::handleMousePressEvent(QGraphicsSceneMouseEvent *event)
-{
-    NM_FUNCTION;
-    handleMouseEvent(event, true);
-}
-
-/*!
    Function can be used to check whether mouse event has
    occured on top of header area.
 */
 bool NmViewerView::eventOnTopOfHeaderArea(QGraphicsSceneMouseEvent *event)
 {
-    NM_FUNCTION;
-    
     bool ret(false);
     if (event && mHeaderWidget) {
         QPointF lastReleasePoint = event->lastPos();
@@ -837,8 +796,6 @@
 */
 NmMailViewerWK* NmViewerView::webView()
 {
-    NM_FUNCTION;
-    
     return mWebView;
 }
 
@@ -889,8 +846,6 @@
 */
 void NmViewerView::setMailboxName()
 {
-    NM_FUNCTION;
-    
     if (mStartParam){
         NmMailboxMetaData *meta = mUiEngine.mailboxById(mStartParam->mailboxId());
         if (meta) {
@@ -906,8 +861,6 @@
 */
 void NmViewerView::contentScrollPositionChanged(const QPointF &newPosition)
 {
-    NM_FUNCTION;
-    
     if (mWebView&&mHeaderWidget){
         QRectF webViewRect = mWebView->geometry();
         QTransform tr;
@@ -935,8 +888,6 @@
 */
 void NmViewerView::createToolBar()
 {
-    NM_FUNCTION;
-    
     HbToolBar *tb = toolBar();
     NmUiExtensionManager &extMngr = mApplication.extManager();
     if (tb && &extMngr && mStartParam) {
@@ -957,8 +908,6 @@
 */
 void NmViewerView::createOptionsMenu()
 {
-    NM_FUNCTION;
-    
 	HbMenu *optionsMenu = menu();
 	NmUiExtensionManager &extMngr = mApplication.extManager();
 	if (optionsMenu && &extMngr && mStartParam) {
@@ -980,19 +929,11 @@
 */
 void NmViewerView::handleActionCommand(NmActionResponse &actionResponse)
 {
-    NM_FUNCTION;
-    
-    bool showSendInProgressNote = false;
-
     // Handle options menu or toolbar
     if (actionResponse.menuType() == NmActionOptionsMenu ||
     	actionResponse.menuType() == NmActionToolbar) {
         switch (actionResponse.responseCommand()) {
             case NmActionResponseCommandReply: {
-                if (mUiEngine.isSendingMessage()) {
-                    showSendInProgressNote = true;
-                    break;
-                }
                 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageEditor,
                     mStartParam->mailboxId(), mStartParam->folderId(),
                     mStartParam->messageId(), NmUiEditorReply);
@@ -1000,10 +941,6 @@
             }
             break;
             case NmActionResponseCommandReplyAll: {
-                if (mUiEngine.isSendingMessage()) {
-                    showSendInProgressNote = true;
-                    break;
-                }
                 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageEditor,
                     mStartParam->mailboxId(), mStartParam->folderId(),
                     mStartParam->messageId(), NmUiEditorReplyAll);
@@ -1011,10 +948,6 @@
             }
             break;
             case NmActionResponseCommandForward: {
-                if (mUiEngine.isSendingMessage()) {
-                    showSendInProgressNote = true;
-                    break;
-                }
                 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageEditor,
                     mStartParam->mailboxId(), mStartParam->folderId(),
                     mStartParam->messageId(), NmUiEditorForward);
@@ -1029,17 +962,6 @@
                 break;
         }
     }
-
-    if (showSendInProgressNote) {
-        QString noteText = hbTrId("txt_mail_dialog_still_sending");
-
-        // get message subject from the message being sent
-        const NmMessage *message = mUiEngine.messageBeingSent();
-        if (message) {
-            noteText = noteText.arg(NmUtilities::truncate(message->envelope().subject(), 20));
-        }
-        HbMessageBox::warning(noteText);
-    }
 }
 
 /*!
@@ -1069,8 +991,6 @@
 */
 void NmViewerView::progressChanged(int value)
 {
-    NM_FUNCTION;
-    
     if (mAttaIndexUnderFetch != NmNotFoundError) {
         // emit signal
         if (mAttaWidget && mAttaWidget->progressValue(mAttaIndexUnderFetch) < value) {
@@ -1084,8 +1004,6 @@
 */
 void NmViewerView::fetchCompleted(int result)
 {
-    NM_FUNCTION;
-    
     if (mAttaWidget && mAttaIndexUnderFetch != NmNotFoundError) {
         if (result == NmNoError) {
             progressValueChanged(mAttaIndexUnderFetch, 100);
@@ -1102,8 +1020,6 @@
 */
 void NmViewerView::messageDeleted(const NmId &mailboxId, const NmId &folderId, const NmId &messageId)
 {
-    NM_FUNCTION;
-    
     if ((mStartParam->viewId() == NmUiViewMessageViewer)
         && (mStartParam->mailboxId()== mailboxId)
         && (mStartParam->folderId()== folderId)
@@ -1117,12 +1033,13 @@
 */
 void NmViewerView::createAndShowWaitDialog()
 {
-    NM_FUNCTION;
-    
     delete mWaitDialog;
     mWaitDialog = NULL;
     // Create new wait dialog and set it to me modal with dimmed background
     mWaitDialog = new HbProgressDialog(HbProgressDialog::WaitDialog);
+    // Connect to observe orientation change events
+    connect(mWaitDialog->mainWindow(), SIGNAL(orientationChanged(Qt::Orientation)),
+                this, SLOT(orientationChanged(Qt::Orientation)));
     mWaitDialog->setModal(true);
     mWaitDialog->setBackgroundFaded(true);
     connect(mWaitDialog, SIGNAL(cancelled()), this, SLOT(waitNoteCancelled()));
@@ -1136,8 +1053,6 @@
 */
 void NmViewerView::setWebViewWidth(int width)
 {
-    NM_FUNCTION;
-    
     // null pointer check for mWebView in calling function
     mWebView->setMinimumWidth(width);
     mWebView->setMaximumWidth(width);
@@ -1149,35 +1064,8 @@
 */
 void NmViewerView::setWebViewHeighth(int height)
 {
-    NM_FUNCTION;
-    
     // null pointer check for mWebView in calling function
     mWebView->setMinimumHeight(height);
     mWebView->setMaximumHeight(height);
     mWebView->setPreferredHeight(height);
 }
-
-/*!
-    Helper function for mouse events.
-*/
-void NmViewerView::handleMouseEvent(QGraphicsSceneMouseEvent *event, bool pressed)
-{
-    NM_FUNCTION;
-    NmMailViewerWK* view = webView();
-    if (event && view && mHeaderWidget && mScrollAreaContents) {
-        QPointF lastReleasePoint = event->pos();
-        QPointF contentWidgetPos = mScrollAreaContents->pos();
-        qreal headerHeight = mHeaderWidget->geometry().height();
-        qreal y = lastReleasePoint.y()-headerHeight;
-        y -= contentWidgetPos.y();
-        qreal x = lastReleasePoint.x()-contentWidgetPos.x();
-        const QPointF pointToWebView(x, y);
-        event->setPos(pointToWebView);
-        event->setAccepted(true);
-        if (pressed) {
-            view->sendMousePressEvent(event);
-        } else {
-            view->sendMouseReleaseEvent(event);
-        }
-    }
-}