ginebra2/AppContentView.cpp
changeset 0 1450b09d0cfd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/AppContentView.cpp	Tue May 04 12:39:35 2010 +0300
@@ -0,0 +1,211 @@
+/*
+* Copyright (c) 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 "AppContentView.h"
+#include "ChromeWidget.h"
+#include <QGraphicsWebView>
+#include <QWebPage>
+#include <QWebFrame>
+#ifndef NO_QSTM_GESTURE
+#include "qstmgestureevent.h"
+#endif
+#include <QDebug>
+
+
+
+namespace GVA 
+{
+
+  AppContentView::AppContentView(ChromeWidget * chrome, QObject * parent)
+    : ContentViewDelegate(chrome, parent),
+      m_view(new QGraphicsWebView),
+      m_page(new QWebPage),
+      m_timeLine(0),
+      m_zoomIn(false) 
+  {
+#ifndef NO_QSTM_GESTURE
+    m_view->installEventFilter(this);
+#endif  
+    m_page->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
+    m_page->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
+    //NB: Here's how to set default webview backgound color
+    QPalette viewPalette = m_view->palette();
+    viewPalette.setBrush(QPalette::Base, Qt::white);
+    //viewPalette.setColor(QPalette::Window, Qt::transparent);
+    m_page->setPalette(viewPalette);
+    m_view->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+    m_view->setPage(m_page);
+    setObjectName("appView");
+    QObject::connect(m_view, SIGNAL(titleChanged(const QString &)), this, SIGNAL(titleChanged(const QString &)));
+    QObject::connect(m_view, SIGNAL(loadStarted()), this, SIGNAL(loadStarted()));
+    QObject::connect(m_view, SIGNAL(loadProgress(int)), this, SIGNAL(loadProgress(int)));
+    QObject::connect(m_view, SIGNAL(loadFinished(bool)), this, SIGNAL(loadFinished(bool)));
+    QObject::connect(m_view, SIGNAL(urlChanged(const QUrl&)), this, SLOT(onUrlChanged(const QUrl&)));
+    QObject::connect(m_page->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SIGNAL(javaScriptWindowObjectCleared()));
+ }
+  
+  AppContentView::~AppContentView()
+  {
+    delete m_timeLine;
+    delete m_page;
+    delete m_view;
+  }
+
+  void AppContentView::load(const QString& url)
+  {
+    // TO DO: need to filter out non-local URLs.  Should only load local files.
+      
+	qDebug() << "AppContentView::load: " << url;
+    m_page->mainFrame()->load(QUrl(url));
+    //m_page->setViewportSize(m_page->mainFrame()->contentsSize()); //NB:?
+  }
+
+  void AppContentView::setHtml(const QString& html)
+  {
+    m_view->setHtml(html);
+    // m_page->setViewportSize(m_page->mainFrame()->contentsSize()); //NB:?
+  }  
+
+  void AppContentView::triggerAction(const QString & action)
+  {
+    QWebPage::WebAction webAction;
+    if(action=="Stop")
+      webAction = QWebPage::Stop;
+    else if (action=="Back")
+      webAction = QWebPage::Back;
+    else if(action=="Reload")
+      webAction = QWebPage::Reload;
+    else if (action=="Forward")
+      webAction = QWebPage::Forward;
+    else
+      return;
+    m_view->triggerPageAction(webAction);
+  } 
+
+  void AppContentView::stop()
+  {
+    m_view->stop();
+  }
+  
+  void AppContentView::back()
+  {
+    m_view->back();
+  }
+  
+  void AppContentView::forward()
+  {
+    m_view->forward();
+  }
+  
+  void AppContentView::reload()
+  {
+    m_view->reload();
+  }
+  
+  void AppContentView::zoomBy(qreal delta)
+  {
+    m_page->mainFrame()->setZoomFactor(m_page->mainFrame()->zoomFactor() + delta);
+  }
+
+  void AppContentView::scrollBy(int deltaX, int deltaY)
+  {
+    m_page->mainFrame()->setScrollPosition(m_page->mainFrame()->scrollPosition() + QPoint(deltaX, deltaY));
+  }
+
+  int AppContentView::scrollX()
+  {
+    return m_page->mainFrame()->scrollPosition().x();
+  }
+
+  int AppContentView::scrollY()
+  {
+    return m_page->mainFrame()->scrollPosition().y();
+  }
+
+  int AppContentView::contentWidth()
+  {
+    return m_page->mainFrame()->contentsSize().width();
+  }
+
+  int AppContentView::contentHeight()
+  {
+    return m_page->mainFrame()->contentsSize().height();
+  }
+
+  void AppContentView::onUrlChanged(const QUrl& url)
+  {
+    emit urlChanged(url.toString());
+  }
+
+
+  void AppContentView::updateZoom(qreal delta){
+    if(m_zoomIn)
+      zoomBy(0.1);
+    else
+      zoomBy(-0.1);
+  }
+
+
+  void AppContentView::zoom(bool in)
+  {
+    m_zoomIn = in;
+    if(!m_timeLine) {
+      m_timeLine = new QTimeLine();
+      connect(m_timeLine, SIGNAL(valueChanged(qreal)),
+	      this, SLOT(updateZoom(qreal)));
+    }
+    else {
+      m_timeLine->stop();
+    }
+    m_timeLine->start();
+  }
+
+  void AppContentView::toggleZoom(){
+    zoom(!m_zoomIn);
+  }
+
+  void AppContentView::stopZoom() {
+    m_timeLine->stop();
+  }
+
+  void AppContentView::addJSObjectToWindow(QObject *object) {
+    m_page->mainFrame()->addToJavaScriptWindowObject(object->objectName(), object);
+  }
+#ifndef NO_QSTM_GESTURE
+  bool AppContentView::eventFilter(QObject* object, QEvent* event)
+  {
+	  if (event->type() == QEvent::Gesture) {
+		  QStm_Gesture* gesture = getQStmGesture(event);
+		  if (gesture) {
+		      QStm_GestureType gtype = gesture->getGestureStmType();
+		  	  if (gtype == QStmTapGestureType) {
+				  QPoint gpos = gesture->position();
+				  QWidget* topWidget = QApplication::topLevelAt(gpos);
+				  QPoint pos = topWidget->mapFromGlobal(gpos);
+				  QWidget* w = topWidget->childAt(pos);
+				  gesture->sendMouseEvents(w);	   
+				  return true;
+			  }  
+		  }
+		  return true;
+	  }
+	  return false;
+  }
+#endif
+} // end of namespace GVA
+