2 Copyright (C) 2007 Trolltech ASA
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
19 This class provides all functionality needed for loading images, style sheets and html
20 pages from the web. It has a memory cache for these objects.
23 #include "qwebsettings.h"
26 #include "qwebpage_p.h"
31 #include "PlatformString.h"
32 #include "IconDatabase.h"
35 #include <QSharedData>
37 class QWebSettingsPrivate
40 QWebSettingsPrivate(WebCore::Settings *wcSettings = 0)
41 : minimumFontSize(-1),
42 minimumLogicalFontSize(-1),
44 defaultFixedFontSize(-1),
49 QHash<int, QString> fontFamilies;
51 int minimumLogicalFontSize;
53 int defaultFixedFontSize;
54 QHash<int, bool> attributes;
55 QString userStyleSheetLocation;
58 WebCore::Settings *settings;
61 typedef QHash<int, QPixmap> WebGraphicHash;
62 Q_GLOBAL_STATIC(WebGraphicHash, graphics)
64 Q_GLOBAL_STATIC(QList<QWebSettingsPrivate *>, allSettings);
66 void QWebSettingsPrivate::apply()
69 QWebSettingsPrivate *global = QWebSettings::defaultSettings()->d;
71 QString family = fontFamilies.value(QWebSettings::StandardFont,
72 global->fontFamilies.value(QWebSettings::StandardFont));
73 settings->setStandardFontFamily(family);
75 family = fontFamilies.value(QWebSettings::FixedFont,
76 global->fontFamilies.value(QWebSettings::FixedFont));
77 settings->setFixedFontFamily(family);
79 family = fontFamilies.value(QWebSettings::SerifFont,
80 global->fontFamilies.value(QWebSettings::SerifFont));
81 settings->setSerifFontFamily(family);
83 family = fontFamilies.value(QWebSettings::SansSerifFont,
84 global->fontFamilies.value(QWebSettings::SansSerifFont));
85 settings->setSansSerifFontFamily(family);
87 family = fontFamilies.value(QWebSettings::CursiveFont,
88 global->fontFamilies.value(QWebSettings::CursiveFont));
89 settings->setCursiveFontFamily(family);
91 family = fontFamilies.value(QWebSettings::FantasyFont,
92 global->fontFamilies.value(QWebSettings::FantasyFont));
93 settings->setFantasyFontFamily(family);
95 int size = minimumFontSize >= 0 ? minimumFontSize : global->minimumFontSize;
96 settings->setMinimumFontSize(size);
98 size = minimumLogicalFontSize >= 0 ? minimumLogicalFontSize : global->minimumLogicalFontSize;
99 settings->setMinimumLogicalFontSize(size);
101 size = defaultFontSize >= 0 ? defaultFontSize : global->defaultFontSize;
102 settings->setDefaultFontSize(size);
104 size = defaultFixedFontSize >= 0 ? defaultFixedFontSize : global->defaultFixedFontSize;
105 settings->setDefaultFixedFontSize(size);
107 bool value = attributes.value(QWebSettings::AutoLoadImages,
108 global->attributes.value(QWebSettings::AutoLoadImages));
109 settings->setLoadsImagesAutomatically(value);
111 value = attributes.value(QWebSettings::JavascriptEnabled,
112 global->attributes.value(QWebSettings::JavascriptEnabled));
113 settings->setJavaScriptEnabled(value);
115 value = attributes.value(QWebSettings::JavascriptCanOpenWindows,
116 global->attributes.value(QWebSettings::JavascriptCanOpenWindows));
117 settings->setJavaScriptCanOpenWindowsAutomatically(value);
119 value = attributes.value(QWebSettings::JavaEnabled,
120 global->attributes.value(QWebSettings::JavaEnabled));
121 settings->setJavaEnabled(value);
123 value = attributes.value(QWebSettings::PluginsEnabled,
124 global->attributes.value(QWebSettings::PluginsEnabled));
125 settings->setPluginsEnabled(value);
127 value = attributes.value(QWebSettings::PrivateBrowsingEnabled,
128 global->attributes.value(QWebSettings::PrivateBrowsingEnabled));
129 settings->setPrivateBrowsingEnabled(value);
131 QString location = (!userStyleSheetLocation.isEmpty()) ? userStyleSheetLocation : global->userStyleSheetLocation;
132 settings->setUserStyleSheetLocation(WebCore::KURL(location));
134 QList<QWebSettingsPrivate *> settings = *::allSettings();
135 for (int i = 0; i < settings.count(); ++i)
136 settings[i]->apply();
140 QWebSettings *QWebSettings::defaultSettings()
142 static QWebSettings *global = 0;
144 global = new QWebSettings;
148 QWebSettings::QWebSettings()
149 : d(new QWebSettingsPrivate)
151 // Initialize our global defaults
152 // changing any of those will likely break the LayoutTests
153 d->minimumFontSize = 5;
154 d->minimumLogicalFontSize = 5;
155 d->defaultFontSize = 14;
156 d->defaultFixedFontSize = 14;
157 d->fontFamilies.insert(QWebSettings::StandardFont, QLatin1String("Arial"));
158 d->fontFamilies.insert(QWebSettings::StandardFont, QLatin1String("Arial"));
159 d->fontFamilies.insert(QWebSettings::FixedFont, QLatin1String("Courier"));
160 d->fontFamilies.insert(QWebSettings::SerifFont, QLatin1String("Times New Roman"));
161 d->fontFamilies.insert(QWebSettings::SansSerifFont, QLatin1String("Arial"));
163 d->attributes.insert(QWebSettings::AutoLoadImages, true);
164 d->attributes.insert(QWebSettings::JavascriptEnabled, true);
167 QWebSettings::QWebSettings(WebCore::Settings *settings)
168 : d(new QWebSettingsPrivate(settings))
170 d->settings = settings;
172 allSettings()->append(d);
175 QWebSettings::~QWebSettings()
178 allSettings()->removeOne(d);
181 void QWebSettings::setMinimumFontSize(int size)
183 d->minimumFontSize = size;
188 int QWebSettings::minimumFontSize() const
190 return d->minimumFontSize;
194 void QWebSettings::setMinimumLogicalFontSize(int size)
196 d->minimumLogicalFontSize = size;
201 int QWebSettings::minimumLogicalFontSize() const
203 return d->minimumLogicalFontSize;
207 void QWebSettings::setDefaultFontSize(int size)
209 d->defaultFontSize = size;
214 int QWebSettings::defaultFontSize() const
216 return d->defaultFontSize;
220 void QWebSettings::setDefaultFixedFontSize(int size)
222 d->defaultFixedFontSize = size;
227 int QWebSettings::defaultFixedFontSize() const
229 return d->defaultFixedFontSize;
232 void QWebSettings::setUserStyleSheetLocation(const QString &location)
234 d->userStyleSheetLocation = location;
238 QString QWebSettings::userStyleSheetLocation() const
240 return d->userStyleSheetLocation;
243 void QWebSettings::setIconDatabaseEnabled(bool enabled, const QString &location)
245 WebCore::iconDatabase()->setEnabled(enabled);
247 if (!location.isEmpty()) {
248 WebCore::iconDatabase()->open(location);
250 WebCore::iconDatabase()->open(WebCore::iconDatabase()->defaultDatabaseFilename());
253 WebCore::iconDatabase()->close();
257 bool QWebSettings::iconDatabaseEnabled()
259 return WebCore::iconDatabase()->isEnabled() && WebCore::iconDatabase()->isOpen();
262 void QWebSettings::setWebGraphic(WebGraphic type, const QPixmap &graphic)
264 WebGraphicHash *h = graphics();
265 if (graphic.isNull())
268 h->insert(type, graphic);
271 QPixmap QWebSettings::webGraphic(WebGraphic type)
273 return graphics()->value(type);
276 void QWebSettings::setFontFamily(FontType type, const QString &family)
278 if (family.isEmpty())
279 d->fontFamilies.remove(type);
281 d->fontFamilies.insert(type, family);
285 QString QWebSettings::fontFamily(FontType type) const
287 return d->fontFamilies.value(type);
290 void QWebSettings::setAttribute(WebAttribute attr, bool on)
292 d->attributes.insert(attr, on);
296 bool QWebSettings::testAttribute(WebAttribute attr) const
298 return d->attributes.value(attr);
301 void QWebSettings::clearAttribute(WebAttribute attr)
303 d->attributes.remove(attr);