6bd333f69401150f11cfa8d592165ad9b655f80f
markd
  Wed Nov 2 23:01:02 2022 -0700
added track hub control to set max transcripts

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 2a5bbb0..ad69413 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -7395,54 +7395,66 @@
     printf("<TD align='left'%s> (%d to %d)",(filterByRange?"":" colspan=3"),minLimit, maxLimit);
     if (trackDbSettingClosestToHome(tdb, GRAY_LEVEL_SCORE_MIN) != NULL)
         {
         printf("<TR><TD align='right'colspan=5>");
         scoreGrayLevelCfgUi(cart, tdb, name, 1000);
         puts("</TR>");
         }
     }
 if (opened)
     {
     puts("</TABLE>");
     cfgEndBox(boxed);
     }
 }
 
-static void gencodeLabelControls(char *db, struct cart *cart, struct trackDb *tdb, char *name, char *title, boolean boxed, boolean parentLevel)
+static void gencodeLabelControls(char *db, struct cart *cart, struct trackDb *tdb, char *name, boolean parentLevel)
 /* generate label checkboxes for GENCODE. */
 {
 // See hgTracks/gencodeTracks.c:registerProductionTrackHandlers()
 // and hgTracks/gencodeTracks.c:assignConfiguredName()
 char *labelsNames[][2] = {
     {"gene name", "geneName"},
     {"gene id", "geneId"},
     {"transcript id", "transcriptId"},
     {NULL, NULL}
 };
 int i;
 for (i = 0; labelsNames[i][0] != NULL; i++)
     {
     char varName[64], varSuffix[64];
     safef(varSuffix, sizeof(varSuffix), "label.%s", labelsNames[i][1]);
     safef(varName, sizeof(varName), "%s.%s", name, varSuffix);
     char *value = cartUsualStringClosestToHome(cart, tdb, parentLevel, varSuffix, NULL);
     boolean checked = (value != NULL) && !sameString(value, "0");
     printf("%s%s: ", (i > 0) ? "&nbsp;&nbsp;" : "", labelsNames[i][0]);
     cgiMakeCheckBoxMore(varName, checked, NULL);
     }
 }
 
+static void gencodeDisplayControls(char *db, struct cart *cart, struct trackDb *tdb, char *name, boolean parentLevel)
+/* generate display controls */
+{
+static char *varSuffix = "maxTrans";
+char varName[64];
+safef(varName, sizeof(varName), "%s.%s", name, varSuffix);
+int maxTrans = cartUsualIntClosestToHome(cart, tdb, parentLevel, varSuffix, 0);
+printf("<br>Maximum number of transcripts to display: ");
+cgiMakeIntVar(varName, maxTrans, 5);
+printf(" (0 to display all)");
+}
+
 static void newGencodeShowOptions(struct cart *cart, struct trackDb *tdb)
 /* Put up line of controls that describe what parts to show. */
 {
 char varName[64];
 
 printf("<BR><B>Show:</B> ");
 
 safef(varName, sizeof(varName), "%s.show.noncoding", tdb->track);
 boolean option = cartUsualBoolean(cart, varName, TRUE);
 cgiMakeCheckBox(varName, option);
 printf(" %s&nbsp;&nbsp;&nbsp;", "non-coding genes");
 
 safef(varName, sizeof(varName), "%s.show.spliceVariants", tdb->track);
 option = cartUsualBoolean(cart, varName, TRUE);
 cgiMakeCheckBox(varName, option);
@@ -7478,31 +7490,32 @@
 if (sameString(name, "acembly"))
     {
     char *acemblyClass = cartUsualStringClosestToHome(cart,tdb,parentLevel,"type",
                                                       acemblyEnumToString(0));
     printf("<p><b>Gene Class: </b>");
     acemblyDropDown("acembly.type", acemblyClass);
     printf("  ");
     }
 else if (isGencode3)
     {
     newGencodeShowOptions(cart, tdb);
     }
 else if (startsWith("wgEncodeGencode", name))
     {
     // new GENCODEs
-    gencodeLabelControls(db, cart, tdb, name, title, boxed, parentLevel);
+    gencodeLabelControls(db, cart, tdb, name, parentLevel);
+    gencodeDisplayControls(db, cart, tdb, name, parentLevel);
     }
 else if (sameString("wgEncodeSangerGencode", name)
      ||  (startsWith("encodeGencode", name) && !sameString("encodeGencodeRaceFrags", name)))
     {
     // GENCODE pilot (see hgTracks/gencodeTracks.c:registerPilotTrackHandlers()
     // and hgTracks/simpleTracks.c:genePredAssignConfiguredName()
     printf("<B>Label:</B> ");
     safef(varName, sizeof(varName), "%s.label", name);
     cgiMakeRadioButton(varName, "gene", sameString("gene", geneLabel));
     printf("%s ", "gene");
     cgiMakeRadioButton(varName, "accession", sameString("accession", geneLabel));
     printf("%s ", "accession");
     cgiMakeRadioButton(varName, "both", sameString("both", geneLabel));
     printf("%s ", "both");
     cgiMakeRadioButton(varName, "none", sameString("none", geneLabel));