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;
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.
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)
}
/**
- * 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);
+ }
}
/**
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);
}
{
try
{
- initChimera("");
+ initChimera();
} catch (Exception ex)
{
Cache.log.error("Couldn't open Chimera viewer!", ex);
repaint();
return;
}
- setChainMenuItems(jmb.chainNames);
+ setChainMenuItems(jmb.getChainNames());
this.setTitle(jmb.getViewerTitle("Chimera", true));
if (jmb.getPdbFile().length > 1 && jmb.getSequence().length > 1)