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