From f098ede8cb3a757033b178681398f028f46df0d8 Mon Sep 17 00:00:00 2001 From: Aurore LAFAURIE Date: Fri, 12 Apr 2024 15:42:45 +0200 Subject: [PATCH 1/2] [core] Add visible property to desc.py Visible property permit to tell directly from the description of the node that we don't want to see the attribute from the node in the GraphEditor --- meshroom/core/desc.py | 44 ++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/meshroom/core/desc.py b/meshroom/core/desc.py index 62594888..359377e9 100644 --- a/meshroom/core/desc.py +++ b/meshroom/core/desc.py @@ -15,7 +15,7 @@ class Attribute(BaseObject): """ def __init__(self, name, label, description, value, advanced, semantic, uid, group, enabled, uidIgnoreValue=None, - validValue=True, errorMessage=""): + validValue=True, errorMessage="", visible=True): super(Attribute, self).__init__() self._name = name self._label = label @@ -29,6 +29,7 @@ class Attribute(BaseObject): self._uidIgnoreValue = uidIgnoreValue self._validValue = validValue self._errorMessage = errorMessage + self._visible = visible name = Property(str, lambda self: self._name, constant=True) label = Property(str, lambda self: self._label, constant=True) @@ -42,6 +43,7 @@ class Attribute(BaseObject): uidIgnoreValue = Property(Variant, lambda self: self._uidIgnoreValue, constant=True) validValue = Property(Variant, lambda self: self._validValue, constant=True) errorMessage = Property(str, lambda self: self._errorMessage, constant=True) + visible = Property(bool, lambda self: self._visible, constant=True) type = Property(str, lambda self: self.__class__.__name__, constant=True) def validateValue(self, value): @@ -77,13 +79,13 @@ class Attribute(BaseObject): class ListAttribute(Attribute): """ A list of Attributes """ - def __init__(self, elementDesc, name, label, description, group='allParams', advanced=False, semantic='', enabled=True, joinChar=' '): + def __init__(self, elementDesc, name, label, description, group='allParams', advanced=False, semantic='', enabled=True, joinChar=' ', visible=True): """ :param elementDesc: the Attribute description of elements to store in that list """ self._elementDesc = elementDesc self._joinChar = joinChar - super(ListAttribute, self).__init__(name=name, label=label, description=description, value=[], uid=(), group=group, advanced=advanced, semantic=semantic, enabled=enabled) + super(ListAttribute, self).__init__(name=name, label=label, description=description, value=[], uid=(), group=group, advanced=advanced, semantic=semantic, enabled=enabled, visible=visible) elementDesc = Property(Attribute, lambda self: self._elementDesc, constant=True) uid = Property(Variant, lambda self: self.elementDesc.uid, constant=True) @@ -117,14 +119,14 @@ class ListAttribute(Attribute): class GroupAttribute(Attribute): """ A macro Attribute composed of several Attributes """ - def __init__(self, groupDesc, name, label, description, group='allParams', advanced=False, semantic='', enabled=True, joinChar=' ', brackets=None): + def __init__(self, groupDesc, name, label, description, group='allParams', advanced=False, semantic='', enabled=True, joinChar=' ', brackets=None, visible=True): """ :param groupDesc: the description of the Attributes composing this group """ self._groupDesc = groupDesc self._joinChar = joinChar self._brackets = brackets - super(GroupAttribute, self).__init__(name=name, label=label, description=description, value={}, uid=(), group=group, advanced=advanced, semantic=semantic, enabled=enabled) + super(GroupAttribute, self).__init__(name=name, label=label, description=description, value={}, uid=(), group=group, advanced=advanced, semantic=semantic, enabled=enabled, visible=visible) groupDesc = Property(Variant, lambda self: self._groupDesc, constant=True) @@ -210,16 +212,16 @@ class GroupAttribute(Attribute): class Param(Attribute): """ """ - def __init__(self, name, label, description, value, uid, group, advanced, semantic, enabled, uidIgnoreValue=None, validValue=True, errorMessage=""): + def __init__(self, name, label, description, value, uid, group, advanced, semantic, enabled, uidIgnoreValue=None, validValue=True, errorMessage="", visible=True): super(Param, self).__init__(name=name, label=label, description=description, value=value, uid=uid, group=group, advanced=advanced, semantic=semantic, enabled=enabled, - uidIgnoreValue=uidIgnoreValue, validValue=validValue, errorMessage=errorMessage) + uidIgnoreValue=uidIgnoreValue, validValue=validValue, errorMessage=errorMessage, visible=visible) class File(Attribute): """ """ - def __init__(self, name, label, description, value, uid, group='allParams', advanced=False, semantic='', enabled=True): - super(File, self).__init__(name=name, label=label, description=description, value=value, uid=uid, group=group, advanced=advanced, semantic=semantic, enabled=enabled) + def __init__(self, name, label, description, value, uid, group='allParams', advanced=False, semantic='', enabled=True, visible=True): + super(File, self).__init__(name=name, label=label, description=description, value=value, uid=uid, group=group, advanced=advanced, semantic=semantic, enabled=enabled, visible=visible) def validateValue(self, value): if not isinstance(value, str): @@ -237,8 +239,8 @@ class File(Attribute): class BoolParam(Param): """ """ - def __init__(self, name, label, description, value, uid, group='allParams', advanced=False, semantic='', enabled=True): - super(BoolParam, self).__init__(name=name, label=label, description=description, value=value, uid=uid, group=group, advanced=advanced, semantic=semantic, enabled=enabled) + def __init__(self, name, label, description, value, uid, group='allParams', advanced=False, semantic='', enabled=True, visible=True): + super(BoolParam, self).__init__(name=name, label=label, description=description, value=value, uid=uid, group=group, advanced=advanced, semantic=semantic, enabled=enabled, visible=visible) def validateValue(self, value): try: @@ -258,10 +260,10 @@ class BoolParam(Param): class IntParam(Param): """ """ - def __init__(self, name, label, description, value, range, uid, group='allParams', advanced=False, semantic='', enabled=True, validValue=True, errorMessage=""): + def __init__(self, name, label, description, value, range, uid, group='allParams', advanced=False, semantic='', enabled=True, validValue=True, errorMessage="", visible=True): self._range = range super(IntParam, self).__init__(name=name, label=label, description=description, value=value, uid=uid, group=group, advanced=advanced, semantic=semantic, enabled=enabled, - validValue=validValue, errorMessage=errorMessage) + validValue=validValue, errorMessage=errorMessage, visible=visible) def validateValue(self, value): # handle unsigned int values that are translated to int by shiboken and may overflow @@ -281,10 +283,10 @@ class IntParam(Param): class FloatParam(Param): """ """ - def __init__(self, name, label, description, value, range, uid, group='allParams', advanced=False, semantic='', enabled=True, validValue=True, errorMessage=""): + def __init__(self, name, label, description, value, range, uid, group='allParams', advanced=False, semantic='', enabled=True, validValue=True, errorMessage="", visible=True): self._range = range super(FloatParam, self).__init__(name=name, label=label, description=description, value=value, uid=uid, group=group, advanced=advanced, semantic=semantic, enabled=enabled, - validValue=validValue, errorMessage=errorMessage) + validValue=validValue, errorMessage=errorMessage, visible=visible) def validateValue(self, value): try: @@ -304,14 +306,14 @@ class ChoiceParam(Param): """ """ def __init__(self, name, label, description, value, values, exclusive, uid, group='allParams', joinChar=' ', advanced=False, semantic='', - enabled=True, validValue=True, errorMessage=""): + enabled=True, validValue=True, errorMessage="", visible=True): assert values self._values = values self._exclusive = exclusive self._joinChar = joinChar self._valueType = type(self._values[0]) # cast to value type super(ChoiceParam, self).__init__(name=name, label=label, description=description, value=value, uid=uid, group=group, advanced=advanced, - semantic=semantic, enabled=enabled, validValue=validValue, errorMessage=errorMessage) + semantic=semantic, enabled=enabled, validValue=validValue, errorMessage=errorMessage, visible=visible) def conformValue(self, value): """ Conform 'value' to the correct type and check for its validity """ @@ -340,9 +342,9 @@ class ChoiceParam(Param): class StringParam(Param): """ """ - def __init__(self, name, label, description, value, uid, group='allParams', advanced=False, semantic='', enabled=True, uidIgnoreValue=None, validValue=True, errorMessage=""): + def __init__(self, name, label, description, value, uid, group='allParams', advanced=False, semantic='', enabled=True, uidIgnoreValue=None, validValue=True, errorMessage="", visible=True): super(StringParam, self).__init__(name=name, label=label, description=description, value=value, uid=uid, group=group, advanced=advanced, semantic=semantic, enabled=enabled, - uidIgnoreValue=uidIgnoreValue, validValue=validValue, errorMessage=errorMessage) + uidIgnoreValue=uidIgnoreValue, validValue=validValue, errorMessage=errorMessage, visible=visible) def validateValue(self, value): if not isinstance(value, str): @@ -358,8 +360,8 @@ class StringParam(Param): class ColorParam(Param): """ """ - def __init__(self, name, label, description, value, uid, group='allParams', advanced=False, semantic='', enabled=True): - super(ColorParam, self).__init__(name=name, label=label, description=description, value=value, uid=uid, group=group, advanced=advanced, semantic=semantic, enabled=enabled) + def __init__(self, name, label, description, value, uid, group='allParams', advanced=False, semantic='', enabled=True, visible=True): + super(ColorParam, self).__init__(name=name, label=label, description=description, value=value, uid=uid, group=group, advanced=advanced, semantic=semantic, enabled=enabled, visible=visible) def validateValue(self, value): if not isinstance(value, str) or len(value.split(" ")) > 1: From f3027d1988c4c6fbe3a87f7646f379162c0d327a Mon Sep 17 00:00:00 2001 From: Aurore LAFAURIE Date: Fri, 12 Apr 2024 15:43:35 +0200 Subject: [PATCH 2/2] [ui] Visible property handles the show of an output attribute in the node in the GraphEditor --- meshroom/ui/qml/GraphEditor/Node.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshroom/ui/qml/GraphEditor/Node.qml b/meshroom/ui/qml/GraphEditor/Node.qml index bba6548f..2729a1d3 100755 --- a/meshroom/ui/qml/GraphEditor/Node.qml +++ b/meshroom/ui/qml/GraphEditor/Node.qml @@ -392,7 +392,7 @@ Item { delegate: Loader { id: outputLoader - active: object.isOutput && isFileAttributeBaseType(object) + active: object.isOutput && isFileAttributeBaseType(object) && object.desc.visible anchors.right: parent.right width: outputs.width