getavalon / core

The safe post-production pipeline - https://getavalon.github.io/2.0
MIT License
218 stars 48 forks source link

Implement Loader families mask #392

Closed davidlatwe closed 5 years ago

davidlatwe commented 5 years ago

Families icon color

This change was aimed to improve the icon's visibility when it's been highlighted in the GUI.


Shadow Families

In some of our subset, may contain more then one family in the data.families document entry. For example:

[
    "reveries.imgseq",
    "reveries.imgseq.playblast",
]

Both family will be shown in Loader GUI's family widget, but only the first family "reveries.xgen" will be able to filter out subsets.

So I propose this, by adding a list of "shadowFamilies" into project data to mask out those families you might need to hide.

BigRoy commented 5 years ago

Icon color

(Subjective opinion) I'm not too much of a fan of the new icon color, I see why you decided for it against the selected color. But maybe a tad darker blue or lighter blue would already do wonders for this. Another option is having the green less bright/saturated. Also, keep in mind I'm used to the old... and it's always hard to force a new direction because you're dealing with opinions.

Families (plural) filter for instances that have multiple families

Both family will be shown in Loader GUI's family widget, but only the first family "reveries.xgen" will be able to filter out subsets.

  1. This is actually due to another issue, it's the fact that the SubsetWidget in the Loader -> the one showing the publishes you can load. Doesn't actually use the families, the same goes for its filter. My proposal would be to don't start using extra data like shadowFamilies but instead we somehow adapt the widget to allow filtering by any of the options. As such, when any of the families is toggled off maybe it's hidden?

  2. Then if you want to "exclude" one filter to be shown, then perhaps that would be a Project-based or Configuration-based option that can say: "disallow-filter", "hideFilter" or alike. That way it's clear that just the filtering part is not shown. I believe that's somewhat like you've done with shadowFilters but admittedly the name kind of confused me. How about hideFilter? This could also be an option inside the family itself in the project configuration? Could that work nicely?

For example, families currently support this in project configuration:

            {
                "name" : "colorbleed.animation",
                "icon" : "male",
                "label" : "Animation"
            }

How about adding support for "hideFilter": True?

I believe that would mean around here you would just do:

if family.get("hideFilter"):
    continue

Somehow the name "shadowFilter" felt unclear to me as to what it is and what it would be doing.

BigRoy commented 5 years ago

Sorry, pressed the wrong button - did not intend to close

davidlatwe commented 5 years ago

How about adding support for "hideFilter": True?

Ah, I like this. :)

adapt the widget to allow filtering by any of the options. As such, when any of the families is toggled off maybe it's hidden?

I did thought about this, works like pyblish's plugin.match = pyblish.api.Subset, right ?

For example:

I have a subset like this

{
  "type": "subset",
  "name": "xgenLegacyDefault",
  "families": [
    "reveries.xgen",
    "reveries.xgen.legacy",
  ]
}

and another like


{
  "type": "subset",
  "name": "xgenInteractiveDefault",
  "families": [
    "reveries.xgen",
    "reveries.xgen.interactive",
  ]
}

And in the GUI filter widget

When I turn off reveries.xgen.interactive, only the xgenInteractiveDefault subset will be filter out, but if I turn off reveries.xgen, they all go away.

If that's what option 1) is for, I think I like this better :D

davidlatwe commented 5 years ago

Oh, one unrelated note for the example I described above, the families still storing inside the version document here. Not moving to subset, yet.

BigRoy commented 5 years ago

When I turn off reveries.xgen.interactive, only the xgenInteractiveDefault subset will be filter out, but if I turn off reveries.xgen, they all go away.

Yes, that's basically what I meant on how it could work if the filtering was aware of the multiple families as opposed to one. ;) Visually the filters could even end up being shown indented, hehe. But that's more cosmetics than needed for it to function.

This functionality could then still of course be combined with hideFilter to decrease visual complexity in the filter widget.

Oh, one unrelated note for the example I described above, the families still storing inside the version document here. Not moving to subset, yet.

Yes. That's correct. That is a different discussion though, see https://github.com/getavalon/core/issues/246

davidlatwe commented 5 years ago

Update

davidlatwe commented 5 years ago

Spot this issue a few days ago :

If one subset/version has family that has been set to hideFilter = true, it will not be shown in Loader.

Example:

# The families of the subset/version
subset_families = set([
    "config.image",
    "config.image.render"
])

# All families in database
existed_families = set([
    "config.image",
    # "config.image.render"  # been set to `hideFilter = true`, will not be collected
    ...
])

VISIBLE = subset_families.issubset(existed_families)
# Since "config.image.render" has been ignored, the `VISIBLE` is `False`
assert not VISIBLE

The commit 04b2f6a solved this by filtering out item families that has been ignored, before calculation.

BigRoy commented 5 years ago

Quickly gave this a test run on our end. We don't have multiple families per publish yet I think, so regarding the masking I couldn't check much - I just checked for backward compatibility. It didn't break anything... so all good.

Feel free to merge.