Merge branch 'develop' into Jalview-JS/develop
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 20 Mar 2019 15:19:48 +0000 (15:19 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 20 Mar 2019 15:19:48 +0000 (15:19 +0000)
Conflicts:
src/jalview/gui/AlignFrame.java
src/jalview/gui/ScalePanel.java

src/jalview/gui/AlignFrame.java
src/jalview/gui/ScalePanel.java
src/jalview/gui/SeqPanel.java
test/jalview/gui/ScalePanelTest.java

index 4bf424b..e2c3ac3 100644 (file)
@@ -851,7 +851,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         Desktop.instance.removeJalviewPropertyChangeListener("services",
                 thisListener);
         closeMenuItem_actionPerformed(true);
-      };
+      }
     });
     // Finally, build the menu once to get current service state
     new Thread(new Runnable()
@@ -1004,11 +1004,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   public void setStatus(String text)
   {
-         // BH note: If text width and height are 0, then the layout manager
-         // will dispense of it and change the frame height. 
-         // In JavaScript, we use \u00A0  -- unicode "non-breaking space"
-         // which is the unicode encoding of &nbsp;
-         
     statusBar.setText(text == null || text.isEmpty() ? " " : text);
   }
 
@@ -3374,7 +3369,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               {
                 overview.dispose();
                 alignPanel.setOverviewPanel(null);
-              };
+              }
             });
     if (getKeyListeners().length > 0)
     {
@@ -5009,7 +5004,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         trimrs.setSelected(trimrs.isSelected());
         Cache.setProperty(DBRefFetcher.TRIM_RETRIEVED_SEQUENCES,
                 Boolean.valueOf(trimrs.isSelected()).toString());
-      };
+      }
     });
     rfetch.add(trimrs);
     JMenuItem fetchr = new JMenuItem(
@@ -5738,7 +5733,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         Cache.setProperty("LAST_DIRECTORY", choice);
         SequenceI[] seqs = viewport.getAlignment().getSequencesArray();
         new VCFLoader(choice).loadVCF(seqs, us);
-      };
+      }
     });
     chooser.showOpenDialog(null);
 
index 9c2b42f..bb15bd2 100755 (executable)
@@ -48,7 +48,6 @@ import java.util.List;
 import javax.swing.JMenuItem;
 import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
-import javax.swing.SwingUtilities;
 import javax.swing.ToolTipManager;
 
 /**
@@ -278,15 +277,15 @@ public class ScalePanel extends JPanel
 
     // todo res calculation should be a method on AlignViewport
     int xCords = Math.max(0, evt.getX()); // prevent negative X coordinates
+    ViewportRanges ranges = av.getRanges();
     int res = (xCords / av.getCharWidth())
-            + av.getRanges().getStartRes();
-
+            + ranges.getStartRes();
+    res = Math.min(res, ranges.getEndRes());
     if (av.hasHiddenColumns())
     {
       res = av.getAlignment().getHiddenColumns()
               .visibleToAbsoluteColumn(res);
     }
-    res = Math.min(res, av.getRanges().getEndRes());
     res = Math.max(0, res);
 
     if (!stretchingGroup)
index 04ceea6..9a67c27 100644 (file)
@@ -321,8 +321,10 @@ public class SeqPanel extends JPanel
     }
     else
     {
-      seqIndex = Math.min((y / charHeight) + av.getRanges().getStartSeq(),
+      ViewportRanges ranges = av.getRanges();
+      seqIndex = Math.min((y / charHeight) + ranges.getStartSeq(),
               alignmentHeight - 1);
+      seqIndex = Math.min(seqIndex, ranges.getEndSeq());
     }
 
     return new MousePos(col, seqIndex, annIndex);
@@ -1940,6 +1942,7 @@ public class SeqPanel extends JPanel
   @Override
   public void mouseExited(MouseEvent e)
   {
+    lastMousePosition = null;
     ap.alignFrame.setStatus(" ");
     if (av.getWrapAlignment())
     {
index 91b541c..0ec1c1f 100644 (file)
@@ -1,12 +1,18 @@
 package jalview.gui;
 
+import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 
+import jalview.bin.Cache;
+import jalview.bin.Jalview;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.io.DataSourceType;
+import jalview.io.FileLoader;
+import jalview.viewmodel.ViewportRanges;
 
 import java.awt.event.MouseEvent;
 
@@ -28,16 +34,12 @@ public class ScalePanelTest
     SequenceI seq1 = new Sequence("Seq1", "MATRESS");
     SequenceI seq2 = new Sequence("Seq2", "MADNESS");
     AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 });
-    
+
     AlignFrame alignFrame = new AlignFrame(al, al.getWidth(),
             al.getHeight());
-    ScalePanel scalePanel = new ScalePanel(
-            alignFrame.getViewport(), alignFrame.alignPanel
-    );
-    
-    MouseEvent mouse = new MouseEvent(
-            scalePanel, 0, 1, 0, 4, 0, 1, false
-    );
+    ScalePanel scalePanel = alignFrame.alignPanel.getScalePanel();
+
+    MouseEvent mouse = new MouseEvent(scalePanel, 0, 1, 0, 4, 0, 1, false);
     scalePanel.mousePressed(mouse);
     scalePanel.mouseDragged(mouse);
 
@@ -51,8 +53,56 @@ public class ScalePanelTest
     int startCol = sg.getStartRes();
 
     assertTrue(startCol >= 0);
+  }
 
+  /**
+   * Test for JAL-3212
+   */
+  @Test(groups = "Functional")
+  public void testSelectColumns_withHidden()
+  {
+    String seq1 = ">Seq1\nANTOFAGASTAVALPARAISOMONTEVIDEOANTANANARIVO";
+    AlignFrame alignFrame = new FileLoader().LoadFileWaitTillLoaded(seq1,
+            DataSourceType.PASTE);
+    ScalePanel scalePanel = alignFrame.alignPanel.getScalePanel();
 
+    /*
+     * hide columns 1-20 (of 43); then 'drag' to select columns 30-31;
+     * 31 is 51 in absolute columns but bug JAL-3212 reduces it to
+     * endRes which is 22
+     */
+    AlignViewport viewport = alignFrame.getViewport();
+    ViewportRanges ranges = viewport.getRanges();
+    assertEquals(ranges.getStartRes(), 0);
+    assertEquals(ranges.getEndRes(), 42);
+    viewport.hideColumns(0, 19);
+    alignFrame.alignPanel.updateLayout();
+    assertEquals(ranges.getStartRes(), 0);
+    assertEquals(ranges.getEndRes(), 22);
+    
+    int cw = viewport.getCharWidth();
+    int xPos = 9 * cw + 2;
+    MouseEvent mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1,
+            false);
+    scalePanel.mousePressed(mouse);
+    scalePanel.mouseDragged(mouse);
+    xPos += cw;
+    mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
+    scalePanel.mouseReleased(mouse);
+
+    SequenceGroup sg = scalePanel.av.getSelectionGroup();
+    assertEquals(sg.getStartRes(), 29);
+    assertEquals(sg.getEndRes(), 30);
+  }
+
+  @BeforeClass(alwaysRun = true)
+  public static void setUpBeforeClass() throws Exception
+  {
+    /*
+     * use read-only test properties file
+     */
+    Cache.loadProperties("test/jalview/io/testProps.jvprops");
+    Jalview.main(new String[] { "-nonews" });
   }
 
 }