merge from 2_4_Release branch
[jalview.git] / src / jalview / appletgui / FeatureRenderer.java
index 5e65409..cb9736e 100755 (executable)
@@ -1,17 +1,17 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer
- * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
- *
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
+ * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * 
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
  * of the License, or (at your option) any later version.
- *
+ * 
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- *
+ * 
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
@@ -24,13 +24,12 @@ import java.awt.*;
 
 import java.awt.event.*;
 
-
 import jalview.appletgui.FeatureSettings.MyCheckbox;
 import jalview.datamodel.*;
 
 /**
  * DOCUMENT ME!
- *
+ * 
  * @author $author$
  * @version $Revision$
  */
@@ -55,6 +54,7 @@ public class FeatureRenderer
   String[] renderOrder;
 
   FontMetrics fm;
+
   int charOffset;
 
   float transparency = 1f;
@@ -63,8 +63,9 @@ public class FeatureRenderer
 
   /**
    * Creates a new FeatureRenderer object.
-   *
-   * @param av DOCUMENT ME!
+   * 
+   * @param av
+   *                DOCUMENT ME!
    */
   public FeatureRenderer(AlignViewport av)
   {
@@ -84,18 +85,21 @@ public class FeatureRenderer
     transparency = fr.transparency;
   }
 
-
   static String lastFeatureAdded;
+
   static String lastFeatureGroupAdded;
+
   static String lastDescriptionAdded;
 
   int featureIndex = 0;
+
   boolean deleteFeature = false;
+
   Panel colourPanel;
+
   boolean amendFeatures(final SequenceI[] sequences,
-                        final SequenceFeature[] features,
-                        boolean newFeatures,
-                        final AlignmentPanel ap)
+          final SequenceFeature[] features, boolean newFeatures,
+          final AlignmentPanel ap)
   {
     Panel bigPanel = new Panel(new BorderLayout());
     final TextField name = new TextField(16);
@@ -108,74 +112,70 @@ public class FeatureRenderer
     deleteFeature = false;
 
     colourPanel = new Panel(null);
-    colourPanel.setSize(110,15);
+    colourPanel.setSize(110, 15);
     final FeatureRenderer fr = this;
 
     Panel panel = new Panel(new GridLayout(3, 1));
 
     Panel tmp;
 
-    ///////////////////////////////////////
-    ///MULTIPLE FEATURES AT SELECTED RESIDUE
-    if(!newFeatures && features.length>1)
+    // /////////////////////////////////////
+    // /MULTIPLE FEATURES AT SELECTED RESIDUE
+    if (!newFeatures && features.length > 1)
     {
-     panel = new Panel(new GridLayout(4, 1));
-     tmp = new Panel();
-     tmp.add(new Label("Select Feature: "));
-     overlaps = new Choice();
-     for(int i=0; i<features.length; i++)
-     {
-       String item = features[i].getType()
-        +"/"+features[i].getBegin()+"-"+features[i].getEnd();
-
-       if(features[i].getFeatureGroup()!=null)
-         item += " ("+features[i].getFeatureGroup()+")";
+      panel = new Panel(new GridLayout(4, 1));
+      tmp = new Panel();
+      tmp.add(new Label("Select Feature: "));
+      overlaps = new Choice();
+      for (int i = 0; i < features.length; i++)
+      {
+        String item = features[i].getType() + "/" + features[i].getBegin()
+                + "-" + features[i].getEnd();
 
-       overlaps.addItem(item);
-     }
+        if (features[i].getFeatureGroup() != null)
+          item += " (" + features[i].getFeatureGroup() + ")";
 
-     tmp.add(overlaps);
+        overlaps.addItem(item);
+      }
 
-     overlaps.addItemListener(new java.awt.event.ItemListener()
-     {
-       public void itemStateChanged(java.awt.event.ItemEvent e)
-       {
-         int index = overlaps.getSelectedIndex();
-         if (index != -1)
-         {
-           featureIndex = index;
-           name.setText(features[index].getType());
-           description.setText(features[index].getDescription());
-           source.setText(features[index].getFeatureGroup());
-           start.setText(features[index].getBegin()+"");
-           end.setText(features[index].getEnd()+"");
+      tmp.add(overlaps);
 
-           SearchResults highlight = new SearchResults();
-           highlight.addResult(sequences[0],
-                               features[index].getBegin(),
-                               features[index].getEnd());
+      overlaps.addItemListener(new java.awt.event.ItemListener()
+      {
+        public void itemStateChanged(java.awt.event.ItemEvent e)
+        {
+          int index = overlaps.getSelectedIndex();
+          if (index != -1)
+          {
+            featureIndex = index;
+            name.setText(features[index].getType());
+            description.setText(features[index].getDescription());
+            source.setText(features[index].getFeatureGroup());
+            start.setText(features[index].getBegin() + "");
+            end.setText(features[index].getEnd() + "");
 
-           ap.seqPanel.seqCanvas.highlightSearchResults(highlight);
+            SearchResults highlight = new SearchResults();
+            highlight.addResult(sequences[0], features[index].getBegin(),
+                    features[index].getEnd());
 
-         }
-         Color col = getColour(name.getText());
-         if (col == null)
-         {
-           col = new
-               jalview.schemes.UserColourScheme()
-               .createColourFromName(name.getText());
-         }
+            ap.seqPanel.seqCanvas.highlightSearchResults(highlight);
 
-         colourPanel.setBackground(col);
-       }
-     });
+          }
+          Color col = getColour(name.getText());
+          if (col == null)
+          {
+            col = new jalview.schemes.UserColourScheme()
+                    .createColourFromName(name.getText());
+          }
 
+          colourPanel.setBackground(col);
+        }
+      });
 
-     panel.add(tmp);
+      panel.add(tmp);
     }
-    //////////
-    //////////////////////////////////////
-
+    // ////////
+    // ////////////////////////////////////
 
     tmp = new Panel();
     panel.add(tmp);
@@ -184,7 +184,7 @@ public class FeatureRenderer
 
     tmp = new Panel();
     panel.add(tmp);
-    tmp.add(new Label("Group: ",Label.RIGHT));
+    tmp.add(new Label("Group: ", Label.RIGHT));
     tmp.add(source);
 
     tmp = new Panel();
@@ -238,19 +238,15 @@ public class FeatureRenderer
       }
     }
 
