src/hg/hgTracks/multiWig.c 1.2

1.2 2010/05/09 17:27:11 kent
Making calculations that all wigs below share same limits work better.
Index: src/hg/hgTracks/multiWig.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/multiWig.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -b -B -U 1000000 -r1.1 -r1.2
--- src/hg/hgTracks/multiWig.c	7 May 2010 22:30:14 -0000	1.1
+++ src/hg/hgTracks/multiWig.c	9 May 2010 17:27:11 -0000	1.2
@@ -1,67 +1,73 @@
 /* A container for multiple wiggles. */
 
 #include "common.h"
 #include "hash.h"
 #include "linefile.h"
 #include "jksql.h"
 #include "hdb.h"
 #include "hgTracks.h"
 #include "container.h"
 #include "wigCommon.h"
 
 static void multiWigDraw(struct track *tg, int seqStart, int seqEnd,
         struct hvGfx *hvg, int xOff, int yOff, int width, 
         MgFont *font, Color color, enum trackVisibility vis)
 /* Draw items in container. */
 {
 struct track *subtrack;
 for (subtrack = tg->subtracks; subtrack != NULL; subtrack = subtrack->next)
     {
     if (isSubtrackVisible(subtrack))
 	subtrack->drawItems(subtrack, seqStart, seqEnd, hvg, xOff, yOff, width, font, color, vis);
     }
 }
 
 static int multiWigTotalHeight(struct track *tg, enum trackVisibility vis)
 /* Return total height of container. */
 {
 int totalHeight =  wigTotalHeight(tg, vis);
 struct track *subtrack;
 for (subtrack = tg->subtracks; subtrack != NULL; subtrack = subtrack->next)
+    if (isSubtrackVisible(subtrack))
     subtrack->totalHeight(subtrack, vis);
 return totalHeight;
 }
 
 static boolean graphLimitsAllSame(struct track *trackList)
 /* Return TRUE if graphUpperLimit and graphLowerLimit same for all tracks. */
 {
-struct track *firstTrack = trackList;
-if (firstTrack == NULL)
-    return FALSE;
+struct track *firstTrack = NULL;
 struct track *track;
-for (track = firstTrack->next; track != NULL; track = track->next)
-    if (track->graphUpperLimit != firstTrack->graphUpperLimit 
+for (track = trackList; track != NULL; track = track->next)
+    {
+    if (isSubtrackVisible(track))
+        {
+	if (firstTrack == NULL)
+	    firstTrack = track;
+	else if (track->graphUpperLimit != firstTrack->graphUpperLimit 
       || track->graphLowerLimit != firstTrack->graphLowerLimit)
         return FALSE;
-return TRUE;
+	}
+    }
+return firstTrack != NULL;
 }
 
 static 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. */
 {
 boolean showNumbers = graphLimitsAllSame(tg->subtracks);
 wigLeftAxisLabels(tg, seqStart, seqEnd, hvg, xOff, yOff, width, height, withCenterLabels,
 	font, color, vis, tg->shortLabel, tg->subtracks->graphUpperLimit, 
 	tg->subtracks->graphLowerLimit, showNumbers);
 }
 
 void multiWigContainerMethods(struct track *track)
 /* Override general container methods for multiWig. */
 {
 track->totalHeight = multiWigTotalHeight;
 track->drawItems = multiWigDraw;
 track->drawLeftLabels = multiWigLeftLabels;
 }