1d0825bca7fe65beaee391d30da42e937db621564Steve Block/* 2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) 3d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2009 Girish Ramakrishnan <girish@forwardbias.in> 4d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006 George Staikos <staikos@kde.org> 5d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006 Dirk Mueller <mueller@kde.org> 6d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006 Zack Rusin <zack@kde.org> 7d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006 Simon Hausmann <hausmann@kde.org> 8d0825bca7fe65beaee391d30da42e937db621564Steve Block * 9d0825bca7fe65beaee391d30da42e937db621564Steve Block * All rights reserved. 10d0825bca7fe65beaee391d30da42e937db621564Steve Block * 11d0825bca7fe65beaee391d30da42e937db621564Steve Block * Redistribution and use in source and binary forms, with or without 12d0825bca7fe65beaee391d30da42e937db621564Steve Block * modification, are permitted provided that the following conditions 13d0825bca7fe65beaee391d30da42e937db621564Steve Block * are met: 14d0825bca7fe65beaee391d30da42e937db621564Steve Block * 1. Redistributions of source code must retain the above copyright 15d0825bca7fe65beaee391d30da42e937db621564Steve Block * notice, this list of conditions and the following disclaimer. 16d0825bca7fe65beaee391d30da42e937db621564Steve Block * 2. Redistributions in binary form must reproduce the above copyright 17d0825bca7fe65beaee391d30da42e937db621564Steve Block * notice, this list of conditions and the following disclaimer in the 18d0825bca7fe65beaee391d30da42e937db621564Steve Block * documentation and/or other materials provided with the distribution. 19d0825bca7fe65beaee391d30da42e937db621564Steve Block * 20d0825bca7fe65beaee391d30da42e937db621564Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 21d0825bca7fe65beaee391d30da42e937db621564Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22d0825bca7fe65beaee391d30da42e937db621564Steve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23d0825bca7fe65beaee391d30da42e937db621564Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 24d0825bca7fe65beaee391d30da42e937db621564Steve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25d0825bca7fe65beaee391d30da42e937db621564Steve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26d0825bca7fe65beaee391d30da42e937db621564Steve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 27d0825bca7fe65beaee391d30da42e937db621564Steve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 28d0825bca7fe65beaee391d30da42e937db621564Steve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29d0825bca7fe65beaee391d30da42e937db621564Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30d0825bca7fe65beaee391d30da42e937db621564Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31d0825bca7fe65beaee391d30da42e937db621564Steve Block */ 32d0825bca7fe65beaee391d30da42e937db621564Steve Block 33d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QtGui> 34d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QtNetwork/QNetworkRequest> 35d0825bca7fe65beaee391d30da42e937db621564Steve Block#if !defined(QT_NO_PRINTER) 36d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QPrintPreviewDialog> 37d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 38d0825bca7fe65beaee391d30da42e937db621564Steve Block 39d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifndef QT_NO_UITOOLS 40d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QtUiTools/QUiLoader> 41d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 42d0825bca7fe65beaee391d30da42e937db621564Steve Block 43d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QDebug> 44d0825bca7fe65beaee391d30da42e937db621564Steve Block 45d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <cstdio> 46d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "mainwindow.h" 47d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <qevent.h> 48d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <qwebelement.h> 49d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <qwebframe.h> 50d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <qwebinspector.h> 51d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <qwebsettings.h> 52d0825bca7fe65beaee391d30da42e937db621564Steve Block 53d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifdef Q_WS_MAEMO_5 54d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <qx11info_x11.h> 55d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 56d0825bca7fe65beaee391d30da42e937db621564Steve Block 57d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "urlloader.h" 58d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "utils.h" 59d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "webinspector.h" 60d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "webpage.h" 61d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "webview.h" 62d0825bca7fe65beaee391d30da42e937db621564Steve Block 63d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifdef Q_WS_MAEMO_5 64d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <X11/Xatom.h> 65d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <X11/Xlib.h> 66d0825bca7fe65beaee391d30da42e937db621564Steve Block#undef KeyPress 67d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 68d0825bca7fe65beaee391d30da42e937db621564Steve Block 69d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifndef NDEBUG 70d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid QWEBKIT_EXPORT qt_drt_garbageCollector_collect(); 71d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 72d0825bca7fe65beaee391d30da42e937db621564Steve Block 738a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockstatic bool gUseGraphicsView = false; 758a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockstatic bool gUseCompositing = false; 768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockstatic bool gCacheWebView = false; 778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockstatic bool gShowFrameRate = false; 788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockstatic QGraphicsView::ViewportUpdateMode gViewportUpdateMode = QGraphicsView::MinimalViewportUpdate; 798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 808a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 81d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass LauncherWindow : public MainWindow { 82d0825bca7fe65beaee391d30da42e937db621564Steve Block Q_OBJECT 83d0825bca7fe65beaee391d30da42e937db621564Steve Block 84d0825bca7fe65beaee391d30da42e937db621564Steve Blockpublic: 85d0825bca7fe65beaee391d30da42e937db621564Steve Block LauncherWindow(QString url = QString()); 86d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual ~LauncherWindow(); 87d0825bca7fe65beaee391d30da42e937db621564Steve Block 88d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual void keyPressEvent(QKeyEvent* event); 89d0825bca7fe65beaee391d30da42e937db621564Steve Block void grabZoomKeys(bool grab); 90d0825bca7fe65beaee391d30da42e937db621564Steve Block 91d0825bca7fe65beaee391d30da42e937db621564Steve Block#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) 92d0825bca7fe65beaee391d30da42e937db621564Steve Block void sendTouchEvent(); 93d0825bca7fe65beaee391d30da42e937db621564Steve Block bool eventFilter(QObject* obj, QEvent* event); 94d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 95d0825bca7fe65beaee391d30da42e937db621564Steve Block 96d0825bca7fe65beaee391d30da42e937db621564Steve Blockprotected slots: 97d0825bca7fe65beaee391d30da42e937db621564Steve Block void loadStarted(); 98d0825bca7fe65beaee391d30da42e937db621564Steve Block void loadFinished(); 99d0825bca7fe65beaee391d30da42e937db621564Steve Block 100d0825bca7fe65beaee391d30da42e937db621564Steve Block void showLinkHover(const QString &link, const QString &toolTip); 101d0825bca7fe65beaee391d30da42e937db621564Steve Block 102d0825bca7fe65beaee391d30da42e937db621564Steve Block void zoomIn(); 103d0825bca7fe65beaee391d30da42e937db621564Steve Block void zoomOut(); 104d0825bca7fe65beaee391d30da42e937db621564Steve Block void resetZoom(); 105d0825bca7fe65beaee391d30da42e937db621564Steve Block void toggleZoomTextOnly(bool on); 106d0825bca7fe65beaee391d30da42e937db621564Steve Block 107d0825bca7fe65beaee391d30da42e937db621564Steve Block void print(); 108d0825bca7fe65beaee391d30da42e937db621564Steve Block void screenshot(); 109d0825bca7fe65beaee391d30da42e937db621564Steve Block 110d0825bca7fe65beaee391d30da42e937db621564Steve Block void setEditable(bool on); 111d0825bca7fe65beaee391d30da42e937db621564Steve Block 112d0825bca7fe65beaee391d30da42e937db621564Steve Block /* void dumpPlugins() */ 113d0825bca7fe65beaee391d30da42e937db621564Steve Block void dumpHtml(); 114d0825bca7fe65beaee391d30da42e937db621564Steve Block 115d0825bca7fe65beaee391d30da42e937db621564Steve Block void selectElements(); 116d0825bca7fe65beaee391d30da42e937db621564Steve Block 117d0825bca7fe65beaee391d30da42e937db621564Steve Block void setTouchMocking(bool on); 1188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block void toggleAcceleratedCompositing(bool toggle); 1198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block void initializeView(bool useGraphicsView = false); 120d0825bca7fe65beaee391d30da42e937db621564Steve Block 121d0825bca7fe65beaee391d30da42e937db621564Steve Blockpublic slots: 122d0825bca7fe65beaee391d30da42e937db621564Steve Block void newWindow(const QString& url = QString()); 123d0825bca7fe65beaee391d30da42e937db621564Steve Block 124d0825bca7fe65beaee391d30da42e937db621564Steve Blockprivate: 125d0825bca7fe65beaee391d30da42e937db621564Steve Block // create the status bar, tool bar & menu 126d0825bca7fe65beaee391d30da42e937db621564Steve Block void setupUI(); 127d0825bca7fe65beaee391d30da42e937db621564Steve Block 128d0825bca7fe65beaee391d30da42e937db621564Steve Blockprivate: 129d0825bca7fe65beaee391d30da42e937db621564Steve Block QVector<int> zoomLevels; 130d0825bca7fe65beaee391d30da42e937db621564Steve Block int currentZoom; 131d0825bca7fe65beaee391d30da42e937db621564Steve Block 1328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block QWidget* m_view; 133d0825bca7fe65beaee391d30da42e937db621564Steve Block WebInspector* inspector; 134d0825bca7fe65beaee391d30da42e937db621564Steve Block 135d0825bca7fe65beaee391d30da42e937db621564Steve Block QAction* formatMenuAction; 136d0825bca7fe65beaee391d30da42e937db621564Steve Block 137d0825bca7fe65beaee391d30da42e937db621564Steve Block#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) 138d0825bca7fe65beaee391d30da42e937db621564Steve Block QList<QTouchEvent::TouchPoint> touchPoints; 139d0825bca7fe65beaee391d30da42e937db621564Steve Block bool touchMocking; 140d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 141d0825bca7fe65beaee391d30da42e937db621564Steve Block}; 142d0825bca7fe65beaee391d30da42e937db621564Steve Block 143d0825bca7fe65beaee391d30da42e937db621564Steve Block 144d0825bca7fe65beaee391d30da42e937db621564Steve BlockLauncherWindow::LauncherWindow(QString url) 145d0825bca7fe65beaee391d30da42e937db621564Steve Block : MainWindow(url) 146d0825bca7fe65beaee391d30da42e937db621564Steve Block , currentZoom(100) 147d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 148d0825bca7fe65beaee391d30da42e937db621564Steve Block QSplitter* splitter = new QSplitter(Qt::Vertical, this); 149d0825bca7fe65beaee391d30da42e937db621564Steve Block setCentralWidget(splitter); 150d0825bca7fe65beaee391d30da42e937db621564Steve Block 1518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#if defined(Q_WS_S60) 1528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block showMaximized(); 1538a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#else 1548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block resize(800, 600); 155d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 156d0825bca7fe65beaee391d30da42e937db621564Steve Block 1578a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_view = 0; 1588a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block initializeView(); 1598a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 160d0825bca7fe65beaee391d30da42e937db621564Steve Block connect(page(), SIGNAL(loadStarted()), this, SLOT(loadStarted())); 161d0825bca7fe65beaee391d30da42e937db621564Steve Block connect(page(), SIGNAL(loadFinished(bool)), this, SLOT(loadFinished())); 162d0825bca7fe65beaee391d30da42e937db621564Steve Block connect(page(), SIGNAL(linkHovered(const QString&, const QString&, const QString&)), 163d0825bca7fe65beaee391d30da42e937db621564Steve Block this, SLOT(showLinkHover(const QString&, const QString&))); 164d0825bca7fe65beaee391d30da42e937db621564Steve Block 165d0825bca7fe65beaee391d30da42e937db621564Steve Block inspector = new WebInspector(splitter); 166d0825bca7fe65beaee391d30da42e937db621564Steve Block inspector->setPage(page()); 167d0825bca7fe65beaee391d30da42e937db621564Steve Block inspector->hide(); 168d0825bca7fe65beaee391d30da42e937db621564Steve Block connect(this, SIGNAL(destroyed()), inspector, SLOT(deleteLater())); 169d0825bca7fe65beaee391d30da42e937db621564Steve Block 170d0825bca7fe65beaee391d30da42e937db621564Steve Block setupUI(); 171d0825bca7fe65beaee391d30da42e937db621564Steve Block 172d0825bca7fe65beaee391d30da42e937db621564Steve Block // the zoom values are chosen to be like in Mozilla Firefox 3 173d0825bca7fe65beaee391d30da42e937db621564Steve Block zoomLevels << 30 << 50 << 67 << 80 << 90; 174d0825bca7fe65beaee391d30da42e937db621564Steve Block zoomLevels << 100; 175d0825bca7fe65beaee391d30da42e937db621564Steve Block zoomLevels << 110 << 120 << 133 << 150 << 170 << 200 << 240 << 300; 176d0825bca7fe65beaee391d30da42e937db621564Steve Block 177d0825bca7fe65beaee391d30da42e937db621564Steve Block grabZoomKeys(true); 178d0825bca7fe65beaee391d30da42e937db621564Steve Block 179d0825bca7fe65beaee391d30da42e937db621564Steve Block load(url); 180d0825bca7fe65beaee391d30da42e937db621564Steve Block} 181d0825bca7fe65beaee391d30da42e937db621564Steve Block 182d0825bca7fe65beaee391d30da42e937db621564Steve BlockLauncherWindow::~LauncherWindow() 183d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 184d0825bca7fe65beaee391d30da42e937db621564Steve Block grabZoomKeys(false); 185d0825bca7fe65beaee391d30da42e937db621564Steve Block} 186d0825bca7fe65beaee391d30da42e937db621564Steve Block 187d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::keyPressEvent(QKeyEvent* event) 188d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 189d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifdef Q_WS_MAEMO_5 190d0825bca7fe65beaee391d30da42e937db621564Steve Block switch (event->key()) { 191d0825bca7fe65beaee391d30da42e937db621564Steve Block case Qt::Key_F7: 192d0825bca7fe65beaee391d30da42e937db621564Steve Block zoomIn(); 193d0825bca7fe65beaee391d30da42e937db621564Steve Block event->accept(); 194d0825bca7fe65beaee391d30da42e937db621564Steve Block break; 195d0825bca7fe65beaee391d30da42e937db621564Steve Block case Qt::Key_F8: 196d0825bca7fe65beaee391d30da42e937db621564Steve Block zoomOut(); 197d0825bca7fe65beaee391d30da42e937db621564Steve Block event->accept(); 198d0825bca7fe65beaee391d30da42e937db621564Steve Block break; 199d0825bca7fe65beaee391d30da42e937db621564Steve Block } 200d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 201d0825bca7fe65beaee391d30da42e937db621564Steve Block MainWindow::keyPressEvent(event); 202d0825bca7fe65beaee391d30da42e937db621564Steve Block} 203d0825bca7fe65beaee391d30da42e937db621564Steve Block 204d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::grabZoomKeys(bool grab) 205d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 206d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifdef Q_WS_MAEMO_5 207d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!winId()) { 208d0825bca7fe65beaee391d30da42e937db621564Steve Block qWarning("Can't grab keys unless we have a window id"); 209d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 210d0825bca7fe65beaee391d30da42e937db621564Steve Block } 211d0825bca7fe65beaee391d30da42e937db621564Steve Block 212d0825bca7fe65beaee391d30da42e937db621564Steve Block Atom atom = XInternAtom(QX11Info::display(), "_HILDON_ZOOM_KEY_ATOM", False); 213d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!atom) { 214d0825bca7fe65beaee391d30da42e937db621564Steve Block qWarning("Unable to obtain _HILDON_ZOOM_KEY_ATOM"); 215d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 216d0825bca7fe65beaee391d30da42e937db621564Steve Block } 217d0825bca7fe65beaee391d30da42e937db621564Steve Block 218d0825bca7fe65beaee391d30da42e937db621564Steve Block unsigned long val = (grab) ? 1 : 0; 219d0825bca7fe65beaee391d30da42e937db621564Steve Block XChangeProperty(QX11Info::display(), winId(), atom, XA_INTEGER, 32, PropModeReplace, reinterpret_cast<unsigned char*>(&val), 1); 220d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 221d0825bca7fe65beaee391d30da42e937db621564Steve Block} 222d0825bca7fe65beaee391d30da42e937db621564Steve Block 223d0825bca7fe65beaee391d30da42e937db621564Steve Block#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) 224d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::sendTouchEvent() 225d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 226d0825bca7fe65beaee391d30da42e937db621564Steve Block if (touchPoints.isEmpty()) 227d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 228d0825bca7fe65beaee391d30da42e937db621564Steve Block 229d0825bca7fe65beaee391d30da42e937db621564Steve Block QEvent::Type type = QEvent::TouchUpdate; 230d0825bca7fe65beaee391d30da42e937db621564Steve Block if (touchPoints.size() == 1) { 231d0825bca7fe65beaee391d30da42e937db621564Steve Block if (touchPoints[0].state() == Qt::TouchPointReleased) 232d0825bca7fe65beaee391d30da42e937db621564Steve Block type = QEvent::TouchEnd; 233d0825bca7fe65beaee391d30da42e937db621564Steve Block else if (touchPoints[0].state() == Qt::TouchPointPressed) 234d0825bca7fe65beaee391d30da42e937db621564Steve Block type = QEvent::TouchBegin; 235d0825bca7fe65beaee391d30da42e937db621564Steve Block } 236d0825bca7fe65beaee391d30da42e937db621564Steve Block 237d0825bca7fe65beaee391d30da42e937db621564Steve Block QTouchEvent touchEv(type); 238d0825bca7fe65beaee391d30da42e937db621564Steve Block touchEv.setTouchPoints(touchPoints); 239d0825bca7fe65beaee391d30da42e937db621564Steve Block QCoreApplication::sendEvent(page(), &touchEv); 240d0825bca7fe65beaee391d30da42e937db621564Steve Block 241d0825bca7fe65beaee391d30da42e937db621564Steve Block // After sending the event, remove all touchpoints that were released 242d0825bca7fe65beaee391d30da42e937db621564Steve Block if (touchPoints[0].state() == Qt::TouchPointReleased) 243d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoints.removeAt(0); 244d0825bca7fe65beaee391d30da42e937db621564Steve Block if (touchPoints.size() > 1 && touchPoints[1].state() == Qt::TouchPointReleased) 245d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoints.removeAt(1); 246d0825bca7fe65beaee391d30da42e937db621564Steve Block} 247d0825bca7fe65beaee391d30da42e937db621564Steve Block 248d0825bca7fe65beaee391d30da42e937db621564Steve Blockbool LauncherWindow::eventFilter(QObject* obj, QEvent* event) 249d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 2508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!touchMocking || obj != m_view) 251d0825bca7fe65beaee391d30da42e937db621564Steve Block return QObject::eventFilter(obj, event); 252d0825bca7fe65beaee391d30da42e937db621564Steve Block 253d0825bca7fe65beaee391d30da42e937db621564Steve Block if (event->type() == QEvent::MouseButtonPress 254d0825bca7fe65beaee391d30da42e937db621564Steve Block || event->type() == QEvent::MouseButtonRelease 255d0825bca7fe65beaee391d30da42e937db621564Steve Block || event->type() == QEvent::MouseButtonDblClick 256d0825bca7fe65beaee391d30da42e937db621564Steve Block || event->type() == QEvent::MouseMove) { 257d0825bca7fe65beaee391d30da42e937db621564Steve Block 258d0825bca7fe65beaee391d30da42e937db621564Steve Block QMouseEvent* ev = static_cast<QMouseEvent*>(event); 259d0825bca7fe65beaee391d30da42e937db621564Steve Block if (ev->type() == QEvent::MouseMove 260d0825bca7fe65beaee391d30da42e937db621564Steve Block && !(ev->buttons() & Qt::LeftButton)) 261d0825bca7fe65beaee391d30da42e937db621564Steve Block return false; 262d0825bca7fe65beaee391d30da42e937db621564Steve Block 263d0825bca7fe65beaee391d30da42e937db621564Steve Block QTouchEvent::TouchPoint touchPoint; 264d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoint.setState(Qt::TouchPointMoved); 265d0825bca7fe65beaee391d30da42e937db621564Steve Block if ((ev->type() == QEvent::MouseButtonPress 266d0825bca7fe65beaee391d30da42e937db621564Steve Block || ev->type() == QEvent::MouseButtonDblClick)) 267d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoint.setState(Qt::TouchPointPressed); 268d0825bca7fe65beaee391d30da42e937db621564Steve Block else if (ev->type() == QEvent::MouseButtonRelease) 269d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoint.setState(Qt::TouchPointReleased); 270d0825bca7fe65beaee391d30da42e937db621564Steve Block 271d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoint.setId(0); 272d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoint.setScreenPos(ev->globalPos()); 273d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoint.setPos(ev->pos()); 274d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoint.setPressure(1); 275d0825bca7fe65beaee391d30da42e937db621564Steve Block 276d0825bca7fe65beaee391d30da42e937db621564Steve Block // If the point already exists, update it. Otherwise create it. 277d0825bca7fe65beaee391d30da42e937db621564Steve Block if (touchPoints.size() > 0 && !touchPoints[0].id()) 278d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoints[0] = touchPoint; 279d0825bca7fe65beaee391d30da42e937db621564Steve Block else if (touchPoints.size() > 1 && !touchPoints[1].id()) 280d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoints[1] = touchPoint; 281d0825bca7fe65beaee391d30da42e937db621564Steve Block else 282d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoints.append(touchPoint); 283d0825bca7fe65beaee391d30da42e937db621564Steve Block 284d0825bca7fe65beaee391d30da42e937db621564Steve Block sendTouchEvent(); 285d0825bca7fe65beaee391d30da42e937db621564Steve Block } else if (event->type() == QEvent::KeyPress 286d0825bca7fe65beaee391d30da42e937db621564Steve Block && static_cast<QKeyEvent*>(event)->key() == Qt::Key_F 287d0825bca7fe65beaee391d30da42e937db621564Steve Block && static_cast<QKeyEvent*>(event)->modifiers() == Qt::ControlModifier) { 288d0825bca7fe65beaee391d30da42e937db621564Steve Block 289d0825bca7fe65beaee391d30da42e937db621564Steve Block // If the keyboard point is already pressed, release it. 290d0825bca7fe65beaee391d30da42e937db621564Steve Block // Otherwise create it and append to touchPoints. 291d0825bca7fe65beaee391d30da42e937db621564Steve Block if (touchPoints.size() > 0 && touchPoints[0].id() == 1) { 292d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoints[0].setState(Qt::TouchPointReleased); 293d0825bca7fe65beaee391d30da42e937db621564Steve Block sendTouchEvent(); 294d0825bca7fe65beaee391d30da42e937db621564Steve Block } else if (touchPoints.size() > 1 && touchPoints[1].id() == 1) { 295d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoints[1].setState(Qt::TouchPointReleased); 296d0825bca7fe65beaee391d30da42e937db621564Steve Block sendTouchEvent(); 297d0825bca7fe65beaee391d30da42e937db621564Steve Block } else { 298d0825bca7fe65beaee391d30da42e937db621564Steve Block QTouchEvent::TouchPoint touchPoint; 299d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoint.setState(Qt::TouchPointPressed); 300d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoint.setId(1); 301d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoint.setScreenPos(QCursor::pos()); 3028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block touchPoint.setPos(m_view->mapFromGlobal(QCursor::pos())); 303d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoint.setPressure(1); 304d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoints.append(touchPoint); 305d0825bca7fe65beaee391d30da42e937db621564Steve Block sendTouchEvent(); 306d0825bca7fe65beaee391d30da42e937db621564Steve Block 307d0825bca7fe65beaee391d30da42e937db621564Steve Block // After sending the event, change the touchpoint state to stationary 308d0825bca7fe65beaee391d30da42e937db621564Steve Block touchPoints.last().setState(Qt::TouchPointStationary); 309d0825bca7fe65beaee391d30da42e937db621564Steve Block } 310d0825bca7fe65beaee391d30da42e937db621564Steve Block } 311d0825bca7fe65beaee391d30da42e937db621564Steve Block return false; 312d0825bca7fe65beaee391d30da42e937db621564Steve Block} 313d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif // QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) 314d0825bca7fe65beaee391d30da42e937db621564Steve Block 315d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::loadStarted() 316d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 3178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_view->setFocus(Qt::OtherFocusReason); 318d0825bca7fe65beaee391d30da42e937db621564Steve Block} 319d0825bca7fe65beaee391d30da42e937db621564Steve Block 320d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::loadFinished() 321d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 322d0825bca7fe65beaee391d30da42e937db621564Steve Block QUrl url = page()->mainFrame()->url(); 323d0825bca7fe65beaee391d30da42e937db621564Steve Block setAddressUrl(url.toString()); 324d0825bca7fe65beaee391d30da42e937db621564Steve Block addCompleterEntry(url); 325d0825bca7fe65beaee391d30da42e937db621564Steve Block} 326d0825bca7fe65beaee391d30da42e937db621564Steve Block 327d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::showLinkHover(const QString &link, const QString &toolTip) 328d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 329d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifndef Q_WS_MAEMO_5 330d0825bca7fe65beaee391d30da42e937db621564Steve Block statusBar()->showMessage(link); 331d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 332d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifndef QT_NO_TOOLTIP 333d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!toolTip.isEmpty()) 334d0825bca7fe65beaee391d30da42e937db621564Steve Block QToolTip::showText(QCursor::pos(), toolTip); 335d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 336d0825bca7fe65beaee391d30da42e937db621564Steve Block} 337d0825bca7fe65beaee391d30da42e937db621564Steve Block 338d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::zoomIn() 339d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 340d0825bca7fe65beaee391d30da42e937db621564Steve Block int i = zoomLevels.indexOf(currentZoom); 341d0825bca7fe65beaee391d30da42e937db621564Steve Block Q_ASSERT(i >= 0); 342d0825bca7fe65beaee391d30da42e937db621564Steve Block if (i < zoomLevels.count() - 1) 343d0825bca7fe65beaee391d30da42e937db621564Steve Block currentZoom = zoomLevels[i + 1]; 344d0825bca7fe65beaee391d30da42e937db621564Steve Block 345d0825bca7fe65beaee391d30da42e937db621564Steve Block page()->mainFrame()->setZoomFactor(qreal(currentZoom) / 100.0); 346d0825bca7fe65beaee391d30da42e937db621564Steve Block} 347d0825bca7fe65beaee391d30da42e937db621564Steve Block 348d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::zoomOut() 349d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 350d0825bca7fe65beaee391d30da42e937db621564Steve Block int i = zoomLevels.indexOf(currentZoom); 351d0825bca7fe65beaee391d30da42e937db621564Steve Block Q_ASSERT(i >= 0); 352d0825bca7fe65beaee391d30da42e937db621564Steve Block if (i > 0) 353d0825bca7fe65beaee391d30da42e937db621564Steve Block currentZoom = zoomLevels[i - 1]; 354d0825bca7fe65beaee391d30da42e937db621564Steve Block 355d0825bca7fe65beaee391d30da42e937db621564Steve Block page()->mainFrame()->setZoomFactor(qreal(currentZoom) / 100.0); 356d0825bca7fe65beaee391d30da42e937db621564Steve Block} 357d0825bca7fe65beaee391d30da42e937db621564Steve Block 358d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::resetZoom() 359d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 360d0825bca7fe65beaee391d30da42e937db621564Steve Block currentZoom = 100; 361d0825bca7fe65beaee391d30da42e937db621564Steve Block page()->mainFrame()->setZoomFactor(1.0); 362d0825bca7fe65beaee391d30da42e937db621564Steve Block} 363d0825bca7fe65beaee391d30da42e937db621564Steve Block 364d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::toggleZoomTextOnly(bool b) 365d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 366d0825bca7fe65beaee391d30da42e937db621564Steve Block page()->settings()->setAttribute(QWebSettings::ZoomTextOnly, b); 367d0825bca7fe65beaee391d30da42e937db621564Steve Block} 368d0825bca7fe65beaee391d30da42e937db621564Steve Block 369d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::print() 370d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 371d0825bca7fe65beaee391d30da42e937db621564Steve Block#if !defined(QT_NO_PRINTER) 372d0825bca7fe65beaee391d30da42e937db621564Steve Block QPrintPreviewDialog dlg(this); 373d0825bca7fe65beaee391d30da42e937db621564Steve Block connect(&dlg, SIGNAL(paintRequested(QPrinter*)), 3748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_view, SLOT(print(QPrinter*))); 375d0825bca7fe65beaee391d30da42e937db621564Steve Block dlg.exec(); 376d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 377d0825bca7fe65beaee391d30da42e937db621564Steve Block} 378d0825bca7fe65beaee391d30da42e937db621564Steve Block 379d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::screenshot() 380d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 3818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block QPixmap pixmap = QPixmap::grabWidget(m_view); 382d0825bca7fe65beaee391d30da42e937db621564Steve Block QLabel* label = new QLabel; 383d0825bca7fe65beaee391d30da42e937db621564Steve Block label->setAttribute(Qt::WA_DeleteOnClose); 384d0825bca7fe65beaee391d30da42e937db621564Steve Block label->setWindowTitle("Screenshot - Preview"); 385d0825bca7fe65beaee391d30da42e937db621564Steve Block label->setPixmap(pixmap); 386d0825bca7fe65beaee391d30da42e937db621564Steve Block label->show(); 387d0825bca7fe65beaee391d30da42e937db621564Steve Block 388d0825bca7fe65beaee391d30da42e937db621564Steve Block QString fileName = QFileDialog::getSaveFileName(label, "Screenshot"); 389d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!fileName.isEmpty()) { 390d0825bca7fe65beaee391d30da42e937db621564Steve Block pixmap.save(fileName, "png"); 391d0825bca7fe65beaee391d30da42e937db621564Steve Block label->setWindowTitle(QString("Screenshot - Saved at %1").arg(fileName)); 392d0825bca7fe65beaee391d30da42e937db621564Steve Block } 393d0825bca7fe65beaee391d30da42e937db621564Steve Block} 394d0825bca7fe65beaee391d30da42e937db621564Steve Block 395d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::setEditable(bool on) 396d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 3978a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block page()->setContentEditable(on); 398d0825bca7fe65beaee391d30da42e937db621564Steve Block formatMenuAction->setVisible(on); 399d0825bca7fe65beaee391d30da42e937db621564Steve Block} 400d0825bca7fe65beaee391d30da42e937db621564Steve Block 401d0825bca7fe65beaee391d30da42e937db621564Steve Block/* 402d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::dumpPlugins() { 403d0825bca7fe65beaee391d30da42e937db621564Steve Block QList<QWebPluginInfo> plugins = QWebSettings::pluginDatabase()->plugins(); 404d0825bca7fe65beaee391d30da42e937db621564Steve Block foreach (const QWebPluginInfo plugin, plugins) { 405d0825bca7fe65beaee391d30da42e937db621564Steve Block qDebug() << "Plugin:" << plugin.name(); 406d0825bca7fe65beaee391d30da42e937db621564Steve Block foreach (const QWebPluginInfo::MimeType mime, plugin.mimeTypes()) { 407d0825bca7fe65beaee391d30da42e937db621564Steve Block qDebug() << " " << mime.name; 408d0825bca7fe65beaee391d30da42e937db621564Steve Block } 409d0825bca7fe65beaee391d30da42e937db621564Steve Block } 410d0825bca7fe65beaee391d30da42e937db621564Steve Block} 411d0825bca7fe65beaee391d30da42e937db621564Steve Block*/ 412d0825bca7fe65beaee391d30da42e937db621564Steve Block 413d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::dumpHtml() 414d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 415d0825bca7fe65beaee391d30da42e937db621564Steve Block qDebug() << "HTML: " << page()->mainFrame()->toHtml(); 416d0825bca7fe65beaee391d30da42e937db621564Steve Block} 417d0825bca7fe65beaee391d30da42e937db621564Steve Block 418d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::selectElements() 419d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 420d0825bca7fe65beaee391d30da42e937db621564Steve Block bool ok; 421d0825bca7fe65beaee391d30da42e937db621564Steve Block QString str = QInputDialog::getText(this, "Select elements", "Choose elements", 422d0825bca7fe65beaee391d30da42e937db621564Steve Block QLineEdit::Normal, "a", &ok); 423d0825bca7fe65beaee391d30da42e937db621564Steve Block 424d0825bca7fe65beaee391d30da42e937db621564Steve Block if (ok && !str.isEmpty()) { 425d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebElementCollection result = page()->mainFrame()->findAllElements(str); 426d0825bca7fe65beaee391d30da42e937db621564Steve Block foreach (QWebElement e, result) 427d0825bca7fe65beaee391d30da42e937db621564Steve Block e.setStyleProperty("background-color", "yellow"); 428d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifndef Q_WS_MAEMO_5 429d0825bca7fe65beaee391d30da42e937db621564Steve Block statusBar()->showMessage(QString("%1 element(s) selected").arg(result.count()), 5000); 430d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 431d0825bca7fe65beaee391d30da42e937db621564Steve Block } 432d0825bca7fe65beaee391d30da42e937db621564Steve Block} 433d0825bca7fe65beaee391d30da42e937db621564Steve Block 434d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::setTouchMocking(bool on) 435d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 436d0825bca7fe65beaee391d30da42e937db621564Steve Block#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) 437d0825bca7fe65beaee391d30da42e937db621564Steve Block touchMocking = on; 438d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 439d0825bca7fe65beaee391d30da42e937db621564Steve Block} 440d0825bca7fe65beaee391d30da42e937db621564Steve Block 4418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockvoid LauncherWindow::toggleAcceleratedCompositing(bool toggle) 4428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 4438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block page()->settings()->setAttribute(QWebSettings::AcceleratedCompositingEnabled, toggle); 4448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block} 4458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockvoid LauncherWindow::initializeView(bool useGraphicsView) 4478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 4488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block delete m_view; 4498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block QSplitter* splitter = static_cast<QSplitter*>(centralWidget()); 4518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!useGraphicsView) { 4538a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block WebViewTraditional* view = new WebViewTraditional(splitter); 4548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block view->setPage(page()); 4558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_view = view; 4568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } else { 4578a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block WebViewGraphicsBased* view = new WebViewGraphicsBased(splitter); 4588a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block view->setPage(page()); 4598a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block view->setViewportUpdateMode(gViewportUpdateMode); 4608a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block view->setItemCacheMode(gCacheWebView ? QGraphicsItem::DeviceCoordinateCache : QGraphicsItem::NoCache); 4618a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (gShowFrameRate) 4628a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block view->enableFrameRateMeasurement(); 4638a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block page()->settings()->setAttribute(QWebSettings::AcceleratedCompositingEnabled, gUseCompositing); 4648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_view = view; 4658a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 4668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) 4688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_view->installEventFilter(this); 4698a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block touchMocking = false; 4708a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#endif 4718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block} 4728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 473d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::newWindow(const QString& url) 474d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 475d0825bca7fe65beaee391d30da42e937db621564Steve Block LauncherWindow* mw = new LauncherWindow(url); 476d0825bca7fe65beaee391d30da42e937db621564Steve Block mw->show(); 477d0825bca7fe65beaee391d30da42e937db621564Steve Block} 478d0825bca7fe65beaee391d30da42e937db621564Steve Block 479d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LauncherWindow::setupUI() 480d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 481d0825bca7fe65beaee391d30da42e937db621564Steve Block QMenu* fileMenu = menuBar()->addMenu("&File"); 482d0825bca7fe65beaee391d30da42e937db621564Steve Block fileMenu->addAction("New Window", this, SLOT(newWindow()), QKeySequence::New); 483d0825bca7fe65beaee391d30da42e937db621564Steve Block fileMenu->addAction(tr("Open File..."), this, SLOT(openFile()), QKeySequence::Open); 484d0825bca7fe65beaee391d30da42e937db621564Steve Block fileMenu->addAction("Close Window", this, SLOT(close()), QKeySequence::Close); 485d0825bca7fe65beaee391d30da42e937db621564Steve Block fileMenu->addSeparator(); 486d0825bca7fe65beaee391d30da42e937db621564Steve Block fileMenu->addAction("Take Screen Shot...", this, SLOT(screenshot())); 487d0825bca7fe65beaee391d30da42e937db621564Steve Block fileMenu->addAction(tr("Print..."), this, SLOT(print()), QKeySequence::Print); 488d0825bca7fe65beaee391d30da42e937db621564Steve Block fileMenu->addSeparator(); 489d0825bca7fe65beaee391d30da42e937db621564Steve Block fileMenu->addAction("Quit", QApplication::instance(), SLOT(closeAllWindows()), QKeySequence(Qt::CTRL | Qt::Key_Q)); 490d0825bca7fe65beaee391d30da42e937db621564Steve Block 491d0825bca7fe65beaee391d30da42e937db621564Steve Block QMenu* editMenu = menuBar()->addMenu("&Edit"); 492d0825bca7fe65beaee391d30da42e937db621564Steve Block editMenu->addAction(page()->action(QWebPage::Undo)); 493d0825bca7fe65beaee391d30da42e937db621564Steve Block editMenu->addAction(page()->action(QWebPage::Redo)); 494d0825bca7fe65beaee391d30da42e937db621564Steve Block editMenu->addSeparator(); 495d0825bca7fe65beaee391d30da42e937db621564Steve Block editMenu->addAction(page()->action(QWebPage::Cut)); 496d0825bca7fe65beaee391d30da42e937db621564Steve Block editMenu->addAction(page()->action(QWebPage::Copy)); 497d0825bca7fe65beaee391d30da42e937db621564Steve Block editMenu->addAction(page()->action(QWebPage::Paste)); 498d0825bca7fe65beaee391d30da42e937db621564Steve Block editMenu->addSeparator(); 499d0825bca7fe65beaee391d30da42e937db621564Steve Block QAction* setEditable = editMenu->addAction("Set Editable", this, SLOT(setEditable(bool))); 500d0825bca7fe65beaee391d30da42e937db621564Steve Block setEditable->setCheckable(true); 501d0825bca7fe65beaee391d30da42e937db621564Steve Block 502d0825bca7fe65beaee391d30da42e937db621564Steve Block QMenu* viewMenu = menuBar()->addMenu("&View"); 5038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block viewMenu->addAction(page()->action(QWebPage::Stop)); 5048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block viewMenu->addAction(page()->action(QWebPage::Reload)); 505d0825bca7fe65beaee391d30da42e937db621564Steve Block viewMenu->addSeparator(); 506d0825bca7fe65beaee391d30da42e937db621564Steve Block QAction* zoomIn = viewMenu->addAction("Zoom &In", this, SLOT(zoomIn())); 507d0825bca7fe65beaee391d30da42e937db621564Steve Block QAction* zoomOut = viewMenu->addAction("Zoom &Out", this, SLOT(zoomOut())); 508d0825bca7fe65beaee391d30da42e937db621564Steve Block QAction* resetZoom = viewMenu->addAction("Reset Zoom", this, SLOT(resetZoom())); 509d0825bca7fe65beaee391d30da42e937db621564Steve Block QAction* zoomTextOnly = viewMenu->addAction("Zoom Text Only", this, SLOT(toggleZoomTextOnly(bool))); 510d0825bca7fe65beaee391d30da42e937db621564Steve Block zoomTextOnly->setCheckable(true); 511d0825bca7fe65beaee391d30da42e937db621564Steve Block zoomTextOnly->setChecked(false); 512d0825bca7fe65beaee391d30da42e937db621564Steve Block viewMenu->addSeparator(); 513d0825bca7fe65beaee391d30da42e937db621564Steve Block viewMenu->addAction("Dump HTML", this, SLOT(dumpHtml())); 514d0825bca7fe65beaee391d30da42e937db621564Steve Block // viewMenu->addAction("Dump plugins", this, SLOT(dumpPlugins())); 515d0825bca7fe65beaee391d30da42e937db621564Steve Block 516d0825bca7fe65beaee391d30da42e937db621564Steve Block QMenu* formatMenu = new QMenu("F&ormat", this); 517d0825bca7fe65beaee391d30da42e937db621564Steve Block formatMenuAction = menuBar()->addMenu(formatMenu); 518d0825bca7fe65beaee391d30da42e937db621564Steve Block formatMenuAction->setVisible(false); 519d0825bca7fe65beaee391d30da42e937db621564Steve Block formatMenu->addAction(page()->action(QWebPage::ToggleBold)); 520d0825bca7fe65beaee391d30da42e937db621564Steve Block formatMenu->addAction(page()->action(QWebPage::ToggleItalic)); 521d0825bca7fe65beaee391d30da42e937db621564Steve Block formatMenu->addAction(page()->action(QWebPage::ToggleUnderline)); 522d0825bca7fe65beaee391d30da42e937db621564Steve Block QMenu* writingMenu = formatMenu->addMenu(tr("Writing Direction")); 523d0825bca7fe65beaee391d30da42e937db621564Steve Block writingMenu->addAction(page()->action(QWebPage::SetTextDirectionDefault)); 524d0825bca7fe65beaee391d30da42e937db621564Steve Block writingMenu->addAction(page()->action(QWebPage::SetTextDirectionLeftToRight)); 525d0825bca7fe65beaee391d30da42e937db621564Steve Block writingMenu->addAction(page()->action(QWebPage::SetTextDirectionRightToLeft)); 526d0825bca7fe65beaee391d30da42e937db621564Steve Block 527d0825bca7fe65beaee391d30da42e937db621564Steve Block zoomIn->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Plus)); 528d0825bca7fe65beaee391d30da42e937db621564Steve Block zoomOut->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Minus)); 529d0825bca7fe65beaee391d30da42e937db621564Steve Block resetZoom->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_0)); 530d0825bca7fe65beaee391d30da42e937db621564Steve Block 531d0825bca7fe65beaee391d30da42e937db621564Steve Block QMenu* toolsMenu = menuBar()->addMenu("&Develop"); 532d0825bca7fe65beaee391d30da42e937db621564Steve Block toolsMenu->addAction("Select Elements...", this, SLOT(selectElements())); 533d0825bca7fe65beaee391d30da42e937db621564Steve Block QAction* showInspectorAction = toolsMenu->addAction("Show Web Inspector", inspector, SLOT(setVisible(bool)), QKeySequence(Qt::CTRL | Qt::ALT | Qt::Key_I)); 534d0825bca7fe65beaee391d30da42e937db621564Steve Block showInspectorAction->setCheckable(true); 535d0825bca7fe65beaee391d30da42e937db621564Steve Block showInspectorAction->connect(inspector, SIGNAL(visibleChanged(bool)), SLOT(setChecked(bool))); 536d0825bca7fe65beaee391d30da42e937db621564Steve Block 537d0825bca7fe65beaee391d30da42e937db621564Steve Block#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) 538d0825bca7fe65beaee391d30da42e937db621564Steve Block QAction* touchMockAction = toolsMenu->addAction("Toggle multitouch mocking", this, SLOT(setTouchMocking(bool))); 539d0825bca7fe65beaee391d30da42e937db621564Steve Block touchMockAction->setCheckable(true); 540d0825bca7fe65beaee391d30da42e937db621564Steve Block touchMockAction->setShortcut(QKeySequence(Qt::CTRL | Qt::ALT | Qt::Key_T)); 541d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 5428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 5438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block QAction* toggleAcceleratedCompositing = toolsMenu->addAction("Toggle Accelerated Compositing", this, SLOT(toggleAcceleratedCompositing(bool))); 5448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block toggleAcceleratedCompositing->setCheckable(true); 5458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block toggleAcceleratedCompositing->setChecked(false); 5468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 5478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block QAction* toggleGraphicsView = toolsMenu->addAction("Toggle use of QGraphicsView", this, SLOT(initializeView(bool))); 5488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block toggleGraphicsView->setCheckable(true); 5498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block toggleGraphicsView->setChecked(false); 550d0825bca7fe65beaee391d30da42e937db621564Steve Block} 551d0825bca7fe65beaee391d30da42e937db621564Steve Block 5528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockQWebPage* WebPage::createWindow(QWebPage::WebWindowType type) 553d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 554d0825bca7fe65beaee391d30da42e937db621564Steve Block LauncherWindow* mw = new LauncherWindow; 5558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (type == WebModalDialog) 5568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block mw->setWindowModality(Qt::ApplicationModal); 557d0825bca7fe65beaee391d30da42e937db621564Steve Block mw->show(); 558d0825bca7fe65beaee391d30da42e937db621564Steve Block return mw->page(); 559d0825bca7fe65beaee391d30da42e937db621564Steve Block} 560d0825bca7fe65beaee391d30da42e937db621564Steve Block 561d0825bca7fe65beaee391d30da42e937db621564Steve BlockQObject* WebPage::createPlugin(const QString &classId, const QUrl&, const QStringList&, const QStringList&) 562d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 563d0825bca7fe65beaee391d30da42e937db621564Steve Block if (classId == "alien_QLabel") { 564d0825bca7fe65beaee391d30da42e937db621564Steve Block QLabel* l = new QLabel; 565d0825bca7fe65beaee391d30da42e937db621564Steve Block l->winId(); 566d0825bca7fe65beaee391d30da42e937db621564Steve Block return l; 567d0825bca7fe65beaee391d30da42e937db621564Steve Block } 568d0825bca7fe65beaee391d30da42e937db621564Steve Block 569d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifndef QT_NO_UITOOLS 570d0825bca7fe65beaee391d30da42e937db621564Steve Block QUiLoader loader; 571d0825bca7fe65beaee391d30da42e937db621564Steve Block return loader.createWidget(classId, view()); 572d0825bca7fe65beaee391d30da42e937db621564Steve Block#else 573d0825bca7fe65beaee391d30da42e937db621564Steve Block Q_UNUSED(classId); 574d0825bca7fe65beaee391d30da42e937db621564Steve Block return 0; 575d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 576d0825bca7fe65beaee391d30da42e937db621564Steve Block} 577d0825bca7fe65beaee391d30da42e937db621564Steve Block 578d0825bca7fe65beaee391d30da42e937db621564Steve Block 579d0825bca7fe65beaee391d30da42e937db621564Steve Blockint launcherMain(const QApplication& app) 580d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 581d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifndef NDEBUG 582d0825bca7fe65beaee391d30da42e937db621564Steve Block int retVal = app.exec(); 583d0825bca7fe65beaee391d30da42e937db621564Steve Block qt_drt_garbageCollector_collect(); 584d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebSettings::clearMemoryCaches(); 585d0825bca7fe65beaee391d30da42e937db621564Steve Block return retVal; 586d0825bca7fe65beaee391d30da42e937db621564Steve Block#else 587d0825bca7fe65beaee391d30da42e937db621564Steve Block return app.exec(); 588d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 589d0825bca7fe65beaee391d30da42e937db621564Steve Block} 590d0825bca7fe65beaee391d30da42e937db621564Steve Block 5915e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockclass LauncherApplication : public QApplication { 5925e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block Q_OBJECT 593d0825bca7fe65beaee391d30da42e937db621564Steve Block 5945e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockpublic: 5955e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block LauncherApplication(int& argc, char** argv); 5965e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QStringList urls() const { return m_urls; } 5975e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block bool isRobotized() const { return m_isRobotized; } 5985e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 5995e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockprivate: 6005e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block void handleUserOptions(); 6015e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block void applyDefaultSettings(); 602d0825bca7fe65beaee391d30da42e937db621564Steve Block 6035e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockprivate: 6045e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block bool m_isRobotized; 6055e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QStringList m_urls; 6065e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block}; 6075e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 6085e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockvoid LauncherApplication::applyDefaultSettings() 6095e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 6105e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QWebSettings::setMaximumPagesInCache(4); 611d0825bca7fe65beaee391d30da42e937db621564Steve Block 612d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebSettings::setObjectCacheCapacities((16*1024*1024) / 8, (16*1024*1024) / 8, 16*1024*1024); 613d0825bca7fe65beaee391d30da42e937db621564Steve Block 614d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true); 615d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); 616d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebSettings::enablePersistentStorage(); 6175e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 618d0825bca7fe65beaee391d30da42e937db621564Steve Block 6195e2bc6953fe6923165b8a5d7679939693a1d58d6Steve BlockLauncherApplication::LauncherApplication(int& argc, char** argv) 6205e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block : QApplication(argc, argv) 6215e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block , m_isRobotized(false) 6225e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 623d0825bca7fe65beaee391d30da42e937db621564Steve Block // To allow QWebInspector's configuration persistence 6245e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block setOrganizationName("Nokia"); 6255e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block setApplicationName("QtLauncher"); 6265e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block setApplicationVersion("0.1"); 627d0825bca7fe65beaee391d30da42e937db621564Steve Block 6285e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block applyDefaultSettings(); 629d0825bca7fe65beaee391d30da42e937db621564Steve Block 6305e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block handleUserOptions(); 6315e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 6325e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 6338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockstatic void requiresGraphicsView(const QString& option) 6345e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 6358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (gUseGraphicsView) 6368a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return; 6378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block appQuit(1, QString("%1 only works in combination with the -graphicsbased option").arg(option)); 6385e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 6395e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 6405e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockvoid LauncherApplication::handleUserOptions() 6415e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 6425e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QStringList args = arguments(); 6435e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QFileInfo program(args.at(0)); 6445e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QString programName("QtLauncher"); 6455e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block if (program.exists()) 6465e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block programName = program.baseName(); 6475e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 6485e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QList<QString> updateModes(enumToKeys(QGraphicsView::staticMetaObject, 6495e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block "ViewportUpdateMode", "ViewportUpdate")); 6505e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 6518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (args.contains("-help")) { 6525e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block qDebug() << "Usage:" << programName.toLatin1().data() 6538a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block << "[-graphicsbased]" 6548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block << "[-compositing]" 6558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block << QString("[-viewport-update-mode %1]").arg(formatKeys(updateModes)).toLatin1().data() 6568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block << "[-cache-webview]" 6578a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block << "[-show-fps]" 6585e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block << "[-r list]" 6595e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block << "URLs"; 6608a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block appQuit(0); 6615e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block } 6625e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 6638a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (args.contains("-graphicsbased")) 6648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block gUseGraphicsView = true; 6655e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 6668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (args.contains("-compositing")) { 6678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block requiresGraphicsView("-compositing"); 6688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block gUseCompositing = true; 6698a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 6705e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 6718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (args.contains("-show-fps")) { 6728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block requiresGraphicsView("-show-fps"); 6738a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block gShowFrameRate = true; 6748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 6755e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 6768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (args.contains("-cache-webview")) { 6778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block requiresGraphicsView("-cache-webview"); 6788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block gCacheWebView = true; 6798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 6805e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 6818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block QString arg1("-viewport-update-mode"); 6828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block int modeIndex = args.indexOf(arg1); 6838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (modeIndex != -1) { 6848a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block requiresGraphicsView(arg1); 6858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6868a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block QString mode = takeOptionValue(&args, modeIndex); 6878a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (mode.isEmpty()) 6888a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block appQuit(1, QString("%1 needs a value of one of [%2]").arg(arg1).arg(formatKeys(updateModes))); 6898a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block int idx = updateModes.indexOf(mode); 6908a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (idx == -1) 6918a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block appQuit(1, QString("%1 value has to be one of [%2]").arg(arg1).arg(formatKeys(updateModes))); 6928a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6938a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block gViewportUpdateMode = static_cast<QGraphicsView::ViewportUpdateMode>(idx); 6945e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block } 6955e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 6965e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block int robotIndex = args.indexOf("-r"); 6975e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block if (robotIndex != -1) { 6988a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block QString listFile = takeOptionValue(&args, robotIndex); 6998a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (listFile.isEmpty()) 7008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block appQuit(1, "-r needs a list file to start in robotized mode"); 7018a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!QFile::exists(listFile)) 7028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block appQuit(1, "The list file supplied to -r does not exist."); 7038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_isRobotized = true; 7058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_urls = QStringList(listFile); 7068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return; 7075e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block } 7085e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 7095e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block int lastArg = args.lastIndexOf(QRegExp("^-.*")); 7105e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block m_urls = (lastArg != -1) ? args.mid(++lastArg) : args.mid(1); 7115e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 7125e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 7135e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 7145e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockint main(int argc, char **argv) 7155e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 7165e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block LauncherApplication app(argc, argv); 7175e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 7185e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block if (app.isRobotized()) { 7198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block LauncherWindow* window = new LauncherWindow(); 7208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block UrlLoader loader(window->page()->mainFrame(), app.urls().at(0)); 7218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block QObject::connect(window->page()->mainFrame(), SIGNAL(loadFinished(bool)), &loader, SLOT(loadNext())); 722d0825bca7fe65beaee391d30da42e937db621564Steve Block loader.loadNext(); 723d0825bca7fe65beaee391d30da42e937db621564Steve Block window->show(); 7245e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block return launcherMain(app); 7255e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block } 726d0825bca7fe65beaee391d30da42e937db621564Steve Block 7275e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QStringList urls = app.urls(); 728d0825bca7fe65beaee391d30da42e937db621564Steve Block 7295e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block if (urls.isEmpty()) { 7305e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QString defaultUrl = QString("file://%1/%2").arg(QDir::homePath()).arg(QLatin1String("index.html")); 7315e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block if (QDir(defaultUrl).exists()) 7325e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block urls.append(defaultUrl); 7335e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block else 7345e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block urls.append(""); 7355e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block } 7365e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 7375e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block LauncherWindow* window = 0; 7385e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block foreach (QString url, urls) { 7395e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block if (!window) 7405e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block window = new LauncherWindow(url); 7415e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block else 7425e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block window->newWindow(url); 743d0825bca7fe65beaee391d30da42e937db621564Steve Block } 7445e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 7455e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block window->show(); 7465e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block return launcherMain(app); 747d0825bca7fe65beaee391d30da42e937db621564Steve Block} 7485e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 7495e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "main.moc" 750