2011-02-04 Kundu Suchismita <suchi.kundu@nokia.com>
[WebKit.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 "../../Source/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         , useLocalStorage(false)
98         , useOfflineStorageDatabase(false)
99         , useOfflineWebApplicationCache(false)
100         , offlineStorageDefaultQuotaSize(0)
101 #if defined(QT_CONFIGURED_WITH_OPENGL)
102         , useQGLWidgetViewport(false)
103 #endif
104     {
105     }
106
107     bool useGraphicsView;
108     bool useCompositing;
109     bool useTiledBackingStore;
110     bool useWebGL;
111     bool useFrameFlattening;
112     bool useThreadedQnam;
113     bool cacheWebView;
114     bool showFrameRate;
115     bool resizesToContents;
116     QGraphicsView::ViewportUpdateMode viewportUpdateMode;
117 #if defined(QT_CONFIGURED_WITH_OPENGL)
118     bool useQGLWidgetViewport;
119 #endif
120     QUrl inspectorUrl;
121     quint16 remoteInspectorPort;
122     bool useLocalStorage;
123     bool useOfflineStorageDatabase;
124     bool useOfflineWebApplicationCache;
125     quint64 offlineStorageDefaultQuotaSize;
126 };
127
128 class LauncherWindow : public MainWindow {
129     Q_OBJECT
130
131 public:
132     LauncherWindow(WindowOptions* data = 0, QGraphicsScene* sharedScene = 0);
133     virtual ~LauncherWindow();
134
135     virtual void keyPressEvent(QKeyEvent* event);
136     void grabZoomKeys(bool grab);
137
138     void sendTouchEvent();
139
140     bool eventFilter(QObject* obj, QEvent* event);
141
142 protected slots:
143     void loadStarted();
144     void loadFinished();
145
146     void showLinkHover(const QString &link, const QString &toolTip);
147
148     void zoomIn();
149     void zoomOut();
150     void resetZoom();
151     void toggleZoomTextOnly(bool on);
152     void zoomAnimationFinished();
153
154     void print();
155     void screenshot();
156
157     void setEditable(bool on);
158
159     /* void dumpPlugins() */
160     void dumpHtml();
161
162     void setTouchMocking(bool on);
163     void toggleWebView(bool graphicsBased);
164     void toggleAcceleratedCompositing(bool toggle);
165     void toggleTiledBackingStore(bool toggle);
166     void toggleResizesToContents(bool toggle);
167     void toggleWebGL(bool toggle);
168     void toggleThreadedQnam(bool toggle);
169     void toggleSpatialNavigation(bool b);
170     void toggleFullScreenMode(bool enable);
171     void toggleFrameFlattening(bool toggle);
172     void toggleInterruptingJavaScriptEnabled(bool enable);
173     void toggleJavascriptCanOpenWindows(bool enable);
174     void toggleAutoLoadImages(bool enable);
175     void togglePlugins(bool enable);
176     void toggleLocalStorage(bool toggle);
177     void toggleOfflineStorageDatabase(bool toggle);
178     void toggleOfflineWebApplicationCache(bool toggle);
179     void setOfflineStorageDefaultQuota();
180
181 #if defined(QT_CONFIGURED_WITH_OPENGL)
182     void toggleQGLWidgetViewport(bool enable);
183 #endif
184
185     void changeViewportUpdateMode(int mode);
186     void animatedFlip();
187     void animatedYFlip();
188     void selectElements();
189     void showFPS(bool enable);
190     void showUserAgentDialog();
191
192 public slots:
193     LauncherWindow* newWindow();
194     LauncherWindow* cloneWindow();
195     void updateFPS(int fps);
196
197 signals:
198     void enteredFullScreenMode(bool on);
199
200 private:
201     void init();
202     void initializeView();
203     void createChrome();
204     void applyPrefs();
205     void applyZoom();
206
207     bool isGraphicsBased() const;
208
209 private:
210     static QVector<int> m_zoomLevels;
211     int m_currentZoom;
212
213     QWidget* m_view;
214     WebInspector* m_inspector;
215
216     WindowOptions m_windowOptions;
217
218     QAction* m_formatMenuAction;
219
220     QPropertyAnimation* m_zoomAnimation;
221     QList<QTouchEvent::TouchPoint> m_touchPoints;
222     bool m_touchMocking;
223
224     QString m_inputUrl;
225 };
226
227 #endif