From 67ee1cd27b5e951e782e49edf382e8e7d8ee431f Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 5 Jul 2013 14:31:06 -0700 Subject: [PATCH] Apply file selectors to QQmlApplicationEngine apps You can also manually apply them to a QQmlEngine using setUrlInterceptor(new QQmlFileSelector(parent)), or using your own QQmlAbstractUrlInterceptor subclass. Change-Id: I0c0ff8b080c138686b3c03e0bc3b9f25bcd11a85 Reviewed-by: Lars Knoll --- .../demos/samegame/content/+blackberry/settings.js | 56 +++++++++ .../quick/demos/samegame/content/BlockEmitter.qml | 2 +- .../quick/demos/samegame/content/PaintEmitter.qml | 2 +- .../quick/demos/samegame/content/SamegameText.qml | 2 +- examples/quick/demos/samegame/content/samegame.js | 2 +- .../quick/demos/samegame/{ => content}/settings.js | 0 examples/quick/demos/samegame/samegame.qml | 2 +- examples/quick/demos/samegame/samegame.qrc | 3 +- examples/quick/shared/shared.h | 4 +- src/qml/qml/qml.pri | 7 +- src/qml/qml/qqmlapplicationengine.cpp | 7 +- src/qml/qml/qqmlapplicationengine_p.h | 1 + src/qml/qml/qqmlfileselector.cpp | 138 +++++++++++++++++++++ src/qml/qml/qqmlfileselector.h | 71 +++++++++++ src/qml/qml/qqmlfileselector_p.h | 74 +++++++++++ .../qml/qqmlfileselector/data/+basic/basicTest.qml | 5 + tests/auto/qml/qqmlfileselector/data/basicTest.qml | 5 + .../auto/qml/qqmlfileselector/qqmlfileselector.pro | 13 ++ .../qml/qqmlfileselector/tst_qqmlfileselector.cpp | 81 ++++++++++++ 19 files changed, 463 insertions(+), 12 deletions(-) create mode 100644 examples/quick/demos/samegame/content/+blackberry/settings.js rename examples/quick/demos/samegame/{ => content}/settings.js (100%) create mode 100644 src/qml/qml/qqmlfileselector.cpp create mode 100644 src/qml/qml/qqmlfileselector.h create mode 100644 src/qml/qml/qqmlfileselector_p.h create mode 100644 tests/auto/qml/qqmlfileselector/data/+basic/basicTest.qml create mode 100644 tests/auto/qml/qqmlfileselector/data/basicTest.qml create mode 100644 tests/auto/qml/qqmlfileselector/qqmlfileselector.pro create mode 100644 tests/auto/qml/qqmlfileselector/tst_qqmlfileselector.cpp diff --git a/examples/quick/demos/samegame/content/+blackberry/settings.js b/examples/quick/demos/samegame/content/+blackberry/settings.js new file mode 100644 index 0000000..a86d2a9 --- /dev/null +++ b/examples/quick/demos/samegame/content/+blackberry/settings.js @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2013 BlackBerry Limited. All rights reserved. +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * 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. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "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 THE COPYRIGHT +** OWNER 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." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +.pragma library + +//This should be switched over once a proper QML settings API exists + +var menuDelay = 500 + +var headerHeight = 70 +var footerHeight = 100 + +var fontPixelSize = 55 + +var blockSize = 64 + +var toolButtonHeight = 64 + +var menuButtonSpacing = 15 diff --git a/examples/quick/demos/samegame/content/BlockEmitter.qml b/examples/quick/demos/samegame/content/BlockEmitter.qml index ba6261c..49ee38d 100644 --- a/examples/quick/demos/samegame/content/BlockEmitter.qml +++ b/examples/quick/demos/samegame/content/BlockEmitter.qml @@ -41,7 +41,7 @@ import QtQuick 2.0 import QtQuick.Particles 2.0 -import "../settings.js" as Settings +import "settings.js" as Settings Emitter { property Item block: parent diff --git a/examples/quick/demos/samegame/content/PaintEmitter.qml b/examples/quick/demos/samegame/content/PaintEmitter.qml index fe758af..85d148d 100644 --- a/examples/quick/demos/samegame/content/PaintEmitter.qml +++ b/examples/quick/demos/samegame/content/PaintEmitter.qml @@ -40,7 +40,7 @@ import QtQuick 2.0 import QtQuick.Particles 2.0 -import "../settings.js" as Settings +import "settings.js" as Settings Emitter { property Item block: parent diff --git a/examples/quick/demos/samegame/content/SamegameText.qml b/examples/quick/demos/samegame/content/SamegameText.qml index 28c85f9..e3bee98 100644 --- a/examples/quick/demos/samegame/content/SamegameText.qml +++ b/examples/quick/demos/samegame/content/SamegameText.qml @@ -39,7 +39,7 @@ ****************************************************************************/ import QtQuick 2.0 -import "../settings.js" as Settings +import "settings.js" as Settings Text { font.pixelSize: Settings.fontPixelSize; diff --git a/examples/quick/demos/samegame/content/samegame.js b/examples/quick/demos/samegame/content/samegame.js index 6bf402e..5bb24d7 100755 --- a/examples/quick/demos/samegame/content/samegame.js +++ b/examples/quick/demos/samegame/content/samegame.js @@ -41,7 +41,7 @@ /* This script file handles the game logic */ .pragma library .import QtQuick.LocalStorage 2.0 as Sql -.import "../settings.js" as Settings +.import "settings.js" as Settings var maxColumn = 10; var maxRow = 13; diff --git a/examples/quick/demos/samegame/settings.js b/examples/quick/demos/samegame/content/settings.js similarity index 100% rename from examples/quick/demos/samegame/settings.js rename to examples/quick/demos/samegame/content/settings.js diff --git a/examples/quick/demos/samegame/samegame.qml b/examples/quick/demos/samegame/samegame.qml index 8712141..23cdf94 100644 --- a/examples/quick/demos/samegame/samegame.qml +++ b/examples/quick/demos/samegame/samegame.qml @@ -41,7 +41,7 @@ import QtQuick 2.0 import QtQuick.Particles 2.0 import "content/samegame.js" as Logic -import "settings.js" as Settings +import "content/settings.js" as Settings import "content" Rectangle { diff --git a/examples/quick/demos/samegame/samegame.qrc b/examples/quick/demos/samegame/samegame.qrc index 951b9d1..40b7cb6 100644 --- a/examples/quick/demos/samegame/samegame.qrc +++ b/examples/quick/demos/samegame/samegame.qrc @@ -1,7 +1,8 @@ samegame.qml - settings.js + content/settings.js + content/+blackberry/settings.js content/gfx/text-p1-won.png content/gfx/background-puzzle.png content/gfx/background.png diff --git a/examples/quick/shared/shared.h b/examples/quick/shared/shared.h index 648b294..5cf1333 100644 --- a/examples/quick/shared/shared.h +++ b/examples/quick/shared/shared.h @@ -40,7 +40,8 @@ #include #include #include -#include +#include +#include //Not using QQmlApplicationEngine because many examples don't have a Window{} #define DECLARATIVE_EXAMPLE_MAIN(NAME) int main(int argc, char* argv[]) \ {\ QGuiApplication app(argc,argv);\ @@ -49,6 +50,7 @@ app.setApplicationName(QFileInfo(app.applicationFilePath()).baseName());\ QQuickView view;\ view.connect(view.engine(), SIGNAL(quit()), &app, SLOT(quit()));\ + view.engine()->setUrlInterceptor(new QQmlFileSelector(&view));\ view.setSource(QUrl("qrc:///" #NAME ".qml")); \ view.setResizeMode(QQuickView::SizeRootObjectToView);\ if (QGuiApplication::platformName() == QLatin1String("qnx") || \ diff --git a/src/qml/qml/qml.pri b/src/qml/qml/qml.pri index 8dfe0f1..29c007a 100644 --- a/src/qml/qml/qml.pri +++ b/src/qml/qml/qml.pri @@ -54,7 +54,8 @@ SOURCES += \ $$PWD/qqmllistwrapper.cpp \ $$PWD/qqmlcontextwrapper.cpp \ $$PWD/qqmlvaluetypewrapper.cpp \ - $$PWD/qqmltypewrapper.cpp + $$PWD/qqmltypewrapper.cpp \ + $$PWD/qqmlfileselector.cpp HEADERS += \ $$PWD/qqmlglobal_p.h \ @@ -130,7 +131,9 @@ HEADERS += \ $$PWD/qqmllistwrapper_p.h \ $$PWD/qqmlcontextwrapper_p.h \ $$PWD/qqmlvaluetypewrapper_p.h \ - $$PWD/qqmltypewrapper_p.h + $$PWD/qqmltypewrapper_p.h \ + $$PWD/qqmlfileselector_p.h \ + $$PWD/qqmlfileselector.h include(ftw/ftw.pri) include(v8/v8.pri) diff --git a/src/qml/qml/qqmlapplicationengine.cpp b/src/qml/qml/qqmlapplicationengine.cpp index 85aeaf5..3f13f8a 100644 --- a/src/qml/qml/qqmlapplicationengine.cpp +++ b/src/qml/qml/qqmlapplicationengine.cpp @@ -44,6 +44,7 @@ #include #include "qqmlapplicationengine.h" #include "qqmlapplicationengine_p.h" +#include "qqmlfileselector.h" QT_BEGIN_NAMESPACE @@ -76,6 +77,7 @@ void QQmlApplicationEnginePrivate::init() QCoreApplication::installTranslator(qtTranslator); translators << qtTranslator; #endif + q->setUrlInterceptor(new QQmlFileSelector(q)); QCoreApplication::instance()->setProperty("__qml_using_qqmlapplicationengine", QVariant(true)); } @@ -172,13 +174,12 @@ void QQmlApplicationEnginePrivate::_q_finishLoad(QObject *o) \li Connecting Qt.quit() to QCoreApplication::quit() \li Automatically loads translation files from an i18n directory adjacent to the main QML file. \li Automatically sets an incubuation controller if the scene contains a QQuickWindow. + \li Automatically sets a \c QQmlFileSelector as the url interceptor, applying file selectors to all + QML files and assets. \endlist The engine behavior can be further tweaked by using the inherited methods from QQmlEngine. - \note In the future QQmlApplicationEngine may automatically apply file selectors. - To ensure forwards compatibility, do not use folder names containing a '+' character in your QML file - structure. */ /*! diff --git a/src/qml/qml/qqmlapplicationengine_p.h b/src/qml/qml/qqmlapplicationengine_p.h index cc38c62..75d7cf7 100644 --- a/src/qml/qml/qqmlapplicationengine_p.h +++ b/src/qml/qml/qqmlapplicationengine_p.h @@ -63,6 +63,7 @@ QT_BEGIN_NAMESPACE class QTranslator; +class QFileSelector; class Q_QML_PRIVATE_EXPORT QQmlApplicationEnginePrivate : public QQmlEnginePrivate { Q_DECLARE_PUBLIC(QQmlApplicationEngine) diff --git a/src/qml/qml/qqmlfileselector.cpp b/src/qml/qml/qqmlfileselector.cpp new file mode 100644 index 0000000..5810e26 --- /dev/null +++ b/src/qml/qml/qqmlfileselector.cpp @@ -0,0 +1,138 @@ +/**************************************************************************** +** +** Copyright (C) 2013 BlackBerry Limited. All rights reserved. +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtQml module 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 +** 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, 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qqmlfileselector.h" +#include "qqmlfileselector_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \class QQmlFileSelector + \since 5.2 + \inmodule QtQml + \brief A convenience class for applying a QFileSelector to QML file loading + + QQmlFileSelector is a QQmlAbstractUrlInterceptor which will automatically apply a QFileSelector to + qml file and asset paths. + + It is used as follows: + + \code + QQmlEngine engine; + QQmlFileSelector selector; + engine.setUrlInterceptor(&selector); + \endcode + + Then you can swap out files like so: + \code + main.qml + Component.qml + asset.png + +unix/Component.qml + +mac/asset.png + \endcode + + In this example, main.qml will normally use Component.qml for the Component type. However on a + unix platform, the unix selector will be present and the +unix/Component.qml version will be + used instead. Note that this acts like swapping out Component.qml with +unix/Component.qml, so + when using Component.qml you should not need to alter any paths based on which version was + selected. + + For example, to pass the "asset.png" file path around you would refer to it just as "asset.png" in + all of main.qml, Component.qml, and +linux/Component.qml. It will be replaced with +mac/asset.png + on Mac platforms in all cases. + + For a list of available selectors, see \c QFileSelector. + + Your platform may also provide additional selectors for you to use. As specified by QFileSelector, + directories used for selection must start with a '+' character, so you will not accidentally + trigger this feature unless you have directories with such names inside your project. + */ + +/*! + Creates a new QQmlFileSelector, which includes its own QFileSelector. +*/ + +QQmlFileSelector::QQmlFileSelector(QObject* parent) + : QObject(*(new QQmlFileSelectorPrivate), parent) +{ +} + +QQmlFileSelectorPrivate::QQmlFileSelectorPrivate() +{ + Q_Q(QQmlFileSelector); + ownSelector = true; + selector = new QFileSelector(q); +} + +/*! + Sets a different QFileSelector instance for use by the QQmlFileSelector. QQmlFileSelector does not + take ownership of the new QFileSelector. To reset QQmlFileSelector to use its internal + QFileSelector instance, call setSelector(0). +*/ + +void QQmlFileSelector::setSelector(QFileSelector *selector) +{ + Q_D(QQmlFileSelector); + if (selector) { + if (d->ownSelector) { + delete d->selector; + d->ownSelector = false; + } + d->selector = selector; + } else { + if (!d->ownSelector) { + d->ownSelector = true; + d->selector = new QFileSelector(this); + } // Do nothing if already using internal selector + } +} + +QUrl QQmlFileSelector::intercept(const QUrl &path, DataType type) +{ + Q_D(QQmlFileSelector); + if ( type == QQmlAbstractUrlInterceptor::QmldirFile ) //Don't intercept qmldir files, to prevent double interception + return path; + return d->selector->select(path); +} + +QT_END_NAMESPACE diff --git a/src/qml/qml/qqmlfileselector.h b/src/qml/qml/qqmlfileselector.h new file mode 100644 index 0000000..0152ce2 --- /dev/null +++ b/src/qml/qml/qqmlfileselector.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2013 BlackBerry Limited. All rights reserved. +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtQml module 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 +** 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, 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQMLFILESELECTOR_H +#define QQMLFILESELECTOR_H + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QFileSelector; +class QQmlFileSelectorPrivate; +class Q_QML_EXPORT QQmlFileSelector : public QObject, public QQmlAbstractUrlInterceptor +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QQmlFileSelector) +public: + QQmlFileSelector(QObject* parent=0); + void setSelector(QFileSelector *selector); + +protected: + virtual QUrl intercept(const QUrl &path, DataType type); + +private: + Q_DISABLE_COPY(QQmlFileSelector) +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/qml/qml/qqmlfileselector_p.h b/src/qml/qml/qqmlfileselector_p.h new file mode 100644 index 0000000..60d6072 --- /dev/null +++ b/src/qml/qml/qqmlfileselector_p.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2013 BlackBerry Limited. All rights reserved. +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtQml module 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 +** 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, 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQMLFILESELECTOR_P_H +#define QQMLFILESELECTOR_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qqmlfileselector.h" +#include +#include + +QT_BEGIN_NAMESPACE + +class QFileSelector; +class Q_QML_PRIVATE_EXPORT QQmlFileSelectorPrivate : public QObjectPrivate +{ + Q_DECLARE_PUBLIC(QQmlFileSelector) +public: + QQmlFileSelectorPrivate(); + QFileSelector* selector; + bool ownSelector; +}; + +QT_END_NAMESPACE + +#endif diff --git a/tests/auto/qml/qqmlfileselector/data/+basic/basicTest.qml b/tests/auto/qml/qqmlfileselector/data/+basic/basicTest.qml new file mode 100644 index 0000000..6c07e2d --- /dev/null +++ b/tests/auto/qml/qqmlfileselector/data/+basic/basicTest.qml @@ -0,0 +1,5 @@ +import QtQml 2.0 + +QtObject { + property string value: "selected" +} diff --git a/tests/auto/qml/qqmlfileselector/data/basicTest.qml b/tests/auto/qml/qqmlfileselector/data/basicTest.qml new file mode 100644 index 0000000..b7f24e8 --- /dev/null +++ b/tests/auto/qml/qqmlfileselector/data/basicTest.qml @@ -0,0 +1,5 @@ +import QtQml 2.0 + +QtObject { + property string value: "default" +} diff --git a/tests/auto/qml/qqmlfileselector/qqmlfileselector.pro b/tests/auto/qml/qqmlfileselector/qqmlfileselector.pro new file mode 100644 index 0000000..3475fa4 --- /dev/null +++ b/tests/auto/qml/qqmlfileselector/qqmlfileselector.pro @@ -0,0 +1,13 @@ +CONFIG += testcase +TARGET = tst_qqmlfileselector +macx:CONFIG -= app_bundle + +SOURCES += tst_qqmlfileselector.cpp + +include (../../shared/util.pri) + +TESTDATA = data/* + +CONFIG += parallel_test +QT += core-private gui-private qml-private testlib +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/qml/qqmlfileselector/tst_qqmlfileselector.cpp b/tests/auto/qml/qqmlfileselector/tst_qqmlfileselector.cpp new file mode 100644 index 0000000..a583fd0 --- /dev/null +++ b/tests/auto/qml/qqmlfileselector/tst_qqmlfileselector.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2013 BlackBerry Limited. All rights reserved. +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite 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 +** 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, 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include "../../shared/util.h" + +class tst_qqmlfileselector : public QQmlDataTest +{ + Q_OBJECT +public: + tst_qqmlfileselector() {} + +private slots: + void basicTest(); + +}; + +void tst_qqmlfileselector::basicTest() +{ + QQmlEngine engine; + QFileSelector selector; + selector.setExtraSelectors(QStringList() << "basic"); + QQmlFileSelector qmlSelector; + qmlSelector.setSelector(&selector); + engine.setUrlInterceptor(&qmlSelector); + + QQmlComponent component(&engine, testFileUrl("basicTest.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + QCOMPARE(object->property("value").toString(), QString("selected")); + + delete object; +} + +QTEST_MAIN(tst_qqmlfileselector) + +#include "tst_qqmlfileselector.moc" -- 2.7.4