+ return viewStructures(pdbs, seqs, ap, null);
+ }
+
+ public JalviewStructureDisplayI viewStructures(PDBEntry[] pdbs,
+ SequenceI[] seqs, AlignmentPanel ap, ViewerType viewerType)
+ {
+ JalviewStructureDisplayI viewer = onlyOnePdb(pdbs, seqs, ap);
+ if (viewer != null)
+ {
+ /*
+ * user added structure to an existing viewer - all done
+ */
+ return viewer;
+ }
+
+ if (viewerType == null)
+ viewerType = getViewerType();
+
+ Map<PDBEntry, SequenceI[]> seqsForPdbs = getSequencesForPdbs(pdbs,
+ seqs);
+ PDBEntry[] pdbsForFile = seqsForPdbs.keySet()
+ .toArray(new PDBEntry[seqsForPdbs.size()]);
+ SequenceI[][] theSeqs = seqsForPdbs.values()
+ .toArray(new SequenceI[seqsForPdbs.size()][]);
+ if (sview != null)
+ {
+ sview.setAlignAddedStructures(superposeAdded);
+
+ Runnable viewRunnable = new Runnable()
+ {
+ @Override
+ public void run()
+ {
+
+ for (int pdbep = 0; pdbep < pdbsForFile.length; pdbep++)
+ {
+ PDBEntry pdb = pdbsForFile[pdbep];
+ if (!sview.addAlreadyLoadedFile(theSeqs[pdbep], null, ap,
+ pdb.getId()))
+ {
+ sview.addToExistingViewer(pdb, theSeqs[pdbep], null, ap,
+ pdb.getId());
+ }
+ }
+
+ sview.updateTitleAndMenus();
+ }
+ };
+ if (async)
+ {
+ new Thread(viewRunnable).start();
+ }
+ else
+ {
+ viewRunnable.run();
+ }
+ return sview;
+ }
+
+ if (viewerType.equals(ViewerType.JMOL))
+ {
+ sview = new AppJmol(ap, superposeAdded, pdbsForFile, theSeqs);
+ }
+ else if (viewerType.equals(ViewerType.CHIMERA))
+ {
+ sview = new ChimeraViewFrame(pdbsForFile, superposeAdded, theSeqs,
+ ap);
+ }
+ else if (viewerType.equals(ViewerType.CHIMERAX))