src/hg/hgTracks/container.c 1.2

1.2 2010/05/07 22:30:14 kent
Separating out multiWigs into a separate module from container.
Index: src/hg/hgTracks/container.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/container.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -b -B -U 4 -r1.1 -r1.2
--- src/hg/hgTracks/container.c	7 May 2010 05:07:57 -0000	1.1
+++ src/hg/hgTracks/container.c	7 May 2010 22:30:14 -0000	1.2
@@ -7,61 +7,62 @@
 #include "linefile.h"
 #include "jksql.h"
 #include "hdb.h"
 #include "hgTracks.h"
+#include "container.h"
 
 
-static void containerLoad(struct track *tg)
+static void containerLoad(struct track *track)
 /* containerLoad - call load routine on all children. This one is generic for all containers. */
 {
 struct track *subtrack;
-for (subtrack = tg->subtracks; subtrack != NULL; subtrack = subtrack->next)
+for (subtrack = track->subtracks; subtrack != NULL; subtrack = subtrack->next)
     subtrack->loadItems(subtrack);
 }
 
-static void containerFree(struct track *tg)
+static void containerFree(struct track *track)
 /* containerFree - call free routine on all children. */
 {
 struct track *subtrack;
-for (subtrack = tg->subtracks; subtrack != NULL; subtrack = subtrack->next)
+for (subtrack = track->subtracks; subtrack != NULL; subtrack = subtrack->next)
     subtrack->freeItems(subtrack);
 }
 
-static void multiWigDraw(struct track *tg, int seqStart, int seqEnd,
+static void containerDraw(struct track *track, int seqStart, int seqEnd,
         struct hvGfx *hvg, int xOff, int yOff, int width, 
         MgFont *font, Color color, enum trackVisibility vis)
 /* Draw items in container. */
 {
-// hvGfxBox(hvg, xOff, yOff, width, tg->height, MG_BLUE);
 struct track *subtrack;
-for (subtrack = tg->subtracks; subtrack != NULL; subtrack = subtrack->next)
+int y = yOff;
+for (subtrack = track->subtracks; subtrack != NULL; subtrack = subtrack->next)
     {
     if (isSubtrackVisible(subtrack))
-	subtrack->drawItems(subtrack, seqStart, seqEnd, hvg, xOff, yOff, width, font, color, vis);
+	{
+	subtrack->drawItems(subtrack, seqStart, seqEnd, hvg, xOff, y, width, font, color, vis);
+	y += subtrack->totalHeight(subtrack, subtrack->limitedVis);
+	}
     }
 }
 
-static int multiWigTotalHeight(struct track *tg, enum trackVisibility vis)
+static int containerTotalHeight(struct track *track, enum trackVisibility vis)
 /* Return total height of container. */
 {
-int totalHeight =  wigTotalHeight(tg, vis);
+int totalHeight = 0;
 struct track *subtrack;
-for (subtrack = tg->subtracks; subtrack != NULL; subtrack = subtrack->next)
-    subtrack->totalHeight(subtrack, vis);
+for (subtrack = track->subtracks; subtrack != NULL; subtrack = subtrack->next)
+    {
+    if (isSubtrackVisible(subtrack))
+	{
+	totalHeight += subtrack->totalHeight(subtrack, vis);
+	track->lineHeight = subtrack->lineHeight;
+	track->heightPer = subtrack->heightPer;
+	}
+    }
+track->height = totalHeight;
 return totalHeight;
 }
 
-void multiWigLeftLabels(struct track *tg, int seqStart, int seqEnd,
-	struct hvGfx *hvg, int xOff, int yOff, int width, int height,
-	boolean withCenterLabels, MgFont *font, Color color,
-	enum trackVisibility vis)
-/* Draw left labels - by deferring to first subtrack. */
-{
-if (tg->subtracks)
-    tg->drawLeftLabels(tg->subtracks, seqStart, seqEnd, hvg, xOff, yOff, 
-    	width, height, withCenterLabels, font, color, vis);
-}
-
 void makeContainerTrack(struct track *track, struct trackDb *tdb)
 /* Construct track subtrack list from trackDb entry for container tracks. */
 {
 /* Wrap tracks around child tdb's, maintaining same heirarchy as in tdb. */
@@ -77,19 +78,23 @@
 	makeContainerTrack(subtrack, subtdb);
     }
 slSort(&track->subtracks, trackPriCmp);
 
-/* Set methods shared by all containers. */
+/* Set methods that may be shared by all containers. */
 track->loadItems = containerLoad;
 track->freeItems = containerFree;
+track->drawItems = containerDraw;
+track->totalHeight = containerTotalHeight;
 
 /* Set methods specific to containers. */
 char *containerType = trackDbSetting(tdb, "container");
 if (sameString(containerType, "multiWig"))
     {
-    track->totalHeight = multiWigTotalHeight;
-    track->drawItems = multiWigDraw;
-    track->drawLeftLabels = multiWigLeftLabels;
+    multiWigContainerMethods(track);
+    }
+else if (sameString(containerType, "folder"))
+    {
+    /* Folder's just use the default methods. */
     }
 else
     errAbort("unknown container type %s in trackDb for %s", containerType, tdb->tableName);
 }