JAL-2388 Working hidden regions hide/show in desktop
[jalview.git] / test / jalview / viewmodel / OverviewDimensionsTest.java
index 1ea07ea..e5a8c86 100644 (file)
@@ -26,6 +26,7 @@ import jalview.analysis.AlignmentGenerator;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceCollectionI;
 import jalview.datamodel.SequenceGroup;
@@ -42,7 +43,7 @@ import org.testng.annotations.Test;
 public class OverviewDimensionsTest
 {
   AlignmentI al;
-  OverviewDimensions od;
+  OverviewDimensionsWithHidden od;
 
   // cached widths and heights
   int boxWidth;
@@ -52,11 +53,11 @@ public class OverviewDimensionsTest
   int alheight;
   int alwidth;
 
-  ViewportPositionProps posProps;
+  ViewportRanges vpranges;
 
   Hashtable<SequenceI, SequenceCollectionI> hiddenRepSequences = new Hashtable<SequenceI, SequenceCollectionI>();
 
-  ColumnSelection hiddenCols = new ColumnSelection();
+  HiddenColumns hiddenCols = new HiddenColumns();
 
   @BeforeClass(alwaysRun = true)
   public void setUpJvOptionPane()
@@ -73,35 +74,36 @@ public class OverviewDimensionsTest
     {
       al.getHiddenSequences().showAll(hiddenRepSequences);
     }
-    hiddenCols.revealAllHiddenColumns();
+    ColumnSelection colsel = new ColumnSelection();
+    hiddenCols.revealAllHiddenColumns(colsel);
     
-    posProps = new ViewportPositionProps(al);
-    posProps.setStartRes(0);
-    posProps.setEndRes(62);
-    posProps.setStartSeq(0);
-    posProps.setEndSeq(17);
+    vpranges = new ViewportRanges(al);
+    vpranges.setStartRes(0);
+    vpranges.setEndRes(62);
+    vpranges.setStartSeq(0);
+    vpranges.setEndSeq(17);
 
-    viewHeight = posProps.getEndSeq() - posProps.getStartSeq() + 1;
-    viewWidth = posProps.getEndRes() - posProps.getStartRes() + 1;
+    viewHeight = vpranges.getEndSeq() - vpranges.getStartSeq() + 1;
+    viewWidth = vpranges.getEndRes() - vpranges.getStartRes() + 1;
 
-    ColumnSelection hiddenCols = new ColumnSelection();
+    HiddenColumns hiddenCols = new HiddenColumns();
 
-    od = new OverviewDimensions(posProps, true);
+    od = new OverviewDimensionsWithHidden(vpranges, true);
     // Initial box sizing - default path through code
-    od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps);
+    od.setBoxPosition(al.getHiddenSequences(), hiddenCols);
 
     mouseClick(od, 0, 0);
     moveViewport(0, 0);
 
     // calculate before hidden columns so we get absolute values
-    alheight = posProps.getAbsoluteAlignmentHeight();
-    alwidth = posProps.getAbsoluteAlignmentWidth();
+    alheight = vpranges.getAbsoluteAlignmentHeight();
+    alwidth = vpranges.getAbsoluteAlignmentWidth();
 
