X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2FMCview%2FPDBViewer.java;h=7ce8882b8cdd173ae98b9a97d051732117991aac;hb=4ec235370b49c38ae7e7b3a46f92f926fc430bf1;hp=f0b37dfbfcc97028b52f96ffac2a20e00e8a93cf;hpb=2a22b216be40ead9c5a44c0d5e94ce90ccd92d03;p=jalview.git diff --git a/src/MCview/PDBViewer.java b/src/MCview/PDBViewer.java index f0b37df..7ce8882 100755 --- a/src/MCview/PDBViewer.java +++ b/src/MCview/PDBViewer.java @@ -1,79 +1,116 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * + * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) + * Copyright (C) 2009 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 */ package MCview; -import javax.swing.*; +import java.io.*; + import java.awt.event.*; +import javax.swing.*; + import jalview.datamodel.*; -import jalview.schemes.*; import jalview.gui.*; -import jalview.io.EBIFetchClient; -import java.awt.event.ActionListener; -import java.awt.event.ActionEvent; +import jalview.io.*; +import jalview.schemes.*; +import jalview.ws.ebi.EBIFetchClient; + +import java.awt.BorderLayout; public class PDBViewer extends JInternalFrame implements Runnable { - PDBEntry pdb; - Sequence sequence; + + /** + * The associated sequence in an alignment + */ PDBCanvas pdbcanvas; + PDBEntry pdbentry; + + SequenceI[] seq; + + String[] chains; + + AlignmentPanel ap; + + String protocol; + + String tmpPDBFile; + + public PDBViewer(PDBEntry pdbentry, SequenceI[] seq, String[] chains, + AlignmentPanel ap, String protocol) - public PDBViewer(PDBEntry entry, - Sequence seq, - SeqCanvas seqcanvas) { - /*Uncomment this to modify in Jbuilder + this.pdbentry = pdbentry; + this.seq = seq; + this.chains = chains; + this.ap = ap; + this.protocol = protocol; + try { jbInit(); - } - catch (Exception ex) + } catch (Exception ex) { ex.printStackTrace(); - }*/ - - if (entry==null) - return; - pdb = entry; - sequence = seq; + } - Thread worker = new Thread(this); - worker.start(); + StringBuffer title = new StringBuffer(seq[0].getName() + ":" + + pdbentry.getFile()); - pdbcanvas = new PDBCanvas(seqcanvas, seq); + pdbcanvas = new PDBCanvas(); setContentPane(pdbcanvas); - StringBuffer title = new StringBuffer(sequence.getName() + ":" + pdb.getId()); - if(pdb.getProperty()!=null) + + if (pdbentry.getFile() != null) + { + try + { + tmpPDBFile = pdbentry.getFile(); + PDBfile pdbfile = new PDBfile(tmpPDBFile, + jalview.io.AppletFormatAdapter.FILE); + + pdbcanvas.init(pdbentry, seq, chains, ap, protocol); + + } catch (java.io.IOException ex) + { + ex.printStackTrace(); + } + } + else + { + Thread worker = new Thread(this); + worker.start(); + } + + if (pdbentry.getProperty() != null) { - if (pdb.getProperty().get("method")!=null) + if (pdbentry.getProperty().get("method") != null) { title.append(" Method: "); - title.append(pdb.getProperty().get("method")); + title.append(pdbentry.getProperty().get("method")); } - if (pdb.getProperty().get("chains") != null) + if (pdbentry.getProperty().get("chains") != null) { title.append(" Chain:"); - title.append(pdb.getProperty().get("chains")); + title.append(pdbentry.getProperty().get("chains")); } } - Desktop.addInternalFrame(this,title.toString(),400, 400); + Desktop.addInternalFrame(this, title.toString(), 400, 400); } public void run() @@ -81,42 +118,28 @@ public class PDBViewer extends JInternalFrame implements Runnable try { EBIFetchClient ebi = new EBIFetchClient(); - String query = "pdb:" + pdb.getId(); - String[] result = ebi.fetchData(query, "default","raw"); - if (result!=null) { - PDBfile pdbfile = new PDBfile(result); - pdbcanvas.setPDBFile(pdbfile); - } else { - throw new Exception("Empty result for WSDbFetch Query: "+query); - } + String query = "pdb:" + pdbentry.getId(); + pdbentry.setFile(ebi.fetchDataAsFile(query, "default", "raw") + .getAbsolutePath()); - try - { - jbInit(); - } - catch (Exception ex) - { - ex.printStackTrace(); - } - } - catch (Exception ex) + if (pdbentry.getFile() != null) + pdbcanvas.init(pdbentry, seq, chains, ap, protocol); + } catch (Exception ex) { + pdbcanvas.errorMessage = "Error retrieving file: " + pdbentry.getId(); ex.printStackTrace(); - showErrorMessage("Failed to retrieve PDB structure."); -// this.dispose(); } } - private void jbInit() - throws Exception + private void jbInit() throws Exception { this.addKeyListener(new KeyAdapter() - { - public void keyPressed(KeyEvent evt) - { - pdbcanvas.keyPressed(evt); - } - }); + { + public void keyPressed(KeyEvent evt) + { + pdbcanvas.keyPressed(evt); + } + }); this.setJMenuBar(jMenuBar1); fileMenu.setText("File"); @@ -272,11 +295,28 @@ public class PDBViewer extends JInternalFrame implements Runnable } }); viewMenu.setText("View"); + background.setText("Background Colour..."); + background.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + background_actionPerformed(e); + } + }); + savePDB.setText("PDB File"); + savePDB.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + savePDB_actionPerformed(e); + } + }); jMenuBar1.add(fileMenu); jMenuBar1.add(coloursMenu); jMenuBar1.add(viewMenu); fileMenu.add(saveMenu); fileMenu.add(mapping); + saveMenu.add(savePDB); saveMenu.add(png); saveMenu.add(eps); coloursMenu.add(seqButton); @@ -290,6 +330,7 @@ public class PDBViewer extends JInternalFrame implements Runnable coloursMenu.add(turn); coloursMenu.add(buried); coloursMenu.add(user); + coloursMenu.add(background); ButtonGroup bg = new ButtonGroup(); bg.add(seqButton); bg.add(chain); @@ -303,45 +344,50 @@ public class PDBViewer extends JInternalFrame implements Runnable bg.add(buried); bg.add(user); - - if(jalview.gui.UserDefinedColours.getUserColourSchemes()!=null) + if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null) { - java.util.Enumeration userColours = jalview.gui.UserDefinedColours. - getUserColourSchemes().keys(); + java.util.Enumeration userColours = jalview.gui.UserDefinedColours + .getUserColourSchemes().keys(); while (userColours.hasMoreElements()) { - final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(userColours. - nextElement().toString()); + final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem( + userColours.nextElement().toString()); radioItem.setName("USER_DEFINED"); radioItem.addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent evt) + { + if (evt.isControlDown() + || SwingUtilities.isRightMouseButton(evt)) { - public void mousePressed(MouseEvent evt) - { - if(evt.isControlDown() || SwingUtilities.isRightMouseButton(evt)) - { - radioItem.removeActionListener(radioItem.getActionListeners()[0]); + radioItem + .removeActionListener(radioItem.getActionListeners()[0]); - int option = JOptionPane.showInternalConfirmDialog(jalview.gui.Desktop.desktop, + int option = JOptionPane.showInternalConfirmDialog( + jalview.gui.Desktop.desktop, "Remove from default list?", "Remove user defined colour", JOptionPane.YES_NO_OPTION); - if(option == JOptionPane.YES_OPTION) + if (option == JOptionPane.YES_OPTION) + { + jalview.gui.UserDefinedColours + .removeColourFromDefaults(radioItem.getText()); + coloursMenu.remove(radioItem); + } + else + { + radioItem.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent evt) { - jalview.gui.UserDefinedColours.removeColourFromDefaults(radioItem.getText()); - coloursMenu.remove(radioItem); + user_actionPerformed(evt); } - else - radioItem.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent evt) - { - user_actionPerformed(evt); - } - }); - } + }); } - }); + } + } + }); radioItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) @@ -361,34 +407,60 @@ public class PDBViewer extends JInternalFrame implements Runnable } JMenuBar jMenuBar1 = new JMenuBar(); + JMenu fileMenu = new JMenu(); + JMenu coloursMenu = new JMenu(); + JMenu saveMenu = new JMenu(); + JMenuItem png = new JMenuItem(); + JMenuItem eps = new JMenuItem(); + JMenuItem mapping = new JMenuItem(); + JCheckBoxMenuItem wire = new JCheckBoxMenuItem(); + JCheckBoxMenuItem depth = new JCheckBoxMenuItem(); + JCheckBoxMenuItem zbuffer = new JCheckBoxMenuItem(); + JCheckBoxMenuItem allchains = new JCheckBoxMenuItem(); JRadioButtonMenuItem charge = new JRadioButtonMenuItem(); + JRadioButtonMenuItem chain = new JRadioButtonMenuItem(); + JRadioButtonMenuItem seqButton = new JRadioButtonMenuItem(); + JRadioButtonMenuItem hydro = new JRadioButtonMenuItem(); + JRadioButtonMenuItem taylor = new JRadioButtonMenuItem(); - JRadioButtonMenuItem zappo = new JRadioButtonMenuItem(); + + JRadioButtonMenuItem zappo = new JRadioButtonMenuItem(); + JRadioButtonMenuItem user = new JRadioButtonMenuItem(); + JRadioButtonMenuItem buried = new JRadioButtonMenuItem(); + JRadioButtonMenuItem turn = new JRadioButtonMenuItem(); + JRadioButtonMenuItem strand = new JRadioButtonMenuItem(); + JRadioButtonMenuItem helix = new JRadioButtonMenuItem(); + JMenu viewMenu = new JMenu(); + JMenuItem background = new JMenuItem(); + + JMenuItem savePDB = new JMenuItem(); + /** * DOCUMENT ME! - * - * @param e DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ public void eps_actionPerformed(ActionEvent e) { @@ -397,12 +469,13 @@ public class PDBViewer extends JInternalFrame implements Runnable /** * DOCUMENT ME! - * - * @param e DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ public void png_actionPerformed(ActionEvent e) { - makePDBImage(jalview.util.ImageMaker.PNG); + makePDBImage(jalview.util.ImageMaker.PNG); } void makePDBImage(int type) @@ -413,17 +486,16 @@ public class PDBViewer extends JInternalFrame implements Runnable jalview.util.ImageMaker im; 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) { @@ -431,11 +503,12 @@ public class PDBViewer extends JInternalFrame implements Runnable im.writeImage(); } } + public void charge_actionPerformed(ActionEvent e) { pdbcanvas.bysequence = false; pdbcanvas.pdb.setChargeColours(); - pdbcanvas.redrawneeded=true; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } @@ -443,7 +516,7 @@ public class PDBViewer extends JInternalFrame implements Runnable { pdbcanvas.bysequence = false; pdbcanvas.pdb.setColours(new HydrophobicColourScheme()); - pdbcanvas.redrawneeded=true; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } @@ -451,35 +524,35 @@ public class PDBViewer extends JInternalFrame implements Runnable { pdbcanvas.bysequence = false; pdbcanvas.pdb.setChainColours(); - pdbcanvas.redrawneeded=true; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } public void zbuffer_actionPerformed(ActionEvent e) { - pdbcanvas.zbuffer = ! pdbcanvas.zbuffer; - pdbcanvas.redrawneeded=true; + pdbcanvas.zbuffer = !pdbcanvas.zbuffer; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } public void molecule_actionPerformed(ActionEvent e) { - pdbcanvas.bymolecule = ! pdbcanvas.bymolecule; - pdbcanvas.redrawneeded=true; + pdbcanvas.bymolecule = !pdbcanvas.bymolecule; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } public void depth_actionPerformed(ActionEvent e) { - pdbcanvas.depthcue = ! pdbcanvas.depthcue; - pdbcanvas.redrawneeded=true; + pdbcanvas.depthcue = !pdbcanvas.depthcue; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } public void wire_actionPerformed(ActionEvent e) { - pdbcanvas.wire = ! pdbcanvas.wire; - pdbcanvas.redrawneeded=true; + pdbcanvas.wire = !pdbcanvas.wire; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } @@ -489,7 +562,6 @@ public class PDBViewer extends JInternalFrame implements Runnable pdbcanvas.updateSeqColours(); } - public void mapping_actionPerformed(ActionEvent e) { jalview.gui.CutAndPasteTransfer cap = new jalview.gui.CutAndPasteTransfer(); @@ -501,18 +573,12 @@ public class PDBViewer extends JInternalFrame implements Runnable { pdbcanvas.setAllchainsVisible(allchains.getState()); } - void showErrorMessage(String error) - { - JOptionPane.showInternalMessageDialog(Desktop.desktop, - error, "PDB Viewer Error", JOptionPane.WARNING_MESSAGE); - } - public void zappo_actionPerformed(ActionEvent e) { pdbcanvas.bysequence = false; pdbcanvas.pdb.setColours(new ZappoColourScheme()); - pdbcanvas.redrawneeded=true; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } @@ -520,7 +586,7 @@ public class PDBViewer extends JInternalFrame implements Runnable { pdbcanvas.bysequence = false; pdbcanvas.pdb.setColours(new TaylorColourScheme()); - pdbcanvas.redrawneeded=true; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } @@ -528,7 +594,7 @@ public class PDBViewer extends JInternalFrame implements Runnable { pdbcanvas.bysequence = false; pdbcanvas.pdb.setColours(new HelixColourScheme()); - pdbcanvas.redrawneeded=true; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } @@ -536,7 +602,7 @@ public class PDBViewer extends JInternalFrame implements Runnable { pdbcanvas.bysequence = false; pdbcanvas.pdb.setColours(new StrandColourScheme()); - pdbcanvas.redrawneeded=true; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } @@ -544,7 +610,7 @@ public class PDBViewer extends JInternalFrame implements Runnable { pdbcanvas.bysequence = false; pdbcanvas.pdb.setColours(new TurnColourScheme()); - pdbcanvas.redrawneeded=true; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } @@ -552,7 +618,7 @@ public class PDBViewer extends JInternalFrame implements Runnable { pdbcanvas.bysequence = false; pdbcanvas.pdb.setColours(new BuriedColourScheme()); - pdbcanvas.redrawneeded=true; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } @@ -560,16 +626,64 @@ public class PDBViewer extends JInternalFrame implements Runnable { if (e.getActionCommand().equals("User Defined...")) { - new UserDefinedColours(pdbcanvas, null); + // new UserDefinedColours(pdbcanvas, null); } else { - UserColourScheme udc = (UserColourScheme) UserDefinedColours. - getUserColourSchemes().get(e.getActionCommand()); + UserColourScheme udc = (UserColourScheme) UserDefinedColours + .getUserColourSchemes().get(e.getActionCommand()); pdbcanvas.pdb.setColours(udc); - pdbcanvas.redrawneeded=true; + pdbcanvas.redrawneeded = true; pdbcanvas.repaint(); } } + + public void background_actionPerformed(ActionEvent e) + { + java.awt.Color col = JColorChooser.showDialog(this, + "Select Background Colour", pdbcanvas.backgroundColour); + + if (col != null) + { + pdbcanvas.backgroundColour = col; + pdbcanvas.redrawneeded = true; + pdbcanvas.repaint(); + } + } + + public void savePDB_actionPerformed(ActionEvent e) + { + JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache + .getProperty("LAST_DIRECTORY")); + + chooser.setFileView(new JalviewFileView()); + chooser.setDialogTitle("Save PDB File"); + chooser.setToolTipText("Save"); + + int value = chooser.showSaveDialog(this); + + if (value == JalviewFileChooser.APPROVE_OPTION) + { + try + { + BufferedReader in = new BufferedReader(new FileReader(tmpPDBFile)); + File outFile = chooser.getSelectedFile(); + + PrintWriter out = new PrintWriter(new FileOutputStream(outFile)); + String data; + while ((data = in.readLine()) != null) + { + if (!(data.indexOf("
") > -1 || data.indexOf("
") > -1)) + { + out.println(data); + } + } + out.close(); + } catch (Exception ex) + { + ex.printStackTrace(); + } + } + } }