Clean up ChunkedUpdateDrawingAreaProxy
[WebKit-https.git] / WebKitTools / QtTestBrowser / launcherwindow.h
1 /*
2  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
3  * Copyright (C) 2009 Girish Ramakrishnan <girish@forwardbias.in>
4  * Copyright (C) 2006 George Staikos <staikos@kde.org>
5  * Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
6  * Copyright (C) 2006 Zack Rusin <zack@kde.org>
7  * Copyright (C) 2006 Simon Hausmann <hausmann@kde.org>
8  *
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  *
20  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
21  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
28  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32
33 #ifndef launcherwindow_h
34 #define launcherwindow_h
35
36 #include <QtGui>
37 #include <QtNetwork/QNetworkRequest>
38
39 #if defined(QT_CONFIGURED_WITH_OPENGL)
40 #include <QtOpenGL/QGLWidget>
41 #endif
42
43 #if !defined(QT_NO_PRINTER)
44 #include <QPrintPreviewDialog>
45 #endif
46
47 #ifndef QT_NO_UITOOLS
48 #include <QtUiTools/QUiLoader>
49 #endif
50
51 #include <QDebug>
52
53 #include <cstdio>
54 #include <qevent.h>
55 #include <qwebelement.h>
56 #include <qwebframe.h>
57 #include <qwebinspector.h>
58 #include <qwebsettings.h>
59
60 #ifdef Q_WS_MAEMO_5
61 #include <qx11info_x11.h>
62 #endif
63
64 #include "mainwindow.h"
65 #include "urlloader.h"
66 #include "utils.h"
67 #include "webinspector.h"
68 #include "webpage.h"
69 #include "webview.h"
70 #include "../../WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h"
71
72 #ifdef Q_WS_MAEMO_5
73 #include <X11/Xatom.h>
74 #include <X11/Xlib.h>
75 #undef KeyPress
76 #endif
77
78 class WindowOptions {
79 public:
80     WindowOptions()
81         : useGraphicsView(false)
82         , useCompositing(true)
83         , useTiledBackingStore(false)
84         , useWebGL(false)
85 #if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN)
86         , useFrameFlattening(true)
87 #else
88         , useFrameFlattening(false)
89 #endif
90         , useThreadedQnam(true)
91         , cacheWebView(false)
92         , showFrameRate(false)
93         , resizesToContents(false)
94         , viewportUpdateMode(QGraphicsView::MinimalViewportUpdate)
95 #if defined(QT_CONFIGURED_WITH_OPENGL)
96         , useQGLWidgetViewport(false)
97 #endif
98     {
99     }
100
101     bool useGraphicsView;
102     bool useCompositing;
103     bool useTiledBackingStore;
104     bool useWebGL;
105     bool useFrameFlattening;
106     bool useThreadedQnam;
107     bool cacheWebView;
108     bool showFrameRate;
109     bool resizesToContents;
110     QGraphicsView::ViewportUpdateMode viewportUpdateMode;
111 #if defined(QT_CONFIGURED_WITH_OPENGL)
112     bool useQGLWidgetViewport;
113 #endif
114     QUrl inspectorUrl;
115     quint16 remoteInspectorPort;
116 };
117
118 class LauncherWindow : public MainWindow {
119     Q_OBJECT
120
121 public:
122     LauncherWindow(WindowOptions* data = 0, QGraphicsScene* sharedScene = 0);
123     virtual ~LauncherWindow();
124
125     virtual void keyPressEvent(QKeyEvent* event);
126     void grabZoomKeys(bool grab);
127
128     void sendTouchEvent();
129
130     bool eventFilter(QObject* obj, QEvent* event);
131
132 protected slots:
133     void loadStarted();
134     void loadFinished();
135
136     void showLinkHover(const QString &link, const QString &toolTip);
137
138     void zoomIn();
139     void zoomOut();
140     void resetZoom();
141     void toggleZoomTextOnly(bool on);
142     void zoomAnimationFinished();
143
144     void print();
145     void screenshot();
146
147     void setEditable(bool on);
148
149     /* void dumpPlugins() */
150     void dumpHtml();
151
152     void setTouchMocking(bool on);
153     void toggleWebView(bool graphicsBased);
154     void toggleAcceleratedCompositing(bool toggle);
155     void toggleTiledBackingStore(bool toggle);
156     void toggleResizesToContents(bool toggle);
157     void toggleWebGL(bool toggle);
158     void toggleThreadedQnam(bool toggle);
159     void toggleSpatialNavigation(bool b);
160     void toggleFullScreenMode(bool enable);
161     void toggleFrameFlattening(bool toggle);
162     void toggleInterruptingJavaScriptEnabled(bool enable);
163     void toggleJavascriptCanOpenWindows(bool enable);
164
165 #if defined(QT_CONFIGURED_WITH_OPENGL)
166     void toggleQGLWidgetViewport(bool enable);
167 #endif
168
169     void changeViewportUpdateMode(int mode);
170     void animatedFlip();
171     void animatedYFlip();
172     void selectElements();
173     void showFPS(bool enable);
174     void showUserAgentDialog();
175
176 public slots:
177     LauncherWindow* newWindow();
178     LauncherWindow* cloneWindow();
179     void updateFPS(int fps);
180
181 signals:
182     void enteredFullScreenMode(bool on);
183
184 private:
185     void init();
186     void initializeView();
187     void createChrome();
188     void applyPrefs();
189     void applyZoom();
190
191     bool isGraphicsBased() const;
192
193 private:
194     static QVector<int> m_zoomLevels;
195     int m_currentZoom;
196
197     QWidget* m_view;
198     WebInspector* m_inspector;
199
200     WindowOptions m_windowOptions;
201
202     QAction* m_formatMenuAction;
203
204     QPropertyAnimation* m_zoomAnimation;
205     QList<QTouchEvent::TouchPoint> m_touchPoints;
206     bool m_touchMocking;
207 };
208
209 #endif