X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FChimeraViewFrame.java;h=ae3ff9eaa875dda1aef0387e3e3e7febb4246136;hb=8c04eddb0471d585f31292accfef12acf021b825;hp=72c50544f4b4409195457ac97760d2fe5136e73a;hpb=2373f90e6077de127c55ec6cb7671d8ba2436684;p=jalview.git diff --git a/src/jalview/gui/ChimeraViewFrame.java b/src/jalview/gui/ChimeraViewFrame.java index 72c5054..ae3ff9e 100644 --- a/src/jalview/gui/ChimeraViewFrame.java +++ b/src/jalview/gui/ChimeraViewFrame.java @@ -59,9 +59,7 @@ import java.io.InputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Random; -import java.util.Set; import java.util.Vector; import javax.swing.JCheckBoxMenuItem; @@ -156,8 +154,8 @@ public class ChimeraViewFrame extends StructureViewerBase alignStructs.setToolTipText(MessageManager .formatMessage( "label.align_structures_using_linked_alignment_views", - new Object[] - { new Integer(_alignwith.size()).toString() })); + new Object[] { new Integer(_alignwith + .size()).toString() })); } }); handler.itemStateChanged(null); @@ -183,6 +181,31 @@ public class ChimeraViewFrame extends StructureViewerBase // TODO Auto-generated method stub } }); + JMenuItem writeFeatures = new JMenuItem( + MessageManager.getString("label.create_chimera_attributes")); + writeFeatures.setToolTipText(MessageManager + .getString("label.create_chimera_attributes_tip")); + writeFeatures.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + sendFeaturesToChimera(); + } + }); + viewerActionMenu.add(writeFeatures); + } + + /** + * Send a command to Chimera to create residue attributes for Jalview features + *

+ * The syntax is: setattr r + *

