diff --git a/meshroom/core/attribute.py b/meshroom/core/attribute.py index b661fe43..f07bd4fb 100644 --- a/meshroom/core/attribute.py +++ b/meshroom/core/attribute.py @@ -97,7 +97,9 @@ class Attribute(BaseObject): return self._label def getEnabled(self): - return self._enabled + if isinstance(self.desc.enabled, types.FunctionType): + return self.desc.enabled(self.node) + return self.attributeDesc.enabled def setEnabled(self, v): if self._enabled == v: @@ -235,10 +237,9 @@ class Attribute(BaseObject): return self._value def updateInternals(self): - if isinstance(self.desc.enabled, types.FunctionType): - self.setEnabled(self.desc.enabled(self.node)) - else: - self.setEnabled(self.attributeDesc.enabled) + # Emit if the enable status has changed + self.setEnabled(self.getEnabled()) + name = Property(str, getName, constant=True) fullName = Property(str, getFullName, constant=True) @@ -371,6 +372,11 @@ class ListAttribute(Attribute): return self.attributeDesc.joinChar.join([v.getValueStr() for v in self.value]) return super(ListAttribute, self).getValueStr() + def updateInternals(self): + super(ListAttribute, self).updateInternals() + for attr in self._value: + attr.updateInternals() + # Override value property setter value = Property(Variant, Attribute._get_value, _set_value, notify=Attribute.valueChanged) isDefault = Property(bool, _isDefault, notify=Attribute.valueChanged) @@ -452,6 +458,11 @@ class GroupAttribute(Attribute): sortedSubValues = [self._value.get(attr.name).getValueStr() for attr in self.attributeDesc.groupDesc] return self.attributeDesc.joinChar.join(sortedSubValues) + def updateInternals(self): + super(GroupAttribute, self).updateInternals() + for attr in self._value: + attr.updateInternals() + # Override value property value = Property(Variant, Attribute._get_value, _set_value, notify=Attribute.valueChanged) isDefault = Property(bool, _isDefault, notify=Attribute.valueChanged) diff --git a/meshroom/core/node.py b/meshroom/core/node.py index 6e8cc5b1..302c5a31 100644 --- a/meshroom/core/node.py +++ b/meshroom/core/node.py @@ -547,8 +547,8 @@ class BaseNode(BaseObject): def _buildCmdVars(self): def _buildAttributeCmdVars(cmdVars, name, attr): - if attr.attributeDesc.group is not None: - if attr.enabled: + if attr.enabled: + if attr.attributeDesc.group is not None: # if there is a valid command line "group" v = attr.getValueStr() cmdVars[name] = '--{name} {value}'.format(name=name, value=v) @@ -557,12 +557,12 @@ class BaseNode(BaseObject): if v: cmdVars[attr.attributeDesc.group] = cmdVars.get(attr.attributeDesc.group, '') + \ ' ' + cmdVars[name] - elif isinstance(attr, GroupAttribute): - assert isinstance(attr.value, DictModel) - # if the GroupAttribute is not set in a single command line argument, - # the sub-attributes may need to be exposed individually - for v in attr._value: - _buildAttributeCmdVars(cmdVars, v.name, v) + elif isinstance(attr, GroupAttribute): + assert isinstance(attr.value, DictModel) + # if the GroupAttribute is not set in a single command line argument, + # the sub-attributes may need to be exposed individually + for v in attr._value: + _buildAttributeCmdVars(cmdVars, v.name, v) """ Generate command variables using input attributes and resolved output attributes names and values. """ for uidIndex, value in self._uids.items():