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