68a351db7f478f532a70daddd41289457b9f9264
[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 "qwebpagehistory.h"
28 #include "qwebsettings.h"
29 #include <qwebkitglobal.h>
30
31 #include <qwidget.h>
32 class QNetworkProxy;
33 class QUndoStack;
34 class QUrl;
35 class QWebFrame;
36 class QWebNetworkRequest;
37
38 class QWebPagePrivate;
39 class QWebFrameData;
40 class QWebNetworkInterface;
41
42 namespace WebCore {
43     class ChromeClientQt;
44     class FrameLoaderClientQt;
45     class FrameLoadRequest;
46     class EditorClientQt;
47     class ResourceHandle;
48     class HitTestResult;
49 }
50
51 class QWEBKIT_EXPORT QWebPage : public QWidget
52 {
53     Q_OBJECT
54
55     Q_PROPERTY(bool modified READ isModified)
56     Q_PROPERTY(QString selectedText READ selectedText)
57 public:
58     enum NavigationRequestResponse {
59         AcceptNavigationRequest,
60         IgnoreNavigationRequest
61     };
62
63     enum NavigationType {
64         NavigationTypeLinkClicked,
65         NavigationTypeFormSubmitted,
66         NavigationTypeBackForward,
67         NavigationTypeReload,
68         NavigationTypeFormResubmitted,
69         NavigationTypeOther
70     };
71
72     enum WebAction {
73         NoWebAction = - 1,
74
75         OpenLink,
76
77         OpenLinkInNewWindow,
78         OpenFrameInNewWindow,
79
80         DownloadLinkToDisk,
81         CopyLinkToClipboard,
82
83         OpenImageInNewWindow,
84         DownloadImageToDisk,
85         CopyImageToClipboard,
86
87         GoBack,
88         GoForward,
89         Stop,
90         Reload,
91
92         Cut,
93         Copy,
94         Paste,
95
96         Undo,
97         Redo,
98         MoveToNextChar,
99         MoveToPreviousChar,
100         MoveToNextWord,
101         MoveToPreviousWord,
102         MoveToNextLine,
103         MoveToPreviousLine,
104         MoveToStartOfLine,
105         MoveToEndOfLine,
106         MoveToStartOfBlock,
107         MoveToEndOfBlock,
108         MoveToStartOfDocument,
109         MoveToEndOfDocument,
110         SelectNextChar,
111         SelectPreviousChar,
112         SelectNextWord,
113         SelectPreviousWord,
114         SelectNextLine,
115         SelectPreviousLine,
116         SelectStartOfLine,
117         SelectEndOfLine,
118         SelectStartOfBlock,
119         SelectEndOfBlock,
120         SelectStartOfDocument,
121         SelectEndOfDocument,
122         DeleteStartOfWord,
123         DeleteEndOfWord,
124
125         SetTextDirectionDefault,
126         SetTextDirectionLeftToRight,
127         SetTextDirectionRightToLeft,
128
129         ToggleBold,
130         ToggleItalic,
131         ToggleUnderline,
132
133         WebActionCount
134     };
135
136
137     QWebPage(QWidget *parent);
138     ~QWebPage();
139
140     void open(const QUrl &url);
141     void open(const QWebNetworkRequest &request);
142
143     QWebFrame *mainFrame() const;
144
145     QWebPageHistory *history() const;
146
147     QWebSettings *settings();
148
149     QSize sizeHint() const;
150
151     QString title() const;
152     QUrl url() const;
153     QPixmap icon() const;
154
155     bool isModified() const;
156     QUndoStack *undoStack() const;
157
158     void setNetworkInterface(QWebNetworkInterface *interface);
159     QWebNetworkInterface *networkInterface() const;
160
161     // #### why is this in the page itself?
162 #ifndef QT_NO_NETWORKPROXY
163     void setNetworkProxy(const QNetworkProxy& proxy);
164     QNetworkProxy networkProxy() const;
165 #endif
166
167     quint64 totalBytes() const;
168     quint64 bytesReceived() const;
169
170     QString selectedText() const;
171
172     QAction *action(WebAction action) const;
173     virtual void triggerAction(WebAction action, bool checked = false);
174
175 public slots:
176     /**
177      * Stops loading of the page, if loading.
178      */
179     void stop();
180
181 signals:
182     /**
183      * Signal is emitted when load is started on one of the child
184      * frames of the page. The frame on which the load started
185      * is passed.
186      */
187     void loadStarted(QWebFrame *frame);
188     /**
189      * Signal is emitted when the global progress status changes.
190      * It accumulates changes from all the child frames.
191      */
192     void loadProgressChanged(int progress);
193     /**
194      * Signal is emitted when load has been finished on one of
195      * the child frames of the page. The frame on which the
196      * load finished is passed as an argument.
197      */
198     void loadFinished(QWebFrame *frame);
199     /**
200      * Signal is emitted when the title of this page has changed.
201      * Applies only to the main frame.  Sub-frame titles do not trigger this.
202      */
203     void titleChanged(const QString& title);
204     /**
205      * Signal is emitted when the mouse is hovering over a link.
206      * The first parameter is the link url, the second is the link title
207      * if any. Method is emitter with both empty parameters when the mouse
208      * isn't hovering over any link element.
209      */
210     void hoveringOverLink(const QString &link, const QString &title);
211     /**
212      * Signal is emitted when the statusbar text is changed by the page.
213      */
214     void statusBarTextChanged(const QString& text);
215     /**
216      * Signal is emitted when an icon ("favicon") is loaded from the site.
217      */
218     void iconLoaded();
219
220     void selectionChanged();
221
222     /**
223       * Signal is emitted when the mainframe()'s initial layout is completed.
224      */
225     void initialLayoutComplete();
226
227     // ### call addedToHistory instead, something more signal'ish
228     void addToHistory(const QUrl&);
229
230     void frameCreated(QWebFrame *frame);
231
232     void geometryChangeRequest(const QRect& geom);
233
234 protected:
235     virtual QWebPage *createWindow();
236     virtual QWebPage *createModalDialog();
237     virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues);
238
239     virtual NavigationRequestResponse navigationRequested(QWebFrame *frame, const QWebNetworkRequest &request, NavigationType type);
240     // ### do we need the frame? maybe include "file dialog" in the name
241     virtual QString chooseFile(QWebFrame *frame, const QString& oldFile);
242     // ### can we unify the next 3 methods? do we need the frame?
243     virtual void javaScriptAlert(QWebFrame *frame, const QString& msg);
244     virtual bool javaScriptConfirm(QWebFrame *frame, const QString& msg);
245     virtual bool javaScriptPrompt(QWebFrame *frame, const QString& msg, const QString& defaultValue, QString* result);
246     virtual void javaScriptConsoleMessage(const QString& message, unsigned int lineNumber, const QString& sourceID);
247
248     virtual QString userAgentFor(const QUrl& url) const;
249
250     virtual void resizeEvent(QResizeEvent*);
251     virtual void paintEvent(QPaintEvent*);
252     virtual void mouseMoveEvent(QMouseEvent*);
253     virtual void mousePressEvent(QMouseEvent*);
254     virtual void mouseDoubleClickEvent(QMouseEvent*);
255     virtual void mouseReleaseEvent(QMouseEvent*);
256     virtual void contextMenuEvent(QContextMenuEvent*);
257     virtual void wheelEvent(QWheelEvent*);
258     virtual void keyPressEvent(QKeyEvent*);
259     virtual void keyReleaseEvent(QKeyEvent*);
260     virtual void focusInEvent(QFocusEvent*);
261     virtual void focusOutEvent(QFocusEvent*);
262     virtual bool focusNextPrevChild(bool next);
263
264     virtual void dragEnterEvent(QDragEnterEvent *);
265     virtual void dragLeaveEvent(QDragLeaveEvent *);
266     virtual void dragMoveEvent(QDragMoveEvent *);
267     virtual void dropEvent(QDropEvent *);
268
269 private:
270     Q_PRIVATE_SLOT(d, void _q_onLoadProgressChanged(int))
271     Q_PRIVATE_SLOT(d, void _q_webActionTriggered(bool checked));
272     friend class QWebFrame;
273     friend class QWebPagePrivate;
274     friend class WebCore::ChromeClientQt;
275     friend class WebCore::EditorClientQt;
276     friend class WebCore::FrameLoaderClientQt;
277     friend class WebCore::ResourceHandle;
278     QWebPagePrivate *d;
279 };
280
281
282
283 #endif