Merge develop to Release_2_8_3_Branch
[jalview.git] / src / jalview / appletgui / AlignViewport.java
index 7cf7be0..2d38008 100644 (file)
  */
 package jalview.appletgui;
 
+import java.awt.Font;
+
 import jalview.analysis.NJTree;
 import jalview.api.AlignViewportI;
 import jalview.bin.JalviewLite;
+import jalview.commands.CommandI;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.Sequence;
@@ -30,15 +33,14 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.schemes.ColourSchemeProperty;
 import jalview.schemes.UserColourScheme;
+import jalview.structure.CommandListener;
 import jalview.structure.SelectionSource;
+import jalview.structure.StructureSelectionManager;
 import jalview.structure.VamsasSource;
 import jalview.viewmodel.AlignmentViewport;
 
-import java.awt.Font;
-import java.util.Stack;
-
 public class AlignViewport extends AlignmentViewport implements
-        AlignViewportI, SelectionSource, VamsasSource
+        AlignViewportI, SelectionSource, VamsasSource, CommandListener
 {
   int startRes;
 
@@ -50,54 +52,16 @@ public class AlignViewport extends AlignmentViewport implements
 
   boolean cursorMode = false;
 
-  boolean showJVSuffix = true;
-
-  boolean showText = true;
-
-  boolean showColourText = false;
-
-  boolean showBoxes = true;
-
-  boolean wrapAlignment = false;
-
-  boolean renderGaps = true;
-
-  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;
-
-  boolean showHiddenMarkers = true;
-
   public jalview.bin.JalviewLite applet;
 
   boolean MAC = false;
 
-  Stack historyList = new Stack();
-
-  Stack redoList = new Stack();
-
   private AnnotationColumnChooser annotationColumnSelectionState;
 
   public void finalize()
@@ -110,9 +74,10 @@ public class AlignViewport extends AlignmentViewport implements
 
   public AlignViewport(AlignmentI al, JalviewLite applet)
   {
+    super();
     calculator = new jalview.workers.AlignCalcManager();
     this.applet = applet;
-    setAlignment(al);
+    alignment = al;
     // we always pad gaps
     this.setPadGaps(true);
     this.startRes = 0;
@@ -175,10 +140,11 @@ public class AlignViewport extends AlignmentViewport implements
 
     if (applet != null)
     {
-      showJVSuffix = applet.getDefaultParameter("showFullId", showJVSuffix);
+      setShowJVSuffix(applet.getDefaultParameter("showFullId",
+              getShowJVSuffix()));
 
-      showAnnotation = applet.getDefaultParameter("showAnnotation",
-              showAnnotation);
+      setShowAnnotation(applet.getDefaultParameter("showAnnotation",
+              isShowAnnotation()));
 
       showConservation = applet.getDefaultParameter("showConservation",
               showConservation);
@@ -188,15 +154,15 @@ public class AlignViewport extends AlignmentViewport implements
       showConsensus = applet.getDefaultParameter("showConsensus",
               showConsensus);
 
-      showUnconserved = applet.getDefaultParameter("showUnconserved",
-              showUnconserved);
+      setShowUnconserved(applet.getDefaultParameter("showUnconserved",
+              getShowUnconserved()));
 
       String param = applet.getParameter("upperCase");
       if (param != null)
       {
         if (param.equalsIgnoreCase("bold"))
         {
-          upperCasebold = true;
+          setUpperCasebold(true);
         }
       }
       sortByTree = applet.getDefaultParameter("sortByTree", sortByTree);
@@ -272,7 +238,7 @@ public class AlignViewport extends AlignmentViewport implements
     {
       return null;
     }
-    StringBuffer seqs = new StringBuffer();
+    StringBuilder seqs = new StringBuilder(consensus.annotations.length);
     for (int i = 0; i < consensus.annotations.length; i++)
     {
       if (consensus.annotations[i] != null)
@@ -368,13 +334,13 @@ public class AlignViewport extends AlignmentViewport implements
 
     java.awt.FontMetrics fm = nullFrame.getGraphics().getFontMetrics(font);
     setCharHeight((int) (heightScale * fm.getHeight()));
-    charWidth = (int) (widthScale * fm.charWidth('M'));
+    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));
+      setCharWidth((int) (widthScale * (fm.stringWidth("MMMMMMMMMMM") / 10)));
     }
   }
 
