QmlOutline: Support reparenting into object array

This commit is contained in:
Kai Koehne
2010-08-12 18:05:50 +02:00
parent c75ef78d5d
commit 6321ccee9e
3 changed files with 89 additions and 6 deletions

View File

@@ -669,12 +669,9 @@ void QmlOutlineModel::moveObjectMember(AST::UiObjectMember *toMove,
const QString documentText = m_semanticInfo.document->source();
Rewriter rewriter(documentText, changeSet, QStringList());
if (AST::UiObjectDefinition *objDefinition = AST::cast<AST::UiObjectDefinition*>(newParent)) {
// target is an element
Rewriter rewriter(documentText, changeSet, QStringList());
rewriter.removeObjectMember(toMove, oldParent);
AST::UiObjectMemberList *listInsertAfter = 0;
if (insertionOrderSpecified) {
if (insertAfter) {
@@ -713,9 +710,36 @@ void QmlOutlineModel::moveObjectMember(AST::UiObjectMember *toMove,
*addedRange = rewriter.addObject(objDefinition->initializer, strToMove);
}
}
} else {
} else if (AST::UiArrayBinding *arrayBinding = AST::cast<AST::UiArrayBinding*>(newParent)) {
AST::UiArrayMemberList *listInsertAfter = 0;
if (insertionOrderSpecified) {
if (insertAfter) {
listInsertAfter = arrayBinding->members;
while (listInsertAfter && (listInsertAfter->member != insertAfter))
listInsertAfter = listInsertAfter->next;
}
}
QString strToMove;
{
const int offset = toMove->firstSourceLocation().begin();
const int length = toMove->lastSourceLocation().end() - offset;
strToMove = documentText.mid(offset, length);
}
if (insertionOrderSpecified) {
*addedRange = rewriter.addObject(arrayBinding, strToMove, listInsertAfter);
} else {
*addedRange = rewriter.addObject(arrayBinding, strToMove);
}
} else if (AST::UiObjectBinding *objectBinding = AST::cast<AST::UiObjectBinding*>(newParent)) {
qDebug() << "TODO: Reparent to UiObjectBinding";
return;
// target is a property
} else {
return;
}
rewriter.removeObjectMember(toMove, oldParent);
}
QStandardItem *QmlOutlineModel::parentItem()