+    String title = newFeatures ? "Create New Sequence Feature(s)"
+            : "Amend/Delete Features for " + sequences[0].getName();
 
-    String title = newFeatures ? "Create New Sequence Feature(s)" :
-        "Amend/Delete Features for "
-        + sequences[0].getName();
-
-    final JVDialog dialog = new JVDialog(ap.alignFrame,
-                               title,
-                               true,
-                               385,240);
+    final JVDialog dialog = new JVDialog(ap.alignFrame, title, true, 385,
+            240);
 
     dialog.setMainPanel(bigPanel);
 
-    if(newFeatures)
+    if (newFeatures)
     {
       name.setText(lastFeatureAdded);
       source.setText(lastFeatureGroupAdded);
@@ -260,34 +256,32 @@ public class FeatureRenderer
       dialog.ok.setLabel("Amend");
       dialog.buttonPanel.add(deleteButton, 1);
       deleteButton.addActionListener(new ActionListener()
-          {
-            public void actionPerformed(ActionEvent evt)
-            {
-              deleteFeature = true;
-              dialog.setVisible(false);
-            }
-          });
+      {
+        public void actionPerformed(ActionEvent evt)
+        {
+          deleteFeature = true;
+          dialog.setVisible(false);
+        }
+      });
       name.setText(features[0].getType());
       source.setText(features[0].getFeatureGroup());
     }
 
-    start.setText(features[0].getBegin()+"");
-    end.setText(features[0].getEnd()+"");
+    start.setText(features[0].getBegin() + "");
+    end.setText(features[0].getEnd() + "");
     description.setText(features[0].getDescription());
 
     Color col = getColour(name.getText());
     if (col == null)
     {
-      col = new
-          jalview.schemes.UserColourScheme()
-          .createColourFromName(name.getText());
+      col = new jalview.schemes.UserColourScheme()
+              .createColourFromName(name.getText());
     }
 
     colourPanel.setBackground(col);
 
     dialog.setResizable(true);
 
