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