X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tools%2Fqmlscene%2Fmain.cpp;h=d41ade4a987d96e0d0ab96e1ebb66a616b168003;hb=fdcde738e585ea0e9912215901e36590ebba7fdf;hp=06b3c378dce4b497f4c134ad7c98e22918b16a0b;hpb=6b05247d1e353b7b540fc16c29df129bf636e368;p=profile%2Fivi%2Fqtdeclarative.git diff --git a/tools/qmlscene/main.cpp b/tools/qmlscene/main.cpp index 06b3c37..d41ade4 100644 --- a/tools/qmlscene/main.cpp +++ b/tools/qmlscene/main.cpp @@ -1,38 +1,38 @@ /**************************************************************************** ** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal ** ** This file is part of the tools applications of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** ** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ @@ -62,6 +62,8 @@ #include #endif +#include +#include #ifdef QML_RUNTIME_TESTING class RenderStatistics @@ -144,6 +146,7 @@ struct Options , originalQmlRaster(false) , maximized(false) , fullscreen(false) + , transparent(false) , clip(false) , versionDetection(true) , slowAnimations(false) @@ -157,16 +160,17 @@ struct Options bool originalQmlRaster; bool maximized; bool fullscreen; + bool transparent; bool scenegraphOnGraphicsview; bool clip; bool versionDetection; bool slowAnimations; bool quitImmediately; bool resizeViewToRootItem; + QString translationFile; }; #if defined(QMLSCENE_BUNDLE) -Q_DECLARE_METATYPE(QFileInfo); QFileInfoList findQmlFiles(const QString &dirName) { QDir dir(dirName); @@ -301,6 +305,12 @@ static void displayFileDialog(Options *options) #endif } +static void loadTranslationFile(QTranslator &translator, const QString& directory) +{ + translator.load(QLatin1String("qml_" )+QLocale::system().name(), directory + QLatin1String("/i18n")); + QCoreApplication::installTranslator(&translator); +} + static void loadDummyDataFiles(QQmlEngine &engine, const QString& directory) { QDir dir(directory+"/dummydata", "*.qml"); @@ -336,6 +346,7 @@ static void usage() qWarning(" options:"); qWarning(" --maximized ............................... run maximized"); qWarning(" --fullscreen .............................. run fullscreen"); + qWarning(" --transparent ............................. Make the window transparent"); qWarning(" --no-multisample .......................... Disable multisampling (anti-aliasing)"); qWarning(" --no-version-detection .................... Do not try to detect the version of the .qml file"); qWarning(" --slow-animations ......................... Run all animations in slow motion"); @@ -343,6 +354,7 @@ static void usage() qWarning(" --quit .................................... Quit immediately after starting"); qWarning(" -I ................................. Add to the list of import paths"); qWarning(" -B .......................... Add a named bundle"); + qWarning(" -translation ........... set the language to run in"); qWarning(" "); exit(1); @@ -363,6 +375,8 @@ int main(int argc, char ** argv) options.maximized = true; else if (lowerArgument == QLatin1String("--fullscreen")) options.fullscreen = true; + else if (lowerArgument == QLatin1String("--transparent")) + options.transparent = true; else if (lowerArgument == QLatin1String("--clip")) options.clip = true; else if (lowerArgument == QLatin1String("--no-version-detection")) @@ -371,6 +385,8 @@ int main(int argc, char ** argv) options.slowAnimations = true; else if (lowerArgument == QLatin1String("--quit")) options.quitImmediately = true; + else if (lowerArgument == QLatin1String("-translation")) + options.translationFile = QLatin1String(argv[++i]); else if (lowerArgument == QLatin1String("--resize-to-root")) options.resizeViewToRootItem = true; else if (lowerArgument == QLatin1String("-i") && i + 1 < argc) @@ -393,8 +409,29 @@ int main(int argc, char ** argv) QGuiApplication app(argc, argv); #endif app.setApplicationName("QtQmlViewer"); - app.setOrganizationName("Nokia"); - app.setOrganizationDomain("nokia.com"); + app.setOrganizationName("Qt Project"); + app.setOrganizationDomain("qt-project.org"); + + QTranslator translator; + QTranslator qtTranslator; + QString sysLocale = QLocale::system().name(); + if (translator.load(QLatin1String("qmlscene_") + sysLocale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { + app.installTranslator(&translator); + if (qtTranslator.load(QLatin1String("qt_") + sysLocale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { + app.installTranslator(&qtTranslator); + } else { + app.removeTranslator(&translator); + } + } + + QTranslator qmlTranslator; + if (!options.translationFile.isEmpty()) { + if (qmlTranslator.load(options.translationFile)) { + app.installTranslator(&qmlTranslator); + } else { + qWarning() << "Could not load the translation file" << options.translationFile; + } + } QUnifiedTimer::instance()->setSlowModeEnabled(options.slowAnimations); @@ -405,54 +442,90 @@ int main(int argc, char ** argv) displayFileDialog(&options); #endif - QWindow *window = 0; - QQmlEngine *engine = 0; - int exitCode = 0; if (!options.file.isEmpty()) { if (!options.versionDetection || checkVersion(options.file)) { - QQuickView *qxView = new QQuickView(); - engine = qxView->engine(); + QTranslator translator; + + // TODO: as soon as the engine construction completes, the debug service is + // listening for connections. But actually we aren't ready to debug anything. + QQmlEngine engine; + QQmlComponent *component = new QQmlComponent(&engine); for (int i = 0; i < imports.size(); ++i) - engine->addImportPath(imports.at(i)); + engine.addImportPath(imports.at(i)); for (int i = 0; i < bundles.size(); ++i) - engine->addNamedBundle(bundles.at(i).first, bundles.at(i).second); - window = qxView; + engine.addNamedBundle(bundles.at(i).first, bundles.at(i).second); if (options.file.isLocalFile()) { QFileInfo fi(options.file.toLocalFile()); - loadDummyDataFiles(*engine, fi.path()); + loadTranslationFile(translator, fi.path()); + loadDummyDataFiles(engine, fi.path()); + } + QObject::connect(&engine, SIGNAL(quit()), QCoreApplication::instance(), SLOT(quit())); + component->loadUrl(options.file); + if ( !component->isReady() ) { + qFatal(qPrintable(component->errorString())); + return -1; } - qxView->setSource(options.file); - - QObject::connect(engine, SIGNAL(quit()), QCoreApplication::instance(), SLOT(quit())); - if (options.resizeViewToRootItem) - qxView->setResizeMode(QQuickView::SizeViewToRootObject); - else - qxView->setResizeMode(QQuickView::SizeRootObjectToView); + QObject *topLevel = component->create(); + QQuickWindow *window = qobject_cast(topLevel); + QQuickView* qxView = 0; + if (!window) { + QQuickItem *contentItem = qobject_cast(topLevel); + if (contentItem) { + qxView = new QQuickView(&engine, NULL); + window = qxView; + // Set window default properties; the qml can still override them + QString oname = contentItem->objectName(); + window->setTitle(oname.isEmpty() ? QString::fromLatin1("qmlscene") : QString::fromLatin1("qmlscene: ") + oname); + window->setFlags(Qt::Window | Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint); + if (options.resizeViewToRootItem) + qxView->setResizeMode(QQuickView::SizeViewToRootObject); + else + qxView->setResizeMode(QQuickView::SizeRootObjectToView); + qxView->setContent(options.file, component, contentItem); + } + } - window->setWindowFlags(Qt::Window | Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint); - if (options.fullscreen) - window->showFullScreen(); - else if (options.maximized) - window->showMaximized(); - else - window->show(); + if (window) { + if (options.transparent) { + QSurfaceFormat surfaceFormat; + surfaceFormat.setAlphaBufferSize(8); + window->setFormat(surfaceFormat); + window->setClearBeforeRendering(true); + window->setColor(QColor(Qt::transparent)); + window->setWindowFlags(Qt::FramelessWindowHint); + } + + if (options.fullscreen) + window->showFullScreen(); + else if (options.maximized) + window->showMaximized(); + else + window->show(); + } if (options.quitImmediately) QMetaObject::invokeMethod(QCoreApplication::instance(), "quit", Qt::QueuedConnection); - exitCode = app.exec(); + // Now would be a good time to inform the debug service to start listening. - delete window; + exitCode = app.exec(); #ifdef QML_RUNTIME_TESTING RenderStatistics::printTotalStats(); #endif + // Ready to exit. If we created qxView, it owns the component; + // otherwise, the ownership is still right here. Nobody deletes the engine + // (which is odd since the container constructor takes the engine pointer), + // but it's stack-allocated anyway. + if (qxView) + delete qxView; + else + delete component; } } return exitCode; } -