2008-08-05 Tor Arne Vestbø <tavestbo@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     QUndoStack *undoStack() const;
183
184 #if QT_VERSION < 0x040400 && !defined(qdoc)
185     void setNetworkInterface(QWebNetworkInterface *interface);
186     QWebNetworkInterface *networkInterface() const;
187
188     // #### why is this in the page itself?
189 #ifndef QT_NO_NETWORKPROXY
190     void setNetworkProxy(const QNetworkProxy& proxy);
191     QNetworkProxy networkProxy() const;
192 #endif
193
194 #else
195     void setNetworkAccessManager(QNetworkAccessManager *manager);
196     QNetworkAccessManager *networkAccessManager() const;
197 #endif
198
199     void setPluginFactory(QWebPluginFactory *factory);
200     QWebPluginFactory *pluginFactory() const;
201
202     quint64 totalBytes() const;
203     quint64 bytesReceived() const;
204
205     QString selectedText() const;
206
207     QAction *action(WebAction action) const;
208     virtual void triggerAction(WebAction action, bool checked = false);
209
210     QSize viewportSize() const;
211     void setViewportSize(const QSize &size) const;
212
213     virtual bool event(QEvent*);
214     bool focusNextPrevChild(bool next);
215
216     QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
217
218     bool findText(const QString &subString, FindFlags options = 0);
219
220     void setForwardUnsupportedContent(bool forward);
221     bool forwardUnsupportedContent() const;
222
223     void setLinkDelegationPolicy(LinkDelegationPolicy policy);
224     LinkDelegationPolicy linkDelegationPolicy() const;
225
226     void setPalette(const QPalette &palette);
227     QPalette palette() const;
228
229     void setEditable(bool editable);
230     bool isEditable() const;
231
232     bool swallowContextMenuEvent(QContextMenuEvent *event);
233     void updatePositionDependentActions(const QPoint &pos);
234
235     QMenu *createStandardContextMenu();
236
237     enum Extension {
238     };
239     class ExtensionOption
240     {};
241     class ExtensionReturn
242     {};
243     virtual bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0);
244     virtual bool supportsExtension(Extension extension) const;
245
246 Q_SIGNALS:
247     void loadStarted();
248     void loadProgress(int progress);
249     void loadFinished(bool ok);
250
251     void linkHovered(const QString &link, const QString &title, const QString &textContent);
252     void statusBarMessage(const QString& text);
253     void selectionChanged();
254     void frameCreated(QWebFrame *frame);
255     void geometryChangeRequested(const QRect& geom);
256     void repaintRequested(const QRect& dirtyRect);
257     void scrollRequested(int dx, int dy, const QRect& scrollViewRect);
258     void windowCloseRequested();
259     void printRequested(QWebFrame *frame);
260     void linkClicked(const QUrl &url);
261
262     void toolBarVisibilityChangeRequested(bool visible);
263     void statusBarVisibilityChangeRequested(bool visible);
264     void menuBarVisibilityChangeRequested(bool visible);
265
266 #if QT_VERSION >= 0x040400
267     void unsupportedContent(QNetworkReply *reply);
268     void downloadRequested(const QNetworkRequest &request);
269 #endif
270
271     void microFocusChanged();
272
273 protected:
274     virtual QWebPage *createWindow(WebWindowType type);
275     virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues);
276
277 #if QT_VERSION >= 0x040400
278     virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);
279 #else
280     virtual bool acceptNavigationRequest(QWebFrame *frame, const QWebNetworkRequest &request, NavigationType type);
281 #endif
282     virtual QString chooseFile(QWebFrame *originatingFrame, const QString& oldFile);
283     virtual void javaScriptAlert(QWebFrame *originatingFrame, const QString& msg);
284     virtual bool javaScriptConfirm(QWebFrame *originatingFrame, const QString& msg);
285     virtual bool javaScriptPrompt(QWebFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result);
286     virtual void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID);
287
288     virtual QString userAgentForUrl(const QUrl& url) const;
289
290 private:
291     Q_PRIVATE_SLOT(d, void _q_onLoadProgressChanged(int))
292     Q_PRIVATE_SLOT(d, void _q_webActionTriggered(bool checked))
293     QWebPagePrivate *d;
294
295     friend class QWebFrame;
296     friend class QWebPagePrivate;
297     friend class WebCore::ChromeClientQt;
298     friend class WebCore::EditorClientQt;
299     friend class WebCore::FrameLoaderClientQt;
300     friend class WebCore::InspectorClientQt;
301     friend class WebCore::ResourceHandle;
302 };
303
304 Q_DECLARE_OPERATORS_FOR_FLAGS(QWebPage::FindFlags)
305
306 #endif