200e7d162f72dff119e017c4dfda60b34df02103
tdreszer
  Mon Sep 27 15:22:14 2010 -0700
Added support for tdbIsContainer() and tdbIsContainerChild()
diff --git src/hg/lib/hdb.c src/hg/lib/hdb.c
index 45d0ebe..86b6484 100644
--- src/hg/lib/hdb.c
+++ src/hg/lib/hdb.c
@@ -3457,25 +3457,33 @@
     }
 }
 
-static void trackDbCompositeMarkup(struct trackDb *parent, struct trackDb *tdbList)
+static void trackDbContainerMarkup(struct trackDb *parent, struct trackDb *tdbList)
 /* Set up things so that the COMPOSITE_NODE and related macros work on tdbList. */
 {
+if (parent != NULL)
+    {
+    if (trackDbLocalSetting(parent, "compositeTrack"))
+        tdbMarkAsComposite(parent);
+    if (trackDbLocalSetting(parent, "container"))
+        tdbMarkAsContainer(parent);
+    }
 struct trackDb *tdb;
 for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
     {
     if (parent != NULL)
         {
-	if (trackDbSetting(parent, "compositeTrack"))
+        if (tdbIsContainer(parent))
+            tdbMarkAsContainerChild(tdb);
+
+        if (tdbIsComposite(parent) || (parent->parent != NULL && tdbIsComposite(parent->parent)))
 	    {
-            if (trackDbLocalSetting(parent, "compositeTrack"))
-	       tdbMarkAsComposite(parent);
             if (tdb->subtracks == NULL)
 	       tdbMarkAsCompositeChild(tdb);
             else
                tdbMarkAsCompositeView(tdb);
 	    }
 	}
-    trackDbCompositeMarkup(tdb, tdb->subtracks);
+    trackDbContainerMarkup(tdb, tdb->subtracks);
     }
 }
 
@@ -3556,7 +3564,7 @@
 struct trackDb *tdbList = loadTrackDb(db, NULL);
 tdbList = trackDbLinkUpGenerations(tdbList);
 tdbList = pruneEmpties(tdbList, db, chrom, hIsPrivateHost(), 0);
-trackDbCompositeMarkup(NULL, tdbList);
+trackDbContainerMarkup(NULL, tdbList);
 rInheritFields(tdbList);
 slSort(&tdbList, trackDbCmp);
 return tdbList;