088407a7a546834422fe464567672e8b83653ab1 tdreszer Wed Mar 16 13:41:19 2011 -0700 Support for downloads only tracks in the config list even when they are not in a supertrack diff --git src/hg/hgTracks/config.c src/hg/hgTracks/config.c index cfdf501..0060a14 100644 --- src/hg/hgTracks/config.c +++ src/hg/hgTracks/config.c @@ -321,47 +321,112 @@ { safef(gname, sizeof(gname), "%s.group",track->track); printGroupListHtml(gname, groupList, track->groupName); } } hPrintf("</TD>"); } #endif///def PRIORITY_CHANGES_IN_CONFIG_UI hPrintf("</TR>\n"); } hTableEnd(); hPrintf("<BR>"); } } +#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");