-    boxWidth = Math.round((float) (posProps.getEndRes()
-            - posProps.getStartRes() + 1)
+    boxWidth = Math.round((float) (vpranges.getEndRes()
+            - vpranges.getStartRes() + 1)
             * od.getWidth() / alwidth);
-    boxHeight = Math.round((float) (posProps.getEndSeq()
-            - posProps.getStartSeq() + 1)
+    boxHeight = Math.round((float) (vpranges.getEndSeq()
+            - vpranges.getStartSeq() + 1)
             * od.getSequencesHeight() / alheight);
   }
 
@@ -134,9 +136,9 @@ public class OverviewDimensionsTest
     // test for alignment with width > height
     SequenceI[] seqs1 = new SequenceI[] { seqa, seqb };
     Alignment al1 = new Alignment(seqs1);
-    ViewportPositionProps props = new ViewportPositionProps(al1);
+    ViewportRanges props = new ViewportRanges(al1);
 
-    OverviewDimensions od = new OverviewDimensions(props, true);
+    OverviewDimensions od = new OverviewDimensionsWithHidden(props, true);
     int scaledHeight = 267;
     assertEquals(od.getGraphHeight(), defaultGraphHeight);
     assertEquals(od.getSequencesHeight(), scaledHeight);
@@ -146,9 +148,9 @@ public class OverviewDimensionsTest
     // test for alignment with width < height
     SequenceI[] seqs2 = new SequenceI[] { seqa, seqb, seqc, seqd };
     Alignment al2 = new Alignment(seqs2);
-    props = new ViewportPositionProps(al2);
+    props = new ViewportRanges(al2);
 
-    od = new OverviewDimensions(props, true);
+    od = new OverviewDimensionsWithHidden(props, true);
     int scaledWidth = 300;
     assertEquals(od.getGraphHeight(), defaultGraphHeight);
     assertEquals(od.getSequencesHeight(), maxSeqHeight);
@@ -159,9 +161,9 @@ public class OverviewDimensionsTest
     // min value
     SequenceI[] seqs3 = new SequenceI[] { seqe };
     Alignment al3 = new Alignment(seqs3);
-    props = new ViewportPositionProps(al3);
+    props = new ViewportRanges(al3);
 
-    od = new OverviewDimensions(props, true);
+    od = new OverviewDimensionsWithHidden(props, true);
     assertEquals(od.getGraphHeight(), defaultGraphHeight);
     assertEquals(od.getSequencesHeight(), minSeqHeight);
     assertEquals(od.getWidth(), maxWidth);
@@ -171,18 +173,18 @@ public class OverviewDimensionsTest
     SequenceI[] seqs4 = new SequenceI[] { seqa, seqb, seqc, seqd, seqa,
         seqb, seqc, seqd, seqa, seqb, seqc, seqd, seqa, seqb, seqc, seqd };
     Alignment al4 = new Alignment(seqs4);
-    props = new ViewportPositionProps(al4);
+    props = new ViewportRanges(al4);
 
-    od = new OverviewDimensions(props, true);
+    od = new OverviewDimensionsWithHidden(props, true);
     assertEquals(od.getGraphHeight(), defaultGraphHeight);
     assertEquals(od.getSequencesHeight(), maxSeqHeight);
     assertEquals(od.getWidth(), minWidth);
     assertEquals(od.getHeight(), maxSeqHeight + defaultGraphHeight);
 
     Alignment al5 = new Alignment(seqs4);
-    props = new ViewportPositionProps(al5);
+    props = new ViewportRanges(al5);
 
-    od = new OverviewDimensions(props, false);
+    od = new OverviewDimensionsWithHidden(props, false);
     assertEquals(od.getGraphHeight(), 0);
     assertEquals(od.getSequencesHeight(), maxSeqHeight);
     assertEquals(od.getWidth(), minWidth);
@@ -197,8 +199,7 @@ public class OverviewDimensionsTest
   @Test(groups = { "Functional" })
   public void testSetBoxFromMouseClick()
   {
-    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols,
-            posProps);
+    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols);
     assertEquals(od.getBoxX(), 0);
     assertEquals(od.getBoxY(), 0);
     assertEquals(od.getBoxWidth(), boxWidth);
@@ -296,8 +297,7 @@ public class OverviewDimensionsTest
   @Test(groups = { "Functional" })
   public void testFromMouseWithHiddenColsAtStart()
   {
-    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols,
-            posProps);
+    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols);
     assertEquals(od.getBoxX(), 0);
     assertEquals(od.getBoxY(), 0);
     assertEquals(od.getBoxWidth(), boxWidth);
@@ -309,7 +309,7 @@ public class OverviewDimensionsTest
     int lastHiddenCol = 30;
     hiddenCols.hideColumns(0, lastHiddenCol);
 
-    od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps);
+    od.setBoxPosition(al.getHiddenSequences(), hiddenCols);
     assertEquals(od.getBoxX(),
             Math.round((float) (lastHiddenCol + 1) * od.getWidth()
                     / alwidth));
