Merge branch 'bug/JAL-3072scrollThread' into merge/JAL-3072_3073
[jalview.git] / src / jalview / gui / ScalePanel.java
index 6a44d06..0f2b765 100755 (executable)
@@ -23,7 +23,6 @@ package jalview.gui;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.SequenceGroup;
-import jalview.datamodel.SequenceI;
 import jalview.renderer.ScaleRenderer;
 import jalview.renderer.ScaleRenderer.ScaleMark;
 import jalview.util.MessageManager;
@@ -159,7 +158,12 @@ public class ScalePanel extends JPanel
   protected void rightMouseButtonPressed(MouseEvent evt, final int res)
   {
     JPopupMenu pop = new JPopupMenu();
-    if (reveal != null)
+
+    /*
+     * grab the hidden range in case mouseMoved nulls it
+     */
+    final int[] hiddenRange = reveal;
+    if (hiddenRange != null)
     {
       JMenuItem item = new JMenuItem(
               MessageManager.getString("label.reveal"));
@@ -168,8 +172,9 @@ public class ScalePanel extends JPanel
         @Override
         public void actionPerformed(ActionEvent e)
         {
-          av.showColumn(reveal[0]);
+          av.showColumn(hiddenRange[0]);
           reveal = null;
+          ap.updateLayout();
           ap.paintAlignment(true, true);
           av.sendSelection();
         }
@@ -186,6 +191,7 @@ public class ScalePanel extends JPanel
           {
             av.showAllHiddenColumns();
             reveal = null;
+            ap.updateLayout();
             ap.paintAlignment(true, true);
             av.sendSelection();
           }
@@ -210,6 +216,7 @@ public class ScalePanel extends JPanel
             av.setSelectionGroup(null);
           }
 
+          ap.updateLayout();
           ap.paintAlignment(true, true);
           av.sendSelection();
         }
@@ -238,15 +245,7 @@ public class ScalePanel extends JPanel
     }
 
     av.getColumnSelection().addElement(res);
-    SequenceGroup sg = new SequenceGroup();
-    // try to be as quick as possible
-    SequenceI[] iVec = av.getAlignment().getSequencesArray();
-    for (int i = 0; i < iVec.length; i++)
-    {
-      sg.addSequence(iVec[i], false);
-      iVec[i] = null;
-    }
-    iVec = null;
+    SequenceGroup sg = new SequenceGroup(av.getAlignment().getSequences());
     sg.setStartRes(res);
     sg.setEndRes(res);
 
@@ -278,8 +277,8 @@ public class ScalePanel extends JPanel
     mouseDragging = false;
     ap.getSeqPanel().stopScrolling();
 
-    // todo res calculation should be a method on AlignViewport
-    int res = (evt.getX() / av.getCharWidth())
+    int xCords = Math.max(0, evt.getX()); // prevent negative X coordinates
+    int res = (xCords / av.getCharWidth())
             + av.getRanges().getStartRes();
     if (av.hasHiddenColumns())
     {
@@ -316,12 +315,17 @@ public class ScalePanel extends JPanel
     }
     stretchingGroup = false;
     ap.paintAlignment(false, false);
+    av.isSelectionGroupChanged(true);
+    av.isColSelChanged(true);
     av.sendSelection();
   }
 
   /**
    * Action on dragging the mouse in the scale panel is to expand or shrink the
-   * selection group range (including any hidden columns that it spans)
+   * selection group range (including any hidden columns that it spans). Note
+   * that the selection is only broadcast at the start of the drag (on
+   * mousePressed) and at the end (on mouseReleased), to avoid overload
+   * redrawing of other views.
    * 
    * @param evt
    */