a2c57ec1b4af77ec2c7be910e13fad6cc7f59bff
[WebKit-https.git] / WebKit / qt / Api / qwebpage.h
1 /*
2     Copyright (C) 2007 Trolltech ASA
3     Copyright (C) 2007 Staikos Computing Services Inc.
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     This class provides all functionality needed for loading images, style sheets and html
21     pages from the web. It has a memory cache for these objects.
22 */
23
24 #ifndef QWEBPAGE_H
25 #define QWEBPAGE_H
26
27 #include "qwebsettings.h"
28 #include "qwebkitglobal.h"
29
30 #include <QtCore/qobject.h>
31 #include <QtGui/qwidget.h>
32
33 QT_BEGIN_NAMESPACE
34 class QNetworkProxy;
35 class QUndoStack;
36 class QUrl;
37 class QNetworkRequest;
38 class QNetworkReply;
39 class QNetworkAccessManager;
40 QT_END_NAMESPACE
41
42 class QWebFrame;
43 class QWebNetworkRequest;
44 class QWebHistory;
45
46 class QWebPagePrivate;
47 class QWebFrameData;
48 class QWebNetworkInterface;
49 class QWebPluginFactory;
50 class QWebHitTestResult;
51
52 namespace WebCore {
53     class ChromeClientQt;
54     class EditorClientQt;
55     class FrameLoaderClientQt;
56     class FrameLoadRequest;
57     class InspectorClientQt;
58     class ResourceHandle;
59     class HitTestResult;
60 }
61
62 class QWEBKIT_EXPORT QWebPage : public QObject
63 {
64     Q_OBJECT
65
66     Q_PROPERTY(bool modified READ isModified)
67     Q_PROPERTY(QString selectedText READ selectedText)
68     Q_PROPERTY(QSize viewportSize READ viewportSize WRITE setViewportSize)
69     Q_PROPERTY(bool forwardUnsupportedContent READ forwardUnsupportedContent WRITE setForwardUnsupportedContent)
70     Q_PROPERTY(LinkDelegationPolicy linkDelegationPolicy READ linkDelegationPolicy WRITE setLinkDelegationPolicy)
71     Q_PROPERTY(QPalette palette READ palette WRITE setPalette)
72     Q_ENUMS(LinkDelegationPolicy NavigationType WebAction)
73 public:
74     enum NavigationType {
75         NavigationTypeLinkClicked,
76         NavigationTypeFormSubmitted,
77         NavigationTypeBackOrForward,
78         NavigationTypeReload,
79         NavigationTypeFormResubmitted,
80         NavigationTypeOther
81     };
82
83     enum WebAction {
84         NoWebAction = - 1,
85
86         OpenLink,
87
88         OpenLinkInNewWindow,
89         OpenFrameInNewWindow,
90
91         DownloadLinkToDisk,
92         CopyLinkToClipboard,
93
94         OpenImageInNewWindow,
95         DownloadImageToDisk,
96         CopyImageToClipboard,
97
98         Back,
99         Forward,
100         Stop,
101         Reload,
102
103         Cut,
104         Copy,
105         Paste,
106
107         Undo,
108         Redo,
109         MoveToNextChar,
110         MoveToPreviousChar,
111         MoveToNextWord,
112         MoveToPreviousWord,
113         MoveToNextLine,
114         MoveToPreviousLine,
115         MoveToStartOfLine,
116         MoveToEndOfLine,
117         MoveToStartOfBlock,
118         MoveToEndOfBlock,
119         MoveToStartOfDocument,
120         MoveToEndOfDocument,
121         SelectNextChar,
122         SelectPreviousChar,
123         SelectNextWord,
124         SelectPreviousWord,
125         SelectNextLine,
126         SelectPreviousLine,
127         SelectStartOfLine,
128         SelectEndOfLine,
129         SelectStartOfBlock,
130         SelectEndOfBlock,
131         SelectStartOfDocument,
132         SelectEndOfDocument,
133         DeleteStartOfWord,
134         DeleteEndOfWord,
135
136         SetTextDirectionDefault,
137         SetTextDirectionLeftToRight,
138         SetTextDirectionRightToLeft,
139
140         ToggleBold,
141         ToggleItalic,
142         ToggleUnderline,
143
144         InspectElement,
145
146         WebActionCount
147     };
148
149     enum FindFlag {
150         FindBackward = 1,
151         FindCaseSensitively = 2,
152         FindWrapsAroundDocument = 4
153     };
154     Q_DECLARE_FLAGS(FindFlags, FindFlag)
155
156     enum LinkDelegationPolicy {
157         DontDelegateLinks,
158         DelegateExternalLinks,
159         DelegateAllLinks
160     };
161
162     enum WebWindowType {
163         WebBrowserWindow,
164         WebModalDialog
165     };
166
167     explicit QWebPage(QObject *parent = 0);
168     ~QWebPage();
169
170     QWebFrame *mainFrame() const;
171     QWebFrame *currentFrame() const;
172
173     QWebHistory *history() const;
174     QWebSettings *settings() const;
175
176     void setView(QWidget *view);
177     QWidget *view() const;
178
179     bool isModified() const;
180     QUndoStack *undoStack() const;
181
182 #if QT_VERSION < 0x040400 && !defined(qdoc)
183     void setNetworkInterface(QWebNetworkInterface *interface);
184     QWebNetworkInterface *networkInterface() const;
185
186     // #### why is this in the page itself?
187 #ifndef QT_NO_NETWORKPROXY
188     void setNetworkProxy(const QNetworkProxy& proxy);
189     QNetworkProxy networkProxy() const;
190 #endif
191
192 #else
193     void setNetworkAccessManager(QNetworkAccessManager *manager);
194     QNetworkAccessManager *networkAccessManager() const;
195 #endif
196
197     void setPluginFactory(QWebPluginFactory *factory);
198     QWebPluginFactory *pluginFactory() const;
199
200     quint64 totalBytes() const;
201     quint64 bytesReceived() const;
202
203     QString selectedText() const;
204
205     QAction *action(WebAction action) const;
206     virtual void triggerAction(WebAction action, bool checked = false);
207
208     QSize viewportSize() const;
209     void setViewportSize(const QSize &size) const;
210
211     virtual bool event(QEvent*);
212     bool focusNextPrevChild(bool next);
213
214     QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
215
216     bool findText(const QString &subString, FindFlags options = 0);
217
218     void setForwardUnsupportedContent(bool forward);
219     bool forwardUnsupportedContent() const;
220
221     void setLinkDelegationPolicy(LinkDelegationPolicy policy);
222     LinkDelegationPolicy linkDelegationPolicy() const;
223
224     void setPalette(const QPalette &palette);
225     QPalette palette() const;
226
227     bool swallowContextMenuEvent(QContextMenuEvent *event);
228     void updatePositionDependentActions(const QPoint &pos);
229
230     enum Extension {
231     };
232     class ExtensionOption
233     {};
234     class ExtensionReturn
235     {};
236     virtual bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0);
237     virtual bool supportsExtension(Extension extension) const;
238
239 Q_SIGNALS:
240     void loadProgress(int progress);
241     void linkHovered(const QString &link, const QString &title, const QString &textContent);
242     void statusBarMessage(const QString& text);
243     void selectionChanged();
244     void frameCreated(QWebFrame *frame);
245     void geometryChangeRequested(const QRect& geom);
246     void repaintRequested(const QRect& dirtyRect);
247     void scrollRequested(int dx, int dy, const QRect& scrollViewRect);
248     void linkClicked(const QUrl &url);
249
250     void toolBarVisibilityChangeRequested(bool visible);
251     void statusBarVisibilityChangeRequested(bool visible);
252     void menuBarVisibilityChangeRequested(bool visible);
253
254 #if QT_VERSION >= 0x040400
255     void unsupportedContent(QNetworkReply *reply);
256     void downloadRequested(const QNetworkRequest &request);
257 #endif
258
259     void microFocusChanged();
260
261 protected:
262     virtual QWebPage *createWindow(WebWindowType type);
263     virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues);
264
265 #if QT_VERSION < 0x040400
266     virtual bool acceptNavigationRequest(QWebFrame *frame, const QWebNetworkRequest &request, NavigationType type);
267 #else
268     virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);
269 #endif
270     virtual QString chooseFile(QWebFrame *originatingFrame, const QString& oldFile);
271     virtual void javaScriptAlert(QWebFrame *originatingFrame, const QString& msg);
272     virtual bool javaScriptConfirm(QWebFrame *originatingFrame, const QString& msg);
273     virtual bool javaScriptPrompt(QWebFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result);
274     virtual void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID);
275
276     virtual QString userAgentForUrl(const QUrl& url) const;
277
278 private:
279     Q_PRIVATE_SLOT(d, void _q_onLoadProgressChanged(int))
280     Q_PRIVATE_SLOT(d, void _q_webActionTriggered(bool checked))
281     QWebPagePrivate *d;
282
283     friend class QWebFrame;
284     friend class QWebPagePrivate;
285     friend class WebCore::ChromeClientQt;
286     friend class WebCore::EditorClientQt;
287     friend class WebCore::FrameLoaderClientQt;
288     friend class WebCore::InspectorClientQt;
289     friend class WebCore::ResourceHandle;
290 };
291
292 Q_DECLARE_OPERATORS_FOR_FLAGS(QWebPage::FindFlags)
293
294 #endif