src/hg/hgTracks/simpleTracks.c 1.101

1.101 2009/09/14 15:30:12 tdreszer
Use imgTrackAddMapItem in case map items need to be split between slices. Experiment with making short map items for full bed.
Index: src/hg/hgTracks/simpleTracks.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/simpleTracks.c,v
retrieving revision 1.100
retrieving revision 1.101
diff -b -B -U 4 -r1.100 -r1.101
--- src/hg/hgTracks/simpleTracks.c	4 Sep 2009 18:02:33 -0000	1.100
+++ src/hg/hgTracks/simpleTracks.c	14 Sep 2009 15:30:12 -0000	1.101
@@ -572,14 +572,16 @@
     }
 #ifdef IMAGEv2_UI
 if(theImgBox && curMap)
     {
-    // FIXME: The problem with leftLabel toggle appears to be a single map area meant to cover the whole leftLabel and data!
-    // eg: COORDS="11,395,800,405" in non IMAGEv2 image covers everything left of button through to right edge of image
-    // Solution?  Either drop the toggle on side button, or make separate map areas.
     char link[512];
     safef(link,sizeof(link),"%s?%s",hgTracksName(), ui->string); // NOTE: position removed due to portal
-    mapSetItemAdd(curMap,link,(char *)(message != NULL?message:NULL),x, y, x+width, y+height);
+    //#ifdef IMAGEv2_SHORT_MAPITEMS
+    //    if(x < insideX && x+width > insideX)
+    //        warn("mapBoxReinvoke(%s) map item spanning slices. LX:%d TY:%d RX:%d BY:%d  link:[%s]",hStringFromTv(toggleGroup->visibility),x, y, x+width, y+height, link);
+    //#endif//def IMAGEv2_SHORT_MAPITEMS
+    imgTrackAddMapItem(curImgTrack,link,(char *)(message != NULL?message:NULL),x, y, x+width, y+height);
+    //mapSetItemAdd(curMap,link,(char *)(message != NULL?message:NULL),x, y, x+width, y+height);
     }
 else
 #endif//def IMAGEv2_UI
     {
@@ -661,9 +663,14 @@
             }
         if (extra != NULL)
             safef(link+strlen(link),sizeof(link)-strlen(link),"&%s", extra);
         // Add map item to currnent map (TODO: pass in map)
-        mapSetItemAdd(curMap,link,(char *)(statusLine!=NULL?statusLine:NULL),x, y, xEnd, yEnd);
+        #ifdef IMAGEv2_SHORT_MAPITEMS
+            if(x < insideX && xEnd > insideX)
+                warn("mapBoxHgcOrHgGene(%s) map item spanning slices. LX:%d TY:%d RX:%d BY:%d  link:[%s]",track,x, y, xEnd, yEnd, link);
+        #endif//def IMAGEv2_SHORT_MAPITEMS
+        imgTrackAddMapItem(curImgTrack,link,(char *)(statusLine!=NULL?statusLine:NULL),x, y, xEnd, yEnd);
+        //mapSetItemAdd(curMap,link,(char *)(statusLine!=NULL?statusLine:NULL),x, y, xEnd, yEnd);
         }
     else
     #endif//def IMAGEv2_UI
         {
@@ -2797,8 +2804,15 @@
 	geneMapBoxW -= buttonW;
 	}
     else if (rButton)
 	geneMapBoxW -= buttonW;
+#ifdef IMAGEv2_SHORT_MAPITEMS
+    if(x2 > 0)
+        {
+        geneMapBoxX = textX;
+        geneMapBoxW = x2-geneMapBoxX;
+        }
+#endif//def IMAGEv2_SHORT_MAPITEMS
     tg->mapItem(tg, hvg, item, tg->itemName(tg, item), tg->mapItemName(tg, item),
 		s, e, geneMapBoxX, y, geneMapBoxW, heightPer);
     }
 }
@@ -2980,10 +2994,23 @@
         {
         /* The doMapItems will make the mapboxes normally but make */
         /* them here if we're drawing nextItem buttons. */
         if (nextItemCompatible(tg))
+#ifdef IMAGEv2_SHORT_MAPITEMS
+            {
+            // Convert start/end coordinates to pix
+            int s = tg->itemStart(tg, item);
+            int e = tg->itemEnd(tg, item);
+            int sClp = (s < winStart) ? winStart : s;
+            int eClp = (e > winEnd)   ? winEnd   : e;
+            int x1 = round((sClp - winStart)*scale) + xOff;
+            int x2 = round((eClp - winStart)*scale) + xOff;
+            genericDrawNextItemStuff(tg, hvg, vis, item, x2, x1, y, tg->heightPer, FALSE,color);
+            }
+#else//ifndef IMAGEv2_SHORT_MAPITEMS
             genericDrawNextItemStuff(tg, hvg, vis, item, -1, -1, y, tg->heightPer, FALSE,
                                      color);
+#endif//ndef IMAGEv2_SHORT_MAPITEMS
         y += tg->lineHeight;
         }
     }
 }