1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384
|
/*
Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef qdeclarativewebview_p_h
#define qdeclarativewebview_p_h
#include <QAction>
#include <QDeclarativeItem>
#include <QtCore/QBasicTimer>
#include <QtCore/QUrl>
#include <QtNetwork/QNetworkAccessManager>
#include "qgraphicswebview.h"
#include "qwebpage.h"
QT_BEGIN_HEADER
class QWebHistory;
class QWebSettings;
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativeWebSettings;
class QDeclarativeWebViewPrivate;
class QNetworkRequest;
class QDeclarativeWebView;
class QDeclarativeWebViewPrivate;
class QDeclarativeWebPage : public QWebPage {
Q_OBJECT
public:
explicit QDeclarativeWebPage(QDeclarativeWebView *parent);
~QDeclarativeWebPage();
protected:
QWebPage *createWindow(WebWindowType type);
QString chooseFile(QWebFrame *originatingFrame, const QString& oldFile);
void javaScriptAlert(QWebFrame *originatingFrame, const QString& msg);
bool javaScriptConfirm(QWebFrame *originatingFrame, const QString& msg);
bool javaScriptPrompt(QWebFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result);
private:
QDeclarativeWebView *viewItem();
};
class GraphicsWebView : public QGraphicsWebView {
Q_OBJECT
public:
GraphicsWebView(QDeclarativeWebView* parent = 0);
protected:
void mousePressEvent(QGraphicsSceneMouseEvent* event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
void mouseMoveEvent(QGraphicsSceneMouseEvent* event);
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
void timerEvent(QTimerEvent* event);
bool sceneEvent(QEvent *event);
Q_SIGNALS:
void doubleClick(int clickX, int clickY);
private:
QDeclarativeWebView *parent;
QPointF pressPoint;
QBasicTimer pressTimer;
int pressTime; // milliseconds before the touch event becomes a "tap and hold"
friend class QDeclarativeWebView;
};
class QDeclarativeWebViewAttached;
// TODO: browser plugins
class QDeclarativeWebView : public QDeclarativeItem {
Q_OBJECT
Q_ENUMS(Status SelectionMode)
Q_PROPERTY(QString title READ title NOTIFY titleChanged)
Q_PROPERTY(QPixmap icon READ icon NOTIFY iconChanged)
Q_PROPERTY(QString statusText READ statusText NOTIFY statusTextChanged)
Q_PROPERTY(QString html READ html WRITE setHtml NOTIFY htmlChanged)
Q_PROPERTY(int pressGrabTime READ pressGrabTime WRITE setPressGrabTime NOTIFY pressGrabTimeChanged)
Q_PROPERTY(int preferredWidth READ preferredWidth WRITE setPreferredWidth NOTIFY preferredWidthChanged)
Q_PROPERTY(int preferredHeight READ preferredHeight WRITE setPreferredHeight NOTIFY preferredHeightChanged)
Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged)
Q_PROPERTY(Status status READ status NOTIFY statusChanged)
#ifndef QT_NO_ACTION
Q_PROPERTY(QAction* reload READ reloadAction CONSTANT)
Q_PROPERTY(QAction* back READ backAction CONSTANT)
Q_PROPERTY(QAction* forward READ forwardAction CONSTANT)
Q_PROPERTY(QAction* stop READ stopAction CONSTANT)
#endif
Q_PROPERTY(QDeclarativeWebSettings* settings READ settingsObject CONSTANT)
Q_PROPERTY(QDeclarativeListProperty<QObject> javaScriptWindowObjects READ javaScriptWindowObjects CONSTANT)
Q_PROPERTY(QDeclarativeComponent* newWindowComponent READ newWindowComponent WRITE setNewWindowComponent NOTIFY newWindowComponentChanged)
Q_PROPERTY(QDeclarativeItem* newWindowParent READ newWindowParent WRITE setNewWindowParent NOTIFY newWindowParentChanged)
Q_PROPERTY(bool renderingEnabled READ renderingEnabled WRITE setRenderingEnabled NOTIFY renderingEnabledChanged)
Q_PROPERTY(QSize contentsSize READ contentsSize NOTIFY contentsSizeChanged)
Q_PROPERTY(qreal contentsScale READ contentsScale WRITE setContentsScale NOTIFY contentsScaleChanged)
#ifdef Q_REVISION
Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY backgroundColorChanged REVISION 1)
#endif
public:
QDeclarativeWebView(QDeclarativeItem *parent = 0);
~QDeclarativeWebView();
QUrl url() const;
void setUrl(const QUrl &);
QString title() const;
QPixmap icon() const;
Q_INVOKABLE bool heuristicZoom(int clickX, int clickY, qreal maxzoom);
QRect elementAreaAt(int x, int y, int minwidth, int minheight) const;
int pressGrabTime() const;
void setPressGrabTime(int);
int preferredWidth() const;
void setPreferredWidth(int);
int preferredHeight() const;
void setPreferredHeight(int);
enum Status { Null, Ready, Loading, Error };
Status status() const;
qreal progress() const;
QString statusText() const;
#ifndef QT_NO_ACTION
QAction *reloadAction() const;
QAction *backAction() const;
QAction *forwardAction() const;
QAction *stopAction() const;
#endif
QWebPage *page() const;
void setPage(QWebPage *page);
void load(const QNetworkRequest &request,
QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation,
const QByteArray &body = QByteArray());
QString html() const;
void setHtml(const QString &html, const QUrl &baseUrl = QUrl());
void setContent(const QByteArray &data, const QString &mimeType = QString(), const QUrl &baseUrl = QUrl());
QWebHistory* history() const;
QWebSettings* settings() const;
QDeclarativeWebSettings *settingsObject() const;
bool renderingEnabled() const;
void setRenderingEnabled(bool);
QDeclarativeListProperty<QObject> javaScriptWindowObjects();
static QDeclarativeWebViewAttached* qmlAttachedProperties(QObject*);
QDeclarativeComponent *newWindowComponent() const;
void setNewWindowComponent(QDeclarativeComponent *newWindow);
QDeclarativeItem* newWindowParent() const;
void setNewWindowParent(QDeclarativeItem* newWindow);
bool isComponentCompletePublic() const { return isComponentComplete(); }
QSize contentsSize() const;
void setContentsScale(qreal scale);
qreal contentsScale() const;
#ifdef Q_REVISION
Q_REVISION(1) QColor backgroundColor() const;
Q_REVISION(1) void setBackgroundColor(const QColor&);
#endif
Q_SIGNALS:
void preferredWidthChanged();
void preferredHeightChanged();
void urlChanged();
void progressChanged();
void statusChanged(Status);
void titleChanged(const QString&);
void iconChanged();
void statusTextChanged();
void htmlChanged();
void pressGrabTimeChanged();
void newWindowComponentChanged();
void newWindowParentChanged();
void renderingEnabledChanged();
void contentsSizeChanged(const QSize&);
void contentsScaleChanged();
#ifdef Q_REVISION
void backgroundColorChanged();
#endif
void loadStarted();
void loadFinished();
void loadFailed();
void doubleClick(int clickX, int clickY);
void zoomTo(qreal zoom, int centerX, int centerY);
void alert(const QString& message);
public Q_SLOTS:
QVariant evaluateJavaScript(const QString&);
private Q_SLOTS:
void doLoadStarted();
void doLoadProgress(int p);
void doLoadFinished(bool ok);
void setStatusText(const QString&);
void windowObjectCleared();
void pageUrlChanged();
void initialLayout();
void updateDeclarativeWebViewSize();
virtual void geometryChanged(const QRectF &newGeometry,
const QRectF &oldGeometry);
QDeclarativeWebView* createWindow(QWebPage::WebWindowType type);
private:
void updateContentsSize();
void init();
virtual void componentComplete();
Q_DISABLE_COPY(QDeclarativeWebView)
QDeclarativeWebViewPrivate* d;
QMouseEvent* sceneMouseEventToMouseEvent(QGraphicsSceneMouseEvent*);
QMouseEvent* sceneHoverMoveEventToMouseEvent(QGraphicsSceneHoverEvent*);
friend class QDeclarativeWebPage;
};
class QDeclarativeWebViewAttached : public QObject {
Q_OBJECT
Q_PROPERTY(QString windowObjectName READ windowObjectName WRITE setWindowObjectName)
public:
QDeclarativeWebViewAttached(QObject* parent)
: QObject(parent)
{
}
QString windowObjectName() const
{
return m_windowObjectName;
}
void setWindowObjectName(const QString &n)
{
m_windowObjectName = n;
}
private:
QString m_windowObjectName;
};
class QDeclarativeWebSettings : public QObject {
Q_OBJECT
Q_PROPERTY(QString standardFontFamily READ standardFontFamily WRITE setStandardFontFamily)
Q_PROPERTY(QString fixedFontFamily READ fixedFontFamily WRITE setFixedFontFamily)
Q_PROPERTY(QString serifFontFamily READ serifFontFamily WRITE setSerifFontFamily)
Q_PROPERTY(QString sansSerifFontFamily READ sansSerifFontFamily WRITE setSansSerifFontFamily)
Q_PROPERTY(QString cursiveFontFamily READ cursiveFontFamily WRITE setCursiveFontFamily)
Q_PROPERTY(QString fantasyFontFamily READ fantasyFontFamily WRITE setFantasyFontFamily)
Q_PROPERTY(int minimumFontSize READ minimumFontSize WRITE setMinimumFontSize)
Q_PROPERTY(int minimumLogicalFontSize READ minimumLogicalFontSize WRITE setMinimumLogicalFontSize)
Q_PROPERTY(int defaultFontSize READ defaultFontSize WRITE setDefaultFontSize)
Q_PROPERTY(int defaultFixedFontSize READ defaultFixedFontSize WRITE setDefaultFixedFontSize)
Q_PROPERTY(bool autoLoadImages READ autoLoadImages WRITE setAutoLoadImages)
Q_PROPERTY(bool javascriptEnabled READ javascriptEnabled WRITE setJavascriptEnabled)
Q_PROPERTY(bool javaEnabled READ javaEnabled WRITE setJavaEnabled)
Q_PROPERTY(bool pluginsEnabled READ pluginsEnabled WRITE setPluginsEnabled)
Q_PROPERTY(bool privateBrowsingEnabled READ privateBrowsingEnabled WRITE setPrivateBrowsingEnabled)
Q_PROPERTY(bool javascriptCanOpenWindows READ javascriptCanOpenWindows WRITE setJavascriptCanOpenWindows)
Q_PROPERTY(bool javascriptCanAccessClipboard READ javascriptCanAccessClipboard WRITE setJavascriptCanAccessClipboard)
Q_PROPERTY(bool developerExtrasEnabled READ developerExtrasEnabled WRITE setDeveloperExtrasEnabled)
Q_PROPERTY(bool linksIncludedInFocusChain READ linksIncludedInFocusChain WRITE setLinksIncludedInFocusChain)
Q_PROPERTY(bool zoomTextOnly READ zoomTextOnly WRITE setZoomTextOnly)
Q_PROPERTY(bool printElementBackgrounds READ printElementBackgrounds WRITE setPrintElementBackgrounds)
Q_PROPERTY(bool offlineStorageDatabaseEnabled READ offlineStorageDatabaseEnabled WRITE setOfflineStorageDatabaseEnabled)
Q_PROPERTY(bool offlineWebApplicationCacheEnabled READ offlineWebApplicationCacheEnabled WRITE setOfflineWebApplicationCacheEnabled)
Q_PROPERTY(bool localStorageDatabaseEnabled READ localStorageDatabaseEnabled WRITE setLocalStorageDatabaseEnabled)
Q_PROPERTY(bool localContentCanAccessRemoteUrls READ localContentCanAccessRemoteUrls WRITE setLocalContentCanAccessRemoteUrls)
public:
QDeclarativeWebSettings() {}
QString standardFontFamily() const { return s->fontFamily(QWebSettings::StandardFont); }
void setStandardFontFamily(const QString& f) { s->setFontFamily(QWebSettings::StandardFont, f); }
QString fixedFontFamily() const { return s->fontFamily(QWebSettings::FixedFont); }
void setFixedFontFamily(const QString& f) { s->setFontFamily(QWebSettings::FixedFont, f); }
QString serifFontFamily() const { return s->fontFamily(QWebSettings::SerifFont); }
void setSerifFontFamily(const QString& f) { s->setFontFamily(QWebSettings::SerifFont, f); }
QString sansSerifFontFamily() const { return s->fontFamily(QWebSettings::SansSerifFont); }
void setSansSerifFontFamily(const QString& f) { s->setFontFamily(QWebSettings::SansSerifFont, f); }
QString cursiveFontFamily() const { return s->fontFamily(QWebSettings::CursiveFont); }
void setCursiveFontFamily(const QString& f) { s->setFontFamily(QWebSettings::CursiveFont, f); }
QString fantasyFontFamily() const { return s->fontFamily(QWebSettings::FantasyFont); }
void setFantasyFontFamily(const QString& f) { s->setFontFamily(QWebSettings::FantasyFont, f); }
int minimumFontSize() const { return s->fontSize(QWebSettings::MinimumFontSize); }
void setMinimumFontSize(int size) { s->setFontSize(QWebSettings::MinimumFontSize, size); }
int minimumLogicalFontSize() const { return s->fontSize(QWebSettings::MinimumLogicalFontSize); }
void setMinimumLogicalFontSize(int size) { s->setFontSize(QWebSettings::MinimumLogicalFontSize, size); }
int defaultFontSize() const { return s->fontSize(QWebSettings::DefaultFontSize); }
void setDefaultFontSize(int size) { s->setFontSize(QWebSettings::DefaultFontSize, size); }
int defaultFixedFontSize() const { return s->fontSize(QWebSettings::DefaultFixedFontSize); }
void setDefaultFixedFontSize(int size) { s->setFontSize(QWebSettings::DefaultFixedFontSize, size); }
bool autoLoadImages() const { return s->testAttribute(QWebSettings::AutoLoadImages); }
void setAutoLoadImages(bool on) { s->setAttribute(QWebSettings::AutoLoadImages, on); }
bool javascriptEnabled() const { return s->testAttribute(QWebSettings::JavascriptEnabled); }
void setJavascriptEnabled(bool on) { s->setAttribute(QWebSettings::JavascriptEnabled, on); }
bool javaEnabled() const { return s->testAttribute(QWebSettings::JavaEnabled); }
void setJavaEnabled(bool on) { s->setAttribute(QWebSettings::JavaEnabled, on); }
bool pluginsEnabled() const { return s->testAttribute(QWebSettings::PluginsEnabled); }
void setPluginsEnabled(bool on) { s->setAttribute(QWebSettings::PluginsEnabled, on); }
bool privateBrowsingEnabled() const { return s->testAttribute(QWebSettings::PrivateBrowsingEnabled); }
void setPrivateBrowsingEnabled(bool on) { s->setAttribute(QWebSettings::PrivateBrowsingEnabled, on); }
bool javascriptCanOpenWindows() const { return s->testAttribute(QWebSettings::JavascriptCanOpenWindows); }
void setJavascriptCanOpenWindows(bool on) { s->setAttribute(QWebSettings::JavascriptCanOpenWindows, on); }
bool javascriptCanAccessClipboard() const { return s->testAttribute(QWebSettings::JavascriptCanAccessClipboard); }
void setJavascriptCanAccessClipboard(bool on) { s->setAttribute(QWebSettings::JavascriptCanAccessClipboard, on); }
bool developerExtrasEnabled() const { return s->testAttribute(QWebSettings::DeveloperExtrasEnabled); }
void setDeveloperExtrasEnabled(bool on) { s->setAttribute(QWebSettings::DeveloperExtrasEnabled, on); }
bool linksIncludedInFocusChain() const { return s->testAttribute(QWebSettings::LinksIncludedInFocusChain); }
void setLinksIncludedInFocusChain(bool on) { s->setAttribute(QWebSettings::LinksIncludedInFocusChain, on); }
bool zoomTextOnly() const { return s->testAttribute(QWebSettings::ZoomTextOnly); }
void setZoomTextOnly(bool on) { s->setAttribute(QWebSettings::ZoomTextOnly, on); }
bool printElementBackgrounds() const { return s->testAttribute(QWebSettings::PrintElementBackgrounds); }
void setPrintElementBackgrounds(bool on) { s->setAttribute(QWebSettings::PrintElementBackgrounds, on); }
bool offlineStorageDatabaseEnabled() const { return s->testAttribute(QWebSettings::OfflineStorageDatabaseEnabled); }
void setOfflineStorageDatabaseEnabled(bool on) { s->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, on); }
bool offlineWebApplicationCacheEnabled() const { return s->testAttribute(QWebSettings::OfflineWebApplicationCacheEnabled); }
void setOfflineWebApplicationCacheEnabled(bool on) { s->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, on); }
bool localStorageDatabaseEnabled() const { return s->testAttribute(QWebSettings::LocalStorageDatabaseEnabled); }
void setLocalStorageDatabaseEnabled(bool on) { s->setAttribute(QWebSettings::LocalStorageDatabaseEnabled, on); }
bool localContentCanAccessRemoteUrls() const { return s->testAttribute(QWebSettings::LocalContentCanAccessRemoteUrls); }
void setLocalContentCanAccessRemoteUrls(bool on) { s->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, on); }
QWebSettings *s;
};
QT_END_NAMESPACE
QML_DECLARE_TYPE(QDeclarativeWebView)
QML_DECLARE_TYPE(QDeclarativeWebSettings)
QML_DECLARE_TYPEINFO(QDeclarativeWebView, QML_HAS_ATTACHED_PROPERTIES)
QT_END_HEADER
#endif
|