f63a718960b6a66276d579e7cd3fbb107f2cfd78
tdreszer
  Tue Nov 16 16:37:13 2010 -0800
Removed obsolete ifdef for SUBTRACKS_HAVE_VIS. Streamlined some composite vis code. Added support for remote tracks being rendered by AJAX callback.  Currently ifdefed out.
diff --git src/hg/hgTracks/imageV2.c src/hg/hgTracks/imageV2.c
index 12edee9..c5ba95f 100644
--- src/hg/hgTracks/imageV2.c
+++ src/hg/hgTracks/imageV2.c
@@ -842,30 +842,36 @@
     }
 else
     {
     imgTrack->reorderable = TRUE;
     if(order == IMG_ANYORDER)
         {
         if(imgTrack->order <= 0)
             imgTrack->order = ++lastOrder;
         }
     else if(imgTrack->order != order)
         imgTrack->order = order;
     }
 return imgTrack;
 }
 
+void imgTrackMarkForAjaxRetrieval(struct imgTrack *imgTrack,boolean ajaxRetrieval)
+/* Updates the imgTrack to trigger an ajax callback from the html client to get this track */
+{
+imgTrack->ajaxRetrieval = ajaxRetrieval;
+}
+
 int imgTrackOrderCmp(const void *va, const void *vb)
 /* Compare to sort on imgTrack->order */
 {
 const struct imgTrack *a = *((struct imgTrack **)va);
 const struct imgTrack *b = *((struct imgTrack **)vb);
 return (a->order - b->order);
 }
 
 struct imgSlice *imgTrackSliceAdd(struct imgTrack *imgTrack,enum sliceType type, struct image *img,char *title,int width,int height,int offsetX,int offsetY)
 /* Adds slices to an image track.  Expected are types: stData, stButton, stSide and stCenter */
 {
 struct imgSlice *slice = sliceCreate(type,img,title,width,height,offsetX,offsetY);
 if(slice)
     slAddHead(&(imgTrack->slices),slice);
 return imgTrack->slices;
@@ -978,30 +984,32 @@
     }
 }
 
 static void imgTrackShow(struct dyString **dy,struct imgTrack *imgTrack,int indent)
 /* show the imgTrack */
 {
 if(imgTrack)
     {
     struct dyString *myDy = addIndent(dy,indent);
     dyStringPrintf(myDy,"imgTrack: name:%s tdb:%s",
             (imgTrack->name?imgTrack->name:""),(imgTrack->tdb && imgTrack->tdb->track?imgTrack->tdb->track:""));
     if(imgTrack->hasCenterLabel)
         dyStringPrintf(myDy," centerLabel:%s",centerLabelSeenToString(imgTrack->centerLabelSeen));
     if(imgTrack->reorderable)
         dyStringPrintf(myDy," reorderable");
+    if(imgTrack->ajaxRetrieval)
+        dyStringPrintf(myDy," ajaxRetrieval");
     dyStringPrintf(myDy," order:%d vis:%s",imgTrack->order,hStringFromTv(imgTrack->vis));
     if(dy == NULL)
         warn("%s",dyStringCannibalize(&myDy));
 
     indent++;
     struct imgSlice *slice = imgTrack->slices;
     for(; slice != NULL; slice = slice->next )
         sliceShow(dy,slice,indent);
 
     if(dy != NULL)
         *dy = myDy;
     }
 }
 
 boolean imgTrackIsComplete(struct imgTrack *imgTrack,boolean verbose)
@@ -1768,33 +1776,34 @@
 char *newLine = NEWLINE_TO_USE(cgiClientBrowser(NULL,NULL,NULL));
 struct imgTrack *imgTrack = imgBox->imgTracks;
 for(;imgTrack!=NULL;imgTrack=imgTrack->next)
     {
     char *trackName = (imgTrack->name != NULL ? imgTrack->name : imgTrack->tdb->track );
 #if defined(CONTEXT_MENU) || defined(TRACK_SEARCH)
     if (!trackImgOnly)
         {
         struct track *track = hashFindVal(trackHash, trackName);
         if(track)
             jsonTdbSettingsBuild(&jsonTdbVars, track);
         }
 #endif
     //if(verbose && imgTrack->order == 3)
     //    imgTrackShow(NULL,imgTrack,0);
-    hPrintf("<TR id='tr_%s' abbr='%d' class='imgOrd%s%s'>\n",trackName,imgTrack->order,
+    hPrintf("<TR id='tr_%s' abbr='%d' class='imgOrd%s%s%s'>\n",trackName,imgTrack->order,
         (imgTrack->reorderable?" trDraggable":" nodrop nodrag"),
-        (imgTrack->centerLabelSeen != clAlways?" clOpt":"") );
+        (imgTrack->centerLabelSeen != clAlways?" clOpt":""),
+        (imgTrack->ajaxRetrieval ?" mustRetrieve":""));
 
     if(imgBox->showSideLabel && imgBox->plusStrand)
         {
         // button
         safef(name, sizeof(name), "btn_%s", trackName);
         hPrintf(" <TD id='td_%s'%s>\n",name,(imgTrack->reorderable?" class='dragHandle'":""));
         sliceAndMapDraw(imgBox,imgTrack,stButton,name,FALSE);
         hPrintf("</TD>\n");
         // leftLabel
         safef(name,sizeof(name),"side_%s",trackName);
         if (imgTrack->reorderable)
             hPrintf(" <TD id='td_%s' class='dragHandle' title='%s%sdrag to reorder'>\n",name,htmlEncode(imgTrack->tdb->longLabel),newLine);
         else
             hPrintf(" <TD id='td_%s'>\n",name);
         sliceAndMapDraw(imgBox,imgTrack,stSide,name,FALSE);