JAL-3438 spotless for 2.11.2.0
[jalview.git] / src / jalview / appletgui / AlignViewport.java
index e0a6a71..d64cd75 100644 (file)
 /*
- * 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
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  * Jalview 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 3 of the License, or (at your option) any later version.
- * 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
  * Jalview 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 Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.appletgui;
 
-import java.util.*;
-
-import java.awt.*;
-
-import jalview.analysis.*;
-import jalview.api.AlignCalcManagerI;
 import jalview.api.AlignViewportI;
-import jalview.bin.*;
-import jalview.datamodel.*;
-import jalview.schemes.*;
+import jalview.api.FeatureSettingsModelI;
+import jalview.bin.JalviewLite;
+import jalview.commands.CommandI;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.HiddenColumns;
+import jalview.datamodel.SearchResults;
+import jalview.datamodel.SearchResultsI;
+import jalview.datamodel.SequenceGroup;
+import jalview.renderer.ResidueShader;
+import jalview.schemes.ColourSchemeProperty;
+import jalview.schemes.UserColourScheme;
 import jalview.structure.SelectionSource;
+import jalview.structure.StructureSelectionManager;
 import jalview.structure.VamsasSource;
 import jalview.viewmodel.AlignmentViewport;
-import jalview.workers.ConservationThread;
-import jalview.workers.ConsensusThread;
-
-public class AlignViewport extends AlignmentViewport implements AlignViewportI, SelectionSource, VamsasSource 
-{
-  int startRes;
 
-  int endRes;
-
-  int startSeq;
-
-  int endSeq;
+import java.awt.Font;
+import java.awt.FontMetrics;
 
+public class AlignViewport extends AlignmentViewport
+        implements SelectionSource
+{
   boolean cursorMode = false;
 
-  boolean showJVSuffix = true;
-
-  boolean showText = true;
-
-  boolean showColourText = false;
-
-  boolean showBoxes = true;
-
-  boolean wrapAlignment = false;
-
-  boolean renderGaps = true;
-
-  boolean showSequenceFeatures = false;
-
-  boolean showAnnotation = true;
-
-  boolean upperCasebold = false;
-
-
-  int charHeight;
-
-  int charWidth;
-
-  int wrappedWidth;
-
   Font font = new Font("SansSerif", Font.PLAIN, 10);
 
   boolean validCharWidth = true;
 
-  int threshold;
-
-  int increment;
-
-  NJTree currentTree = null;
-
-  boolean scaleAboveWrapped = true;
-
-  boolean scaleLeftWrapped = true;
-
-  boolean scaleRightWrapped = true;
-
-  // The following vector holds the features which are
-  // currently visible, in the correct order or rendering
-  public Hashtable featuresDisplayed;
-
-
-  boolean showHiddenMarkers = true;
-
   public jalview.bin.JalviewLite applet;
 
-  Hashtable sequenceColours;
-
-  boolean MAC = false;
-
-  Stack historyList = new Stack();
-
-  Stack redoList = new Stack();
-    
-  public void finalize() {
-    applet=null;
-    quality=null;
-    alignment=null;
-    colSel=null;
-  }
+  private AnnotationColumnChooser annotationColumnSelectionState;
 
   public AlignViewport(AlignmentI al, JalviewLite applet)
   {
+    super(al);
     calculator = new jalview.workers.AlignCalcManager();
     this.applet = applet;
-    setAlignment(al);
+
     // we always pad gaps
     this.setPadGaps(true);
-    this.startRes = 0;
-    this.endRes = al.getWidth() - 1;
-    this.startSeq = 0;
-    this.endSeq = al.getHeight() - 1;
+
     if (applet != null)
     {
       // get the width and height scaling factors if they were specified
@@ -129,21 +71,21 @@ public class AlignViewport extends AlignmentViewport implements AlignViewportI,
       {
         try
         {
-          widthScale = new Float(param).floatValue();
+          widthScale = Float.valueOf(param).floatValue();
         } catch (Exception e)
         {
         }
         if (widthScale <= 1.0)
         {
-          System.err
-                  .println("Invalid alignment character width scaling factor ("
+          System.err.println(
+                  "Invalid alignment character width scaling factor ("
                           + widthScale + "). Ignoring.");
           widthScale = 1;
         }
-        if (applet.debug)
+        if (JalviewLite.debug)
         {
-          System.err
-                  .println("Alignment character width scaling factor is now "
+          System.err.println(
+                  "Alignment character width scaling factor is now "
                           + widthScale);
         }
       }
@@ -152,72 +94,93 @@ public class AlignViewport extends AlignmentViewport implements AlignViewportI,
       {
         try
         {
-          heightScale = new Float(param).floatValue();
+          heightScale = Float.valueOf(param).floatValue();
         } catch (Exception e)
         {
         }
         if (heightScale <= 1.0)
         {
-          System.err
-                  .println("Invalid alignment character height scaling factor ("
+          System.err.println(
+                  "Invalid alignment character height scaling factor ("
                           + heightScale + "). Ignoring.");
           heightScale = 1;
         }
-        if (applet.debug)
+        if (JalviewLite.debug)
         {
-          System.err
-                  .println("Alignment character height scaling factor is now "
+          System.err.println(
+                  "Alignment character height scaling factor is now "
                           + heightScale);
         }
       }
     }
-    setFont(font);
-
-    MAC = new jalview.util.Platform().isAMac();
+    setFont(font, true);
 
     if (applet != null)
     {
-      showJVSuffix = applet.getDefaultParameter("showFullId", showJVSuffix);
+      setShowJVSuffix(
+              applet.getDefaultParameter("showFullId", getShowJVSuffix()));
+
+      setShowAnnotation(applet.getDefaultParameter("showAnnotation",
+              isShowAnnotation()));
+
+      showConservation = applet.getDefaultParameter("showConservation",
+              showConservation);
 
-      showAnnotation = applet.getDefaultParameter("showAnnotation", showAnnotation);
-      
-      showConservation = applet.getDefaultParameter("showConservation", showConservation);
-      
       showQuality = applet.getDefaultParameter("showQuality", showQuality);
 
-      showConsensus = applet.getDefaultParameter("showConsensus", showConsensus);
+      showConsensus = applet.getDefaultParameter("showConsensus",
+              showConsensus);
+
+      showOccupancy = applet.getDefaultParameter("showOccupancy",
+              showOccupancy);
 
-      showUnconserved = applet.getDefaultParameter("showUnconserved", showUnconserved);
+      setShowUnconserved(applet.getDefaultParameter("showUnconserved",
+              getShowUnconserved()));
+
+      setScaleProteinAsCdna(applet.getDefaultParameter("scaleProteinAsCdna",
+              isScaleProteinAsCdna()));
 
       String param = applet.getParameter("upperCase");
       if (param != null)
       {
         if (param.equalsIgnoreCase("bold"))
         {
-          upperCasebold = true;
+          setUpperCasebold(true);
         }
       }
       sortByTree = applet.getDefaultParameter("sortByTree", sortByTree);
 
-      followHighlight = applet.getDefaultParameter("automaticScrolling",followHighlight);
-      followSelection = followHighlight;
+      setFollowHighlight(applet.getDefaultParameter("automaticScrolling",
+              isFollowHighlight()));
+      followSelection = isFollowHighlight();
+
+      showSequenceLogo = applet.getDefaultParameter("showSequenceLogo",
+              showSequenceLogo);
 
-      showSequenceLogo = applet.getDefaultParameter("showSequenceLogo", showSequenceLogo);
+      normaliseSequenceLogo = applet.getDefaultParameter(
+              "normaliseSequenceLogo", applet.getDefaultParameter(
+                      "normaliseLogo", normaliseSequenceLogo));
 
-      normaliseSequenceLogo = applet.getDefaultParameter("normaliseSequenceLogo", normaliseSequenceLogo);
+      showGroupConsensus = applet.getDefaultParameter("showGroupConsensus",
+              showGroupConsensus);
+
+      showGroupConservation = applet.getDefaultParameter(
+              "showGroupConservation", showGroupConservation);
+
+      showConsensusHistogram = applet.getDefaultParameter(
+              "showConsensusHistogram", showConsensusHistogram);
 
-      showGroupConsensus = applet.getDefaultParameter("showGroupConsensus", showGroupConsensus);
-      
-      showGroupConservation = applet.getDefaultParameter("showGroupConservation", showGroupConservation);
-        
-      showConsensusHistogram = applet.getDefaultParameter("showConsensusHistogram", showConsensusHistogram);
-      
     }
 
     if (applet != null)
     {
-      String colour = applet.getParameter("defaultColour");
-
+      String colour = al.isNucleotide()
+              ? applet.getParameter("defaultColourNuc")
+              : applet.getParameter("defaultColourProt");
+      if (colour == null)
+      {
+        colour = applet.getParameter("defaultColour");
+      }
       if (colour == null)
       {
         colour = applet.getParameter("userDefinedColour");
@@ -229,137 +192,35 @@ public class AlignViewport extends AlignmentViewport implements AlignViewportI,
 
       if (colour != null)
       {
-        globalColourScheme = ColourSchemeProperty.getColour(alignment,
-                colour);
-        if (globalColourScheme != null)
+        residueShading = new ResidueShader(ColourSchemeProperty
+                .getColourScheme(this, alignment, colour));
+        if (residueShading != null)
         {
-          globalColourScheme.setConsensus(hconsensus);
+          residueShading.setConsensus(hconsensus);
         }
       }
 
       if (applet.getParameter("userDefinedColour") != null)
       {
-        ((UserColourScheme) globalColourScheme).parseAppletParameter(applet
-                .getParameter("userDefinedColour"));
+        residueShading = new ResidueShader(new UserColourScheme(
+                applet.getParameter("userDefinedColour")));
       }
     }
     initAutoAnnotation();
 
   }
 
-  public void showSequenceFeatures(boolean b)
-  {
-    showSequenceFeatures = b;
-  }
-
-  public boolean getShowSequenceFeatures()
-  {
-    return showSequenceFeatures;
-  }
-
-
-  /**
-   * get the consensus sequence as displayed under the PID consensus annotation
-   * row.
-   * 
-   * @return consensus sequence as a new sequence object
-   */
-  public SequenceI getConsensusSeq()
-  {
-    if (consensus == null)
-    {
-      updateConsensus(null);
-    }
-    if (consensus == null)
-    {
-      return null;
-    }
-    StringBuffer seqs = new StringBuffer();
-    for (int i = 0; i < consensus.annotations.length; i++)
-    {
-      if (consensus.annotations[i] != null)
-      {
-        if (consensus.annotations[i].description.charAt(0) == '[')
-        {
-          seqs.append(consensus.annotations[i].description.charAt(1));
-        }
-        else
-        {
-          seqs.append(consensus.annotations[i].displayCharacter);
-        }
-      }
-    }
-    SequenceI sq = new Sequence("Consensus", seqs.toString());
-    sq.setDescription("Percentage Identity Consensus "
-            + ((ignoreGapsInConsensusCalculation) ? " without gaps" : ""));
-    return sq;
-  }
-
-  public int getStartRes()
-  {
-    return startRes;
-  }
-
-  public int getEndRes()
-  {
-    return endRes;
-  }
-
-  public int getStartSeq()
-  {
-    return startSeq;
-  }
-
-  public void setStartRes(int res)
-  {
-    this.startRes = res;
-  }
-
-  public void setStartSeq(int seq)
-  {
-    this.startSeq = seq;
-  }
-
-  public void setEndRes(int res)
-  {
-    if (res > alignment.getWidth() - 1)
-    {
-      // log.System.out.println(" Corrected res from " + res + " to maximum " +
-      // (alignment.getWidth()-1));
-      res = alignment.getWidth() - 1;
-    }
-    if (res < 0)
-    {
-      res = 0;
-    }
-    this.endRes = res;
-  }
-
-  public void setEndSeq(int seq)
-  {
-    if (seq > alignment.getHeight())
-    {
-      seq = alignment.getHeight();
-    }
-    if (seq < 0)
-    {
-      seq = 0;
-    }
-    this.endSeq = seq;
-  }
-
-  public int getEndSeq()
-  {
-    return endSeq;
-  }
-
   java.awt.Frame nullFrame;
 
   protected FeatureSettings featureSettings = null;
 
   private float heightScale = 1, widthScale = 1;
 
