[ui] support for appending multiple elements to a ListAttribute at once

This commit is contained in:
Yann Lanthony 2017-11-07 20:34:33 +01:00
parent 9bc8eaeb1b
commit f6ae3ae057
2 changed files with 14 additions and 5 deletions

View file

@ -168,18 +168,23 @@ class ListAttributeAppendCommand(GraphCommand):
assert isinstance(listAttribute, ListAttribute) assert isinstance(listAttribute, ListAttribute)
self.attrName = listAttribute.fullName() self.attrName = listAttribute.fullName()
self.index = None self.index = None
self.value = value self.count = 1
self.value = value if len(value) else None
self.setText("Append to {}".format(self.attrName)) self.setText("Append to {}".format(self.attrName))
def redoImpl(self): def redoImpl(self):
listAttribute = self.graph.attribute(self.attrName) listAttribute = self.graph.attribute(self.attrName)
listAttribute.append(self.value) self.index = len(listAttribute)
self.index = len(listAttribute) - 1 if isinstance(self.value, list):
listAttribute.extend(self.value)
self.count = len(self.value)
else:
listAttribute.append(self.value)
return True return True
def undoImpl(self): def undoImpl(self):
listAttribute = self.graph.attribute(self.attrName) listAttribute = self.graph.attribute(self.attrName)
listAttribute.remove(self.index) listAttribute.remove(self.index, self.count)
class ListAttributeRemoveCommand(GraphCommand): class ListAttributeRemoveCommand(GraphCommand):

View file

@ -63,7 +63,11 @@ class Reconstruction(QObject):
@Slot(graph.Attribute, QJsonValue) @Slot(graph.Attribute, QJsonValue)
def appendAttribute(self, attribute, value): def appendAttribute(self, attribute, value):
self._undoStack.tryAndPush(commands.ListAttributeAppendCommand(self._graph, attribute, value.toObject())) if value.isArray():
pyValue = value.toArray().toVariantList()
else:
pyValue = None if value.isNull() else value.toObject()
self._undoStack.tryAndPush(commands.ListAttributeAppendCommand(self._graph, attribute, pyValue))
@Slot(graph.Attribute) @Slot(graph.Attribute)
def removeAttribute(self, attribute): def removeAttribute(self, attribute):