diff -r 000000000000 -r 1450b09d0cfd ginebra2/AppContentView.cpp --- /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 +#include +#include +#ifndef NO_QSTM_GESTURE +#include "qstmgestureevent.h" +#endif +#include + + + +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 +