b68693a185e6d68effc8d3371d509e0a0c7e7981
tdreszer
  Mon Sep 13 09:41:22 2010 -0700
Support conditional center labels for dense subtracks in both C and JS. Top dense subtrack in a set will show centerLabel of composite.
diff --git src/hg/hgTracks/imageV2.h src/hg/hgTracks/imageV2.h
index ec0337c..df655bb 100644
--- src/hg/hgTracks/imageV2.h
+++ src/hg/hgTracks/imageV2.h
@@ -199,7 +199,7 @@
 
 
 /////////////////////// Slices
-enum sliceType // IMAGEv2: currently 4
+enum sliceType
     {
     stUnknown=0,              // Invalid
     stData=1,                 // Data or track slice of an image
@@ -259,6 +259,14 @@
 
 
 /////////////////////// imgTracks
+enum centerLabelSeen
+    {
+    clUnknown=0,              // Invalid
+    clAlways=1,               // Default is always seen
+    clNowSeen=2,              // Conditionally and currently seen
+    clNotSeen=3               // Conditionally and currently unseen
+    };
+
 struct imgTrack // IMAGEv2: imageBox conatins list of displayed imageTracks
     {
     struct imgTrack *next;    // slList
@@ -269,7 +277,8 @@
     int  chromStart;          // Image start (absolute, not portal position)
     int  chromEnd;            // Image end (absolute, not portal position)
     boolean plusStrand;       // Image covers plus strand, not minus strand
-    boolean showCenterLabel;  // Initially display center label? TODO: Isn't this redundent with vis?
+    boolean hasCenterLabel;   // A track may have a center label but not show it
+    enum centerLabelSeen centerLabelSeen;  // Conditionally displayed center labels are always there but sometimes hidden
     boolean reorderable;      // Is this track reorderable (by drag and drop) ?
     int order;                // Image order: This keeps track of dragReorder
     enum trackVisibility vis; // Current visibility of track image
@@ -281,13 +290,16 @@
 #define IMG_ORDEREND  1000
 #define IMG_ORDER_VAR "imgOrd"
 
-struct imgTrack *imgTrackStart(struct trackDb *tdb,char *name,char *db,char *chrom,int chromStart,int chromEnd,boolean plusStrand,boolean showCenterLabel,enum trackVisibility vis,int order);
+struct imgTrack *imgTrackStart(struct trackDb *tdb,char *name,char *db,char *chrom,int chromStart,int chromEnd,boolean plusStrand,boolean hasCenterLabel,enum trackVisibility vis,int order);
 /* Starts an image track which will contain all image slices needed to render one track
    Must completed by adding slices with imgTrackAddSlice() */
 
-struct imgTrack *imgTrackUpdate(struct imgTrack *imgTrack,struct trackDb *tdb,char *name,char *db,char *chrom,int chromStart,int chromEnd,boolean plusStrand,boolean showCenterLabel,enum trackVisibility vis,int order);
+struct imgTrack *imgTrackUpdate(struct imgTrack *imgTrack,struct trackDb *tdb,char *name,char *db,char *chrom,int chromStart,int chromEnd,boolean plusStrand,boolean hasCenterLabel,enum trackVisibility vis,int order);
 /* Updates an already existing image track */
 
+#define imgTrackUpdateCenterLabelSeen(slice,seen) { (slice)->centerLabelSeen = (seen); }
+/* Center slices are occasionally unseen */
+
 int imgTrackOrderCmp(const void *va, const void *vb);
 /* Compare to sort on label. */
 
@@ -363,16 +375,16 @@
 struct image *imgBoxImageFind(struct imgBox *imgBox,char *gif);
 /* Finds a specific image already added to this imgBox */
 
-struct imgTrack *imgBoxTrackAdd(struct imgBox *imgBox,struct trackDb *tdb,char *name,enum trackVisibility vis,boolean showCenterLabel,int order);
+struct imgTrack *imgBoxTrackAdd(struct imgBox *imgBox,struct trackDb *tdb,char *name,enum trackVisibility vis,boolean hasCenterLabel,int order);
 /* Adds an imgTrack to an imgBox.  The imgTrack needs to be extended with imgTrackAddSlice() */
 
 struct imgTrack *imgBoxTrackFind(struct imgBox *imgBox,struct trackDb *tdb,char *name);
 /* Finds a specific imgTrack already added to this imgBox */
 
-struct imgTrack *imgBoxTrackFindOrAdd(struct imgBox *imgBox,struct trackDb *tdb,char *name,enum trackVisibility vis,boolean showCenterLabel,int order);
+struct imgTrack *imgBoxTrackFindOrAdd(struct imgBox *imgBox,struct trackDb *tdb,char *name,enum trackVisibility vis,boolean hasCenterLabel,int order);
 /* Find the imgTrack, or adds it if not found */
 
-struct imgTrack *imgBoxTrackUpdateOrAdd(struct imgBox *imgBox,struct trackDb *tdb,char *name,enum trackVisibility vis,boolean showCenterLabel,int order);
+struct imgTrack *imgBoxTrackUpdateOrAdd(struct imgBox *imgBox,struct trackDb *tdb,char *name,enum trackVisibility vis,boolean hasCenterLabel,int order);
 /* Updates the imgTrack, or adds it if not found */
 
 void imgBoxTracksNormalizeOrder(struct imgBox *imgBox);