Applet files
[jalview.git] / src / jalview / appletgui / APopupMenu.java
1 package jalview.appletgui;\r
2 \r
3 import jalview.datamodel.*;\r
4 import jalview.analysis.*;\r
5 import jalview.schemes.*;\r
6 import java.awt.*;\r
7 import java.awt.event.*;\r
8 \r
9 public class APopupMenu extends java.awt.PopupMenu\r
10 {\r
11   Menu groupMenu = new Menu();\r
12   Menu analyze = new Menu();\r
13   Menu defineMenu = new Menu();\r
14   Menu groupName = new Menu();\r
15   Menu groupAnnotation = new Menu();\r
16   protected MenuItem clustalColour = new MenuItem();\r
17   protected MenuItem zappoColour = new MenuItem();\r
18   protected MenuItem taylorColour = new MenuItem();\r
19   protected MenuItem hydrophobicityColour = new MenuItem();\r
20   protected MenuItem helixColour = new MenuItem();\r
21   protected MenuItem strandColour = new MenuItem();\r
22   protected MenuItem turnColour = new MenuItem();\r
23   protected MenuItem buriedColour = new MenuItem();\r
24   protected CheckboxMenuItem abovePIDColour = new CheckboxMenuItem();\r
25   protected MenuItem userDefinedColour = new MenuItem();\r
26   protected MenuItem PIDColour = new MenuItem();\r
27   protected MenuItem BLOSUM62Colour = new MenuItem();\r
28   MenuItem noColourmenuItem = new MenuItem();\r
29   protected CheckboxMenuItem conservationMenuItem = new CheckboxMenuItem();\r
30 \r
31 \r
32   AlignmentPanel ap;\r
33   Menu sequenceMenu = new Menu();\r
34   MenuItem sequenceName = new MenuItem();\r
35   Menu residueMenu = new Menu();\r
36   MenuItem annotateResidue = new MenuItem();\r
37 \r
38   Sequence sequence;\r
39   MenuItem unGroupMenuItem = new MenuItem();\r
40   MenuItem outline = new MenuItem();\r
41   MenuItem nucleotideMenuItem = new MenuItem();\r
42 \r
43   public APopupMenu(AlignmentPanel ap, Sequence seq)\r
44   {\r
45     ///////////////////////////////////////////////////////////\r
46     // If this is activated from the sequence panel, the user may want to\r
47     // edit or annotate a particular residue. Therefore display the residue menu\r
48     //\r
49     // If from the IDPanel, we must display the sequence menu\r
50     //////////////////////////////////////////////////////////\r
51 \r
52     this.ap = ap;\r
53     sequence = seq;\r
54 \r
55     try\r
56     {     jbInit();   }\r
57     catch(Exception e)\r
58     {    e.printStackTrace();    }\r
59 \r
60 \r
61     if(seq!=null)\r
62       residueMenu.setEnabled(false);\r
63     else\r
64       sequenceMenu.setEnabled(false);\r
65 \r
66   }\r
67   private void jbInit() throws Exception\r
68   {\r
69     groupMenu.setLabel("Group");\r
70     analyze.setLabel("Analyze");\r
71     analyze.addActionListener(new java.awt.event.ActionListener()\r
72     {\r
73       public void actionPerformed(ActionEvent e)\r
74       {\r
75         analyze_actionPerformed(e);\r
76       }\r
77     });\r
78     defineMenu.setLabel("Define");\r
79     groupName.setLabel("Name");\r
80     groupName.addActionListener(new java.awt.event.ActionListener()\r
81     {\r
82       public void actionPerformed(ActionEvent e)\r
83       {\r
84         groupName_actionPerformed(e);\r
85       }\r
86     });\r
87     groupAnnotation.setEnabled(false);\r
88     groupAnnotation.setLabel("Annotation");\r
89     groupAnnotation.addActionListener(new java.awt.event.ActionListener()\r
90     {\r
91       public void actionPerformed(ActionEvent e)\r
92       {\r
93         groupAnnotation_actionPerformed(e);\r
94       }\r
95     });\r
96     sequenceMenu.setLabel("Sequence");\r
97     sequenceName.setLabel("Edit name");\r
98     sequenceName.addActionListener(new java.awt.event.ActionListener()\r
99     {\r
100       public void actionPerformed(ActionEvent e)\r
101       {\r
102         sequenceName_actionPerformed(e);\r
103       }\r
104     });\r
105     residueMenu.setLabel("Residue");\r
106     annotateResidue.setEnabled(false);\r
107     annotateResidue.setActionCommand("annotate residue");\r
108     annotateResidue.setLabel("annotate residue???");\r
109     unGroupMenuItem.setLabel("Remove Group");\r
110     unGroupMenuItem.addActionListener(new java.awt.event.ActionListener()\r
111     {\r
112       public void actionPerformed(ActionEvent e)\r
113       {\r
114         unGroupMenuItem_actionPerformed(e);\r
115       }\r
116     });\r
117 \r
118     outline.setLabel("Border colour");\r
119     outline.addActionListener(new java.awt.event.ActionListener()\r
120     {\r
121       public void actionPerformed(ActionEvent e)\r
122       {\r
123         outline_actionPerformed(e);\r
124       }\r
125     });\r
126     nucleotideMenuItem.setLabel("Nucleotide");\r
127     nucleotideMenuItem.addActionListener(new ActionListener()\r
128     {\r
129       public void actionPerformed(ActionEvent e)\r
130       {\r
131         nucleotideMenuItem_actionPerformed(e);\r
132       }\r
133     });\r
134 \r
135     add(groupMenu);\r
136     this.add(sequenceMenu);\r
137     this.add(residueMenu);\r
138     groupMenu.add(defineMenu);\r
139     groupMenu.add(unGroupMenuItem);\r
140     groupMenu.addSeparator();\r
141     groupMenu.add(analyze);\r
142     defineMenu.add(groupName);\r
143     defineMenu.add(groupAnnotation);\r
144     defineMenu.addSeparator();\r
145     defineMenu.add(outline);\r
146     defineMenu.addSeparator();\r
147     defineMenu.add(noColourmenuItem);\r
148     defineMenu.add(clustalColour);\r
149     defineMenu.add(BLOSUM62Colour);\r
150     defineMenu.add(PIDColour);\r
151 \r
152     defineMenu.add(zappoColour);\r
153     defineMenu.add(taylorColour);\r
154     defineMenu.add(hydrophobicityColour);\r
155     defineMenu.add(helixColour);\r
156     defineMenu.add(strandColour);\r
157     defineMenu.add(turnColour);\r
158     defineMenu.add(buriedColour);\r
159     defineMenu.add(nucleotideMenuItem);\r
160 \r
161     defineMenu.add(userDefinedColour);\r
162 \r
163     defineMenu.addSeparator();\r
164     defineMenu.add(abovePIDColour);\r
165     defineMenu.add(conservationMenuItem);\r
166 \r
167     sequenceMenu.add(sequenceName);\r
168     residueMenu.add(annotateResidue);\r
169 \r
170     noColourmenuItem.setLabel("None");\r
171     noColourmenuItem.addActionListener(new java.awt.event.ActionListener()\r
172     {\r
173       public void actionPerformed(ActionEvent e)\r
174       {\r
175         noColourmenuItem_actionPerformed(e);\r
176       }\r
177     });\r
178 \r
179     clustalColour.setLabel("Clustalx colours");\r
180     clustalColour.addActionListener(new java.awt.event.ActionListener()\r
181     {\r
182       public void actionPerformed(ActionEvent e)\r
183       {\r
184         clustalColour_actionPerformed(e);\r
185       }\r
186     });\r
187     zappoColour.setLabel("Zappo");\r
188     zappoColour.addActionListener(new java.awt.event.ActionListener()\r
189     {\r
190       public void actionPerformed(ActionEvent e)\r
191       {\r
192         zappoColour_actionPerformed(e);\r
193       }\r
194     });\r
195     taylorColour.setLabel("Taylor");\r
196     taylorColour.addActionListener(new java.awt.event.ActionListener()\r
197     {\r
198       public void actionPerformed(ActionEvent e)\r
199       {\r
200         taylorColour_actionPerformed(e);\r
201       }\r
202     });\r
203     hydrophobicityColour.setLabel("Hydrophobicity");\r
204     hydrophobicityColour.addActionListener(new java.awt.event.ActionListener()\r
205     {\r
206       public void actionPerformed(ActionEvent e)\r
207       {\r
208         hydrophobicityColour_actionPerformed(e);\r
209       }\r
210     });\r
211     helixColour.setLabel("Helix propensity");\r
212     helixColour.addActionListener(new java.awt.event.ActionListener()\r
213     {\r
214       public void actionPerformed(ActionEvent e)\r
215       {\r
216         helixColour_actionPerformed(e);\r
217       }\r
218     });\r
219     strandColour.setLabel("Strand propensity");\r
220     strandColour.addActionListener(new java.awt.event.ActionListener()\r
221     {\r
222       public void actionPerformed(ActionEvent e)\r
223       {\r
224         strandColour_actionPerformed(e);\r
225       }\r
226     });\r
227     turnColour.setLabel("Turn propensity");\r
228     turnColour.addActionListener(new java.awt.event.ActionListener()\r
229     {\r
230       public void actionPerformed(ActionEvent e)\r
231       {\r
232         turnColour_actionPerformed(e);\r
233       }\r
234     });\r
235     buriedColour.setLabel("Buried Index");\r
236     buriedColour.addActionListener(new java.awt.event.ActionListener()\r
237     {\r
238       public void actionPerformed(ActionEvent e)\r
239       {\r
240         buriedColour_actionPerformed(e);\r
241       }\r
242     });\r
243     abovePIDColour.setLabel("Above % Identity");\r
244     abovePIDColour.addActionListener(new java.awt.event.ActionListener()\r
245     {\r
246       public void actionPerformed(ActionEvent e)\r
247       {\r
248         abovePIDColour_actionPerformed(e);\r
249       }\r
250     });\r
251     userDefinedColour.setLabel("User Defined");\r
252     userDefinedColour.addActionListener(new java.awt.event.ActionListener()\r
253     {\r
254       public void actionPerformed(ActionEvent e)\r
255       {\r
256         userDefinedColour_actionPerformed(e);\r
257       }\r
258     });\r
259     PIDColour.setLabel("Percentage Identity");\r
260     PIDColour.addActionListener(new java.awt.event.ActionListener()\r
261     {\r
262       public void actionPerformed(ActionEvent e)\r
263       {\r
264         PIDColour_actionPerformed(e);\r
265       }\r
266     });\r
267     BLOSUM62Colour.setLabel("BLOSUM62");\r
268     BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener()\r
269     {\r
270       public void actionPerformed(ActionEvent e)\r
271       {\r
272         BLOSUM62Colour_actionPerformed(e);\r
273       }\r
274     });\r
275     conservationMenuItem.setLabel("Conservation");\r
276    conservationMenuItem.addActionListener(new java.awt.event.ActionListener()\r
277    {\r
278      public void actionPerformed(ActionEvent e)\r
279      {\r
280        conservationMenuItem_actionPerformed(e);\r
281      }\r
282    });\r
283 \r
284 \r
285 \r
286   }\r
287 \r
288   void refresh()\r
289   {\r
290     SequenceGroup sg = getGroup();\r
291     SuperGroup superG = ap.av.alignment.getSuperGroup( sg );\r
292     if( superG !=null)\r
293       superG.setSuperGroupProperties( sg );\r
294 \r
295     ap.seqPanel.repaint();\r
296   }\r
297 \r
298   protected void clustalColour_actionPerformed(ActionEvent e)\r
299   {\r
300     SequenceGroup sg = getGroup();\r
301     sg.cs = new ClustalxColourScheme(sg.sequences, ap.av.alignment.getWidth());\r
302     refresh();\r
303   }\r
304 \r
305   protected void zappoColour_actionPerformed(ActionEvent e)\r
306   {\r
307     getGroup().cs = new ZappoColourScheme();\r
308     refresh();\r
309   }\r
310 \r
311   protected void taylorColour_actionPerformed(ActionEvent e)\r
312   {\r
313     getGroup().cs = new TaylorColourScheme();\r
314     refresh();\r
315   }\r
316 \r
317 \r
318   protected void hydrophobicityColour_actionPerformed(ActionEvent e)\r
319   {\r
320     getGroup().cs = new HydrophobicColourScheme();\r
321     refresh();\r
322   }\r
323 \r
324   protected void helixColour_actionPerformed(ActionEvent e)\r
325   {\r
326     getGroup().cs = new HelixColourScheme();\r
327     refresh();\r
328   }\r
329 \r
330   protected void strandColour_actionPerformed(ActionEvent e)\r
331   {\r
332     getGroup().cs = new StrandColourScheme();\r
333     refresh();\r
334   }\r
335 \r
336   protected void turnColour_actionPerformed(ActionEvent e)\r
337   {\r
338     getGroup().cs = new TurnColourScheme();\r
339     refresh();\r
340   }\r
341 \r
342   protected void buriedColour_actionPerformed(ActionEvent e)\r
343   {\r
344     getGroup().cs = new BuriedColourScheme();\r
345     refresh();\r
346   }\r
347 \r
348   public void nucleotideMenuItem_actionPerformed(ActionEvent e)\r
349   {\r
350     getGroup().cs = new NucleotideColourScheme();\r
351     refresh();\r
352   }\r
353 \r
354 \r
355 \r
356   protected void abovePIDColour_actionPerformed(ActionEvent e)\r
357   {\r
358     SequenceGroup sg = getGroup();\r
359     if (abovePIDColour.getState())\r
360     {\r
361       sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
362                                                ap.av.alignment.getWidth()));\r
363       int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup().getName());\r
364       if (sg.cs instanceof ResidueColourScheme)\r
365         ( (ResidueColourScheme)sg. cs).setThreshold(threshold);\r
366       else if (sg.cs instanceof ScoreColourScheme)\r
367         ( (ScoreColourScheme) sg.cs).setThreshold(threshold);\r
368 \r
369       SliderPanel.showPIDSlider();\r
370 \r
371 \r
372     }\r
373     else // remove PIDColouring\r
374     {\r
375       ResidueColourScheme rcs = (ResidueColourScheme) sg.cs;\r
376       rcs.setThreshold(0);\r
377       sg.cs = rcs;\r
378     }\r
379 \r
380     refresh();\r
381 \r
382   }\r
383 \r
384 \r
385   protected void userDefinedColour_actionPerformed(ActionEvent e)\r
386   {\r
387     UserDefinedColours chooser = new UserDefinedColours( ap, getGroup());\r
388   }\r
389 \r
390   protected void PIDColour_actionPerformed(ActionEvent e)\r
391   {\r
392 \r
393   }\r
394 \r
395   protected void BLOSUM62Colour_actionPerformed(ActionEvent e)\r
396   {\r
397     SequenceGroup sg = getGroup();\r
398 \r
399     sg.cs = new Blosum62ColourScheme();\r
400 \r
401     sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
402                                                ap.av.alignment.getWidth()));\r
403 \r
404     refresh();\r
405   }\r
406 \r
407 \r
408   protected void noColourmenuItem_actionPerformed(ActionEvent e)\r
409   {\r
410     getGroup().cs = null;\r
411     refresh();\r
412   }\r
413 \r
414   protected  void conservationMenuItem_actionPerformed(ActionEvent e)\r
415   {\r
416     SequenceGroup sg = getGroup();\r
417 \r
418     if(conservationMenuItem.getState())\r
419     {\r
420 \r
421         Conservation c = new Conservation("Group",\r
422                                           ResidueProperties.propHash, 3,\r
423                                           sg.sequences, 0,\r
424                                           ap.av.alignment.getWidth());\r
425 \r
426         c.calculate();\r
427         c.verdict(false, ap.av.ConsPercGaps);\r
428         ConservationColourScheme ccs = new ConservationColourScheme(c, sg.cs);\r
429 \r
430 \r
431       sg.cs = ccs;\r
432 \r
433       SliderPanel.setConservationSlider(ap, ccs, sg.getName());\r
434       SliderPanel.showConservationSlider();\r
435     }\r
436     else // remove ConservationColouring\r
437     {\r
438         ConservationColourScheme ccs = (ConservationColourScheme)sg.cs;\r
439         sg.cs = ccs.cs;\r
440     }\r
441 \r
442      refresh();\r
443   }\r
444 \r
445   protected void groupAnnotation_actionPerformed(ActionEvent e)\r
446   {\r
447 \r
448   }\r
449 \r
450   protected void groupName_actionPerformed(ActionEvent e)\r
451   {\r
452   /*  SequenceGroup sg = getGroup();\r
453     String reply = JOptionPane.showInternalInputDialog(Desktop.desktop, "Enter new group name", "Edit group name", JOptionPane.QUESTION_MESSAGE);\r
454     if(reply==null)\r
455       return;\r
456 \r
457     sg.setName(reply);\r
458     groupName.setLabel(reply);*/\r
459   }\r
460 \r
461 \r
462   protected void analyze_actionPerformed(ActionEvent e)\r
463   {\r
464      CutAndPasteTransfer cap = new CutAndPasteTransfer(false);\r
465      Frame frame = new Frame();\r
466      frame.add(cap);\r
467      jalview.bin.JalviewLite.addFrame(frame, "Analyze this - ", 400, 300);\r
468      SequenceGroup sg = getGroup();\r
469      StringBuffer sb = new StringBuffer();\r
470 \r
471      for(int i=0; i<sg.sequences.size(); i++)\r
472      {\r
473        Sequence tmp = (Sequence)sg.sequences.elementAt(i);\r
474        sb.append(  tmp.getSequence(sg.getStartRes(), sg.getEndRes()+1));\r
475        sb.append("\n");\r
476      }\r
477 \r
478      sb.append("Something amazing will happen soon");\r
479      cap.setText( sb.toString() );\r
480 \r
481   }\r
482 \r
483   SequenceGroup getGroup()\r
484   {\r
485     SequenceGroup sg = ap.av.getSelectionGroup();\r
486 \r
487     // this method won't add a new group if it already exists\r
488     ap.av.alignment.addGroup(sg);\r
489 \r
490     return sg;\r
491   }\r
492 \r
493   void sequenceName_actionPerformed(ActionEvent e)\r
494   {\r
495   /*  String id = sequence.getName();\r
496     String s = (String)JOptionPane.showInternalInputDialog(\r
497                 ap,\r
498                 "Edit sequence name",\r
499                 "Edit sequence name ("+sequence.getName()+")",\r
500                 JOptionPane.PLAIN_MESSAGE,\r
501                 null,\r
502                 null,\r
503                 id);\r
504 \r
505     if(s!=null)\r
506     {\r
507       sequence.setName(s);\r
508       ap.repaint();\r
509     }*/\r
510 \r
511   }\r
512 \r
513   void unGroupMenuItem_actionPerformed(ActionEvent e)\r
514   {\r
515      SequenceGroup sg = ap.av.getSelectionGroup();\r
516      ap.av.alignment.deleteGroup(sg);\r
517      ap.av.setSelectionGroup(null);\r
518      ap.repaint();\r
519   }\r
520 \r
521 \r
522   protected void outline_actionPerformed(ActionEvent e)\r
523   {\r
524   /*  SequenceGroup sg = getGroup();\r
525     Color col = JColorChooser.showDialog(this, "Select Outline Colour", Color.BLUE);\r
526     if(col!=null)\r
527       sg.setOutlineColour(col);*/\r
528   }\r
529 \r
530 }\r