caf740fe7f056a28fcc8b6160c0b2ca609898cfa
angie
  Fri Dec 7 13:08:51 2012 -0800
For Track #8360 (snp137): Steve pointed out that leaf track shortLabelsdon't contain enough identifying info for gene tracks that are part of
multi-level composites like GENCODE.  Add in grandparent and parent
shortLabel when they aren't already part of the lower levels' shortLabel.

diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index fd6954e..dfff3e9 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -182,30 +182,42 @@
     jsMakeCheckboxGroupSetClearButton(cartVar, FALSE);
     struct slName *selectedGeneTracks = cartOptionalSlNameList(cart, cartVar);
     if (!cartListVarExists(cart, cartVar))
 	{
 	char *defaultGeneTracks = trackDbSetting(tdb, "defaultGeneTracks");
 	if (isNotEmpty(defaultGeneTracks))
 	    selectedGeneTracks = slNameListFromComma(defaultGeneTracks);
 	}
     int numCols = 4, i;
     int menuSize = slCount(geneTdbList);
     char **values = needMem(menuSize*sizeof(char *));
     char **labels = needMem(menuSize*sizeof(char *));
     for (i = 0, gTdb = geneTdbList;  i < menuSize && gTdb != NULL;  i++, gTdb = gTdb->next)
 	{
 	values[i] = gTdb->track;
+	if (gTdb->parent != NULL)
+	    {
+	    struct dyString *dy = dyStringNew(0);
+	    if (gTdb->parent->parent != NULL &&
+		!startsWith(gTdb->parent->parent->shortLabel, gTdb->parent->shortLabel))
+		dyStringPrintf(dy, "%s: ", gTdb->parent->parent->shortLabel);
+	    if (!startsWith(gTdb->parent->shortLabel, gTdb->shortLabel))
+		dyStringPrintf(dy, "%s: ", gTdb->parent->shortLabel);
+	    dyStringPrintf(dy, "%s", gTdb->shortLabel);
+	    labels[i] = dyStringCannibalize(&dy);
+	    }
+	else
 	labels[i] = gTdb->shortLabel;
 	}
     cgiMakeCheckboxGroupWithVals(cartVar, labels, values, menuSize, selectedGeneTracks, numCols);
     jsEndCollapsibleSection();
     }
 hFreeConn(&conn);
 }
 
 #define SNP125_FILTER_COLUMNS 4
 #define SNP125_DEFAULTS "snp125Defaults"
 
 void snp125PrintFilterControls(char *track, char *attributeLabel, char *attributeVar,
 			       char *labels[], char *values[], int menuSize)
 /* Print two or more rows (attribute name header and row(s) of checkboxes)
  * of a table displaying snp125 attribute filter checkboxes. */