8a75f8b98316f72a4539944c73e840126411a426
kate
  Thu Sep 13 12:49:04 2018 -0700
Initial work for pack mode display of interactions as linked features.  Doesn't recognize pack mode, and doesn't display as linked features (just as bed3). refs #21917

diff --git src/hg/hgTracks/interactTrack.c src/hg/hgTracks/interactTrack.c
index ce8ee7a..f0ce9e1 100644
--- src/hg/hgTracks/interactTrack.c
+++ src/hg/hgTracks/interactTrack.c
@@ -99,30 +99,45 @@
             {
             if (!(sOnScreen || tOnScreen))
                 continue;
             }
         }
     slAddHead(&filteredItems, inter);
     }
 
 slReverse(&filteredItems);
 // consider sorting by score/value so highest scored items draw last (on top)
 if (slCount(filteredItems) != count)
     labelTrackAsFiltered(tg);
 tg->items = filteredItems;
 }
 
+void interactLoadBedItems(struct track *tg)
+/* Load interact items as linked features */
+{
+interactLoadItems(tg);
+struct interact *inters = tg->items, *inter;
+struct bed *beds = NULL, *bed;
+for (inter = inters; inter; inter = inter->next)
+    {
+    bed = interactToBed(inter);
+    slAddHead(&beds, bed);
+    }
+slReverse(&beds);
+tg->items = beds;
+}
+
 char *interactMouseover(struct interact *inter, char *otherChrom)
 /* Make mouseover text for an interaction */
 {
 struct dyString *ds = dyStringNew(0);
 if (isEmptyTextField(inter->name))
     {
     if (!isEmptyTextField(inter->exp))
         dyStringPrintf(ds, "%s ", inter->exp);
     if (otherChrom)
         dyStringPrintf(ds, "%s", otherChrom);
     else
         {
         char buf[4096];
         sprintLongWithCommas(buf, inter->chromEnd - inter->chromStart);
         dyStringPrintf(ds, "%s bp", buf);
@@ -582,28 +597,38 @@
         }
     }
 }
 
 void interactDrawLeftLabels(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)
 /* Override default */
 {
 }
 
 void interactMethods(struct track *tg)
 /* Interact track type methods */
 {
+tg->canPack = TRUE;
+if (tg->visibility == tvPack)
+//if (1)
+    {
+    bedMethods(tg);
+    tg->loadItems = interactLoadBedItems;
+    }
+else
+    {
     tg->loadItems = interactLoadItems;
     tg->drawItems = interactDrawItems;
     tg->drawLeftLabels = interactDrawLeftLabels;
     tg->totalHeight = interactTotalHeight;
     tg->mapsSelf = TRUE;
     }
+}
 
 void interactCtMethods(struct track *tg)
 /* Interact track methods for custom track */
 {
 interactMethods(tg);
 }