Changed to PlatformMouseEvent constructor to allow construction from a QContextMenuEvent.
[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     QWebPage(QWidget *parent);
71     ~QWebPage();
72
73     void open(const QUrl &url);
74     void open(const QWebNetworkRequest &request);
75
76     QWebFrame *mainFrame() const;
77
78     QWebPageHistory *history() const;
79
80     // ### owned by webpage, returns a pointer, no setter!
81     void setSettings(const QWebSettings &settings);
82     QWebSettings settings() const;
83
84     QSize sizeHint() const;
85
86     // ### should be windowTitle
87     QString title() const;
88     QUrl url() const;
89     // ### should be QWidget::icon
90     QPixmap icon() const;
91
92     bool isModified() const;
93     QUndoStack *undoStack();
94     
95     void setNetworkInterface(QWebNetworkInterface *interface);
96     QWebNetworkInterface *networkInterface() const;
97
98 #ifndef QT_NO_NETWORKPROXY
99     void setNetworkProxy(const QNetworkProxy& proxy);
100     QNetworkProxy networkProxy() const;
101 #endif
102
103     // #### remove after adding editor actions
104     bool canCut() const;
105     bool canCopy() const;
106     bool canPaste() const;
107
108     quint64 totalBytes() const;
109     quint64 bytesReceived() const;
110
111 public slots:
112     /**
113      * Stops loading of the page, if loading.
114      */
115     void stop();
116
117     // #### should these be actions?
118     void goBack();
119     void goForward();
120     void goToHistoryItem(const QWebHistoryItem &item);
121
122     // ### should be a signal: void geometryChangeRequest(const QRect &geom);
123     virtual void setWindowGeometry(const QRect& geom);
124
125     void cut();
126     void copy();
127     void paste();
128     // ### should we have execCommand() or something similar?
129
130 signals:
131     /**
132      * Signal is emitted when load is started on one of the child
133      * frames of the page. The frame on which the load started
134      * is passed.
135      */
136     void loadStarted(QWebFrame *frame);
137     /**
138      * Signal is emitted when the global progress status changes.
139      * It accumulates changes from all the child frames.
140      */
141     void loadProgressChanged(int progress);
142     /**
143      * Signal is emitted when load has been finished on one of
144      * the child frames of the page. The frame on which the
145      * load finished is passed as an argument.
146      */
147     void loadFinished(QWebFrame *frame);
148     /**
149      * Signal is emitted when the title of this page has changed.
150      * Applies only to the main frame.  Sub-frame titles do not trigger this.
151      */
152     void titleChanged(const QString& title);
153     /**
154      * Signal is emitted when the mouse is hovering over a link.
155      * The first parameter is the link url, the second is the link title
156      * if any. Method is emitter with both empty parameters when the mouse
157      * isn't hovering over any link element.
158      */
159     void hoveringOverLink(const QString &link, const QString &title);
160     /**
161      * Signal is emitted when the statusbar text is changed by the page.
162      */
163     void statusBarTextChanged(const QString& text);
164     /**
165      * Signal is emitted when an icon ("favicon") is loaded from the site.
166      */
167     void iconLoaded();
168
169     // #### doesn't give you anything without a way to actually get the selection
170     void selectionChanged();
171
172     /**
173       * Signal is emitted when the mainframe()'s initial layout is completed.
174      */
175     void initialLayoutComplete();
176
177     void addToHistory(const QUrl&);
178
179     void frameCreated(QWebFrame *frame);
180
181 protected:
182     virtual QWebPage *createWindow();
183     virtual QWebPage *createModalDialog();
184     virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues);
185
186     virtual NavigationRequestResponse navigationRequested(QWebFrame *frame, const QWebNetworkRequest &request, NavigationType type);
187     // ### what does this do?
188     virtual QString chooseFile(QWebFrame *frame, const QString& oldFile);
189     // ### can we unify the next 3 methods? 
190     virtual void javaScriptAlert(QWebFrame *frame, const QString& msg);
191     virtual bool javaScriptConfirm(QWebFrame *frame, const QString& msg);
192     virtual bool javaScriptPrompt(QWebFrame *frame, const QString& msg, const QString& defaultValue, QString* result);
193     virtual void javaScriptConsoleMessage(const QString& message, unsigned int lineNumber, const QString& sourceID);
194
195     // ### should the be here?
196     virtual QString userAgentStringForUrl(const QUrl& forUrl) const;
197
198     virtual void resizeEvent(QResizeEvent*);
199     virtual void paintEvent(QPaintEvent*);
200     virtual void mouseMoveEvent(QMouseEvent*);
201     virtual void mousePressEvent(QMouseEvent*);
202     virtual void mouseDoubleClickEvent(QMouseEvent*);
203     virtual void mouseReleaseEvent(QMouseEvent*);
204     virtual void contextMenuEvent(QContextMenuEvent*);
205     virtual void wheelEvent(QWheelEvent*);
206     virtual void keyPressEvent(QKeyEvent*);
207     virtual void keyReleaseEvent(QKeyEvent*);
208     virtual void focusInEvent(QFocusEvent*);
209     virtual void focusOutEvent(QFocusEvent*);
210     virtual bool focusNextPrevChild(bool next);
211
212     virtual void dragEnterEvent(QDragEnterEvent *);
213     virtual void dragLeaveEvent(QDragLeaveEvent *);
214     virtual void dragMoveEvent(QDragMoveEvent *);
215     virtual void dropEvent(QDropEvent *);
216
217 private:
218     Q_PRIVATE_SLOT(d, void _q_onLoadProgressChanged(int))
219     friend class QWebFrame;
220     friend class QWebPagePrivate;
221     friend class WebCore::ChromeClientQt;
222     friend class WebCore::EditorClientQt;
223     friend class WebCore::FrameLoaderClientQt;
224     friend class WebCore::ResourceHandle;
225     QWebPagePrivate *d;
226 };
227
228
229
230 #endif