-  public void setFont(Font f)
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public void setFont(Font f, boolean setGrid)
   {
     font = f;
     if (nullFrame == null)
@@ -368,15 +229,19 @@ public class AlignViewport extends AlignmentViewport implements AlignViewportI,
       nullFrame.addNotify();
     }
 
-    java.awt.FontMetrics fm = nullFrame.getGraphics().getFontMetrics(font);
-    setCharHeight((int) (heightScale * fm.getHeight()));
-    charWidth = (int) (widthScale * fm.charWidth('M'));
+    if (setGrid)
+    {
+      FontMetrics fm = nullFrame.getGraphics().getFontMetrics(font);
+      setCharHeight((int) (heightScale * fm.getHeight()));
+      setCharWidth((int) (widthScale * fm.charWidth('M')));
+    }
 
-    if (upperCasebold)
+    if (isUpperCasebold())
     {
       Font f2 = new Font(f.getName(), Font.BOLD, f.getSize());
-      fm = nullFrame.getGraphics().getFontMetrics(f2);
-      charWidth = (int) (widthScale * (fm.stringWidth("MMMMMMMMMMM") / 10));
+      FontMetrics fm = nullFrame.getGraphics().getFontMetrics(f2);
+      setCharWidth(
+              (int) (widthScale * (fm.stringWidth("MMMMMMMMMMM") / 10)));
     }
   }
 
