diff options
Diffstat (limited to 'WebKitTools/QtLauncher/main.cpp')
-rw-r--r-- | WebKitTools/QtLauncher/main.cpp | 197 |
1 files changed, 160 insertions, 37 deletions
diff --git a/WebKitTools/QtLauncher/main.cpp b/WebKitTools/QtLauncher/main.cpp index 081b8f0..31bca8e 100644 --- a/WebKitTools/QtLauncher/main.cpp +++ b/WebKitTools/QtLauncher/main.cpp @@ -525,8 +525,6 @@ QObject* WebPage::createPlugin(const QString &classId, const QUrl&, const QStrin } -#include "main.moc" - int launcherMain(const QApplication& app) { #ifndef NDEBUG @@ -539,60 +537,185 @@ int launcherMain(const QApplication& app) #endif } -int main(int argc, char **argv) -{ - QApplication app(argc, argv); - QString defaultUrl = QString("file://%1/%2").arg(QDir::homePath()).arg(QLatin1String("index.html")); +class LauncherApplication : public QApplication { + Q_OBJECT - QWebSettings::setMaximumPagesInCache(4); +public: + LauncherApplication(int& argc, char** argv); + QStringList urls() const { return m_urls; } + bool isRobotized() const { return m_isRobotized; } + +private: + void handleUserOptions(); + void applyDefaultSettings(); - app.setApplicationName("QtLauncher"); - app.setApplicationVersion("0.1"); + QList<QString> enumToKeys(const QMetaObject o, const QString& name, const QString& strip); + QString formatKeys(QList<QString> keys); + +private: + bool m_isRobotized; + QStringList m_urls; +}; + +void LauncherApplication::applyDefaultSettings() +{ + QWebSettings::setMaximumPagesInCache(4); QWebSettings::setObjectCacheCapacities((16*1024*1024) / 8, (16*1024*1024) / 8, 16*1024*1024); QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true); QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); QWebSettings::enablePersistentStorage(); +} +LauncherApplication::LauncherApplication(int& argc, char** argv) + : QApplication(argc, argv) + , m_isRobotized(false) +{ // To allow QWebInspector's configuration persistence - QCoreApplication::setOrganizationName("Nokia"); - QCoreApplication::setApplicationName("QtLauncher"); + setOrganizationName("Nokia"); + setApplicationName("QtLauncher"); + setApplicationVersion("0.1"); - const QStringList args = app.arguments(); + applyDefaultSettings(); - if (args.contains(QLatin1String("-r"))) { - // robotized - QString listFile = args.at(2); - if (!(args.count() == 3) && QFile::exists(listFile)) { - qDebug() << "Usage: QtLauncher -r listfile"; - exit(0); + handleUserOptions(); +} + +QString LauncherApplication::formatKeys(QList<QString> keys) +{ + QString result; + for (int i = 0; i < keys.count() - 1; i++) + result.append(keys.at(i) + "|"); + result.append(keys.last()); + return result; +} + +QList<QString> LauncherApplication::enumToKeys(const QMetaObject o, const QString& name, const QString& strip) +{ + QList<QString> list; + + int enumIndex = o.indexOfEnumerator(name.toLatin1().data()); + QMetaEnum enumerator = o.enumerator(enumIndex); + + if (enumerator.isValid()) { + for (int i = 0; i < enumerator.keyCount(); i++) { + QString key(enumerator.valueToKey(i)); + list.append(key.remove(strip)); } + } + + return list; +} + +static void fail(const QString& errorMsg) +{ + qDebug() << "ERROR:" << errorMsg.toLatin1().data(); + exit(1); +} + +void LauncherApplication::handleUserOptions() +{ + QStringList args = arguments(); + QFileInfo program(args.at(0)); + QString programName("QtLauncher"); + if (program.exists()) + programName = program.baseName(); + + QList<QString> updateModes(enumToKeys(QGraphicsView::staticMetaObject, + "ViewportUpdateMode", "ViewportUpdate")); + + if (args.contains("--help")) { + qDebug() << "Usage:" << programName.toLatin1().data() + << "[--graphicsbased]" + << "[--compositing]" + << QString("[--viewport-update-mode %1]").arg(formatKeys(updateModes)).toLatin1().data() + << "[--cache-webview]" + << "[-r list]" + << "URLs"; + exit(0); + } + + bool useGraphicsView = false; + + if (args.contains("--graphicsbased")) + useGraphicsView = true; + + if (args.contains("--compositing") && useGraphicsView) + QWebSettings::globalSettings()->setAttribute(QWebSettings::AcceleratedCompositingEnabled, true); + + if (args.contains("--cache-webview") && useGraphicsView) + ; // view->setCacheMode(QGraphicsItem::DeviceCoordinateCache); + + int modeIndex = args.indexOf("--viewport-update-mode"); + if (modeIndex != -1 && ++modeIndex < args.count() && !args.at(modeIndex).startsWith("-")) { + QString mode = args.takeAt(modeIndex); + if (useGraphicsView) { + int idx = updateModes.indexOf(mode); + if (idx != -1) { + ; // view->setViewportUpdateMode(static_cast<QGraphicsView::ViewportUpdateMode>(idx)); + } else { + fail(QString("--viewport-update-mode value has to be one of [%1]") + .arg(formatKeys(updateModes)).toLatin1().data()); + } + } + } + + int robotIndex = args.indexOf("-r"); + if (robotIndex != -1) { + if (++robotIndex < args.count() && !args.at(robotIndex).startsWith("-")) { + QString listFile = args.takeAt(robotIndex); + if (!QFile::exists(listFile)) + fail(QString("The list file supplied to -r does not exist.")); + else { + m_isRobotized = true; + m_urls = QStringList(listFile); + return; + } + } + else + fail(QString("-r needs a list file to start in robotized mode")); + } + + int lastArg = args.lastIndexOf(QRegExp("^-.*")); + m_urls = (lastArg != -1) ? args.mid(++lastArg) : args.mid(1); +} + + +int main(int argc, char **argv) +{ + LauncherApplication app(argc, argv); + + if (app.isRobotized()) { LauncherWindow* window = new LauncherWindow; QWebView* view = window->webView(); - UrlLoader loader(view->page()->mainFrame(), listFile); + UrlLoader loader(view->page()->mainFrame(), app.urls().at(0)); QObject::connect(view->page()->mainFrame(), SIGNAL(loadFinished(bool)), &loader, SLOT(loadNext())); loader.loadNext(); window->show(); - launcherMain(app); - } else { - LauncherWindow* window = 0; - - // Look though the args for something we can open - for (int i = 1; i < args.count(); i++) { - if (!args.at(i).startsWith("-")) { - if (!window) - window = new LauncherWindow(args.at(i)); - else - window->newWindow(args.at(i)); - } - } + return launcherMain(app); + } - // If not, just open the default URL - if (!window) - window = new LauncherWindow(defaultUrl); + QStringList urls = app.urls(); - window->show(); - launcherMain(app); + if (urls.isEmpty()) { + QString defaultUrl = QString("file://%1/%2").arg(QDir::homePath()).arg(QLatin1String("index.html")); + if (QDir(defaultUrl).exists()) + urls.append(defaultUrl); + else + urls.append(""); + } + + LauncherWindow* window = 0; + foreach (QString url, urls) { + if (!window) + window = new LauncherWindow(url); + else + window->newWindow(url); } + + window->show(); + return launcherMain(app); } + +#include "main.moc" |