1/*
2    Copyright (C) 2008, 2009 Nokia Corporation and/or its subsidiary(-ies)
3    Copyright (C) 2008 Holger Hans Peter Freyther
4
5    This library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Library General Public
7    License as published by the Free Software Foundation; either
8    version 2 of the License, or (at your option) any later version.
9
10    This library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Library General Public License for more details.
14
15    You should have received a copy of the GNU Library General Public License
16    along with this library; see the file COPYING.LIB.  If not, write to
17    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18    Boston, MA 02110-1301, USA.
19*/
20
21#ifndef qwebpage_p_h
22#define qwebpage_p_h
23
24#include "QWebPageAdapter.h"
25
26#include "qwebframe.h"
27#include "qwebpage.h"
28
29#include <QPointer>
30#include <qevent.h>
31#include <qgesture.h>
32#include <qgraphicssceneevent.h>
33#include <qgraphicswidget.h>
34#include <qnetworkproxy.h>
35
36
37namespace WebCore {
38class ContextMenuClientQt;
39class ContextMenuItem;
40class ContextMenu;
41class Document;
42class EditorClientQt;
43class Element;
44class IntRect;
45class Node;
46class NodeList;
47class Frame;
48}
49
50QT_BEGIN_NAMESPACE
51class QUndoStack;
52class QMenu;
53class QBitArray;
54QT_END_NAMESPACE
55
56class QtPluginWidgetAdapter;
57class QWebInspector;
58class QWebFrameAdapter;
59class UndoStepQt;
60
61class QtViewportAttributesPrivate : public QSharedData {
62public:
63    QtViewportAttributesPrivate(QWebPage::ViewportAttributes* qq)
64        : q(qq)
65    { }
66
67    QWebPage::ViewportAttributes* q;
68};
69
70class QWebPagePrivate : public QWebPageAdapter {
71public:
72    QWebPagePrivate(QWebPage*);
73    ~QWebPagePrivate();
74
75    static WebCore::Page* core(const QWebPage*);
76
77    // Adapter implementation
78    virtual void show() OVERRIDE;
79    virtual void setFocus() OVERRIDE;
80    virtual void unfocus() OVERRIDE;
81    virtual void setWindowRect(const QRect &) OVERRIDE;
82    virtual QSize viewportSize() const OVERRIDE;
83    virtual QWebPageAdapter* createWindow(bool /*dialog*/) OVERRIDE;
84    virtual QObject* handle() OVERRIDE { return q; }
85    virtual void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID) OVERRIDE;
86    virtual void javaScriptAlert(QWebFrameAdapter*, const QString& msg) OVERRIDE;
87    virtual bool javaScriptConfirm(QWebFrameAdapter*, const QString& msg) OVERRIDE;
88    virtual bool javaScriptPrompt(QWebFrameAdapter*, const QString& msg, const QString& defaultValue, QString* result) OVERRIDE;
89    virtual bool shouldInterruptJavaScript() OVERRIDE;
90    virtual void printRequested(QWebFrameAdapter*) OVERRIDE;
91    virtual void databaseQuotaExceeded(QWebFrameAdapter*, const QString& databaseName) OVERRIDE;
92    virtual void applicationCacheQuotaExceeded(QWebSecurityOrigin*, quint64 defaultOriginQuota, quint64 totalSpaceNeeded) OVERRIDE;
93    virtual void setToolTip(const QString&) OVERRIDE;
94#if USE(QT_MULTIMEDIA)
95    virtual QWebFullScreenVideoHandler* createFullScreenVideoHandler() OVERRIDE;
96#endif
97    virtual QWebFrameAdapter* mainFrameAdapter() OVERRIDE;
98    virtual QStringList chooseFiles(QWebFrameAdapter*, bool allowMultiple, const QStringList& suggestedFileNames) OVERRIDE;
99    virtual QColor colorSelectionRequested(const QColor& selectedColor) OVERRIDE;
100    virtual QWebSelectMethod* createSelectPopup() OVERRIDE;
101    virtual QRect viewRectRelativeToWindow() OVERRIDE;
102    virtual void geolocationPermissionRequested(QWebFrameAdapter*) OVERRIDE;
103    virtual void geolocationPermissionRequestCancelled(QWebFrameAdapter*) OVERRIDE;
104    virtual void notificationsPermissionRequested(QWebFrameAdapter*) OVERRIDE;
105    virtual void notificationsPermissionRequestCancelled(QWebFrameAdapter*) OVERRIDE;
106
107    virtual void respondToChangedContents() OVERRIDE;
108    virtual void respondToChangedSelection() OVERRIDE;
109    virtual void microFocusChanged() OVERRIDE;
110    virtual void triggerCopyAction() OVERRIDE;
111    virtual void triggerActionForKeyEvent(QKeyEvent*) OVERRIDE;
112    virtual void clearUndoStack() OVERRIDE;
113    virtual bool canUndo() const OVERRIDE;
114    virtual bool canRedo() const OVERRIDE;
115    virtual void undo() OVERRIDE;
116    virtual void redo() OVERRIDE;
117    virtual void createUndoStep(QSharedPointer<UndoStepQt>) OVERRIDE;
118    virtual const char* editorCommandForKeyEvent(QKeyEvent*) OVERRIDE;
119
120    void updateNavigationActions() OVERRIDE;
121
122    virtual QObject* inspectorHandle() OVERRIDE;
123    virtual void setInspectorFrontend(QObject*) OVERRIDE;
124    virtual void setInspectorWindowTitle(const QString&) OVERRIDE;
125    virtual void createWebInspector(QObject** inspectorView, QWebPageAdapter** inspectorPage) OVERRIDE;
126    virtual QStringList menuActionsAsText() OVERRIDE;
127    virtual void emitViewportChangeRequested() OVERRIDE;
128    virtual bool acceptNavigationRequest(QWebFrameAdapter*, const QNetworkRequest&, int type) OVERRIDE;
129    virtual void emitRestoreFrameStateRequested(QWebFrameAdapter*) OVERRIDE;
130    virtual void emitSaveFrameStateRequested(QWebFrameAdapter*, QWebHistoryItem*) OVERRIDE;
131    virtual void emitDownloadRequested(const QNetworkRequest&) OVERRIDE;
132    virtual void emitFrameCreated(QWebFrameAdapter*) OVERRIDE;
133    virtual QString userAgentForUrl(const QUrl &url) const OVERRIDE { return q->userAgentForUrl(url); }
134    virtual bool supportsErrorPageExtension() const OVERRIDE { return q->supportsExtension(QWebPage::ErrorPageExtension); }
135    virtual bool errorPageExtension(ErrorPageOption *, ErrorPageReturn *) OVERRIDE;
136    virtual QtPluginWidgetAdapter* createPlugin(const QString &, const QUrl &, const QStringList &, const QStringList &) OVERRIDE;
137    virtual QtPluginWidgetAdapter* adapterForWidget(QObject *) const OVERRIDE;
138    virtual bool requestSoftwareInputPanel() const OVERRIDE;
139    virtual void createAndSetCurrentContextMenu(const QList<MenuItemDescription>&, QBitArray*) OVERRIDE;
140    virtual bool handleScrollbarContextMenuEvent(QContextMenuEvent*, bool, ScrollDirection*, ScrollGranularity*) OVERRIDE;
141
142
143    void createMainFrame();
144
145    void _q_webActionTriggered(bool checked);
146    void updateAction(QWebPage::WebAction);
147    void updateEditorActions();
148
149    void timerEvent(QTimerEvent*);
150
151#ifndef QT_NO_CONTEXTMENU
152    void contextMenuEvent(const QPoint& globalPos);
153#endif
154    void keyPressEvent(QKeyEvent*);
155    void keyReleaseEvent(QKeyEvent*);
156
157    template<class T> void dragEnterEvent(T*);
158    template<class T> void dragMoveEvent(T*);
159    template<class T> void dropEvent(T*);
160
161    void shortcutOverrideEvent(QKeyEvent*);
162    void leaveEvent(QEvent*);
163
164    bool gestureEvent(QGestureEvent*);
165
166
167    void setInspector(QWebInspector*);
168    QWebInspector* getOrCreateInspector();
169
170#ifndef QT_NO_SHORTCUT
171    static QWebPage::WebAction editorActionForKeyEvent(QKeyEvent*);
172#endif
173    static const char* editorCommandForWebActions(QWebPage::WebAction);
174
175    QWebPage *q;
176    QPointer<QWebFrame> mainFrame;
177
178#ifndef QT_NO_UNDOSTACK
179    QUndoStack *undoStack;
180#endif
181
182    QPointer<QWidget> view;
183
184    QWebPage::LinkDelegationPolicy linkPolicy;
185
186    QSize m_viewportSize;
187    QSize fixedLayoutSize;
188
189    QWebHitTestResult hitTestResult;
190#ifndef QT_NO_CONTEXTMENU
191    QPointer<QMenu> currentContextMenu;
192#endif
193    QPalette palette;
194    bool useFixedLayout;
195
196    QAction *actions[QWebPage::WebActionCount];
197
198    QWidget* inspectorFrontend;
199    QWebInspector* inspector;
200    bool inspectorIsInternalOnly; // True if created through the Inspect context menu action
201    Qt::DropAction m_lastDropAction;
202};
203
204#endif
205