58502ff9a4db966bdad267df1bc713fcc1b660b3
kate
  Wed Feb 6 17:47:52 2019 -0800
Cleanup regeneron features. refs #22739

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index ebd4948..07de026 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -1235,30 +1235,38 @@
 
 Color maybeDarkerLabels(struct track *track, struct hvGfx *hvg, Color color)
 /* For tracks having light track display but needing a darker label */
 {
 if (trackDbSetting(track->tdb, "darkerLabels"))
     {
     struct hsvColor hsv = mgRgbToHsv(mgColorIxToRgb(NULL, color));
     // check if really pale
     if (hsv.s < 500 ||(hsv.h > 40.0 && hsv.h < 150.0))
         return somewhatDarkerColor(hvg, color);
     return slightlyDarkerColor(hvg, color);
     }
 return color;
 }
 
+boolean isCenterLabelsPackOff(struct track *track)
+/* Check for trackDb setting to suppress center labels of composite in pack mode */
+{
+if (!track || !track->tdb)
+    return FALSE;
+char *centerLabelsPack = trackDbSetting(track->tdb, "centerLabelsPack");
+return (centerLabelsPack && sameWord(centerLabelsPack, "off"));
+}
 
 static int doLeftLabels(struct track *track, struct hvGfx *hvg, MgFont *font,
                                 int y)
 /* Draw left labels.  Return y coord. */
 {
 struct slList *prev = NULL;
 
 /* for sample tracks */
 double minRangeCutoff, maxRangeCutoff;
 double minRange, maxRange;
 double min0, max0;
 char minRangeStr[32];
 char maxRangeStr[32];
 
 int ymin, ymax;
@@ -1323,38 +1331,36 @@
 else
     {
     sprintf( minRangeStr, "%d", (int)round(minRangeCutoff));
     sprintf( maxRangeStr, "%d", (int)round(maxRangeCutoff));
     }
 /* special label handling for wigMaf type tracks -- they
    display a left label in pack mode.  To use the full mode
    labeling, temporarily set visibility to full.
    Restore savedVis later */
 if (startsWith("bigMaf", track->tdb->type) || startsWith("wigMaf", track->tdb->type) || startsWith("maf", track->tdb->type))
     vis = tvFull;
 /* behave temporarily like pack for these */
 if (track->limitedVis == tvFull && isTypeBedLike(track))
     vis = tvPack;
 
-char *centerLabelsPack = NULL;
 switch (vis)
     {
     case tvHide:
         break;  /* Do nothing; */
     case tvPack:
-        centerLabelsPack = trackDbSetting(track->tdb, "centerLabelsPack");
-        if (centerLabelsPack && sameWord(centerLabelsPack, "off"))
+        if (isCenterLabelsPackOff(track))
             // draw left labels for pack mode track with center labels off
             {
             if (isCenterLabelIncluded(track))
                 y += fontHeight;
             hvGfxTextRight(hvg, leftLabelX, y, leftLabelWidth-1, track->lineHeight, labelColor, font, 
                                 track->shortLabel);
             y += track->height;
             }
         else
             y += tHeight;
         break;
     case tvSquish:
 	y += tHeight;
         break;
     case tvFull:
@@ -4575,30 +4581,36 @@
 struct window *window;
 for (window=windows, winTrack=track; window; window=window->next, winTrack=winTrack->nextWindow)
     {
     setGlobalsFromWindow(window);
 
     int trackHeight =  trackPlusLabelHeight(winTrack, fontHeight);
 
     if (trackHeight > maxHeight)
 	maxHeight = trackHeight;
     }
 setGlobalsFromWindow(windows); // first window
 
 flatTrack->maxHeight = maxHeight;
 }
 
+boolean doCollapseEmptySubtracks(struct track *track)
+/* Suppress display of empty subtracks. Initial support only for bed's. */
+{
+char *collapseEmptySubtracks = trackDbSetting(track->tdb, "collapseEmptySubtracks");
+return (collapseEmptySubtracks && sameWord(collapseEmptySubtracks, "on"));
+}
 
 void makeActiveImage(struct track *trackList, char *psOutput)
 /* Make image and image map. */
 {
 struct track *track;
 MgFont *font = tl.font;
 struct hvGfx *hvg;
 struct tempName pngTn;
 char *mapName = "map";
 int fontHeight = mgFontLineHeight(font);
 int trackPastTabX = (withLeftLabels ? trackTabWidth : 0);
 int trackTabX = gfxBorder;
 int trackPastTabWidth = tl.picWidth - trackPastTabX;
 int pixWidth, pixHeight;
 int y=0;
@@ -4802,31 +4814,31 @@
         safef(buffer, sizeof buffer,  "%s_imgOrd", name->name);
         cartRemove(cart, buffer);
         }
     }
 
 // Construct flatTracks
 for (track = trackList; track != NULL; track = track->next)
     {
     if (tdbIsComposite(track->tdb))
         {
         struct track *subtrack;
         if (isCompositeInAggregate(track))
             flatTracksAdd(&flatTracks,track,cart, orderedWiggles);
         else
             {
-            boolean doCollapse = trackDbSettingOn(track->tdb, "collapseEmptySubtracks");
+            boolean doCollapse = doCollapseEmptySubtracks(track);
             for (subtrack = track->subtracks; subtrack != NULL; subtrack = subtrack->next)
                 {
                 if (!isSubtrackVisible(subtrack))
                     continue;
 
                 if (!isLimitedVisHiddenForAllWindows(subtrack) && 
                         !(doCollapse && slCount(subtrack->items) == 0))
                     {
                     flatTracksAdd(&flatTracks,subtrack,cart, orderedWiggles);
                     }
                 }
             }
         }
     else
 	{	
@@ -5522,32 +5534,30 @@
             }
 
         if (trackShouldUseAjaxRetrieval(track))
             y += REMOTE_TRACK_HEIGHT;
         else if (track->drawLeftLabels != NULL)
 	    {
 	    setGlobalsFromWindow(windows);
             y = doOwnLeftLabels(track, hvgSide, font, y);
 	    setGlobalsFromWindow(windows); // first window
 	    }
         else
 	    y += flatTrack->maxHeight;
         }
     }
 
-
-
 /* Make map background. */
 
 y = yAfterRuler;
 for (flatTrack = flatTracks; flatTrack != NULL; flatTrack = flatTrack->next)
     {
     track = flatTrack->track;
     if (track->limitedVis != tvHide)
         {
         if (theImgBox)
             {
             // Set imgTrack in case any map items will be set
 	    sliceHeight      = flatTrack->maxHeight;
             sliceOffsetY     = y;
             curImgTrack = imgBoxTrackFind(theImgBox,track->tdb,NULL);
             }