953143a6cffa3568ed9eecbaa6c755c7cf98801b
[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 <QtCore/qobject.h>
32 #include <QtGui/qwidget.h>
33 class QNetworkProxy;
34 class QUndoStack;
35 class QUrl;
36 class QWebFrame;
37 class QWebNetworkRequest;
38
39 class QWebPagePrivate;
40 class QWebFrameData;
41 class QWebNetworkInterface;
42
43 namespace WebCore {
44     class ChromeClientQt;
45     class EditorClientQt;
46     class FrameLoaderClientQt;
47     class FrameLoadRequest;
48     class InspectorClientQt;
49     class ResourceHandle;
50     class HitTestResult;
51 }
52
53 class QWEBKIT_EXPORT QWebPage : public QObject
54 {
55     Q_OBJECT
56
57     Q_PROPERTY(bool modified READ isModified)
58     Q_PROPERTY(QString selectedText READ selectedText)
59 public:
60     enum NavigationRequestResponse {
61         AcceptNavigationRequest,
62         IgnoreNavigationRequest
63     };
64
65     enum NavigationType {
66         NavigationTypeLinkClicked,
67         NavigationTypeFormSubmitted,
68         NavigationTypeBackForward,
69         NavigationTypeReload,
70         NavigationTypeFormResubmitted,
71         NavigationTypeOther
72     };
73
74     enum WebAction {
75         NoWebAction = - 1,
76
77         OpenLink,
78
79         OpenLinkInNewWindow,
80         OpenFrameInNewWindow,
81
82         DownloadLinkToDisk,
83         CopyLinkToClipboard,
84
85         OpenImageInNewWindow,
86         DownloadImageToDisk,
87         CopyImageToClipboard,
88
89         GoBack, // ###GoBackward instead?
90         GoForward,
91         Stop,
92         Reload,
93
94         Cut,
95         Copy,
96         Paste,
97
98         Undo,
99         Redo,
100         MoveToNextChar,
101         MoveToPreviousChar,
102         MoveToNextWord,
103         MoveToPreviousWord,
104         MoveToNextLine,
105         MoveToPreviousLine,
106         MoveToStartOfLine,
107         MoveToEndOfLine,
108         MoveToStartOfBlock,
109         MoveToEndOfBlock,
110         MoveToStartOfDocument,
111         MoveToEndOfDocument,
112         SelectNextChar,
113         SelectPreviousChar,
114         SelectNextWord,
115         SelectPreviousWord,
116         SelectNextLine,
117         SelectPreviousLine,
118         SelectStartOfLine,
119         SelectEndOfLine,
120         SelectStartOfBlock,
121         SelectEndOfBlock,
122         SelectStartOfDocument,
123         SelectEndOfDocument,
124         DeleteStartOfWord,
125         DeleteEndOfWord,
126
127         SetTextDirectionDefault,
128         SetTextDirectionLeftToRight,
129         SetTextDirectionRightToLeft,
130
131         ToggleBold,
132         ToggleItalic,
133         ToggleUnderline,
134
135         InspectElement,
136
137         WebActionCount
138     };
139
140
141     explicit QWebPage(QObject *parent = 0);
142     ~QWebPage();
143
144     QWebFrame *mainFrame() const;
145     QWebFrame *currentFrame() const;
146
147     QWebPageHistory *history() const;
148
149     QWebSettings *settings();
150
151     void setView(QWidget *view);
152     QWidget *view() const;
153
154     bool isModified() const;
155     QUndoStack *undoStack() const;
156
157     void setNetworkInterface(QWebNetworkInterface *interface);
158     QWebNetworkInterface *networkInterface() const;
159
160     // #### why is this in the page itself?
161 #ifndef QT_NO_NETWORKPROXY
162     void setNetworkProxy(const QNetworkProxy& proxy);
163     QNetworkProxy networkProxy() const;
164 #endif
165
166     quint64 totalBytes() const;
167     quint64 bytesReceived() const;
168
169     QString selectedText() const;
170
171     QAction *action(WebAction action) const;
172     virtual void triggerAction(WebAction action, bool checked = false);
173
174     QSize viewportSize() const;
175     void setViewportSize(const QSize &size) const;
176
177     virtual bool event(QEvent*);
178     virtual bool focusNextPrevChild(bool next);
179
180 Q_SIGNALS:
181     /**
182      * Signal is emitted when the global progress status changes.
183      * It accumulates changes from all the child frames.
184      */
185     void loadProgressChanged(int progress);
186     /**
187      * Signal is emitted when the mouse is hovering over a link.
188      * The first parameter is the link url, the second is the link title
189      * if any, and third is the text content. Method is emitter with both
190      * empty parameters when the mouse isn't hovering over any link element.
191      */
192     void hoveringOverLink(const QString &link, const QString &title, const QString &textContent = QString());
193     /**
194      * Signal is emitted when the statusbar text is changed by the page.
195      */
196     void statusBarTextChanged(const QString& text);
197
198     void selectionChanged();
199
200     void frameCreated(QWebFrame *frame);
201
202     void geometryChangeRequest(const QRect& geom);
203
204     //void addEmbeddableWidget(QWidget *widget);
205     //void addEmbeddableWidget(const QString &classid, QWidget *widget);
206     //void removeEmbeddableWidget(QWidget *widget);
207     //QHash<QString, QWidget *> embeddableWidgets() const;
208     //void clearEmbeddableWidgets();
209
210 protected:
211     virtual QWebPage *createWindow();
212     virtual QWebPage *createModalDialog();
213     virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues);
214
215     virtual NavigationRequestResponse navigationRequested(QWebFrame *frame, const QWebNetworkRequest &request, NavigationType type);
216     virtual QString chooseFile(QWebFrame *originatingFrame, const QString& oldFile);
217     virtual void javaScriptAlert(QWebFrame *originatingFrame, const QString& msg);
218     virtual bool javaScriptConfirm(QWebFrame *originatingFrame, const QString& msg);
219     virtual bool javaScriptPrompt(QWebFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result);
220     virtual void javaScriptConsoleMessage(const QString& message, unsigned int lineNumber, const QString& sourceID);
221
222     virtual QString userAgentFor(const QUrl& url) const;
223
224
225
226 private:
227     void mouseMoveEvent(QMouseEvent*);
228     void mousePressEvent(QMouseEvent*);
229     void mouseDoubleClickEvent(QMouseEvent*);
230     void mouseReleaseEvent(QMouseEvent*);
231     void contextMenuEvent(QContextMenuEvent*);
232     void wheelEvent(QWheelEvent*);
233     void keyPressEvent(QKeyEvent*);
234     void keyReleaseEvent(QKeyEvent*);
235     void focusInEvent(QFocusEvent*);
236     void focusOutEvent(QFocusEvent*);
237
238     void dragEnterEvent(QDragEnterEvent *);
239     void dragLeaveEvent(QDragLeaveEvent *);
240     void dragMoveEvent(QDragMoveEvent *);
241     void dropEvent(QDropEvent *);
242
243 private:
244     Q_PRIVATE_SLOT(d, void _q_onLoadProgressChanged(int))
245     Q_PRIVATE_SLOT(d, void _q_webActionTriggered(bool checked));
246     friend class QWebFrame;
247     friend class QWebPagePrivate;
248     friend class WebCore::ChromeClientQt;
249     friend class WebCore::EditorClientQt;
250     friend class WebCore::FrameLoaderClientQt;
251     friend class WebCore::InspectorClientQt;
252     friend class WebCore::ResourceHandle;
253     QWebPagePrivate *d;
254 };
255
256
257
258 #endif