X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FStructureViewer.java;h=4db614091588ed1adf01030307c08a35f86838d6;hb=304e64fb34b32659be1bbfd39fb4e15b2f79586e;hp=e7a30f9c0e530d823253a0184d38d7bb271efaa3;hpb=cfb79b69d9fa44595560659bd95d1d1cd27677ad;p=jalview.git diff --git a/src/jalview/gui/StructureViewer.java b/src/jalview/gui/StructureViewer.java index e7a30f9..4db6140 100644 --- a/src/jalview/gui/StructureViewer.java +++ b/src/jalview/gui/StructureViewer.java @@ -20,25 +20,19 @@ */ package jalview.gui; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import jalview.api.structures.JalviewStructureDisplayI; import jalview.bin.Cache; import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceI; import jalview.datamodel.StructureViewerModel; -import jalview.structure.StructureMapping; import jalview.structure.StructureSelectionManager; -import jalview.util.MessageManager; -import jalview.util.Platform; -import jalview.ws.DBRefFetcher; -import jalview.ws.sifts.SiftsSettings; -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; /** * A proxy for handling structure viewers, that orchestrates adding selected @@ -71,7 +65,7 @@ public class StructureViewer public enum ViewerType { - JMOL, CHIMERA + JMOL, CHIMERA, CHIMERAX, PYMOL }; /** @@ -96,6 +90,7 @@ public class StructureViewer return sv; } + @Override public String toString() { @@ -105,7 +100,11 @@ public class StructureViewer } return "New View"; } - public ViewerType getViewerType() + /** + * + * @return ViewerType for currently configured structure viewer + */ + public static ViewerType getViewerType() { String viewType = Cache.getDefault(Preferences.STRUCTURE_DISPLAY, ViewerType.JMOL.name()); @@ -180,6 +179,15 @@ public class StructureViewer sview = new ChimeraViewFrame(pdbsForFile, superposeAdded, theSeqs, ap); } + else if (viewerType.equals(ViewerType.CHIMERAX)) + { + sview = new ChimeraXViewFrame(pdbsForFile, superposeAdded, theSeqs, + ap); + } + else if (viewerType.equals(ViewerType.PYMOL)) + { + sview = new PymolViewer(pdbsForFile, superposeAdded, theSeqs, ap); + } else { Cache.log.error(UNKNOWN_VIEWER_TYPE + getViewerType().toString()); @@ -320,6 +328,14 @@ public class StructureViewer { sview = new ChimeraViewFrame(pdb, seqsForPdb, null, ap); } + else if (viewerType.equals(ViewerType.CHIMERAX)) + { + sview = new ChimeraXViewFrame(pdb, seqsForPdb, null, ap); + } + else if (viewerType.equals(ViewerType.PYMOL)) + { + sview = new PymolViewer(pdb, seqsForPdb, null, ap); + } else { Cache.log.error(UNKNOWN_VIEWER_TYPE + getViewerType().toString()); @@ -328,7 +344,7 @@ public class StructureViewer } /** - * Create a new panel controlling a structure viewer. + * Creates a new panel controlling a structure viewer * * @param type * @param pdbf @@ -336,34 +352,37 @@ public class StructureViewer * @param sq * @param alignPanel * @param viewerData - * @param fileloc - * @param rect + * @param sessionFile * @param vid * @return */ - public JalviewStructureDisplayI createView(ViewerType type, String[] pdbf, - String[] id, SequenceI[][] sq, AlignmentPanel alignPanel, - StructureViewerModel viewerData, String fileloc, Rectangle rect, - String vid) + public static JalviewStructureDisplayI createView(ViewerType type, + AlignmentPanel alignPanel, StructureViewerModel viewerData, + String sessionFile, String vid) { - final boolean useinViewerSuperpos = viewerData.isAlignWithPanel(); - final boolean usetoColourbyseq = viewerData.isColourWithAlignPanel(); - final boolean viewerColouring = viewerData.isColourByViewer(); + JalviewStructureDisplayI viewer = null; switch (type) { case JMOL: - sview = new AppJmol(pdbf, id, sq, alignPanel, usetoColourbyseq, - useinViewerSuperpos, viewerColouring, fileloc, rect, vid); + viewer = new AppJmol(viewerData, alignPanel, sessionFile, vid); + // todo or construct and then openSession(sessionFile)? break; case CHIMERA: - Cache.log.error( - "Unsupported structure viewer type " + type.toString()); + viewer = new ChimeraViewFrame(viewerData, alignPanel, sessionFile, + vid); + break; + case CHIMERAX: + viewer = new ChimeraXViewFrame(viewerData, alignPanel, sessionFile, + vid); + break; + case PYMOL: + viewer = new PymolViewer(viewerData, alignPanel, sessionFile, vid); break; default: Cache.log.error(UNKNOWN_VIEWER_TYPE + type.toString()); } - return sview; + return viewer; } public boolean isBusy() @@ -403,119 +422,4 @@ public class StructureViewer superposeAdded = alignAddedStructures; } - /** - * Launch a minimal implementation of a StructureViewer. - * - * @param alignPanel - * @param pdb - * @param seqs - * @return - */ - public static StructureViewer launchStructureViewer( - AlignmentPanel alignPanel, PDBEntry pdb, SequenceI[] seqs) - { - return launchStructureViewer(alignPanel, new PDBEntry[] { pdb }, seqs, - false, null, null); - } - - /** - * Adds PDB structures to a new or existing structure viewer - * - * @param ssm - * @param pdbEntriesToView - * @param alignPanel - * @param sequences - * @return - */ - protected static StructureViewer launchStructureViewer( - final AlignmentPanel ap, final PDBEntry[] pdbEntriesToView, - SequenceI[] sequences, boolean superimpose, - StructureViewer theViewer, IProgressIndicator pb) - { - final StructureSelectionManager ssm = ap.getStructureSelectionManager(); - if (theViewer == null) - theViewer = new StructureViewer(ssm); - long progressId = sequences.hashCode(); - if (pb != null) - pb.setProgressBar(MessageManager.getString( - "status.launching_3d_structure_viewer"), progressId); - theViewer.setSuperpose(superimpose); - - /* - * remember user's choice of superimpose or not - */ - Cache.setProperty(StructureChooser.AUTOSUPERIMPOSE, - Boolean.valueOf(superimpose).toString()); - - if (pb != null) - pb.setProgressBar(null, progressId); - if (SiftsSettings.isMapWithSifts()) - { - List seqsWithoutSourceDBRef = new ArrayList<>(); - int p = 0; - // TODO: skip PDBEntry:Sequence pairs where PDBEntry doesn't look like a - // real PDB ID. For moment, we can also safely do this if there is already - // a known mapping between the PDBEntry and the sequence. - for (SequenceI seq : sequences) - { - PDBEntry pdbe = pdbEntriesToView[p++]; - if (pdbe != null && pdbe.getFile() != null) - { - StructureMapping[] smm = ssm.getMapping(pdbe.getFile()); - if (smm != null && smm.length > 0) - { - for (StructureMapping sm : smm) - { - if (sm.getSequence() == seq) - { - continue; - } - } - } - } - if (seq.getPrimaryDBRefs().isEmpty()) - { - seqsWithoutSourceDBRef.add(seq); - continue; - } - } - if (!seqsWithoutSourceDBRef.isEmpty()) - { - int y = seqsWithoutSourceDBRef.size(); - if (pb != null) - pb.setProgressBar(MessageManager.formatMessage( - "status.fetching_dbrefs_for_sequences_without_valid_refs", - y), progressId); - SequenceI[] seqWithoutSrcDBRef = seqsWithoutSourceDBRef - .toArray(new SequenceI[y]); - DBRefFetcher dbRefFetcher = new DBRefFetcher(seqWithoutSrcDBRef); - dbRefFetcher.fetchDBRefs(true); - - if (pb != null) - pb.setProgressBar("Fetch complete.", progressId); // todo i18n - } - } - if (pdbEntriesToView.length > 1) - { - if (pb != null) - pb.setProgressBar(MessageManager.getString( - "status.fetching_3d_structures_for_selected_entries"), - progressId); - theViewer.viewStructures(pdbEntriesToView, sequences, ap); - } - else - { - if (pb != null) - pb.setProgressBar(MessageManager.formatMessage( - "status.fetching_3d_structures_for", - pdbEntriesToView[0].getId()), progressId); - theViewer.viewStructures(pdbEntriesToView[0], sequences, ap); - } - if (pb != null) - pb.setProgressBar(null, progressId); - // remember the last viewer we used... - StructureChooser.lastTargetedView = theViewer; - return theViewer; - } - }