@@ -385,345 +250,172 @@ public class AlignViewport extends AlignmentViewport implements AlignViewportI,
     return font;
   }
 
-  public int getCharWidth()
-  {
-    return charWidth;
-  }
-
-  public void setCharHeight(int h)
-  {
-    this.charHeight = h;
-  }
-
-  public int getCharHeight()
-  {
-    return charHeight;
-  }
-
-  public void setWrappedWidth(int w)
-  {
-    this.wrappedWidth = w;
-  }
-
-  public int getwrappedWidth()
-  {
-    return wrappedWidth;
-  }
-
-  public AlignmentI getAlignment()
-  {
-    return alignment;
-  }
-
-  public void setAlignment(AlignmentI align)
-  {
-    this.alignment = align;
-  }
-
-  public void setWrapAlignment(boolean state)
-  {
-    wrapAlignment = state;
-  }
-
-  public void setShowText(boolean state)
-  {
-    showText = state;
-  }
-
-  public void setRenderGaps(boolean state)
-  {
-    renderGaps = state;
-  }
-
-  public boolean getColourText()
-  {
-    return showColourText;
-  }
-
-  public void setColourText(boolean state)
-  {
-    showColourText = state;
-  }
-
-  public void setShowBoxes(boolean state)
-  {
-    showBoxes = state;
-  }
-
-  public boolean getWrapAlignment()
-  {
-    return wrapAlignment;
-  }
-
-  public boolean getShowText()
-  {
-    return showText;
-  }
-
-  public boolean getShowBoxes()
-  {
-    return showBoxes;
-  }
-
-  public char getGapCharacter()
-  {
-    return getAlignment().getGapCharacter();
-  }
-
-  public void setGapCharacter(char gap)
-  {
-    if (getAlignment() != null)
-    {
-      getAlignment().setGapCharacter(gap);
-    }
-  }
-
-  public void setThreshold(int thresh)
-  {
-    threshold = thresh;
-  }
-
-  public int getThreshold()
-  {
-    return threshold;
-  }
-
-  public void setIncrement(int inc)
-  {
-    increment = inc;
-  }
-
-  public int getIncrement()
-  {
-    return increment;
-  }
-
   public void resetSeqLimits(int height)
   {
-    setEndSeq(height / getCharHeight());
-  }
-
-  public void setCurrentTree(NJTree tree)
-  {
-    currentTree = tree;
-  }
-
-  public NJTree getCurrentTree()
-  {
-    return currentTree;
+    ranges.setEndSeq(height / getCharHeight() - 1); // BH 2019.04.18
   }
 
