JAL-1160 support horizontal mouse wheel scrolling events
[jalview.git] / src / jalview / gui / FeatureRenderer.java
index db2ce7e..4abc85a 100755 (executable)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
  * 
@@ -18,6 +18,7 @@
 package jalview.gui;
 
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 import java.awt.*;
 import java.awt.event.*;
@@ -52,12 +53,12 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
   FontMetrics fm;
 
   int charOffset;
-
-  Hashtable featureColours = new Hashtable();
+  Map featureColours = new ConcurrentHashMap();
 
   // A higher level for grouping features of a
   // particular type
-  Hashtable featureGroups = new Hashtable();
+  Map featureGroups = new ConcurrentHashMap();
 
   // This is actually an Integer held in the hashtable,
   // Retrieved using the key feature type
@@ -85,13 +86,13 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
   {
     String[] renderOrder;
 
-    Hashtable featureGroups;
+    Map featureGroups;
 
-    Hashtable featureColours;
+    Map featureColours;
 
     float transparency;
 
-    Hashtable featureOrder;
+    Map featureOrder;
 
     public FeatureRendererSettings(String[] renderOrder,
             Hashtable featureGroups, Hashtable featureColours,
@@ -113,27 +114,27 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
     public FeatureRendererSettings(FeatureRenderer fr)
     {
       renderOrder = null;
-      featureGroups = new Hashtable();
-      featureColours = new Hashtable();
-      featureOrder = new Hashtable();
+      featureGroups = new ConcurrentHashMap();
+      featureColours = new ConcurrentHashMap();
+      featureOrder = new ConcurrentHashMap();
       if (fr.renderOrder != null)
       {
         this.renderOrder = new String[fr.renderOrder.length];
         System.arraycopy(fr.renderOrder, 0, renderOrder, 0,
-                renderOrder.length);
+                fr.renderOrder.length);
       }
       if (fr.featureGroups != null)
       {
-        this.featureGroups = new Hashtable(fr.featureGroups);
+        this.featureGroups = new ConcurrentHashMap(fr.featureGroups);
       }
       if (fr.featureColours != null)
       {
-        this.featureColours = new Hashtable(fr.featureColours);
+        this.featureColours = new ConcurrentHashMap(fr.featureColours);
       }
-      Enumeration en = fr.featureColours.keys();
-      while (en.hasMoreElements())
+      Iterator en = fr.featureColours.keySet().iterator();
+      while (en.hasNext())
       {
-        Object next = en.nextElement();
+        Object next = en.next();
         Object val = featureColours.get(next);
         if (val instanceof GraduatedColor)
         {
@@ -144,7 +145,7 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
       this.transparency = fr.transparency;
       if (fr.featureOrder != null)
       {
-        this.featureOrder = new Hashtable(fr.featureOrder);
+        this.featureOrder = new ConcurrentHashMap(fr.featureOrder);
       }
     }
   }
@@ -211,7 +212,7 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
    * This is used by the Molecule Viewer and Overview to get the accurate
    * colourof the rendered sequence
    */
-  public int findFeatureColour(int initialCol, SequenceI seq, int column)
+  public synchronized int findFeatureColour(int initialCol, SequenceI seq, int column)
   {
     if (!av.showSequenceFeatures)
     {
@@ -685,9 +686,10 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
     {
       minmax = new Hashtable();
     }
-    for (int i = 0; i < av.alignment.getHeight(); i++)
+    AlignmentI alignment=av.getAlignment();
+    for (int i = 0; i < alignment.getHeight(); i++)
     {
-      SequenceFeature[] features = av.alignment.getSequenceAt(i)
+      SequenceFeature[] features = alignment.getSequenceAt(i)
               .getDatasetSequence().getSequenceFeatures();
 
       if (features == null)
@@ -1122,7 +1124,7 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
 
     panel = new JPanel();
     panel.add(new JLabel("Description: ", JLabel.RIGHT));
-    description.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
+    description.setFont(JvSwingUtils.getTextAreaFont());
     description.setLineWrap(true);
     panel.add(new JScrollPane(description));
 
@@ -1402,7 +1404,7 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
 
   }
 
-  Hashtable featureOrder = null;
+  Map featureOrder = null;
 
   /**
    * analogous to colour - store a normalized ordering for all feature types in