refactor to jalview.api methods
[jalview.git] / src / jalview / gui / FeatureRenderer.java
index 09dccfe..02ebc34 100755 (executable)
@@ -36,7 +36,7 @@ import jalview.schemes.GraduatedColor;
  * @author $author$
  * @version $Revision$
  */
-public class FeatureRenderer
+public class FeatureRenderer implements jalview.api.FeatureRenderer
 {
   AlignmentPanel ap;
 
@@ -105,13 +105,47 @@ public class FeatureRenderer
       this.featureOrder = featureOrder;
     }
 
+    /**
+     * create an independent instance of the feature renderer settings
+     * 
+     * @param fr
+     */
     public FeatureRendererSettings(FeatureRenderer fr)
     {
-      this.renderOrder = fr.renderOrder;
-      this.featureGroups = fr.featureGroups;
-      this.featureColours = fr.featureColours;
+      renderOrder = null;
+      featureGroups = new Hashtable();
+      featureColours = new Hashtable();
+      featureOrder = new Hashtable();
+      if (fr.renderOrder != null)
+      {
+        this.renderOrder = new String[fr.renderOrder.length];
+        System.arraycopy(fr.renderOrder, 0, renderOrder, 0,
+                renderOrder.length);
+      }
+      if (fr.featureGroups != null)
+      {
+        this.featureGroups = new Hashtable(fr.featureGroups);
+      }
+      if (fr.featureColours != null)
+      {
+        this.featureColours = new Hashtable(fr.featureColours);
+      }
+      Enumeration en = fr.featureColours.keys();
+      while (en.hasMoreElements())
+      {
+        Object next = en.nextElement();
+        Object val = featureColours.get(next);
+        if (val instanceof GraduatedColor)
+        {
+          featureColours
+                  .put(next, new GraduatedColor((GraduatedColor) val));
+        }
+      }
       this.transparency = fr.transparency;
-      this.featureOrder = fr.featureOrder;
+      if (fr.featureOrder != null)
+      {
+        this.featureOrder = new Hashtable(fr.featureOrder);
+      }
     }
   }
 
@@ -1329,7 +1363,7 @@ public class FeatureRenderer
       {
         String type = data[i][0].toString();
         setColour(type, data[i][1]); // todo : typesafety - feature color
-                                     // interface object
+        // interface object
         if (((Boolean) data[i][2]).booleanValue())
         {
           av.featuresDisplayed.put(type, new Integer(getColour(type)