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