JAL-3383 JAL-3253-applet Java8 switches to clarify ViewportRanges
authorhansonr <hansonr@STO24954W.ad.stolaf.edu>
Mon, 29 Jul 2019 20:29:36 +0000 (15:29 -0500)
committerhansonr <hansonr@STO24954W.ad.stolaf.edu>
Mon, 29 Jul 2019 20:29:36 +0000 (15:29 -0500)
listeners

src/jalview/datamodel/Alignment.java
src/jalview/gui/AnnotationPanel.java
src/jalview/gui/IdCanvas.java
src/jalview/gui/SeqCanvas.java
src/jalview/viewmodel/ViewportRanges.java

index b214934..91b29da 100755 (executable)
@@ -398,6 +398,10 @@ public class Alignment implements AlignmentI
     return null;
   }
 
+  private static final SequenceGroup[] noGroups = new SequenceGroup[0];
+
+  private ArrayList<SequenceGroup> temp = new ArrayList<>();
+
   /*
    * (non-Javadoc)
    * 
@@ -407,11 +411,15 @@ public class Alignment implements AlignmentI
   @Override
   public SequenceGroup[] findAllGroups(SequenceI s)
   {
-    ArrayList<SequenceGroup> temp = new ArrayList<>();
 
     synchronized (groups)
     {
+      temp.clear();
       int gSize = groups.size();
+      if (gSize == 0)
+      {
+        return noGroups;
+      }
       for (int i = 0; i < gSize; i++)
       {
         SequenceGroup sg = groups.get(i);
index 4ead210..af7bc26 100755 (executable)
@@ -1133,6 +1133,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI,
 
     gg.dispose();
     
+
     fastPaint = true;
 
     // Call repaint on alignment panel so that repaints from other alignment
@@ -1297,18 +1298,23 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI,
     // Here we only want to fastpaint on a scroll, with resize using a normal
     // paint, so scroll events are identified as changes to the horizontal or
     // vertical start value.
-    if (evt.getPropertyName().equals(ViewportRanges.STARTRES))
+    switch (evt.getPropertyName())
     {
+    case ViewportRanges.STARTRES:
       fastPaint((int) evt.getNewValue() - (int) evt.getOldValue());
-    }
-    else if (evt.getPropertyName().equals(ViewportRanges.STARTRESANDSEQ))
-    {
+      break;
+    case ViewportRanges.STARTRESANDSEQ:
       fastPaint(((int[]) evt.getNewValue())[0]
               - ((int[]) evt.getOldValue())[0]);
-    }
-    else if (evt.getPropertyName().equals(ViewportRanges.MOVE_VIEWPORT))
-    {
+      break;
+    case ViewportRanges.MOVE_VIEWPORT:
       repaint();
+      break;
+    case ViewportRanges.STARTSEQ:
+    case ViewportRanges.ENDRES:
+    case ViewportRanges.ENDSEQ:
+      // ignore
+      break;
     }
   }
 
index 4057cef..e5a5946 100755 (executable)
@@ -579,21 +579,45 @@ public class IdCanvas extends JPanel implements ViewportListenerI
   @Override
   public void propertyChange(PropertyChangeEvent evt)
   {
+    // BH just clarifying logic
     String propertyName = evt.getPropertyName();
-    if (propertyName.equals(ViewportRanges.STARTSEQ)
-            || (av.getWrapAlignment()
-                    && propertyName.equals(ViewportRanges.STARTRES)))
-    {
+    switch (propertyName) {
+    case ViewportRanges.STARTSEQ:
       fastPaint((int) evt.getNewValue() - (int) evt.getOldValue());
-    }
-    else if (propertyName.equals(ViewportRanges.STARTRESANDSEQ))
-    {
+      return;
+    case ViewportRanges.STARTRES:
+      if (av.getWrapAlignment())
+      {
+        fastPaint((int) evt.getNewValue() - (int) evt.getOldValue());
+      }
+      return;
+    case ViewportRanges.STARTRESANDSEQ:
       fastPaint(((int[]) evt.getNewValue())[1]
               - ((int[]) evt.getOldValue())[1]);
-    }
-    else if (propertyName.equals(ViewportRanges.MOVE_VIEWPORT))
-    {
+      return;
+    case ViewportRanges.MOVE_VIEWPORT:
       repaint();
+      return;
+    case ViewportRanges.ENDRES:
+    case ViewportRanges.ENDSEQ:
+      // ignore ??
+      return;
     }
+// BH 2019.07.27 was:
+//    if (propertyName.equals(ViewportRanges.STARTSEQ)
+//            || (av.getWrapAlignment()
+//                    && propertyName.equals(ViewportRanges.STARTRES)))
+//    {
+//      fastPaint((int) evt.getNewValue() - (int) evt.getOldValue());
+//    }
+//    else if (propertyName.equals(ViewportRanges.STARTRESANDSEQ))
+//    {
+//      fastPaint(((int[]) evt.getNewValue())[1]
+//              - ((int[]) evt.getOldValue())[1]);
+//    }
+//    else if (propertyName.equals(ViewportRanges.MOVE_VIEWPORT))
+//    {
+//      repaint();
+    // }
   }
 }
index 076ce5b..0d27354 100755 (executable)
@@ -1676,92 +1676,150 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
   public void propertyChange(PropertyChangeEvent evt)
   {
     String eventName = evt.getPropertyName();
-    // System.err.println(">>SeqCanvas propertyChange " + eventName);
-    if (eventName.equals(SequenceGroup.SEQ_GROUP_CHANGED))
+
+    // BH 2019.07.27 removes dead code introduced in aad3650 and simplifies
+    // logic, emphasizing no check for ENDRES or ENDSEQ
+
+    // Both scrolling and resizing change viewport ranges: scrolling changes
+    // both start and end points, but resize only changes end values.
+    // Here we only want to fastpaint on a scroll, with resize using a normal
+    // paint, so scroll events are identified as changes to the horizontal or
+    // vertical start value.
+
+    // Make sure we're not trying to draw a panel
+    // larger than the visible window
+    int scrollX = 0;
+    switch (eventName)
     {
+    case SequenceGroup.SEQ_GROUP_CHANGED:
       fastPaint = true;
       repaint();
       return;
-    }
-    else if (eventName.equals(ViewportRanges.MOVE_VIEWPORT))
-    {
+    case ViewportRanges.MOVE_VIEWPORT:
       fastPaint = false;
-      // System.err.println("!!!! fastPaint false from MOVE_VIEWPORT");
       repaint();
       return;
+    case ViewportRanges.STARTSEQ:
+      // meaning STARTOREND
+      // typically scroll, but possibly just the end changed
+      fastPaint(0, (int) evt.getNewValue() - (int) evt.getOldValue());
+      return;
+    case ViewportRanges.ENDRES:
+    case ViewportRanges.ENDSEQ:
+      // meaning second event along with "START" -- ENDONLY,NOTSTART
+      // TODO: ignore??
+      return;
+    case ViewportRanges.STARTRES:
+      // meaning STARTOREND
+      scrollX = (int) evt.getNewValue() - (int) evt.getOldValue();
+      break;
+    case ViewportRanges.STARTRESANDSEQ:
+      scrollX = ((int[]) evt.getNewValue())[0]
+              - ((int[]) evt.getOldValue())[0];
+      break;
+    }
+    ViewportRanges vpRanges = av.getRanges();
+    int range = vpRanges.getEndRes() - vpRanges.getStartRes() + 1;
+    scrollX = Math.max(Math.min(scrollX, range), -range);
+    // only STARTRES or STARTRESANDSEQ:
+    if (av.getWrapAlignment())
+    {
+      fastPaintWrapped(scrollX);
     }
-
-    int scrollX = 0;
-    if (eventName.equals(ViewportRanges.STARTRES)
-            || eventName.equals(ViewportRanges.STARTRESANDSEQ))
+    else
     {
-      // Make sure we're not trying to draw a panel
-      // larger than the visible window
-      if (eventName.equals(ViewportRanges.STARTRES))
-      {
-        scrollX = (int) evt.getNewValue() - (int) evt.getOldValue();
-      }
-      else
-      {
-        scrollX = ((int[]) evt.getNewValue())[0]
-                - ((int[]) evt.getOldValue())[0];
-      }
-      ViewportRanges vpRanges = av.getRanges();
-
-      int range = vpRanges.getEndRes() - vpRanges.getStartRes() + 1;
-      if (scrollX > range)
-      {
-        scrollX = range;
-      }
-      else if (scrollX < -range)
-      {
-        scrollX = -range;
-      }
+      fastPaint(scrollX, 0);
     }
+
+    // BH 2019.07.27 was:
+    // if (eventName.equals(SequenceGroup.SEQ_GROUP_CHANGED))
+    // {
+    // fastPaint = true;
+    // repaint();
+    // return;
+    // }
+    // else if (eventName.equals(ViewportRanges.MOVE_VIEWPORT))
+    // {
+    // fastPaint = false;
+    // // System.err.println("!!!! fastPaint false from MOVE_VIEWPORT");
+    // repaint();
+    // return;
+    // }
+    //
+    // if (eventName.equals(ViewportRanges.STARTRES)
+    // || eventName.equals(ViewportRanges.STARTRESANDSEQ))
+    // {
+    // // Make sure we're not trying to draw a panel
+    // // larger than the visible window
+    // if (eventName.equals(ViewportRanges.STARTRES))
+    // {
+    // scrollX = (int) evt.getNewValue() - (int) evt.getOldValue();
+    // }
+    // else
+    // {
+    // scrollX = ((int[]) evt.getNewValue())[0]
+    // - ((int[]) evt.getOldValue())[0];
+    // }
+    // ViewportRanges vpRanges = av.getRanges();
+    //
+    // int range = vpRanges.getEndRes() - vpRanges.getStartRes() + 1;
+    // if (scrollX > range)
+    // {
+    // scrollX = range;
+    // }
+    // else if (scrollX < -range)
+    // {
+    // scrollX = -range;
+    // }
+    // }
     // Both scrolling and resizing change viewport ranges: scrolling changes
     // both start and end points, but resize only changes end values.
     // Here we only want to fastpaint on a scroll, with resize using a normal
     // paint, so scroll events are identified as changes to the horizontal or
     // vertical start value.
-    if (eventName.equals(ViewportRanges.STARTRES))
-    {
-      if (av.getWrapAlignment())
-      {
-        fastPaintWrapped(scrollX);
-      }
-      else
-      {
-        fastPaint(scrollX, 0);
-      }
-    }
-    else if (eventName.equals(ViewportRanges.STARTSEQ))
-    {
-      // scroll
-      fastPaint(0, (int) evt.getNewValue() - (int) evt.getOldValue());
-    }
-    else if (eventName.equals(ViewportRanges.STARTRESANDSEQ))
-    {
-      if (av.getWrapAlignment())
-      {
-        fastPaintWrapped(scrollX);
-      }
-      else
-      {
-        fastPaint(scrollX, 0);
-      }
-    }
-    else if (eventName.equals(ViewportRanges.STARTSEQ))
-    {
-      // scroll
-      fastPaint(0, (int) evt.getNewValue() - (int) evt.getOldValue());
-    }
-    else if (eventName.equals(ViewportRanges.STARTRESANDSEQ))
-    {
-      if (av.getWrapAlignment())
-      {
-        fastPaintWrapped(scrollX);
-      }
-    }
+    // BH 2019.07.27 was:
+    // if (eventName.equals(ViewportRanges.STARTRES))
+    // {
+    // if (av.getWrapAlignment())
+    // {
+    // fastPaintWrapped(scrollX);
+    // }
+    // else
+    // {
+    // fastPaint(scrollX, 0);
+    // }
+    // }
+    // else if (eventName.equals(ViewportRanges.STARTSEQ))
+    // {
+    // // scroll
+    // fastPaint(0, (int) evt.getNewValue() - (int) evt.getOldValue());
+    // }
+    // else if (eventName.equals(ViewportRanges.STARTRESANDSEQ))
+    // {
+    // if (av.getWrapAlignment())
+    // {
+    // fastPaintWrapped(scrollX);
+    // }
+    // else
+    // {
+    // fastPaint(scrollX, 0);
+    // }
+    // }
+    //
+    // BH oops!
+    //
+    // else if (eventName.equals(ViewportRanges.STARTSEQ))
+    // {
+    // // scroll
+    // fastPaint(0, (int) evt.getNewValue() - (int) evt.getOldValue());
+    // }
+    // else if (eventName.equals(ViewportRanges.STARTRESANDSEQ))
+    // {
+    // if (av.getWrapAlignment())
+    // {
+    // fastPaintWrapped(scrollX);
+    // }
+    // }
   }
 
   /**
index 4f671da..9f54964 100644 (file)
@@ -137,11 +137,31 @@ public class ViewportRanges extends ViewportProperties
     int oldstartres = oldvalues[0];
     int oldendres = oldvalues[1];
 
+    if (oldstartres == startRes && oldendres == endRes)
+    {
+      return; // BH 2019.07.27 standard check for no changes
+    }
+
+    // listeners include:
+
+    // jalview.gui.SeqCanvas[,0,0,568x90,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
+    // STARTRES, STARTRESANDSEQ
+    // jalview.gui.IdCanvas[,0,0,112x90,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=112,height=0]]
+    // jalview.gui.ScalePanel[,0,0,594x17,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
+    // jalview.gui.AnnotationPanel[,0,0,0x162,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=1,height=162]]
+    // jalview.gui.AlignmentPanel[,0,0,706x133,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777225,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=220,height=166]]
+    // jalview.gui.OverviewPanel[,0,0,543x135,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=543,height=135]]
+
+
+    // "STARTRES" is a misnomer here -- really "STARTORENDRES"
+    // note that this could be "no change" if the range is just being expanded
     changeSupport.firePropertyChange(STARTRES, oldstartres, startRes);
     if (oldstartres == startRes)
     {
-      // event won't be fired if start positions are same
-      // fire an event for the end positions in case they changed
+      // No listener cares about this
+      // "ENDRES" is a misnomer here -- really "ENDONLYRES"
+      // BH 2019.07.27 adds end change check
+      // fire only if only the end is changed
       changeSupport.firePropertyChange(ENDRES, oldendres, endRes);
     }
   }
@@ -203,12 +223,13 @@ public class ViewportRanges extends ViewportProperties
    */
   public void setStartSeq(int seq)
   {
-    int startseq = seq;
     int height = getViewportHeight();
-    if (startseq + height - 1 > getVisibleAlignmentHeight() - 1)
-    {
-      startseq = getVisibleAlignmentHeight() - height;
-    }
+    int startseq = Math.max(seq, getVisibleAlignmentHeight() - height);
+    // BH 2019.07.27 cosmetic only -- was:
+    // if (startseq + height - 1 > getVisibleAlignmentHeight() - 1)
+    // {
+    // startseq = getVisibleAlignmentHeight() - height;
+    // }
     setStartEndSeq(startseq, startseq + height - 1);
   }
 
