JAL-1691 applet SplitFrame scrolling; pull up of 5 fields to
[jalview.git] / src / jalview / appletgui / SplitFrame.java
index 59b66c6..836d70c 100644 (file)
@@ -11,6 +11,7 @@ import jalview.api.ViewStyleI;
 import jalview.bin.JalviewLite;
 import jalview.datamodel.AlignmentI;
 import jalview.structure.StructureSelectionManager;
+import jalview.viewmodel.AlignmentViewport;
 
 public class SplitFrame extends EmbmenuFrame
 {
@@ -49,9 +50,9 @@ public class SplitFrame extends EmbmenuFrame
     final AlignViewport bottomViewport = bottomFrame.viewport;
     final AlignmentI topAlignment = topViewport.getAlignment();
     final AlignmentI bottomAlignment = bottomViewport.getAlignment();
-    AlignViewport cdna = topAlignment.isNucleotide() ? topViewport
+    AlignmentViewport cdna = topAlignment.isNucleotide() ? topViewport
             : (bottomAlignment.isNucleotide() ? bottomViewport : null);
-    AlignViewport protein = !topAlignment.isNucleotide() ? topViewport
+    AlignmentViewport protein = !topAlignment.isNucleotide() ? topViewport
             : (!bottomAlignment.isNucleotide() ? bottomViewport : null);
 
     boolean mapped = AlignmentUtils.mapProteinToCdna(
@@ -99,9 +100,9 @@ public class SplitFrame extends EmbmenuFrame
    */
   protected void adjustLayout()
   {
-    AlignViewport cdna = topFrame.getAlignViewport().getAlignment()
+    AlignmentViewport cdna = topFrame.getAlignViewport().getAlignment()
             .isNucleotide() ? topFrame.viewport : bottomFrame.viewport;
-    AlignViewport protein = cdna == topFrame.viewport ? bottomFrame.viewport
+    AlignmentViewport protein = cdna == topFrame.viewport ? bottomFrame.viewport
             : topFrame.viewport;
 
     /*
@@ -126,12 +127,13 @@ public class SplitFrame extends EmbmenuFrame
     }
 
     /*
-     * Expand protein to 3 times character width of dna
+     * Scale protein to either 1 or 3 times character width of dna
      */
     if (protein != null && cdna != null)
     {
       ViewStyleI vs = protein.getViewStyle();
-      vs.setCharWidth(3 * vs.getCharWidth());
+      int scale = vs.isScaleProteinAsCdna() ? 3 : 1;
+      vs.setCharWidth(scale * cdna.getViewStyle().getCharWidth());
       protein.setViewStyle(vs);
     }
   }
@@ -152,6 +154,8 @@ public class SplitFrame extends EmbmenuFrame
     panel.add(menuPanel, BorderLayout.NORTH);
     panel.add(af.statusBar, BorderLayout.SOUTH);
     panel.add(af.alignPanel, BorderLayout.CENTER);
+
+    af.setSplitFrame(this);
   }
 
   /**
@@ -187,11 +191,30 @@ public class SplitFrame extends EmbmenuFrame
     else
     {
       this.add(outermost);
-      int width = Math.max(topFrame.frameWidth,
-              bottomFrame.frameWidth);
+      int width = Math.max(topFrame.frameWidth, bottomFrame.frameWidth);
       int height = topFrame.frameHeight + bottomFrame.frameHeight;
       jalview.bin.JalviewLite
               .addFrame(this, this.getTitle(), width, height);
     }
   }
+
+  /**
+   * Returns the contained AlignFrame complementary to the one given (or null if
+   * no match to top or bottom component).
+   * 
+   * @param af
+   * @return
+   */
+  public AlignFrame getComplement(AlignFrame af)
+  {
+    if (topFrame == af)
+    {
+      return bottomFrame;
+    }
+    else if (bottomFrame == af)
+    {
+      return topFrame;
+    }
+    return null;
+  }
 }