*/
package jalview.gui;
-import jalview.api.structures.JalviewStructureDisplayI;
-import jalview.bin.Cache;
-import jalview.datamodel.PDBEntry;
-import jalview.datamodel.SequenceI;
-import jalview.datamodel.StructureViewerModel;
-import jalview.structure.StructureSelectionManager;
-
-import java.awt.Rectangle;
import java.util.ArrayList;
+import java.util.EnumSet;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
+import jalview.api.structures.JalviewStructureDisplayI;
+import jalview.bin.Cache;
+import jalview.bin.Console;
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.SequenceI;
+import jalview.datamodel.StructureViewerModel;
+import jalview.structure.StructureSelectionManager;
+
/**
* A proxy for handling structure viewers, that orchestrates adding selected
* structures, associated with sequences in Jalview, to an existing viewer, or
*/
private boolean superposeAdded = true;
+ /**
+ * whether to open structures in their own thread or not
+ */
+ private boolean async = true;
+
+ public void setAsync(boolean b)
+ {
+ async = b;
+ }
+
public enum ViewerType
{
- JMOL, CHIMERA, CHIMERAX
+ JMOL, CHIMERA, CHIMERAX, PYMOL;
+
+ public static ViewerType getFromString(String viewerString)
+ {
+ ViewerType viewerType = null;
+ if (!"none".equals(viewerString))
+ {
+ for (ViewerType v : EnumSet.allOf(ViewerType.class))
+ {
+ String name = v.name().toLowerCase(Locale.ROOT).replaceAll(" ",
+ "");
+ if (viewerString.equals(name))
+ {
+ viewerType = v;
+ break;
+ }
+ }
+ }
+ return viewerType;
+ }
+
};
/**
*
* @param structureSelectionManager
*/
- public StructureViewer(StructureSelectionManager structureSelectionManager)
+ public StructureViewer(
+ StructureSelectionManager structureSelectionManager)
{
ssm = structureSelectionManager;
}
}
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());
public JalviewStructureDisplayI viewStructures(PDBEntry[] pdbs,
SequenceI[] seqs, AlignmentPanel ap)
{
+ 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)
{
return viewer;
}
- ViewerType viewerType = getViewerType();
+ 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()][]);
+ PDBEntry[] pdbsForFile = seqsForPdbs.keySet()
+ .toArray(new PDBEntry[seqsForPdbs.size()]);
+ SequenceI[][] theSeqs = seqsForPdbs.values()
+ .toArray(new SequenceI[seqsForPdbs.size()][]);
if (sview != null)
{
sview.setAlignAddedStructures(superposeAdded);
- new Thread(new Runnable()
+
+ Runnable viewRunnable = new Runnable()
{
@Override
public void run()
sview.updateTitleAndMenus();
}
- }).start();
+ };
+ if (async)
+ {
+ new Thread(viewRunnable).start();
+ }
+ else
+ {
+ viewRunnable.run();
+ }
return sview;
}
{
sview = new AppJmol(ap, superposeAdded, pdbsForFile, theSeqs);
}
- else if (viewerType.equals(ViewerType.CHIMERA)
- || viewerType.equals(ViewerType.CHIMERAX))
+ else if (viewerType.equals(ViewerType.CHIMERA))
{
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());
+ Console.error(UNKNOWN_VIEWER_TYPE + getViewerType().toString());
}
return sview;
}
JalviewStructureDisplayI sview = null;
+ public JalviewStructureDisplayI getJalviewStructureDisplay()
+ {
+ return sview;
+ }
+
public JalviewStructureDisplayI viewStructures(PDBEntry pdb,
SequenceI[] seqsForPdb, AlignmentPanel ap)
{
+ return viewStructures(pdb, seqsForPdb, ap, null);
+ }
+
+ public JalviewStructureDisplayI viewStructures(PDBEntry pdb,
+ SequenceI[] seqsForPdb, AlignmentPanel ap, ViewerType viewerType)
+ {
if (sview != null)
{
sview.setAlignAddedStructures(superposeAdded);
sview.raiseViewer();
return sview;
}
- ViewerType viewerType = getViewerType();
+ if (viewerType == null)
+ viewerType = getViewerType();
if (viewerType.equals(ViewerType.JMOL))
{
sview = new AppJmol(pdb, seqsForPdb, null, ap);
}
- else if (viewerType.equals(ViewerType.CHIMERA)
- || viewerType.equals(ViewerType.CHIMERAX))
+ else if (viewerType.equals(ViewerType.CHIMERA))
{
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());
+ Console.error(UNKNOWN_VIEWER_TYPE + getViewerType().toString());
}
return sview;
}
/**
- * Create a new panel controlling a structure viewer.
+ * Creates a new panel controlling a structure viewer
*
* @param type
- * @param pdbf
- * @param id
- * @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());
+ Console.error(UNKNOWN_VIEWER_TYPE + type.toString());
}
- return sview;
+ return viewer;
}
public boolean isBusy()