Allow single line BLC files
[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     allchains.setSelected(true);\r
178     allchains.setText("Show All Chains");\r
179     allchains.addItemListener(new ItemListener()\r
180     {\r
181       public void itemStateChanged(ItemEvent e)\r
182       {\r
183         allchains_itemStateChanged(e);\r
184       }\r
185     });\r
186     jMenuBar1.add(fileMenu);\r
187     jMenuBar1.add(coloursMenu);\r
188     fileMenu.add(saveMenu);\r
189     fileMenu.add(mapping);\r
190     saveMenu.add(png);\r
191     saveMenu.add(eps);\r
192     coloursMenu.add(seqButton);\r
193     coloursMenu.add(chain);\r
194     coloursMenu.add(hydro);\r
195     coloursMenu.add(charge);\r
196     coloursMenu.addSeparator();\r
197     coloursMenu.add(wire);\r
198     coloursMenu.add(depth);\r
199     coloursMenu.add(zbuffer);\r
200     coloursMenu.add(molecule);\r
201     coloursMenu.add(allchains);\r
202     ButtonGroup bg = new ButtonGroup();\r
203     bg.add(seqButton);\r
204     bg.add(chain);\r
205     bg.add(hydro);\r
206     bg.add(charge);\r
207   }\r
208 \r
209   JMenuBar jMenuBar1 = new JMenuBar();\r
210   JMenu fileMenu = new JMenu();\r
211   JMenu coloursMenu = new JMenu();\r
212   JMenu saveMenu = new JMenu();\r
213   JMenuItem png = new JMenuItem();\r
214   JMenuItem eps = new JMenuItem();\r
215   JMenuItem mapping = new JMenuItem();\r
216   JCheckBoxMenuItem wire = new JCheckBoxMenuItem();\r
217   JCheckBoxMenuItem depth = new JCheckBoxMenuItem();\r
218   JCheckBoxMenuItem zbuffer = new JCheckBoxMenuItem();\r
219   JRadioButtonMenuItem charge = new JRadioButtonMenuItem();\r
220   JRadioButtonMenuItem hydro = new JRadioButtonMenuItem();\r
221   JRadioButtonMenuItem chain = new JRadioButtonMenuItem();\r
222   JRadioButtonMenuItem seqButton = new JRadioButtonMenuItem();\r
223   JCheckBoxMenuItem molecule = new JCheckBoxMenuItem();\r
224   JCheckBoxMenuItem allchains = new JCheckBoxMenuItem();\r
225 \r
226   /**\r
227    * DOCUMENT ME!\r
228    *\r
229    * @param e DOCUMENT ME!\r
230    */\r
231   public void eps_actionPerformed(ActionEvent e)\r
232   {\r
233     makePDBImage(jalview.util.ImageMaker.EPS);\r
234   }\r
235 \r
236   /**\r
237    * DOCUMENT ME!\r
238    *\r
239    * @param e DOCUMENT ME!\r
240    */\r
241   public void png_actionPerformed(ActionEvent e)\r
242   {\r
243      makePDBImage(jalview.util.ImageMaker.PNG);\r
244   }\r
245 \r
246   void makePDBImage(int type)\r
247   {\r
248     int width = pdbcanvas.getWidth();\r
249     int height = pdbcanvas.getHeight();\r
250 \r
251     jalview.util.ImageMaker im;\r
252 \r
253     if (type == jalview.util.ImageMaker.PNG)\r
254       im = new jalview.util.ImageMaker(this,\r
255                                        jalview.util.ImageMaker.PNG,\r
256                                        "Make PNG image from view",\r
257                                        width, height,\r
258                                        null, null);\r
259     else\r
260       im = new jalview.util.ImageMaker(this,\r
261                                        jalview.util.ImageMaker.EPS,\r
262                                        "Make EPS file from view",\r
263                                        width, height,\r
264                                        null, this.getTitle());\r
265 \r
266     if (im.getGraphics() != null)\r
267     {\r
268       pdbcanvas.drawAll(im.getGraphics(), width, height);\r
269       im.writeImage();\r
270     }\r
271   }\r
272   public void charge_actionPerformed(ActionEvent e)\r
273   {\r
274     clearButtonGroup();\r
275     pdbcanvas.pdb.setChargeColours();\r
276     pdbcanvas.redrawneeded=true;\r
277     pdbcanvas.repaint();\r
278   }\r
279 \r
280   public void hydro_actionPerformed(ActionEvent e)\r
281   {\r
282     clearButtonGroup();\r
283     pdbcanvas.pdb.setHydrophobicityColours();\r
284     pdbcanvas.redrawneeded=true;\r
285     pdbcanvas.repaint();\r
286   }\r
287 \r
288   public void chain_actionPerformed(ActionEvent e)\r
289   {\r
290     clearButtonGroup();\r
291     pdbcanvas.pdb.setChainColours();\r
292     pdbcanvas.redrawneeded=true;\r
293     pdbcanvas.repaint();\r
294   }\r
295 \r
296   public void zbuffer_actionPerformed(ActionEvent e)\r
297   {\r
298     pdbcanvas.zbuffer = ! pdbcanvas.zbuffer;\r
299     pdbcanvas.redrawneeded=true;\r
300     pdbcanvas.repaint();\r
301   }\r
302 \r
303   public void molecule_actionPerformed(ActionEvent e)\r
304   {\r
305     pdbcanvas.bymolecule = ! pdbcanvas.bymolecule;\r
306     pdbcanvas.redrawneeded=true;\r
307     pdbcanvas.repaint();\r
308   }\r
309 \r
310   public void depth_actionPerformed(ActionEvent e)\r
311   {\r
312   pdbcanvas.depthcue = ! pdbcanvas.depthcue;\r
313   pdbcanvas.redrawneeded=true;\r
314     pdbcanvas.repaint();\r
315   }\r
316 \r
317   public void wire_actionPerformed(ActionEvent e)\r
318   {\r
319     pdbcanvas.wire = ! pdbcanvas.wire;\r
320     pdbcanvas.redrawneeded=true;\r
321     pdbcanvas.repaint();\r
322   }\r
323 \r
324   public void seqButton_actionPerformed(ActionEvent e)\r
325   {\r
326     clearButtonGroup();\r
327     pdbcanvas.bysequence = seqButton.isSelected();\r
328     pdbcanvas.updateSeqColours();\r
329   }\r
330 \r
331   void clearButtonGroup()\r
332   {\r
333    pdbcanvas.bysequence = false;\r
334    pdbcanvas.bymolecule = false;\r
335   }\r
336 \r
337   public void mapping_actionPerformed(ActionEvent e)\r
338   {\r
339     jalview.gui.CutAndPasteTransfer cap = new jalview.gui.CutAndPasteTransfer();\r
340     Desktop.addInternalFrame(cap, "PDB - Sequence Mapping", 500, 600);\r
341     cap.setText(pdbcanvas.mappingDetails.toString());\r
342   }\r
343 \r
344   public void allchains_itemStateChanged(ItemEvent e)\r
345   {\r
346     pdbcanvas.setAllchainsVisible(allchains.getState());\r
347   }\r
348 }\r