@@ -383,98 +349,6 @@ public class AlignViewport extends AlignmentViewport implements
     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 resetSeqLimits(int height)
   {
@@ -491,77 +365,6 @@ public class AlignViewport extends AlignmentViewport implements
     return currentTree;
   }
 
-  public boolean getShowJVSuffix()
-  {
-    return showJVSuffix;
-  }
-
-  public void setShowJVSuffix(boolean b)
-  {
-    showJVSuffix = b;
-  }
-
-  public boolean getShowAnnotation()
-  {
-    return showAnnotation;
-  }
-
-  public void setShowAnnotation(boolean b)
-  {
-    showAnnotation = b;
-  }
-
-  public boolean getScaleAboveWrapped()
-  {
-    return scaleAboveWrapped;
-  }
-
-  public boolean getScaleLeftWrapped()
-  {
-    return scaleLeftWrapped;
-  }
-
-  public boolean getScaleRightWrapped()
-  {
-    return scaleRightWrapped;
-  }
-
-  public void setScaleAboveWrapped(boolean b)
-  {
-    scaleAboveWrapped = b;
-  }
-
-  public void setScaleLeftWrapped(boolean b)
-  {
-    scaleLeftWrapped = b;
-  }
-
-  public void setScaleRightWrapped(boolean b)
-  {
-    scaleRightWrapped = b;
-  }
-
-  public void setIgnoreGapsConsensus(boolean b)
-  {
-    ignoreGapsInConsensusCalculation = b;
-    updateConsensus(null);
-    if (globalColourScheme != null)
-    {
-      globalColourScheme.setThreshold(globalColourScheme.getThreshold(),
-              ignoreGapsInConsensusCalculation);
-
-    }
-  }
-
-  public boolean getShowHiddenMarkers()
-  {
-    return showHiddenMarkers;
-  }
-
-  public void setShowHiddenMarkers(boolean show)
-  {
-    showHiddenMarkers = show;
-  }
 
   boolean centreColumnLabels;
 
@@ -590,13 +393,25 @@ public class AlignViewport extends AlignmentViewport implements
 
   public void sendSelection()
   {
-    jalview.structure.StructureSelectionManager
-            .getStructureSelectionManager(applet).sendSelection(
+    getStructureSelectionManager().sendSelection(
                     new SequenceGroup(getSelectionGroup()),
                     new ColumnSelection(getColumnSelection()), this);
   }
 
   /**
+   * Returns an instance of the StructureSelectionManager scoped to this applet
+   * instance.
+   * 
+   * @return
+   */
+  @Override
+  public StructureSelectionManager getStructureSelectionManager()
+  {
+    return jalview.structure.StructureSelectionManager
+            .getStructureSelectionManager(applet);
+  }
+
+  /**
    * 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.
@@ -659,4 +474,41 @@ public class AlignViewport extends AlignmentViewport implements
     this.annotationColumnSelectionState = annotationColumnSelectionState;
   }
 
+  @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)
+    {
+      // ok to continue;
+    }
+    else
+    {
+      return;
+    }
+
+    CommandI mappedCommand = ssm.mapCommand(command, undo, getAlignment(),
+            getGapCharacter());
+    if (mappedCommand != null)
+    {
+      mappedCommand.doCommand(null);
+      firePropertyChange("alignment", null, getAlignment().getSequences());
+
+      // ap.scalePanelHolder.repaint();
+      // ap.repaint();
+    }
+  }
+
+  @Override
+  public VamsasSource getVamsasSource()
+  {
+    return this;
+  }
+
 }