JAL-1681 ensure cDNA consensus computed on startup (project/applet)
[jalview.git] / src / jalview / appletgui / SplitFrame.java
index fb11a5c..68da6cf 100644 (file)
@@ -1,20 +1,17 @@
 package jalview.appletgui;
 
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.Panel;
+
 import jalview.analysis.AlignmentUtils;
-import jalview.analysis.AlignmentUtils.MappingResult;
+import jalview.api.AlignmentViewPanel;
 import jalview.api.ViewStyleI;
 import jalview.bin.JalviewLite;
 import jalview.datamodel.AlignmentI;
 import jalview.structure.StructureSelectionManager;
 
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.MouseInfo;
-import java.awt.Panel;
-import java.awt.Point;
-import java.awt.Rectangle;
-
 public class SplitFrame extends EmbmenuFrame
 {
   private static final long serialVersionUID = 1L;
@@ -57,9 +54,9 @@ public class SplitFrame extends EmbmenuFrame
     AlignViewport protein = !topAlignment.isNucleotide() ? topViewport
             : (!bottomAlignment.isNucleotide() ? bottomViewport : null);
 
-    MappingResult mapped = AlignmentUtils.mapProteinToCdna(
+    boolean mapped = AlignmentUtils.mapProteinToCdna(
             protein.getAlignment(), cdna.getAlignment());
-    if (mapped != MappingResult.NotMapped)
+    if (mapped)
     {
       final StructureSelectionManager ssm = StructureSelectionManager
               .getStructureSelectionManager(topViewport.applet);
@@ -67,9 +64,17 @@ public class SplitFrame extends EmbmenuFrame
       topViewport.setCodingComplement(bottomViewport);
       ssm.addCommandListener(cdna);
       ssm.addCommandListener(protein);
+
+      /*
+       * Now mappings exist, can compute cDNA consensus on protein alignment
+       */
+      protein.initComplementConsensus();
+      AlignmentViewPanel ap = topAlignment.isNucleotide() ? bottomFrame.alignPanel
+              : topFrame.alignPanel;
+      protein.updateConsensus(ap);
     }
 
-    setCharacterWidth(protein, cdna);
+    adjustLayout();
   }
 
   /**
@@ -90,13 +95,39 @@ public class SplitFrame extends EmbmenuFrame
   }
 
   /**
-   * Expand protein to 3 times character width of dna
-   * 
-   * @param protein
-   * @param cdna
+   * Make any adjustments to the layout
    */
-  protected void setCharacterWidth(AlignViewport protein, AlignViewport cdna)
+  protected void adjustLayout()
   {
+    AlignViewport cdna = topFrame.getAlignViewport().getAlignment()
+            .isNucleotide() ? topFrame.viewport : bottomFrame.viewport;
+    AlignViewport protein = cdna == topFrame.viewport ? bottomFrame.viewport
+            : topFrame.viewport;
+
+    /*
+     * Ensure sequence ids are the same width for good alignment.
+     */
+    // TODO should do this via av.getViewStyle/setViewStyle
+    // however at present av.viewStyle is not set in IdPanel.fontChanged
+    int w1 = topFrame.alignPanel.idPanel.idCanvas.getWidth();
+    int w2 = bottomFrame.alignPanel.idPanel.idCanvas.getWidth();
+    int w3 = Math.max(w1, w2);
+    if (w1 != w3)
+    {
+      Dimension d = topFrame.alignPanel.idPanel.idCanvas.getSize();
+      topFrame.alignPanel.idPanel.idCanvas.setSize(new Dimension(w3,
+              d.height));
+    }
+    if (w2 != w3)
+    {
+      Dimension d = bottomFrame.alignPanel.idPanel.idCanvas.getSize();
+      bottomFrame.alignPanel.idPanel.idCanvas.setSize(new Dimension(w3,
+              d.height));
+    }
+
+    /*
+     * Expand protein to 3 times character width of dna
+     */
     if (protein != null && cdna != null)
     {
       ViewStyleI vs = protein.getViewStyle();
@@ -131,7 +162,7 @@ public class SplitFrame extends EmbmenuFrame
    */
   public void addToDisplay(boolean embedded, JalviewLite applet)
   {
-    createAlignFrameWindow(embedded, applet);
+    createSplitFrameWindow(embedded, applet);
     validate();
     topFrame.alignPanel.adjustAnnotationHeight();
     topFrame.alignPanel.paintAlignment(true);
@@ -146,7 +177,7 @@ public class SplitFrame extends EmbmenuFrame
    * @param embed
    * @param applet
    */
-  public void createAlignFrameWindow(boolean embed, JalviewLite applet)
+  protected void createSplitFrameWindow(boolean embed, JalviewLite applet)
   {
     if (embed)
     {
@@ -156,9 +187,9 @@ public class SplitFrame extends EmbmenuFrame
     else
     {
       this.add(outermost);
-      int width = Math.max(topFrame.DEFAULT_WIDTH,
-              bottomFrame.DEFAULT_WIDTH);
-      int height = topFrame.DEFAULT_HEIGHT + bottomFrame.DEFAULT_HEIGHT;
+      int width = Math.max(topFrame.frameWidth,
+              bottomFrame.frameWidth);
+      int height = topFrame.frameHeight + bottomFrame.frameHeight;
       jalview.bin.JalviewLite
               .addFrame(this, this.getTitle(), width, height);
     }