c5d4303120891ad38c855d560c94b1db76d5f038
tdreszer
  Thu Jul 8 14:50:16 2010 -0700
Remove subtrack level vis override when composite or view vis comes in.
diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index fce99cc..109c9d0 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -4313,6 +4313,40 @@
     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 */
+{
+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
+    }
+}
+
 void doTrackForm(char *psOutput, struct tempName *ideoTn)
 /* Make the tracks display form with the zoom/scroll buttons and the active
  * image.  If the ideoTn parameter is not NULL, it is filled in if the
@@ -4380,7 +4414,11 @@
     safef(wildCard,sizeof(wildCard),"*_%s",IMG_ORDER_VAR);
     cartRemoveLike(cart, wildCard);
     }
-#endif//def IMAGEv2_DRAG_REORDER
+#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);
+#endif///def SUBTRACKS_HAVE_VIS
 
 /* Honor hideAll and visAll variables */
 if (hideAll || defaultTracks)