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