77dc06c4bdc5e10f5d2705a51300ec028a7d785f tdreszer Fri Oct 1 10:51:48 2010 -0700 FindTracks now finds superTracks (Advanced only) and hgTrackUi now does superTrack reshaping when children have vis changed diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index f68887d..1845f9f 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -116,6 +116,7 @@ char *browserName; /* Test or public browser */ char *organization; /* UCSC */ +struct hash *trackHash = NULL; /* Hash of the tracks by their name. */ struct track *trackFindByName(struct track *tracks, char *trackName) /* find a track in tracks by name, recursively searching subtracks */ @@ -1852,11 +1853,12 @@ } } -static void makeGlobalTrackHash(struct track *trackList) -/* Start a global track hash. */ +struct hash *makeGlobalTrackHash(struct track *trackList) +/* Create a global track hash and returns a pointer to it. */ { trackHash = newHash(8); rAddToTrackHash(trackHash, trackList); +return trackHash; } @@ -3902,11 +3904,22 @@ if (hTvFromString(cartUsualString(cart, track->track, hStringFromTv(track->tdb->visibility))) != tvHide) setSuperTrackHasVisibleMembers(track->tdb->parent); +//#define SUPER_PARENTS // Turns out this wasn't necessary to solve my problem, but it is the right thing to do, so saving it for later +#ifdef SUPER_PARENTS + assert(track->parent == NULL); + track->parent = hashFindVal(superHash, track->tdb->parentName); + if (track->parent) + continue; + /* create track and reference for the supertrack */ + struct track *superTrack = track->parent = trackFromTrackDb(track->tdb->parent); + track->parent = superTrack; +#else///ifndef SUPER_PARENTS if (hashLookup(superHash, track->tdb->parentName)) /* ignore supertrack if it's already been handled */ continue; /* create track and reference for the supertrack */ struct track *superTrack = trackFromTrackDb(track->tdb->parent); +#endif///ndef SUPER_PARENTS superTrack->hasUi = TRUE; superTrack->group = group; superTrack->groupName = cloneString(group->name); @@ -3925,7 +3938,7 @@ AllocVar(ref); ref->track = superTrack; slAddHead(&newList, ref); - hashAdd(superHash, track->tdb->parentName, track->tdb->parent); + hashAdd(superHash, track->tdb->parentName, superTrack); } } slSort(&newList, trackRefCmpPriority); @@ -4260,7 +4273,7 @@ } #ifdef SUBTRACKS_HAVE_VIS -static void parentChildCartCleanup(struct track *trackList,struct cart *newCart,struct hash *oldVars) +void parentChildCartCleanup(struct track *trackList,struct cart *newCart,struct hash *oldVars) /* When composite/view settings changes, remove subtrack specific vis When superTrackChild is found and selected, shape superTrack to match. */ {