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