2011-01-10 Laszlo Gombos <laszlo.1.gombos@nokia.com>
[WebKit-https.git] / Tools / 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 QPropertyAnimation;
79
80 class WindowOptions {
81 public:
82     WindowOptions()
83         : useGraphicsView(false)
84         , useCompositing(true)
85         , useTiledBackingStore(false)
86         , useWebGL(false)
87 #if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN)
88         , useFrameFlattening(true)
89 #else
90         , useFrameFlattening(false)
91 #endif
92         , useThreadedQnam(true)
93         , cacheWebView(false)
94         , showFrameRate(false)
95         , resizesToContents(false)
96         , viewportUpdateMode(QGraphicsView::MinimalViewportUpdate)
97 #if defined(QT_CONFIGURED_WITH_OPENGL)
98         , useQGLWidgetViewport(false)
99 #endif
100     {
101     }
102
103     bool useGraphicsView;
104     bool useCompositing;
105     bool useTiledBackingStore;
106     bool useWebGL;
107     bool useFrameFlattening;
108     bool useThreadedQnam;
109     bool cacheWebView;
110     bool showFrameRate;
111     bool resizesToContents;
112     QGraphicsView::ViewportUpdateMode viewportUpdateMode;
113 #if defined(QT_CONFIGURED_WITH_OPENGL)
114     bool useQGLWidgetViewport;
115 #endif
116     QUrl inspectorUrl;
117     quint16 remoteInspectorPort;
118 };
119
120 class LauncherWindow : public MainWindow {
121     Q_OBJECT
122
123 public:
124     LauncherWindow(WindowOptions* data = 0, QGraphicsScene* sharedScene = 0);
125     virtual ~LauncherWindow();
126
127     virtual void keyPressEvent(QKeyEvent* event);
128     void grabZoomKeys(bool grab);
129
130     void sendTouchEvent();
131
132     bool eventFilter(QObject* obj, QEvent* event);
133
134 protected slots:
135     void loadStarted();
136     void loadFinished();
137
138     void showLinkHover(const QString &link, const QString &toolTip);
139
140     void zoomIn();
141     void zoomOut();
142     void resetZoom();
143     void toggleZoomTextOnly(bool on);
144     void zoomAnimationFinished();
145
146     void print();
147     void screenshot();
148
149     void setEditable(bool on);
150
151     /* void dumpPlugins() */
152     void dumpHtml();
153
154     void setTouchMocking(bool on);
155     void toggleWebView(bool graphicsBased);
156     void toggleAcceleratedCompositing(bool toggle);
157     void toggleTiledBackingStore(bool toggle);
158     void toggleResizesToContents(bool toggle);
159     void toggleWebGL(bool toggle);
160     void toggleThreadedQnam(bool toggle);
161     void toggleSpatialNavigation(bool b);
162     void toggleFullScreenMode(bool enable);
163     void toggleFrameFlattening(bool toggle);
164     void toggleInterruptingJavaScriptEnabled(bool enable);
165     void toggleJavascriptCanOpenWindows(bool enable);
166
167 #if defined(QT_CONFIGURED_WITH_OPENGL)
168     void toggleQGLWidgetViewport(bool enable);
169 #endif
170
171     void changeViewportUpdateMode(int mode);
172     void animatedFlip();
173     void animatedYFlip();
174     void selectElements();
175     void showFPS(bool enable);
176     void showUserAgentDialog();
177
178 public slots:
179     LauncherWindow* newWindow();
180     LauncherWindow* cloneWindow();
181     void updateFPS(int fps);
182
183 signals:
184     void enteredFullScreenMode(bool on);
185
186 private:
187     void init();
188     void initializeView();
189     void createChrome();
190     void applyPrefs();
191     void applyZoom();
192
193     bool isGraphicsBased() const;
194
195 private:
196     static QVector<int> m_zoomLevels;
197     int m_currentZoom;
198
199     QWidget* m_view;
200     WebInspector* m_inspector;
201
202     WindowOptions m_windowOptions;
203
204     QAction* m_formatMenuAction;
205
206     QPropertyAnimation* m_zoomAnimation;
207     QList<QTouchEvent::TouchPoint> m_touchPoints;
208     bool m_touchMocking;
209 };
210
211 #endif