1 // Copyright (c) 2011 Hewlett-Packard Development Company, L.P. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef WEBVFX_WEB_CONTENT_H_ 6 #define WEBVFX_WEB_CONTENT_H_ 7 8 9 #include <QMap> 10 11 #ifdef WEBVFX_GRAPHICSVIEW 12 #include <QGraphicsView> 13 #endif 14 #include <QWebPage> 15 #include "webvfx/content.h" 16 #include "webvfx/content_context.h" 17 #include "webvfx/effects.h" 18 19 class QGraphicsWebView; 20 class QImage; 21 class QSize; 22 class QWebFrame; 23 24 namespace WebVfx 25 { 26 27 class Image; 28 class Parameters; 29 class RenderStrategy; 30 class WebPage; 31 32 class WebContent 33 #ifdef WEBVFX_GRAPHICSVIEW 34 : public QGraphicsView 35 #else 36 : public QObject 37 #endif 38 , public virtual Content 39 { 40 Q_OBJECT 41 public: 42 WebContent(const QSize& size, Parameters* parameters); 43 ~WebContent(); 44 45 void loadContent(const QUrl& url); 46 void setContentSize(const QSize& size); getImageTypeMap()47 const Effects::ImageTypeMap& getImageTypeMap() { return contentContext->getImageTypeMap(); }; 48 bool renderContent(double time, Image* renderImage); 49 void paintContent(QPainter* painter); setImage(const QString & name,Image * image)50 void setImage(const QString& name, Image* image) { contentContext->setImage(name, image); } 51 52 QWidget* createView(QWidget* parent); 53 void reload(); 54 55 // For debugging with Viewer 56 QWebSettings* settings(); 57 58 void setTransparent(); 59 60 signals: 61 void contentLoadFinished(bool result); 62 void contentPreLoadFinished(bool result); 63 64 private slots: 65 void injectContentContext(); 66 void webPageLoadFinished(bool result); 67 void contentContextLoadFinished(bool result); 68 69 private: 70 #ifdef WEBVFX_GRAPHICSVIEW 71 QGraphicsWebView* webView; 72 #endif 73 WebPage* webPage; 74 enum LoadStatus { LoadNotFinished, LoadFailed, LoadSucceeded }; 75 LoadStatus pageLoadFinished; 76 LoadStatus contextLoadFinished; 77 ContentContext* contentContext; 78 RenderStrategy* renderStrategy; 79 }; 80 81 //////////////////// 82 83 class QWebFrame; 84 class QNetworkRequest; 85 86 class WebPage : public QWebPage 87 { 88 Q_OBJECT 89 public: 90 WebPage(QObject* parent); 91 92 private slots: 93 bool shouldInterruptJavaScript(); 94 95 protected: 96 void javaScriptAlert(QWebFrame *, const QString &msg); 97 void javaScriptConsoleMessage(const QString &message, int lineNumber, const QString &sourceID); 98 bool acceptNavigationRequest(QWebFrame*, const QNetworkRequest&, NavigationType); 99 }; 100 101 } 102 103 #endif 104