X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAppJmol.java;h=3a87f8c656d6117edffc52c4937cfe5bc76f1524;hb=506d60f0e188723ddc91c26824b41ac7034df3fe;hp=50e564411aa994ef4d945d3620dc3a90f76ee299;hpb=60f2d6c034560415fd0139c8bc7df0c19cae1186;p=jalview.git diff --git a/src/jalview/gui/AppJmol.java b/src/jalview/gui/AppJmol.java index 50e5644..3a87f8c 100644 --- a/src/jalview/gui/AppJmol.java +++ b/src/jalview/gui/AppJmol.java @@ -1,17 +1,17 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) + * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA @@ -39,32 +39,40 @@ import org.jmol.api.*; import org.jmol.adapter.smarter.SmarterJmolAdapter; import org.jmol.popup.*; - -public class AppJmol - extends GStructureViewer - implements StructureListener, JmolStatusListener, Runnable +public class AppJmol extends GStructureViewer implements StructureListener, + JmolStatusListener, Runnable { JmolViewer viewer; + JmolPopup jmolpopup; + ScriptWindow scriptWindow; + PDBEntry pdbentry; + SequenceI[] sequence; - String [] chains; + + String[] chains; + StructureSelectionManager ssm; + JSplitPane splitPane; + RenderPanel renderPanel; + AlignmentPanel ap; + String fileLoadingError; + boolean colourBySequence = true; + boolean loadingFromArchive = false; + Vector atomsPicked = new Vector(); - public AppJmol(String file, String id, - SequenceI[] seq, - AlignmentPanel ap, - String loadStatus, - Rectangle bounds) + public AppJmol(String file, String id, SequenceI[] seq, + AlignmentPanel ap, String loadStatus, Rectangle bounds) { loadingFromArchive = true; pdbentry = new PDBEntry(); @@ -77,8 +85,8 @@ public class AppJmol colourBySequence = false; seqColour.setSelected(false); - //jalview.gui.Desktop.addInternalFrame(this, "Loading File", - // bounds.width,bounds.height); + // jalview.gui.Desktop.addInternalFrame(this, "Loading File", + // bounds.width,bounds.height); initJmol(loadStatus); @@ -91,78 +99,85 @@ public class AppJmol }); } -public synchronized void addSequence(SequenceI [] seq) - { + public synchronized void addSequence(SequenceI[] seq) + { Vector v = new Vector(); - for(int i=0; i 0) cmd.setLength(cmd.length() - 4); - viewer.evalStringQuiet("select *;restrict " - +cmd+";cartoon;center "+cmd); + viewer.evalStringQuiet("select *;restrict " + cmd + ";cartoon;center " + + cmd); } void closeViewer() @@ -287,11 +300,10 @@ public synchronized void addSequence(SequenceI [] seq) viewer.setJmolStatusListener(null); viewer = null; - //We'll need to find out what other + // We'll need to find out what other // listeners need to be shut down in Jmol - StructureSelectionManager - .getStructureSelectionManager() - .removeStructureViewerListener(this, pdbentry.getFile()); + StructureSelectionManager.getStructureSelectionManager() + .removeStructureViewerListener(this, pdbentry.getFile()); } public void run() @@ -301,10 +313,13 @@ public synchronized void addSequence(SequenceI [] seq) EBIFetchClient ebi = new EBIFetchClient(); String query = "pdb:" + pdbentry.getId(); pdbentry.setFile(ebi.fetchDataAsFile(query, "default", "raw") - .getAbsolutePath()); - initJmol("load "+pdbentry.getFile()); - } - catch (Exception ex) + .getAbsolutePath()); + initJmol("load " + pdbentry.getFile()); + } catch (OutOfMemoryError oomerror) + { + new OOMWarning("Retrieving PDB id " + pdbentry.getId() + " from MSD", + oomerror); + } catch (Exception ex) { ex.printStackTrace(); } @@ -312,9 +327,8 @@ public synchronized void addSequence(SequenceI [] seq) public void pdbFile_actionPerformed(ActionEvent actionEvent) { - JalviewFileChooser chooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty( - "LAST_DIRECTORY")); + JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache + .getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle("Save PDB File"); @@ -326,23 +340,21 @@ public synchronized void addSequence(SequenceI [] seq) { try { - BufferedReader in = new BufferedReader(new FileReader(pdbentry.getFile())); + BufferedReader in = new BufferedReader(new FileReader(pdbentry + .getFile())); File outFile = chooser.getSelectedFile(); PrintWriter out = new PrintWriter(new FileOutputStream(outFile)); String data; - while ( (data = in.readLine()) != null) + while ((data = in.readLine()) != null) { - if ( - ! (data.indexOf("
") > -1 || data.indexOf("
") > -1) - ) + if (!(data.indexOf("
") > -1 || data.indexOf("
") > -1)) { out.println(data); } } out.close(); - } - catch (Exception ex) + } catch (Exception ex) { ex.printStackTrace(); } @@ -352,18 +364,17 @@ public synchronized void addSequence(SequenceI [] seq) public void viewMapping_actionPerformed(ActionEvent actionEvent) { jalview.gui.CutAndPasteTransfer cap = new jalview.gui.CutAndPasteTransfer(); - jalview.gui.Desktop.addInternalFrame(cap, "PDB - Sequence Mapping", 550, - 600); - cap.setText( - StructureSelectionManager.getStructureSelectionManager().printMapping( - pdbentry.getFile()) - ); + jalview.gui.Desktop.addInternalFrame(cap, "PDB - Sequence Mapping", + 550, 600); + cap.setText(StructureSelectionManager.getStructureSelectionManager() + .printMapping(pdbentry.getFile())); } /** * DOCUMENT ME! - * - * @param e DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ public void eps_actionPerformed(ActionEvent e) { @@ -372,8 +383,9 @@ public synchronized void addSequence(SequenceI [] seq) /** * DOCUMENT ME! - * - * @param e DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ public void png_actionPerformed(ActionEvent e) { @@ -389,31 +401,24 @@ public synchronized void addSequence(SequenceI [] seq) if (type == jalview.util.ImageMaker.PNG) { - im = new jalview.util.ImageMaker(this, - jalview.util.ImageMaker.PNG, - "Make PNG image from view", - width, height, - null, null); + im = new jalview.util.ImageMaker(this, jalview.util.ImageMaker.PNG, + "Make PNG image from view", width, height, null, null); } else { - im = new jalview.util.ImageMaker(this, - jalview.util.ImageMaker.EPS, - "Make EPS file from view", - width, height, - null, this.getTitle()); + im = new jalview.util.ImageMaker(this, jalview.util.ImageMaker.EPS, + "Make EPS file from view", width, height, null, this + .getTitle()); } if (im.getGraphics() != null) { Rectangle rect = new Rectangle(width, height); - viewer.renderScreenImage(im.getGraphics(), - rect.getSize(), rect); + viewer.renderScreenImage(im.getGraphics(), rect.getSize(), rect); im.writeImage(); } } - public void seqColour_actionPerformed(ActionEvent actionEvent) { lastCommand = null; @@ -433,7 +438,7 @@ public synchronized void addSequence(SequenceI [] seq) colourBySequence = false; seqColour.setSelected(false); viewer.evalStringQuiet("select *;color white;select ASP,GLU;color red;" - +"select LYS,ARG;color blue;select CYS;color yellow"); + + "select LYS,ARG;color blue;select CYS;color yellow"); } public void zappoColour_actionPerformed(ActionEvent actionEvent) @@ -476,7 +481,7 @@ public synchronized void addSequence(SequenceI [] seq) colourBySequence = false; seqColour.setSelected(false); - if(cs==null) + if (cs == null) return; String res; @@ -485,19 +490,17 @@ public synchronized void addSequence(SequenceI [] seq) Enumeration en = ResidueProperties.aa3Hash.keys(); StringBuffer command = new StringBuffer("select *;color white;"); - while(en.hasMoreElements()) + while (en.hasMoreElements()) { res = en.nextElement().toString(); index = ((Integer) ResidueProperties.aa3Hash.get(res)).intValue(); - if(index>20) + if (index > 20) continue; col = cs.findColour(ResidueProperties.aa[index].charAt(0)); - command.append("select "+res+";color[" - + col.getRed() + "," - + col.getGreen() + "," - + col.getBlue() + "];"); + command.append("select " + res + ";color[" + col.getRed() + "," + + col.getGreen() + "," + col.getBlue() + "];"); } viewer.evalStringQuiet(command.toString()); @@ -511,40 +514,38 @@ public synchronized void addSequence(SequenceI [] seq) public void backGround_actionPerformed(ActionEvent actionEvent) { java.awt.Color col = JColorChooser.showDialog(this, - "Select Background Colour", - null); + "Select Background Colour", null); if (col != null) { - viewer.evalStringQuiet("background [" - + col.getRed() + "," - + col.getGreen() + "," - + col.getBlue() + "];"); + viewer.evalStringQuiet("background [" + col.getRed() + "," + + col.getGreen() + "," + col.getBlue() + "];"); } } - public void jmolHelp_actionPerformed(ActionEvent actionEvent) { - try{ - jalview.util.BrowserLauncher.openURL( - "http://jmol.sourceforge.net/docs/JmolUserGuide/"); - }catch(Exception ex){} - } - + try + { + jalview.util.BrowserLauncher + .openURL("http://jmol.sourceforge.net/docs/JmolUserGuide/"); + } catch (Exception ex) + { + } + } - ////////////////////////////////// - ///StructureListener + // //////////////////////////////// + // /StructureListener public String getPdbFile() { return pdbentry.getFile(); } - Pattern pattern = Pattern.compile( - "\\[(.*)\\]([0-9]+)(:[a-zA-Z]*)?\\.([a-zA-Z]+)(/[0-9]*)?" - ); + Pattern pattern = Pattern + .compile("\\[(.*)\\]([0-9]+)(:[a-zA-Z]*)?\\.([a-zA-Z]+)(/[0-9]*)?"); String lastMessage; + public void mouseOverStructure(int atomIndex, String strInfo) { Matcher matcher = pattern.matcher(strInfo); @@ -568,9 +569,11 @@ public synchronized void addSequence(SequenceI [] seq) } StringBuffer resetLastRes = new StringBuffer(); + StringBuffer eval = new StringBuffer(); - public void highlightAtom(int atomIndex, int pdbResNum, String chain, String pdbfile) + public void highlightAtom(int atomIndex, int pdbResNum, String chain, + String pdbfile) { if (!pdbfile.equals(pdbentry.getFile())) return; @@ -592,16 +595,18 @@ public synchronized void addSequence(SequenceI [] seq) resetLastRes.append(":" + chain); } - eval.append(";wireframe 100;"+eval.toString()+".CA;"); + eval.append(";wireframe 100;" + eval.toString() + ".CA;"); - resetLastRes.append(";wireframe 0;"+resetLastRes.toString()+".CA;spacefill 0;"); + resetLastRes.append(";wireframe 0;" + resetLastRes.toString() + + ".CA;spacefill 0;"); eval.append("spacefill 200;select none"); viewer.evalStringQuiet(eval.toString()); } - public Color getColour(int atomIndex, int pdbResNum, String chain, String pdbfile) + public Color getColour(int atomIndex, int pdbResNum, String chain, + String pdbfile) { if (!pdbfile.equals(pdbentry.getFile())) return null; @@ -611,27 +616,27 @@ public synchronized void addSequence(SequenceI [] seq) public void updateColours(Object source) { - colourBySequence( (AlignmentPanel) source); + colourBySequence((AlignmentPanel) source); } - -//End StructureListener -//////////////////////////// + // End StructureListener + // ////////////////////////// String lastCommand; - FeatureRenderer fr=null; + + FeatureRenderer fr = null; + public void colourBySequence(AlignmentPanel sourceap) { this.ap = sourceap; - if(!colourBySequence || ap.alignFrame.getCurrentView()!=ap.av) + if (!colourBySequence || ap.alignFrame.getCurrentView() != ap.av) return; StructureMapping[] mapping = ssm.getMapping(pdbentry.getFile()); if (mapping.length < 1) - return; - + return; SequenceRenderer sr = new SequenceRenderer(ap.av); @@ -651,12 +656,12 @@ public synchronized void addSequence(SequenceI [] seq) StringBuffer command = new StringBuffer(); int lastPos = -1; - for (int sp,s = 0; s < sequence.length; s++) + for (int sp, s = 0; s < sequence.length; s++) { for (int m = 0; m < mapping.length; m++) { if (mapping[m].getSequence() == sequence[s] - && (sp=ap.av.alignment.findIndex(sequence[s]))>-1) + && (sp = ap.av.alignment.findIndex(sequence[s])) > -1) { SequenceI asp = ap.av.alignment.getSequenceAt(sp); for (int r = 0; r < asp.getLength(); r++) @@ -666,10 +671,9 @@ public synchronized void addSequence(SequenceI [] seq) { continue; } - int pos = mapping[m].getPDBResNum( - asp.findPosition(r)); + int pos = mapping[m].getPDBResNum(asp.findPosition(r)); - if (pos < 1 || pos==lastPos) + if (pos < 1 || pos == lastPos) continue; lastPos = pos; @@ -679,11 +683,10 @@ public synchronized void addSequence(SequenceI [] seq) if (showFeatures) col = fr.findFeatureColour(col, asp, r); - if (command.toString().endsWith(":" + mapping[m].getChain()+ - ";color[" - + col.getRed() + "," - + col.getGreen() + "," - + col.getBlue() + "]")) + if (command.toString().endsWith( + ":" + mapping[m].getChain() + ";color[" + col.getRed() + + "," + col.getGreen() + "," + col.getBlue() + + "]")) { command = condenseCommand(command, pos); continue; @@ -696,10 +699,8 @@ public synchronized void addSequence(SequenceI [] seq) command.append(":" + mapping[m].getChain()); } - command.append(";color[" - + col.getRed() + "," - + col.getGreen() + "," - + col.getBlue() + "]"); + command.append(";color[" + col.getRed() + "," + col.getGreen() + + "," + col.getBlue() + "]"); } break; @@ -716,7 +717,8 @@ public synchronized void addSequence(SequenceI [] seq) StringBuffer condenseCommand(StringBuffer command, int pos) { - StringBuffer sb = new StringBuffer(command.substring(0, command.lastIndexOf("select")+7)); + StringBuffer sb = new StringBuffer(command.substring(0, command + .lastIndexOf("select") + 7)); command.delete(0, sb.length()); @@ -724,25 +726,25 @@ public synchronized void addSequence(SequenceI [] seq) if (command.indexOf("-") > -1) { - start = command.substring(0,command.indexOf("-")); + start = command.substring(0, command.indexOf("-")); } else { start = command.substring(0, command.indexOf(":")); } - sb.append(start+"-"+pos+command.substring(command.indexOf(":"))); + sb.append(start + "-" + pos + command.substring(command.indexOf(":"))); return sb; } - ///////////////////////////////// - //JmolStatusListener + // /////////////////////////////// + // JmolStatusListener public String eval(String strEval) { - // System.out.println(strEval); - //"# 'eval' is implemented only for the applet."; + // System.out.println(strEval); + // "# 'eval' is implemented only for the applet."; return null; } @@ -752,14 +754,14 @@ public synchronized void addSequence(SequenceI [] seq) } public void setCallbackFunction(String callbackType, - String callbackFunction) - {} + String callbackFunction) + { + } public void notifyFileLoaded(String fullPathName, String fileName, - String modelName, Object clientFile, - String errorMsg) + String modelName, Object clientFile, String errorMsg) { - if(errorMsg!=null) + if (errorMsg != null) { fileLoadingError = errorMsg; repaint(); @@ -771,27 +773,29 @@ public synchronized void addSequence(SequenceI [] seq) if (fileName != null) { - //FILE LOADED OK + // FILE LOADED OK ssm = StructureSelectionManager.getStructureSelectionManager(); - MCview.PDBfile pdbFile = ssm.setMapping(sequence,chains,pdbentry.getFile(), AppletFormatAdapter.FILE); + MCview.PDBfile pdbFile = ssm.setMapping(sequence, chains, pdbentry + .getFile(), AppletFormatAdapter.FILE); ssm.addStructureViewerListener(this); Vector chains = new Vector(); - for(int i=0; i