JAL-3364 align split frame sequence panels with wrapped view scale left
[jalview.git] / src / jalview / gui / SplitFrame.java
index 25dedc5..fd0ec63 100644 (file)
@@ -86,8 +86,8 @@ public class SplitFrame extends GSplitFrame implements SplitContainerI
    */
   protected void init()
   {
-    getTopFrame().setSplitFrame(this);
-    getBottomFrame().setSplitFrame(this);
+    getTopFrame().setSplitFrame(this, true);
+    getBottomFrame().setSplitFrame(this, false);
     getTopFrame().setVisible(true);
     getBottomFrame().setVisible(true);
 
@@ -161,26 +161,32 @@ public class SplitFrame extends GSplitFrame implements SplitContainerI
    */
   public void adjustLayout()
   {
+    final AlignViewport topViewport = ((AlignFrame) getTopFrame()).viewport;
+    final AlignViewport bottomViewport = ((AlignFrame) getBottomFrame()).viewport;
+
     /*
-     * Ensure sequence ids are the same width so sequences line up
+     * Ensure sequence ids are the same width so sequences line up;
+     * reduce the idwidth of a panel with a longer wrapped left scale
      */
-    int w1 = ((AlignFrame) getTopFrame()).getViewport().getIdWidth();
-    int w2 = ((AlignFrame) getBottomFrame()).getViewport().getIdWidth();
+    int w1 = topViewport.getIdWidth();
+    int w2 = bottomViewport.getIdWidth();
+    int topScaleLeft = topViewport.getWrapAlignment()
+            ? ((AlignFrame) getTopFrame()).alignPanel
+                    .getSeqPanel().seqCanvas.getLabelWidthWest()
+            : 0;
+    int bottomScaleLeft = bottomViewport.getWrapAlignment()
+            ? ((AlignFrame) getBottomFrame()).alignPanel
+                    .getSeqPanel().seqCanvas.getLabelWidthWest()
+            : 0;
     int w3 = Math.max(w1, w2);
-    if (w1 != w3)
-    {
-      ((AlignFrame) getTopFrame()).getViewport().setIdWidth(w3);
-    }
-    if (w2 != w3)
-    {
-      ((AlignFrame) getBottomFrame()).getViewport().setIdWidth(w3);
-    }
+    topViewport
+            .setIdWidth(w3 - Math.max(0, topScaleLeft - bottomScaleLeft));
+    bottomViewport
+            .setIdWidth(w3 - Math.max(0, bottomScaleLeft - topScaleLeft));
 
     /*
      * Scale protein to either 1 or 3 times character width of dna
      */
-    final AlignViewport topViewport = ((AlignFrame) getTopFrame()).viewport;
-    final AlignViewport bottomViewport = ((AlignFrame) getBottomFrame()).viewport;
     final AlignmentI topAlignment = topViewport.getAlignment();
     final AlignmentI bottomAlignment = bottomViewport.getAlignment();
     AlignmentViewport cdna = topAlignment.isNucleotide() ? topViewport
@@ -192,6 +198,8 @@ public class SplitFrame extends GSplitFrame implements SplitContainerI
       int scale = protein.isScaleProteinAsCdna() ? 3 : 1;
       protein.setCharWidth(scale * cdna.getViewStyle().getCharWidth());
     }
+
+    repaint();
   }
 
   /**