db2405f972ffdd9a183d1b1708c4aaf6fb6804bf
tdreszer
  Tue Aug 10 16:39:16 2010 -0700
Fixed bug when SUBTRACKS_HAVE_VIS was on and wigMafs triggered infinite loop
diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index 34a9cb7..af695f1 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -1553,6 +1553,14 @@
 /* returns the subtrack visibility which may be limited by composite with multi-view dropdowns. */
 {
 #ifdef SUBTRACKS_HAVE_VIS
+if (tdbIsCompositeChild(subtrack->tdb))
+    {
+    char setting[512];
+    safef(setting,sizeof(setting),"%s_sel",subtrack->track);  // Must have "{trackName}_sel" to use subtrack level vis!
+    // FIXME: four state logic is for subtracks only and exists as static in hui.c.  When time is right, make this logic non-static
+    #define FOURSTATE_CHECKED           1
+    if (FOURSTATE_CHECKED == cartUsualInt(cart, setting, 0)) // Don't need all 4 states here.  Just checked/not
+        {
 char *var = cartOptionalString(cart, subtrack->track);
 if (var)
     {
@@ -1570,6 +1578,8 @@
 
     return hTvFromString(var);
     }
+        }
+    }
 #endif///def SUBTRACKS_HAVE_VIS
 
 enum trackVisibility vis = subtrack->limitedVis == tvHide ?
@@ -4343,38 +4353,12 @@
     warn("Unrecognized jsCommand %s", command);
 }
 
-void subtrackVisCartCleanup(struct track *trackList,struct cart *newCart,struct hash *oldVars)
-/* When composite/view vis changes, remove subtrack specific vis */
+void subtrackCartCleanup(struct track *trackList,struct cart *newCart,struct hash *oldVars)
+/* When composite/view settings changes, remove subtrack specific vis */
 {
 struct track *track = trackList;
 for (;track != NULL; track = track->next)
-    {
-    if(!tdbIsComposite(track->tdb))
-        continue;
-    boolean compositeWide = cartValueHasChanged(newCart,oldVars,track->track,TRUE);
-
-    boolean hasViews = FALSE;
-    struct trackDb *tdbView = track->tdb->subtracks;
-    for (;tdbView != NULL; tdbView = tdbView->next)
-        {
-        char * view = NULL;
-        if (!tdbIsView(tdbView,&view))
-            break;
-
-        hasViews = TRUE;
-        boolean viewLevel = FALSE;
-        if(!compositeWide)
-            {
-            char settingName[512];  // wgEncodeOpenChromChip.Peaks.vis
-            safef(settingName,sizeof(settingName),"%s.%s.vis",track->track,view);
-            viewLevel = cartValueHasChanged(newCart,oldVars,settingName,TRUE);
-            }
-        if(compositeWide || viewLevel)
-            cartRemoveFromTdbTree(newCart,tdbView,NULL,TRUE); // clean up children, skipping view
-        }
-    if (compositeWide && !hasViews)
-        cartRemoveFromTdbTree(newCart,track->tdb,NULL,TRUE); // clean up children, skipping composite
-    }
+    cartTdbTreeCleanupOverrides(track->tdb,newCart,oldVars);
 }
 
 void doTrackForm(char *psOutput, struct tempName *ideoTn)
@@ -4446,8 +4430,7 @@
     }
 #endif///def IMAGEv2_DRAG_REORDER
 #ifdef SUBTRACKS_HAVE_VIS
-// Here is where subtrack vis override must be removed when composite vis is updated
-subtrackVisCartCleanup(trackList,cart,oldVars);
+subtrackCartCleanup(trackList,cart,oldVars); // Subtrack settings must be removed when composite/view settings are updated
 #endif///def SUBTRACKS_HAVE_VIS
 
 /* Honor hideAll and visAll variables */
@@ -5638,6 +5621,7 @@
     hgFindMatches = NULL;     // XXXX necessary ???
     }
 
+hPrintf(commonCssStyles());
 jsIncludeFile("jquery.js", NULL);
 jsIncludeFile("utils.js", NULL);
 if(dragZooming)