Home | History | Annotate | Download | only in QtTestBrowser
      1 /*
      2  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
      3  * Copyright (C) 2009 Girish Ramakrishnan <girish (at) forwardbias.in>
      4  * Copyright (C) 2006 George Staikos <staikos (at) kde.org>
      5  * Copyright (C) 2006 Dirk Mueller <mueller (at) kde.org>
      6  * Copyright (C) 2006 Zack Rusin <zack (at) kde.org>
      7  * Copyright (C) 2006 Simon Hausmann <hausmann (at) 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 "DumpRenderTreeSupportQt.h"
     65 #include "mainwindow.h"
     66 #include "urlloader.h"
     67 #include "utils.h"
     68 #include "webinspector.h"
     69 #include "webpage.h"
     70 #include "webview.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         , cacheWebView(false)
     93         , showFrameRate(false)
     94         , resizesToContents(false)
     95         , viewportUpdateMode(QGraphicsView::MinimalViewportUpdate)
     96         , useLocalStorage(false)
     97         , useOfflineStorageDatabase(false)
     98         , useOfflineWebApplicationCache(false)
     99         , offlineStorageDefaultQuotaSize(0)
    100 #if defined(QT_CONFIGURED_WITH_OPENGL)
    101         , useQGLWidgetViewport(false)
    102 #endif
    103 #if defined(Q_WS_X11)
    104         , useTestFonts(false)
    105 #endif
    106         , printLoadedUrls(false)
    107 #if defined(Q_OS_SYMBIAN)
    108         , startMaximized(true)
    109 #else
    110         , startMaximized(false)
    111 #endif
    112     {
    113     }
    114 
    115     bool useGraphicsView;
    116     bool useCompositing;
    117     bool useTiledBackingStore;
    118     bool useWebGL;
    119     bool useFrameFlattening;
    120     bool cacheWebView;
    121     bool showFrameRate;
    122     bool resizesToContents;
    123     QGraphicsView::ViewportUpdateMode viewportUpdateMode;
    124     bool useLocalStorage;
    125     bool useOfflineStorageDatabase;
    126     bool useOfflineWebApplicationCache;
    127     quint64 offlineStorageDefaultQuotaSize;
    128 #if defined(QT_CONFIGURED_WITH_OPENGL)
    129     bool useQGLWidgetViewport;
    130 #endif
    131 #if defined(Q_WS_X11)
    132     bool useTestFonts;
    133 #endif
    134     bool printLoadedUrls;
    135     QUrl inspectorUrl;
    136     quint16 remoteInspectorPort;
    137     bool startMaximized;
    138 };
    139 
    140 class LauncherWindow : public MainWindow {
    141     Q_OBJECT
    142 
    143 public:
    144     LauncherWindow(WindowOptions* data = 0, QGraphicsScene* sharedScene = 0);
    145     virtual ~LauncherWindow();
    146 
    147     virtual void keyPressEvent(QKeyEvent* event);
    148     void grabZoomKeys(bool grab);
    149 
    150     void sendTouchEvent();
    151 
    152     bool eventFilter(QObject* obj, QEvent* event);
    153 
    154 protected slots:
    155     void loadStarted();
    156     void loadFinished();
    157 
    158     void showLinkHover(const QString &link, const QString &toolTip);
    159 
    160     void zoomIn();
    161     void zoomOut();
    162     void resetZoom();
    163     void toggleZoomTextOnly(bool on);
    164     void zoomAnimationFinished();
    165 
    166     void print();
    167     void screenshot();
    168 
    169     void setEditable(bool on);
    170 
    171     /* void dumpPlugins() */
    172     void dumpHtml();
    173 
    174     void loadURLListFromFile();
    175 
    176     void setTouchMocking(bool on);
    177     void toggleWebView(bool graphicsBased);
    178     void toggleAcceleratedCompositing(bool toggle);
    179     void toggleTiledBackingStore(bool toggle);
    180     void toggleResizesToContents(bool toggle);
    181     void toggleWebGL(bool toggle);
    182     void toggleSpatialNavigation(bool b);
    183     void toggleFullScreenMode(bool enable);
    184     void toggleFrameFlattening(bool toggle);
    185     void toggleInterruptingJavaScriptEnabled(bool enable);
    186     void toggleJavascriptCanOpenWindows(bool enable);
    187     void toggleAutoLoadImages(bool enable);
    188     void togglePlugins(bool enable);
    189     void toggleLocalStorage(bool toggle);
    190     void toggleOfflineStorageDatabase(bool toggle);
    191     void toggleOfflineWebApplicationCache(bool toggle);
    192     void setOfflineStorageDefaultQuota();
    193 
    194 #if defined(QT_CONFIGURED_WITH_OPENGL)
    195     void toggleQGLWidgetViewport(bool enable);
    196 #endif
    197 
    198     void changeViewportUpdateMode(int mode);
    199     void animatedFlip();
    200     void animatedYFlip();
    201     void selectElements();
    202     void showFPS(bool enable);
    203     void showUserAgentDialog();
    204 
    205     void printURL(const QUrl&);
    206 
    207 public slots:
    208     LauncherWindow* newWindow();
    209     LauncherWindow* cloneWindow();
    210     void updateFPS(int fps);
    211 
    212 signals:
    213     void enteredFullScreenMode(bool on);
    214 
    215 private:
    216     void init();
    217     void initializeView();
    218     void createChrome();
    219     void applyPrefs();
    220     void applyZoom();
    221 
    222     bool isGraphicsBased() const;
    223 
    224 private:
    225     static QVector<int> m_zoomLevels;
    226     int m_currentZoom;
    227 
    228     UrlLoader* m_urlLoader;
    229 
    230     QWidget* m_view;
    231     WebInspector* m_inspector;
    232 
    233     WindowOptions m_windowOptions;
    234 
    235     QAction* m_formatMenuAction;
    236 
    237     QPropertyAnimation* m_zoomAnimation;
    238     QList<QTouchEvent::TouchPoint> m_touchPoints;
    239     bool m_touchMocking;
    240 
    241     QString m_inputUrl;
    242 };
    243 
    244 #endif
    245