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 <qbasictimer.h> 25 #include <qnetworkproxy.h> 26 #include <qpointer.h> 27 #include <qevent.h> 28 #include <qgraphicssceneevent.h> 29 30 #include "qwebpage.h" 31 #include "qwebhistory.h" 32 #include "qwebframe.h" 33 34 #include "IntPoint.h" 35 #include "KURL.h" 36 #include "PlatformString.h" 37 38 #include <wtf/OwnPtr.h> 39 #include <wtf/RefPtr.h> 40 41 #include "ViewportArguments.h" 42 43 namespace WebCore { 44 class ChromeClientQt; 45 class ContextMenuClientQt; 46 class ContextMenuItem; 47 class ContextMenu; 48 class Document; 49 class EditorClientQt; 50 class Element; 51 class InspectorController; 52 class IntRect; 53 class Node; 54 class NodeList; 55 class Page; 56 class Frame; 57 } 58 59 QT_BEGIN_NAMESPACE 60 class QUndoStack; 61 class QMenu; 62 class QBitArray; 63 QT_END_NAMESPACE 64 65 class QWebInspector; 66 class QWebPageClient; 67 68 class QtViewportAttributesPrivate : public QSharedData { 69 public: QtViewportAttributesPrivate(QWebPage::ViewportAttributes * qq)70 QtViewportAttributesPrivate(QWebPage::ViewportAttributes* qq) 71 : q(qq) 72 { } 73 74 QWebPage::ViewportAttributes* q; 75 }; 76 77 class QWebPagePrivate { 78 public: 79 QWebPagePrivate(QWebPage*); 80 ~QWebPagePrivate(); 81 82 static WebCore::Page* core(const QWebPage*); 83 static QWebPagePrivate* priv(QWebPage*); 84 85 void createMainFrame(); 86 #ifndef QT_NO_CONTEXTMENU 87 QMenu* createContextMenu(const WebCore::ContextMenu* webcoreMenu, const QList<WebCore::ContextMenuItem>* items, QBitArray* visitedWebActions); 88 #endif 89 void _q_onLoadProgressChanged(int); 90 void _q_webActionTriggered(bool checked); 91 void _q_cleanupLeakMessages(); 92 void updateAction(QWebPage::WebAction action); 93 void updateNavigationActions(); 94 void updateEditorActions(); 95 96 void timerEvent(QTimerEvent*); 97 98 template<class T> void mouseMoveEvent(T*); 99 template<class T> void mousePressEvent(T*); 100 template<class T> void mouseDoubleClickEvent(T*); 101 template<class T> void mouseTripleClickEvent(T*); 102 template<class T> void mouseReleaseEvent(T*); 103 #ifndef QT_NO_CONTEXTMENU 104 void contextMenuEvent(const QPoint& globalPos); 105 #endif 106 #ifndef QT_NO_WHEELEVENT 107 template<class T> void wheelEvent(T*); 108 #endif 109 void keyPressEvent(QKeyEvent*); 110 void keyReleaseEvent(QKeyEvent*); 111 void focusInEvent(QFocusEvent*); 112 void focusOutEvent(QFocusEvent*); 113 114 template<class T> void dragEnterEvent(T*); 115 template<class T> void dragLeaveEvent(T*); 116 template<class T> void dragMoveEvent(T*); 117 template<class T> void dropEvent(T*); 118 119 void inputMethodEvent(QInputMethodEvent*); 120 121 #ifndef QT_NO_PROPERTIES 122 void dynamicPropertyChangeEvent(QDynamicPropertyChangeEvent*); 123 #endif 124 125 void shortcutOverrideEvent(QKeyEvent*); 126 void leaveEvent(QEvent*); 127 void handleClipboard(QEvent*, Qt::MouseButton); 128 void handleSoftwareInputPanel(Qt::MouseButton, const QPoint&); 129 bool handleScrolling(QKeyEvent*, WebCore::Frame*); 130 131 // Returns whether the default action was cancelled in the JS event handler 132 bool touchEvent(QTouchEvent*); 133 134 class TouchAdjuster { 135 public: 136 TouchAdjuster(unsigned topPadding, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding); 137 138 WebCore::IntPoint findCandidatePointForTouch(const WebCore::IntPoint&, WebCore::Document*) const; 139 140 private: 141 unsigned m_topPadding; 142 unsigned m_rightPadding; 143 unsigned m_bottomPadding; 144 unsigned m_leftPadding; 145 }; 146 147 void adjustPointForClicking(QMouseEvent*); 148 #if !defined(QT_NO_GRAPHICSVIEW) 149 void adjustPointForClicking(QGraphicsSceneMouseEvent*); 150 #endif 151 152 void setInspector(QWebInspector*); 153 QWebInspector* getOrCreateInspector(); 154 WebCore::InspectorController* inspectorController(); 155 quint16 inspectorServerPort(); 156 157 WebCore::ViewportArguments viewportArguments(); 158 159 #ifndef QT_NO_SHORTCUT 160 static QWebPage::WebAction editorActionForKeyEvent(QKeyEvent* event); 161 #endif 162 static const char* editorCommandForWebActions(QWebPage::WebAction action); 163 164 QWebPage *q; 165 WebCore::Page *page; 166 OwnPtr<QWebPageClient> client; 167 QPointer<QWebFrame> mainFrame; 168 169 #ifndef QT_NO_UNDOSTACK 170 QUndoStack *undoStack; 171 #endif 172 173 QWeakPointer<QWidget> view; 174 175 bool insideOpenCall; 176 quint64 m_totalBytes; 177 quint64 m_bytesReceived; 178 179 QPoint tripleClick; 180 QBasicTimer tripleClickTimer; 181 182 bool clickCausedFocus; 183 184 bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, QWebPage::NavigationType type); 185 QNetworkAccessManager *networkManager; 186 187 bool forwardUnsupportedContent; 188 bool smartInsertDeleteEnabled; 189 bool selectTrailingWhitespaceEnabled; 190 QWebPage::LinkDelegationPolicy linkPolicy; 191 192 QSize viewportSize; 193 QSize fixedLayoutSize; 194 qreal pixelRatio; 195 196 QWebHistory history; 197 QWebHitTestResult hitTestResult; 198 #ifndef QT_NO_CONTEXTMENU 199 QPointer<QMenu> currentContextMenu; 200 #endif 201 QWebSettings *settings; 202 QPalette palette; 203 bool useFixedLayout; 204 205 QAction *actions[QWebPage::WebActionCount]; 206 207 QWebPluginFactory *pluginFactory; 208 209 QWidget* inspectorFrontend; 210 QWebInspector* inspector; 211 bool inspectorIsInternalOnly; // True if created through the Inspect context menu action 212 Qt::DropAction m_lastDropAction; 213 214 static bool drtRun; 215 }; 216 217 #endif 218