Patch from Adam Treat to add ICO support to the Qt build.
[WebKit-https.git] / WebKitQt / 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., 59 Temple Place - Suite 330,
18     Boston, MA 02111-1307, 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 QWebFrame;
33 class QUndoStack;
34 class QUrl;
35 class QWebNetworkRequest;
36
37 class QWebPagePrivate;
38 class QWebFrameData;
39 class QWebNetworkInterface;
40
41 namespace WebCore {
42     class ChromeClientQt;
43     class FrameLoaderClientQt;
44     class FrameLoadRequest;
45     class EditorClientQt;
46     class ResourceHandle;
47 }
48
49 class QWEBKIT_EXPORT QWebPage : public QWidget
50 {
51     Q_OBJECT
52
53     Q_PROPERTY(bool modified READ isModified)
54 public:
55     enum NavigationRequestResponse {
56         AcceptNavigationRequest,
57         IgnoreNavigationRequest
58     };
59
60     QWebPage(QWidget *parent);
61     ~QWebPage();
62
63     void open(const QUrl &url);
64     void open(const QWebNetworkRequest &request);
65
66     QWebFrame *mainFrame() const;
67
68     QWebPageHistory history() const;
69
70     void setSettings(const QWebSettings &settings);
71     QWebSettings settings() const;
72
73     QSize sizeHint() const;
74
75     QString title() const;
76
77     QUrl url() const;
78
79     bool isModified() const;
80
81     QUndoStack *undoStack();
82     
83     void setNetworkInterface(QWebNetworkInterface *interface);
84     QWebNetworkInterface *networkInterface() const;
85
86     QPixmap icon() const;
87
88 public slots:
89     /**
90      * Stops loading of the page, if loading.
91      */
92     void stop();
93
94     void goBack();
95     void goForward();
96     void goToHistoryItem(const QWebHistoryItem &item);
97
98     virtual void setWindowGeometry(const QRect& geom);
99
100 signals:
101     /**
102      * Signal is emitted when load is started on one of the child
103      * frames of the page. The frame on which the load started
104      * is passed.
105      */
106     void loadStarted(QWebFrame *frame);
107     /**
108      * Signal is emitted when the global progress status changes.
109      * It accumulates changes from all the child frames.
110      */
111     void loadProgressChanged(int progress);
112     /**
113      * Signal is emitted when load has been finished on one of
114      * the child frames of the page. The frame on which the
115      * load finished is passed as an argument.
116      */
117     void loadFinished(QWebFrame *frame);
118     /**
119      * Signal is emitted when the title of this page has changed.
120      * Applies only to the main frame.  Sub-frame titles do not trigger this.
121      */
122     void titleChanged(const QString& title);
123     /**
124      * Signal is emitted when the mouse is hovering over a link.
125      * The first parameter is the link url, the second is the link title
126      * if any. Method is emitter with both empty parameters when the mouse
127      * isn't hovering over any link element.
128      */
129     void hoveringOverLink(const QString &link, const QString &title);
130     /**
131      * Signal is emitted when the statusbar text is changed by the page.
132      */
133     void statusBarTextChanged(const QString& text);
134     /**
135      * Signal is emitted when an icon ("favicon") is loaded from the site.
136      */
137     void iconLoaded();
138
139 protected:
140     virtual QWebFrame *createFrame(QWebFrame *parentFrame, QWebFrameData *frameData);
141     virtual QWebPage *createWindow();
142
143     virtual NavigationRequestResponse navigationRequested(QWebFrame *frame, const QWebNetworkRequest &request);
144     virtual QString chooseFile(QWebFrame *frame, const QString& oldFile);
145     virtual void javaScriptAlert(QWebFrame *frame, const QString& msg);
146     virtual bool javaScriptConfirm(QWebFrame *frame, const QString& msg);
147     virtual bool javaScriptPrompt(QWebFrame *frame, const QString& msg, const QString& defaultValue, QString* result);
148     virtual void javaScriptConsoleMessage(const QString& message, unsigned int lineNumber, const QString& sourceID);
149
150     virtual void dragEnterEvent(QDragEnterEvent *);
151     virtual void dragLeaveEvent(QDragLeaveEvent *);
152     virtual void dragMoveEvent(QDragMoveEvent *);
153     virtual void dropEvent(QDropEvent *);
154
155 private:
156     friend class QWebFrame;
157     friend class QWebPagePrivate;
158     friend class WebCore::ChromeClientQt;
159     friend class WebCore::EditorClientQt;
160     friend class WebCore::FrameLoaderClientQt;
161     friend class WebCore::ResourceHandle;
162     QWebPagePrivate *d;
163 };
164
165
166
167 #endif