c2c65344c6ae672dbc05e7920049803c3fe29874
tdreszer
  Thu Sep 16 12:29:34 2010 -0700
Fixed tdbVisLimitedByAncestry which caused supertrack contained and visibble tracks to appear hidden in findTracks.  Added composite/view vis reshaping based upon subtrack specific vis.
diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index c5e8b57..df03c13 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -412,6 +412,7 @@
     "pack",
     "squish"
     };
+#define hTvStringShowSameAsFull "show"
 
 enum trackVisibility hTvFromStringNoAbort(char *s)
 /* Given a string representation of track visibility, return as
@@ -419,7 +420,11 @@
 {
 int vis = stringArrayIx(s, hTvStrings, ArraySize(hTvStrings));
 if (vis < 0)
+    {
+    if (sameString(hTvStringShowSameAsFull,s))
+        return tvShow;  // Show is the same as full!
     vis = 0;  // don't generate bogus value on invalid input
+    }
 return vis;
 }
 
@@ -2187,6 +2192,22 @@
 return fourState;
 }
 
+void subtrackFourStateCheckedSet(struct trackDb *subtrack, struct cart *cart,boolean checked, boolean enabled)
+/* Sets the fourState Checked in the cart and updates cached state */
+{
+int fourState = ( checked ? FOUR_STATE_CHECKED : FOUR_STATE_UNCHECKED );
+if (!enabled)
+    FOUR_STATE_DISABLE(fourState);
+
+char objName[SMALLBUF];
+char objVal[5];
+safef(objName, sizeof(objName), "%s_sel", subtrack->track);
+safef(objVal, sizeof(objVal), "%d", fourState);
+cartSetString(cart, objName, objVal);
+tdbExtrasAddOrUpdate(subtrack,FOUR_STATE_KEY,(void *)(long)fourState);
+}
+
+
 typedef struct _dimensions {
     int count;
     char**names;
@@ -6710,26 +6731,26 @@
     return b;
 }
 
-enum trackVisibility tdbVisLimitedByAncestry(struct cart *cart, struct trackDb *tdb, enum trackVisibility vis, boolean noSupers)
+enum trackVisibility tdbVisLimitedByAncestry(struct cart *cart, struct trackDb *tdb, boolean noSupers)
 // returns visibility limited by ancestry (or subtrack vis override)
 {
+enum trackVisibility vis = tdb->visibility;
+if (cart)
+    {
 char *cartVis = cartOptionalString(cart, tdb->track);
 if (cartVis != NULL)
     {
+        vis = hTvFromString(cartVis);
     if (tdbIsCompositeChild(tdb))
-        return hTvFromString(cartVis); // subtrackVis override
-    vis = tvMin(vis, hTvFromString(cartVis) );
+            return vis; // subtrackVis override
+        }
     }
-else
-    vis = tvMin(vis, tdb->visibility );
-
 if (vis == tvHide || tdb->parent == NULL)
     return vis;
 
 if (noSupers && tdbIsSuperTrack(tdb->parent))
     return vis;
-
-return tdbVisLimitedByAncestry(cart,tdb->parent,vis,noSupers);
+return tvMin(vis,tdbVisLimitedByAncestry(cart,tdb->parent,noSupers));
 }
 
 char *compositeViewControlNameFromTdb(struct trackDb *tdb)