[graph] expose Attribute.isDefault as a property

This commit is contained in:
Yann Lanthony 2018-02-05 15:10:24 +01:00
parent 4d3509847a
commit c1e9675fee

View file

@ -258,7 +258,7 @@ class Attribute(BaseObject):
return '"{}"'.format(self.value) return '"{}"'.format(self.value)
return str(self.value) return str(self.value)
def isDefault(self): def _isDefault(self):
return self._value == self.desc.value return self._value == self.desc.value
def getPrimitiveValue(self, exportDefault=True): def getPrimitiveValue(self, exportDefault=True):
@ -273,6 +273,7 @@ class Attribute(BaseObject):
isOutput = Property(bool, isOutput.fget, constant=True) isOutput = Property(bool, isOutput.fget, constant=True)
isLinkChanged = Signal() isLinkChanged = Signal()
isLink = Property(bool, isLink.fget, notify=isLinkChanged) isLink = Property(bool, isLink.fget, notify=isLinkChanged)
isDefault = Property(bool, _isDefault, notify=valueChanged)
class ListAttribute(Attribute): class ListAttribute(Attribute):
@ -289,8 +290,7 @@ class ListAttribute(Attribute):
def _set_value(self, value): def _set_value(self, value):
self._value.clear() self._value.clear()
if value: self.extend(value)
self.extend(value)
self.requestGraphUpdate() self.requestGraphUpdate()
def append(self, value): def append(self, value):
@ -300,6 +300,7 @@ class ListAttribute(Attribute):
values = value if isinstance(value, list) else [value] values = value if isinstance(value, list) else [value]
attrs = [attribute_factory(self.attributeDesc.elementDesc, v, self.isOutput, self.node, self) for v in values] attrs = [attribute_factory(self.attributeDesc.elementDesc, v, self.isOutput, self.node, self) for v in values]
self._value.insert(index, attrs) self._value.insert(index, attrs)
self.valueChanged.emit()
self._applyExpr() self._applyExpr()
self.requestGraphUpdate() self.requestGraphUpdate()
@ -317,6 +318,7 @@ class ListAttribute(Attribute):
self.node.graph.removeEdge(attr) # delete edge if the attribute is linked self.node.graph.removeEdge(attr) # delete edge if the attribute is linked
self._value.removeAt(index, count) self._value.removeAt(index, count)
self.requestGraphUpdate() self.requestGraphUpdate()
self.valueChanged.emit()
def uid(self, uidIndex): def uid(self, uidIndex):
uids = [] uids = []
@ -334,20 +336,21 @@ class ListAttribute(Attribute):
def getExportValue(self): def getExportValue(self):
return [attr.getExportValue() for attr in self._value] return [attr.getExportValue() for attr in self._value]
def isDefault(self): def _isDefault(self):
return bool(self._value) return len(self._value) == 0
def getPrimitiveValue(self, exportDefault=True): def getPrimitiveValue(self, exportDefault=True):
if exportDefault: if exportDefault:
return [attr.getPrimitiveValue(exportDefault=exportDefault) for attr in self._value] return [attr.getPrimitiveValue(exportDefault=exportDefault) for attr in self._value]
else: else:
return [attr.getPrimitiveValue(exportDefault=exportDefault) for attr in self._value if not attr.isDefault()] return [attr.getPrimitiveValue(exportDefault=exportDefault) for attr in self._value if not attr.isDefault]
def getValueStr(self): def getValueStr(self):
return self.attributeDesc.joinChar.join([v.getValueStr() for v in self._value]) return self.attributeDesc.joinChar.join([v.getValueStr() for v in self._value])
# Override value property setter # Override value property setter
value = Property(Variant, Attribute._get_value, _set_value, notify=Attribute.valueChanged) value = Property(Variant, Attribute._get_value, _set_value, notify=Attribute.valueChanged)
isDefault = Property(bool, _isDefault, notify=Attribute.valueChanged)
class GroupAttribute(Attribute): class GroupAttribute(Attribute):
@ -391,21 +394,21 @@ class GroupAttribute(Attribute):
def getExportValue(self): def getExportValue(self):
return {key: attr.getExportValue() for key, attr in self._value.objects.items()} return {key: attr.getExportValue() for key, attr in self._value.objects.items()}
def isDefault(self): def _isDefault(self):
return len(self._value) == 0 return all(v.isDefault for v in self._value)
def getPrimitiveValue(self, exportDefault=True): def getPrimitiveValue(self, exportDefault=True):
if exportDefault: if exportDefault:
return {name: attr.getPrimitiveValue(exportDefault=exportDefault) for name, attr in self._value.items()} return {name: attr.getPrimitiveValue(exportDefault=exportDefault) for name, attr in self._value.items()}
else: else:
return {name: attr.getPrimitiveValue(exportDefault=exportDefault) for name, attr in self._value.items() if not attr.isDefault()} return {name: attr.getPrimitiveValue(exportDefault=exportDefault) for name, attr in self._value.items() if not attr.isDefault}
def getValueStr(self): def getValueStr(self):
return self.attributeDesc.joinChar.join([v.getValueStr() for v in self._value.objects.values()]) return self.attributeDesc.joinChar.join([v.getValueStr() for v in self._value.objects.values()])
# Override value property # Override value property
value = Property(Variant, Attribute._get_value, _set_value, notify=Attribute.valueChanged) value = Property(Variant, Attribute._get_value, _set_value, notify=Attribute.valueChanged)
isDefault = Property(bool, _isDefault, notify=Attribute.valueChanged)
class Edge(BaseObject): class Edge(BaseObject):