@@ -361,8 +361,7 @@ public class OverviewDimensionsTest
   @Test(groups = { "Functional" })
   public void testFromMouseWithHiddenColsInMiddle()
   {
-    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols,
-            posProps);
+    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols);
     assertEquals(od.getBoxX(), 0);
     assertEquals(od.getBoxY(), 0);
     assertEquals(od.getBoxWidth(), boxWidth);
@@ -374,7 +373,7 @@ public class OverviewDimensionsTest
     int lastHidden = 73;
     hiddenCols.hideColumns(firstHidden, lastHidden);
 
-    od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps);
+    od.setBoxPosition(al.getHiddenSequences(), hiddenCols);
     assertEquals(od.getBoxX(), 0);
     assertEquals(od.getBoxY(), 0);
     assertEquals(od.getBoxWidth(), boxWidth);
@@ -463,8 +462,7 @@ public class OverviewDimensionsTest
   @Test(groups = { "Functional" })
   public void testFromMouseWithHiddenColsAtEnd()
   {
-    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols,
-            posProps);
+    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols);
     assertEquals(od.getBoxX(), 0);
     assertEquals(od.getBoxY(), 0);
     assertEquals(od.getBoxWidth(), boxWidth);
@@ -475,7 +473,7 @@ public class OverviewDimensionsTest
     int firstHidden = 140;
     int lastHidden = 164;
     hiddenCols.hideColumns(firstHidden, lastHidden);
-    od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps);
+    od.setBoxPosition(al.getHiddenSequences(), hiddenCols);
     assertEquals(od.getBoxX(), 0);
     assertEquals(od.getBoxY(), 0);
     assertEquals(od.getBoxWidth(), boxWidth);
@@ -677,13 +675,14 @@ public class OverviewDimensionsTest
     assertEquals(od.getBoxHeight(), boxHeight);
 
     // move viewport to hidden columns
-    moveViewport(102, 0);
+    // viewport can't actually extend into hidden cols,
+    // so move to the far right edge of the viewport
+    moveViewport(firstHidden - viewWidth, 0);
     assertEquals(od.getBoxX(),
-            Math.round((float) 102 * od.getWidth() / alwidth));
+            Math.round((float) (firstHidden - viewWidth)
+                    * od.getWidth() / alwidth));
     assertEquals(od.getBoxY(), 0);
-    assertEquals(od.getBoxWidth(), boxWidth
-                    + Math.round((float) (lastHidden - firstHidden + 1)
-                            * od.getWidth() / alwidth));
+    assertEquals(od.getBoxWidth(), boxWidth);
     assertEquals(od.getBoxHeight(), boxHeight);
   }
 
@@ -789,8 +788,7 @@ public class OverviewDimensionsTest
   @Test(groups = { "Functional" })
   public void testFromMouseWithHiddenRowsAtStart()
   {
-    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols,
-            posProps);
+    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols);
     assertEquals(od.getBoxX(), 0);
     assertEquals(od.getBoxY(), 0);
     assertEquals(od.getBoxHeight(), boxHeight);
@@ -803,7 +801,7 @@ public class OverviewDimensionsTest
     int lastHiddenRow = 30;
     hideSequences(0, lastHiddenRow);
 
-    od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps);
+    od.setBoxPosition(al.getHiddenSequences(), hiddenCols);
     assertEquals(od.getBoxX(), 0);
     assertEquals(od.getBoxY(),
             Math.round((float) (lastHiddenRow + 1)
@@ -836,8 +834,7 @@ public class OverviewDimensionsTest
   @Test(groups = { "Functional" })
   public void testFromMouseWithHiddenRowsInMiddle()
   {
-    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols,
-            posProps);
+    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols);
 
     assertEquals(od.getBoxX(), 0);
     assertEquals(od.getBoxY(), 0);
@@ -852,7 +849,7 @@ public class OverviewDimensionsTest
     int lastHiddenRow = 54;
     hideSequences(firstHiddenRow, lastHiddenRow);
 
-    od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps);
+    od.setBoxPosition(al.getHiddenSequences(), hiddenCols);
 
     assertEquals(od.getBoxX(), 0);
     assertEquals(od.getBoxY(), 0);