-  public boolean getShowJVSuffix()
-  {
-    return showJVSuffix;
-  }
-
-  public void setShowJVSuffix(boolean b)
-  {
-    showJVSuffix = b;
-  }
-
-  public boolean getShowAnnotation()
-  {
-    return showAnnotation;
-  }
+  boolean centreColumnLabels;
 
-  public void setShowAnnotation(boolean b)
+  public boolean getCentreColumnLabels()
   {
-    showAnnotation = b;
+    return centreColumnLabels;
   }
 
-  public boolean getScaleAboveWrapped()
-  {
-    return scaleAboveWrapped;
-  }
+  public boolean followSelection = true;
 
-  public boolean getScaleLeftWrapped()
+  /**
+   * @return true if view selection should always follow the selections
+   *         broadcast by other selection sources
+   */
+  public boolean getFollowSelection()
   {
-    return scaleLeftWrapped;
+    return followSelection;
   }
 
-  public boolean getScaleRightWrapped()
+  @Override
+  public void sendSelection()
   {
-    return scaleRightWrapped;
+    getStructureSelectionManager().sendSelection(
+            new SequenceGroup(getSelectionGroup()),
+            new ColumnSelection(getColumnSelection()),
+            new HiddenColumns(getAlignment().getHiddenColumns()), this);
   }
 
