2008-08-15 HÃ¥vard Wall <hwall@trolltech.com>
[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         InsertParagraphSeparator,
146         InsertLineSeparator,
147
148         WebActionCount
149     };
150
151     enum FindFlag {
152         FindBackward = 1,
153         FindCaseSensitively = 2,
154         FindWrapsAroundDocument = 4
155     };
156     Q_DECLARE_FLAGS(FindFlags, FindFlag)
157
158     enum LinkDelegationPolicy {
159         DontDelegateLinks,
160         DelegateExternalLinks,
161         DelegateAllLinks
162     };
163
164     enum WebWindowType {
165         WebBrowserWindow,
166         WebModalDialog
167     };
168
169     explicit QWebPage(QObject *parent = 0);
170     ~QWebPage();
171
172     QWebFrame *mainFrame() const;
173     QWebFrame *currentFrame() const;
174
175     QWebHistory *history() const;
176     QWebSettings *settings() const;
177
178     void setView(QWidget *view);
179     QWidget *view() const;
180
181     bool isModified() const;
182 #ifndef QT_NO_UNDOSTACK
183     QUndoStack *undoStack() const;
184 #endif
185
186 #if QT_VERSION < 0x040400 && !defined(qdoc)
187     void setNetworkInterface(QWebNetworkInterface *interface);
188     QWebNetworkInterface *networkInterface() const;
189
190     // #### why is this in the page itself?
191 #ifndef QT_NO_NETWORKPROXY
192     void setNetworkProxy(const QNetworkProxy& proxy);
193     QNetworkProxy networkProxy() const;
194 #endif
195
196 #else
197     void setNetworkAccessManager(QNetworkAccessManager *manager);
198     QNetworkAccessManager *networkAccessManager() const;
199 #endif
200
201     void setPluginFactory(QWebPluginFactory *factory);
202     QWebPluginFactory *pluginFactory() const;
203
204     quint64 totalBytes() const;
205     quint64 bytesReceived() const;
206
207     QString selectedText() const;
208
209     QAction *action(WebAction action) const;
210     virtual void triggerAction(WebAction action, bool checked = false);
211
212     QSize viewportSize() const;
213     void setViewportSize(const QSize &size) const;
214
215     virtual bool event(QEvent*);
216     bool focusNextPrevChild(bool next);
217
218     QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
219
220     bool findText(const QString &subString, FindFlags options = 0);
221
222     void setForwardUnsupportedContent(bool forward);
223     bool forwardUnsupportedContent() const;
224
225     void setLinkDelegationPolicy(LinkDelegationPolicy policy);
226     LinkDelegationPolicy linkDelegationPolicy() const;
227
228     void setPalette(const QPalette &palette);
229     QPalette palette() const;
230
231     void setEditable(bool editable);
232     bool isEditable() const;
233
234 #ifndef QT_NO_CONTEXTMENU
235     bool swallowContextMenuEvent(QContextMenuEvent *event);
236 #endif
237     void updatePositionDependentActions(const QPoint &pos);
238
239     QMenu *createStandardContextMenu();
240
241     enum Extension {
242     };
243     class ExtensionOption
244     {};
245     class ExtensionReturn
246     {};
247     virtual bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0);
248     virtual bool supportsExtension(Extension extension) const;
249
250 Q_SIGNALS:
251     void loadStarted();
252     void loadProgress(int progress);
253     void loadFinished(bool ok);
254
255     void linkHovered(const QString &link, const QString &title, const QString &textContent);
256     void statusBarMessage(const QString& text);
257     void selectionChanged();
258     void frameCreated(QWebFrame *frame);
259     void geometryChangeRequested(const QRect& geom);
260     void repaintRequested(const QRect& dirtyRect);
261     void scrollRequested(int dx, int dy, const QRect& scrollViewRect);
262     void windowCloseRequested();
263     void printRequested(QWebFrame *frame);
264     void linkClicked(const QUrl &url);
265
266     void toolBarVisibilityChangeRequested(bool visible);
267     void statusBarVisibilityChangeRequested(bool visible);
268     void menuBarVisibilityChangeRequested(bool visible);
269
270 #if QT_VERSION >= 0x040400
271     void unsupportedContent(QNetworkReply *reply);
272     void downloadRequested(const QNetworkRequest &request);
273 #endif
274
275     void microFocusChanged();
276
277 protected:
278     virtual QWebPage *createWindow(WebWindowType type);
279     virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues);
280
281 #if QT_VERSION >= 0x040400
282     virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);
283 #else
284     virtual bool acceptNavigationRequest(QWebFrame *frame, const QWebNetworkRequest &request, NavigationType type);
285 #endif
286     virtual QString chooseFile(QWebFrame *originatingFrame, const QString& oldFile);
287     virtual void javaScriptAlert(QWebFrame *originatingFrame, const QString& msg);
288     virtual bool javaScriptConfirm(QWebFrame *originatingFrame, const QString& msg);
289     virtual bool javaScriptPrompt(QWebFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result);
290     virtual void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID);
291
292     virtual QString userAgentForUrl(const QUrl& url) const;
293
294 private:
295     Q_PRIVATE_SLOT(d, void _q_onLoadProgressChanged(int))
296     Q_PRIVATE_SLOT(d, void _q_webActionTriggered(bool checked))
297     QWebPagePrivate *d;
298
299     friend class QWebFrame;
300     friend class QWebPagePrivate;
301     friend class WebCore::ChromeClientQt;
302     friend class WebCore::EditorClientQt;
303     friend class WebCore::FrameLoaderClientQt;
304     friend class WebCore::InspectorClientQt;
305     friend class WebCore::ResourceHandle;
306 };
307
308 Q_DECLARE_OPERATORS_FOR_FLAGS(QWebPage::FindFlags)
309
310 #endif