fcb6dc8dfa166136193177c895ca181200850e4d max Mon Jan 19 06:02:31 2026 -0800 changing superTrack TrackUi quite a bit. Removing dropdowns and replacing them with buttons. Also adding buttons for setting all tracks or all visible tracks to a visibility. While at it, making a change to the js-query-library function (inversed the order of arguments) which was requested months ago by Brian, but I forgot to make the change after code review. Also shortening the "source data version" label to just "version". refs #36917. I changed the library function hTvDropDownClassVisOnlyAndExtra() rather than copying the code. This was because I was hesitant to copy/paste all this code into a second function, which would have been the only alternative, as the function cannot be reused as-is. So I modified the function to return the list of visibilities. It's never clear whether it's better to modify functions or copy/paste code. here, not breaking the function into smaller parts, so copy/pasting it, would risk requiring more future copy/pasted code. But the risk is to break existing tracks. diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 5cd03f48647..3bd55fa970a 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -887,98 +887,111 @@ "dense", "squish", "pack", "full", }; static int packIx[] = {tvHide,tvDense,tvSquish,tvPack,tvFull}; if (canPack) cgiMakeDropListClassWithIdStyleAndJavascript(varName, id, pack, ArraySize(pack), pack[packIx[vis]], class, TV_DROPDOWN_STYLE, events); else cgiMakeDropListClassWithIdStyleAndJavascript(varName, id, noPack, ArraySize(noPack), noPack[vis], class, TV_DROPDOWN_STYLE, events); } -void hTvDropDownClassVisOnlyAndExtra(char *varName, enum trackVisibility vis, - boolean canPack, char *class, char *visOnly, struct slPair *events) -// Make track visibility drop down for varName with style class, and potentially limited to visOnly -{ static char *denseOnly[] = { "hide", "dense", + NULL }; static char *squishOnly[] = { "hide", "squish", + NULL }; static char *packOnly[] = { "hide", "pack", + NULL }; static char *fullOnly[] = { "hide", "full", + NULL }; static char *noPack[] = { "hide", "dense", "full", + NULL }; static char *pack[] = { "hide", "dense", "squish", "pack", "full", + NULL }; -static int packIx[] = {tvHide,tvDense,tvSquish,tvPack,tvFull}; + +char ** hTvGetVizArr(enum trackVisibility vis, boolean canPack, char* visOnly) +/* return a NULL-terminated array of char* with possible track visibilities */ +{ if (visOnly != NULL) { - int visIx = (vis > 0) ? 1 : 0; if (sameWord(visOnly,"dense")) - cgiMakeDropListClassWithStyleAndJavascript(varName, denseOnly, ArraySize(denseOnly), - denseOnly[visIx],class,TV_DROPDOWN_STYLE, events); + return denseOnly; else if (sameWord(visOnly,"squish")) - cgiMakeDropListClassWithStyleAndJavascript(varName, squishOnly, - ArraySize(squishOnly), squishOnly[visIx], - class, TV_DROPDOWN_STYLE, events); + return squishOnly; else if (sameWord(visOnly,"pack")) - cgiMakeDropListClassWithStyleAndJavascript(varName, packOnly, ArraySize(packOnly), - packOnly[visIx], class, TV_DROPDOWN_STYLE, events); + return packOnly; else if (sameWord(visOnly,"full")) - cgiMakeDropListClassWithStyleAndJavascript(varName, fullOnly, ArraySize(fullOnly), - fullOnly[visIx], class, TV_DROPDOWN_STYLE, events); + return fullOnly; else /* default when not recognized */ - cgiMakeDropListClassWithStyleAndJavascript(varName, denseOnly, ArraySize(denseOnly), - denseOnly[visIx], class, TV_DROPDOWN_STYLE, events); + return denseOnly; } else { if (canPack) - cgiMakeDropListClassWithStyleAndJavascript(varName, pack, ArraySize(pack), - pack[packIx[vis]], class, TV_DROPDOWN_STYLE, events); + return pack; else - cgiMakeDropListClassWithStyleAndJavascript(varName, noPack, ArraySize(noPack), - noPack[vis], class, TV_DROPDOWN_STYLE, events); + return noPack; + } } + +void hTvDropDownClassVisOnlyAndExtra(char *varName, enum trackVisibility vis, + boolean canPack, char *class, char *visOnly, struct slPair *events) +// Make track visibility drop down for varName with style class, and potentially limited to visOnly +{ +char** vizArr = hTvGetVizArr(vis, canPack, visOnly); +int visIx = (vis > 0) ? 1 : 0; +char* checked = vizArr[visIx]; + +static int packIx[] = {tvHide,tvDense,tvSquish,tvPack,tvFull}; +if (visOnly && canPack) + checked = vizArr[packIx[vis]]; + +int vizArrLen = arrNullLen(vizArr); + +cgiMakeDropListClassWithStyleAndJavascript(varName, vizArr, vizArrLen, checked, class,TV_DROPDOWN_STYLE, events); } void hideShowDropDownWithClassAndExtra(char *varName, char * id, boolean show, char *class, struct slPair *events) // Make hide/show dropdown for varName { static char *hideShow[] = { "hide", "show" }; cgiMakeDropListClassWithIdStyleAndJavascript(varName, id, hideShow, ArraySize(hideShow), hideShow[show], class, TV_DROPDOWN_STYLE, events); } @@ -10527,31 +10540,31 @@ { char *version = checkDataVersion(database, tdb); if (version == NULL) { // try the hgFixed.trackVersion table struct trackVersion *trackVersion = getTrackVersion(database, tdb->track); // try trackVersion table with parent, for composites/superTracks if (trackVersion == NULL && tdb->parent != NULL) trackVersion = getTrackVersion(database, tdb->parent->track); if (trackVersion != NULL) version = trackVersion->version; } if (isNotEmpty(version)) - printf("Source data version: %s
\n", version); + printf("Version: %s
\n", version); } void printRelatedTracks(char *database, struct hash *trackHash, struct trackDb *tdb, struct cart *cart) /* Maybe print a "related track" section */ { if (trackHubDatabase(database)) return; char *relatedTrackTable = cfgOptionDefault("db.relatedTrack","relatedTrack"); struct sqlConnection *conn = hAllocConn(database); if (!sqlTableExists(conn, relatedTrackTable)) { hFreeConn(&conn); return; }