X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FStructureViewer.java;h=189d490880ba8c563fe46180be6fa21db93e727b;hb=37de9310bec3501cbc6381e0c3dcb282fcaad812;hp=228576542f1db6e6d8ebb8c65f1aca2ceda15483;hpb=3bc2fbe640abb0d8941aead117c9624dd16773a3;p=jalview.git diff --git a/src/jalview/gui/StructureViewer.java b/src/jalview/gui/StructureViewer.java index 2285765..189d490 100644 --- a/src/jalview/gui/StructureViewer.java +++ b/src/jalview/gui/StructureViewer.java @@ -20,10 +20,6 @@ */ package jalview.gui; -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.List; - import jalview.api.structures.JalviewStructureDisplayI; import jalview.bin.Cache; import jalview.datamodel.PDBEntry; @@ -31,6 +27,10 @@ import jalview.datamodel.SequenceI; import jalview.datamodel.StructureViewerModel; import jalview.structure.StructureSelectionManager; +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.List; + /** * proxy for handling structure viewers. * @@ -98,8 +98,7 @@ public class StructureViewer * @return */ private JalviewStructureDisplayI onlyOnePdb(PDBEntry[] pdbs, - SequenceI[][] seqsForPdbs, - AlignmentPanel ap) + SequenceI[][] seqsForPdbs, AlignmentPanel ap) { List seqs = new ArrayList(); if (pdbs == null || pdbs.length == 0) @@ -137,14 +136,16 @@ public class StructureViewer protected JalviewStructureDisplayI viewStructures(ViewerType viewerType, PDBEntry[] pdbs, SequenceI[][] seqsForPdbs, AlignmentPanel ap) { + PDBEntry[] pdbsForFile = getUniquePdbFiles(pdbs); JalviewStructureDisplayI sview = null; if (viewerType.equals(ViewerType.JMOL)) { - sview = new AppJmol(ap, pdbs, ap.av.collateForPDB(pdbs)); + sview = new AppJmol(ap, pdbsForFile, ap.av.collateForPDB(pdbsForFile)); } else if (viewerType.equals(ViewerType.CHIMERA)) { - sview = new ChimeraViewFrame(pdbs, ap.av.collateForPDB(pdbs), ap); + sview = new ChimeraViewFrame(pdbsForFile, + ap.av.collateForPDB(pdbsForFile), ap); } else { @@ -154,6 +155,36 @@ public class StructureViewer return sview; } + /** + * Convert the array of PDBEntry into an array with no filename repeated + * + * @param pdbs + * @return + */ + static PDBEntry[] getUniquePdbFiles(PDBEntry[] pdbs) + { + if (pdbs == null) + { + return null; + } + List uniques = new ArrayList(); + List filesSeen = new ArrayList(); + for (PDBEntry entry : pdbs) + { + String file = entry.getFile(); + if (file == null) + { + uniques.add(entry); + } + else if (!filesSeen.contains(file)) + { + uniques.add(entry); + filesSeen.add(file); + } + } + return uniques.toArray(new PDBEntry[uniques.size()]); + } + protected JalviewStructureDisplayI viewStructures(ViewerType viewerType, PDBEntry pdb, SequenceI[] seqsForPdb, AlignmentPanel ap) { @@ -190,8 +221,8 @@ public class StructureViewer */ public JalviewStructureDisplayI createView(ViewerType type, String[] pdbf, String[] id, SequenceI[][] sq, - AlignmentPanel alignPanel, StructureViewerModel viewerData, String fileloc, - Rectangle rect, String vid) + AlignmentPanel alignPanel, StructureViewerModel viewerData, + String fileloc, Rectangle rect, String vid) { final boolean useinViewerSuperpos = viewerData.isAlignWithPanel(); final boolean usetoColourbyseq = viewerData.isColourWithAlignPanel();