*/
package jalview.gui;
+
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
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;
import jalview.io.StructureFile;
import jalview.structures.models.AAStructureBindingModel;
-import jalview.util.BrowserLauncher;
import jalview.util.ImageMaker.TYPE;
import jalview.util.MessageManager;
import jalview.util.Platform;
-
/**
* GUI elements for handling an external chimera display
*
{
private JalviewChimeraBinding jmb;
+
/*
* 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
*/
private String chimeraSessionFile = null;
+
private int myWidth = 500;
private int myHeight = 150;
+ private JMenuItem writeFeatures = null;
+
+ private JMenu fetchAttributes = null;
+
/**
* Initialise menu options.
*/
{
super.initMenus();
- viewerActionMenu.setText(MessageManager.getString("label.chimera"));
-
- helpItem.setText(MessageManager.getString("label.chimera_help"));
savemenu.setVisible(false); // not yet implemented
viewMenu.add(fitToWindow);
- JMenuItem writeFeatures = new JMenuItem(
- MessageManager.getString("label.create_chimera_attributes"));
- writeFeatures.setToolTipText(MessageManager
- .getString("label.create_chimera_attributes_tip"));
+ writeFeatures = new JMenuItem(
+ MessageManager.getString("label.create_viewer_attributes"));
+ writeFeatures.setToolTipText(
+ MessageManager.getString("label.create_viewer_attributes_tip"));
writeFeatures.addActionListener(new ActionListener()
{
@Override
});
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()
{
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
*/
@Override
public void actionPerformed(ActionEvent e)
{
- getChimeraAttributes(attName);
+ if (getBinding().copyStructureAttributesToFeatures(attName,
+ getAlignmentPanel()) > 0)
+ {
+ getAlignmentPanel().getFeatureRenderer().featuresAdded();
+ }
}
});
attributesMenu.add(menuItem);
}
/**
- * 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());
- }
-
- /**
- * Send a command to Chimera to create residue attributes for Jalview features
- * <p>
- * The syntax is: setattr r <attName> <attValue> <atomSpec>
- * <p>
- * For example: setattr r jv_chain "Ferredoxin-1, Chloroplastic" #0:94.A
+ * Sends command(s) to the structure viewer to create residue attributes for
+ * visible Jalview features
*/
protected void sendFeaturesToChimera()
{
+ // 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()));
}
/**
return new JalviewChimeraBindingModel(this,
ap.getStructureSelectionManager(), pdbentrys, seqs, null);
}
-
/**
* Create a new viewer from saved session state data including Chimera session
* file
* @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<File, StructureData> 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<SequenceI> 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);
* @param ap
*/
public ChimeraViewFrame(PDBEntry[] pe, boolean alignAdded,
- SequenceI[][] seqs,
- AlignmentPanel ap)
+ SequenceI[][] seqs, AlignmentPanel ap)
{
this();
setAlignAddedStructures(alignAdded);
if (!jmb.launchChimera())
{
- JvOptionPane.showMessageDialog(Desktop.desktop,
+ JvOptionPane.showMessageDialog(Desktop.getDesktopPane(),
MessageManager.formatMessage("label.open_viewer_failed",
getViewerName()),
MessageManager.getString("label.error_loading_file"),
JvOptionPane.ERROR_MESSAGE);
+ jmb.closeViewer(true);
this.dispose();
return;
}
if (errormsgs.length() > 0)
{
- JvOptionPane.showInternalMessageDialog(Desktop.desktop,
+ JvOptionPane.showInternalMessageDialog(Desktop.getDesktopPane(),
MessageManager.formatMessage(
"label.pdb_entries_couldnt_be_retrieved", new Object[]
{ errormsgs.toString() }),
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)
{
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);
}
}
}
/*
* 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)
worker = null;
}
+
@Override
public void makePDBImage(TYPE imageType)
{
}
@Override
- public void showHelp_actionPerformed()
- {
- try
- {
- String url = jmb.getHelpURL();
- BrowserLauncher.openURL(url);
- } catch (IOException ex)
- {
- System.err
- .println("Show Chimera help failed with: " + ex.getMessage());
- }
- }
-
- @Override
public AAStructureBindingModel getBinding()
{
return jmb;
}
- @Override
- protected void fitToWindow_actionPerformed()
- {
- jmb.focusView();
- }
@Override
public ViewerType getViewerType()