JAL-2491 first addition of new event
[jalview.git] / src / jalview / gui / AlignmentPanel.java
index 8ade5d6..4863659 100644 (file)
@@ -35,6 +35,7 @@ import jalview.schemes.ResidueProperties;
 import jalview.structure.StructureSelectionManager;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
+import jalview.viewmodel.ViewportListenerI;
 import jalview.viewmodel.ViewportRanges;
 
 import java.awt.BorderLayout;
@@ -66,7 +67,8 @@ import javax.swing.SwingUtilities;
  * @version $Revision: 1.161 $
  */
 public class AlignmentPanel extends GAlignmentPanel implements
-        AdjustmentListener, Printable, AlignmentViewPanel
+        AdjustmentListener, Printable, AlignmentViewPanel,
+        ViewportListenerI
 {
   public AlignViewport av;
 
@@ -154,6 +156,8 @@ public class AlignmentPanel extends GAlignmentPanel implements
       }
     };
     av.addPropertyChangeListener(propertyChangeListener);
+
+    av.getRanges().addPropertyChangeListener(this);
     fontChanged();
     adjustAnnotationHeight();
     updateLayout();
@@ -473,7 +477,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
             || res >= (vpRanges.getStartRes() + cwidth))
     {
       vscroll.setValue((res / cwidth));
-      vpRanges.setStartRes(vscroll.getValue() * cwidth);
+      // vpRanges.setStartRes(vscroll.getValue() * cwidth);
     }
 
   }
@@ -749,9 +753,9 @@ public class AlignmentPanel extends GAlignmentPanel implements
      * 'do not scroll complement' flag; ensure it is the same for both
      * operations
      */
-    boolean flag = isDontScrollComplement();
+    // boolean flag = isDontScrollComplement();
     hscroll.setValues(x, hextent, 0, width);
-    setDontScrollComplement(flag);
+    // setDontScrollComplement(flag);
     vscroll.setValues(y, vextent, 0, height);
   }
 
@@ -770,8 +774,16 @@ public class AlignmentPanel extends GAlignmentPanel implements
     if (evt.getSource() == hscroll)
     {
       int x = hscroll.getValue();
-      vpRanges.setStartRes(x);
-      vpRanges.setEndRes((x + (getSeqPanel().seqCanvas.getWidth() / av
+      if (x == oldX)
+      {
+        return;
+      }
+      // vpRanges.setStartRes(x);
+      // vpRanges.setEndRes((x + (getSeqPanel().seqCanvas.getWidth() / av
+      // .getCharWidth())) - 1);
+      vpRanges.setStartEndRes(
+              x,
+              (x + (getSeqPanel().seqCanvas.getWidth() / av
               .getCharWidth())) - 1);
     }
 
@@ -781,12 +793,18 @@ public class AlignmentPanel extends GAlignmentPanel implements
 
       if (av.getWrapAlignment())
       {
+        if (offy == oldX)
+        {
+          return;
+        }
         if (offy > -1)
         {
           int rowSize = getSeqPanel().seqCanvas
                   .getWrappedCanvasWidth(getSeqPanel().seqCanvas.getWidth());
-          vpRanges.setStartRes(offy * rowSize);
-          vpRanges.setEndRes((offy + 1) * rowSize);
+          vpRanges.setStartEndRes(offy * rowSize, (offy + 1) * rowSize);
+          // vpRanges.setStartRes(offy * rowSize);
+          // vpRanges.setEndRes((offy + 1) * rowSize);
+
         }
         else
         {
@@ -806,62 +824,71 @@ public class AlignmentPanel extends GAlignmentPanel implements
       }
       else
       {
-        vpRanges.setStartSeq(offy);
-        vpRanges.setEndSeq(offy
-                + (getSeqPanel().seqCanvas.getHeight() / av.getCharHeight())
-                - 1);
+        if (offy == oldY)
+        {
+          return;
+        }
+        // vpRanges.setStartSeq(offy);
+        // vpRanges.setEndSeq(offy
+        // + (getSeqPanel().seqCanvas.getHeight() / av.getCharHeight())
+        // - 1);
+        vpRanges.setStartEndSeq(
+                offy,
+                offy
+                        + (getSeqPanel().seqCanvas.getHeight() / av
+                                .getCharHeight()) - 1);
       }
     }
 
-    if (overviewPanel != null)
+    /*if (overviewPanel != null)
     {
       overviewPanel.setBoxPosition();
-    }
+    }*/
 
-    int scrollX = vpRanges.getStartRes() - oldX;
-    int scrollY = vpRanges.getStartSeq() - oldY;
+    // int scrollX = vpRanges.getStartRes() - oldX;
+    // int scrollY = vpRanges.getStartSeq() - oldY;
 
     if (av.getWrapAlignment() || !fastPaint)
     {
       repaint();
     }
-    else
-    {
-      // Make sure we're not trying to draw a panel
-      // larger than the visible window
-      if (scrollX > vpRanges.getEndRes() - vpRanges.getStartRes())
-      {
-        scrollX = vpRanges.getEndRes() - vpRanges.getStartRes();
-      }
-      else if (scrollX < vpRanges.getStartRes() - vpRanges.getEndRes())
-      {
-        scrollX = vpRanges.getStartRes() - vpRanges.getEndRes();
-      }
-
-      if (scrollX != 0 || scrollY != 0)
-      {
-        getIdPanel().getIdCanvas().fastPaint(scrollY);
-        getSeqPanel().seqCanvas.fastPaint(scrollX, scrollY);
-        getScalePanel().repaint();
-
-        if (av.isShowAnnotation() && scrollX != 0)
-        {
-          getAnnotationPanel().fastPaint(scrollX);
-        }
-      }
-    }
-    /*
-     * If there is one, scroll the (Protein/cDNA) complementary alignment to
-     * match, unless we are ourselves doing that.
-     */
-    if (isDontScrollComplement())
-    {
-      setDontScrollComplement(false);
-    }
-    else
-    {
-      av.scrollComplementaryAlignment();
-    }
+    /*   else
+       {
+         // Make sure we're not trying to draw a panel
+         // larger than the visible window
+         if (scrollX > vpRanges.getEndRes() - vpRanges.getStartRes())
+         {
+           scrollX = vpRanges.getEndRes() - vpRanges.getStartRes();
+         }
+         else if (scrollX < vpRanges.getStartRes() - vpRanges.getEndRes())
+         {
+           scrollX = vpRanges.getStartRes() - vpRanges.getEndRes();
+         }
+
+         if (scrollX != 0 || scrollY != 0)
+         {
+           getIdPanel().getIdCanvas().fastPaint(scrollY);
+           getSeqPanel().seqCanvas.fastPaint(scrollX, scrollY);
+           getScalePanel().repaint();
+
+           if (av.isShowAnnotation() && scrollX != 0)
+           {
+             getAnnotationPanel().fastPaint(scrollX);
+           }
+         }
+       }
+       /*
+        * If there is one, scroll the (Protein/cDNA) complementary alignment to
+        * match, unless we are ourselves doing that.
+        */
+    /*   if (isDontScrollComplement())
+       {
+         setDontScrollComplement(false);
+       }
+       else
+       {
+         av.scrollComplementaryAlignment();
+       }*/
   }
 
   /**
@@ -1906,4 +1933,13 @@ public class AlignmentPanel extends GAlignmentPanel implements
       repaint();
     }
   }
+
+  @Override
+  public void propertyChange(PropertyChangeEvent evt)
+  {
+    int x = vpRanges.getStartRes();
+    int y = vpRanges.getStartSeq();
+    setScrollValues(x, y);
+
+  }
 }