X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FChimeraViewFrame.java;h=f13e151daa3c997cd8427b7cb94f62d95b1ee96e;hb=d4eb0781b285bc64fbc9b040c9bfc1eb5f6d8267;hp=65b002b0a4e90b83e91da1d88188012e4c239c66;hpb=2107a91322a1988a8a6b724c74f9d244795341e3;p=jalview.git diff --git a/src/jalview/gui/ChimeraViewFrame.java b/src/jalview/gui/ChimeraViewFrame.java index 65b002b..f13e151 100644 --- a/src/jalview/gui/ChimeraViewFrame.java +++ b/src/jalview/gui/ChimeraViewFrame.java @@ -28,6 +28,7 @@ import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import javax.swing.JInternalFrame; import javax.swing.JMenu; @@ -37,9 +38,11 @@ import javax.swing.event.InternalFrameEvent; import jalview.api.AlignmentViewPanel; import jalview.api.FeatureRenderer; -import jalview.bin.Cache; +import jalview.bin.Console; import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceI; +import jalview.datamodel.StructureViewerModel; +import jalview.datamodel.StructureViewerModel.StructureData; import jalview.ext.rbvi.chimera.JalviewChimeraBinding; import jalview.gui.StructureViewer.ViewerType; import jalview.io.DataSourceType; @@ -70,6 +73,10 @@ public class ChimeraViewFrame extends StructureViewerBase private int myHeight = 150; + private JMenuItem writeFeatures = null; + + private JMenu fetchAttributes = null; + /** * Initialise menu options. */ @@ -81,10 +88,10 @@ public class ChimeraViewFrame extends StructureViewerBase savemenu.setVisible(false); // not yet implemented viewMenu.add(fitToWindow); - JMenuItem writeFeatures = new JMenuItem( + writeFeatures = new JMenuItem( MessageManager.getString("label.create_viewer_attributes")); - writeFeatures.setToolTipText(MessageManager - .getString("label.create_viewer_attributes_tip")); + writeFeatures.setToolTipText( + MessageManager.getString("label.create_viewer_attributes_tip")); writeFeatures.addActionListener(new ActionListener() { @Override @@ -95,10 +102,10 @@ public class ChimeraViewFrame extends StructureViewerBase }); viewerActionMenu.add(writeFeatures); - final JMenu fetchAttributes = new JMenu( - MessageManager.getString("label.fetch_chimera_attributes")); - fetchAttributes.setToolTipText( - MessageManager.getString("label.fetch_chimera_attributes_tip")); + fetchAttributes = new JMenu(MessageManager.formatMessage( + "label.fetch_viewer_attributes", getViewerName())); + fetchAttributes.setToolTipText(MessageManager.formatMessage( + "label.fetch_viewer_attributes_tip", getViewerName())); fetchAttributes.addMouseListener(new MouseAdapter() { @@ -111,9 +118,19 @@ public class ChimeraViewFrame extends StructureViewerBase viewerActionMenu.add(fetchAttributes); } + @Override + protected void buildActionMenu() + { + super.buildActionMenu(); + // add these back in after menu is refreshed + viewerActionMenu.add(writeFeatures); + viewerActionMenu.add(fetchAttributes); + + }; + /** - * Query Chimera for its residue attribute names and add them as items off the - * attributes menu + * Query the structure viewer for its residue attribute names and add them as + * items off the attributes menu * * @param attributesMenu */ @@ -130,7 +147,11 @@ public class ChimeraViewFrame extends StructureViewerBase @Override public void actionPerformed(ActionEvent e) { - getChimeraAttributes(attName); + if (getBinding().copyStructureAttributesToFeatures(attName, + getAlignmentPanel()) > 0) + { + getAlignmentPanel().getFeatureRenderer().featuresAdded(); + } } }); attributesMenu.add(menuItem); @@ -138,17 +159,6 @@ public class ChimeraViewFrame extends StructureViewerBase } /** - * Read residues in Chimera with the given attribute name, and set as features - * on the corresponding sequence positions (if any) - * - * @param attName - */ - protected void getChimeraAttributes(String attName) - { - jmb.copyStructureAttributesToFeatures(attName, getAlignmentPanel()); - } - - /** * Sends command(s) to the structure viewer to create residue attributes for * visible Jalview features */ @@ -156,8 +166,8 @@ public class ChimeraViewFrame extends StructureViewerBase { // todo pull up? int count = jmb.sendFeaturesToViewer(getAlignmentPanel()); - statusBar.setText( - MessageManager.formatMessage("label.attributes_set", count)); + statusBar.setText(MessageManager.formatMessage("label.attributes_set", + count, getViewerName())); } /** @@ -240,22 +250,34 @@ public class ChimeraViewFrame extends StructureViewerBase * @param colourBySequence * @param newViewId */ - public ChimeraViewFrame(String chimeraSessionFile, - AlignmentPanel alignPanel, PDBEntry[] pdbArray, - SequenceI[][] seqsArray, boolean colourByChimera, - boolean colourBySequence, String newViewId) + public ChimeraViewFrame(StructureViewerModel viewerData, + AlignmentPanel alignPanel, String sessionFile, String vid) { this(); - setViewId(newViewId); - this.chimeraSessionFile = chimeraSessionFile; + setViewId(vid); + this.chimeraSessionFile = sessionFile; + Map pdbData = viewerData.getFileData(); + PDBEntry[] pdbArray = new PDBEntry[pdbData.size()]; + SequenceI[][] seqsArray = new SequenceI[pdbData.size()][]; + int i = 0; + for (StructureData data : pdbData.values()) + { + PDBEntry pdbentry = new PDBEntry(data.getPdbId(), null, + PDBEntry.Type.PDB, data.getFilePath()); + pdbArray[i] = pdbentry; + List sequencesForPdb = data.getSeqList(); + seqsArray[i] = sequencesForPdb + .toArray(new SequenceI[sequencesForPdb.size()]); + i++; + } openNewChimera(alignPanel, pdbArray, seqsArray); - if (colourByChimera) + if (viewerData.isColourByViewer()) { jmb.setColourBySequence(false); seqColour.setSelected(false); viewerColour.setSelected(true); } - else if (colourBySequence) + else if (viewerData.isColourWithAlignPanel()) { jmb.setColourBySequence(true); seqColour.setSelected(true); @@ -272,8 +294,7 @@ public class ChimeraViewFrame extends StructureViewerBase * @param ap */ public ChimeraViewFrame(PDBEntry[] pe, boolean alignAdded, - SequenceI[][] seqs, - AlignmentPanel ap) + SequenceI[][] seqs, AlignmentPanel ap) { this(); setAlignAddedStructures(alignAdded); @@ -312,6 +333,7 @@ public class ChimeraViewFrame extends StructureViewerBase getViewerName()), MessageManager.getString("label.error_loading_file"), JvOptionPane.ERROR_MESSAGE); + jmb.closeViewer(true); this.dispose(); return; } @@ -321,7 +343,7 @@ public class ChimeraViewFrame extends StructureViewerBase boolean opened = jmb.openSession(chimeraSessionFile); if (!opened) { - System.err.println("An error occurred opening Chimera session file " + jalview.bin.Console.errPrintln("An error occurred opening Chimera session file " + chimeraSessionFile); } } @@ -422,9 +444,15 @@ public class ChimeraViewFrame extends StructureViewerBase initChimera(); } catch (Exception ex) { - Cache.log.error("Couldn't open Chimera viewer!", ex); + Console.error("Couldn't open Chimera viewer!", ex); } } + if (!jmb.isViewerRunning()) + { + // nothing to do + // TODO: ensure we tidy up JAL-3619 + return; + } int num = -1; for (PDBEntry pe : filePDB) { @@ -467,12 +495,12 @@ public class ChimeraViewFrame extends StructureViewerBase oomerror); } catch (Exception ex) { - Cache.log.error( + Console.error( "Couldn't open " + pe.getFile() + " in Chimera viewer!", ex); } finally { - Cache.log.debug("File locations are " + files); + Console.debug("File locations are " + files); } } } @@ -483,7 +511,8 @@ public class ChimeraViewFrame extends StructureViewerBase /* * ensure that any newly discovered features (e.g. RESNUM) - * are added to any open feature settings dialog + * are notified to the FeatureRenderer (and added to any + * open feature settings dialog) */ FeatureRenderer fr = getBinding().getFeatureRenderer(null); if (fr != null) @@ -528,12 +557,6 @@ public class ChimeraViewFrame extends StructureViewerBase } @Override - protected void fitToWindow_actionPerformed() - { - jmb.focusView(); - } - - @Override public ViewerType getViewerType() { return ViewerType.CHIMERA;