-  public void setScaleAboveWrapped(boolean b)
+  /**
+   * Returns an instance of the StructureSelectionManager scoped to this applet
+   * instance.
+   * 
+   * @return
+   */
+  @Override
+  public StructureSelectionManager getStructureSelectionManager()
   {
-    scaleAboveWrapped = b;
+    return jalview.structure.StructureSelectionManager
+            .getStructureSelectionManager(applet);
   }
 
-  public void setScaleLeftWrapped(boolean b)
+  @Override
+  public boolean isNormaliseSequenceLogo()
   {
-    scaleLeftWrapped = b;
+    return normaliseSequenceLogo;
   }
 
-  public void setScaleRightWrapped(boolean b)
+  public void setNormaliseSequenceLogo(boolean state)
   {
-    scaleRightWrapped = b;
+    normaliseSequenceLogo = state;
   }
 
-  public void setIgnoreGapsConsensus(boolean b)
+  /**
+   * 
+   * @return true if alignment characters should be displayed
+   */
+  @Override
+  public boolean isValidCharWidth()
   {
-    ignoreGapsInConsensusCalculation = b;
-    updateConsensus(null);
-    if (globalColourScheme != null)
-    {
-      globalColourScheme.setThreshold(globalColourScheme.getThreshold(),
-              ignoreGapsInConsensusCalculation);
-
-    }
+    return validCharWidth;
   }
 
-
-
-
-  public boolean getShowHiddenMarkers()
+  public AnnotationColumnChooser getAnnotationColumnSelectionState()
   {
-    return showHiddenMarkers;
+    return annotationColumnSelectionState;
   }
 
-  public void setShowHiddenMarkers(boolean show)
+  public void setAnnotationColumnSelectionState(
+          AnnotationColumnChooser annotationColumnSelectionState)
   {
-    showHiddenMarkers = show;
+    this.annotationColumnSelectionState = annotationColumnSelectionState;
   }
 
