X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FStructureViewer.java;h=df5a6c42de04e113a7003dd1d50592a17ed0f721;hb=57dd16688caa6dacaeaf465bab3ee8b6126e1a51;hp=e307aa9039b3b36bb4b2059a15e0d8d81d58dde3;hpb=ae216fceddd8539d20fa5425cdaef3da73aba8f0;p=jalview.git diff --git a/src/jalview/gui/StructureViewer.java b/src/jalview/gui/StructureViewer.java index e307aa9..df5a6c4 100644 --- a/src/jalview/gui/StructureViewer.java +++ b/src/jalview/gui/StructureViewer.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) + * Copyright (C) 2015 The Jalview Authors * * This file is part of Jalview. * @@ -20,15 +20,17 @@ */ package jalview.gui; -import java.awt.Rectangle; - import jalview.api.structures.JalviewStructureDisplayI; import jalview.bin.Cache; import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceI; -import jalview.gui.StructureViewer.Viewer; +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. * @@ -42,20 +44,21 @@ public class StructureViewer { StructureSelectionManager ssm; - public enum Viewer + public enum ViewerType { JMOL, CHIMERA }; - public Viewer getViewerType() + public ViewerType getViewerType() { - String viewType = Cache.getDefault("STRUCTURE_DISPLAY", "JMOL"); - return Viewer.valueOf(viewType); + String viewType = Cache.getDefault(Preferences.STRUCTURE_DISPLAY, + ViewerType.JMOL.name()); + return ViewerType.valueOf(viewType); } - public void setViewerType(Viewer type) + public void setViewerType(ViewerType type) { - Cache.setProperty("STRUCTURE_DISPLAY", type.toString()); + Cache.setProperty(Preferences.STRUCTURE_DISPLAY, type.name()); } public StructureViewer(StructureSelectionManager structureSelectionManager) @@ -63,21 +66,86 @@ public class StructureViewer ssm = structureSelectionManager; } - public JalviewStructureDisplayI viewStructures(AlignmentPanel ap, - PDBEntry[] pr, SequenceI[][] collateForPDB) + /** + * View multiple PDB entries, each with associated sequences + * + * @param pdbs + * @param seqsForPdbs + * @param ap + * @return + */ + public JalviewStructureDisplayI viewStructures(PDBEntry[] pdbs, + SequenceI[][] seqsForPdbs, AlignmentPanel ap) { - return viewStructures(getViewerType(), ap, pr, collateForPDB); + JalviewStructureDisplayI viewer = onlyOnePdb(pdbs, seqsForPdbs, ap); + if (viewer != null) + { + return viewer; + } + return viewStructures(getViewerType(), pdbs, seqsForPdbs, ap); } - public JalviewStructureDisplayI viewStructures(Viewer viewerType,AlignmentPanel ap, - PDBEntry[] pr, SequenceI[][] collateForPDB) + + /** + * A strictly temporary method pending JAL-1761 refactoring. Determines if all + * the passed PDB entries are the same (this is the case if selected sequences + * to view structure for are chains of the same structure). If so, calls the + * single-pdb version of viewStructures and returns the viewer, else returns + * null. + * + * @param pdbs + * @param seqsForPdbs + * @param ap + * @return + */ + private JalviewStructureDisplayI onlyOnePdb(PDBEntry[] pdbs, + SequenceI[][] seqsForPdbs, AlignmentPanel ap) + { + List seqs = new ArrayList(); + if (pdbs == null || pdbs.length == 0) + { + return null; + } + int i = 0; + String firstFile = pdbs[0].getFile(); + for (PDBEntry pdb : pdbs) + { + String pdbFile = pdb.getFile(); + if (pdbFile == null || !pdbFile.equals(firstFile)) + { + return null; + } + SequenceI[] pdbseqs = seqsForPdbs[i++]; + if (pdbseqs != null) + { + for (SequenceI sq : pdbseqs) + { + seqs.add(sq); + } + } + } + return viewStructures(pdbs[0], + seqs.toArray(new SequenceI[seqs.size()]), ap); + } + + public JalviewStructureDisplayI viewStructures(PDBEntry pdb, + SequenceI[] seqsForPdb, AlignmentPanel ap) + { + return viewStructures(getViewerType(), pdb, seqsForPdb, ap); + } + + protected JalviewStructureDisplayI viewStructures(ViewerType viewerType, + PDBEntry[] pdbs, SequenceI[][] seqsForPdbs, AlignmentPanel ap) { JalviewStructureDisplayI sview = null; - if (viewerType.equals(Viewer.JMOL)){ - sview = new AppJmol(ap, pr, ap.av.collateForPDB(pr)); - } else - if (viewerType.equals(Viewer.CHIMERA)) { - sview = new ChimeraViewFrame(ap, pr, ap.av.collateForPDB(pr)); - }else + if (viewerType.equals(ViewerType.JMOL)) + { + sview = new AppJmol(ap, pdbs, ap.av.collateForPDB(pdbs)); + } + else if (viewerType.equals(ViewerType.CHIMERA)) + { + sview = new ChimeraViewFrame(pdbs, ap.av.collateForPDB(pdbs), ap); + } + else { Cache.log.error("Unknown structure viewer type " + getViewerType().toString()); @@ -85,33 +153,62 @@ public class StructureViewer return sview; } - public JalviewStructureDisplayI viewStructures(PDBEntry pdb, - SequenceI[] sequenceIs, Object object, AlignmentPanel ap) + protected JalviewStructureDisplayI viewStructures(ViewerType viewerType, + PDBEntry pdb, SequenceI[] seqsForPdb, AlignmentPanel ap) { - return viewStructures(ap, new PDBEntry[] - { pdb }, new SequenceI[][] - { sequenceIs }); + JalviewStructureDisplayI sview = null; + if (viewerType.equals(ViewerType.JMOL)) + { + sview = new AppJmol(pdb, seqsForPdb, null, ap); + } + else if (viewerType.equals(ViewerType.CHIMERA)) + { + sview = new ChimeraViewFrame(pdb, seqsForPdb, null, ap); + } + else + { + Cache.log.error("Unknown structure viewer type " + + getViewerType().toString()); + } + return sview; } - public JalviewStructureDisplayI createView(Viewer jmol, String[] pdbf, - String[] id, SequenceI[][] sq, AlignmentPanel alignPanel, - boolean useinJmolsuperpos, boolean usetoColourbyseq, - boolean jmolColouring, String fileloc, Rectangle rect, String vid) + /** + * Create a new panel controlling a structure viewer. + * + * @param type + * @param pdbf + * @param id + * @param sq + * @param alignPanel + * @param viewerData + * @param fileloc + * @param rect + * @param vid + * @return + */ + public JalviewStructureDisplayI createView(ViewerType type, + String[] pdbf, String[] id, SequenceI[][] sq, + AlignmentPanel alignPanel, StructureViewerModel viewerData, + String fileloc, Rectangle rect, String vid) { + final boolean useinViewerSuperpos = viewerData.isAlignWithPanel(); + final boolean usetoColourbyseq = viewerData.isColourWithAlignPanel(); + final boolean viewerColouring = viewerData.isColourByViewer(); + JalviewStructureDisplayI sview = null; - switch (getViewerType()) + switch (type) { case JMOL: - - sview = new AppJmol(pdbf, id, sq, alignPanel, useinJmolsuperpos, - usetoColourbyseq, jmolColouring, fileloc, rect, vid); - + sview = new AppJmol(pdbf, id, sq, alignPanel, usetoColourbyseq, + useinViewerSuperpos, viewerColouring, fileloc, rect, vid); break; case CHIMERA: + Cache.log.error("Unsupported structure viewer type " + + type.toString()); break; default: - Cache.log.error("Unknown structure viewer type " - + getViewerType().toString()); + Cache.log.error("Unknown structure viewer type " + type.toString()); } return sview; }