-
     colourPanel.addMouseListener(new java.awt.event.MouseAdapter()
     {
       public void mousePressed(java.awt.event.MouseEvent evt)
@@ -302,18 +296,17 @@ public class FeatureRenderer
 
     if (dialog.accept)
     {
-      //This ensures that the last sequence
-      //is refreshed and new features are rendered
+      // This ensures that the last sequence
+      // is refreshed and new features are rendered
       lastSeq = null;
       lastFeatureAdded = name.getText().trim();
       lastFeatureGroupAdded = source.getText().trim();
       lastDescriptionAdded = description.getText().replace('\n', ' ');
     }
 
-    if(lastFeatureGroupAdded !=null && lastFeatureGroupAdded.length()<1)
+    if (lastFeatureGroupAdded != null && lastFeatureGroupAdded.length() < 1)
       lastFeatureGroupAdded = null;
 
-
     if (!newFeatures)
     {
       SequenceFeature sf = features[featureIndex];
@@ -327,10 +320,10 @@ public class FeatureRenderer
         try
         {
           sf.begin = Integer.parseInt(start.getText());
-          sf.end =  Integer.parseInt(end.getText());
+          sf.end = Integer.parseInt(end.getText());
+        } catch (NumberFormatException ex)
+        {
         }
-        catch (NumberFormatException ex)
-        {}
 
         ffile.parseDescriptionHTML(sf, false);
       }
@@ -342,7 +335,7 @@ public class FeatureRenderer
     }
     else
     {
-      if (dialog.accept && name.getText().length()>0)
+      if (dialog.accept && name.getText().length() > 0)
       {
         for (int i = 0; i < sequences.length; i++)
         {
@@ -366,17 +359,17 @@ public class FeatureRenderer
         col = colourPanel.getBackground();
         setColour(lastFeatureAdded, col);
 
-        if(lastFeatureGroupAdded!=null)
+        if (lastFeatureGroupAdded != null)
         {
           featureGroups.put(lastFeatureGroupAdded, new Boolean(true));
-          av.featuresDisplayed.put(lastFeatureGroupAdded,
-                                   new Integer(col.getRGB()));
+          av.featuresDisplayed.put(lastFeatureGroupAdded, new Integer(col
+                  .getRGB()));
         }
         findAllFeatures();
 
-        String [] tro = new String[renderOrder.length];
-        tro[0] = renderOrder[renderOrder.length-1];
-        System.arraycopy(renderOrder,0,tro,1,renderOrder.length-1);
+        String[] tro = new String[renderOrder.length];
+        tro[0] = renderOrder[renderOrder.length - 1];
+        System.arraycopy(renderOrder, 0, tro, 1, renderOrder.length - 1);
         renderOrder = tro;
 
         ap.paintAlignment(true);
@@ -396,7 +389,6 @@ public class FeatureRenderer
     return true;
   }
 
-
   public Color findFeatureColour(Color initialCol, SequenceI seq, int i)
   {
     overview = true;
@@ -428,41 +420,50 @@ public class FeatureRenderer
       return initialCol;
     }
 
-    return new Color( ( (Integer) currentColour).intValue());
+    return new Color(((Integer) currentColour).intValue());
   }
 
   /**
-   * This is used by the Molecule Viewer to get the accurate colour
-   * of the rendered sequence
+   * This is used by the Molecule Viewer to get the accurate colour of the
+   * rendered sequence
    */
   boolean overview = false;
 
-
   /**
    * DOCUMENT ME!
-   *
-   * @param g DOCUMENT ME!
-   * @param seq DOCUMENT ME!
-   * @param sg DOCUMENT ME!
-   * @param start DOCUMENT ME!
-   * @param end DOCUMENT ME!
-   * @param x1 DOCUMENT ME!
-   * @param y1 DOCUMENT ME!
-   * @param width DOCUMENT ME!
-   * @param height DOCUMENT ME!
+   * 
+   * @param g
+   *                DOCUMENT ME!
+   * @param seq
+   *                DOCUMENT ME!
+   * @param sg
+   *                DOCUMENT ME!
+   * @param start
+   *                DOCUMENT ME!
+   * @param end
+   *                DOCUMENT ME!
+   * @param x1
+   *                DOCUMENT ME!
+   * @param y1
+   *                DOCUMENT ME!
+   * @param width
+   *                DOCUMENT ME!
+   * @param height
+   *                DOCUMENT ME!
    */
   // String type;
   // SequenceFeature sf;
-
   SequenceI lastSeq;
+
   SequenceFeature[] sequenceFeatures;
+
   int sfSize, sfindex, spos, epos;
 
   synchronized public void drawSequence(Graphics g, SequenceI seq,
-                           int start, int end, int y1)
+          int start, int end, int y1)
   {
     if (seq.getSequenceFeatures() == null
-        || seq.getSequenceFeatures().length == 0)
+            || seq.getSequenceFeatures().length == 0)
     {
       return;
     }
@@ -472,7 +473,8 @@ public class FeatureRenderer
       transparencySetter.setTransparency(g, transparency);
     }
 
