Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support display and connection of attributes that are part of GroupAttributes #2544

Open
wants to merge 8 commits into
base: develop
Choose a base branch
from

Conversation

cbentejac
Copy link
Contributor

@cbentejac cbentejac commented Sep 20, 2024

Description

This PR is based on #2538 and must be merged once #2538 itself has been integrated into develop.
It also relies on some UI fixes introduced in #2563.

The main feature of this pull request is that it adds the support of connections between attributes that are part of a GroupAttribute. Prior to this PR, these attributes could neither be connected individually, nor be displayed in the Graph Editor; they were however visible and editable in the Node Editor.

GroupAttributes are now displayed in the Graph Editor with a tiny "+" symbol which means they can be expanded when clicked upon. When this happens, all the children attributes of the clicked GroupAttribute are displayed below it, with an italic font to indicate visually a difference. Children attributes are displayed recursively, and a GroupAttribute that contains a child GroupAttribute will have it displayed as well (but collapsed by default).

Connections between the attributes are shown when both attributes are currently displayed in the Graph Editor. If one of the attributes is hidden, the edge will disappear, but the pin of the attribute that is still visible will remain full, signalling an existing connection.

2024-10-07_17-56-36.mp4

Features list

  • Add the notion of depth for attributes that are children of a GroupAttribute or a ListAttribute (or both). An attribute that has no parent will have a depth of 0, and it will increase of 1 for every parent;
  • Add a property for every attribute that may have children that contains the flattened list of said children;
  • Correctly evaluate links when they reference children attributes, hence adding the support of the connection of individual attributes within groups;
  • For children attributes, have their parent's exposed property take precedence over their own. This for example prevents having attributes within groups that are exposed while the group itself is not, which would break the hierarchy of the display for these GroupAttributes;
  • Add symbol to expand or collapse GroupAttributes and display their children attributes in their node in the Graph Editor. These children attributes are graphically connectable.
  • Display the full name of the attribute in its tooltip in the Graph Editor. If an attribute childAttribute is a child of a group groupAttribute, its name will be displayed as groupAttribute.childAttribute, making the relationship between the two obvious.

@cbentejac cbentejac added this to the Meshroom 2024.1.0 milestone Sep 20, 2024
Base automatically changed from dev/simplifyNodeAPI to develop September 20, 2024 20:57
@cbentejac cbentejac force-pushed the dev/connectGroupAttrs branch 2 times, most recently from 12210e5 to 12bc150 Compare September 23, 2024 16:57
@cbentejac cbentejac changed the title Add display of attributes that are part of GroupAttributes Add display of attributes that are part of GroupAttributes and allow connection of these attributes to other ones Sep 23, 2024
@cbentejac cbentejac changed the base branch from develop to fix/minorUiFixes October 7, 2024 09:50
@cbentejac cbentejac self-assigned this Oct 7, 2024
@cbentejac cbentejac marked this pull request as ready for review October 7, 2024 16:20
@cbentejac cbentejac changed the title Add display of attributes that are part of GroupAttributes and allow connection of these attributes to other ones Support display and connection of attributes that are part of GroupAttributes Oct 8, 2024
Base automatically changed from fix/minorUiFixes to develop October 16, 2024 07:42
For attributes in `GroupAttribute` and `ListAttribute`, the notion of
parent attribute exists through the `root` property. As a parent can
itself have a parent, the `depth` property describes how many levels
there are between the attribute and the root level.

A value of 0 means that the attribute is at the root level, and it
increases as it gets deeper.
`flattenedChildren` returns the list of all the attributes that refer
to this attribute as their parent (either direct or indirect) through
the `root` property. The search for the children attributes is recursive
and alllows to retrieve at once all the nested attributes, independently
from their level.

At the moment, only `ListAttribute` and `GroupAttribute` will return a
non-empty list of flattened children attributes.
…escription's

The `exposed` property, which determines whether the attribute is
displayed on the upper part of the node in the Graph Editor, is set
for each attribute individually in their node's description.

If an attribute has a parent (meaning it depends on a `GroupAttribute` or
a `ListAttribute`) whose `exposed` property value differs, it does not
make sense to display it separately from it. The attribute's `exposed`
should align with its parent's.
If an attribute belongs to a `GroupAttribute` or a `ListAttribute`,
it has a parent, and its full name is "parentName.attributeName".
Instead of displaying only "attributeName" in the tooltip, this commit
now displays "parentName.attributeName" to ensure that the link is obvious.
The test ensures that if the attributes within `GroupAttributes` are
connected to each other, the graph can be saved and reloaded without
triggering compatibility issues for these nodes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant