X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FChimeraViewFrame.java;h=8ebd231a1d09067fadeff122e944adc7112c943f;hb=31f1b88951cc5ff3aea7ae0bc1a9d8fbdd264ea3;hp=4e313b5fecf619691875f825465479f140d3545b;hpb=95e0cdd0a7da15cad5d1d3adbb621419d84e135a;p=jalview.git diff --git a/src/jalview/gui/ChimeraViewFrame.java b/src/jalview/gui/ChimeraViewFrame.java index 4e313b5..8ebd231 100644 --- a/src/jalview/gui/ChimeraViewFrame.java +++ b/src/jalview/gui/ChimeraViewFrame.java @@ -27,7 +27,6 @@ import jalview.datamodel.ColumnSelection; import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceI; import jalview.ext.rbvi.chimera.JalviewChimeraBinding; -import jalview.gui.Jalview2XML.ViewerData; import jalview.io.AppletFormatAdapter; import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; @@ -99,9 +98,11 @@ public class ChimeraViewFrame extends StructureViewerBase private Thread worker = null; /* - * Path to Chimera session file - set in saveSession() + * Path to Chimera session file. This is set when an open Jalview/Chimera + * session is saved, or on restore from a Jalview project (if it holds the + * filename of any saved Chimera sessions). */ - private String chimeraSessionFile = ""; + private String chimeraSessionFile = null; /** * Initialise menu options. @@ -311,12 +312,11 @@ public class ChimeraViewFrame extends StructureViewerBase jmb.setColourBySequence(true); setSize(400, 400); // probably should be a configurable/dynamic default here initMenus(); - worker = null; - { - addingStructures = false; - worker = new Thread(this); - worker.start(); - } + + addingStructures = false; + worker = new Thread(this); + worker.start(); + this.addInternalFrameListener(new InternalFrameAdapter() { public void internalFrameClosing(InternalFrameEvent internalFrameEvent) @@ -343,20 +343,37 @@ public class ChimeraViewFrame extends StructureViewerBase } /** - * Create a new viewer from saved session state data. + * Create a new viewer from saved session state data including Chimera session + * file. + * + * @param chimeraSession * - * @param viewerData - * @param af + * @param alignPanel + * @param pdbArray + * @param seqsArray + * @param colourByChimera + * @param colourBySequence */ - public ChimeraViewFrame(ViewerData viewerData, AlignFrame af) + public ChimeraViewFrame(String chimeraSession, AlignmentPanel alignPanel, + PDBEntry[] pdbArray, + SequenceI[][] seqsArray, boolean colourByChimera, + boolean colourBySequence) { super(); - String chimeraSessionFile = viewerData.stateData; - openNewChimera(af.alignPanel, new PDBEntry[] - {}, new SequenceI[][] - {}); - initChimera("open " + chimeraSessionFile); - // TODO restore mappings + this.chimeraSessionFile = chimeraSession; + openNewChimera(alignPanel, pdbArray, seqsArray); + if (colourByChimera) + { + jmb.setColourBySequence(false); + seqColour.setSelected(false); + viewerColour.setSelected(true); + } + else if (colourBySequence) + { + jmb.setColourBySequence(true); + seqColour.setSelected(true); + viewerColour.setSelected(false); + } } /** @@ -433,18 +450,31 @@ public class ChimeraViewFrame extends StructureViewerBase return result; } - void initChimera(String command) + /** + * Launch Chimera. If we have a chimera session file name, send Chimera the + * command to open its saved session file. + */ + void initChimera() { jmb.setFinishedInit(false); - // TODO: consider waiting until the structure/view is fully loaded before - // displaying jalview.gui.Desktop.addInternalFrame(this, jmb.getViewerTitle("Chimera", true), getBounds().width, getBounds().height); - if (command == null) + + /* + * Pass an empty 'command' to launch Chimera + */ + jmb.evalStateCommand("", false); + + if (this.chimeraSessionFile != null) { - command = ""; + boolean opened = jmb.openSession(chimeraSessionFile); + if (!opened) + { + System.err + .println("An error occurred opening Chimera session file " + + chimeraSessionFile); + } } - jmb.evalStateCommand(command, false); jmb.setFinishedInit(true); } @@ -625,7 +655,7 @@ public class ChimeraViewFrame extends StructureViewerBase { try { - initChimera(""); + initChimera(); } catch (Exception ex) { Cache.log.error("Couldn't open Chimera viewer!", ex); @@ -986,7 +1016,7 @@ public class ChimeraViewFrame extends StructureViewerBase repaint(); return; } - setChainMenuItems(jmb.chainNames); + setChainMenuItems(jmb.getChainNames()); this.setTitle(jmb.getViewerTitle("Chimera", true)); if (jmb.getPdbFile().length > 1 && jmb.getSequence().length > 1)