JAL-2960 don’t override a swing method and create infinite recursion ;) toFront now...
[jalview.git] / src / jalview / gui / StructureViewer.java
index 8b501ad..0c8354b 100644 (file)
@@ -49,6 +49,11 @@ public class StructureViewer
 
   StructureSelectionManager ssm;
 
+  /**
+   * decide if new structures are aligned to existing ones
+   */
+  private boolean superposeAdded = true;
+
   public enum ViewerType
   {
     JMOL, CHIMERA
@@ -75,6 +80,16 @@ public class StructureViewer
     sv.sview = display;
     return sv;
   }
+
+  @Override
+  public String toString()
+  {
+    if (sview != null)
+    {
+      return sview.toString();
+    }
+    return "New View";
+  }
   public ViewerType getViewerType()
   {
     String viewType = Cache.getDefault(Preferences.STRUCTURE_DISPLAY,
@@ -117,6 +132,7 @@ public class StructureViewer
             new SequenceI[seqsForPdbs.size()][]);
     if (sview != null)
     {
+      sview.setAlignAddedStructures(superposeAdded);
       new Thread(new Runnable()
       {
         @Override
@@ -142,11 +158,12 @@ public class StructureViewer
 
     if (viewerType.equals(ViewerType.JMOL))
     {
-      sview = new AppJmol(ap, pdbsForFile, theSeqs);
+      sview = new AppJmol(ap, superposeAdded, pdbsForFile, theSeqs);
     }
     else if (viewerType.equals(ViewerType.CHIMERA))
     {
-      sview = new ChimeraViewFrame(pdbsForFile, theSeqs, ap);
+      sview = new ChimeraViewFrame(pdbsForFile, superposeAdded, theSeqs,
+              ap);
     }
     else
     {
@@ -269,11 +286,14 @@ public class StructureViewer
   {
     if (sview != null)
     {
-      if (!sview.addAlreadyLoadedFile(seqsForPdb, null, ap, pdb.getId()))
+      sview.setAlignAddedStructures(superposeAdded);
+      String pdbId = pdb.getId();
+      if (!sview.addAlreadyLoadedFile(seqsForPdb, null, ap, pdbId))
       {
-        sview.addToExistingViewer(pdb, seqsForPdb, null, ap, pdb.getId());
+        sview.addToExistingViewer(pdb, seqsForPdb, null, ap, pdbId);
       }
       sview.updateTitleAndMenus();
+      sview.raiseViewer();
       return sview;
     }
     ViewerType viewerType = getViewerType();
@@ -343,4 +363,29 @@ public class StructureViewer
     return false;
   }
 
+  /**
+   * 
+   * @param pDBid
+   * @return true if view is already showing PDBid
+   */
+  public boolean hasPdbId(String pDBid)
+  {
+    if (sview == null)
+    {
+      return false;
+    }
+
+    return sview.getBinding().hasPdbId(pDBid);
+  }
+
+  public boolean isVisible()
+  {
+    return sview != null && sview.isVisible();
+  }
+
+  public void setSuperpose(boolean alignAddedStructures)
+  {
+    superposeAdded = alignAddedStructures;
+  }
+
 }