forked from qt-creator/qt-creator
Fixed property conversion. Again.
This commit is contained in:
@@ -538,7 +538,7 @@ void RewriterView::qmlTextChanged()
|
|||||||
default: {
|
default: {
|
||||||
emitCustomNotification(StartRewriterAmend);
|
emitCustomNotification(StartRewriterAmend);
|
||||||
ModelAmender differenceHandler(m_textToModelMerger.data());
|
ModelAmender differenceHandler(m_textToModelMerger.data());
|
||||||
if (m_textToModelMerger->load(newQmlText.toUtf8(), differenceHandler)) {
|
if (m_textToModelMerger->load(newQmlText, differenceHandler)) {
|
||||||
lastCorrectQmlSource = newQmlText;
|
lastCorrectQmlSource = newQmlText;
|
||||||
}
|
}
|
||||||
emitCustomNotification(EndRewriterAmend);
|
emitCustomNotification(EndRewriterAmend);
|
||||||
|
|||||||
@@ -255,8 +255,10 @@ void TextToModelMerger::setupImports(const Document::Ptr &doc,
|
|||||||
differenceHandler.importAbsentInQMl(import);
|
differenceHandler.importAbsentInQMl(import);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TextToModelMerger::load(const QByteArray &data, DifferenceHandler &differenceHandler)
|
bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceHandler)
|
||||||
{
|
{
|
||||||
|
// qDebug() << "TextToModelMerger::load with data:" << data;
|
||||||
|
|
||||||
const QUrl url = m_rewriterView->model()->fileUrl();
|
const QUrl url = m_rewriterView->model()->fileUrl();
|
||||||
const QStringList importPaths = m_rewriterView->textModifier()->importPaths();
|
const QStringList importPaths = m_rewriterView->textModifier()->importPaths();
|
||||||
setActive(true);
|
setActive(true);
|
||||||
@@ -266,7 +268,7 @@ bool TextToModelMerger::load(const QByteArray &data, DifferenceHandler &differen
|
|||||||
foreach (const QString &importPath, importPaths)
|
foreach (const QString &importPath, importPaths)
|
||||||
engine.addImportPath(importPath);
|
engine.addImportPath(importPath);
|
||||||
QDeclarativeComponent comp(&engine);
|
QDeclarativeComponent comp(&engine);
|
||||||
comp.setData(data, url);
|
comp.setData(data.toUtf8(), url);
|
||||||
if (comp.status() == QDeclarativeComponent::Error) {
|
if (comp.status() == QDeclarativeComponent::Error) {
|
||||||
QList<RewriterView::Error> errors;
|
QList<RewriterView::Error> errors;
|
||||||
foreach (const QDeclarativeError &error, comp.errors())
|
foreach (const QDeclarativeError &error, comp.errors())
|
||||||
@@ -288,7 +290,7 @@ bool TextToModelMerger::load(const QByteArray &data, DifferenceHandler &differen
|
|||||||
Snapshot snapshot = m_rewriterView->textModifier()->getSnapshot();
|
Snapshot snapshot = m_rewriterView->textModifier()->getSnapshot();
|
||||||
const QString fileName = url.toLocalFile();
|
const QString fileName = url.toLocalFile();
|
||||||
Document::Ptr doc = Document::create(fileName.isEmpty() ? QLatin1String("<internal>") : fileName);
|
Document::Ptr doc = Document::create(fileName.isEmpty() ? QLatin1String("<internal>") : fileName);
|
||||||
doc->setSource(QString::fromUtf8(data.constData()));
|
doc->setSource(data);
|
||||||
doc->parseQml();
|
doc->parseQml();
|
||||||
snapshot.insert(doc);
|
snapshot.insert(doc);
|
||||||
ReadingContext ctxt(snapshot, doc, importPaths);
|
ReadingContext ctxt(snapshot, doc, importPaths);
|
||||||
@@ -671,7 +673,14 @@ QVariant TextToModelMerger::convertToVariant(const ModelNode &node,
|
|||||||
const PropertyMetaInfo propertyMetaInfo = nodeMetaInfo.property(astName, true);
|
const PropertyMetaInfo propertyMetaInfo = nodeMetaInfo.property(astName, true);
|
||||||
|
|
||||||
if (propertyMetaInfo.isValid()) {
|
if (propertyMetaInfo.isValid()) {
|
||||||
return Internal::PropertyParser::read(propertyMetaInfo.variantTypeId(), cleanedValue);
|
QVariant::Type type = propertyMetaInfo.variantTypeId();
|
||||||
|
if (type == QVariant::Invalid) {
|
||||||
|
const QString propType = propertyMetaInfo.type();
|
||||||
|
// qDebug() << "converting" << cleanedValue << "to" << propType;
|
||||||
|
return Internal::PropertyParser::read(propType, cleanedValue, node.metaInfo().metaInfo());
|
||||||
|
} else {
|
||||||
|
return Internal::PropertyParser::read(type, cleanedValue);
|
||||||
|
}
|
||||||
} else if (node.type() == QLatin1String("Qt/PropertyChanges")) {
|
} else if (node.type() == QLatin1String("Qt/PropertyChanges")) {
|
||||||
// In the future, we should do the type resolving in a second pass, or delay setting properties until the full file has been parsed.
|
// In the future, we should do the type resolving in a second pass, or delay setting properties until the full file has been parsed.
|
||||||
return QVariant(cleanedValue);
|
return QVariant(cleanedValue);
|
||||||
@@ -827,6 +836,10 @@ void ModelAmender::shouldBeNodeListProperty(AbstractProperty &modelProperty,
|
|||||||
|
|
||||||
void ModelAmender::variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicType)
|
void ModelAmender::variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicType)
|
||||||
{
|
{
|
||||||
|
// qDebug()<< "ModelAmender::variantValuesDiffer for property"<<modelProperty.name()
|
||||||
|
// << "in node" << modelProperty.parentModelNode().id()
|
||||||
|
// << ", old value:" << modelProperty.value()
|
||||||
|
// << "new value:" << qmlVariantValue;
|
||||||
if (dynamicType.isEmpty())
|
if (dynamicType.isEmpty())
|
||||||
modelProperty.setValue(qmlVariantValue);
|
modelProperty.setValue(qmlVariantValue);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ public:
|
|||||||
bool isActive() const;
|
bool isActive() const;
|
||||||
|
|
||||||
void setupImports(const QmlJS::Document::Ptr &doc, DifferenceHandler &differenceHandler);
|
void setupImports(const QmlJS::Document::Ptr &doc, DifferenceHandler &differenceHandler);
|
||||||
bool load(const QByteArray &data, DifferenceHandler &differenceHandler);
|
bool load(const QString &data, DifferenceHandler &differenceHandler);
|
||||||
|
|
||||||
RewriterView *view() const
|
RewriterView *view() const
|
||||||
{ return m_rewriterView; }
|
{ return m_rewriterView; }
|
||||||
|
|||||||
Reference in New Issue
Block a user