");
if (tdbIsSuperTrackChild(tdb))
/* indent members of a supertrack */
hPrintf(" ");
/* If track is not on this chrom print an informational
message for the user. */
#ifdef DOWNLOADS_ONLY_TRACKS_INCLUDED
if (tdbIsDownloadsOnly(tdb))
hPrintf("Downloads", // No vis display for downloadsOnly
hgFileUiName(),cartSessionVarName(), cartSessionId(cart), tdb->track);
else
#endif///def DOWNLOADS_ONLY_TRACKS_INCLUDED
if (hTrackOnChrom(track->tdb, chromName))
{
if (tdbIsSuper(track->tdb))
{
/* supertrack dropdown is hide/show */
superTrackDropDown(cart, track->tdb, 1);
}
else
{
/* check for option of limiting visibility to one mode */
hTvDropDownClassVisOnly(track->track, track->visibility,
track->canPack, (track->visibility == tvHide) ?
"hiddenText" : "normalText",
trackDbSetting(track->tdb, "onlyVisibility"));
}
}
else
hPrintf("[No data-%s]", chromName);
hPrintf("
");
hPrintf("
");
hPrintf("%s", tdb->longLabel);
hPrintf("
");
#ifdef PRIORITY_CHANGES_IN_CONFIG_UI
if (withPriorityOverride)
{
hPrintf("
");
#ifdef DOWNLOADS_ONLY_TRACKS_INCLUDED
if (tdbIsDownloadsOnly(tdb))
hPrintf(" 
\n");
}
hTableEnd();
hPrintf(" ");
}
}
#ifdef DOWNLOADS_ONLY_TRACKS_INCLUDED
static int addDownloadOnlyTracks(char *db,struct group **pGroupList,struct track **pTrackList)
// Download only tracks are not normaly incorporated into the grou and track lists
{
int count = 0;
struct track *track = NULL;
struct group *group = NULL;
struct trackDb *tdbList = hTrackDb(db);
struct trackDb *tdb = tdbList;
for(;tdb != NULL; tdb = tdb->next)
{
if (!tdbIsDownloadsOnly(tdb)
|| tdbIsFolderContent(tdb)
|| tdbIsCompositeChild(tdb))
continue;
// Must find group
if (tdb->grp == NULL)
continue;
for (group = *pGroupList;group != NULL; group = group->next)
{
if (sameWord(group->name,tdb->grp))
break;
}
if (group == NULL)
continue;
// Make the track
track = trackFromTrackDb(tdb);
track->group = group;
track->groupName = cloneString(group->name); // Don't even bother looking in cart. That junk should be thrown out, now that we have dragReorder
slAddHead(pTrackList,track);
count++;
}
if (count > 0)
{
// Going to have to make all new group->trackLists
slSort(pGroupList, gCmpPriority);
for (group = *pGroupList;group != NULL; group = group->next)
slFreeList(&group->trackList);
// Sort the tracks anew and add each on into it's group.
slSort(pTrackList, tgCmpPriority);
for (track = *pTrackList; track != NULL; track = track->next)
{
struct trackRef *tr;
AllocVar(tr);
tr->track = track;
slAddHead(&track->group->trackList, tr);
}
/* Straighten things out, clean up, and go home. */
for (group = *pGroupList;group != NULL; group = group->next)
slReverse(&group->trackList);
}
return count;
}
#endif///def DOWNLOADS_ONLY_TRACKS_INCLUDED
void configPageSetTrackVis(int vis)
/* Do config page after setting track visibility. If vis is -2, then visibility
* is unchanged. If -1 then set visibility to default, otherwise it should
* be tvHide, tvDense, etc. */
{
struct dyString *title = dyStringNew(0);
char *groupTarget = NULL;
struct track *trackList = NULL;
struct track *ideoTrack = NULL;
struct group *groupList = NULL;
withPriorityOverride = cartUsualBoolean(cart, configPriorityOverride, FALSE);
/* Get track list and group them. */
ctList = customTracksParseCart(database, cart, &browserLines, &ctFileName);
trackList = getTrackList(&groupList, vis);
#ifdef DOWNLOADS_ONLY_TRACKS_INCLUDED
addDownloadOnlyTracks(database,&groupList,&trackList);
#endif///def DOWNLOADS_ONLY_TRACKS_INCLUDED
/* The ideogram for some reason is considered a track.
* We don't really want to process it as one though, so
* we see if it's there, and if necessary remove it. */
ideoTrack = chromIdeoTrack(trackList);
if (ideoTrack != NULL)
removeTrackFromGroup(ideoTrack);
/* Fetch group to change on if any from CGI,
* and remove var so it doesn't get used again. */
groupTarget = cloneString(cartUsualString(cart, configGroupTarget, ""));
cartRemove(cart, configGroupTarget);
if (sameString(groupTarget, "none"))
freez(&groupTarget);
dyStringPrintf(title, "Configure Image");
hPrintf("