fb3137dacffc77e87047881a2a97eb8c1e56f4ab
[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 <QtNetwork/QNetworkRequest>
37
38 #ifndef QT_NO_OPENGL
39 #include <QtOpenGL/QGLWidget>
40 #endif
41
42 #include <QDebug>
43
44 #include <cstdio>
45 #include <qevent.h>
46 #include <qwebelement.h>
47 #include <qwebframe.h>
48 #include <qwebinspector.h>
49 #include <qwebsettings.h>
50
51 #include "mainwindow.h"
52 #include "urlloader.h"
53 #include "utils.h"
54 #include "webinspector.h"
55 #include "webpage.h"
56 #include "webview.h"
57
58 QT_BEGIN_NAMESPACE
59 class QPropertyAnimation;
60 class QLineEdit;
61 QT_END_NAMESPACE
62
63 struct HighlightedElement;
64
65 class WindowOptions {
66 public:
67     WindowOptions()
68         : useGraphicsView(false)
69         , useDiskCache(false)
70         , useCompositing(true)
71         , useTiledBackingStore(false)
72         , useWebGL(false)
73         , useWebAudio(false)
74         , useFrameFlattening(false)
75         , cacheWebView(false)
76         , showFrameRate(false)
77         , resizesToContents(false)
78         , viewportUpdateMode(QGraphicsView::MinimalViewportUpdate)
79         , useLocalStorage(false)
80         , useOfflineStorageDatabase(false)
81         , useOfflineWebApplicationCache(false)
82         , useDiskCookies(true)
83         , enableScrollAnimator(false)
84         , offlineStorageDefaultQuotaSize(0)
85 #ifndef QT_NO_OPENGL
86         , useQGLWidgetViewport(false)
87 #endif
88         , printLoadedUrls(false)
89         , startMaximized(false)
90     {
91     }
92
93     bool useGraphicsView;
94     bool useDiskCache;
95     bool useCompositing;
96     bool useTiledBackingStore;
97     bool useWebGL;
98     bool useWebAudio;
99     bool useFrameFlattening;
100     bool cacheWebView;
101     bool showFrameRate;
102     bool resizesToContents;
103     QGraphicsView::ViewportUpdateMode viewportUpdateMode;
104     bool useLocalStorage;
105     bool useOfflineStorageDatabase;
106     bool useOfflineWebApplicationCache;
107     bool useDiskCookies;
108     bool enableScrollAnimator;
109     quint64 offlineStorageDefaultQuotaSize;
110 #ifndef QT_NO_OPENGL
111     bool useQGLWidgetViewport;
112 #endif
113     bool printLoadedUrls;
114     QUrl inspectorUrl;
115     quint16 remoteInspectorPort;
116     bool startMaximized;
117 };
118
119 class LauncherWindow : public MainWindow {
120     Q_OBJECT
121
122 public:
123     LauncherWindow(WindowOptions* data = 0, QGraphicsScene* sharedScene = 0);
124     virtual ~LauncherWindow();
125
126     void sendTouchEvent();
127
128     bool eventFilter(QObject* obj, QEvent* event);
129
130 protected Q_SLOTS:
131     void loadStarted();
132     void loadFinished();
133
134     void showLinkHover(const QString &link, const QString &toolTip);
135
136     void zoomIn();
137     void zoomOut();
138     void resetZoom();
139     void toggleZoomTextOnly(bool on);
140     void zoomAnimationFinished();
141
142     void print();
143     void screenshot();
144
145     void setEditable(bool on);
146
147     /* void dumpPlugins() */
148     void dumpHtml();
149
150     void loadURLListFromFile();
151
152     void setDiskCache(bool enable);
153     void setTouchMocking(bool on);
154     void toggleWebView(bool graphicsBased);
155     void toggleAcceleratedCompositing(bool toggle);
156     void toggleTiledBackingStore(bool toggle);
157     void toggleResizesToContents(bool toggle);
158     void toggleWebGL(bool toggle);
159     void toggleWebAudio(bool toggle);
160     void toggleSpatialNavigation(bool b);
161     void toggleFullScreenMode(bool enable);
162     void toggleFrameFlattening(bool toggle);
163     void toggleInterruptingJavaScriptEnabled(bool enable);
164     void toggleJavascriptCanOpenWindows(bool enable);
165     void toggleAutoLoadImages(bool enable);
166     void setUseDiskCookies(bool enable);
167     void clearCookies();
168     void togglePlugins(bool enable);
169     void toggleLocalStorage(bool toggle);
170     void toggleOfflineStorageDatabase(bool toggle);
171     void toggleOfflineWebApplicationCache(bool toggle);
172     void toggleScrollAnimator(bool toggle);
173     void setOfflineStorageDefaultQuota();
174 #ifndef QT_NO_LINEEDIT
175     void showFindBar();
176     void find(int mode);
177 #endif
178 #ifndef QT_NO_OPENGL
179     void toggleQGLWidgetViewport(bool enable);
180 #endif
181
182     void changeViewportUpdateMode(int mode);
183     void animatedFlip();
184     void animatedYFlip();
185     void selectElements();
186     void clearSelection();
187     void showFPS(bool enable);
188     void showUserAgentDialog();
189
190     void printURL(const QUrl&);
191 #if !defined(QT_NO_FILEDIALOG) && !defined(QT_NO_MESSAGEBOX)
192     void downloadRequest(const QNetworkRequest&);
193     void fileDownloadFinished();
194 #endif
195
196 public Q_SLOTS:
197     LauncherWindow* newWindow();
198     LauncherWindow* cloneWindow();
199     void updateFPS(int fps);
200
201 Q_SIGNALS:
202     void enteredFullScreenMode(bool on);
203
204 private:
205     void init();
206     void initializeView();
207     void createChrome();
208     void applyPrefs();
209     void applyZoom();
210
211     bool isGraphicsBased() const;
212
213 private:
214     static QVector<int> m_zoomLevels;
215     int m_currentZoom;
216
217     UrlLoader* m_urlLoader;
218
219     QWidget* m_view;
220     WebInspector* m_inspector;
221
222     WindowOptions m_windowOptions;
223
224     QAction* m_formatMenuAction;
225
226     QPropertyAnimation* m_zoomAnimation;
227 #if !defined(QT_NO_FILEDIALOG) && !defined(QT_NO_MESSAGEBOX)
228     QNetworkReply* m_reply;
229 #endif
230     QList<QTouchEvent::TouchPoint> m_touchPoints;
231     QList<HighlightedElement> m_highlightedElements;
232     bool m_touchMocking;
233
234     QString m_inputUrl;
235 #ifndef QT_NO_LINEEDIT
236     QToolBar* m_findBar;
237     QLineEdit* m_lineEdit;
238     int m_findFlag;
239     static const int s_findNormalFlag = 0;
240 #endif
241 };
242
243 #endif