Renamed QWebPage::NumWebActions to QWebPage::WebActionCount (for consistency) and...
[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         WebActionCount
126     };
127
128
129     QWebPage(QWidget *parent);
130     ~QWebPage();
131
132     void open(const QUrl &url);
133     void open(const QWebNetworkRequest &request);
134
135     QWebFrame *mainFrame() const;
136
137     QWebPageHistory *history() const;
138
139     QWebSettings *settings();
140
141     QSize sizeHint() const;
142
143     QString title() const;
144     QUrl url() const;
145     QPixmap icon() const;
146
147     bool isModified() const;
148     QUndoStack *undoStack() const;
149
150     void setNetworkInterface(QWebNetworkInterface *interface);
151     QWebNetworkInterface *networkInterface() const;
152
153     // #### why is this in the page itself?
154 #ifndef QT_NO_NETWORKPROXY
155     void setNetworkProxy(const QNetworkProxy& proxy);
156     QNetworkProxy networkProxy() const;
157 #endif
158
159     quint64 totalBytes() const;
160     quint64 bytesReceived() const;
161
162     QString selectedText() const;
163
164     QAction *action(WebAction action) const;
165     virtual void triggerAction(WebAction action, bool checked = false);
166
167 public slots:
168     /**
169      * Stops loading of the page, if loading.
170      */
171     void stop();
172
173 signals:
174     /**
175      * Signal is emitted when load is started on one of the child
176      * frames of the page. The frame on which the load started
177      * is passed.
178      */
179     void loadStarted(QWebFrame *frame);
180     /**
181      * Signal is emitted when the global progress status changes.
182      * It accumulates changes from all the child frames.
183      */
184     void loadProgressChanged(int progress);
185     /**
186      * Signal is emitted when load has been finished on one of
187      * the child frames of the page. The frame on which the
188      * load finished is passed as an argument.
189      */
190     void loadFinished(QWebFrame *frame);
191     /**
192      * Signal is emitted when the title of this page has changed.
193      * Applies only to the main frame.  Sub-frame titles do not trigger this.
194      */
195     void titleChanged(const QString& title);
196     /**
197      * Signal is emitted when the mouse is hovering over a link.
198      * The first parameter is the link url, the second is the link title
199      * if any. Method is emitter with both empty parameters when the mouse
200      * isn't hovering over any link element.
201      */
202     void hoveringOverLink(const QString &link, const QString &title);
203     /**
204      * Signal is emitted when the statusbar text is changed by the page.
205      */
206     void statusBarTextChanged(const QString& text);
207     /**
208      * Signal is emitted when an icon ("favicon") is loaded from the site.
209      */
210     void iconLoaded();
211
212     void selectionChanged();
213
214     /**
215       * Signal is emitted when the mainframe()'s initial layout is completed.
216      */
217     void initialLayoutComplete();
218
219     // ### call addedToHistory instead, something more signal'ish
220     void addToHistory(const QUrl&);
221
222     void frameCreated(QWebFrame *frame);
223
224     void geometryChangeRequest(const QRect& geom);
225
226 protected:
227     virtual QWebPage *createWindow();
228     virtual QWebPage *createModalDialog();
229     virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues);
230
231     virtual NavigationRequestResponse navigationRequested(QWebFrame *frame, const QWebNetworkRequest &request, NavigationType type);
232     // ### do we need the frame? maybe include "file dialog" in the name
233     virtual QString chooseFile(QWebFrame *frame, const QString& oldFile);
234     // ### can we unify the next 3 methods? do we need the frame?
235     virtual void javaScriptAlert(QWebFrame *frame, const QString& msg);
236     virtual bool javaScriptConfirm(QWebFrame *frame, const QString& msg);
237     virtual bool javaScriptPrompt(QWebFrame *frame, const QString& msg, const QString& defaultValue, QString* result);
238     virtual void javaScriptConsoleMessage(const QString& message, unsigned int lineNumber, const QString& sourceID);
239
240     virtual QString userAgentFor(const QUrl& url) const;
241
242     virtual void resizeEvent(QResizeEvent*);
243     virtual void paintEvent(QPaintEvent*);
244     virtual void mouseMoveEvent(QMouseEvent*);
245     virtual void mousePressEvent(QMouseEvent*);
246     virtual void mouseDoubleClickEvent(QMouseEvent*);
247     virtual void mouseReleaseEvent(QMouseEvent*);
248     virtual void contextMenuEvent(QContextMenuEvent*);
249     virtual void wheelEvent(QWheelEvent*);
250     virtual void keyPressEvent(QKeyEvent*);
251     virtual void keyReleaseEvent(QKeyEvent*);
252     virtual void focusInEvent(QFocusEvent*);
253     virtual void focusOutEvent(QFocusEvent*);
254     virtual bool focusNextPrevChild(bool next);
255
256     virtual void dragEnterEvent(QDragEnterEvent *);
257     virtual void dragLeaveEvent(QDragLeaveEvent *);
258     virtual void dragMoveEvent(QDragMoveEvent *);
259     virtual void dropEvent(QDropEvent *);
260
261 private:
262     Q_PRIVATE_SLOT(d, void _q_onLoadProgressChanged(int))
263     Q_PRIVATE_SLOT(d, void _q_webActionTriggered(bool checked));
264     friend class QWebFrame;
265     friend class QWebPagePrivate;
266     friend class WebCore::ChromeClientQt;
267     friend class WebCore::EditorClientQt;
268     friend class WebCore::FrameLoaderClientQt;
269     friend class WebCore::ResourceHandle;
270     QWebPagePrivate *d;
271 };
272
273
274
275 #endif