JAL-2491 first addition of new event
[jalview.git] / src / jalview / gui / SeqCanvas.java
index 64e5fdc..7b8dd92 100755 (executable)
@@ -26,6 +26,7 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.renderer.ScaleRenderer;
 import jalview.renderer.ScaleRenderer.ScaleMark;
+import jalview.viewmodel.ViewportListenerI;
 import jalview.viewmodel.ViewportRanges;
 
 import java.awt.BasicStroke;
@@ -37,6 +38,7 @@ import java.awt.Graphics2D;
 import java.awt.RenderingHints;
 import java.awt.Shape;
 import java.awt.image.BufferedImage;
+import java.beans.PropertyChangeEvent;
 import java.util.List;
 
 import javax.swing.JComponent;
@@ -47,7 +49,7 @@ import javax.swing.JComponent;
  * @author $author$
  * @version $Revision$
  */
-public class SeqCanvas extends JComponent
+public class SeqCanvas extends JComponent implements ViewportListenerI
 {
   final FeatureRenderer fr;
 
@@ -88,6 +90,8 @@ public class SeqCanvas extends JComponent
     setLayout(new BorderLayout());
     PaintRefresher.Register(this, av.getSequenceSetId());
     setBackground(Color.white);
+
+    av.getRanges().addPropertyChangeListener(this);
   }
 
   public SequenceRenderer getSequenceRenderer()
@@ -975,4 +979,33 @@ public class SeqCanvas extends JComponent
 
     repaint();
   }
+
+  @Override
+  public void propertyChange(PropertyChangeEvent evt)
+  {
+
+    if (evt.getPropertyName().equals("startres")
+            || evt.getPropertyName().equals("endres"))
+    {
+      // Make sure we're not trying to draw a panel
+      // larger than the visible window
+      ViewportRanges vpRanges = av.getRanges();
+      int scrollX = (int) evt.getNewValue() - (int) evt.getOldValue();
+      if (scrollX > vpRanges.getEndRes() - vpRanges.getStartRes())
+      {
+        scrollX = vpRanges.getEndRes() - vpRanges.getStartRes();
+      }
+      else if (scrollX < vpRanges.getStartRes() - vpRanges.getEndRes())
+      {
+        scrollX = vpRanges.getStartRes() - vpRanges.getEndRes();
+      }
+      fastPaint(scrollX, 0);
+    }
+    else if (evt.getPropertyName() == "startseq"
+            || evt.getPropertyName() == "endseq")
+    {
+      fastPaint(0, (int) evt.getNewValue() - (int) evt.getOldValue());
+    }
+
+  }
 }