qwebpage.h revision cac0f67c402d107cdb10971b95719e2ff9c7c76b
1/* 2 Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 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 21#ifndef QWEBPAGE_H 22#define QWEBPAGE_H 23 24#include "qwebsettings.h" 25#include "qwebkitglobal.h" 26 27#include <QtCore/qobject.h> 28#include <QtCore/qurl.h> 29#include <QtGui/qwidget.h> 30 31QT_BEGIN_NAMESPACE 32class QNetworkProxy; 33class QUndoStack; 34class QMenu; 35class QNetworkRequest; 36class QNetworkReply; 37class QNetworkAccessManager; 38QT_END_NAMESPACE 39 40class QWebElement; 41class QWebFrame; 42class QWebNetworkRequest; 43class QWebHistory; 44 45class QWebPagePrivate; 46class QWebFrameData; 47class QWebNetworkInterface; 48class QWebPluginFactory; 49class QWebHitTestResult; 50class QWebHistoryItem; 51 52namespace WebCore { 53 class ChromeClientQt; 54 class EditorClientQt; 55 class FrameLoaderClientQt; 56 class InspectorClientQt; 57 class ResourceHandle; 58 class HitTestResult; 59 class QNetworkReplyHandler; 60 61 struct FrameLoadRequest; 62} 63 64class QWEBKIT_EXPORT QWebPage : public QObject { 65 Q_OBJECT 66 67 Q_PROPERTY(bool modified READ isModified) 68 Q_PROPERTY(QString selectedText READ selectedText) 69 Q_PROPERTY(QSize viewportSize READ viewportSize WRITE setViewportSize) 70 Q_PROPERTY(QSize preferredContentsSize READ preferredContentsSize WRITE setPreferredContentsSize) 71 Q_PROPERTY(bool forwardUnsupportedContent READ forwardUnsupportedContent WRITE setForwardUnsupportedContent) 72 Q_PROPERTY(LinkDelegationPolicy linkDelegationPolicy READ linkDelegationPolicy WRITE setLinkDelegationPolicy) 73 Q_PROPERTY(QPalette palette READ palette WRITE setPalette) 74 Q_PROPERTY(bool contentEditable READ isContentEditable WRITE setContentEditable) 75 Q_ENUMS(LinkDelegationPolicy NavigationType WebAction) 76public: 77 enum NavigationType { 78 NavigationTypeLinkClicked, 79 NavigationTypeFormSubmitted, 80 NavigationTypeBackOrForward, 81 NavigationTypeReload, 82 NavigationTypeFormResubmitted, 83 NavigationTypeOther 84 }; 85 86 enum WebAction { 87 NoWebAction = - 1, 88 89 OpenLink, 90 91 OpenLinkInNewWindow, 92 OpenFrameInNewWindow, 93 94 DownloadLinkToDisk, 95 CopyLinkToClipboard, 96 97 OpenImageInNewWindow, 98 DownloadImageToDisk, 99 CopyImageToClipboard, 100 101 Back, 102 Forward, 103 Stop, 104 Reload, 105 106 Cut, 107 Copy, 108 Paste, 109 110 Undo, 111 Redo, 112 MoveToNextChar, 113 MoveToPreviousChar, 114 MoveToNextWord, 115 MoveToPreviousWord, 116 MoveToNextLine, 117 MoveToPreviousLine, 118 MoveToStartOfLine, 119 MoveToEndOfLine, 120 MoveToStartOfBlock, 121 MoveToEndOfBlock, 122 MoveToStartOfDocument, 123 MoveToEndOfDocument, 124 SelectNextChar, 125 SelectPreviousChar, 126 SelectNextWord, 127 SelectPreviousWord, 128 SelectNextLine, 129 SelectPreviousLine, 130 SelectStartOfLine, 131 SelectEndOfLine, 132 SelectStartOfBlock, 133 SelectEndOfBlock, 134 SelectStartOfDocument, 135 SelectEndOfDocument, 136 DeleteStartOfWord, 137 DeleteEndOfWord, 138 139 SetTextDirectionDefault, 140 SetTextDirectionLeftToRight, 141 SetTextDirectionRightToLeft, 142 143 ToggleBold, 144 ToggleItalic, 145 ToggleUnderline, 146 147 InspectElement, 148 149 InsertParagraphSeparator, 150 InsertLineSeparator, 151 152 SelectAll, 153 ReloadAndBypassCache, 154 155 PasteAndMatchStyle, 156 RemoveFormat, 157 158 ToggleStrikethrough, 159 ToggleSubscript, 160 ToggleSuperscript, 161 InsertUnorderedList, 162 InsertOrderedList, 163 Indent, 164 Outdent, 165 166 AlignCenter, 167 AlignJustified, 168 AlignLeft, 169 AlignRight, 170 171 WebActionCount 172 }; 173 174 enum FindFlag { 175 FindBackward = 1, 176 FindCaseSensitively = 2, 177 FindWrapsAroundDocument = 4, 178 HighlightAllOccurrences = 8 179 }; 180 Q_DECLARE_FLAGS(FindFlags, FindFlag) 181 182 enum LinkDelegationPolicy { 183 DontDelegateLinks, 184 DelegateExternalLinks, 185 DelegateAllLinks 186 }; 187 188 enum WebWindowType { 189 WebBrowserWindow, 190 WebModalDialog 191 }; 192 193 explicit QWebPage(QObject *parent = 0); 194 ~QWebPage(); 195 196 QWebFrame *mainFrame() const; 197 QWebFrame *currentFrame() const; 198 QWebFrame* frameAt(const QPoint& pos) const; 199 200 QWebHistory *history() const; 201 QWebSettings *settings() const; 202 203 void setView(QWidget *view); 204 QWidget *view() const; 205 206 bool isModified() const; 207#ifndef QT_NO_UNDOSTACK 208 QUndoStack *undoStack() const; 209#endif 210 211#if QT_VERSION < 0x040400 && !defined(qdoc) 212 void setNetworkInterface(QWebNetworkInterface *interface); 213 QWebNetworkInterface *networkInterface() const; 214 215 // #### why is this in the page itself? 216#ifndef QT_NO_NETWORKPROXY 217 void setNetworkProxy(const QNetworkProxy& proxy); 218 QNetworkProxy networkProxy() const; 219#endif 220 221#else 222 void setNetworkAccessManager(QNetworkAccessManager *manager); 223 QNetworkAccessManager *networkAccessManager() const; 224#endif 225 226 void setPluginFactory(QWebPluginFactory *factory); 227 QWebPluginFactory *pluginFactory() const; 228 229 quint64 totalBytes() const; 230 quint64 bytesReceived() const; 231 232 QString selectedText() const; 233 234 QAction *action(WebAction action) const; 235 virtual void triggerAction(WebAction action, bool checked = false); 236 237 QSize viewportSize() const; 238 void setViewportSize(const QSize &size) const; 239 240 QSize preferredContentsSize() const; 241 void setPreferredContentsSize(const QSize &size) const; 242 243 virtual bool event(QEvent*); 244 bool focusNextPrevChild(bool next); 245 246 QVariant inputMethodQuery(Qt::InputMethodQuery property) const; 247 248 bool findText(const QString &subString, FindFlags options = 0); 249 250 void setForwardUnsupportedContent(bool forward); 251 bool forwardUnsupportedContent() const; 252 253 void setLinkDelegationPolicy(LinkDelegationPolicy policy); 254 LinkDelegationPolicy linkDelegationPolicy() const; 255 256 void setPalette(const QPalette &palette); 257 QPalette palette() const; 258 259 void setContentEditable(bool editable); 260 bool isContentEditable() const; 261 262#ifndef QT_NO_CONTEXTMENU 263 bool swallowContextMenuEvent(QContextMenuEvent *event); 264#endif 265 void updatePositionDependentActions(const QPoint &pos); 266 267 QMenu *createStandardContextMenu(); 268 269 enum Extension { 270 ChooseMultipleFilesExtension, 271 ErrorPageExtension 272 }; 273 class ExtensionOption 274 {}; 275 class ExtensionReturn 276 {}; 277 278 class ChooseMultipleFilesExtensionOption : public ExtensionOption { 279 public: 280 QWebFrame *parentFrame; 281 QStringList suggestedFileNames; 282 }; 283 284 class ChooseMultipleFilesExtensionReturn : public ExtensionReturn { 285 public: 286 QStringList fileNames; 287 }; 288 289 enum ErrorDomain { QtNetwork, Http, WebKit }; 290 class ErrorPageExtensionOption : public ExtensionOption { 291 public: 292 QUrl url; 293 QWebFrame* frame; 294 ErrorDomain domain; 295 int error; 296 QString errorString; 297 }; 298 299 class ErrorPageExtensionReturn : public ExtensionReturn { 300 public: 301 ErrorPageExtensionReturn() : contentType(QLatin1String("text/html")), encoding(QLatin1String("utf-8")) {}; 302 QString contentType; 303 QString encoding; 304 QUrl baseUrl; 305 QByteArray content; 306 }; 307 308 309 virtual bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0); 310 virtual bool supportsExtension(Extension extension) const; 311 312 inline QWebPagePrivate* handle() const { return d; } 313 314public Q_SLOTS: 315 bool shouldInterruptJavaScript(); 316 317Q_SIGNALS: 318 void loadStarted(); 319 void loadProgress(int progress); 320 void loadFinished(bool ok); 321 322 void linkHovered(const QString &link, const QString &title, const QString &textContent); 323 void statusBarMessage(const QString& text); 324 void selectionChanged(); 325 void frameCreated(QWebFrame *frame); 326 void geometryChangeRequested(const QRect& geom); 327 void repaintRequested(const QRect& dirtyRect); 328 void scrollRequested(int dx, int dy, const QRect& scrollViewRect); 329 void windowCloseRequested(); 330 void printRequested(QWebFrame *frame); 331 void linkClicked(const QUrl &url); 332 void webInspectorTriggered(const QWebElement& inspectedElement); 333 334 void toolBarVisibilityChangeRequested(bool visible); 335 void statusBarVisibilityChangeRequested(bool visible); 336 void menuBarVisibilityChangeRequested(bool visible); 337 338#if QT_VERSION >= 0x040400 339 void unsupportedContent(QNetworkReply *reply); 340 void downloadRequested(const QNetworkRequest &request); 341#endif 342 343 void microFocusChanged(); 344 void contentsChanged(); 345 void databaseQuotaExceeded(QWebFrame* frame, QString databaseName); 346 347 void saveFrameStateRequested(QWebFrame* frame, QWebHistoryItem* item); 348 void restoreFrameStateRequested(QWebFrame* frame); 349 350 void networkRequestStarted(QWebFrame* frame, QNetworkRequest* request); 351 352protected: 353 virtual QWebPage *createWindow(WebWindowType type); 354 virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList ¶mNames, const QStringList ¶mValues); 355 356#if QT_VERSION >= 0x040400 357 virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type); 358#else 359 virtual bool acceptNavigationRequest(QWebFrame *frame, const QWebNetworkRequest &request, NavigationType type); 360#endif 361 virtual QString chooseFile(QWebFrame *originatingFrame, const QString& oldFile); 362 virtual void javaScriptAlert(QWebFrame *originatingFrame, const QString& msg); 363 virtual bool javaScriptConfirm(QWebFrame *originatingFrame, const QString& msg); 364 virtual bool javaScriptPrompt(QWebFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result); 365 virtual void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID); 366 367 virtual QString userAgentForUrl(const QUrl& url) const; 368 369private: 370 Q_PRIVATE_SLOT(d, void _q_onLoadProgressChanged(int)) 371 Q_PRIVATE_SLOT(d, void _q_webActionTriggered(bool checked)) 372 Q_PRIVATE_SLOT(d, void _q_cleanupLeakMessages()) 373 374 QWebPagePrivate *d; 375 376 friend class QWebFrame; 377 friend class QWebPagePrivate; 378 friend class QWebView; 379 friend class QGraphicsWebView; 380 friend class QWebInspector; 381 friend class WebCore::ChromeClientQt; 382 friend class WebCore::EditorClientQt; 383 friend class WebCore::FrameLoaderClientQt; 384 friend class WebCore::InspectorClientQt; 385 friend class WebCore::ResourceHandle; 386 friend class WebCore::QNetworkReplyHandler; 387}; 388 389Q_DECLARE_OPERATORS_FOR_FLAGS(QWebPage::FindFlags) 390 391#endif 392