*/
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
public enum ViewerType
{
- JMOL, CHIMERA
+ JMOL, CHIMERA, CHIMERAX, PYMOL
};
/**
return sv;
}
+
@Override
public String toString()
{
}
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());
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());
{
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());
}
/**
- * Create a new panel controlling a structure viewer.
+ * Creates a new panel controlling a structure viewer
*
* @param type
* @param pdbf
* @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()
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<SequenceI> 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;
- }
-
}