@@ -895,8 +892,7 @@ public class OverviewDimensionsTest
   @Test(groups = { "Functional" })
   public void testFromMouseWithHiddenRowsAtEnd()
   {
-    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols,
-            posProps);
+    od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols);
     assertEquals(od.getBoxX(), 0);
     assertEquals(od.getBoxY(), 0);
     assertEquals(od.getBoxWidth(), boxWidth);
@@ -910,7 +906,7 @@ public class OverviewDimensionsTest
     int lastHidden = 524;
     hideSequences(firstHidden, lastHidden);
 
-    od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps);
+    od.setBoxPosition(al.getHiddenSequences(), hiddenCols);
     assertEquals(od.getBoxX(), 0);
     assertEquals(od.getBoxY(), 0);
     assertEquals(od.getBoxWidth(), boxWidth);
@@ -957,9 +953,9 @@ public class OverviewDimensionsTest
    */
   private void moveViewportH(int startRes)
   {
-    posProps.setStartRes(startRes);
-    posProps.setEndRes(startRes + viewWidth - 1);
-    od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps);
+    vpranges.setStartRes(startRes);
+    vpranges.setEndRes(startRes + viewWidth - 1);
+    od.setBoxPosition(al.getHiddenSequences(), hiddenCols);
   }
 
   /*
@@ -967,9 +963,9 @@ public class OverviewDimensionsTest
    */
   private void moveViewportV(int startSeq)
   {
-    posProps.setStartSeq(startSeq);
-    posProps.setEndSeq(startSeq + viewHeight - 1);
-    od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps);
+    vpranges.setStartSeq(startSeq);
+    vpranges.setEndSeq(startSeq + viewHeight - 1);
+    od.setBoxPosition(al.getHiddenSequences(), hiddenCols);
   }
 
   /*
@@ -977,30 +973,29 @@ public class OverviewDimensionsTest
    */
   private void moveViewport(int startRes, int startSeq)
   {
-    posProps.setStartRes(startRes);
-    posProps.setEndRes(startRes + viewWidth - 1);
-    posProps.setStartSeq(startSeq);
-    posProps.setEndSeq(startSeq + viewHeight - 1);
-    od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps);
+    vpranges.setStartRes(startRes);
+    vpranges.setEndRes(startRes + viewWidth - 1);
+    vpranges.setStartSeq(startSeq);
+    vpranges.setEndSeq(startSeq + viewHeight - 1);
+    od.setBoxPosition(al.getHiddenSequences(), hiddenCols);
   }
 
   /*
    * Mouse click as position x,y in overview window
    */
-  private void mouseClick(OverviewDimensions od, int x, int y)
+  private void mouseClick(OverviewDimensionsWithHidden od, int x, int y)
   {
-    od.updateViewportFromMouse(x, y, al.getHiddenSequences(), hiddenCols,
-            posProps);
+    od.updateViewportFromMouse(x, y, al.getHiddenSequences(), hiddenCols);
 
     // updates require an OverviewPanel to exist which it doesn't here
     // so call setBoxPosition() as it would be called by the AlignmentPanel
     // normally
 
-    posProps.setStartRes(od.getScrollCol());
-    posProps.setEndRes(od.getScrollCol() + viewWidth - 1);
-    posProps.setStartSeq(od.getScrollRow());
-    posProps.setEndSeq(od.getScrollRow() + viewHeight - 1);
-    od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps);
+    vpranges.setStartRes(od.getScrollCol());
+    vpranges.setEndRes(od.getScrollCol() + viewWidth - 1);
+    vpranges.setStartSeq(od.getScrollRow());
+    vpranges.setEndSeq(od.getScrollRow() + viewHeight - 1);
+    od.setBoxPosition(al.getHiddenSequences(), hiddenCols);
   }
   
   /*