JAL-2069 spike updated with latest (FeatureTypeSettings)
[jalview.git] / src / jalview / viewmodel / OverviewDimensionsHideHidden.java
index fe20195..c158ce7 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.viewmodel;
 
 import jalview.api.AlignmentColsCollectionI;
@@ -12,6 +32,12 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions
 {
   private ViewportRanges ranges;
 
+  private int xdiff; // when dragging, difference in alignment units between
+                     // start residue and original mouse click position
+
+  private int ydiff; // when dragging, difference in alignment units between
+                     // start sequence and original mouse click position
+
   public OverviewDimensionsHideHidden(ViewportRanges vpranges,
           boolean showAnnotationPanel)
   {
@@ -24,11 +50,36 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions
   public void updateViewportFromMouse(int mousex, int mousey,
           HiddenSequences hiddenSeqs, HiddenColumns hiddenCols)
   {
-    resetAlignmentDims();
-
     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, and update viewport as usual
+    int vpx = Math.round((float) mousex * alwidth / width);
+    int vpy = Math.round((float) mousey * alheight / sequencesHeight);
+
+    updateViewportFromTopLeft(vpx + xdiff, vpy + ydiff, hiddenSeqs,
+            hiddenCols);
+
+  }
+
+  @Override
+  protected void updateViewportFromTopLeft(int leftx, int topy,
+          HiddenSequences hiddenSeqs, HiddenColumns hiddenCols)
+  {
+    int xAsRes = leftx;
+    int yAsSeq = topy;
+    resetAlignmentDims();
+
     if (xAsRes < 0)
     {
       xAsRes = 0;
@@ -39,16 +90,10 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions
       yAsSeq = 0;
     }
 
-    //
-    // Convert x value to residue position
-    //
-
-    // need to determine where scrollCol should be, given x
-    // to do this also need to know width of viewport, and some hidden column
-    // correction
-
-    // convert x to residues - this is an absolute position
-    // int xAsRes = Math.round((float) x * alwidth / width);
+    if (ranges.isWrappedMode())
+    {
+      yAsSeq = 0; // sorry, no vertical scroll when wrapped
+    }
 
     // get viewport width in residues
     int vpwidth = ranges.getViewportWidth();
@@ -68,13 +113,7 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions
       }
     }
 
-
-    //
-    // Convert y value to sequence position
-    //
-
-    // convert y to residues
-    // int yAsSeq = Math.round((float) y * alheight / sequencesHeight);
+    // Determine where scrollRow should be, given visYAsSeq
 
     // get viewport height in sequences
     // add 1 because height includes both endSeq and startSeq
@@ -93,10 +132,7 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions
       }
     }
 
-    // update viewport
-    ranges.setStartRes(xAsRes);
-    ranges.setStartSeq(yAsSeq);
-
+    ranges.setStartResAndSeq(xAsRes, yAsSeq);
   }
 
   @Override
@@ -141,4 +177,18 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions
     int vpy = Math.round((float) mousey * alheight / sequencesHeight);
     return vpy - ranges.getViewportHeight() / 2;
   }
+
+  @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
+    // calculate difference between the positions
+    int vpx = Math.round((float) x * alwidth / width);
+    int vpy = Math.round((float) y * alheight / sequencesHeight);
+
+    xdiff = ranges.getStartRes() - vpx;
+    ydiff = ranges.getStartSeq() - vpy;
+  }
+
 }