e5a2eedb0c397971feac1ab56c8cbefe496ff309
kate
  Sun Jan 28 19:20:16 2018 -0800
Add track UI to change drawing mode (line, ellipse, curve). Fix to other chromosome labeling (still some probs left). refs #17512

diff --git src/hg/hgTracks/interactTrack.c src/hg/hgTracks/interactTrack.c
index 88e2563..451bafa 100644
--- src/hg/hgTracks/interactTrack.c
+++ src/hg/hgTracks/interactTrack.c
@@ -35,35 +35,36 @@
 //uglyf("IN color=%X", hvGfxFindColorIx(hvg, itemRgb.r, itemRgb.g, itemRgb.b));
 return hvGfxFindColorIx(hvg, itemRgb.r, itemRgb.g, itemRgb.b);
 }
 
 void interactLoadItems(struct track *tg)
 /* Load all interact items in region */
 {
 loadSimpleBedWithLoader(tg, (bedItemLoader)interactLoad);
 }
 
 static void interactDrawItems(struct track *tg, int seqStart, int seqEnd,
         struct hvGfx *hvg, int xOff, int yOff, int width, 
         MgFont *font, Color color, enum trackVisibility vis)
 /* Draw a list of interact structures. */
 {
-/* Choose drawing style by cart var (at least for now) */
 #define DRAW_LINE       0
 #define DRAW_CURVE      1
 #define DRAW_ELLIPSE    2
-char *drawMode = cartUsualString(cart, "interaction", "line");
+
+char *drawMode = cartUsualStringClosestToHome(cart, tg->tdb, FALSE,
+                                INTERACT_DRAW, INTERACT_DRAW_DEFAULT);
 int draw  = DRAW_LINE;
 if (sameString(drawMode, "curve"))
     draw = DRAW_CURVE;
 else if (sameString(drawMode, "ellipse"))
     draw = DRAW_ELLIPSE;
 
 double scale = scaleForWindow(width, seqStart, seqEnd);
 struct interact *inters = tg->items;
 //uglyf("Found %d items. ", slCount(inters));
 unsigned int maxWidth = 0;
 struct interact *inter;
 char buffer[1024];
 char itemBuf[2048];
 safef(buffer, sizeof buffer, "%s.%s", tg->tdb->track, INTERACT_MINSCORE);
 //double minScore = sqlDouble(cartUsualString(cart, buffer, INTERACT_DEFMINSCORE));
@@ -80,33 +81,32 @@
     if (width > maxWidth)
         maxWidth = width;
     }
 //uglyf("Max width is %d. ", maxWidth);
 for (inter=inters; inter; inter=inter->next)
     {
     if (sameString(inter->chrom1, inter->chrom2))
         nSame++;
     else
         {
         nOther++;
         if (!doOtherLabels)
             continue;
         int labelWidth = vgGetFontStringWidth(hvg->vg, font, inter->chrom2);
         // TODO: simplify now that center approach is abandoned
-        int s = (inter->chromEnd1 - inter->chromStart1 + .5) / 2;
-        int sx = ((s - seqStart) + .5) * scale + xOff; // x coord of center
-        int labelStart = sx - labelWidth/2;
+        int sx = ((inter->chromStart1 - seqStart) + .5) * scale + xOff; // x coord of center
+        int labelStart = (double)sx - labelWidth/2;
         int labelEnd = labelStart + labelWidth - 1;
         if (labelStart <= prevLabelEnd && 
                 !(labelStart == prevLabelStart && labelEnd == prevLabelEnd && 
                     sameString(inter->chrom1, prevLabel)))
             doOtherLabels = FALSE;
         prevLabelStart = labelStart;
         prevLabelEnd = labelEnd;
         prevLabel = inter->chrom2;
         }
     }
 int fontHeight = vgGetFontPixelHeight(hvg->vg, font);
 int otherHeight = (nOther) ? 3 * fontHeight : 0;
 int sameHeight = (nSame) ? tg->height - otherHeight: 0;
 
 // Draw items
@@ -183,32 +183,33 @@
         yPos = yOffOther + height;
 
         // draw the foot
         int footWidth = sFootWidth;
         hvGfxLine(hvg, sx - footWidth, yOffOther, sx + footWidth, yOffOther, color);
 
         // draw the vertical
         if (inter->strand[0] == '+')
             hvGfxLine(hvg, sx, yOffOther, sx, yPos, color);
         else
             hvGfxDottedLine(hvg, sx, yOffOther, sx, yPos, color);
         if (tg->visibility == tvFull)
             {
             mapBoxHgcOrHgGene(hvg, s, s, sx - 2, yOffOther, 4, height,
                                    tg->track, itemBuf, statusBuf, NULL, TRUE, NULL);
+            safef(buffer, sizeof buffer, "%s", inter->strand[0] == '+' ? 
+                                        inter->chrom2 : inter->chrom1);
 
-            safef(buffer, sizeof buffer, "%s", inter->chrom2);
             if (doOtherLabels)
                 {
                 hvGfxTextCentered(hvg, sx, yPos + 2, 4, 4, MG_BLUE, font, buffer);
                 int width = vgGetFontStringWidth(hvg->vg, font, buffer);
                 mapBoxHgcOrHgGene(hvg, s, s, sx - width/2, yPos, 
                                 width, fontHeight, tg->track, itemBuf, statusBuf, NULL, TRUE, NULL);
                 }
             }
         continue;
         }
 
     // draw same chromosome interaction
     boolean sOnScreen = (s >= seqStart) && (s < seqEnd);
     boolean eOnScreen = (e >= seqStart) && (e < seqEnd);
 //uglyf("<br>IN s=%d, e=%d, sOn: %d, eOn: %d. ", s, e, sOnScreen, eOnScreen);