Dont use myGraphics
[jalview.git] / src / MCview / PDBViewer.java
1 package MCview;\r
2 \r
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 \r
11 public class PDBViewer extends JInternalFrame implements Runnable\r
12 {\r
13   PDBEntry pdb;\r
14   Sequence sequence;\r
15   PDBCanvas pdbcanvas;\r
16 \r
17 \r
18   public PDBViewer(PDBEntry entry,\r
19                    Sequence seq,\r
20                    SeqCanvas seqcanvas)\r
21   {\r
22     pdb = entry;\r
23     sequence = seq;\r
24 \r
25     try\r
26     {\r
27       jbInit();\r
28     }\r
29     catch (Exception ex)\r
30     {\r
31       ex.printStackTrace();\r
32     }\r
33 \r
34     pdbcanvas = new PDBCanvas(seqcanvas, seq);\r
35 \r
36     setContentPane(pdbcanvas);\r
37     StringBuffer title = new StringBuffer(sequence.getName() + ":" + pdb.getId());\r
38     if(pdb.getProperty()!=null)\r
39     {\r
40       title.append( " Method: " );\r
41       title.append(pdb.getProperty().get("method"));\r
42       title.append( " Chain:" );\r
43       title.append( pdb.getProperty().get("chains"));\r
44     }\r
45     Desktop.addInternalFrame(this,title.toString(),400, 400);\r
46 \r
47      Thread worker = new Thread(this);\r
48      worker.start();\r
49   }\r
50 \r
51   public void run()\r
52   {\r
53     try\r
54     {\r
55       EBIFetchClient ebi = new EBIFetchClient();\r
56       String[] result = ebi.fetchData("pdb:" + pdb.getId(), null,\r
57                                       null);\r
58 \r
59       PDBfile pdbfile = new PDBfile(result);\r
60 \r
61       pdbcanvas.setPDBFile(pdbfile);\r
62 \r
63     }\r
64     catch (Exception ex)\r
65     {\r
66       ex.printStackTrace();\r
67     }\r
68   }\r
69 \r
70   private void jbInit()\r
71       throws Exception\r
72   {\r
73     this.addKeyListener(new KeyAdapter()\r
74         {\r
75             public void keyPressed(KeyEvent evt)\r
76             {\r
77               pdbcanvas.keyPressed(evt);\r
78             }\r
79         });\r
80 \r
81     this.setJMenuBar(jMenuBar1);\r
82     fileMenu.setText("File");\r
83     coloursMenu.setText("Colours");\r
84     saveMenu.setActionCommand("Save Image");\r
85     saveMenu.setText("Save As");\r
86     png.setText("PNG");\r
87     png.addActionListener(new ActionListener()\r
88     {\r
89       public void actionPerformed(ActionEvent e)\r
90       {\r
91         png_actionPerformed(e);\r
92       }\r
93     });\r
94     eps.setText("EPS");\r
95     eps.addActionListener(new ActionListener()\r
96     {\r
97       public void actionPerformed(ActionEvent e)\r
98       {\r
99         eps_actionPerformed(e);\r
100       }\r
101     });\r
102     mapping.setText("View Mapping");\r
103     mapping.addActionListener(new ActionListener()\r
104     {\r
105       public void actionPerformed(ActionEvent e)\r
106       {\r
107         mapping_actionPerformed(e);\r
108       }\r
109     });\r
110     wire.setText("Wireframe");\r
111     wire.addActionListener(new ActionListener()\r
112     {\r
113       public void actionPerformed(ActionEvent e)\r
114       {\r
115         wire_actionPerformed(e);\r
116       }\r
117     });\r
118     depth.setSelected(true);\r
119     depth.setText("Depthcue");\r
120     depth.addActionListener(new ActionListener()\r
121     {\r
122       public void actionPerformed(ActionEvent e)\r
123       {\r
124         depth_actionPerformed(e);\r
125       }\r
126     });\r
127     zbuffer.setSelected(true);\r
128     zbuffer.setText("Z Buffering");\r
129     zbuffer.addActionListener(new ActionListener()\r
130     {\r
131       public void actionPerformed(ActionEvent e)\r
132       {\r
133         zbuffer_actionPerformed(e);\r
134       }\r
135     });\r
136     charge.setText("Charge & Cysteine");\r
137     charge.addActionListener(new ActionListener()\r
138     {\r
139       public void actionPerformed(ActionEvent e)\r
140       {\r
141         charge_actionPerformed(e);\r
142       }\r
143     });\r
144     hydro.setText("Hydrophobicity");\r
145     hydro.addActionListener(new ActionListener()\r
146     {\r
147       public void actionPerformed(ActionEvent e)\r
148       {\r
149         hydro_actionPerformed(e);\r
150       }\r
151     });\r
152     chain.setText("By Chain");\r
153     chain.addActionListener(new ActionListener()\r
154     {\r
155       public void actionPerformed(ActionEvent e)\r
156       {\r
157         chain_actionPerformed(e);\r
158       }\r
159     });\r
160     seqButton.setSelected(true);\r
161     seqButton.setText("By Sequence");\r
162     seqButton.addActionListener(new ActionListener()\r
163     {\r
164       public void actionPerformed(ActionEvent e)\r
165       {\r
166         seqButton_actionPerformed(e);\r
167       }\r
168     });\r
169     molecule.setText("By Molecule");\r
170     molecule.addActionListener(new ActionListener()\r
171     {\r
172       public void actionPerformed(ActionEvent e)\r
173       {\r
174         molecule_actionPerformed(e);\r
175       }\r
176     });\r
177     jMenuBar1.add(fileMenu);\r
178     jMenuBar1.add(coloursMenu);\r
179     fileMenu.add(saveMenu);\r
180     fileMenu.add(mapping);\r
181     saveMenu.add(png);\r
182     saveMenu.add(eps);\r
183     coloursMenu.add(seqButton);\r
184     coloursMenu.add(chain);\r
185     coloursMenu.add(hydro);\r
186     coloursMenu.add(charge);\r
187     coloursMenu.addSeparator();\r
188     coloursMenu.add(wire);\r
189     coloursMenu.add(depth);\r
190     coloursMenu.add(zbuffer);\r
191     coloursMenu.add(molecule);\r
192     ButtonGroup bg = new ButtonGroup();\r
193     bg.add(seqButton);\r
194     bg.add(chain);\r
195     bg.add(hydro);\r
196     bg.add(charge);\r
197   }\r
198 \r
199   JMenuBar jMenuBar1 = new JMenuBar();\r
200   JMenu fileMenu = new JMenu();\r
201   JMenu coloursMenu = new JMenu();\r
202   JMenu saveMenu = new JMenu();\r
203   JMenuItem png = new JMenuItem();\r
204   JMenuItem eps = new JMenuItem();\r
205   JMenuItem mapping = new JMenuItem();\r
206   JCheckBoxMenuItem wire = new JCheckBoxMenuItem();\r
207   JCheckBoxMenuItem depth = new JCheckBoxMenuItem();\r
208   JCheckBoxMenuItem zbuffer = new JCheckBoxMenuItem();\r
209   JRadioButtonMenuItem charge = new JRadioButtonMenuItem();\r
210   JRadioButtonMenuItem hydro = new JRadioButtonMenuItem();\r
211   JRadioButtonMenuItem chain = new JRadioButtonMenuItem();\r
212   JRadioButtonMenuItem seqButton = new JRadioButtonMenuItem();\r
213   JCheckBoxMenuItem molecule = new JCheckBoxMenuItem();\r
214 \r
215   /**\r
216    * DOCUMENT ME!\r
217    *\r
218    * @param e DOCUMENT ME!\r
219    */\r
220   public void eps_actionPerformed(ActionEvent e)\r
221   {\r
222     makePDBImage(jalview.util.ImageMaker.EPS);\r
223   }\r
224 \r
225   /**\r
226    * DOCUMENT ME!\r
227    *\r
228    * @param e DOCUMENT ME!\r
229    */\r
230   public void png_actionPerformed(ActionEvent e)\r
231   {\r
232      makePDBImage(jalview.util.ImageMaker.PNG);\r
233   }\r
234 \r
235   void makePDBImage(int type)\r
236   {\r
237     int width = pdbcanvas.getWidth();\r
238     int height = pdbcanvas.getHeight();\r
239 \r
240     jalview.util.ImageMaker im;\r
241 \r
242     if (type == jalview.util.ImageMaker.PNG)\r
243       im = new jalview.util.ImageMaker(this,\r
244                                        jalview.util.ImageMaker.PNG,\r
245                                        "Make PNG image from view",\r
246                                        width, height,\r
247                                        null, null);\r
248     else\r
249       im = new jalview.util.ImageMaker(this,\r
250                                        jalview.util.ImageMaker.EPS,\r
251                                        "Make EPS file from view",\r
252                                        width, height,\r
253                                        null, this.getTitle());\r
254 \r
255     if (im.getGraphics() != null)\r
256     {\r
257       pdbcanvas.drawAll(im.getGraphics(), width, height);\r
258       im.writeImage();\r
259     }\r
260   }\r
261   public void charge_actionPerformed(ActionEvent e)\r
262   {\r
263     clearButtonGroup();\r
264     pdbcanvas.pdb.setChargeColours();\r
265     pdbcanvas.redrawneeded=true;\r
266     pdbcanvas.repaint();\r
267   }\r
268 \r
269   public void hydro_actionPerformed(ActionEvent e)\r
270   {\r
271     clearButtonGroup();\r
272     pdbcanvas.pdb.setHydrophobicityColours();\r
273     pdbcanvas.redrawneeded=true;\r
274     pdbcanvas.repaint();\r
275   }\r
276 \r
277   public void chain_actionPerformed(ActionEvent e)\r
278   {\r
279     clearButtonGroup();\r
280     pdbcanvas.pdb.setChainColours();\r
281     pdbcanvas.redrawneeded=true;\r
282     pdbcanvas.repaint();\r
283   }\r
284 \r
285   public void zbuffer_actionPerformed(ActionEvent e)\r
286   {\r
287     pdbcanvas.zbuffer = ! pdbcanvas.zbuffer;\r
288     pdbcanvas.redrawneeded=true;\r
289     pdbcanvas.repaint();\r
290   }\r
291 \r
292   public void molecule_actionPerformed(ActionEvent e)\r
293   {\r
294     pdbcanvas.bymolecule = ! pdbcanvas.bymolecule;\r
295     pdbcanvas.redrawneeded=true;\r
296     pdbcanvas.repaint();\r
297   }\r
298 \r
299   public void depth_actionPerformed(ActionEvent e)\r
300   {\r
301   pdbcanvas.depthcue = ! pdbcanvas.depthcue;\r
302   pdbcanvas.redrawneeded=true;\r
303     pdbcanvas.repaint();\r
304   }\r
305 \r
306   public void wire_actionPerformed(ActionEvent e)\r
307   {\r
308     pdbcanvas.wire = ! pdbcanvas.wire;\r
309     pdbcanvas.redrawneeded=true;\r
310     pdbcanvas.repaint();\r
311   }\r
312 \r
313   public void seqButton_actionPerformed(ActionEvent e)\r
314   {\r
315     clearButtonGroup();\r
316     pdbcanvas.bysequence = seqButton.isSelected();\r
317     pdbcanvas.updateSeqColours();\r
318   }\r
319 \r
320   void clearButtonGroup()\r
321   {\r
322    pdbcanvas.bysequence = false;\r
323    pdbcanvas.bymolecule = false;\r
324   }\r
325 \r
326   public void mapping_actionPerformed(ActionEvent e)\r
327   {\r
328     jalview.gui.CutAndPasteTransfer cap = new jalview.gui.CutAndPasteTransfer();\r
329     Desktop.addInternalFrame(cap, "PDB - Sequence Mapping", 500, 600);\r
330     cap.setText(pdbcanvas.mappingDetails.toString());\r
331   }\r
332 }\r