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;
}