1/* 2 Copyright (C) 2008, 2009 Nokia Corporation and/or its subsidiary(-ies) 3 Copyright (C) 2008 Holger Hans Peter Freyther 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_p_h 22#define qwebpage_p_h 23 24#include "QWebPageAdapter.h" 25 26#include "qwebframe.h" 27#include "qwebpage.h" 28 29#include <QPointer> 30#include <qevent.h> 31#include <qgesture.h> 32#include <qgraphicssceneevent.h> 33#include <qgraphicswidget.h> 34#include <qnetworkproxy.h> 35 36 37namespace WebCore { 38class ContextMenuClientQt; 39class ContextMenuItem; 40class ContextMenu; 41class Document; 42class EditorClientQt; 43class Element; 44class IntRect; 45class Node; 46class NodeList; 47class Frame; 48} 49 50QT_BEGIN_NAMESPACE 51class QUndoStack; 52class QMenu; 53class QBitArray; 54QT_END_NAMESPACE 55 56class QtPluginWidgetAdapter; 57class QWebInspector; 58class QWebFrameAdapter; 59class UndoStepQt; 60 61class QtViewportAttributesPrivate : public QSharedData { 62public: 63 QtViewportAttributesPrivate(QWebPage::ViewportAttributes* qq) 64 : q(qq) 65 { } 66 67 QWebPage::ViewportAttributes* q; 68}; 69 70class QWebPagePrivate : public QWebPageAdapter { 71public: 72 QWebPagePrivate(QWebPage*); 73 ~QWebPagePrivate(); 74 75 static WebCore::Page* core(const QWebPage*); 76 77 // Adapter implementation 78 virtual void show() OVERRIDE; 79 virtual void setFocus() OVERRIDE; 80 virtual void unfocus() OVERRIDE; 81 virtual void setWindowRect(const QRect &) OVERRIDE; 82 virtual QSize viewportSize() const OVERRIDE; 83 virtual QWebPageAdapter* createWindow(bool /*dialog*/) OVERRIDE; 84 virtual QObject* handle() OVERRIDE { return q; } 85 virtual void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID) OVERRIDE; 86 virtual void javaScriptAlert(QWebFrameAdapter*, const QString& msg) OVERRIDE; 87 virtual bool javaScriptConfirm(QWebFrameAdapter*, const QString& msg) OVERRIDE; 88 virtual bool javaScriptPrompt(QWebFrameAdapter*, const QString& msg, const QString& defaultValue, QString* result) OVERRIDE; 89 virtual bool shouldInterruptJavaScript() OVERRIDE; 90 virtual void printRequested(QWebFrameAdapter*) OVERRIDE; 91 virtual void databaseQuotaExceeded(QWebFrameAdapter*, const QString& databaseName) OVERRIDE; 92 virtual void applicationCacheQuotaExceeded(QWebSecurityOrigin*, quint64 defaultOriginQuota, quint64 totalSpaceNeeded) OVERRIDE; 93 virtual void setToolTip(const QString&) OVERRIDE; 94#if USE(QT_MULTIMEDIA) 95 virtual QWebFullScreenVideoHandler* createFullScreenVideoHandler() OVERRIDE; 96#endif 97 virtual QWebFrameAdapter* mainFrameAdapter() OVERRIDE; 98 virtual QStringList chooseFiles(QWebFrameAdapter*, bool allowMultiple, const QStringList& suggestedFileNames) OVERRIDE; 99 virtual QColor colorSelectionRequested(const QColor& selectedColor) OVERRIDE; 100 virtual QWebSelectMethod* createSelectPopup() OVERRIDE; 101 virtual QRect viewRectRelativeToWindow() OVERRIDE; 102 virtual void geolocationPermissionRequested(QWebFrameAdapter*) OVERRIDE; 103 virtual void geolocationPermissionRequestCancelled(QWebFrameAdapter*) OVERRIDE; 104 virtual void notificationsPermissionRequested(QWebFrameAdapter*) OVERRIDE; 105 virtual void notificationsPermissionRequestCancelled(QWebFrameAdapter*) OVERRIDE; 106 107 virtual void respondToChangedContents() OVERRIDE; 108 virtual void respondToChangedSelection() OVERRIDE; 109 virtual void microFocusChanged() OVERRIDE; 110 virtual void triggerCopyAction() OVERRIDE; 111 virtual void triggerActionForKeyEvent(QKeyEvent*) OVERRIDE; 112 virtual void clearUndoStack() OVERRIDE; 113 virtual bool canUndo() const OVERRIDE; 114 virtual bool canRedo() const OVERRIDE; 115 virtual void undo() OVERRIDE; 116 virtual void redo() OVERRIDE; 117 virtual void createUndoStep(QSharedPointer<UndoStepQt>) OVERRIDE; 118 virtual const char* editorCommandForKeyEvent(QKeyEvent*) OVERRIDE; 119 120 void updateNavigationActions() OVERRIDE; 121 122 virtual QObject* inspectorHandle() OVERRIDE; 123 virtual void setInspectorFrontend(QObject*) OVERRIDE; 124 virtual void setInspectorWindowTitle(const QString&) OVERRIDE; 125 virtual void createWebInspector(QObject** inspectorView, QWebPageAdapter** inspectorPage) OVERRIDE; 126 virtual QStringList menuActionsAsText() OVERRIDE; 127 virtual void emitViewportChangeRequested() OVERRIDE; 128 virtual bool acceptNavigationRequest(QWebFrameAdapter*, const QNetworkRequest&, int type) OVERRIDE; 129 virtual void emitRestoreFrameStateRequested(QWebFrameAdapter*) OVERRIDE; 130 virtual void emitSaveFrameStateRequested(QWebFrameAdapter*, QWebHistoryItem*) OVERRIDE; 131 virtual void emitDownloadRequested(const QNetworkRequest&) OVERRIDE; 132 virtual void emitFrameCreated(QWebFrameAdapter*) OVERRIDE; 133 virtual QString userAgentForUrl(const QUrl &url) const OVERRIDE { return q->userAgentForUrl(url); } 134 virtual bool supportsErrorPageExtension() const OVERRIDE { return q->supportsExtension(QWebPage::ErrorPageExtension); } 135 virtual bool errorPageExtension(ErrorPageOption *, ErrorPageReturn *) OVERRIDE; 136 virtual QtPluginWidgetAdapter* createPlugin(const QString &, const QUrl &, const QStringList &, const QStringList &) OVERRIDE; 137 virtual QtPluginWidgetAdapter* adapterForWidget(QObject *) const OVERRIDE; 138 virtual bool requestSoftwareInputPanel() const OVERRIDE; 139 virtual void createAndSetCurrentContextMenu(const QList<MenuItemDescription>&, QBitArray*) OVERRIDE; 140 virtual bool handleScrollbarContextMenuEvent(QContextMenuEvent*, bool, ScrollDirection*, ScrollGranularity*) OVERRIDE; 141 142 143 void createMainFrame(); 144 145 void _q_webActionTriggered(bool checked); 146 void updateAction(QWebPage::WebAction); 147 void updateEditorActions(); 148 149 void timerEvent(QTimerEvent*); 150 151#ifndef QT_NO_CONTEXTMENU 152 void contextMenuEvent(const QPoint& globalPos); 153#endif 154 void keyPressEvent(QKeyEvent*); 155 void keyReleaseEvent(QKeyEvent*); 156 157 template<class T> void dragEnterEvent(T*); 158 template<class T> void dragMoveEvent(T*); 159 template<class T> void dropEvent(T*); 160 161 void shortcutOverrideEvent(QKeyEvent*); 162 void leaveEvent(QEvent*); 163 164 bool gestureEvent(QGestureEvent*); 165 166 167 void setInspector(QWebInspector*); 168 QWebInspector* getOrCreateInspector(); 169 170#ifndef QT_NO_SHORTCUT 171 static QWebPage::WebAction editorActionForKeyEvent(QKeyEvent*); 172#endif 173 static const char* editorCommandForWebActions(QWebPage::WebAction); 174 175 QWebPage *q; 176 QPointer<QWebFrame> mainFrame; 177 178#ifndef QT_NO_UNDOSTACK 179 QUndoStack *undoStack; 180#endif 181 182 QPointer<QWidget> view; 183 184 QWebPage::LinkDelegationPolicy linkPolicy; 185 186 QSize m_viewportSize; 187 QSize fixedLayoutSize; 188 189 QWebHitTestResult hitTestResult; 190#ifndef QT_NO_CONTEXTMENU 191 QPointer<QMenu> currentContextMenu; 192#endif 193 QPalette palette; 194 bool useFixedLayout; 195 196 QAction *actions[QWebPage::WebActionCount]; 197 198 QWidget* inspectorFrontend; 199 QWebInspector* inspector; 200 bool inspectorIsInternalOnly; // True if created through the Inspect context menu action 201 Qt::DropAction m_lastDropAction; 202}; 203 204#endif 205