/*
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
* Copyright (C) 2009 Girish Ramakrishnan <girish@forwardbias.in>
* Copyright (C) 2006 George Staikos <staikos@kde.org>
* Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
* Copyright (C) 2006 Zack Rusin <zack@kde.org>
* Copyright (C) 2006 Simon Hausmann <hausmann@kde.org>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef launcherwindow_h
#define launcherwindow_h
#include <QtGui>
#include <QtNetwork/QNetworkRequest>
#if defined(QT_CONFIGURED_WITH_OPENGL)
#include <QtOpenGL/QGLWidget>
#endif
#if !defined(QT_NO_PRINTER)
#include <QPrintPreviewDialog>
#endif
#ifndef QT_NO_UITOOLS
#include <QtUiTools/QUiLoader>
#endif
#include <QDebug>
#include <cstdio>
#include <qevent.h>
#include <qwebelement.h>
#include <qwebframe.h>
#include <qwebinspector.h>
#include <qwebsettings.h>
#ifdef Q_WS_MAEMO_5
#include <qx11info_x11.h>
#endif
#include "DumpRenderTreeSupportQt.h"
#include "mainwindow.h"
#include "urlloader.h"
#include "utils.h"
#include "webinspector.h"
#include "webpage.h"
#include "webview.h"
#ifdef Q_WS_MAEMO_5
#include <X11/Xatom.h>
#include <X11/Xlib.h>
#undef KeyPress
#endif
class QPropertyAnimation;
class WindowOptions {
public:
WindowOptions()
: useGraphicsView(false)
, useCompositing(true)
, useTiledBackingStore(false)
, useWebGL(false)
#if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN)
, useFrameFlattening(true)
#else
, useFrameFlattening(false)
#endif
, cacheWebView(false)
, showFrameRate(false)
, resizesToContents(false)
, viewportUpdateMode(QGraphicsView::MinimalViewportUpdate)
, useLocalStorage(false)
, useOfflineStorageDatabase(false)
, useOfflineWebApplicationCache(false)
, offlineStorageDefaultQuotaSize(0)
#if defined(QT_CONFIGURED_WITH_OPENGL)
, useQGLWidgetViewport(false)
#endif
#if defined(Q_WS_X11)
, useTestFonts(false)
#endif
, printLoadedUrls(false)
#if defined(Q_OS_SYMBIAN)
, startMaximized(true)
#else
, startMaximized(false)
#endif
{
}
bool useGraphicsView;
bool useCompositing;
bool useTiledBackingStore;
bool useWebGL;
bool useFrameFlattening;
bool cacheWebView;
bool showFrameRate;
bool resizesToContents;
QGraphicsView::ViewportUpdateMode viewportUpdateMode;
bool useLocalStorage;
bool useOfflineStorageDatabase;
bool useOfflineWebApplicationCache;
quint64 offlineStorageDefaultQuotaSize;
#if defined(QT_CONFIGURED_WITH_OPENGL)
bool useQGLWidgetViewport;
#endif
#if defined(Q_WS_X11)
bool useTestFonts;
#endif
bool printLoadedUrls;
QUrl inspectorUrl;
quint16 remoteInspectorPort;
bool startMaximized;
};
class LauncherWindow : public MainWindow {
Q_OBJECT
public:
LauncherWindow(WindowOptions* data = 0, QGraphicsScene* sharedScene = 0);
virtual ~LauncherWindow();
virtual void keyPressEvent(QKeyEvent* event);
void grabZoomKeys(bool grab);
void sendTouchEvent();
bool eventFilter(QObject* obj, QEvent* event);
protected slots:
void loadStarted();
void loadFinished();
void showLinkHover(const QString &link, const QString &toolTip);
void zoomIn();
void zoomOut();
void resetZoom();
void toggleZoomTextOnly(bool on);
void zoomAnimationFinished();
void print();
void screenshot();
void setEditable(bool on);
/* void dumpPlugins() */
void dumpHtml();
void loadURLListFromFile();
void setTouchMocking(bool on);
void toggleWebView(bool graphicsBased);
void toggleAcceleratedCompositing(bool toggle);
void toggleTiledBackingStore(bool toggle);
void toggleResizesToContents(bool toggle);
void toggleWebGL(bool toggle);
void toggleSpatialNavigation(bool b);
void toggleFullScreenMode(bool enable);
void toggleFrameFlattening(bool toggle);
void toggleInterruptingJavaScriptEnabled(bool enable);
void toggleJavascriptCanOpenWindows(bool enable);
void toggleAutoLoadImages(bool enable);
void togglePlugins(bool enable);
void toggleLocalStorage(bool toggle);
void toggleOfflineStorageDatabase(bool toggle);
void toggleOfflineWebApplicationCache(bool toggle);
void setOfflineStorageDefaultQuota();
#if defined(QT_CONFIGURED_WITH_OPENGL)
void toggleQGLWidgetViewport(bool enable);
#endif
void changeViewportUpdateMode(int mode);
void animatedFlip();
void animatedYFlip();
void selectElements();
void showFPS(bool enable);
void showUserAgentDialog();
void printURL(const QUrl&);
public slots:
LauncherWindow* newWindow();
LauncherWindow* cloneWindow();
void updateFPS(int fps);
signals:
void enteredFullScreenMode(bool on);
private:
void init();
void initializeView();
void createChrome();
void applyPrefs();
void applyZoom();
bool isGraphicsBased() const;
private:
static QVector<int> m_zoomLevels;
int m_currentZoom;
UrlLoader* m_urlLoader;
QWidget* m_view;
WebInspector* m_inspector;
WindowOptions m_windowOptions;
QAction* m_formatMenuAction;
QPropertyAnimation* m_zoomAnimation;
QList<QTouchEvent::TouchPoint> m_touchPoints;
bool m_touchMocking;
QString m_inputUrl;
};
#endif