-    if (lastSeq == null || seq != lastSeq || sequenceFeatures!=seq.getSequenceFeatures())
+    if (lastSeq == null || seq != lastSeq
+            || sequenceFeatures != seq.getSequenceFeatures())
     {
       lastSeq = seq;
       sequenceFeatures = seq.getSequenceFeatures();
@@ -518,57 +520,60 @@ public class FeatureRenderer
         }
 
         if (featureGroups != null
-            && sequenceFeatures[sfindex].featureGroup != null
-            &&
-            featureGroups.containsKey(sequenceFeatures[sfindex].featureGroup)
-            &&
-            ! ( (Boolean) featureGroups.get(sequenceFeatures[sfindex].
-                                            featureGroup)).
-            booleanValue())
+                && sequenceFeatures[sfindex].featureGroup != null
+                && featureGroups
+                        .containsKey(sequenceFeatures[sfindex].featureGroup)
+                && !((Boolean) featureGroups
+                        .get(sequenceFeatures[sfindex].featureGroup))
+                        .booleanValue())
         {
           continue;
         }
 
-        if (!overview && (sequenceFeatures[sfindex].getBegin() > epos
-                          || sequenceFeatures[sfindex].getEnd() < spos))
+        if (!overview
+                && (sequenceFeatures[sfindex].getBegin() > epos || sequenceFeatures[sfindex]
+                        .getEnd() < spos))
         {
           continue;
         }
 
         if (overview)
         {
-          if (sequenceFeatures[sfindex].begin <= start &&
-              sequenceFeatures[sfindex].end >= start)
+          if (sequenceFeatures[sfindex].begin <= start
+                  && sequenceFeatures[sfindex].end >= start)
           {
-            currentColour = av.featuresDisplayed.get(sequenceFeatures[sfindex].
-                type);
+            currentColour = av.featuresDisplayed
+                    .get(sequenceFeatures[sfindex].type);
           }
 
         }
         else if (sequenceFeatures[sfindex].type.equals("disulfide bond"))
         {
 
-          renderFeature(g, seq,
-                        seq.findIndex(sequenceFeatures[sfindex].begin) - 1,
-                        seq.findIndex(sequenceFeatures[sfindex].begin) - 1,
-                        new Color( ( (Integer) av.featuresDisplayed.get(
-                            sequenceFeatures[sfindex].type)).intValue()),
-                        start, end, y1);
-          renderFeature(g, seq,
-                        seq.findIndex(sequenceFeatures[sfindex].end) - 1,
-                        seq.findIndex(sequenceFeatures[sfindex].end) - 1,
-                        new Color( ( (Integer) av.featuresDisplayed.get(
-                            sequenceFeatures[sfindex].type)).intValue()),
-                        start, end, y1);
+          renderFeature(
+                  g,
+                  seq,
+                  seq.findIndex(sequenceFeatures[sfindex].begin) - 1,
+                  seq.findIndex(sequenceFeatures[sfindex].begin) - 1,
+                  new Color(((Integer) av.featuresDisplayed
+                          .get(sequenceFeatures[sfindex].type)).intValue()),
+                  start, end, y1);
+          renderFeature(
+                  g,
+                  seq,
+                  seq.findIndex(sequenceFeatures[sfindex].end) - 1,
+                  seq.findIndex(sequenceFeatures[sfindex].end) - 1,
+                  new Color(((Integer) av.featuresDisplayed
+                          .get(sequenceFeatures[sfindex].type)).intValue()),
+                  start, end, y1);
 
         }
         else
         {
-          renderFeature(g, seq,
-                        seq.findIndex(sequenceFeatures[sfindex].begin) - 1,
-                        seq.findIndex(sequenceFeatures[sfindex].end) - 1,
-                        getColour(sequenceFeatures[sfindex].type),
-                        start, end, y1);
+          renderFeature(g, seq, seq
+                  .findIndex(sequenceFeatures[sfindex].begin) - 1, seq
+                  .findIndex(sequenceFeatures[sfindex].end) - 1,
+                  getColour(sequenceFeatures[sfindex].type), start, end, y1);
         }
 
       }
