12fc2651226baac27029e38c9d6ef883fa32084dbSteve Block/*
22fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
32fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * Copyright (C) 2010 University of Szeged
42fc2651226baac27029e38c9d6ef883fa32084dbSteve Block *
52fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * All rights reserved.
62fc2651226baac27029e38c9d6ef883fa32084dbSteve Block *
72fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * Redistribution and use in source and binary forms, with or without
82fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * modification, are permitted provided that the following conditions
92fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * are met:
102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * 1. Redistributions of source code must retain the above copyright
112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block *    notice, this list of conditions and the following disclaimer.
122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * 2. Redistributions in binary form must reproduce the above copyright
132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block *    notice, this list of conditions and the following disclaimer in the
142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block *    documentation and/or other materials provided with the distribution.
152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block *
162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block */
282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "MiniBrowserApplication.h"
302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "utils.h"
322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include <QRegExp>
332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
342fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockMiniBrowserApplication::MiniBrowserApplication(int& argc, char** argv)
352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    : QApplication(argc, argv, QApplication::GuiServer)
362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    , m_windowOptions()
372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    , m_isRobotized(false)
382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    , m_robotTimeoutSeconds(0)
392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    , m_robotExtraTimeSeconds(0)
402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    setOrganizationName("Nokia");
422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    setApplicationName("QtMiniBrowser");
432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    setApplicationVersion("0.1");
442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    handleUserOptions();
462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
482fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid MiniBrowserApplication::handleUserOptions()
492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    QStringList args = arguments();
512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    QFileInfo program(args.at(0));
522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    QString programName("MiniBrowser");
532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (program.exists())
542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        programName = program.baseName();
552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (args.contains("-help")) {
572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        qDebug() << "Usage:" << programName.toLatin1().data()
582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch             << "[-maximize]"
592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block             << "[-r list]"
602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block             << "[-robot-timeout seconds]"
612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block             << "[-robot-extra-time seconds]"
6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch             << "[-chunked-drawing-area]"
632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block             <<  "[-separate-web-process-per-window]"
642bde8e466a4451c7319e3a072d118917957d6554Steve Block             << "[-print-loaded-urls]"
652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block             << "URLs";
662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        appQuit(0);
672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (args.contains("-maximize"))
702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_windowOptions.startMaximized = true;
712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    int robotIndex = args.indexOf("-r");
732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (robotIndex != -1) {
742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        QString listFile = takeOptionValue(&args, robotIndex);
752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        if (listFile.isEmpty())
762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            appQuit(1, "-r needs a list file to start in robotized mode");
772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        if (!QFile::exists(listFile))
782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            appQuit(1, "The list file supplied to -r does not exist.");
792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        m_isRobotized = true;
812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        m_urls = QStringList(listFile);
822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    } else {
832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        int lastArg = args.lastIndexOf(QRegExp("^-.*"));
842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        m_urls = (lastArg != -1) ? args.mid(++lastArg) : args.mid(1);
852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    int robotTimeoutIndex = args.indexOf("-robot-timeout");
882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (robotTimeoutIndex != -1)
892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        m_robotTimeoutSeconds = takeOptionValue(&args, robotTimeoutIndex).toInt();
902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    int robotExtraTimeIndex = args.indexOf("-robot-extra-time");
922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (robotExtraTimeIndex != -1)
932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        m_robotExtraTimeSeconds = takeOptionValue(&args, robotExtraTimeIndex).toInt();
942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
9581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (args.contains("-chunked-drawing-area"))
9681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        m_windowOptions.useTiledBackingStore = false;
972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (args.contains("-separate-web-process-per-window"))
992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        m_windowOptions.useSeparateWebProcessPerWindow = true;
1002bde8e466a4451c7319e3a072d118917957d6554Steve Block
1012bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (args.contains("-print-loaded-urls"))
1022bde8e466a4451c7319e3a072d118917957d6554Steve Block        m_windowOptions.printLoadedUrls = true;
1032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
104