3c460f56a582ae4fe383b219f7d0715c7f0092f3 kent Sun Jan 9 10:55:01 2011 -0800 Fixing subtrack sorting problem in composite tracks in track hub. diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index 00349a9..554e691 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -100,39 +100,53 @@ boolean hgDebug = FALSE; /* Activate debugging code. Set to true by hgDebug=on in command line*/ int imagePixelHeight = 0; boolean dragZooming = TRUE; struct hash *oldVars = NULL; boolean hideControls = FALSE; /* Hide all controls? */ boolean trackImgOnly = FALSE; /* caller wants just the track image and track table html */ boolean ideogramToo = FALSE; /* caller wants the ideoGram (when requesting just one track) */ /* Structure returned from findGenomePos. * We use this to to expand any tracks to full * that were found to contain the searched-upon * position string */ struct hgPositions *hgp = NULL; - /* Other global variables. */ struct trackHub *hubList = NULL; /* List of all relevant hubs. */ struct group *groupList = NULL; /* List of all tracks. */ char *browserName; /* Test or public browser */ char *organization; /* UCSC */ struct hash *trackHash = NULL; /* Hash of the tracks by their name. */ +void uglySnoopTrackList(int depth, struct track *trackList) +/* Print out some info on track list. */ +{ +struct track *track; +for (track = trackList; track != NULL; track = track->next) + { + if (stringIn("FaireH1h", track->track)) + { + repeatCharOut(uglyOut, '+', depth); + uglyf("%s pri=%g defPri=%g<BR>\n", track->track, track->priority, track->defaultPriority); + } + uglySnoopTrackList(depth+1, track->subtracks); + } +} + struct track *trackFindByName(struct track *tracks, char *trackName) /* find a track in tracks by name, recursively searching subtracks */ { struct track *track; for (track = tracks; track != NULL; track = track->next) { if (sameString(track->track, trackName)) return track; else if (track->subtracks != NULL) { struct track *st = trackFindByName(track->subtracks, trackName); if (st != NULL) return st; } } @@ -3296,32 +3310,33 @@ static void addTracksFromTrackHub(int id, char *hubUrl, struct track **pTrackList, struct trackHub **pHubList) /* Load up stuff from data hub and append to list. The hubUrl points to * a trackDb.ra format file. */ { /* Load trackDb.ra file and make it into proper trackDb tree */ char hubName[8]; safef(hubName, sizeof(hubName), "%d",id); struct trackHub *hub = trackHubOpen(hubUrl, hubName); if (hub != NULL) { struct trackHubGenome *hubGenome = trackHubFindGenome(hub, database); if (hubGenome != NULL) { struct trackDb *tdbList = trackHubTracksForGenome(hub, hubGenome); - trackDbLinkUpGenerations(tdbList); + tdbList = trackDbLinkUpGenerations(tdbList); tdbList = trackDbPolishAfterLinkup(tdbList, database); + trackDbPrioritizeContainerItems(tdbList); addTdbListToTrackList(tdbList, NULL, pTrackList); if (tdbList != NULL) slAddHead(pHubList, hub); } } } void loadTrackHubs(struct track **pTrackList, struct trackHub **pHubList) /* Load up stuff from data hubs and append to lists. */ { struct hubConnectStatus *hub, *hubList = hubConnectStatusFromCart(cart); for (hub = hubList; hub != NULL; hub = hub->next) { addTracksFromTrackHub(hub->id, hub->hubUrl, pTrackList, pHubList); }