9599e99e622644fc958a1a6481b82778cfd9a27f kate Thu Feb 13 14:12:01 2020 -0800 Initial cut adding supertrack info to member track UI. refs #24948 diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c index b4e3465..2d3c3eb 100644 --- src/hg/hgTrackUi/hgTrackUi.c +++ src/hg/hgTrackUi/hgTrackUi.c @@ -3135,30 +3135,112 @@ printf("<h2>No description found for: %s.</h2>",tdbParent?tdbParent->track:tdb->track); } cartRemove(cart,"descriptionOnly"); // This is a once only request and should be deleted return; } if (tdbIsContainer(tdb)) { safef(setting,sizeof(setting),"%s.%s",tdb->track,RESET_TO_DEFAULTS); // NOTE: if you want track vis to not be reset, move to after vis dropdown if (1 == cartUsualInt(cart, setting, 0)) cartRemoveAllForTdbAndChildren(cart,tdb); else if (!ajax) // Overkill on !ajax, because ajax shouldn't be called for a composite cartTdbTreeReshapeIfNeeded(cart,tdb); } +if (tdb->parent) + { + printf("<style>div.superTrackInfo {" + "box-shadow: inset 0 0 5px 0 black;" + "padding: 5px; padding-left: 50px;" + "margin-bottom: 10px;" + "} </style>\n"); + + printf("This track is part of a super-track. " + "To configure the parent or sibling tracks, click a link in the box below."); + + // show super-track info + printf("<div class='superTrackInfo'>"); +/* + printf("<i>Parent track</i> "); +*/ + struct trackDb *tdbParent = tdb->parent; + if (trackDbSetting(tdbParent, "wgEncode")) + printf("<A HREF='/ENCODE/index.html'><IMG style='vertical-align:middle;' " + "width=100 src='/images/ENCODE_scaleup_logo.png'><A>"); + printf("<b style='font-size:%d%%;'><a href='%s?%s=%s&c=%s&g=%s'" + " title='Configure parent track'>%s</a> Tracks</b>", + strlen(tdb->longLabel) > 30 ? 133 : 200, + hgTrackUiName(), cartSessionVarName(), cartSessionId(cart), + chromosome, cgiEncode(tdbParent->track), tdbParent->longLabel); + + // show group info + struct grp *grp, *grps = hLoadGrps(database); + for (grp = grps; grp != NULL; grp = grp->next) + { + if (sameString(grp->name, tdb->grp)) + { + printf(" <B style='font-size:100%%;'>" + "(<A HREF=\"%s?%s=%s&c=%s&hgTracksConfigPage=configure" + "&hgtgroup_%s_close=0#%sGroup\" title='%s tracks in track configuration " + "page'><IMG height=12 src='../images/ab_up.gif'>All %s%s</A>)</B>", + hgTracksName(), cartSessionVarName(), cartSessionId(cart), chromosome, + tdb->grp, tdb->grp, grp->label, grp->label, + endsWith(grp->label," Tracks")?"":" tracks"); + break; + } + } + grpFreeList(&grps); + + printf("<table cellpadding='2' style='margin-left: 50px';>"); + struct slRef *childRef; + tdbRefSortPrioritiesFromCart(cart, &tdbParent->children); + for (childRef = tdbParent->children; childRef != NULL; childRef = childRef->next) + { + struct trackDb *sibTdb = childRef->val; + if (sameString(sibTdb->track, tdb->track)) + continue; + printf("<tr>"); + //hPrintPennantIcon(sibTdb); + printf("<td><a href='%s?%s=%s&c=%s&g=%s'>%s</a> </td>", + tdbIsDownloadsOnly(sibTdb) ? hgFileUiName(): hTrackUiForTrack(sibTdb->track), + cartSessionVarName(), cartSessionId(cart), chromosome, cgiEncode(sibTdb->track), + sibTdb->shortLabel); + printf("<td>%s</td></tr>\n", sibTdb->longLabel); + } + printf("</table>"); + + +/* + char *encodedMapName = cgiEncode(tdb->parent->track); + printf(" <B style='font-size:100%%;'>" + "(<A HREF=\"%s?%s=%s&c=%s&g=%s\" title='Link to parent track'>" + "<IMG height=12 src='../images/ab_up.gif'>%s</A>)</B>", + hgTrackUiName(), cartSessionVarName(), cartSessionId(cart), + chromosome, encodedMapName, tdb->parent->shortLabel); + + printf("<p>This track is part of a parent called <i>%s</i>. " + "To show other tracks of this parent, go to the " + "<A HREF=\"%s?%s=%s&c=%s&g=%s\" title='Link to parent track'>" + "%s</a> configuration page</A>.", + tdb->parent->shortLabel, hgTrackUiName(), cartSessionVarName(), cartSessionId(cart), + chromosome, encodedMapName, tdb->parent->shortLabel); + freeMem(encodedMapName); +*/ + printf("</div>"); + } + printf("<FORM ACTION=\"%s\" NAME=\""MAIN_FORM"\" METHOD=%s>\n\n", hgTracksName(), cartUsualString(cart, "formMethod", "POST")); cartSaveSession(cart); if (sameWord(tdb->track,"ensGene")) { char longLabel[256]; struct trackVersion *trackVersion = getTrackVersion(database, tdb->track); if ((trackVersion != NULL) && !isEmpty(trackVersion->version)) { if (!isEmpty(trackVersion->dateReference) && differentWord("current", trackVersion->dateReference)) safef(longLabel, sizeof(longLabel), "Ensembl Gene Predictions - archive %s - %s", trackVersion->version, trackVersion->dateReference); else safef(longLabel, sizeof(longLabel), "Ensembl Gene Predictions - %s", trackVersion->version); } else @@ -3185,68 +3267,55 @@ else safef(longLabel, sizeof(longLabel), "%s", tdb->longLabel); } printf("<B style='font-size:200%%;'>%s%s</B>\n", longLabel, tdbIsSuper(tdb) ? " Tracks" : ""); } else { if (trackDbSetting(tdb, "wgEncode")) printf("<A HREF='/ENCODE/index.html'><IMG style='vertical-align:middle;' " "width=100 src='/images/ENCODE_scaleup_logo.png'><A>"); // set large title font size, but less so for long labels to minimize wrap printf("<B style='font-size:%d%%;'>%s%s</B>\n", strlen(tdb->longLabel) > 30 ? 133 : 200, tdb->longLabel, tdbIsSuper(tdb) ? " Tracks" : ""); } + /* Print link for parent track */ if (!ajax) { - if (tdb->parent) - { - char *encodedMapName = cgiEncode(tdb->parent->track); - printf(" <B style='font-size:100%%;'>" - "(<A HREF=\"%s?%s=%s&c=%s&g=%s\" title='Link to parent track'>" - "<IMG height=12 src='../images/ab_up.gif'>%s</A>)</B>", - hgTrackUiName(), cartSessionVarName(), cartSessionId(cart), - chromosome, encodedMapName, tdb->parent->shortLabel); - printf("<p>This track is part of a parent called <i>%s</i>. " - "To show other tracks of this parent, go to the " - "<A HREF=\"%s?%s=%s&c=%s&g=%s\" title='Link to parent track'>" - "%s</a> configuration page</A>.", - tdb->parent->shortLabel, hgTrackUiName(), cartSessionVarName(), cartSessionId(cart), - chromosome, encodedMapName, tdb->parent->shortLabel); - freeMem(encodedMapName); - } - else + if (!tdb->parent) { + // show group info struct grp *grp, *grps = hLoadGrps(database); for (grp = grps; grp != NULL; grp = grp->next) { if (sameString(grp->name,tdb->grp)) { printf(" <B style='font-size:100%%;'>" "(<A HREF=\"%s?%s=%s&c=%s&hgTracksConfigPage=configure" "&hgtgroup_%s_close=0#%sGroup\" title='%s tracks in track configuration " "page'><IMG height=12 src='../images/ab_up.gif'>All %s%s</A>)</B>", hgTracksName(), cartSessionVarName(), cartSessionId(cart),chromosome, tdb->grp,tdb->grp,grp->label,grp->label, endsWith(grp->label," Tracks")?"":" tracks"); break; } } grpFreeList(&grps); } + } puts("<BR><BR>"); if (ct && sameString(tdb->type, "maf")) tdb->canPack = TRUE; else if (sameString(tdb->track, WIKI_TRACK_TABLE)) // special case wikiTrack (there's no trackDb entry); fixes redmine 2395 tdb->canPack = TRUE; else if (sameString(tdb->type, "halSnake")) tdb->canPack = TRUE; else if (!startsWith("bigWig", tdb->type) && startsWith("big", tdb->type)) tdb->canPack = TRUE; else if (sameString(tdb->type, "bigNarrowPeak")) tdb->canPack = TRUE;