From 0ff0a9b67913910fbbdf49b1eaffc7e02a8077cb Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Tue, 13 Oct 2009 10:05:16 +0000
Subject: [PATCH] make the BamView in Artemis asynchronous

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@12054 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
 .../artemis/components/alignment/BamView.java | 57 +++++++++++++------
 1 file changed, 40 insertions(+), 17 deletions(-)

diff --git a/uk/ac/sanger/artemis/components/alignment/BamView.java b/uk/ac/sanger/artemis/components/alignment/BamView.java
index 00da171d7..2ef2f7b75 100644
--- a/uk/ac/sanger/artemis/components/alignment/BamView.java
+++ b/uk/ac/sanger/artemis/components/alignment/BamView.java
@@ -104,6 +104,7 @@ import uk.ac.sanger.artemis.components.DisplayAdjustmentListener;
 import uk.ac.sanger.artemis.components.EntryFileDialog;
 import uk.ac.sanger.artemis.components.FeatureDisplay;
 import uk.ac.sanger.artemis.components.MessageDialog;
+import uk.ac.sanger.artemis.components.SwingWorker;
 import uk.ac.sanger.artemis.components.Utilities;
 import uk.ac.sanger.artemis.editor.MultiLineToolTipUI;
 import uk.ac.sanger.artemis.io.EntryInformation;
@@ -2125,25 +2126,47 @@ public class BamView extends JPanel
   /**
    * Artemis event notification
    */
-  public void displayAdjustmentValueChanged(DisplayAdjustmentEvent event)
-  {
-    if(event.getType() == DisplayAdjustmentEvent.SCALE_ADJUST_EVENT)
+  public void displayAdjustmentValueChanged(final DisplayAdjustmentEvent event)
+  { 
+    SwingWorker worker = new SwingWorker()
     {
-      laststart = -1;
-      lastend = -1;
-      this.startBase = event.getStart();
-      this.endBase   = event.getEnd();
+      public Object construct()
+      {
+        try
+        {
+          Thread.sleep(500);
+        }
+        catch (InterruptedException e)
+        {
+          e.printStackTrace();
+        }
+        
+        if(event.getStart() != ((FeatureDisplay)event.getSource()).getForwardBaseAtLeftEdge())
+        {
+          return null;
+        }
+      
+        if(event.getType() == DisplayAdjustmentEvent.SCALE_ADJUST_EVENT)
+        {
+          laststart = -1;
+          lastend = -1;
+          BamView.this.startBase = event.getStart();
+          BamView.this.endBase   = event.getEnd();
 
-      int width = feature_display.getMaxVisibleBases();
-      setZoomLevel(width);
-      repaint();
-    }
-    else
-    {
-      setDisplay(event.getStart(), 
-          event.getStart()+feature_display.getMaxVisibleBases(), event);
-      repaint();
-    }
+          int width = feature_display.getMaxVisibleBases();
+          setZoomLevel(width);
+          repaint();
+        }
+        else
+        {
+          setDisplay(event.getStart(), 
+              event.getStart()+feature_display.getMaxVisibleBases(), event);
+          repaint();
+        }
+        return null;
+      }
+    };
+    worker.start();
   }
   
   public void selectionChanged(SelectionChangeEvent event)
-- 
GitLab