JAL-2611 First pass, not thrilled with hidden column behaviour
[jalview.git] / src / jalview / viewmodel / OverviewDimensionsShowHidden.java
index 1bd96ab..af95c45 100644 (file)
@@ -69,6 +69,33 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions
     int xAsRes = getLeftXFromCentreX(mousex, hiddenCols);
     int yAsSeq = getTopYFromCentreY(mousey, hiddenSeqs);
 
+    updateViewportFromTopLeft(xAsRes, yAsSeq, hiddenSeqs, hiddenCols);
+  }
+
+  @Override
+  public void adjustViewportFromMouse(int mousex, int mousey,
+          HiddenSequences hiddenSeqs, HiddenColumns hiddenCols)
+  {
+    // calculate translation in pixel terms:
+    // get mouse location in viewport coords, add translation in viewport
+    // coords,
+    // convert back to pixel coords
+    int vpx = Math.round((float) mousex * alwidth / width);
+    int visXAsRes = hiddenCols.findColumnPosition(vpx);
+
+    int vpy = Math.round((float) mousey * alheight / sequencesHeight);
+    int visYAsRes = hiddenSeqs.findIndexWithoutHiddenSeqs(vpy);
+
+    updateViewportFromTopLeft(visXAsRes + transX, visYAsRes + transY,
+            hiddenSeqs,
+            hiddenCols);
+  }
+
+  @Override
+  protected void updateViewportFromTopLeft(int xAsRes, int yAsSeq,
+          HiddenSequences hiddenSeqs, HiddenColumns hiddenCols)
+  {
+
     resetAlignmentDims();
 
     if (xAsRes < 0)
@@ -174,6 +201,7 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions
   public void setBoxPosition(HiddenSequences hiddenSeqs,
           HiddenColumns hiddenCols)
   {
+
     // work with absolute values of startRes and endRes
     int startRes = hiddenCols.adjustForHiddenColumns(ranges.getStartRes());
     int endRes = hiddenCols.adjustForHiddenColumns(ranges.getEndRes());
@@ -222,4 +250,22 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions
     int vpy = Math.round((float) mousey * alheight / sequencesHeight);
     return hidden.subtractVisibleRows(ranges.getViewportHeight() / 2, vpy);
   }
+
+  @Override
+  public void setDragPoint(int x, int y, HiddenSequences hiddenSeqs,
+          HiddenColumns hiddenCols)
+  {
+    {
+      // get alignment position of x and box (can get directly from vpranges) and calc difference
+      int vpx = Math.round((float) x * alwidth / width);
+      int visXAsRes = hiddenCols.findColumnPosition(vpx);
+      
+      int vpy = Math.round((float) y * alheight / sequencesHeight);
+      int visYAsRes = hiddenSeqs.findIndexWithoutHiddenSeqs(vpy);
+
+      transX = ranges.getStartRes() - visXAsRes;
+      transY = ranges.getStartSeq() - visYAsRes;
+    }
+  }
+
 }