29ee334981ae71d1c4caefcd64f0db3ec26f7547
markd
  Thu Mar 22 18:04:50 2018 -0700
add support to using gencode gene id in all gencode track (rm21157)

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index e9b1fc9..c992b97 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -6358,51 +6358,82 @@
     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)
+/* 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);
+    }
+}
+
 void genePredCfgUi(char *db, struct cart *cart, struct trackDb *tdb, char *name, char *title, boolean boxed)
-/* Put up gencode-specific controls */
+/* Put up genePred-specific controls */
 {
 char varName[64];
 boolean parentLevel = isNameAtParentLevel(tdb,name);
 char *geneLabel = cartUsualStringClosestToHome(cart, tdb,parentLevel, "label", "gene");
 boxed = cfgBeginBoxAndTitle(tdb, boxed, title);
 
 labelCfgUi(db, cart, tdb);
 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 (startsWith("wgEncodeGencode", name)
-     ||  sameString("wgEncodeSangerGencode", name)
+         || sameString("wgEncodeSangerGencode", name))
+    {
+    // new GENCODEs
+    gencodeLabelControls(db, cart, tdb, name, title, boxed, 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));
     printf("%s ", "none");
     }
 
 if (trackDbSettingClosestToHomeOn(tdb, "nmdFilter"))
     {
     boolean nmdDefault = FALSE;