@@ -229,11 +250,19 @@ public class ViewportRanges extends ViewportProperties
     int oldstartseq = oldvalues[0];
     int oldendseq = oldvalues[1];
 
+    if (oldstartseq == startSeq && oldendseq == endSeq)
+    {
+      return; // BH 2019.07.27 standard check for no changes
+    }
+
+    // "STARTSEQ" is a misnomer here -- really "STARTORENDSEQ"
     changeSupport.firePropertyChange(STARTSEQ, oldstartseq, startSeq);
     if (oldstartseq == startSeq)
     {
-      // event won't be fired if start positions are the same
-      // fire in case the end positions changed
+      // Note that all listeners ignore this - could be removed, or there is a
+      // bug.
+      // "ENDSEQ" is a misnomer here -- really "ENDONLYSEQ"
+      // additional fire, only if only the end is changed
       changeSupport.firePropertyChange(ENDSEQ, oldendseq, endSeq);
     }
   }
@@ -306,6 +335,7 @@ public class ViewportRanges extends ViewportProperties
    */
   public void setStartResAndSeq(int res, int seq)
   {
+    // from Overview only
     int width = getViewportWidth();
     int[] oldresvalues = updateStartEndRes(res, res + width - 1);
 
@@ -317,9 +347,9 @@ public class ViewportRanges extends ViewportProperties
     }
     int[] oldseqvalues = updateStartEndSeq(startseq, startseq + height - 1);
 
-    int[] old = new int[] { oldresvalues[0], oldseqvalues[0] };
-    int[] newresseq = new int[] { startRes, startSeq };
-    changeSupport.firePropertyChange(STARTRESANDSEQ, old, newresseq);
+    int[] oldvalues = new int[] { oldresvalues[0], oldseqvalues[0] };
+    int[] newvalues = new int[] { startRes, startSeq };
+    changeSupport.firePropertyChange(STARTRESANDSEQ, oldvalues, newvalues);
   }
 
   /**
@@ -631,7 +661,10 @@ public class ViewportRanges extends ViewportProperties
   }
 
   /**
-   * Set the viewport location so that a position is visible
+   * Set the viewport location so that a position is visible. From
+   * SeqPanel.scrollToVisible(true) only, from AlignFrame keyboard actions
+   * SeqPanel.scrollCursor[Row(VK_S)/Column(VK_C)/RowAndColumn(VK_ENTER,COMMA)/Position(VK_P)]
+   * 
    * 
    * @param x
    *          column to be visible: absolute position in alignment