summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWarwick Allison <warwick.allison@nokia.com>2009-05-20 05:36:25 (GMT)
committerWarwick Allison <warwick.allison@nokia.com>2009-05-20 05:36:25 (GMT)
commit1aeab18c1e78e201a38d76a24e8cfd2733e4f5e7 (patch)
tree39ad1c03ddd858ddf18463ae61cb1aca2f7cd7fb
parent47f2559f10780f81a1fd1387b2eebeb804fe9378 (diff)
downloadQt-1aeab18c1e78e201a38d76a24e8cfd2733e4f5e7.zip
Qt-1aeab18c1e78e201a38d76a24e8cfd2733e4f5e7.tar.gz
Qt-1aeab18c1e78e201a38d76a24e8cfd2733e4f5e7.tar.bz2
Basic qualified type support.
Can now: DialLibrary.Dial { ... } without any import statement. Can also run qmlviewer with -L DialLibrary then use Dial { ... }. The exact way this works will almost definitely change to ensure predictable behaviour under future type additions to scopes.
-rw-r--r--src/declarative/qml/qmlscriptparser.cpp17
-rw-r--r--tools/qmlviewer/main.cpp6
-rw-r--r--tools/qmlviewer/qmlviewer.cpp4
-rw-r--r--tools/qmlviewer/qmlviewer.h1
4 files changed, 24 insertions, 4 deletions
diff --git a/src/declarative/qml/qmlscriptparser.cpp b/src/declarative/qml/qmlscriptparser.cpp
index ead7ee5..64f0bac 100644
--- a/src/declarative/qml/qmlscriptparser.cpp
+++ b/src/declarative/qml/qmlscriptparser.cpp
@@ -203,7 +203,10 @@ ProcessAST::defineObjectBinding_helper(AST::UiQualifiedId *propertyName,
LocationSpan location,
AST::UiObjectInitializer *initializer)
{
- bool isType = !objectType.isEmpty() && objectType.at(0).isUpper() && !objectType.contains(QLatin1Char('.'));
+ int lastTypeDot = objectType.lastIndexOf(QLatin1Char('.'));
+ bool isType = !objectType.isEmpty() &&
+ (objectType.at(0).isUpper() |
+ lastTypeDot >= 0 && objectType.at(lastTypeDot+1).isUpper());
int propertyCount = 0;
for (; propertyName; propertyName = propertyName->next){
@@ -234,15 +237,21 @@ ProcessAST::defineObjectBinding_helper(AST::UiQualifiedId *propertyName,
return 0;
} else {
-
// Class
- const int typeId = _parser->findOrCreateTypeId(objectType);
+
+ QString resolvableObjectType = objectType;
+ if (lastTypeDot >= 0)
+ resolvableObjectType.replace(QLatin1Char('.'),QLatin1Char('/'));
+ const int typeId = _parser->findOrCreateTypeId(resolvableObjectType);
Object *obj = new Object;
obj->type = typeId;
- _scope.append(objectType);
+
+ // XXX this doesn't do anything (_scope never builds up)
+ _scope.append(resolvableObjectType);
obj->typeName = qualifiedNameId().toLatin1();
_scope.removeLast();
+
obj->location = location;
if (propertyCount) {
diff --git a/tools/qmlviewer/main.cpp b/tools/qmlviewer/main.cpp
index f59918f..38a00bb 100644
--- a/tools/qmlviewer/main.cpp
+++ b/tools/qmlviewer/main.cpp
@@ -41,6 +41,7 @@ void usage()
qWarning(" -recordtest <directory> .................. record an autotest");
qWarning(" -runtest <directory> ..................... run a previously recorded test");
qWarning(" -translation <translationfile> ........... set the language to run in");
+ qWarning(" -L <directory> ........................... prepend to the library search path");
qWarning(" ");
qWarning(" Press F1 for interactive help");
exit(1);
@@ -81,6 +82,7 @@ int main(int argc, char ** argv)
QString dither = "none";
QString recordfile;
QStringList recordargs;
+ QStringList libraries;
QString skin;
bool devkeys = false;
bool cache = false;
@@ -132,6 +134,8 @@ int main(int argc, char ** argv)
usage();
translationFile = newargv[i + 1];
++i;
+ } else if (arg == "-L") {
+ libraries << QString(argv[++i]);
} else if (arg[0] != '-') {
fileName = arg;
} else if (1 || arg == "-help") {
@@ -146,6 +150,8 @@ int main(int argc, char ** argv)
}
QmlViewer viewer(testMode, testDir, 0, frameless ? Qt::FramelessWindowHint : Qt::Widget);
+ foreach (QString lib, libraries)
+ viewer.addLibraryPath(lib);
viewer.setCacheEnabled(cache);
viewer.setRecordFile(recordfile);
if (period>0)
diff --git a/tools/qmlviewer/qmlviewer.cpp b/tools/qmlviewer/qmlviewer.cpp
index 97db22e..4b0a83a 100644
--- a/tools/qmlviewer/qmlviewer.cpp
+++ b/tools/qmlviewer/qmlviewer.cpp
@@ -314,6 +314,10 @@ void QmlViewer::toggleRecording()
setRecording(recording);
}
+void QmlViewer::addLibraryPath(const QString& lib)
+{
+ canvas->engine()->addNameSpacePath("",lib);
+}
void QmlViewer::reload()
{
diff --git a/tools/qmlviewer/qmlviewer.h b/tools/qmlviewer/qmlviewer.h
index 09b2b5b..967af49 100644
--- a/tools/qmlviewer/qmlviewer.h
+++ b/tools/qmlviewer/qmlviewer.h
@@ -42,6 +42,7 @@ public:
void setAutoRecord(int from, int to);
void setDeviceKeys(bool);
void setCacheEnabled(bool);
+ void addLibraryPath(const QString& lib);
QSize sizeHint() const;