b159fa56513cfc78d000a66cc65ff1a85a2e0c27 braney Tue Sep 5 17:23:40 2017 -0700 ongoing work on hgCollection diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index 92f896d..c2dc74b 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -14166,34 +14166,82 @@ } } track->height = height; return track->height; } int trackPriCmp(const void *va, const void *vb) /* Compare for sort based on priority */ { const struct track *a = *((struct track **)va); const struct track *b = *((struct track **)vb); return (a->priority - b->priority); } +void buildMathWig(struct trackDb *tdb) +/* Turn a mathWig view into a mathWig track. */ +{ +char *viewFunc = trackDbSetting(tdb, "viewFunc"); + +if ((viewFunc == NULL) || sameString("show all", viewFunc)) + return; + +struct trackDb *subTracks = tdb->subtracks; + +tdb->subtracks = NULL; +tdb->type = "mathWig"; + +struct dyString *dy = newDyString(1024); + +if (sameString("add all", viewFunc)) + dyStringPrintf(dy, "+ "); +else + dyStringPrintf(dy, "- "); +struct trackDb *subTdb; +for (subTdb=subTracks; subTdb; subTdb = subTdb->next) + { + char *bigDataUrl = trackDbSetting(subTdb, "bigDataUrl"); + dyStringPrintf(dy, "%s ",bigDataUrl); + } + +hashAdd(tdb->settingsHash, "mathDataUrl", dy->string); +} + +void fixupMathWigs(struct trackDb *tdb) +/* Look through a container to see if it has a mathWig view and convert it. */ +{ +struct trackDb *subTdb; + +for(subTdb = tdb->subtracks; subTdb; subTdb = subTdb->next) + { + char *type; + if ((type = trackDbSetting(subTdb, "container")) != NULL) + { + if (sameString(type, "mathWig")) + { + buildMathWig(subTdb); + } + } + } +} + void makeCompositeTrack(struct track *track, struct trackDb *tdb) /* Construct track subtrack list from trackDb entry. * Sets up color gradient in subtracks if requested */ { +fixupMathWigs(tdb); unsigned char finalR = track->color.r, finalG = track->color.g, finalB = track->color.b; unsigned char altR = track->altColor.r, altG = track->altColor.g, altB = track->altColor.b; unsigned char deltaR = 0, deltaG = 0, deltaB = 0; struct slRef *tdbRef, *tdbRefList = trackDbListGetRefsToDescendantLeaves(tdb->subtracks); struct trackDb *subTdb; int subCount = slCount(tdbRefList); int altColors = subCount - 1; struct track *subtrack = NULL; TrackHandler handler; boolean smart = FALSE;