91ed276194ce25992417787117a806b8e2172c01
larrym
  Tue Nov 22 15:40:32 2011 -0800
add tdbSetCartVisibility and use in hgTracks to fix #1666
diff --git src/hg/lib/trackDbCustom.c src/hg/lib/trackDbCustom.c
index f7bc5d3..41bd592 100644
--- src/hg/lib/trackDbCustom.c
+++ src/hg/lib/trackDbCustom.c
@@ -1268,15 +1268,38 @@
 tdbExtrasGet(tdb)->membership = membership;
 }
 
 char *tdbBigFileName(struct sqlConnection *conn, struct trackDb *tdb)
 // Return file name associated with bigWig.  Do a freeMem on returned string when done.
 {
 char *fileName = trackDbSetting(tdb, "bigDataUrl"); // always takes precedence
 if (fileName != NULL)
     return cloneString(fileName);
 
 char query[256];
 safef(query, sizeof(query), "select fileName from %s", tdb->table);
 return sqlQuickString(conn, query);
 }
 
+void tdbSetCartVisibility(struct trackDb *tdb, struct cart *cart, char *vis)
+{
+// Set visibility in the cart. Handles all the complications necessary for subtracks.
+char buf[512];
+cartSetString(cart, tdb->track, vis);
+if (tdbIsSubtrack(tdb))
+    {
+    safef(buf,sizeof buf, "%s_sel", tdb->track);
+    cartSetString(cart, buf, "1");   // Will reshape composite
+    struct trackDb *composite = tdbGetComposite(tdb);
+    if (composite && tdbIsSuperTrackChild(composite))
+        {
+        safef(buf,sizeof buf, "%s_sel", composite->track);
+        cartSetString(cart, buf, "1");   // Will reshape supertrack
+        }
+    }
+else if (tdbIsSuperTrackChild(tdb)) // solo track
+    {
+    safef(buf,sizeof buf, "%s_sel", tdb->track);
+    cartSetString(cart, buf, "1");   // Will reshape supertrack
+    }
+}
+