@@ -581,13 +586,14 @@ public class FeatureRenderer
   }
 
   char s;
+
   int i;
-  void renderFeature(Graphics g, SequenceI seq,
-                     int fstart, int fend, Color featureColour, int start,
-                     int end, int y1)
+
+  void renderFeature(Graphics g, SequenceI seq, int fstart, int fend,
+          Color featureColour, int start, int end, int y1)
   {
 
-    if ( ( (fstart <= end) && (fend >= start)))
+    if (((fstart <= end) && (fend >= start)))
     {
       if (fstart < start)
       { // fix for if the feature we have starts before the sequence start,
@@ -610,7 +616,8 @@ public class FeatureRenderer
 
         g.setColor(featureColour);
 
-        g.fillRect( (i - start) * av.charWidth, y1, av.charWidth, av.charHeight);
+        g.fillRect((i - start) * av.charWidth, y1, av.charWidth,
+                av.charHeight);
 
         if (!av.validCharWidth)
         {
@@ -619,9 +626,9 @@ public class FeatureRenderer
 
         g.setColor(Color.white);
         charOffset = (av.charWidth - fm.charWidth(s)) / 2;
-        g.drawString(String.valueOf(s),
-                     charOffset + (av.charWidth * (i - start)),
-                     (y1 + av.charHeight) - av.charHeight / 5); //pady = height / 5;
+        g.drawString(String.valueOf(s), charOffset
+                + (av.charWidth * (i - start)), (y1 + av.charHeight)
+                - av.charHeight / 5); // pady = height / 5;
 
       }
     }
@@ -629,15 +636,14 @@ public class FeatureRenderer
 
   void findAllFeatures()
   {
-    jalview.schemes.UserColourScheme ucs = new
-        jalview.schemes.UserColourScheme();
+    jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme();
 
     av.featuresDisplayed = new Hashtable();
     Vector allfeatures = new Vector();
     for (int i = 0; i < av.alignment.getHeight(); i++)
     {
-      SequenceFeature[] features = av.alignment.getSequenceAt(i).
-          getSequenceFeatures();
+      SequenceFeature[] features = av.alignment.getSequenceAt(i)
+              .getSequenceFeatures();
 
       if (features == null)
       {
@@ -651,14 +657,12 @@ public class FeatureRenderer
         {
           if (getColour(features[index].getType()) == null)
           {
-            featureColours.put(features[index].getType(),
-                               ucs.createColourFromName(features[index].
-                getType()));
+            featureColours.put(features[index].getType(), ucs
+                    .createColourFromName(features[index].getType()));
           }
 
-          av.featuresDisplayed.put(features[index].getType(),
-                                   new Integer(getColour(features[index].
-              getType()).getRGB()));
+          av.featuresDisplayed.put(features[index].getType(), new Integer(
+                  getColour(features[index].getType()).getRGB()));
           allfeatures.addElement(features[index].getType());
         }
         index++;
@@ -679,8 +683,7 @@ public class FeatureRenderer
   {
     if (!featureColours.containsKey(featureType))
     {
-      jalview.schemes.UserColourScheme ucs = new
-          jalview.schemes.UserColourScheme();
+      jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme();
       Color col = ucs.createColourFromName(featureType);
       featureColours.put(featureType, col);
       return col;
@@ -689,7 +692,6 @@ public class FeatureRenderer
       return (Color) featureColours.get(featureType);
   }
 
-
   public void setColour(String featureType, Color col)
   {
     featureColours.put(featureType, col);
@@ -705,22 +707,11 @@ public class FeatureRenderer
       av.featuresDisplayed.clear();
     }
 
-   /* if (visibleNew)
-    {
-      if (av.featuresDisplayed != null)
-      {
-        av.featuresDisplayed.clear();
-      }
-      else
-      {
-        av.featuresDisplayed = new Hashtable();
-      }
-    }
-    if (data == null)
-    {
-      return;
-    }*/
-
+    /*
+     * if (visibleNew) { if (av.featuresDisplayed != null) {
+     * av.featuresDisplayed.clear(); } else { av.featuresDisplayed = new
+     * Hashtable(); } } if (data == null) { return; }
+     */
 
     renderOrder = new String[data.length];
 
@@ -730,113 +721,126 @@ public class FeatureRenderer
       {
         String type = data[i][0].toString();
         setColour(type, (Color) data[i][1]);
-        if ( ( (Boolean) data[i][2]).booleanValue())
+        if (((Boolean) data[i][2]).booleanValue())
         {
-          av.featuresDisplayed.put(type, new Integer(getColour(type).getRGB()));
+          av.featuresDisplayed.put(type, new Integer(getColour(type)
+                  .getRGB()));
         }
 
         renderOrder[data.length - i - 1] = type;
       }
     }
   }
+
   /**
-   * @return a simple list of feature group names or null 
+   * @return a simple list of feature group names or null
    */
   public String[] getGroups()
   {
     buildGroupHash();
-    if (featureGroups!=null)
+    if (featureGroups != null)
     {
       String[] gps = new String[featureGroups.size()];
       Enumeration gn = featureGroups.keys();
-      int i=0;
+      int i = 0;
       while (gn.hasMoreElements())
       {
-        gps[i++]  = (String) gn.nextElement();
+        gps[i++] = (String) gn.nextElement();
       }
       return gps;
     }
     return null;
   }
+
   /**
    * get visible or invisible groups
-   * @param visible true to return visible groups, false to return hidden ones.
+   * 
+   * @param visible
+   *                true to return visible groups, false to return hidden ones.
    * @return list of groups
    */
-  public String[] getGroups(boolean visible) 
+  public String[] getGroups(boolean visible)
   {
     buildGroupHash();
-    if (featureGroups!=null)
+    if (featureGroups != null)
     {
       Vector gp = new Vector();
-      
+
       Enumeration gn = featureGroups.keys();
       while (gn.hasMoreElements())
       {
         String nm = (String) gn.nextElement();
         Boolean state = (Boolean) featureGroups.get(nm);
-        if (state.booleanValue()==visible)
+        if (state.booleanValue() == visible)
         {
           gp.addElement(nm);
         }
       }
       String[] gps = new String[gp.size()];
       gp.copyInto(gps);
-      
-      int i=0;
+
+      int i = 0;
       while (gn.hasMoreElements())
       {
-        gps[i++]  = (String) gn.nextElement();
+        gps[i++] = (String) gn.nextElement();
       }
       return gps;
     }
     return null;
   }
+
   /**
    * set all feature groups in toset to be visible or invisible
-   * @param toset group names
-   * @param visible the state of the named groups to set
+   * 
+   * @param toset
+   *                group names
+   * @param visible
+   *                the state of the named groups to set
    */
   public void setGroupState(String[] toset, boolean visible)
   {
     buildGroupHash();
-    if (toset!=null && toset.length>0 && featureGroups!=null)
+    if (toset != null && toset.length > 0 && featureGroups != null)
     {
       boolean rdrw = false;
-      for (int i=0;i<toset.length; i++)
+      for (int i = 0; i < toset.length; i++)
       {
         Object st = featureGroups.get(toset[i]);
-        if (st!=null)
+        if (st != null)
         {
           featureGroups.put(toset[i], new Boolean(visible));
-          rdrw = rdrw || (visible!=((Boolean) st).booleanValue());
+          rdrw = rdrw || (visible != ((Boolean) st).booleanValue());
         }
       }
       if (rdrw)
       {
-        if (this.av!=null)
-          if (this.av.featureSettings!=null)
+        if (this.av != null)
+          if (this.av.featureSettings != null)
           {
             av.featureSettings.rebuildGroups();
             this.av.featureSettings.resetTable(true);
-          } else {
-            buildFeatureHash();
           }
-          if (av!=null)
+          else
           {
-            av.alignmentChanged(null);
+            buildFeatureHash();
           }
+        if (av != null)
+        {
+          av.alignmentChanged(null);
+        }
       }
     }
   }
+
   /**
-   * analyse alignment for groups and hash tables
-   * (used to be embedded in FeatureSettings.setTableData)
+   * analyse alignment for groups and hash tables (used to be embedded in
+   * FeatureSettings.setTableData)
+   * 
    * @return true if features are on the alignment
    */
   public boolean buildGroupHash()
   {
-    boolean alignmentHasFeatures=false;
+    boolean alignmentHasFeatures = false;
     if (featureGroups == null)
     {
       featureGroups = new Hashtable();
@@ -868,8 +872,10 @@ public class FeatureRenderer
             boolean visible = true;
             if (featureGroups.containsKey(group))
             {
-              visible = ( (Boolean) featureGroups.get(group)).booleanValue();
-            } else {
+              visible = ((Boolean) featureGroups.get(group)).booleanValue();
+            }
+            else
+            {
               featureGroups.put(group, new Boolean(visible));
             }
           }
@@ -882,17 +888,21 @@ public class FeatureRenderer
         index++;
       }
     }
-    
+
     return alignmentHasFeatures;
   }
+
   /**
-   * rebuild the featuresDisplayed and renderorder list based on the featureGroups hash and any existing display state
-   * and force a repaint if necessary
+   * rebuild the featuresDisplayed and renderorder list based on the
+   * featureGroups hash and any existing display state and force a repaint if
+   * necessary
+   * 
    * @return true if alignment has visible features
    */
-  public boolean buildFeatureHash() {
-    boolean alignmentHasFeatures=false;
-    if (featureGroups==null)
+  public boolean buildFeatureHash()
+  {
+    boolean alignmentHasFeatures = false;
+    if (featureGroups == null)
     {
       alignmentHasFeatures = buildGroupHash();
     }
@@ -921,10 +931,10 @@ public class FeatureRenderer
           group = tmpfeatures[index].featureGroup;
           if (featureGroups.containsKey(group))
           {
-            visible = ( (Boolean) featureGroups.get(group)).booleanValue();
+            visible = ((Boolean) featureGroups.get(group)).booleanValue();
           }
         }
-        
+
         if (visible && !allFeatures.contains(tmpfeatures[index].getType()))
         {
           allFeatures.addElement(tmpfeatures[index].getType());
@@ -932,33 +942,35 @@ public class FeatureRenderer
         index++;
       }
     }
-    if (allFeatures.size()>0)
+    if (allFeatures.size() > 0)
     {
       String[] neworder = new String[allFeatures.size()];
-      int p=neworder.length-1;
-      for (int i=renderOrder.length-1; i>=0; i--)
+      int p = neworder.length - 1;
+      for (int i = renderOrder.length - 1; i >= 0; i--)
       {
         if (allFeatures.contains(renderOrder[i]))
         {
           neworder[p--] = renderOrder[i];
           allFeatures.removeElement(renderOrder[i]);
-        } else {
+        }
+        else
+        {
           av.featuresDisplayed.remove(renderOrder[i]);
         }
       }
-      for (int i=allFeatures.size()-1; i>0; i++)
+      for (int i = allFeatures.size() - 1; i > 0; i++)
       {
         Object e = allFeatures.elementAt(i);
-        if (e!=null)
+        if (e != null)
         {
           neworder[p--] = (String) e;
-          av.featuresDisplayed.put(e, getColour((String)e));
+          av.featuresDisplayed.put(e, getColour((String) e));
         }
       }
       renderOrder = neworder;
       return true;
     }
-    
+
     return alignmentHasFeatures;
   }
 }
@@ -967,9 +979,8 @@ class TransparencySetter
 {
   void setTransparency(Graphics g, float value)
   {
-     Graphics2D g2 = (Graphics2D) g;
-     g2.setComposite(
-        AlphaComposite.getInstance(
-             AlphaComposite.SRC_OVER, value));
+    Graphics2D g2 = (Graphics2D) g;
+    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
+            value));
   }
 }