+ * For example: setattr r jv:chain "Ferredoxin-1, Chloroplastic" #0:94.A + */ + protected void sendFeaturesToChimera() + { + jmb.sendFeaturesToChimera(getAlignmentPanel()); } /** @@ -196,7 +219,7 @@ public class ChimeraViewFrame extends StructureViewerBase public ChimeraViewFrame(PDBEntry pdbentry, SequenceI[] seq, String[] chains, final AlignmentPanel ap) { - super(); + this(); String pdbId = pdbentry.getId(); /* @@ -249,6 +272,7 @@ public class ChimeraViewFrame extends StructureViewerBase SequenceI[][] seqs) { createProgressBar(); + // FIXME extractChains needs pdbentries to match IDs to PDBEntry(s) on seqs String[][] chains = extractChains(seqs); jmb = new JalviewChimeraBindingModel(this, ap.getStructureSelectionManager(), pdbentrys, seqs, chains, @@ -270,6 +294,7 @@ public class ChimeraViewFrame extends StructureViewerBase this.addInternalFrameListener(new InternalFrameAdapter() { + @Override public void internalFrameClosing(InternalFrameEvent internalFrameEvent) { closeViewer(false); @@ -298,9 +323,13 @@ public class ChimeraViewFrame extends StructureViewerBase String chain = null; if (seq.getDatasetSequence() != null) { - Vector pdbrefs = seq.getDatasetSequence().getAllPDBEntries(); + Vector pdbrefs = seq.getDatasetSequence() + .getAllPDBEntries(); if (pdbrefs != null && pdbrefs.size() > 0) { + // FIXME: SequenceI.PDBEntry[0] chain mapping used for + // ChimeraViewFrame. Is this even used ??? + chain = pdbrefs.get(0).getChainCode(); } } @@ -323,12 +352,11 @@ public class ChimeraViewFrame extends StructureViewerBase * @param newViewId */ public ChimeraViewFrame(String chimeraSessionFile, - AlignmentPanel alignPanel, - PDBEntry[] pdbArray, + AlignmentPanel alignPanel, PDBEntry[] pdbArray, SequenceI[][] seqsArray, boolean colourByChimera, boolean colourBySequence, String newViewId) { - super(); + this(); setViewId(newViewId); this.chimeraSessionFile = chimeraSessionFile; openNewChimera(alignPanel, pdbArray, seqsArray); @@ -357,31 +385,22 @@ public class ChimeraViewFrame extends StructureViewerBase public ChimeraViewFrame(PDBEntry[] pe, SequenceI[][] seqs, AlignmentPanel ap) { - super(); + this(); openNewChimera(ap, pe, seqs); } - public ChimeraViewFrame(Map> toView, - AlignmentPanel alignPanel) + /** + * Default constructor + */ + public ChimeraViewFrame() { super(); /* - * Convert the map of sequences per pdb entry into the tied arrays expected - * by openNewChimera - * - * TODO pass the Map down to openNewChimera and its callees instead + * closeViewer will decide whether or not to close this frame + * depending on whether user chooses to Cancel or not */ - final Set pdbEntries = toView.keySet(); - PDBEntry[] pdbs = pdbEntries.toArray(new PDBEntry[pdbEntries.size()]); - SequenceI[][] seqsForPdbs = new SequenceI[pdbEntries.size()][]; - for (int i = 0; i < pdbs.length; i++) - { - final List seqsForPdb = toView.get(pdbs[i]); - seqsForPdbs[i] = seqsForPdb.toArray(new SequenceI[seqsForPdb.size()]); - } - - openNewChimera(alignPanel, pdbs, seqsForPdbs); + setDefaultCloseOperation(JInternalFrame.DO_NOTHING_ON_CLOSE); } /** @@ -414,14 +433,13 @@ public class ChimeraViewFrame extends StructureViewerBase void initChimera() { jmb.setFinishedInit(false); - jalview.gui.Desktop.addInternalFrame(this, jmb.getViewerTitle("Chimera", true), - getBounds().width, getBounds().height); + jalview.gui.Desktop.addInternalFrame(this, + jmb.getViewerTitle("Chimera", true), getBounds().width, + getBounds().height); if (!jmb.launchChimera()) { - JOptionPane - .showMessageDialog( - Desktop.desktop, + JOptionPane.showMessageDialog(Desktop.desktop, MessageManager.getString("label.chimera_failed"), MessageManager.getString("label.error_loading_file"), JOptionPane.ERROR_MESSAGE); @@ -461,6 +479,7 @@ public class ChimeraViewFrame extends StructureViewerBase MessageManager.getString("label.all")); menuItem.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent evt) { allChainsSelected = true; @@ -483,6 +502,7 @@ public class ChimeraViewFrame extends StructureViewerBase menuItem = new JCheckBoxMenuItem(chainName, true); menuItem.addItemListener(new ItemListener() { + @Override public void itemStateChanged(ItemEvent evt) { if (!allChainsSelected) @@ -524,6 +544,7 @@ public class ChimeraViewFrame extends StructureViewerBase * @param closeChimera * if true, close any linked Chimera process; if false, prompt first */ + @Override public void closeViewer(boolean closeChimera) { if (jmb != null && jmb.isChimeraRunning()) @@ -531,12 +552,20 @@ public class ChimeraViewFrame extends StructureViewerBase if (!closeChimera) { String prompt = MessageManager.formatMessage( - "label.confirm_close_chimera", new Object[] - { jmb.getViewerTitle("Chimera", false) }); + "label.confirm_close_chimera", + new Object[] { jmb.getViewerTitle("Chimera", false) }); prompt = JvSwingUtils.wrapTooltip(true, prompt); int confirm = JOptionPane.showConfirmDialog(this, prompt, MessageManager.getString("label.close_viewer"), - JOptionPane.YES_NO_OPTION); + JOptionPane.YES_NO_CANCEL_OPTION); + /* + * abort closure if user hits escape or Cancel + */ + if (confirm == JOptionPane.CANCEL_OPTION + || confirm == JOptionPane.CLOSED_OPTION) + { + return; + } closeChimera = confirm == JOptionPane.YES_OPTION; } jmb.closeViewer(closeChimera); @@ -548,12 +577,14 @@ public class ChimeraViewFrame extends StructureViewerBase // TODO: check for memory leaks where instance isn't finalised because jmb // holds a reference to the window jmb = null; + dispose(); } /** * Open any newly added PDB structures in Chimera, having first fetched data * from PDB (if not already saved). */ + @Override public void run() { _started = true; @@ -625,9 +656,8 @@ public class ChimeraViewFrame extends StructureViewerBase JOptionPane.showInternalMessageDialog(Desktop.desktop, MessageManager .formatMessage("label.pdb_entries_couldnt_be_retrieved", - new Object[] - { errormsgs.toString() }), MessageManager - .getString("label.couldnt_load_file"), + new Object[] { errormsgs.toString() }), + MessageManager.getString("label.couldnt_load_file"), JOptionPane.ERROR_MESSAGE); } @@ -653,7 +683,8 @@ public class ChimeraViewFrame extends StructureViewerBase { int pos = filePDBpos.get(num).intValue(); long startTime = startProgressBar("Chimera " - + MessageManager.getString("status.opening_file")); + + MessageManager.getString("status.opening_file_for") + + " " + pe.getId()); jmb.openFile(pe); jmb.addSequence(pos, jmb.getSequence()[pos]); File fl = new File(pe.getFile()); @@ -672,9 +703,7 @@ public class ChimeraViewFrame extends StructureViewerBase } // Explicitly map to the filename used by Chimera ; jmb.getSsm().setMapping(jmb.getSequence()[pos], - jmb.getChains()[pos], - pe.getFile(), - protocol); + jmb.getChains()[pos], pe.getFile(), protocol); } catch (OutOfMemoryError oomerror) { new OOMWarning( @@ -699,10 +728,11 @@ public class ChimeraViewFrame extends StructureViewerBase jmb.updateColours(ap); } // do superposition if asked to - if (alignAddedStructures) + if (Cache.getDefault("AUTOSUPERIMPOSE", true) && alignAddedStructures) { new Thread(new Runnable() { + @Override public void run() { alignStructs_withAllAlignPanels(); @@ -726,6 +756,7 @@ public class ChimeraViewFrame extends StructureViewerBase */ private String fetchPdbFile(PDBEntry processingEntry) throws Exception { + // FIXME: this is duplicated code with Jmol frame ? String filePath = null; Pdb pdbclient = new Pdb(); AlignmentI pdbseq = null; @@ -737,8 +768,7 @@ public class ChimeraViewFrame extends StructureViewerBase * Write 'fetching PDB' progress on AlignFrame as we are not yet visible */ String msg = MessageManager.formatMessage("status.fetching_pdb", - new Object[] - { pdbid }); + new Object[] { pdbid }); getAlignmentPanel().alignFrame.setProgressBar(msg, handle); // long hdl = startProgressBar(MessageManager.formatMessage( // "status.fetching_pdb", new Object[] @@ -751,8 +781,7 @@ public class ChimeraViewFrame extends StructureViewerBase new OOMWarning("Retrieving PDB id " + pdbid, oomerror); } finally { - msg = pdbid + " " - + MessageManager.getString("label.state_completed"); + msg = pdbid + " " + MessageManager.getString("label.state_completed"); getAlignmentPanel().alignFrame.setProgressBar(msg, handle); // stopProgressBar(msg, hdl); } @@ -1036,10 +1065,10 @@ public class ChimeraViewFrame extends StructureViewerBase setChainMenuItems(jmb.getChainNames()); this.setTitle(jmb.getViewerTitle("Chimera", true)); - if (jmb.getPdbFile().length > 1 && jmb.getSequence().length > 1) - { + // if (jmb.getPdbFile().length > 1 && jmb.getSequence().length > 1) + // { viewerActionMenu.setVisible(true); - } + // } if (!jmb.isLoadingFromArchive()) { seqColour_actionPerformed(null); @@ -1097,6 +1126,7 @@ public class ChimeraViewFrame extends StructureViewerBase } } + @Override public void setJalviewColourScheme(ColourSchemeI ucs) { jmb.setJalviewColourScheme(ucs);