b9ddc5f746152eac51d7113436cc5a921aba42b2
[WebKit-https.git] / WebKitQt / Api / qwebpage.cpp
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 #include "qwebpage.h"
25 #include "qwebframe.h"
26 #include "qwebpage_p.h"
27 #include "qwebframe_p.h"
28 #include "qwebpagehistory.h"
29 #include "qwebpagehistory_p.h"
30
31 #include <qurl.h>
32
33 #include "FrameQt.h"
34 #include "ChromeClientQt.h"
35 #include "ContextMenuClientQt.h"
36 #include "DragClientQt.h"
37 #include "EditorClientQt.h"
38 #include "Settings.h"
39 #include "Page.h"
40 #include "FrameLoader.h"
41 #include "KURL.h"
42 #include "qboxlayout.h"
43
44 #include <QDebug>
45
46 using namespace WebCore;
47
48 QWebPagePrivate::QWebPagePrivate(QWebPage *qq)
49     : q(qq)
50 {
51     chromeClient = new ChromeClientQt(q);
52     contextMenuClient = new ContextMenuClientQt();
53     editorClient = new EditorClientQt();
54     page = new Page(chromeClient, contextMenuClient, editorClient,
55                     new DragClientQt());
56
57     Settings *settings = page->settings();
58     settings->setLoadsImagesAutomatically(true);
59     settings->setMinimumFontSize(5);
60     settings->setMinimumLogicalFontSize(5);
61     settings->setShouldPrintBackgrounds(true);
62     settings->setJavaScriptEnabled(true);
63
64     settings->setDefaultFixedFontSize(14);
65     settings->setDefaultFontSize(14);
66     settings->setSerifFontFamily("Times New Roman");
67     settings->setSansSerifFontFamily("Arial");
68     settings->setFixedFontFamily("Courier");
69     settings->setStandardFontFamily("Arial");
70
71     mainFrame = 0;
72 }
73
74 QWebPagePrivate::~QWebPagePrivate()
75 {
76     delete page;
77 }
78
79 void QWebPagePrivate::createMainFrame()
80 {
81     if (!mainFrame) {
82         QWebFrameData frameData;
83         frameData.ownerElement = 0;
84         frameData.allowsScrolling = true;
85         frameData.marginWidth = 0;
86         frameData.marginHeight = 0;
87         mainFrame = q->createFrame(0, &frameData);
88         layout->addWidget(mainFrame);
89     }
90 }
91
92
93 QWebPage::QWebPage(QWidget *parent)
94     : QWidget(parent)
95     , d(new QWebPagePrivate(this))
96 {
97     d->layout = new QVBoxLayout(this);
98     d->layout->setMargin(0);
99     d->layout->setSpacing(0);
100 }
101
102 QWebPage::~QWebPage()
103 {
104     FrameLoader *loader = d->mainFrame->d->frame->loader();
105     if (loader)
106         loader->detachFromParent();
107     delete d;
108 }
109
110 QWebFrame *QWebPage::createFrame(QWebFrame *parentFrame, QWebFrameData *frameData)
111 {
112     if (parentFrame)
113         return new QWebFrame(parentFrame, frameData);
114     QWebFrame *f = new QWebFrame(this, frameData);
115     connect(f, SIGNAL(titleChanged(const QString&)), this, SIGNAL(titleChanged(const QString&)));
116     return f;
117 }
118
119 void QWebPage::open(const QUrl &url)
120 {
121     mainFrame()->d->frame->loader()->load(KURL(url.toString()));
122 }
123
124 QUrl QWebPage::url() const
125 {
126     return QUrl((QString)mainFrame()->d->frame->loader()->url().url());
127 }
128
129 QString QWebPage::title() const
130 {
131     return mainFrame()->title();
132 }
133
134 QWebFrame *QWebPage::mainFrame() const
135 {
136     d->createMainFrame();
137     return d->mainFrame;
138 }
139
140 QWebFrame *QWebPage::focusFrame() const
141 {
142     Q_ASSERT(false);
143     return mainFrame(); // FIXME: this is not correct
144 }
145
146 QSize QWebPage::sizeHint() const
147 {
148     return QSize(800, 600);
149 }
150
151 void QWebPage::stop()
152 {
153     FrameLoader *f = mainFrame()->d->frame->loader();
154     f->cancelMainResourceLoad();
155     f->stopAllLoaders();
156 }
157
158 QWebPageHistory QWebPage::history() const
159 {
160     WebCore::BackForwardList *lst = d->page->backForwardList();
161     QWebPageHistoryPrivate *priv = new QWebPageHistoryPrivate(lst);
162     return QWebPageHistory(priv);
163 }
164
165 void QWebPage::goBack()
166 {
167     d->page->goBack();
168 }
169
170 void QWebPage::goForward()
171 {
172     d->page->goForward();
173 }
174
175 void QWebPage::goToHistoryItem(const QWebHistoryItem &item)
176 {
177     d->page->goToItem(item.d->item, FrameLoadTypeIndexedBackForward);
178 }
179
180 void QWebPage::javaScriptConsoleMessage(const QString& message, unsigned int lineNumber, const QString& sourceID)
181 {
182 }
183
184 void QWebPage::statusTextChanged(const QString& text)
185 {
186 }
187
188 void QWebPage::runJavaScriptAlert(QWebFrame *frame, const QString& msg)
189 {
190 }
191
192 QWebPage *QWebPage::createWindow()
193 {
194     return 0;
195 }
196
197 #include "qwebpage.moc"