Format label
[jalview.git] / src / jalview / appletgui / APopupMenu.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 \r
20 package jalview.appletgui;\r
21 \r
22 import java.awt.*;\r
23 import java.awt.event.*;\r
24 import java.util.Vector;\r
25 \r
26 import jalview.analysis.*;\r
27 import jalview.datamodel.*;\r
28 import jalview.schemes.*;\r
29 import jalview.commands.ChangeCaseCommand;\r
30 \r
31 public class APopupMenu\r
32     extends java.awt.PopupMenu implements ActionListener, ItemListener\r
33 {\r
34   Menu groupMenu = new Menu();\r
35   MenuItem editGroupName = new MenuItem();\r
36   protected MenuItem clustalColour = new MenuItem();\r
37   protected MenuItem zappoColour = new MenuItem();\r
38   protected MenuItem taylorColour = new MenuItem();\r
39   protected MenuItem hydrophobicityColour = new MenuItem();\r
40   protected MenuItem helixColour = new MenuItem();\r
41   protected MenuItem strandColour = new MenuItem();\r
42   protected MenuItem turnColour = new MenuItem();\r
43   protected MenuItem buriedColour = new MenuItem();\r
44   protected CheckboxMenuItem abovePIDColour = new CheckboxMenuItem();\r
45   protected MenuItem userDefinedColour = new MenuItem();\r
46   protected MenuItem PIDColour = new MenuItem();\r
47   protected MenuItem BLOSUM62Colour = new MenuItem();\r
48   MenuItem noColourmenuItem = new MenuItem();\r
49   protected CheckboxMenuItem conservationMenuItem = new CheckboxMenuItem();\r
50 \r
51   final AlignmentPanel ap;\r
52   MenuItem unGroupMenuItem = new MenuItem();\r
53   MenuItem nucleotideMenuItem = new MenuItem();\r
54   Menu colourMenu = new Menu();\r
55   CheckboxMenuItem showBoxes = new CheckboxMenuItem();\r
56   CheckboxMenuItem showText = new CheckboxMenuItem();\r
57   CheckboxMenuItem showColourText = new CheckboxMenuItem();\r
58   Menu editMenu = new Menu("Edit");\r
59   MenuItem copy = new MenuItem("Copy (Jalview Only)");\r
60   MenuItem cut = new MenuItem("Cut (Jalview Only)");\r
61   MenuItem toUpper = new MenuItem("To Upper Case");\r
62   MenuItem toLower = new MenuItem("To Lower Case");\r
63   MenuItem toggleCase = new MenuItem("Toggle Case");\r
64   Menu outputmenu = new Menu();\r
65   Menu seqMenu = new Menu();\r
66   MenuItem pdb = new MenuItem();\r
67   MenuItem hideSeqs = new MenuItem();\r
68   MenuItem repGroup = new MenuItem();\r
69   MenuItem sequenceName = new MenuItem("Edit Name/Description");\r
70 \r
71   Sequence seq;\r
72   MenuItem revealAll = new MenuItem();\r
73   Menu menu1 = new Menu();\r
74 \r
75   public APopupMenu(AlignmentPanel apanel, final Sequence seq, Vector links)\r
76   {\r
77     ///////////////////////////////////////////////////////////\r
78     // If this is activated from the sequence panel, the user may want to\r
79     // edit or annotate a particular residue. Therefore display the residue menu\r
80     //\r
81     // If from the IDPanel, we must display the sequence menu\r
82     //////////////////////////////////////////////////////////\r
83 \r
84     this.ap = apanel;\r
85     this.seq = seq;\r
86 \r
87     try\r
88     {\r
89       jbInit();\r
90     }\r
91     catch (Exception e)\r
92     {\r
93       e.printStackTrace();\r
94     }\r
95 \r
96     for (int i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length; i++)\r
97     {\r
98       MenuItem item = new MenuItem( jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS[i] );\r
99 \r
100       item.addActionListener(this);\r
101       outputmenu.add(item);\r
102     }\r
103 \r
104     SequenceGroup sg = ap.av.getSelectionGroup();\r
105 \r
106     if (sg != null && sg.getSize()>0)\r
107     {\r
108       editGroupName.setLabel(sg.getName());\r
109       showText.setState(sg.getDisplayText());\r
110       showColourText.setState(sg.getColourText());\r
111       showBoxes.setState(sg.getDisplayBoxes());\r
112       if (!ap.av.alignment.getGroups().contains(sg))\r
113       {\r
114         groupMenu.remove(unGroupMenuItem);\r
115       }\r
116 \r
117     }\r
118     else\r
119     {\r
120       remove(hideSeqs);\r
121       remove(groupMenu);\r
122     }\r
123 \r
124     if (links!=null)\r
125     {\r
126       Menu linkMenu = new Menu("Link");\r
127       MenuItem item;\r
128       String link;\r
129       for(int i=0; i<links.size(); i++)\r
130       {\r
131         link = links.elementAt(i).toString();\r
132         final String target = link.substring(0, link.indexOf("|"));\r
133         item = new MenuItem(target);\r
134 \r
135         final String url;\r
136 \r
137         if (link.indexOf("$SEQUENCE_ID$") > -1)\r
138         {\r
139           String id = seq.getName();\r
140           if (id.indexOf("|") > -1)\r
141             id = id.substring(id.lastIndexOf("|") + 1);\r
142 \r
143           url = link.substring(link.indexOf("|") + 1,\r
144                                link.indexOf("$SEQUENCE_ID$"))\r
145               + id +\r
146               link.substring(link.indexOf("$SEQUENCE_ID$") + 13);\r
147         }\r
148         else\r
149           url = link.substring(link.lastIndexOf("|")+1);\r
150 \r
151            item.addActionListener(new java.awt.event.ActionListener()\r
152            {\r
153                public void actionPerformed(ActionEvent e)\r
154                {\r
155                   ap.alignFrame.showURL(url, target);\r
156                }\r
157            });\r
158           linkMenu.add(item);\r
159       }\r
160       if(seq!=null)\r
161         seqMenu.add(linkMenu);\r
162       else\r
163         add(linkMenu);\r
164     }\r
165     if(seq!=null)\r
166     {\r
167       seqMenu.setLabel(seq.getName());\r
168       repGroup.setLabel("Represent Group with " + seq.getName());\r
169     }\r
170     else\r
171       remove(seqMenu);\r
172 \r
173     if(!ap.av.hasHiddenRows)\r
174       remove(revealAll);\r
175   }\r
176 \r
177   public void itemStateChanged(ItemEvent evt)\r
178   {\r
179     if(evt.getSource()==abovePIDColour)\r
180       abovePIDColour_itemStateChanged();\r
181     else if(evt.getSource()==showColourText)\r
182       showColourText_itemStateChanged();\r
183     else if(evt.getSource()==showText)\r
184       showText_itemStateChanged();\r
185     else if(evt.getSource()==showBoxes)\r
186        showBoxes_itemStateChanged()   ;\r
187   }\r
188 \r
189   public void actionPerformed(ActionEvent evt)\r
190   {\r
191     Object source = evt.getSource();\r
192     if(source==clustalColour)\r
193       clustalColour_actionPerformed();\r
194     else if(source==zappoColour)\r
195       zappoColour_actionPerformed();\r
196     else if(source==taylorColour)\r
197       taylorColour_actionPerformed();\r
198     else if(source==hydrophobicityColour)\r
199       hydrophobicityColour_actionPerformed();\r
200     else if(source==helixColour)\r
201       helixColour_actionPerformed();\r
202     else if(source==strandColour)\r
203       strandColour_actionPerformed();\r
204     else if(source==turnColour)\r
205       turnColour_actionPerformed();\r
206     else if(source==buriedColour)\r
207       buriedColour_actionPerformed();\r
208     else if(source==nucleotideMenuItem)\r
209       nucleotideMenuItem_actionPerformed();\r
210 \r
211     else if (source == userDefinedColour)\r
212       userDefinedColour_actionPerformed();\r
213     else if (source == PIDColour)\r
214       PIDColour_actionPerformed();\r
215     else if (source == BLOSUM62Colour)\r
216       BLOSUM62Colour_actionPerformed();\r
217     else if (source == noColourmenuItem)\r
218       noColourmenuItem_actionPerformed();\r
219     else if (source == conservationMenuItem)\r
220       conservationMenuItem_itemStateChanged();\r
221     else if (source == unGroupMenuItem)\r
222       unGroupMenuItem_actionPerformed();\r
223 \r
224     else if(source == sequenceName)\r
225       editName();\r
226     else if(source == pdb)\r
227       addPDB();\r
228     else if(source == hideSeqs)\r
229       hideSequences(false);\r
230     else if(source == repGroup)\r
231       hideSequences(true);\r
232     else if(source == revealAll)\r
233     {\r
234         ap.av.showAllHiddenSeqs();\r
235     }\r
236 \r
237     else if(source==editGroupName)\r
238     {\r
239       EditNameDialog dialog = new EditNameDialog(\r
240           getGroup().getName(),\r
241           getGroup().getDescription(),\r
242           "       Group Name",\r
243           "Group Description",\r
244           ap,\r
245           "Edit Group Name / Description");\r
246 \r
247       if (dialog.accept)\r
248       {\r
249 \r
250         getGroup().setName(dialog.getName().replace(' ', '_'));\r
251         getGroup().setDescription(dialog.getDescription());\r
252       }\r
253 \r
254     }\r
255     else if(source==copy)\r
256       ap.alignFrame.copy_actionPerformed();\r
257     else if(source==cut)\r
258       ap.alignFrame.cut_actionPerformed();\r
259     else if(source==toUpper || source==toLower || source==toggleCase)\r
260     {\r
261     SequenceGroup sg = ap.av.getSelectionGroup();\r
262     Vector regions = new Vector();\r
263     if (sg != null)\r
264     {\r
265       int start = sg.getStartRes();\r
266       int end = sg.getEndRes() + 1;\r
267 \r
268       do\r
269       {\r
270         if (ap.av.hasHiddenColumns)\r
271         {\r
272           if(start==0)\r
273             start = ap.av.colSel.adjustForHiddenColumns(start);\r
274 \r
275           end = ap.av.colSel.getHiddenBoundaryRight(start);\r
276           if (start == end)\r
277             end = sg.getEndRes() + 1;\r
278           if (end > sg.getEndRes())\r
279             end = sg.getEndRes() + 1;\r
280         }\r
281 \r
282         regions.addElement(new int[]\r
283                            {start, end});\r
284 \r
285         if (ap.av.hasHiddenColumns)\r
286         {\r
287           start = ap.av.colSel.adjustForHiddenColumns(end);\r
288           start = ap.av.colSel.getHiddenBoundaryLeft(start) + 1;\r
289         }\r
290       }\r
291       while (end < sg.getEndRes());\r
292 \r
293       int[][] startEnd = new int[regions.size()][2];\r
294       for (int i = 0; i < regions.size(); i++)\r
295       {\r
296         startEnd[i] = (int[]) regions.elementAt(i);\r
297       }\r
298 \r
299 \r
300       String description;\r
301       int caseChange;\r
302 \r
303       if(source==toggleCase)\r
304       {\r
305         description = "Toggle Case";\r
306         caseChange = ChangeCaseCommand.TOGGLE_CASE;\r
307       }\r
308       else if(source==toUpper)\r
309       {\r
310         description = "To Upper Case";\r
311         caseChange = ChangeCaseCommand.TO_UPPER;\r
312       }\r
313       else\r
314       {\r
315         description = "To Lower Case";\r
316         caseChange = ChangeCaseCommand.TO_LOWER;\r
317       }\r
318 \r
319       ChangeCaseCommand caseCommand = new ChangeCaseCommand(\r
320           description, sg.getSequencesAsArray(ap.av.hiddenRepSequences), startEnd, caseChange\r
321           );\r
322 \r
323       ap.alignFrame.addHistoryItem(caseCommand);\r
324 \r
325 \r
326       ap.av.firePropertyChange("alignment", null,\r
327                                 ap.av.getAlignment().getSequences());\r
328 \r
329     }\r
330     }\r
331     else\r
332       outputText(evt);\r
333 \r
334   }\r
335 \r
336   void outputText(ActionEvent e)\r
337   {\r
338     CutAndPasteTransfer cap = new CutAndPasteTransfer(true, ap.alignFrame);\r
339 \r
340     Frame frame = new Frame();\r
341     frame.add(cap);\r
342     jalview.bin.JalviewLite.addFrame(frame,\r
343                                      "Selection output - " + e.getActionCommand(),\r
344                                      600, 500);\r
345 \r
346     cap.setText(new jalview.io.AppletFormatAdapter().formatSequences(\r
347         e.getActionCommand(),\r
348       new Alignment( ap.av.getSelectionAsNewSequence() ),\r
349         ap.av.showJVSuffix));\r
350 \r
351   }\r
352 \r
353   void editName()\r
354   {\r
355     EditNameDialog dialog = new EditNameDialog(\r
356         seq.getName(),\r
357         seq.getDescription(),\r
358         "       Sequence Name",\r
359         "Sequence Description",\r
360         ap,\r
361         "Edit Sequence Name / Description");\r
362 \r
363     if (dialog.accept)\r
364     {\r
365       seq.setName(dialog.getName());\r
366       seq.setDescription(dialog.getDescription());\r
367       ap.repaint();\r
368     }\r
369   }\r
370 \r
371   void addPDB()\r
372   {\r
373     CutAndPasteTransfer cap = new CutAndPasteTransfer(true, ap.alignFrame);\r
374     cap.setText("Paste your PDB file here.");\r
375     cap.setPDBImport(seq);\r
376     Frame frame = new Frame();\r
377     frame.add(cap);\r
378     jalview.bin.JalviewLite.addFrame(frame, "Paste PDB file ", 400, 300);\r
379   }\r
380 \r
381   private void jbInit()\r
382       throws Exception\r
383   {\r
384     groupMenu.setLabel("Group");\r
385     groupMenu.setLabel("Selection");\r
386 \r
387     editGroupName.addActionListener(this);\r
388     unGroupMenuItem.setLabel("Remove Group");\r
389     unGroupMenuItem.addActionListener(this);\r
390 \r
391     nucleotideMenuItem.setLabel("Nucleotide");\r
392     nucleotideMenuItem.addActionListener(this);\r
393     conservationMenuItem.addItemListener(this);\r
394     abovePIDColour.addItemListener(this);\r
395     colourMenu.setLabel("Group Colour");\r
396     showBoxes.setLabel("Boxes");\r
397     showBoxes.setState(true);\r
398     showBoxes.addItemListener(this);\r
399     sequenceName.addActionListener(this);\r
400 \r
401     showText.setLabel("Text");\r
402     showText.addItemListener(this);\r
403     showColourText.setLabel("Colour Text");\r
404     showColourText.addItemListener(this);\r
405     outputmenu.setLabel("Output to Textbox...");\r
406     seqMenu.setLabel("Sequence");\r
407     pdb.setLabel("View PDB Structure");\r
408     hideSeqs.setLabel("Hide Sequences");\r
409     repGroup.setLabel("Represent Group with");\r
410     revealAll.setLabel("Reveal All");\r
411     menu1.setLabel("Group");\r
412     add(groupMenu);\r
413     this.add(seqMenu);\r
414     this.add(hideSeqs);\r
415     this.add(revealAll);\r
416     groupMenu.add(editGroupName);\r
417     groupMenu.add(editMenu);\r
418     groupMenu.add(outputmenu);\r
419     groupMenu.add(menu1);\r
420     colourMenu.add(noColourmenuItem);\r
421     colourMenu.add(clustalColour);\r
422     colourMenu.add(BLOSUM62Colour);\r
423     colourMenu.add(PIDColour);\r
424     colourMenu.add(zappoColour);\r
425     colourMenu.add(taylorColour);\r
426     colourMenu.add(hydrophobicityColour);\r
427     colourMenu.add(helixColour);\r
428     colourMenu.add(strandColour);\r
429     colourMenu.add(turnColour);\r
430     colourMenu.add(buriedColour);\r
431     colourMenu.add(nucleotideMenuItem);\r
432     colourMenu.add(userDefinedColour);\r
433     colourMenu.addSeparator();\r
434     colourMenu.add(abovePIDColour);\r
435     colourMenu.add(conservationMenuItem);\r
436 \r
437     noColourmenuItem.setLabel("None");\r
438     noColourmenuItem.addActionListener(this);\r
439 \r
440     clustalColour.setLabel("Clustalx colours");\r
441     clustalColour.addActionListener(this);\r
442     zappoColour.setLabel("Zappo");\r
443     zappoColour.addActionListener(this);\r
444     taylorColour.setLabel("Taylor");\r
445     taylorColour.addActionListener(this);\r
446     hydrophobicityColour.setLabel("Hydrophobicity");\r
447     hydrophobicityColour.addActionListener(this);\r
448     helixColour.setLabel("Helix propensity");\r
449     helixColour.addActionListener(this);\r
450     strandColour.setLabel("Strand propensity");\r
451     strandColour.addActionListener(this);\r
452     turnColour.setLabel("Turn propensity");\r
453     turnColour.addActionListener(this);\r
454     buriedColour.setLabel("Buried Index");\r
455     buriedColour.addActionListener(this);\r
456     abovePIDColour.setLabel("Above % Identity");\r
457 \r
458     userDefinedColour.setLabel("User Defined");\r
459     userDefinedColour.addActionListener(this);\r
460     PIDColour.setLabel("Percentage Identity");\r
461     PIDColour.addActionListener(this);\r
462     BLOSUM62Colour.setLabel("BLOSUM62");\r
463     BLOSUM62Colour.addActionListener(this);\r
464     conservationMenuItem.setLabel("Conservation");\r
465 \r
466     editMenu.add(copy);\r
467     copy.addActionListener(this);\r
468     editMenu.add(cut);\r
469     cut.addActionListener(this);\r
470     editMenu.add(toUpper);\r
471     toUpper.addActionListener(this);\r
472     editMenu.add(toLower);\r
473     toLower.addActionListener(this);\r
474     editMenu.add(toggleCase);\r
475     seqMenu.add(sequenceName);\r
476     seqMenu.add(pdb);\r
477     seqMenu.add(repGroup);\r
478     menu1.add(unGroupMenuItem);\r
479     menu1.add(colourMenu);\r
480     menu1.add(showBoxes);\r
481     menu1.add(showText);\r
482     menu1.add(showColourText);\r
483     toggleCase.addActionListener(this);\r
484     pdb.addActionListener(this);\r
485     hideSeqs.addActionListener(this);\r
486     repGroup.addActionListener(this);\r
487     revealAll.addActionListener(this);\r
488   }\r
489 \r
490   void refresh()\r
491   {\r
492     ap.seqPanel.seqCanvas.repaint();\r
493     if(ap.overviewPanel!=null)\r
494       ap.overviewPanel.updateOverviewImage();\r
495   }\r
496 \r
497   protected void clustalColour_actionPerformed()\r
498   {\r
499     SequenceGroup sg = getGroup();\r
500     sg.cs = new ClustalxColourScheme(sg.getSequences(ap.av.hiddenRepSequences),\r
501                                      ap.av.alignment.getWidth());\r
502     refresh();\r
503   }\r
504 \r
505   protected void zappoColour_actionPerformed()\r
506   {\r
507     getGroup().cs = new ZappoColourScheme();\r
508     refresh();\r
509   }\r
510 \r
511   protected void taylorColour_actionPerformed()\r
512   {\r
513     getGroup().cs = new TaylorColourScheme();\r
514     refresh();\r
515   }\r
516 \r
517   protected void hydrophobicityColour_actionPerformed()\r
518   {\r
519     getGroup().cs = new HydrophobicColourScheme();\r
520     refresh();\r
521   }\r
522 \r
523   protected void helixColour_actionPerformed()\r
524   {\r
525     getGroup().cs = new HelixColourScheme();\r
526     refresh();\r
527   }\r
528 \r
529   protected void strandColour_actionPerformed()\r
530   {\r
531     getGroup().cs = new StrandColourScheme();\r
532     refresh();\r
533   }\r
534 \r
535   protected void turnColour_actionPerformed()\r
536   {\r
537     getGroup().cs = new TurnColourScheme();\r
538     refresh();\r
539   }\r
540 \r
541   protected void buriedColour_actionPerformed()\r
542   {\r
543     getGroup().cs = new BuriedColourScheme();\r
544     refresh();\r
545   }\r
546 \r
547   public void nucleotideMenuItem_actionPerformed()\r
548   {\r
549     getGroup().cs = new NucleotideColourScheme();\r
550     refresh();\r
551   }\r
552 \r
553   protected void abovePIDColour_itemStateChanged()\r
554   {\r
555     SequenceGroup sg = getGroup();\r
556     if(sg.cs==null)\r
557           return;\r
558 \r
559     if (abovePIDColour.getState())\r
560     {\r
561       sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av.hiddenRepSequences), 0,\r
562                                                ap.av.alignment.getWidth()));\r
563       int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs,\r
564           getGroup().getName());\r
565 \r
566       sg.cs.setThreshold(threshold, ap.av.getIgnoreGapsConsensus());\r
567 \r
568       SliderPanel.showPIDSlider();\r
569 \r
570     }\r
571     else // remove PIDColouring\r
572     {\r
573       sg.cs.setThreshold(0, ap.av.getIgnoreGapsConsensus());\r
574     }\r
575 \r
576     refresh();\r
577 \r
578   }\r
579 \r
580   protected void userDefinedColour_actionPerformed()\r
581   {\r
582     new UserDefinedColours(ap, getGroup());\r
583   }\r
584 \r
585   protected void PIDColour_actionPerformed()\r
586   {\r
587     SequenceGroup sg = getGroup();\r
588     sg.cs = new PIDColourScheme();\r
589     sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av.hiddenRepSequences), 0,\r
590                                              ap.av.alignment.getWidth()));\r
591     refresh();\r
592   }\r
593 \r
594   protected void BLOSUM62Colour_actionPerformed()\r
595   {\r
596     SequenceGroup sg = getGroup();\r
597 \r
598     sg.cs = new Blosum62ColourScheme();\r
599 \r
600     sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av.hiddenRepSequences), 0,\r
601                                              ap.av.alignment.getWidth()));\r
602 \r
603     refresh();\r
604   }\r
605 \r
606   protected void noColourmenuItem_actionPerformed()\r
607   {\r
608     getGroup().cs = null;\r
609     refresh();\r
610   }\r
611 \r
612   protected void conservationMenuItem_itemStateChanged()\r
613   {\r
614     SequenceGroup sg = getGroup();\r
615     if(sg.cs==null)\r
616           return;\r
617 \r
618     if (conservationMenuItem.getState())\r
619     {\r
620 \r
621       Conservation c = new Conservation("Group",\r
622                                         ResidueProperties.propHash, 3,\r
623                                         sg.getSequences(ap.av.hiddenRepSequences), 0,\r
624                                         ap.av.alignment.getWidth());\r
625 \r
626       c.calculate();\r
627       c.verdict(false, ap.av.ConsPercGaps);\r
628 \r
629       sg.cs.setConservation(c);\r
630 \r
631       SliderPanel.setConservationSlider(ap, sg.cs, sg.getName());\r
632       SliderPanel.showConservationSlider();\r
633     }\r
634     else // remove ConservationColouring\r
635     {\r
636       sg.cs.setConservation(null);\r
637     }\r
638 \r
639     refresh();\r
640   }\r
641 \r
642 \r
643   SequenceGroup getGroup()\r
644   {\r
645     SequenceGroup sg = ap.av.getSelectionGroup();\r
646 \r
647     // this method won't add a new group if it already exists\r
648     if(sg!=null)\r
649       ap.av.alignment.addGroup(sg);\r
650 \r
651     return sg;\r
652   }\r
653 \r
654   void unGroupMenuItem_actionPerformed()\r
655   {\r
656     SequenceGroup sg = ap.av.getSelectionGroup();\r
657     ap.av.alignment.deleteGroup(sg);\r
658     ap.av.setSelectionGroup(null);\r
659     ap.repaint();\r
660   }\r
661 \r
662   public void showColourText_itemStateChanged()\r
663   {\r
664     getGroup().setColourText(showColourText.getState());\r
665     refresh();\r
666   }\r
667 \r
668   public void showText_itemStateChanged()\r
669   {\r
670     getGroup().setDisplayText(showText.getState());\r
671     refresh();\r
672   }\r
673 \r
674   public void showBoxes_itemStateChanged()\r
675   {\r
676     getGroup().setDisplayBoxes(showBoxes.getState());\r
677     refresh();\r
678   }\r
679 \r
680   void hideSequences(boolean representGroup)\r
681   {\r
682     SequenceGroup sg = ap.av.getSelectionGroup();\r
683     if(sg==null || sg.getSize()<1)\r
684     {\r
685       ap.av.hideSequence(new SequenceI[]{seq});\r
686       return;\r
687     }\r
688 \r
689     ap.av.setSelectionGroup(null);\r
690 \r
691     if (representGroup)\r
692     {\r
693       ap.av.hideRepSequences(seq, sg);\r
694 \r
695       return;\r
696     }\r
697 \r
698     int gsize = sg.getSize();\r
699     SequenceI[] hseqs;\r
700 \r
701     hseqs = new SequenceI[gsize];\r
702 \r
703     int index = 0;\r
704     for (int i = 0; i < gsize; i++)\r
705     {\r
706       hseqs[index++] = sg.getSequenceAt(i);\r
707     }\r
708 \r
709     ap.av.hideSequence(hseqs);\r
710     }\r
711 \r
712 }\r