Hi,
attached is a small patch which adds environment variable expansion to the
import statement. Rationale: this might be useful to implement different
(native) component styles.
You could make a module:
com.mycompany.qml-ui-components
which contains a C++ plugin and a bunch of files, e.g. Button.qml
The Button.qml itself reads only:
---Button.qml---
import "$STYLE"
Button{}
and you have subdirectories like:
plain/Button.qml
fancy/Button.qml
crazy/Button.qml
The C++ plugin is responsible for setting the correct default style (using
::qputenv()) on the current platform, if not set otherwise.
Currently you can only achive this when playing with the module imports path,
the patch would make this easier.
Reasonable extension?
Matthias
diff --git a/src/declarative/qml/qdeclarativecompositetypemanager.cpp b/src/declarative/qml/qdeclarativecompositetypemanager.cpp
index 0eb7e1b..084cf1d 100644
--- a/src/declarative/qml/qdeclarativecompositetypemanager.cpp
+++ b/src/declarative/qml/qdeclarativecompositetypemanager.cpp
@@ -560,6 +560,26 @@ int QDeclarativeCompositeTypeManager::resolveTypes(QDeclarativeCompositeTypeData
if (imp.type == QDeclarativeScriptParser::Import::Script)
continue;
+if (imp.type == QDeclarativeScriptParser::Import::File) {
+// expand import variables
+int i = 0;
+forever {
+i = imp.uri.indexOf(QLatin1Char('$'), i);
+if (i < 0)
+break;
+if (i > 0 && imp.uri.at(i-1) == QLatin1Char('\\'))
+continue;
+int len = 1;
+if (i + len < imp.uri.size() && imp.uri.at(i + len).isLetter()) {
+++len;
+while (i + len < imp.uri.size() && imp.uri.at(i + len).isLetterOrNumber())
+++len;
+}
+QByteArray var = ::qgetenv(imp.uri.mid(i+1, len-1).toLatin1());
+imp.uri.replace(i, len, QString::fromLatin1(var));
+}
+}
+
if (imp.type == QDeclarativeScriptParser::Import::File && imp.qualifier.isEmpty()) {
QString importUrl = unit->imports.baseUrl().resolved(QUrl(imp.uri + QLatin1String("/qmldir"))).toString();
for (int ii = 0; ii < unit->resources.count(); ++ii) {
___
Qt-qml mailing list
Qt-qml@trolltech.com
http://lists.trolltech.com/mailman/listinfo/qt-qml