3 import javax.swing.*;
\r
4 import java.awt.event.*;
\r
5 import jalview.datamodel.*;
\r
6 import jalview.gui.*;
\r
7 import jalview.io.EBIFetchClient;
\r
8 import java.awt.event.ActionListener;
\r
9 import java.awt.event.ActionEvent;
\r
10 import java.io.FileOutputStream;
\r
11 import org.jibble.epsgraphics.EpsGraphics2D;
\r
12 import javax.imageio.ImageIO;
\r
13 import java.awt.image.BufferedImage;
\r
14 import java.awt.Graphics;
\r
15 import java.awt.Graphics2D;
\r
16 import java.awt.RenderingHints;
\r
18 public class PDBViewer extends JInternalFrame implements Runnable
\r
22 PDBCanvas pdbcanvas;
\r
25 public PDBViewer(PDBEntry entry,
\r
27 SeqCanvas seqcanvas)
\r
36 catch (Exception ex)
\r
38 ex.printStackTrace();
\r
41 pdbcanvas = new PDBCanvas(seqcanvas, seq);
\r
43 setContentPane(pdbcanvas);
\r
44 Desktop.addInternalFrame(this,
\r
45 sequence.getName() + ":" + pdb.getId()
\r
46 + " Method: " + pdb.getProperty().get("method")
\r
47 + " Chain:" + pdb.getProperty().get("chains"),
\r
50 Thread worker = new Thread(this);
\r
58 EBIFetchClient ebi = new EBIFetchClient();
\r
59 String[] result = ebi.fetchData("pdb:" + pdb.getId(), null,
\r
62 PDBfile pdbfile = new PDBfile(result);
\r
64 pdbcanvas.setPDBFile(pdbfile);
\r
67 catch (Exception ex)
\r
69 ex.printStackTrace();
\r
73 private void jbInit()
\r
76 this.addKeyListener(new KeyAdapter()
\r
78 public void keyPressed(KeyEvent evt)
\r
80 pdbcanvas.keyPressed(evt);
\r
84 this.setJMenuBar(jMenuBar1);
\r
85 fileMenu.setText("File");
\r
86 coloursMenu.setText("Colours");
\r
87 saveMenu.setActionCommand("Save Image");
\r
88 saveMenu.setText("Save As");
\r
90 png.addActionListener(new ActionListener()
\r
92 public void actionPerformed(ActionEvent e)
\r
94 png_actionPerformed(e);
\r
98 eps.addActionListener(new ActionListener()
\r
100 public void actionPerformed(ActionEvent e)
\r
102 eps_actionPerformed(e);
\r
105 mapping.setText("View Mapping");
\r
106 mapping.addActionListener(new ActionListener()
\r
108 public void actionPerformed(ActionEvent e)
\r
110 mapping_actionPerformed(e);
\r
113 wire.setText("Wireframe");
\r
114 wire.addActionListener(new ActionListener()
\r
116 public void actionPerformed(ActionEvent e)
\r
118 wire_actionPerformed(e);
\r
121 depth.setSelected(true);
\r
122 depth.setText("Depthcue");
\r
123 depth.addActionListener(new ActionListener()
\r
125 public void actionPerformed(ActionEvent e)
\r
127 depth_actionPerformed(e);
\r
130 zbuffer.setSelected(true);
\r
131 zbuffer.setText("Z Buffering");
\r
132 zbuffer.addActionListener(new ActionListener()
\r
134 public void actionPerformed(ActionEvent e)
\r
136 zbuffer_actionPerformed(e);
\r
139 charge.setText("Charge & Cysteine");
\r
140 charge.addActionListener(new ActionListener()
\r
142 public void actionPerformed(ActionEvent e)
\r
144 charge_actionPerformed(e);
\r
147 hydro.setText("Hydrophobicity");
\r
148 hydro.addActionListener(new ActionListener()
\r
150 public void actionPerformed(ActionEvent e)
\r
152 hydro_actionPerformed(e);
\r
155 chain.setText("By Chain");
\r
156 chain.addActionListener(new ActionListener()
\r
158 public void actionPerformed(ActionEvent e)
\r
160 chain_actionPerformed(e);
\r
163 seqButton.setSelected(true);
\r
164 seqButton.setText("By Sequence");
\r
165 seqButton.addActionListener(new ActionListener()
\r
167 public void actionPerformed(ActionEvent e)
\r
169 seqButton_actionPerformed(e);
\r
172 molecule.setText("By Molecule");
\r
173 molecule.addActionListener(new ActionListener()
\r
175 public void actionPerformed(ActionEvent e)
\r
177 molecule_actionPerformed(e);
\r
180 jMenuBar1.add(fileMenu);
\r
181 jMenuBar1.add(coloursMenu);
\r
182 fileMenu.add(saveMenu);
\r
183 fileMenu.add(mapping);
\r
186 coloursMenu.add(seqButton);
\r
187 coloursMenu.add(chain);
\r
188 coloursMenu.add(hydro);
\r
189 coloursMenu.add(charge);
\r
190 coloursMenu.addSeparator();
\r
191 coloursMenu.add(wire);
\r
192 coloursMenu.add(depth);
\r
193 coloursMenu.add(zbuffer);
\r
194 coloursMenu.add(molecule);
\r
195 ButtonGroup bg = new ButtonGroup();
\r
202 JMenuBar jMenuBar1 = new JMenuBar();
\r
203 JMenu fileMenu = new JMenu();
\r
204 JMenu coloursMenu = new JMenu();
\r
205 JMenu saveMenu = new JMenu();
\r
206 JMenuItem png = new JMenuItem();
\r
207 JMenuItem eps = new JMenuItem();
\r
208 JMenuItem mapping = new JMenuItem();
\r
209 JCheckBoxMenuItem wire = new JCheckBoxMenuItem();
\r
210 JCheckBoxMenuItem depth = new JCheckBoxMenuItem();
\r
211 JCheckBoxMenuItem zbuffer = new JCheckBoxMenuItem();
\r
212 JRadioButtonMenuItem charge = new JRadioButtonMenuItem();
\r
213 JRadioButtonMenuItem hydro = new JRadioButtonMenuItem();
\r
214 JRadioButtonMenuItem chain = new JRadioButtonMenuItem();
\r
215 JRadioButtonMenuItem seqButton = new JRadioButtonMenuItem();
\r
216 JCheckBoxMenuItem molecule = new JCheckBoxMenuItem();
\r
218 public void png_actionPerformed(ActionEvent e)
\r
220 int width = pdbcanvas.getWidth();
\r
221 int height = pdbcanvas.getHeight();
\r
225 jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(jalview.bin.Cache.getProperty(
\r
226 "LAST_DIRECTORY"), new String[] { "png" },
\r
227 new String[] { "Portable network graphics" },
\r
228 "Portable network graphics");
\r
230 chooser.setFileView(new jalview.io.JalviewFileView());
\r
231 chooser.setDialogTitle("Create PNG Image of Molecule");
\r
232 chooser.setToolTipText("Save");
\r
234 int value = chooser.showSaveDialog(this);
\r
236 if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION)
\r
241 jalview.bin.Cache.setProperty("LAST_DIRECTORY",
\r
242 chooser.getSelectedFile().getParent());
\r
244 FileOutputStream out = new FileOutputStream(chooser.getSelectedFile());
\r
246 BufferedImage bi = new BufferedImage(width, height,
\r
247 BufferedImage.TYPE_INT_RGB);
\r
248 Graphics png = bi.getGraphics();
\r
249 Graphics2D ig2 = (Graphics2D) png;
\r
250 ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
\r
251 RenderingHints.VALUE_ANTIALIAS_ON);
\r
254 pdbcanvas.drawAll(png, width, height);
\r
256 ImageIO.write(bi, "png", out);
\r
259 catch (Exception ex)
\r
261 ex.printStackTrace();
\r
265 public void eps_actionPerformed(ActionEvent e)
\r
267 boolean accurateText = true;
\r
269 String renderStyle = jalview.bin.Cache.getDefault("EPS_RENDERING",
\r
270 "Prompt each time");
\r
272 // If we need to prompt, and if the GUI is visible then
\r
273 // Prompt for EPS rendering style
\r
274 if (renderStyle.equalsIgnoreCase("Prompt each time")
\r
276 (System.getProperty("java.awt.headless") != null
\r
277 && System.getProperty("java.awt.headless").equals("true")))
\r
279 EPSOptions eps = new EPSOptions();
\r
280 renderStyle = eps.getValue();
\r
282 if (renderStyle==null || eps.cancelled)
\r
288 if (renderStyle.equalsIgnoreCase("text"))
\r
290 accurateText = false;
\r
293 int width = getWidth();
\r
294 int height = getHeight();
\r
298 jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(jalview.bin.Cache.getProperty(
\r
299 "LAST_DIRECTORY"), new String[] { "eps" },
\r
300 new String[] { "Encapsulated Postscript" },
\r
301 "Encapsulated Postscript");
\r
302 chooser.setFileView(new jalview.io.JalviewFileView());
\r
303 chooser.setDialogTitle("Create EPS file from tree");
\r
304 chooser.setToolTipText("Save");
\r
306 int value = chooser.showSaveDialog(this);
\r
308 if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION)
\r
313 jalview.bin.Cache.setProperty("LAST_DIRECTORY",
\r
314 chooser.getSelectedFile().getParent());
\r
316 FileOutputStream out = new FileOutputStream(chooser.getSelectedFile());
\r
317 EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width,
\r
319 Graphics2D ig2 = (Graphics2D) pg;
\r
320 ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
\r
321 RenderingHints.VALUE_ANTIALIAS_ON);
\r
324 pg.setAccurateTextMode(accurateText);
\r
326 pdbcanvas.drawAll(pg, width, height);
\r
331 catch (Exception ex)
\r
333 ex.printStackTrace();
\r
338 public void charge_actionPerformed(ActionEvent e)
\r
340 clearButtonGroup();
\r
341 pdbcanvas.pdb.setChargeColours();
\r
342 pdbcanvas.redrawneeded=true;
\r
343 pdbcanvas.repaint();
\r
346 public void hydro_actionPerformed(ActionEvent e)
\r
348 clearButtonGroup();
\r
349 pdbcanvas.pdb.setHydrophobicityColours();
\r
350 pdbcanvas.redrawneeded=true;
\r
351 pdbcanvas.repaint();
\r
354 public void chain_actionPerformed(ActionEvent e)
\r
356 clearButtonGroup();
\r
357 pdbcanvas.pdb.setChainColours();
\r
358 pdbcanvas.redrawneeded=true;
\r
359 pdbcanvas.repaint();
\r
362 public void zbuffer_actionPerformed(ActionEvent e)
\r
364 pdbcanvas.zbuffer = ! pdbcanvas.zbuffer;
\r
365 pdbcanvas.redrawneeded=true;
\r
366 pdbcanvas.repaint();
\r
369 public void molecule_actionPerformed(ActionEvent e)
\r
371 pdbcanvas.bymolecule = ! pdbcanvas.bymolecule;
\r
372 pdbcanvas.redrawneeded=true;
\r
373 pdbcanvas.repaint();
\r
376 public void depth_actionPerformed(ActionEvent e)
\r
378 pdbcanvas.depthcue = ! pdbcanvas.depthcue;
\r
379 pdbcanvas.redrawneeded=true;
\r
380 pdbcanvas.repaint();
\r
383 public void wire_actionPerformed(ActionEvent e)
\r
385 pdbcanvas.wire = ! pdbcanvas.wire;
\r
386 pdbcanvas.redrawneeded=true;
\r
387 pdbcanvas.repaint();
\r
390 public void seqButton_actionPerformed(ActionEvent e)
\r
392 clearButtonGroup();
\r
393 pdbcanvas.bysequence = seqButton.isSelected();
\r
394 pdbcanvas.updateSeqColours();
\r
397 void clearButtonGroup()
\r
399 pdbcanvas.bysequence = false;
\r
400 pdbcanvas.bymolecule = false;
\r
403 public void mapping_actionPerformed(ActionEvent e)
\r
405 jalview.gui.CutAndPasteTransfer cap = new jalview.gui.CutAndPasteTransfer();
\r
406 Desktop.addInternalFrame(cap, "PDB - Sequence Mapping", 500, 600);
\r
407 cap.setText(pdbcanvas.mappingDetails.toString());
\r