From 223313479bf8ec80158ba0f6cba4dd5e74d92718 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 28 Feb 2013 17:03:43 -0800 Subject: Add a URL interceptor to the QML engine Allows for custom file handling to a greater extent than the QNetworkAccessManager. Change-Id: Ifd3946bf33530c40ca2edeeb9f441f712e4941f6 Reviewed-by: Matthew Vogt --- src/qml/qml/qqmlabstracturlinterceptor.cpp | 91 ++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 src/qml/qml/qqmlabstracturlinterceptor.cpp (limited to 'src/qml/qml/qqmlabstracturlinterceptor.cpp') diff --git a/src/qml/qml/qqmlabstracturlinterceptor.cpp b/src/qml/qml/qqmlabstracturlinterceptor.cpp new file mode 100644 index 0000000000..a68d5f7489 --- /dev/null +++ b/src/qml/qml/qqmlabstracturlinterceptor.cpp @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Research In Motion. +** 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$ +** +****************************************************************************/ + +/*! + \class QQmlAbstractUrlInterceptor + \inmodule QtQml + \brief allows you to control QML file loading. + + \note This class is in an extended validation period and still subject to change. It should be treated as private API for 5.1 + + QQmlAbstractUrlInterceptor is an interface which can be used to alter URLs + before they are used by the QML engine. This is primarily useful for altering + file urls into other file urls, such as selecting different graphical assets + for the current platform. + + Relative URLs are intercepted after being resolved against the file path of the + current QML context. URL interception also occurs after setting the base path for + a loaded QML file. This means that the content loaded for that QML file uses the + intercepted URL, but inside the file the pre-intercepted URL is used for resolving + relative paths. This allows for interception of .qml file loading without needing + all paths (or local types) inside intercepted content to insert a different relative path. + + Compared to setNetworkAccessManagerFactory, QQmlAbstractUrlInterceptor affects all URLs + and paths, including local files and embedded resource files. QQmlAbstractUrlInterceptor + is synchronous, and for asynchronous files must return a url with an asynchronous scheme + (such as http or a custom scheme handled by your own custom QNetworkAccessManager). You + can use a QQmlAbstractUrlInterceptor to change file URLs into networked URLs which are + handled by your own custom QNetworkAccessManager. + + To implement support for a custom networked scheme, see setNetworkAccessManagerFactory. +*/ + +/* + \enum QQmlAbstractUrlInterceptor::DataType + + Specifies where URL interception is taking place place. + + Because QML loads qmldir files for locating types, there are two URLs involved in loading a QML type. The URL of the (possibly implicit) qmldir used for locating the type and the URL of the file which defines the type. Intercepting + both leads to either complex URL replacement or double URL replacements for the same file. + + \value QmldirFile The URL being intercepted is for a Qmldir file. Intercepting this, but not the QmlFile, allows for swapping out entire sub trees. + \value JavaScriptFile The URL being intercepted is an import for a Javascript file. + \value QmlFile The URL being intercepted is for a Qml file. Intercepting this, but not the Qmldir file, leaves the base dir of a QML file untouched and acts like replacing the file with another file. + \value UrlString The URL being intercepted is a url property in a QML file, and not being used to load a file through the engine. + +*/ + +/*! + \fn QUrl QQmlAbstractUrlInterceptor::intercept(const QUrl& url, DataType type) + + A pure virtual function where you can intercept the url. The returned value is taken as the + new value for the url. The type of url being intercepted is given by the type variable. +*/ -- cgit v1.2.3