f04f1b9af06c823602c5e0ecd3b8c2059d7704d3 jcasper Thu Aug 27 14:42:31 2026 -0700 Faceted composites now have a max display mode setting instead of a full override of child track visibilities, with accompanying support for the onlyVisibility setting. We also now include a filter block (applied to appropriate child tracks) when those settings are in place. refs #37662 diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index 871c202ec6d..cbb460ee597 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -11941,30 +11941,36 @@ enabled = FALSE; } return enabled; } bool isSubtrackVisible(struct track *subtrack) /* Has this subtrack not been deselected in hgTrackUi or declared with * "subTrack ... off"? -- assumes composite track is visible. */ { if (subtrack->subTrackVisSet) return subtrack->subTrackVis; boolean overrideComposite = (NULL != cartOptionalString(cart, subtrack->track)); if (subtrack->limitedVisSet && subtrack->limitedVis == tvHide) return FALSE; bool enabledInTdb = subtrackEnabledInTdb(subtrack); +// A faceted composite's children keep a display mode of their own, so having one says +// nothing about whether the facet table selected them - leave that to the checkbox. +// NOTE: subtrack->tdb can be the composite's tdb, hence getSubtrackTdb() rather than +// subtrack->tdb->parent. +if (overrideComposite && tdbIsFacetedComposite(getSubtrackTdb(subtrack)->parent)) + overrideComposite = FALSE; char option[4096]; safef(option, sizeof(option), "%s_sel", subtrack->track); boolean enabled = cartUsualBoolean(cart, option, enabledInTdb); if (overrideComposite) enabled = TRUE; subtrack->subTrackVisSet = TRUE; subtrack->subTrackVis = enabled; return enabled; } static int subtrackCount(struct track *trackList) /* Count the number of visible subtracks in (sub)trackList. */ { struct track *subtrack; int ct = 0; @@ -15581,31 +15587,32 @@ const struct track *b = *((struct track **)vb); double diff = a->priority - b->priority; if (diff > 0) return 1; else if (diff < 0) return -1; return 0; } static bool isSubtrackVisibleTdb(struct cart *cart, struct trackDb *tdb) /* Has this subtrack not been deselected in hgTrackUi or declared with * * "subTrack ... off"? -- assumes composite track is visible. */ { -boolean overrideComposite = (NULL != cartOptionalString(cart, tdb->track)); +boolean overrideComposite = (NULL != cartOptionalString(cart, tdb->track)) + && !tdbIsFacetedComposite(tdb->parent); bool enabledInTdb = TRUE; // assume that this track is enabled in tdb char option[1024]; safef(option, sizeof(option), "%s_sel", tdb->track); boolean enabled = cartUsualBoolean(cart, option, enabledInTdb); if (overrideComposite) enabled = TRUE; return enabled; } void buildMathWig(struct trackDb *tdb) /* Turn a mathWig composite into a mathWig track. */ { char *aggregateFunc = cartOrTdbString(cart, tdb, "aggregate" , FALSE); if ((aggregateFunc == NULL) || !(sameString("add", aggregateFunc) || sameString("subtract", aggregateFunc)))