X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FChimeraViewFrame.java;h=0e5675cbcdf985c29673216af4c7fb757bb230f5;hb=c38d37887ae51d63942ac4321f6769308188ed6b;hp=a6e479d0a784136b236fa435644e4af357f7a95b;hpb=42f4227ed213d422a87d3b22fc9e85d14ffaf53f;p=jalview.git
diff --git a/src/jalview/gui/ChimeraViewFrame.java b/src/jalview/gui/ChimeraViewFrame.java
index a6e479d..0e5675c 100644
--- a/src/jalview/gui/ChimeraViewFrame.java
+++ b/src/jalview/gui/ChimeraViewFrame.java
@@ -20,31 +20,15 @@
*/
package jalview.gui;
-import jalview.api.AlignmentViewPanel;
-import jalview.api.FeatureRenderer;
-import jalview.bin.Cache;
-import jalview.datamodel.PDBEntry;
-import jalview.datamodel.SequenceI;
-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.MessageManager;
-import jalview.util.Platform;
-
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.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
@@ -52,6 +36,22 @@ import javax.swing.JMenuItem;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
+import jalview.api.AlignmentViewPanel;
+import jalview.api.FeatureRenderer;
+import jalview.bin.Cache;
+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.ImageMaker.TYPE;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+
/**
* GUI elements for handling an external chimera display
*
@@ -81,21 +81,13 @@ public class ChimeraViewFrame extends StructureViewerBase
{
super.initMenus();
- viewerActionMenu.setText(MessageManager.getString("label.chimera"));
-
- viewerColour
- .setText(MessageManager.getString("label.colour_with_chimera"));
- viewerColour.setToolTipText(MessageManager
- .getString("label.let_chimera_manage_structure_colours"));
-
- 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"));
+ MessageManager.getString("label.create_viewer_attributes"));
writeFeatures.setToolTipText(MessageManager
- .getString("label.create_chimera_attributes_tip"));
+ .getString("label.create_viewer_attributes_tip"));
writeFeatures.addActionListener(new ActionListener()
{
@Override
@@ -160,14 +152,12 @@ public class ChimeraViewFrame extends StructureViewerBase
}
/**
- * Send a command to Chimera to create residue attributes for Jalview features
- *
- * The syntax is: setattr r <attName> <attValue> <atomSpec>
- *
- * 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));
@@ -253,22 +243,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);
@@ -321,7 +323,8 @@ public class ChimeraViewFrame extends StructureViewerBase
if (!jmb.launchChimera())
{
JvOptionPane.showMessageDialog(Desktop.desktop,
- MessageManager.getString("label.chimera_failed"),
+ MessageManager.formatMessage("label.open_viewer_failed",
+ getViewerName()),
MessageManager.getString("label.error_loading_file"),
JvOptionPane.ERROR_MESSAGE);
this.dispose();
@@ -342,50 +345,6 @@ public class ChimeraViewFrame extends StructureViewerBase
}
/**
- * Close down this instance of Jalview's Chimera viewer, giving the user the
- * option to close the associated Chimera window (process). They may wish to
- * keep it open until they have had an opportunity to save any work.
- *
- * @param closeChimera
- * if true, close any linked Chimera process; if false, prompt first
- */
- @Override
- public void closeViewer(boolean closeChimera)
- {
- if (jmb != null && jmb.isChimeraRunning())
- {
- if (!closeChimera)
- {
- String prompt = MessageManager
- .formatMessage("label.confirm_close_chimera", new Object[]
- { jmb.getViewerTitle(getViewerName(), false) });
- prompt = JvSwingUtils.wrapTooltip(true, prompt);
- int confirm = JvOptionPane.showConfirmDialog(this, prompt,
- MessageManager.getString("label.close_viewer"),
- JvOptionPane.YES_NO_CANCEL_OPTION);
- /*
- * abort closure if user hits escape or Cancel
- */
- if (confirm == JvOptionPane.CANCEL_OPTION
- || confirm == JvOptionPane.CLOSED_OPTION)
- {
- return;
- }
- closeChimera = confirm == JvOptionPane.YES_OPTION;
- }
- jmb.closeViewer(closeChimera);
- }
- setAlignmentPanel(null);
- _aps.clear();
- _alignwith.clear();
- _colourwith.clear();
- // 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).
*/
@@ -571,31 +530,10 @@ public class ChimeraViewFrame extends StructureViewerBase
}
@Override
- public void eps_actionPerformed()
- {
- throw new Error(MessageManager
- .getString("error.eps_generation_not_implemented"));
- }
-
- @Override
- public void png_actionPerformed()
+ public void makePDBImage(TYPE imageType)
{
- throw new Error(MessageManager
- .getString("error.png_generation_not_implemented"));
- }
-
- @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());
- }
+ throw new UnsupportedOperationException(
+ "Image export for Chimera is not implemented");
}
@Override
@@ -604,77 +542,6 @@ public class ChimeraViewFrame extends StructureViewerBase
return jmb;
}
- /**
- * Ask Chimera to save its session to the designated file path, or to a
- * temporary file if the path is null. Returns the file path if successful,
- * else null.
- *
- * @param filepath
- * @see getStateInfo
- */
- protected String saveSession(String filepath)
- {
- String pathUsed = filepath;
- try
- {
- if (pathUsed == null)
- {
- String suffix = jmb.getSessionFileExtension();
- File tempFile = File.createTempFile("chimera", suffix);
- tempFile.deleteOnExit();
- pathUsed = tempFile.getPath();
- }
- boolean result = jmb.saveSession(pathUsed);
- if (result)
- {
- this.chimeraSessionFile = pathUsed;
- return pathUsed;
- }
- } catch (IOException e)
- {
- }
- return null;
- }
-
- /**
- * Returns a string representing the state of the Chimera session. This is
- * done by requesting Chimera to save its session to a temporary file, then
- * reading the file contents. Returns an empty string on any error.
- */
- @Override
- public String getStateInfo()
- {
- String sessionFile = saveSession(null);
- if (sessionFile == null)
- {
- return "";
- }
- InputStream is = null;
- try
- {
- File f = new File(sessionFile);
- byte[] bytes = new byte[(int) f.length()];
- is = new FileInputStream(sessionFile);
- is.read(bytes);
- return new String(bytes);
- } catch (IOException e)
- {
- return "";
- } finally
- {
- if (is != null)
- {
- try
- {
- is.close();
- } catch (IOException e)
- {
- // ignore
- }
- }
- }
- }
-
@Override
protected void fitToWindow_actionPerformed()
{