Merge remote-tracking branch 'origin/merge/JAL-845_JAL-1640' into
[jalview.git] / src / jalview / gui / AlignFrame.java
index d5f34b3..d613ea7 100644 (file)
@@ -1537,22 +1537,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   }
 
   /**
-   * close alignPanel2 and shuffle tabs appropriately.
+   * Close the specified panel and close up tabs appropriately.
    * 
-   * @param alignPanel2
+   * @param panelToClose
    */
-  public void closeView(AlignmentPanel alignPanel2)
+  public void closeView(AlignmentPanel panelToClose)
   {
     int index = tabbedPane.getSelectedIndex();
-    int closedindex = tabbedPane.indexOfComponent(alignPanel2);
-    alignPanels.remove(alignPanel2);
-    // Unnecessary
-    // if (viewport == alignPanel2.av)
-    // {
-    // viewport = null;
-    // }
-    alignPanel2.closePanel();
-    alignPanel2 = null;
+    int closedindex = tabbedPane.indexOfComponent(panelToClose);
+    alignPanels.remove(panelToClose);
+    panelToClose.closePanel();
+    panelToClose = null;
 
     tabbedPane.removeTabAt(closedindex);
     tabbedPane.validate();
@@ -1778,18 +1773,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     viewport.getAlignment().moveSelectedSequencesByOne(sg,
             viewport.getHiddenRepSequences(), up);
     alignPanel.paintAlignment(true);
-
-    final AlignViewportI peer = viewport.getCodingComplement();
-    if (peer != null)
-    {
-      final SequenceGroup selectionGroup = peer.getSelectionGroup();
-      if (selectionGroup != null)
-      {
-        peer.getAlignment().moveSelectedSequencesByOne(
-                peer.getSelectionGroup(), peer.getHiddenRepSequences(), up);
-        ((AlignViewport) peer).getAlignPanel().paintAlignment(true);
-      }
-    }
   }
 
   synchronized void slideSequences(boolean right, int size)
@@ -2767,32 +2750,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   public void newView_actionPerformed(ActionEvent e)
   {
-    /*
-     * Note if the current view has a protein/cdna complementary view
-     */
-    AlignViewportI linkedView = this.viewport.getCodingComplement();
-
-    AlignmentPanel newPanel = newView(null, true);
-
-    /*
-     * If the original view has a protein/cdna linked view, make and link a new
-     * view there also.
-     */
-    // TODO refactor the hell out of this - move to a controller, lose the casts
-    // and direct member access, etc
-    if (linkedView != null)
-    {
-      AlignFrame linkedAlignFrame = ((AlignViewport) linkedView)
-              .getAlignPanel().alignFrame;
-      AlignmentPanel newLinkedPanel = linkedAlignFrame.newView(null, true);
-      newLinkedPanel.av.viewName = newPanel.av.viewName;
-      newPanel.av.setCodingComplement(newLinkedPanel.av);
-      final StructureSelectionManager ssm = StructureSelectionManager
-              .getStructureSelectionManager(Desktop.instance);
-      ssm.addCommandListener(newPanel.av);
-      ssm.addCommandListener(newLinkedPanel.av);
-
-    }
+    newView(null, true);
   }
 
   /**
@@ -2820,7 +2778,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       newap.av.getAlignment().deleteAllAnnotations(false);
     }
 
-    newap.av.gatherViewsHere = false;
+    newap.av.setGatherViewsHere(false);
 
     if (viewport.viewName == null)
     {
@@ -2843,7 +2801,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     if (alignPanels.size() == 2)
     {
-      viewport.gatherViewsHere = true;
+      viewport.setGatherViewsHere(true);
     }
     tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
     return newap;
@@ -5443,6 +5401,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       avc.setViewportAndAlignmentPanel(viewport, alignPanel);
       setMenusFromViewport(viewport);
     }
+
+    /*
+     * If there is a frame linked to this one in a SplitPane, switch it to the
+     * same view tab index. No infinite recursion of calls should happen, since
+     * tabSelectionChanged() should not get invoked on setting the selected
+     * index to an unchanged value. Guard against setting an invalid index
+     * before the new view peer tab has been created.
+     */
+    final AlignViewportI peer = viewport.getCodingComplement();
+    if (peer != null)
+    {
+      AlignFrame linkedAlignFrame = ((AlignViewport) peer).getAlignPanel().alignFrame;
+      if (linkedAlignFrame.tabbedPane.getTabCount() > index)
+      {
+        linkedAlignFrame.tabbedPane.setSelectedIndex(index);
+      }
+    }
   }
 
   /**
@@ -5521,7 +5496,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * 
    * @param av
    */
-  public boolean closeView(AlignmentViewport av)
+  public boolean closeView(AlignViewportI av)
   {
     if (viewport == av)
     {