-  public Color getSequenceColour(SequenceI seq)
-  {
-    if (sequenceColours == null || !sequenceColours.containsKey(seq))
+  @Override
+  public void mirrorCommand(CommandI command, boolean undo,
+          StructureSelectionManager ssm, VamsasSource source)
+  {
+    // TODO refactor so this can be pulled up to superclass or controller
+    /*
+     * Do nothing unless we are a 'complement' of the source. May replace this
+     * with direct calls not via SSM.
+     */
+    if (source instanceof AlignViewportI
+            && ((AlignViewportI) source).getCodingComplement() == this)
     {
-      return Color.white;
+      // ok to continue;
     }
     else
     {
-      return (Color) sequenceColours.get(seq);
+      return;
     }
-  }
 
-  public void setSequenceColour(SequenceI seq, Color col)
-  {
-    if (sequenceColours == null)
+    CommandI mappedCommand = ssm.mapCommand(command, undo, getAlignment(),
+            getGapCharacter());
+    if (mappedCommand != null)
     {
-      sequenceColours = new Hashtable();
-    }
+      mappedCommand.doCommand(null);
+      firePropertyChange("alignment", null, getAlignment().getSequences());
 
-    if (col == null)
-    {
-      sequenceColours.remove(seq);
-    }
-    else
-    {
-      sequenceColours.put(seq, col);
+      // ap.scalePanelHolder.repaint();
+      // ap.repaint();
     }
   }
 
-  boolean centreColumnLabels;
-
-  public boolean getCentreColumnLabels()
+  @Override
+  public VamsasSource getVamsasSource()
   {
-    return centreColumnLabels;
+    return this;
   }
 
-  public void updateSequenceIdColours()
+  /**
+   * If this viewport has a (Protein/cDNA) complement, then scroll the
+   * complementary alignment to match this one.
+   */
+  public void scrollComplementaryAlignment(AlignmentPanel complementPanel)
   {
-    
-    for (SequenceGroup sg:alignment.getGroups())
+    if (complementPanel == null)
     {
-      if (sg.idColour != null)
-      {
-        for (SequenceI s:sg.getSequences(getHiddenRepSequences()))
-        {
-          this.setSequenceColour(s, sg.idColour);
-        }
-      }
+      return;
     }
-  }
-
-  public boolean followHighlight = true;
 
-  public boolean getFollowHighlight()
-  {
-    return followHighlight;
-  }
-
-  public boolean followSelection = true;
-
-  /**
-   * @return true if view selection should always follow the selections
-   *         broadcast by other selection sources
-   */
-  public boolean getFollowSelection()
-  {
-    return followSelection;
-  }
-  public void sendSelection()
-  {
-    jalview.structure.StructureSelectionManager
-            .getStructureSelectionManager(applet).sendSelection(
-                    new SequenceGroup(getSelectionGroup()),
-                    new ColumnSelection(getColumnSelection()), this);
+    /*
+     * Populate a SearchResults object with the mapped location to scroll to. If
+     * there is no complement, or it is not following highlights, or no mapping
+     * is found, the result will be empty.
+     */
+    SearchResultsI sr = new SearchResults();
+    int seqOffset = findComplementScrollTarget(sr);
+    if (!sr.isEmpty())
+    {
+      complementPanel.setToScrollComplementPanel(false);
+      complementPanel.scrollToCentre(sr, seqOffset);
+      complementPanel.setToScrollComplementPanel(true);
+    }
   }
 
-
-
-
   /**
-   * synthesize a column selection if none exists so it covers the given
-   * selection group. if wholewidth is false, no column selection is made if the
-   * selection group covers the whole alignment width.
+   * Applies the supplied feature settings descriptor to currently known
+   * features. This supports an 'initial configuration' of feature colouring
+   * based on a preset or user favourite. This may then be modified in the usual
+   * way using the Feature Settings dialogue. NOT IMPLEMENTED FOR APPLET
    * 
-   * @param sg
-   * @param wholewidth
+   * @param featureSettings
    */
-  public void expandColSelection(SequenceGroup sg, boolean wholewidth)
-  {
-    int sgs, sge;
-    if (sg != null
-            && (sgs = sg.getStartRes()) >= 0
-            && sg.getStartRes() <= (sge = sg.getEndRes())
-            && (colSel == null || colSel.getSelected() == null || colSel
-                    .getSelected().size() == 0))
-    {
-      if (!wholewidth && alignment.getWidth() == (1 + sge - sgs))
-      {
-        // do nothing
-        return;
-      }
-      if (colSel == null)
-      {
-        colSel = new ColumnSelection();
-      }
-      for (int cspos = sg.getStartRes(); cspos <= sg.getEndRes(); cspos++)
-      {
-        colSel.addElement(cspos);
-      }
-    }
-  }
-
   @Override
-  public boolean hasHiddenColumns()
-  {
-    return hasHiddenColumns;
-  }
-  
-  public boolean isNormaliseSequenceLogo()
-  {
-    return normaliseSequenceLogo;
-  }
-
-  public void setNormaliseSequenceLogo(boolean state)
+  public void applyFeaturesStyle(FeatureSettingsModelI featureSettings)
   {
-    normaliseSequenceLogo = state;
+    // TODO implement for applet
   }
 
   /**
+   * Merges the supplied feature settings descriptor with existing feature
+   * styles. This supports an 'initial configuration' of feature colouring based
+   * on a preset or user favourite. This may then be modified in the usual way
+   * using the Feature Settings dialogue. NOT IMPLEMENTED FOR APPLET
    * 
-   * @return true if alignment characters should be displayed 
+   * @param featureSettings
    */
-  public boolean isValidCharWidth()
+  @Override
+  public void mergeFeaturesStyle(FeatureSettingsModelI featureSettings)
   {
-    return validCharWidth;
-  }
+    // TODO Auto-generated method stub
 
+  }
 }