emailuis/nmailui/src/nmviewerwebview.cpp
changeset 54 997a02608b3a
parent 53 bf7eb7911fc5
child 59 16ed8d08d0b1
equal deleted inserted replaced
53:bf7eb7911fc5 54:997a02608b3a
     9  * Initial Contributors:
     9  * Initial Contributors:
    10  * Nokia Corporation - initial contribution.
    10  * Nokia Corporation - initial contribution.
    11  *
    11  *
    12  * Contributors:
    12  * Contributors:
    13  *
    13  *
    14  * Description:
    14  * Description: NMailUI web viewer. Inherits from
    15  *
    15  *              QGrapohicsWebView and handles gestures, etc.
    16  */
    16  */
    17 
    17 
    18 #include "nmuiheaders.h"
    18 #include "nmuiheaders.h"
    19 
    19 
    20 /*!
    20 /*!
    21     Constructor.
    21     Constructor.
    22 */
    22 */
    23 NmMailViewerWK::NmMailViewerWK()
    23 NmMailViewerWK::NmMailViewerWK()
    24 : QGraphicsWebView()
    24 : QGraphicsWebView(),
       
    25   mContent(),
       
    26   mSuppressRelease(false)
    25 {
    27 {
       
    28     // Subscribe this widget to tap and pinch gestures.
       
    29     grabGesture(Qt::TapGesture);
    26     grabGesture(Qt::PinchGesture);
    30     grabGesture(Qt::PinchGesture);
    27     installEventFilter(new NmEventFilterWK(this));
    31     // Prevent this widget from accepting focus.
    28     setFlag(QGraphicsItem::ItemIsFocusable,false);
    32     setFocusPolicy(Qt::NoFocus);
    29 }
    33 }
    30 
    34 
    31 /*!
    35 /*!
    32     Destructor.
    36     Destructor.
    33  */
    37  */
    34 NmMailViewerWK::~NmMailViewerWK()
    38 NmMailViewerWK::~NmMailViewerWK()
    35 {
    39 {
    36     mContent.clear();
    40     mContent.clear();
    37 }
       
    38 
       
    39 /*!
       
    40     Sets the parent view.
       
    41  */
       
    42 void NmMailViewerWK::setParentView(NmViewerView *parentView)
       
    43 {
       
    44     mParentView = parentView;
       
    45 }
    41 }
    46 
    42 
    47 /*!
    43 /*!
    48     Adds content into web view.
    44     Adds content into web view.
    49  */
    45  */
    67         if (mContent.contains(key)) {
    63         if (mContent.contains(key)) {
    68             partId = mContent[key].mPartId;
    64             partId = mContent[key].mPartId;
    69             isFetched = mContent[key].mIsFetched;
    65             isFetched = mContent[key].mIsFetched;
    70             return mContent[key].mData;
    66             return mContent[key].mData;
    71         }
    67         }
    72         return 0;
       
    73     }
    68     }
    74     return 0;
    69     return 0;
    75 }
    70 }
    76 
    71 
    77 /*!
    72 /*!
    78     Filter class' constructor.
    73     This is the main event handler that processes all incoming events in an
       
    74     appropriate manner.
    79  */
    75  */
    80 NmEventFilterWK::NmEventFilterWK(QObject* parent)
    76 bool NmMailViewerWK::event(QEvent* event)
    81 : QObject(parent)
       
    82 {
    77 {
    83 }
       
    84 
       
    85 /*
       
    86     Filters events if this object has been installed as an event filter.
       
    87  */
       
    88 bool NmEventFilterWK::eventFilter(QObject* object, QEvent* event) {
       
    89     Q_UNUSED(object);
       
    90     bool consumed = false;
    78     bool consumed = false;
    91     if (event) {
    79     if (event) {
    92         switch (event->type()) {
    80         switch (event->type()) {
    93         case QEvent::Gesture:
    81         case QEvent::Gesture:
    94             consumed = gestureEvent(static_cast<QGestureEvent*>(event));
    82             // Handle gesture events.
    95             break;
    83             gestureEvent(static_cast<QGestureEvent*>(event));
    96         case QEvent::GraphicsSceneMouseDoubleClick:
    84             consumed = event->isAccepted();
    97             // Handle double click (instant zoom).
       
    98             // At the moment we simply consume the event.
       
    99             event->accept();
       
   100             consumed = true;
       
   101             break;
    85             break;
   102         case QEvent::GraphicsSceneContextMenu:
    86         case QEvent::GraphicsSceneContextMenu:
   103         case QEvent::GraphicsSceneMouseMove:
    87             // Handle context-menu events.
   104             event->accept();
    88             // contextMenuEvent() is invoked directly in order to override
   105             consumed = true;
    89             // text selection in QWebPage.
       
    90             contextMenuEvent(static_cast<QGraphicsSceneContextMenuEvent*>(event));
       
    91             consumed = event->isAccepted();
   106             break;
    92             break;
   107         default:
    93         default:
       
    94             // Invoke base class' event handler.
       
    95             consumed = QGraphicsWebView::event(event);
   108             break;
    96             break;
   109         }
    97         }
   110     }
    98     }
   111     return consumed;
    99     return consumed;
   112 }
   100 }
   113 
   101 
   114 /*!
   102 /*!
   115     Handles gesture events. This function is invoked by the eventFilter()
   103     Handles context-menu events.
   116     function in case of gesture events.
       
   117  */
   104  */
   118 bool NmEventFilterWK::gestureEvent(QGestureEvent* event) {
   105 void NmMailViewerWK::contextMenuEvent(QGraphicsSceneContextMenuEvent* event)
   119     bool consumed = false;
   106 {
   120     if (event) {
   107     if (event) {
       
   108         // Suppress context-menu invocations.
       
   109         event->accept();
       
   110     }
       
   111 }
       
   112 
       
   113 /*!
       
   114     Handles gesture events.
       
   115  */
       
   116 void NmMailViewerWK::gestureEvent(QGestureEvent* event)
       
   117 {
       
   118     if (event) {
       
   119         if (QTapGesture* tap = static_cast<QTapGesture*>(event->gesture(Qt::TapGesture))) {
       
   120             switch (tap->state()) {
       
   121             case Qt::GestureCanceled:
       
   122                 // Tap cancellation suppresses the following mouse release.
       
   123                 mSuppressRelease = true;
       
   124                 break;
       
   125             default:
       
   126                 // Other states disclose the following mouse release.
       
   127                 mSuppressRelease = false;
       
   128                 break;
       
   129             }
       
   130             event->accept();
       
   131         }
   121         if (QPinchGesture* pinch = static_cast<QPinchGesture*>(event->gesture(Qt::PinchGesture))) {
   132         if (QPinchGesture* pinch = static_cast<QPinchGesture*>(event->gesture(Qt::PinchGesture))) {
   122             // Handle pinch (zoom).
   133             // Handle pinch (zoom).
   123             // At the moment we simply consume the event.
   134             // At the moment we simply consume the event.
   124             event->accept();
   135             event->accept();
   125             consumed = true;
       
   126         }
   136         }
   127     }
   137     }
   128     return consumed;
       
   129 }
   138 }
       
   139 
       
   140 /*!
       
   141     Handles double-click events.
       
   142  */
       
   143 void NmMailViewerWK::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
       
   144 {
       
   145     if (event) {
       
   146         // Handle double clicks (instant zoom).
       
   147         // At the moment we simply consume the event.
       
   148         event->accept();
       
   149     }
       
   150 }
       
   151 
       
   152 /*!
       
   153     Handles mouse-move events.
       
   154  */
       
   155 void NmMailViewerWK::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
       
   156 {
       
   157     if (event) {
       
   158         // Suppress drag selection.
       
   159         event->accept();
       
   160     }
       
   161 }
       
   162 
       
   163 /*!
       
   164     Handles mouse-release events.
       
   165  */
       
   166 void NmMailViewerWK::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
       
   167 {
       
   168     if (event) {
       
   169         // Suppress mouse release if the previous tap was cancelled.
       
   170         // Otherwise, invoke the base class' event handler.
       
   171         if (mSuppressRelease) {
       
   172             event->accept();
       
   173         } else {
       
   174             QGraphicsWebView::mouseReleaseEvent(event);
       
   175         }
       
   176     }
       
   177 }