088ddfa2c5362f62262e557e2aa6a3fee8a49365
[jalview.git] / src / jalview / jbgui / GAlignFrame.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.jbgui;
22
23 import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
24 import jalview.api.SplitContainerI;
25 import jalview.bin.Cache;
26 import jalview.gui.Desktop;
27 import jalview.gui.JvOptionPane;
28 import jalview.gui.JvSwingUtils;
29 import jalview.gui.Preferences;
30 import jalview.gui.UserDefinedColours;
31 import jalview.io.FileFormat;
32 import jalview.schemes.ColourSchemeProperty;
33 import jalview.schemes.UserColourScheme;
34 import jalview.util.MessageManager;
35 import jalview.util.Platform;
36
37 import java.awt.BorderLayout;
38 import java.awt.Color;
39 import java.awt.GridLayout;
40 import java.awt.Toolkit;
41 import java.awt.event.ActionEvent;
42 import java.awt.event.ActionListener;
43 import java.awt.event.FocusAdapter;
44 import java.awt.event.FocusEvent;
45 import java.awt.event.KeyEvent;
46 import java.awt.event.MouseAdapter;
47 import java.awt.event.MouseEvent;
48 import java.util.HashMap;
49 import java.util.Map;
50
51 import javax.swing.BorderFactory;
52 import javax.swing.ButtonGroup;
53 import javax.swing.JCheckBoxMenuItem;
54 import javax.swing.JInternalFrame;
55 import javax.swing.JLabel;
56 import javax.swing.JMenu;
57 import javax.swing.JMenuBar;
58 import javax.swing.JMenuItem;
59 import javax.swing.JPanel;
60 import javax.swing.JRadioButtonMenuItem;
61 import javax.swing.JTabbedPane;
62 import javax.swing.KeyStroke;
63 import javax.swing.event.ChangeEvent;
64 import javax.swing.event.MenuEvent;
65 import javax.swing.event.MenuListener;
66
67 public class GAlignFrame extends JInternalFrame
68 {
69   protected static final String USER_DEFINED_COLOUR_SCHEME = "USER_DEFINED";
70
71   protected JMenuBar alignFrameMenuBar = new JMenuBar();
72
73   protected JMenuItem closeMenuItem = new JMenuItem();
74
75   protected JMenu colourMenu = new JMenu();
76
77   protected JMenu webService = new JMenu();
78
79   protected JMenuItem webServiceNoServices;
80
81   protected JCheckBoxMenuItem viewBoxesMenuItem = new JCheckBoxMenuItem();
82
83   protected JCheckBoxMenuItem viewTextMenuItem = new JCheckBoxMenuItem();
84
85   protected JMenu sortByAnnotScore = new JMenu();
86
87   public JLabel statusBar = new JLabel();
88
89   protected JMenu outputTextboxMenu = new JMenu();
90
91   protected JRadioButtonMenuItem textColour;
92
93   protected JRadioButtonMenuItem clustalColour;
94
95   protected JRadioButtonMenuItem zappoColour;
96
97   protected JRadioButtonMenuItem taylorColour;
98
99   protected JRadioButtonMenuItem hydrophobicityColour;
100
101   protected JRadioButtonMenuItem helixColour;
102
103   protected JRadioButtonMenuItem strandColour;
104
105   protected JRadioButtonMenuItem turnColour;
106
107   protected JRadioButtonMenuItem buriedColour;
108
109   protected JRadioButtonMenuItem userDefinedColour;
110
111   protected JRadioButtonMenuItem PIDColour;
112
113   protected JRadioButtonMenuItem BLOSUM62Colour;
114
115   protected JRadioButtonMenuItem nucleotideColour;
116
117   protected JRadioButtonMenuItem purinePyrimidineColour;
118
119   protected JRadioButtonMenuItem RNAInteractionColour;
120
121   // protected JRadioButtonMenuItem covariationColour;
122
123   protected JRadioButtonMenuItem tcoffeeColour;
124
125   protected JCheckBoxMenuItem annotationPanelMenuItem = new JCheckBoxMenuItem();
126
127   protected JCheckBoxMenuItem colourTextMenuItem = new JCheckBoxMenuItem();
128
129   protected JCheckBoxMenuItem showNonconservedMenuItem = new JCheckBoxMenuItem();
130
131   protected JMenuItem undoMenuItem = new JMenuItem();
132
133   protected JMenuItem redoMenuItem = new JMenuItem();
134
135   protected JCheckBoxMenuItem conservationMenuItem;
136
137   JRadioButtonMenuItem noColourmenuItem;
138
139   protected JCheckBoxMenuItem wrapMenuItem = new JCheckBoxMenuItem();
140
141   protected JCheckBoxMenuItem renderGapsMenuItem = new JCheckBoxMenuItem();
142
143   protected JCheckBoxMenuItem abovePIDThreshold;
144
145   public JCheckBoxMenuItem showSeqFeatures = new JCheckBoxMenuItem();
146
147   JMenuItem copy = new JMenuItem();
148
149   JMenuItem cut = new JMenuItem();
150
151   JMenu pasteMenu = new JMenu();
152
153   protected JCheckBoxMenuItem applyToAllGroups;
154
155   protected JCheckBoxMenuItem seqLimits = new JCheckBoxMenuItem();
156
157   protected JCheckBoxMenuItem scaleAbove = new JCheckBoxMenuItem();
158
159   protected JCheckBoxMenuItem scaleLeft = new JCheckBoxMenuItem();
160
161   protected JCheckBoxMenuItem scaleRight = new JCheckBoxMenuItem();
162
163   protected JMenuItem modifyPID;
164
165   protected JMenuItem modifyConservation;
166
167   protected JMenuItem annotationColour;
168
169   protected JMenu sortByTreeMenu = new JMenu();
170
171   protected JMenu sort = new JMenu();
172
173   protected JMenu calculateTree = new JMenu();
174
175   protected JCheckBoxMenuItem padGapsMenuitem = new JCheckBoxMenuItem();
176
177   protected JCheckBoxMenuItem showNpFeatsMenuitem = new JCheckBoxMenuItem();
178
179   protected JCheckBoxMenuItem showDbRefsMenuitem = new JCheckBoxMenuItem();
180
181   protected ButtonGroup colours = new ButtonGroup();
182
183   protected JMenuItem showTranslation = new JMenuItem();
184
185   protected JMenuItem showReverse = new JMenuItem();
186
187   protected JMenuItem showReverseComplement = new JMenuItem();
188
189   protected JMenu showProducts = new JMenu();
190
191   protected JMenuItem runGroovy = new JMenuItem();
192
193   protected JMenuItem rnahelicesColour;
194
195   protected JCheckBoxMenuItem autoCalculate = new JCheckBoxMenuItem();
196
197   protected JCheckBoxMenuItem sortByTree = new JCheckBoxMenuItem();
198
199   protected JCheckBoxMenuItem listenToViewSelections = new JCheckBoxMenuItem();
200
201   protected JPanel statusPanel = new JPanel();
202
203   protected JMenuItem showAllSeqAnnotations = new JMenuItem();
204
205   protected JMenuItem hideAllSeqAnnotations = new JMenuItem();
206
207   protected JMenuItem showAllAlAnnotations = new JMenuItem();
208
209   protected JMenuItem hideAllAlAnnotations = new JMenuItem();
210
211   protected JCheckBoxMenuItem showComplementMenuItem = new JCheckBoxMenuItem();
212
213   protected JCheckBoxMenuItem hiddenMarkers = new JCheckBoxMenuItem();
214
215   protected JTabbedPane tabbedPane = new JTabbedPane();
216
217   protected JMenuItem reload = new JMenuItem();
218
219   protected JMenu formatMenu = new JMenu();
220
221   protected JCheckBoxMenuItem idRightAlign = new JCheckBoxMenuItem();
222
223   protected JCheckBoxMenuItem centreColumnLabelsMenuItem = new JCheckBoxMenuItem();
224
225   protected JCheckBoxMenuItem followHighlightMenuItem = new JCheckBoxMenuItem();
226
227   protected JMenuItem gatherViews = new JMenuItem();
228
229   protected JMenuItem expandViews = new JMenuItem();
230
231   protected JCheckBoxMenuItem showGroupConsensus = new JCheckBoxMenuItem();
232
233   protected JCheckBoxMenuItem showGroupConservation = new JCheckBoxMenuItem();
234
235   protected JCheckBoxMenuItem showConsensusHistogram = new JCheckBoxMenuItem();
236
237   protected JCheckBoxMenuItem showSequenceLogo = new JCheckBoxMenuItem();
238
239   protected JCheckBoxMenuItem normaliseSequenceLogo = new JCheckBoxMenuItem();
240
241   protected JCheckBoxMenuItem applyAutoAnnotationSettings = new JCheckBoxMenuItem();
242
243   private SequenceAnnotationOrder annotationSortOrder;
244
245   private boolean showAutoCalculatedAbove = false;
246
247   private Map<KeyStroke, JMenuItem> accelerators = new HashMap<KeyStroke, JMenuItem>();
248
249   private SplitContainerI splitFrame;
250
251   public GAlignFrame()
252   {
253     try
254     {
255       jbInit();
256       setJMenuBar(alignFrameMenuBar);
257
258       // dynamically fill save as menu with available formats
259       for (String ff : FileFormat.getWritableFormats(true))
260       {
261         JMenuItem item = new JMenuItem(ff);
262
263         item.addActionListener(new ActionListener()
264         {
265           @Override
266           public void actionPerformed(ActionEvent e)
267           {
268             outputText_actionPerformed(e);
269           }
270         });
271
272         outputTextboxMenu.add(item);
273       }
274     } catch (Exception e)
275     {
276       System.err.println(e.toString());
277     }
278
279     if (!Platform.isAMac())
280     {
281       closeMenuItem.setMnemonic('C');
282       outputTextboxMenu.setMnemonic('T');
283       undoMenuItem.setMnemonic('Z');
284       redoMenuItem.setMnemonic('0');
285       copy.setMnemonic('C');
286       cut.setMnemonic('U');
287       pasteMenu.setMnemonic('P');
288       reload.setMnemonic('R');
289     }
290
291     // Map<String, UserColourScheme> userColourSchemes = UserDefinedColours
292     // .getUserColourSchemes();
293     // if (userColourSchemes != null)
294     // {
295     // int insertionPoint = findUserDefinedColourPosition();
296     // for (String userColour : userColourSchemes.keySet())
297     // {
298     // final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(
299     // userColour);
300     // radioItem.setName(USER_DEFINED_COLOUR_SCHEME);
301     // radioItem.addMouseListener(new MouseAdapter()
302     // {
303     // @Override
304     // public void mousePressed(MouseEvent evt)
305     // {
306     // if (evt.isPopupTrigger()) // Mac
307     // {
308     // offerRemoval();
309     // }
310     // }
311     //
312     // @Override
313     // public void mouseReleased(MouseEvent evt)
314     // {
315     // if (evt.isPopupTrigger()) // Windows
316     // {
317     // offerRemoval();
318     // }
319     // }
320     //
321     // void offerRemoval()
322     // {
323     // radioItem.removeActionListener(radioItem.getActionListeners()[0]);
324     //
325     // int option = JvOptionPane.showInternalConfirmDialog(
326     // Desktop.desktop, MessageManager
327     // .getString("label.remove_from_default_list"),
328     // MessageManager
329     // .getString("label.remove_user_defined_colour"),
330     // JvOptionPane.YES_NO_OPTION);
331     // if (option == JvOptionPane.YES_OPTION)
332     // {
333     // UserDefinedColours.removeColourFromDefaults(radioItem
334     // .getText());
335     // colourMenu.remove(radioItem);
336     // }
337     // else
338     // {
339     // radioItem.addActionListener(new ActionListener()
340     // {
341     // @Override
342     // public void actionPerformed(ActionEvent evt)
343     // {
344     // userDefinedColour_actionPerformed(evt);
345     // }
346     // });
347     // }
348     // }
349     // });
350     // radioItem.addActionListener(new ActionListener()
351     // {
352     // @Override
353     // public void actionPerformed(ActionEvent evt)
354     // {
355     // userDefinedColour_actionPerformed(evt);
356     // }
357     // });
358     // colourMenu.insert(radioItem, insertionPoint);
359     // insertionPoint++;
360     // colours.add(radioItem);
361     // }
362     // }
363     //
364     // /*
365     // * add colours to a ButtonGroup to make their
366     // * selection mutually exclusive
367     // */
368     // colours.add(noColourmenuItem);
369     // colours.add(clustalColour);
370     // colours.add(zappoColour);
371     // colours.add(taylorColour);
372     // colours.add(hydrophobicityColour);
373     // colours.add(helixColour);
374     // colours.add(strandColour);
375     // colours.add(turnColour);
376     // colours.add(buriedColour);
377     // colours.add(userDefinedColour);
378     // colours.add(PIDColour);
379     // colours.add(BLOSUM62Colour);
380     // colours.add(nucleotideColour);
381     // colours.add(purinePyrimidineColour);
382     // // colours.add(covariationColour);
383     // colours.add(tcoffeeColour);
384     // colours.add(RNAInteractionColour);
385     // setColourSelected(Cache.getDefault(Preferences.DEFAULT_COLOUR, "None"));
386   }
387
388   public void setColourSelected(String defaultColour)
389   {
390
391     if (defaultColour != null)
392     {
393       int index = ColourSchemeProperty
394               .getColourIndexFromName(defaultColour);
395
396       switch (index)
397       {
398       case ColourSchemeProperty.CLUSTAL:
399         clustalColour.setSelected(true);
400
401         break;
402
403       case ColourSchemeProperty.BLOSUM:
404         BLOSUM62Colour.setSelected(true);
405
406         break;
407
408       case ColourSchemeProperty.PID:
409         PIDColour.setSelected(true);
410
411         break;
412
413       case ColourSchemeProperty.ZAPPO:
414         zappoColour.setSelected(true);
415
416         break;
417
418       case ColourSchemeProperty.TAYLOR:
419         taylorColour.setSelected(true);
420         break;
421
422       case ColourSchemeProperty.HYDROPHOBIC:
423         hydrophobicityColour.setSelected(true);
424
425         break;
426
427       case ColourSchemeProperty.HELIX:
428         helixColour.setSelected(true);
429
430         break;
431
432       case ColourSchemeProperty.STRAND:
433         strandColour.setSelected(true);
434
435         break;
436
437       case ColourSchemeProperty.TURN:
438         turnColour.setSelected(true);
439
440         break;
441
442       case ColourSchemeProperty.BURIED:
443         buriedColour.setSelected(true);
444
445         break;
446
447       case ColourSchemeProperty.NUCLEOTIDE:
448         nucleotideColour.setSelected(true);
449
450         break;
451
452       case ColourSchemeProperty.TCOFFEE:
453         tcoffeeColour.setSelected(true);
454         break;
455
456       case ColourSchemeProperty.PURINEPYRIMIDINE:
457         purinePyrimidineColour.setSelected(true);
458
459         break;
460
461       case ColourSchemeProperty.RNAINTERACTION:
462         RNAInteractionColour.setSelected(true);
463
464         break;
465       /*
466        * case ColourSchemeProperty.COVARIATION:
467        * covariationColour.setSelected(true);
468        * 
469        * break;
470        */
471       case ColourSchemeProperty.USER_DEFINED:
472         userDefinedColour.setSelected(true);
473
474         break;
475       case ColourSchemeProperty.NONE:
476       default:
477         noColourmenuItem.setSelected(true);
478         break;
479
480       }
481     }
482
483   }
484
485   private void jbInit() throws Exception
486   {
487     initColourMenu();
488     buildColourMenu();
489
490     JMenuItem saveAs = new JMenuItem(
491             MessageManager.getString("action.save_as"));
492     ActionListener al = new ActionListener()
493     {
494       @Override
495       public void actionPerformed(ActionEvent e)
496       {
497         saveAs_actionPerformed(e);
498       }
499     };
500
501     // FIXME getDefaultToolkit throws an exception in Headless mode
502     KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_S, Toolkit
503             .getDefaultToolkit().getMenuShortcutKeyMask()
504             | KeyEvent.SHIFT_MASK, false);
505     addMenuActionAndAccelerator(keyStroke, saveAs, al);
506
507     closeMenuItem.setText(MessageManager.getString("action.close"));
508     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_W, Toolkit
509             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
510     al = new ActionListener()
511     {
512       @Override
513       public void actionPerformed(ActionEvent e)
514       {
515         closeMenuItem_actionPerformed(false);
516       }
517     };
518     addMenuActionAndAccelerator(keyStroke, closeMenuItem, al);
519
520     JMenu editMenu = new JMenu(MessageManager.getString("action.edit"));
521     JMenu viewMenu = new JMenu(MessageManager.getString("action.view"));
522     JMenu annotationsMenu = new JMenu(
523             MessageManager.getString("action.annotations"));
524     JMenu showMenu = new JMenu(MessageManager.getString("action.show"));
525     colourMenu.setText(MessageManager.getString("action.colour"));
526     JMenu calculateMenu = new JMenu(
527             MessageManager.getString("action.calculate"));
528     webService.setText(MessageManager.getString("action.web_service"));
529     JMenuItem selectAllSequenceMenuItem = new JMenuItem(
530             MessageManager.getString("action.select_all"));
531     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_A, Toolkit
532             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
533     al = new ActionListener()
534     {
535       @Override
536       public void actionPerformed(ActionEvent e)
537       {
538         selectAllSequenceMenuItem_actionPerformed(e);
539       }
540     };
541     addMenuActionAndAccelerator(keyStroke, selectAllSequenceMenuItem, al);
542
543     JMenuItem deselectAllSequenceMenuItem = new JMenuItem(
544             MessageManager.getString("action.deselect_all"));
545     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false);
546     al = new ActionListener()
547     {
548       @Override
549       public void actionPerformed(ActionEvent e)
550       {
551         deselectAllSequenceMenuItem_actionPerformed(e);
552       }
553     };
554     addMenuActionAndAccelerator(keyStroke, deselectAllSequenceMenuItem, al);
555
556     JMenuItem invertSequenceMenuItem = new JMenuItem(
557             MessageManager.getString("action.invert_sequence_selection"));
558     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_I, Toolkit
559             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
560     al = new ActionListener()
561     {
562       @Override
563       public void actionPerformed(ActionEvent e)
564       {
565         invertSequenceMenuItem_actionPerformed(e);
566       }
567     };
568     addMenuActionAndAccelerator(keyStroke, invertSequenceMenuItem, al);
569
570     JMenuItem grpsFromSelection = new JMenuItem(
571             MessageManager.getString("action.make_groups_selection"));
572     grpsFromSelection.addActionListener(new ActionListener()
573     {
574       @Override
575       public void actionPerformed(ActionEvent e)
576       {
577         makeGrpsFromSelection_actionPerformed(e);
578       }
579     });
580     JMenuItem expandAlignment = new JMenuItem(
581             MessageManager.getString("action.view_flanking_regions"));
582     expandAlignment.setToolTipText(MessageManager
583             .getString("label.view_flanking_regions"));
584     expandAlignment.addActionListener(new ActionListener()
585     {
586       @Override
587       public void actionPerformed(ActionEvent e)
588       {
589         expand_newalign(e);
590       }
591     });
592     JMenuItem remove2LeftMenuItem = new JMenuItem(
593             MessageManager.getString("action.remove_left"));
594     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_L, Toolkit
595             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
596     al = new ActionListener()
597     {
598       @Override
599       public void actionPerformed(ActionEvent e)
600       {
601         remove2LeftMenuItem_actionPerformed(e);
602       }
603     };
604     addMenuActionAndAccelerator(keyStroke, remove2LeftMenuItem, al);
605
606     JMenuItem remove2RightMenuItem = new JMenuItem(
607             MessageManager.getString("action.remove_right"));
608     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_R, Toolkit
609             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
610     al = new ActionListener()
611     {
612       @Override
613       public void actionPerformed(ActionEvent e)
614       {
615         remove2RightMenuItem_actionPerformed(e);
616       }
617     };
618     addMenuActionAndAccelerator(keyStroke, remove2RightMenuItem, al);
619
620     JMenuItem removeGappedColumnMenuItem = new JMenuItem(
621             MessageManager.getString("action.remove_empty_columns"));
622     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_E, Toolkit
623             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
624     al = new ActionListener()
625     {
626       @Override
627       public void actionPerformed(ActionEvent e)
628       {
629         removeGappedColumnMenuItem_actionPerformed(e);
630       }
631     };
632     addMenuActionAndAccelerator(keyStroke, removeGappedColumnMenuItem, al);
633
634     JMenuItem removeAllGapsMenuItem = new JMenuItem(
635             MessageManager.getString("action.remove_all_gaps"));
636     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_E, Toolkit
637             .getDefaultToolkit().getMenuShortcutKeyMask()
638             | KeyEvent.SHIFT_MASK, false);
639     al = new ActionListener()
640     {
641       @Override
642       public void actionPerformed(ActionEvent e)
643       {
644         removeAllGapsMenuItem_actionPerformed(e);
645       }
646     };
647     addMenuActionAndAccelerator(keyStroke, removeAllGapsMenuItem, al);
648
649     JMenuItem justifyLeftMenuItem = new JMenuItem(
650             MessageManager.getString("action.left_justify_alignment"));
651     justifyLeftMenuItem.addActionListener(new ActionListener()
652     {
653       @Override
654       public void actionPerformed(ActionEvent e)
655       {
656         justifyLeftMenuItem_actionPerformed(e);
657       }
658     });
659     JMenuItem justifyRightMenuItem = new JMenuItem(
660             MessageManager.getString("action.right_justify_alignment"));
661     justifyRightMenuItem.addActionListener(new ActionListener()
662     {
663       @Override
664       public void actionPerformed(ActionEvent e)
665       {
666         justifyRightMenuItem_actionPerformed(e);
667       }
668     });
669     viewBoxesMenuItem.setText(MessageManager.getString("action.boxes"));
670     viewBoxesMenuItem.setState(true);
671     viewBoxesMenuItem.addActionListener(new ActionListener()
672     {
673       @Override
674       public void actionPerformed(ActionEvent e)
675       {
676         viewBoxesMenuItem_actionPerformed(e);
677       }
678     });
679     viewTextMenuItem.setText(MessageManager.getString("action.text"));
680     viewTextMenuItem.setState(true);
681     viewTextMenuItem.addActionListener(new ActionListener()
682     {
683       @Override
684       public void actionPerformed(ActionEvent e)
685       {
686         viewTextMenuItem_actionPerformed(e);
687       }
688     });
689     showNonconservedMenuItem.setText(MessageManager
690             .getString("label.show_non_conserved"));
691     showNonconservedMenuItem.setState(false);
692     showNonconservedMenuItem.addActionListener(new ActionListener()
693     {
694       @Override
695       public void actionPerformed(ActionEvent e)
696       {
697         showUnconservedMenuItem_actionPerformed(e);
698       }
699     });
700     JMenuItem sortPairwiseMenuItem = new JMenuItem(
701             MessageManager.getString("action.by_pairwise_id"));
702     sortPairwiseMenuItem.addActionListener(new ActionListener()
703     {
704       @Override
705       public void actionPerformed(ActionEvent e)
706       {
707         sortPairwiseMenuItem_actionPerformed(e);
708       }
709     });
710     JMenuItem sortIDMenuItem = new JMenuItem(
711             MessageManager.getString("action.by_id"));
712     sortIDMenuItem.addActionListener(new ActionListener()
713     {
714       @Override
715       public void actionPerformed(ActionEvent e)
716       {
717         sortIDMenuItem_actionPerformed(e);
718       }
719     });
720     JMenuItem sortLengthMenuItem = new JMenuItem(
721             MessageManager.getString("action.by_length"));
722     sortLengthMenuItem.addActionListener(new ActionListener()
723     {
724       @Override
725       public void actionPerformed(ActionEvent e)
726       {
727         sortLengthMenuItem_actionPerformed(e);
728       }
729     });
730     JMenuItem sortGroupMenuItem = new JMenuItem(
731             MessageManager.getString("action.by_group"));
732     sortGroupMenuItem.addActionListener(new ActionListener()
733     {
734       @Override
735       public void actionPerformed(ActionEvent e)
736       {
737         sortGroupMenuItem_actionPerformed(e);
738       }
739     });
740
741     JMenuItem removeRedundancyMenuItem = new JMenuItem(
742             MessageManager.getString("action.remove_redundancy"));
743     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_D, Toolkit
744             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
745     al = new ActionListener()
746     {
747       @Override
748       public void actionPerformed(ActionEvent e)
749       {
750         removeRedundancyMenuItem_actionPerformed(e);
751       }
752     };
753     addMenuActionAndAccelerator(keyStroke, removeRedundancyMenuItem, al);
754
755     JMenuItem pairwiseAlignmentMenuItem = new JMenuItem(
756             MessageManager.getString("action.pairwise_alignment"));
757     pairwiseAlignmentMenuItem.addActionListener(new ActionListener()
758     {
759       @Override
760       public void actionPerformed(ActionEvent e)
761       {
762         pairwiseAlignmentMenuItem_actionPerformed(e);
763       }
764     });
765     JMenuItem PCAMenuItem = new JMenuItem(
766             MessageManager.getString("label.principal_component_analysis"));
767     PCAMenuItem.addActionListener(new ActionListener()
768     {
769       @Override
770       public void actionPerformed(ActionEvent e)
771       {
772         PCAMenuItem_actionPerformed(e);
773       }
774     });
775     JMenuItem averageDistanceTreeMenuItem = new JMenuItem(
776             MessageManager.getString("label.average_distance_identity"));
777     averageDistanceTreeMenuItem.addActionListener(new ActionListener()
778     {
779       @Override
780       public void actionPerformed(ActionEvent e)
781       {
782         averageDistanceTreeMenuItem_actionPerformed(e);
783       }
784     });
785     JMenuItem neighbourTreeMenuItem = new JMenuItem(
786             MessageManager.getString("label.neighbour_joining_identity"));
787     neighbourTreeMenuItem.addActionListener(new ActionListener()
788     {
789       @Override
790       public void actionPerformed(ActionEvent e)
791       {
792         neighbourTreeMenuItem_actionPerformed(e);
793       }
794     });
795
796     this.getContentPane().setLayout(new BorderLayout());
797     alignFrameMenuBar.setFont(new java.awt.Font("Verdana", 0, 11));
798     statusBar.setBackground(Color.white);
799     statusBar.setFont(new java.awt.Font("Verdana", 0, 11));
800     statusBar.setBorder(BorderFactory.createLineBorder(Color.black));
801     statusBar.setText(MessageManager.getString("label.status_bar"));
802     outputTextboxMenu.setText(MessageManager
803             .getString("label.out_to_textbox"));
804
805
806     JMenuItem avDistanceTreeBlosumMenuItem = new JMenuItem(
807             MessageManager.getString("label.average_distance_bloslum62"));
808     avDistanceTreeBlosumMenuItem.addActionListener(new ActionListener()
809     {
810       @Override
811       public void actionPerformed(ActionEvent e)
812       {
813         avTreeBlosumMenuItem_actionPerformed(e);
814       }
815     });
816     JMenuItem njTreeBlosumMenuItem = new JMenuItem(
817             MessageManager.getString("label.neighbour_blosum62"));
818     njTreeBlosumMenuItem.addActionListener(new ActionListener()
819     {
820       @Override
821       public void actionPerformed(ActionEvent e)
822       {
823         njTreeBlosumMenuItem_actionPerformed(e);
824       }
825     });
826     annotationPanelMenuItem.setActionCommand("");
827     annotationPanelMenuItem.setText(MessageManager
828             .getString("label.show_annotations"));
829     annotationPanelMenuItem.setState(Cache.getDefault("SHOW_ANNOTATIONS",
830             true));
831     annotationPanelMenuItem.addActionListener(new ActionListener()
832     {
833       @Override
834       public void actionPerformed(ActionEvent e)
835       {
836         annotationPanelMenuItem_actionPerformed(e);
837       }
838     });
839     showAllAlAnnotations.setText(MessageManager
840             .getString("label.show_all_al_annotations"));
841     final boolean isAnnotationPanelShown = annotationPanelMenuItem
842             .getState();
843     showAllAlAnnotations.setEnabled(isAnnotationPanelShown);
844     showAllAlAnnotations.addActionListener(new ActionListener()
845     {
846       @Override
847       public void actionPerformed(ActionEvent e)
848       {
849         showAllAnnotations_actionPerformed(false, true);
850       }
851     });
852     hideAllAlAnnotations.setText(MessageManager
853             .getString("label.hide_all_al_annotations"));
854     hideAllAlAnnotations.setEnabled(isAnnotationPanelShown);
855     hideAllAlAnnotations.addActionListener(new ActionListener()
856     {
857       @Override
858       public void actionPerformed(ActionEvent e)
859       {
860         hideAllAnnotations_actionPerformed(false, true);
861       }
862     });
863     showAllSeqAnnotations.setText(MessageManager
864             .getString("label.show_all_seq_annotations"));
865     showAllSeqAnnotations.setEnabled(isAnnotationPanelShown);
866     showAllSeqAnnotations.addActionListener(new ActionListener()
867     {
868       @Override
869       public void actionPerformed(ActionEvent e)
870       {
871         showAllAnnotations_actionPerformed(true, false);
872       }
873     });
874     hideAllSeqAnnotations.setText(MessageManager
875             .getString("label.hide_all_seq_annotations"));
876     hideAllSeqAnnotations.setEnabled(isAnnotationPanelShown);
877     hideAllSeqAnnotations.addActionListener(new ActionListener()
878     {
879       @Override
880       public void actionPerformed(ActionEvent e)
881       {
882         hideAllAnnotations_actionPerformed(true, false);
883       }
884     });
885     SequenceAnnotationOrder sortAnnotationsBy = SequenceAnnotationOrder
886             .valueOf(Cache.getDefault(Preferences.SORT_ANNOTATIONS,
887                     SequenceAnnotationOrder.NONE.name()));
888     final JCheckBoxMenuItem sortAnnBySequence = new JCheckBoxMenuItem(
889             MessageManager.getString("label.sort_annotations_by_sequence"));
890     final JCheckBoxMenuItem sortAnnByLabel = new JCheckBoxMenuItem(
891             MessageManager.getString("label.sort_annotations_by_label"));
892
893     sortAnnBySequence
894             .setSelected(sortAnnotationsBy == SequenceAnnotationOrder.SEQUENCE_AND_LABEL);
895     sortAnnBySequence.addActionListener(new ActionListener()
896     {
897       @Override
898       public void actionPerformed(ActionEvent e)
899       {
900         boolean newState = sortAnnBySequence.getState();
901         sortAnnByLabel.setSelected(false);
902         setAnnotationSortOrder(newState ? SequenceAnnotationOrder.SEQUENCE_AND_LABEL
903                 : SequenceAnnotationOrder.NONE);
904         sortAnnotations_actionPerformed();
905       }
906     });
907     sortAnnByLabel
908             .setSelected(sortAnnotationsBy == SequenceAnnotationOrder.LABEL_AND_SEQUENCE);
909     sortAnnByLabel.addActionListener(new ActionListener()
910     {
911       @Override
912       public void actionPerformed(ActionEvent e)
913       {
914         boolean newState = sortAnnByLabel.getState();
915         sortAnnBySequence.setSelected(false);
916         setAnnotationSortOrder(newState ? SequenceAnnotationOrder.LABEL_AND_SEQUENCE
917                 : SequenceAnnotationOrder.NONE);
918         sortAnnotations_actionPerformed();
919       }
920     });
921     colourTextMenuItem = new JCheckBoxMenuItem(
922             MessageManager
923             .getString("label.colour_text"));
924     colourTextMenuItem.addActionListener(new ActionListener()
925     {
926       @Override
927       public void actionPerformed(ActionEvent e)
928       {
929         colourTextMenuItem_actionPerformed(e);
930       }
931     });
932
933     JMenuItem htmlMenuItem = new JMenuItem(
934             MessageManager.getString("label.html"));
935     htmlMenuItem.addActionListener(new ActionListener()
936     {
937       @Override
938       public void actionPerformed(ActionEvent e)
939       {
940         htmlMenuItem_actionPerformed(e);
941       }
942     });
943
944     JMenuItem createBioJS = new JMenuItem(
945             MessageManager.getString("label.biojs_html_export"));
946     createBioJS.addActionListener(new java.awt.event.ActionListener()
947     {
948       @Override
949       public void actionPerformed(ActionEvent e)
950       {
951         bioJSMenuItem_actionPerformed(e);
952       }
953     });
954
955     JMenuItem overviewMenuItem = new JMenuItem(
956             MessageManager.getString("label.overview_window"));
957     overviewMenuItem.addActionListener(new ActionListener()
958     {
959       @Override
960       public void actionPerformed(ActionEvent e)
961       {
962         overviewMenuItem_actionPerformed(e);
963       }
964     });
965
966     undoMenuItem.setEnabled(false);
967     undoMenuItem.setText(MessageManager.getString("action.undo"));
968     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit
969             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
970     al = new ActionListener()
971     {
972       @Override
973       public void actionPerformed(ActionEvent e)
974       {
975         undoMenuItem_actionPerformed(e);
976       }
977     };
978     addMenuActionAndAccelerator(keyStroke, undoMenuItem, al);
979
980     redoMenuItem.setEnabled(false);
981     redoMenuItem.setText(MessageManager.getString("action.redo"));
982     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_Y, Toolkit
983             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
984     al = new ActionListener()
985     {
986       @Override
987       public void actionPerformed(ActionEvent e)
988       {
989         redoMenuItem_actionPerformed(e);
990       }
991     };
992     addMenuActionAndAccelerator(keyStroke, redoMenuItem, al);
993
994     wrapMenuItem.setText(MessageManager.getString("label.wrap"));
995     wrapMenuItem.addActionListener(new ActionListener()
996     {
997       @Override
998       public void actionPerformed(ActionEvent e)
999       {
1000         wrapMenuItem_actionPerformed(e);
1001       }
1002     });
1003
1004     JMenuItem printMenuItem = new JMenuItem(
1005             MessageManager.getString("action.print"));
1006     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_P, Toolkit
1007             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
1008     al = new ActionListener()
1009     {
1010       @Override
1011       public void actionPerformed(ActionEvent e)
1012       {
1013         printMenuItem_actionPerformed(e);
1014       }
1015     };
1016     addMenuActionAndAccelerator(keyStroke, printMenuItem, al);
1017
1018     renderGapsMenuItem
1019             .setText(MessageManager.getString("action.show_gaps"));
1020     renderGapsMenuItem.setState(true);
1021     renderGapsMenuItem.addActionListener(new ActionListener()
1022     {
1023       @Override
1024       public void actionPerformed(ActionEvent e)
1025       {
1026         renderGapsMenuItem_actionPerformed(e);
1027       }
1028     });
1029
1030     JMenuItem findMenuItem = new JMenuItem(
1031             MessageManager.getString("action.find"));
1032     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F, Toolkit
1033             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
1034     findMenuItem.setToolTipText(JvSwingUtils.wrapTooltip(true,
1035             MessageManager.getString("label.find_tip")));
1036     al = new ActionListener()
1037     {
1038       @Override
1039       public void actionPerformed(ActionEvent e)
1040       {
1041         findMenuItem_actionPerformed(e);
1042       }
1043     };
1044     addMenuActionAndAccelerator(keyStroke, findMenuItem, al);
1045
1046     showSeqFeatures.setText(MessageManager
1047             .getString("label.show_sequence_features"));
1048     showSeqFeatures.addActionListener(new ActionListener()
1049     {
1050       @Override
1051       public void actionPerformed(ActionEvent actionEvent)
1052       {
1053         showSeqFeatures_actionPerformed(actionEvent);
1054       }
1055     });
1056     /*
1057      * showSeqFeaturesHeight.setText("Vary Sequence Feature Height");
1058      * showSeqFeaturesHeight.addActionListener(new ActionListener() { public
1059      * void actionPerformed(ActionEvent actionEvent) {
1060      * showSeqFeaturesHeight_actionPerformed(actionEvent); } });
1061      */
1062     showDbRefsMenuitem.setText(MessageManager
1063             .getString("label.show_database_refs"));
1064     showDbRefsMenuitem.addActionListener(new ActionListener()
1065     {
1066
1067       @Override
1068       public void actionPerformed(ActionEvent e)
1069       {
1070         showDbRefs_actionPerformed(e);
1071       }
1072
1073     });
1074     showNpFeatsMenuitem.setText(MessageManager
1075             .getString("label.show_non_positional_features"));
1076     showNpFeatsMenuitem.addActionListener(new ActionListener()
1077     {
1078
1079       @Override
1080       public void actionPerformed(ActionEvent e)
1081       {
1082         showNpFeats_actionPerformed(e);
1083       }
1084
1085     });
1086     showGroupConservation.setText(MessageManager
1087             .getString("label.group_conservation"));
1088     showGroupConservation.addActionListener(new ActionListener()
1089     {
1090
1091       @Override
1092       public void actionPerformed(ActionEvent e)
1093       {
1094         showGroupConservation_actionPerformed(e);
1095       }
1096
1097     });
1098
1099     showGroupConsensus.setText(MessageManager
1100             .getString("label.group_consensus"));
1101     showGroupConsensus.addActionListener(new ActionListener()
1102     {
1103
1104       @Override
1105       public void actionPerformed(ActionEvent e)
1106       {
1107         showGroupConsensus_actionPerformed(e);
1108       }
1109
1110     });
1111     showConsensusHistogram.setText(MessageManager
1112             .getString("label.show_consensus_histogram"));
1113     showConsensusHistogram.addActionListener(new ActionListener()
1114     {
1115
1116       @Override
1117       public void actionPerformed(ActionEvent e)
1118       {
1119         showConsensusHistogram_actionPerformed(e);
1120       }
1121
1122     });
1123     showSequenceLogo.setText(MessageManager
1124             .getString("label.show_consensus_logo"));
1125     showSequenceLogo.addActionListener(new ActionListener()
1126     {
1127
1128       @Override
1129       public void actionPerformed(ActionEvent e)
1130       {
1131         showSequenceLogo_actionPerformed(e);
1132       }
1133
1134     });
1135     normaliseSequenceLogo.setText(MessageManager
1136             .getString("label.norm_consensus_logo"));
1137     normaliseSequenceLogo.addActionListener(new ActionListener()
1138     {
1139
1140       @Override
1141       public void actionPerformed(ActionEvent e)
1142       {
1143         normaliseSequenceLogo_actionPerformed(e);
1144       }
1145
1146     });
1147     applyAutoAnnotationSettings.setText(MessageManager
1148             .getString("label.apply_all_groups"));
1149     applyAutoAnnotationSettings.setState(false);
1150     applyAutoAnnotationSettings.setVisible(true);
1151     applyAutoAnnotationSettings.addActionListener(new ActionListener()
1152     {
1153       @Override
1154       public void actionPerformed(ActionEvent e)
1155       {
1156         applyAutoAnnotationSettings_actionPerformed(e);
1157       }
1158     });
1159
1160     ButtonGroup buttonGroup = new ButtonGroup();
1161     final JRadioButtonMenuItem showAutoFirst = new JRadioButtonMenuItem(
1162             MessageManager.getString("label.show_first"));
1163     final JRadioButtonMenuItem showAutoLast = new JRadioButtonMenuItem(
1164             MessageManager.getString("label.show_last"));
1165     buttonGroup.add(showAutoFirst);
1166     buttonGroup.add(showAutoLast);
1167     final boolean autoFirst = Cache.getDefault(
1168             Preferences.SHOW_AUTOCALC_ABOVE, false);
1169     showAutoFirst.setSelected(autoFirst);
1170     setShowAutoCalculatedAbove(autoFirst);
1171     showAutoFirst.addActionListener(new ActionListener()
1172     {
1173       @Override
1174       public void actionPerformed(ActionEvent e)
1175       {
1176         setShowAutoCalculatedAbove(showAutoFirst.isSelected());
1177         sortAnnotations_actionPerformed();
1178       }
1179     });
1180     showAutoLast.setSelected(!showAutoFirst.isSelected());
1181     showAutoLast.addActionListener(new ActionListener()
1182     {
1183       @Override
1184       public void actionPerformed(ActionEvent e)
1185       {
1186         setShowAutoCalculatedAbove(!showAutoLast.isSelected());
1187         sortAnnotations_actionPerformed();
1188       }
1189     });
1190
1191     JMenuItem deleteGroups = new JMenuItem(
1192             MessageManager.getString("action.undefine_groups"));
1193     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_U, Toolkit
1194             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
1195     al = new ActionListener()
1196     {
1197       @Override
1198       public void actionPerformed(ActionEvent e)
1199       {
1200         deleteGroups_actionPerformed(e);
1201       }
1202     };
1203     addMenuActionAndAccelerator(keyStroke, deleteGroups, al);
1204
1205     JMenuItem annotationColumn = new JMenuItem(
1206             MessageManager.getString("action.select_by_annotation"));
1207     annotationColumn.addActionListener(new ActionListener()
1208     {
1209       @Override
1210       public void actionPerformed(ActionEvent e)
1211       {
1212         annotationColumn_actionPerformed(e);
1213       }
1214     });
1215
1216     JMenuItem createGroup = new JMenuItem(
1217             MessageManager.getString("action.create_groups"));
1218     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_G, Toolkit
1219             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
1220     al = new ActionListener()
1221     {
1222       @Override
1223       public void actionPerformed(ActionEvent e)
1224       {
1225         createGroup_actionPerformed(e);
1226       }
1227     };
1228     addMenuActionAndAccelerator(keyStroke, createGroup, al);
1229
1230     JMenuItem unGroup = new JMenuItem(
1231             MessageManager.getString("action.remove_group"));
1232     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_G, Toolkit
1233             .getDefaultToolkit().getMenuShortcutKeyMask()
1234             | KeyEvent.SHIFT_MASK, false);
1235     al = new ActionListener()
1236     {
1237       @Override
1238       public void actionPerformed(ActionEvent e)
1239       {
1240         unGroup_actionPerformed(e);
1241       }
1242     };
1243     addMenuActionAndAccelerator(keyStroke, unGroup, al);
1244
1245     copy.setText(MessageManager.getString("action.copy"));
1246     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit
1247             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
1248
1249     al = new ActionListener()
1250     {
1251       @Override
1252       public void actionPerformed(ActionEvent e)
1253       {
1254         copy_actionPerformed(e);
1255       }
1256     };
1257     addMenuActionAndAccelerator(keyStroke, copy, al);
1258
1259     cut.setText(MessageManager.getString("action.cut"));
1260     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_X, Toolkit
1261             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
1262     al = new ActionListener()
1263     {
1264       @Override
1265       public void actionPerformed(ActionEvent e)
1266       {
1267         cut_actionPerformed(e);
1268       }
1269     };
1270     addMenuActionAndAccelerator(keyStroke, cut, al);
1271
1272     JMenuItem delete = new JMenuItem(
1273             MessageManager.getString("action.delete"));
1274     delete.addActionListener(new ActionListener()
1275     {
1276       @Override
1277       public void actionPerformed(ActionEvent e)
1278       {
1279         delete_actionPerformed(e);
1280       }
1281     });
1282
1283     pasteMenu.setText(MessageManager.getString("action.paste"));
1284     JMenuItem pasteNew = new JMenuItem(
1285             MessageManager.getString("label.to_new_alignment"));
1286     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_V, Toolkit
1287             .getDefaultToolkit().getMenuShortcutKeyMask()
1288             | KeyEvent.SHIFT_MASK, false);
1289     al = new ActionListener()
1290     {
1291       @Override
1292       public void actionPerformed(ActionEvent e)
1293       {
1294         pasteNew_actionPerformed(e);
1295       }
1296     };
1297     addMenuActionAndAccelerator(keyStroke, pasteNew, al);
1298
1299     JMenuItem pasteThis = new JMenuItem(
1300             MessageManager.getString("label.to_this_alignment"));
1301     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_V, Toolkit
1302             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
1303     al = new ActionListener()
1304     {
1305       @Override
1306       public void actionPerformed(ActionEvent e)
1307       {
1308         pasteThis_actionPerformed(e);
1309       }
1310     };
1311     addMenuActionAndAccelerator(keyStroke, pasteThis, al);
1312
1313     JMenuItem createPNG = new JMenuItem("PNG");
1314     createPNG.addActionListener(new ActionListener()
1315     {
1316       @Override
1317       public void actionPerformed(ActionEvent e)
1318       {
1319         createPNG(null);
1320       }
1321     });
1322     createPNG.setActionCommand(MessageManager
1323             .getString("label.save_png_image"));
1324
1325     JMenuItem font = new JMenuItem(MessageManager.getString("action.font"));
1326     font.addActionListener(new ActionListener()
1327     {
1328       @Override
1329       public void actionPerformed(ActionEvent e)
1330       {
1331         font_actionPerformed(e);
1332       }
1333     });
1334     seqLimits.setText(MessageManager
1335             .getString("label.show_sequence_limits"));
1336     seqLimits.setState(jalview.bin.Cache.getDefault("SHOW_JVSUFFIX", true));
1337     seqLimits.addActionListener(new ActionListener()
1338     {
1339       @Override
1340       public void actionPerformed(ActionEvent e)
1341       {
1342         seqLimit_actionPerformed(e);
1343       }
1344     });
1345     JMenuItem epsFile = new JMenuItem("EPS");
1346     epsFile.addActionListener(new ActionListener()
1347     {
1348       @Override
1349       public void actionPerformed(ActionEvent e)
1350       {
1351         createEPS(null);
1352       }
1353     });
1354
1355     JMenuItem createSVG = new JMenuItem("SVG");
1356     createSVG.addActionListener(new ActionListener()
1357     {
1358       @Override
1359       public void actionPerformed(ActionEvent e)
1360       {
1361         createSVG(null);
1362       }
1363     });
1364
1365     JMenuItem loadTreeMenuItem = new JMenuItem(
1366             MessageManager.getString("label.load_associated_tree"));
1367     loadTreeMenuItem.setActionCommand(MessageManager
1368             .getString("label.load_tree_for_sequence_set"));
1369     loadTreeMenuItem.addActionListener(new ActionListener()
1370     {
1371       @Override
1372       public void actionPerformed(ActionEvent e)
1373       {
1374         loadTreeMenuItem_actionPerformed(e);
1375       }
1376     });
1377
1378     scaleAbove.setVisible(false);
1379     scaleAbove.setText(MessageManager.getString("action.scale_above"));
1380     scaleAbove.addActionListener(new ActionListener()
1381     {
1382       @Override
1383       public void actionPerformed(ActionEvent e)
1384       {
1385         scaleAbove_actionPerformed(e);
1386       }
1387     });
1388     scaleLeft.setVisible(false);
1389     scaleLeft.setSelected(true);
1390     scaleLeft.setText(MessageManager.getString("action.scale_left"));
1391     scaleLeft.addActionListener(new ActionListener()
1392     {
1393       @Override
1394       public void actionPerformed(ActionEvent e)
1395       {
1396         scaleLeft_actionPerformed(e);
1397       }
1398     });
1399     scaleRight.setVisible(false);
1400     scaleRight.setSelected(true);
1401     scaleRight.setText(MessageManager.getString("action.scale_right"));
1402     scaleRight.addActionListener(new ActionListener()
1403     {
1404       @Override
1405       public void actionPerformed(ActionEvent e)
1406       {
1407         scaleRight_actionPerformed(e);
1408       }
1409     });
1410     centreColumnLabelsMenuItem.setVisible(true);
1411     centreColumnLabelsMenuItem.setState(false);
1412     centreColumnLabelsMenuItem.setText(MessageManager
1413             .getString("label.centre_column_labels"));
1414     centreColumnLabelsMenuItem.addActionListener(new ActionListener()
1415     {
1416       @Override
1417       public void actionPerformed(ActionEvent e)
1418       {
1419         centreColumnLabels_actionPerformed(e);
1420       }
1421     });
1422     followHighlightMenuItem.setVisible(true);
1423     followHighlightMenuItem.setState(true);
1424     followHighlightMenuItem.setText(MessageManager
1425             .getString("label.automatic_scrolling"));
1426     followHighlightMenuItem.addActionListener(new ActionListener()
1427     {
1428
1429       @Override
1430       public void actionPerformed(ActionEvent e)
1431       {
1432         followHighlight_actionPerformed();
1433       }
1434
1435     });
1436
1437     sortByTreeMenu
1438             .setText(MessageManager.getString("action.by_tree_order"));
1439     sort.setText(MessageManager.getString("action.sort"));
1440     sort.addMenuListener(new MenuListener()
1441     {
1442       @Override
1443       public void menuSelected(MenuEvent e)
1444       {
1445         buildTreeMenu();
1446       }
1447
1448       @Override
1449       public void menuDeselected(MenuEvent e)
1450       {
1451       }
1452
1453       @Override
1454       public void menuCanceled(MenuEvent e)
1455       {
1456       }
1457     });
1458     sortByAnnotScore.setText(MessageManager
1459             .getString("label.sort_by_score"));
1460     sort.add(sortByAnnotScore);
1461     sort.addMenuListener(new javax.swing.event.MenuListener()
1462     {
1463
1464       @Override
1465       public void menuCanceled(MenuEvent e)
1466       {
1467       }
1468
1469       @Override
1470       public void menuDeselected(MenuEvent e)
1471       {
1472       }
1473
1474       @Override
1475       public void menuSelected(MenuEvent e)
1476       {
1477         buildSortByAnnotationScoresMenu();
1478       }
1479     });
1480     sortByAnnotScore.setVisible(false);
1481
1482     calculateTree
1483             .setText(MessageManager.getString("action.calculate_tree"));
1484
1485     padGapsMenuitem.setText(MessageManager.getString("label.pad_gaps"));
1486     padGapsMenuitem.setState(jalview.bin.Cache
1487             .getDefault("PAD_GAPS", false));
1488     padGapsMenuitem.addActionListener(new ActionListener()
1489     {
1490       @Override
1491       public void actionPerformed(ActionEvent e)
1492       {
1493         padGapsMenuitem_actionPerformed(e);
1494       }
1495     });
1496     JMenuItem vamsasStore = new JMenuItem(
1497             MessageManager.getString("label.vamsas_store"));
1498     vamsasStore.setVisible(false);
1499     vamsasStore.addActionListener(new ActionListener()
1500     {
1501       @Override
1502       public void actionPerformed(ActionEvent e)
1503       {
1504         vamsasStore_actionPerformed(e);
1505       }
1506     });
1507     showTranslation.setText(MessageManager
1508             .getString("label.translate_cDNA"));
1509     showTranslation.addActionListener(new ActionListener()
1510     {
1511       @Override
1512       public void actionPerformed(ActionEvent e)
1513       {
1514         showTranslation_actionPerformed(e);
1515       }
1516     });
1517     showReverse.setText(MessageManager.getString("label.reverse"));
1518     showReverse.addActionListener(new ActionListener()
1519     {
1520       @Override
1521       public void actionPerformed(ActionEvent e)
1522       {
1523         showReverse_actionPerformed(false);
1524       }
1525     });
1526     showReverseComplement.setText(MessageManager
1527             .getString("label.reverse_complement"));
1528     showReverseComplement.addActionListener(new ActionListener()
1529     {
1530       @Override
1531       public void actionPerformed(ActionEvent e)
1532       {
1533         showReverse_actionPerformed(true);
1534       }
1535     });
1536
1537     JMenuItem extractScores = new JMenuItem(
1538             MessageManager.getString("label.extract_scores"));
1539     extractScores.addActionListener(new ActionListener()
1540     {
1541       @Override
1542       public void actionPerformed(ActionEvent e)
1543       {
1544         extractScores_actionPerformed(e);
1545       }
1546     });
1547     extractScores.setVisible(true);
1548     // JBPNote: TODO: make gui for regex based score extraction
1549
1550     // for show products actions see AlignFrame.canShowProducts
1551     showProducts.setText(MessageManager.getString("label.get_cross_refs"));
1552
1553     runGroovy.setText(MessageManager.getString("label.run_groovy"));
1554     runGroovy.setToolTipText(MessageManager
1555             .getString("label.run_groovy_tip"));
1556     runGroovy.addActionListener(new ActionListener()
1557     {
1558       @Override
1559       public void actionPerformed(ActionEvent e)
1560       {
1561         runGroovy_actionPerformed();
1562       }
1563     });
1564
1565     JMenuItem openFeatureSettings = new JMenuItem(
1566             MessageManager.getString("action.feature_settings"));
1567     openFeatureSettings.addActionListener(new ActionListener()
1568     {
1569       @Override
1570       public void actionPerformed(ActionEvent e)
1571       {
1572         featureSettings_actionPerformed(e);
1573       }
1574     });
1575     JMenuItem fetchSequence = new JMenuItem(
1576             MessageManager.getString("label.fetch_sequences"));
1577     fetchSequence.addActionListener(new ActionListener()
1578     {
1579       @Override
1580       public void actionPerformed(ActionEvent e)
1581       {
1582         fetchSequence_actionPerformed(e);
1583       }
1584     });
1585
1586     JMenuItem associatedData = new JMenuItem(
1587             MessageManager.getString("label.load_features_annotations"));
1588     associatedData.addActionListener(new ActionListener()
1589     {
1590       @Override
1591       public void actionPerformed(ActionEvent e)
1592       {
1593         associatedData_actionPerformed(e);
1594       }
1595     });
1596     autoCalculate.setText(MessageManager
1597             .getString("label.autocalculate_consensus"));
1598     autoCalculate.setState(jalview.bin.Cache.getDefault(
1599             "AUTO_CALC_CONSENSUS", true));
1600     autoCalculate.addActionListener(new ActionListener()
1601     {
1602       @Override
1603       public void actionPerformed(ActionEvent e)
1604       {
1605         autoCalculate_actionPerformed(e);
1606       }
1607     });
1608     sortByTree.setText(MessageManager
1609             .getString("label.sort_alignment_new_tree"));
1610     sortByTree
1611             .setToolTipText("<html>"
1612                     + MessageManager
1613                             .getString("label.enable_automatically_sort_alignment_when_open_new_tree"));
1614     sortByTree
1615             .setState(jalview.bin.Cache.getDefault("SORT_BY_TREE", false));
1616     sortByTree.addActionListener(new ActionListener()
1617     {
1618       @Override
1619       public void actionPerformed(ActionEvent e)
1620       {
1621         sortByTreeOption_actionPerformed(e);
1622       }
1623     });
1624
1625     listenToViewSelections.setText(MessageManager
1626             .getString("label.listen_for_selections"));
1627     listenToViewSelections
1628             .setToolTipText("<html>"
1629                     + MessageManager
1630                             .getString("label.selections_mirror_selections_made_same_sequences_other_views"));
1631     listenToViewSelections.setState(false);
1632     listenToViewSelections.addActionListener(new ActionListener()
1633     {
1634       @Override
1635       public void actionPerformed(ActionEvent e)
1636       {
1637         listenToViewSelections_actionPerformed(e);
1638       }
1639     });
1640
1641     JMenu addSequenceMenu = new JMenu(
1642             MessageManager.getString("label.add_sequences"));
1643     JMenuItem addFromFile = new JMenuItem(
1644             MessageManager.getString("label.from_file"));
1645     addFromFile.addActionListener(new ActionListener()
1646     {
1647       @Override
1648       public void actionPerformed(ActionEvent e)
1649       {
1650         addFromFile_actionPerformed(e);
1651       }
1652     });
1653     JMenuItem addFromText = new JMenuItem(
1654             MessageManager.getString("label.from_textbox"));
1655     addFromText.addActionListener(new ActionListener()
1656     {
1657       @Override
1658       public void actionPerformed(ActionEvent e)
1659       {
1660         addFromText_actionPerformed(e);
1661       }
1662     });
1663     JMenuItem addFromURL = new JMenuItem(
1664             MessageManager.getString("label.from_url"));
1665     addFromURL.addActionListener(new ActionListener()
1666     {
1667       @Override
1668       public void actionPerformed(ActionEvent e)
1669       {
1670         addFromURL_actionPerformed(e);
1671       }
1672     });
1673     JMenuItem exportFeatures = new JMenuItem(
1674             MessageManager.getString("label.export_features"));
1675     exportFeatures.addActionListener(new ActionListener()
1676     {
1677       @Override
1678       public void actionPerformed(ActionEvent e)
1679       {
1680         exportFeatures_actionPerformed(e);
1681       }
1682     });
1683     JMenuItem exportAnnotations = new JMenuItem(
1684             MessageManager.getString("label.export_annotations"));
1685     exportAnnotations.addActionListener(new ActionListener()
1686     {
1687       @Override
1688       public void actionPerformed(ActionEvent e)
1689       {
1690         exportAnnotations_actionPerformed(e);
1691       }
1692     });
1693     statusPanel.setLayout(new GridLayout());
1694     JMenuItem showAllSeqs = new JMenuItem(
1695             MessageManager.getString("label.all_sequences"));
1696     showAllSeqs.setToolTipText(MessageManager
1697             .getString("label.toggle_sequence_visibility"));
1698     showAllSeqs.addActionListener(new ActionListener()
1699     {
1700       @Override
1701       public void actionPerformed(ActionEvent e)
1702       {
1703         showAllSeqs_actionPerformed(e);
1704       }
1705     });
1706     JMenuItem showAllColumns = new JMenuItem(
1707             MessageManager.getString("label.all_columns"));
1708     showAllColumns.setToolTipText(MessageManager
1709             .getString("label.toggle_columns_visibility"));
1710     showAllColumns.addActionListener(new ActionListener()
1711     {
1712       @Override
1713       public void actionPerformed(ActionEvent e)
1714       {
1715         showAllColumns_actionPerformed(e);
1716       }
1717     });
1718     JMenu hideMenu = new JMenu(MessageManager.getString("action.hide"));
1719     JMenuItem hideSelSequences = new JMenuItem(
1720             MessageManager.getString("label.selected_sequences"));
1721     hideSelSequences.setToolTipText(MessageManager
1722             .getString("label.toggle_sequence_visibility"));
1723     hideSelSequences.addActionListener(new ActionListener()
1724     {
1725       @Override
1726       public void actionPerformed(ActionEvent e)
1727       {
1728         hideSelSequences_actionPerformed(e);
1729       }
1730     });
1731     JMenuItem hideSelColumns = new JMenuItem(
1732             MessageManager.getString("label.selected_columns"));
1733     hideSelColumns.setToolTipText(MessageManager
1734             .getString("label.toggle_columns_visibility"));
1735     hideSelColumns.addActionListener(new ActionListener()
1736     {
1737       @Override
1738       public void actionPerformed(ActionEvent e)
1739       {
1740         hideSelColumns_actionPerformed(e);
1741       }
1742     });
1743     JMenuItem hideAllSelection = new JMenuItem(
1744             MessageManager.getString("label.selected_region"));
1745     hideAllSelection.addActionListener(new ActionListener()
1746     {
1747       @Override
1748       public void actionPerformed(ActionEvent e)
1749       {
1750         hideAllSelection_actionPerformed(e);
1751       }
1752     });
1753     // TODO: should be hidden if no selection exists.
1754     JMenuItem hideAllButSelection = new JMenuItem(
1755             MessageManager.getString("label.all_but_selected_region"));
1756     hideAllButSelection.addActionListener(new ActionListener()
1757     {
1758       @Override
1759       public void actionPerformed(ActionEvent e)
1760       {
1761         hideAllButSelection_actionPerformed(e);
1762       }
1763     });
1764     JMenuItem showAllhidden = new JMenuItem(
1765             MessageManager.getString("label.all_sequences_columns"));
1766     showAllhidden.setToolTipText(MessageManager
1767             .getString("label.toggles_visibility_hidden_selected_regions"));
1768     showAllhidden.addActionListener(new ActionListener()
1769     {
1770       @Override
1771       public void actionPerformed(ActionEvent e)
1772       {
1773         showAllhidden_actionPerformed(e);
1774       }
1775     });
1776     hiddenMarkers.setText(MessageManager
1777             .getString("action.show_hidden_markers"));
1778     hiddenMarkers.addActionListener(new ActionListener()
1779     {
1780       @Override
1781       public void actionPerformed(ActionEvent e)
1782       {
1783         hiddenMarkers_actionPerformed(e);
1784       }
1785     });
1786
1787     JMenuItem invertColSel = new JMenuItem(
1788             MessageManager.getString("action.invert_column_selection"));
1789     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_I, Toolkit
1790             .getDefaultToolkit().getMenuShortcutKeyMask()
1791             | KeyEvent.ALT_MASK, false);
1792     al = new ActionListener()
1793     {
1794       @Override
1795       public void actionPerformed(ActionEvent e)
1796       {
1797         invertColSel_actionPerformed(e);
1798       }
1799     };
1800     addMenuActionAndAccelerator(keyStroke, invertColSel, al);
1801
1802     showComplementMenuItem.setVisible(false);
1803     showComplementMenuItem.addActionListener(new ActionListener()
1804     {
1805       @Override
1806       public void actionPerformed(ActionEvent e)
1807       {
1808         showComplement_actionPerformed(showComplementMenuItem.getState());
1809       }
1810     });
1811
1812     tabbedPane.addChangeListener(new javax.swing.event.ChangeListener()
1813     {
1814       @Override
1815       public void stateChanged(ChangeEvent evt)
1816       {
1817         JTabbedPane pane = (JTabbedPane) evt.getSource();
1818         int sel = pane.getSelectedIndex();
1819         tabSelectionChanged(sel);
1820       }
1821     });
1822     tabbedPane.addMouseListener(new MouseAdapter()
1823     {
1824       @Override
1825       public void mousePressed(MouseEvent e)
1826       {
1827         if (e.isPopupTrigger()) // Mac
1828         {
1829           tabbedPane_mousePressed(e);
1830         }
1831       }
1832
1833       @Override
1834       public void mouseReleased(MouseEvent e)
1835       {
1836         if (e.isPopupTrigger()) // Windows
1837         {
1838           tabbedPane_mousePressed(e);
1839         }
1840       }
1841     });
1842     tabbedPane.addFocusListener(new FocusAdapter()
1843     {
1844       @Override
1845       public void focusGained(FocusEvent e)
1846       {
1847         tabbedPane_focusGained(e);
1848       }
1849     });
1850
1851     JMenuItem save = new JMenuItem(MessageManager.getString("action.save"));
1852     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_S, Toolkit
1853             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
1854     al = new ActionListener()
1855     {
1856       @Override
1857       public void actionPerformed(ActionEvent e)
1858       {
1859         save_actionPerformed(e);
1860       }
1861     };
1862     addMenuActionAndAccelerator(keyStroke, save, al);
1863
1864     reload.setEnabled(false);
1865     reload.setText(MessageManager.getString("action.reload"));
1866     reload.addActionListener(new ActionListener()
1867     {
1868       @Override
1869       public void actionPerformed(ActionEvent e)
1870       {
1871         reload_actionPerformed(e);
1872       }
1873     });
1874
1875     JMenuItem newView = new JMenuItem(
1876             MessageManager.getString("action.new_view"));
1877     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_T, Toolkit
1878             .getDefaultToolkit().getMenuShortcutKeyMask(), false);
1879     al = new ActionListener()
1880     {
1881       @Override
1882       public void actionPerformed(ActionEvent e)
1883       {
1884         newView_actionPerformed(e);
1885       }
1886     };
1887     addMenuActionAndAccelerator(keyStroke, newView, al);
1888
1889     tabbedPane.setToolTipText("<html><i>"
1890             + MessageManager.getString("label.rename_tab_eXpand_reGroup")
1891             + "</i></html>");
1892
1893     formatMenu.setText(MessageManager.getString("action.format"));
1894     JMenu selectMenu = new JMenu(MessageManager.getString("action.select"));
1895     idRightAlign.setText(MessageManager
1896             .getString("label.right_align_sequence_id"));
1897     idRightAlign.addActionListener(new ActionListener()
1898     {
1899       @Override
1900       public void actionPerformed(ActionEvent e)
1901       {
1902         idRightAlign_actionPerformed(e);
1903       }
1904     });
1905
1906     gatherViews.setEnabled(false);
1907     gatherViews.setText(MessageManager.getString("action.gather_views"));
1908     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_G, 0, false);
1909     al = new ActionListener()
1910     {
1911       @Override
1912       public void actionPerformed(ActionEvent e)
1913       {
1914         gatherViews_actionPerformed(e);
1915       }
1916     };
1917     addMenuActionAndAccelerator(keyStroke, gatherViews, al);
1918
1919     expandViews.setEnabled(false);
1920     expandViews.setText(MessageManager.getString("action.expand_views"));
1921     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_X, 0, false);
1922     al = new ActionListener()
1923     {
1924       @Override
1925       public void actionPerformed(ActionEvent e)
1926       {
1927         expandViews_actionPerformed(e);
1928       }
1929     };
1930     addMenuActionAndAccelerator(keyStroke, expandViews, al);
1931
1932     JMenuItem pageSetup = new JMenuItem(
1933             MessageManager.getString("action.page_setup"));
1934     pageSetup.addActionListener(new ActionListener()
1935     {
1936       @Override
1937       public void actionPerformed(ActionEvent e)
1938       {
1939         pageSetup_actionPerformed(e);
1940       }
1941     });
1942     JMenuItem alignmentProperties = new JMenuItem(
1943             MessageManager.getString("label.alignment_props"));
1944     alignmentProperties.addActionListener(new ActionListener()
1945     {
1946       @Override
1947       public void actionPerformed(ActionEvent actionEvent)
1948       {
1949         alignmentProperties();
1950       }
1951     });
1952     JMenuItem selectHighlighted = new JMenuItem(
1953             MessageManager.getString("action.select_highlighted_columns"));
1954     selectHighlighted.setToolTipText(MessageManager
1955             .getString("tooltip.select_highlighted_columns"));
1956     al = new ActionListener()
1957     {
1958       @Override
1959       public void actionPerformed(ActionEvent actionEvent)
1960       {
1961         selectHighlightedColumns_actionPerformed(actionEvent);
1962       }
1963     };
1964     selectHighlighted.addActionListener(al);
1965     JMenu tooltipSettingsMenu = new JMenu(
1966             MessageManager.getString("label.sequence_id_tooltip"));
1967     JMenu autoAnnMenu = new JMenu(
1968             MessageManager.getString("label.autocalculated_annotation"));
1969
1970     JMenu exportImageMenu = new JMenu(
1971             MessageManager.getString("label.export_image"));
1972     JMenu fileMenu = new JMenu(MessageManager.getString("action.file"));
1973     alignFrameMenuBar.add(fileMenu);
1974     alignFrameMenuBar.add(editMenu);
1975     alignFrameMenuBar.add(selectMenu);
1976     alignFrameMenuBar.add(viewMenu);
1977     alignFrameMenuBar.add(annotationsMenu);
1978     alignFrameMenuBar.add(formatMenu);
1979     alignFrameMenuBar.add(colourMenu);
1980     alignFrameMenuBar.add(calculateMenu);
1981     alignFrameMenuBar.add(webService);
1982
1983     fileMenu.add(fetchSequence);
1984     fileMenu.add(addSequenceMenu);
1985     fileMenu.add(reload);
1986     fileMenu.addSeparator();
1987     fileMenu.add(vamsasStore);
1988     fileMenu.add(save);
1989     fileMenu.add(saveAs);
1990     fileMenu.add(outputTextboxMenu);
1991     fileMenu.add(pageSetup);
1992     fileMenu.add(printMenuItem);
1993     fileMenu.addSeparator();
1994     fileMenu.add(exportImageMenu);
1995     fileMenu.add(exportFeatures);
1996     fileMenu.add(exportAnnotations);
1997     fileMenu.add(loadTreeMenuItem);
1998     fileMenu.add(associatedData);
1999     fileMenu.addSeparator();
2000     fileMenu.add(closeMenuItem);
2001
2002     pasteMenu.add(pasteNew);
2003     pasteMenu.add(pasteThis);
2004     editMenu.add(undoMenuItem);
2005     editMenu.add(redoMenuItem);
2006     editMenu.add(cut);
2007     editMenu.add(copy);
2008     editMenu.add(pasteMenu);
2009     editMenu.add(delete);
2010     editMenu.addSeparator();
2011     editMenu.add(remove2LeftMenuItem);
2012     editMenu.add(remove2RightMenuItem);
2013     editMenu.add(removeGappedColumnMenuItem);
2014     editMenu.add(removeAllGapsMenuItem);
2015     editMenu.add(removeRedundancyMenuItem);
2016     editMenu.addSeparator();
2017     // dont add these yet in the CVS build - they cannot be undone!
2018     // Excluded from Jalview 2.5 release - undo needs to be implemented.
2019     // editMenu.add(justifyLeftMenuItem);
2020     // editMenu.add(justifyRightMenuItem);
2021     // editMenu.addSeparator();
2022     editMenu.add(padGapsMenuitem);
2023
2024     showMenu.add(showAllColumns);
2025     showMenu.add(showAllSeqs);
2026     showMenu.add(showAllhidden);
2027     hideMenu.add(hideSelColumns);
2028     hideMenu.add(hideSelSequences);
2029     hideMenu.add(hideAllSelection);
2030     hideMenu.add(hideAllButSelection);
2031     viewMenu.add(newView);
2032     viewMenu.add(expandViews);
2033     viewMenu.add(gatherViews);
2034     viewMenu.addSeparator();
2035     viewMenu.add(showMenu);
2036     viewMenu.add(hideMenu);
2037     viewMenu.add(showComplementMenuItem);
2038     viewMenu.addSeparator();
2039     viewMenu.add(followHighlightMenuItem);
2040     viewMenu.addSeparator();
2041     viewMenu.add(showSeqFeatures);
2042     // viewMenu.add(showSeqFeaturesHeight);
2043     viewMenu.add(openFeatureSettings);
2044     tooltipSettingsMenu.add(showDbRefsMenuitem);
2045     tooltipSettingsMenu.add(showNpFeatsMenuitem);
2046     viewMenu.add(tooltipSettingsMenu);
2047     viewMenu.addSeparator();
2048     viewMenu.add(alignmentProperties);
2049     viewMenu.addSeparator();
2050     viewMenu.add(overviewMenuItem);
2051
2052     annotationsMenu.add(annotationPanelMenuItem);
2053     annotationsMenu.addSeparator();
2054     annotationsMenu.add(showAllAlAnnotations);
2055     annotationsMenu.add(hideAllAlAnnotations);
2056     annotationsMenu.addSeparator();
2057     annotationsMenu.add(showAllSeqAnnotations);
2058     annotationsMenu.add(hideAllSeqAnnotations);
2059     annotationsMenu.add(sortAnnBySequence);
2060     annotationsMenu.add(sortAnnByLabel);
2061     annotationsMenu.addSeparator();
2062     autoAnnMenu.add(showAutoFirst);
2063     autoAnnMenu.add(showAutoLast);
2064     autoAnnMenu.addSeparator();
2065     autoAnnMenu.add(applyAutoAnnotationSettings);
2066     autoAnnMenu.add(showConsensusHistogram);
2067     autoAnnMenu.add(showSequenceLogo);
2068     autoAnnMenu.add(normaliseSequenceLogo);
2069     autoAnnMenu.addSeparator();
2070     autoAnnMenu.add(showGroupConservation);
2071     autoAnnMenu.add(showGroupConsensus);
2072     annotationsMenu.add(autoAnnMenu);
2073
2074
2075     sort.add(sortIDMenuItem);
2076     sort.add(sortLengthMenuItem);
2077     sort.add(sortGroupMenuItem);
2078     sort.add(sortPairwiseMenuItem);
2079     sort.add(sortByTreeMenu);
2080     calculateMenu.add(sort);
2081     calculateMenu.add(calculateTree);
2082     calculateMenu.addSeparator();
2083     calculateMenu.add(pairwiseAlignmentMenuItem);
2084     calculateMenu.add(PCAMenuItem);
2085     calculateMenu.addSeparator();
2086     calculateMenu.add(showTranslation);
2087     calculateMenu.add(showReverse);
2088     calculateMenu.add(showReverseComplement);
2089     calculateMenu.add(showProducts);
2090     calculateMenu.add(autoCalculate);
2091     calculateMenu.add(sortByTree);
2092     calculateMenu.addSeparator();
2093     calculateMenu.add(expandAlignment);
2094     calculateMenu.add(extractScores);
2095     calculateMenu.addSeparator();
2096     calculateMenu.add(runGroovy);
2097
2098     webServiceNoServices = new JMenuItem(
2099             MessageManager.getString("label.no_services"));
2100     webService.add(webServiceNoServices);
2101     exportImageMenu.add(htmlMenuItem);
2102     exportImageMenu.add(epsFile);
2103     exportImageMenu.add(createPNG);
2104     exportImageMenu.add(createBioJS);
2105     exportImageMenu.add(createSVG);
2106     addSequenceMenu.add(addFromFile);
2107     addSequenceMenu.add(addFromText);
2108     addSequenceMenu.add(addFromURL);
2109     this.getContentPane().add(statusPanel, java.awt.BorderLayout.SOUTH);
2110     statusPanel.add(statusBar, null);
2111     this.getContentPane().add(tabbedPane, java.awt.BorderLayout.CENTER);
2112
2113     formatMenu.add(font);
2114     formatMenu.addSeparator();
2115     formatMenu.add(wrapMenuItem);
2116     formatMenu.add(scaleAbove);
2117     formatMenu.add(scaleLeft);
2118     formatMenu.add(scaleRight);
2119     formatMenu.add(seqLimits);
2120     formatMenu.add(idRightAlign);
2121     formatMenu.add(hiddenMarkers);
2122     formatMenu.add(viewBoxesMenuItem);
2123     formatMenu.add(viewTextMenuItem);
2124     formatMenu.add(colourTextMenuItem);
2125     formatMenu.add(renderGapsMenuItem);
2126     formatMenu.add(centreColumnLabelsMenuItem);
2127     formatMenu.add(showNonconservedMenuItem);
2128     selectMenu.add(findMenuItem);
2129     selectMenu.addSeparator();
2130     selectMenu.add(selectAllSequenceMenuItem);
2131     selectMenu.add(deselectAllSequenceMenuItem);
2132     selectMenu.add(invertSequenceMenuItem);
2133     selectMenu.add(invertColSel);
2134     selectMenu.add(createGroup);
2135     selectMenu.add(unGroup);
2136     selectMenu.add(grpsFromSelection);
2137     selectMenu.add(deleteGroups);
2138     selectMenu.add(annotationColumn);
2139     selectMenu.add(selectHighlighted);
2140     // TODO - determine if the listenToViewSelections button is needed : see bug
2141     // JAL-574
2142     // selectMenu.addSeparator();
2143     // selectMenu.add(listenToViewSelections);
2144   }
2145
2146   /**
2147    * Rebuilds the Colour menu, including any user-defined colours which have
2148    * been loaded either on startup or during the session
2149    */
2150   public void buildColourMenu()
2151   {
2152     colourMenu.removeAll();
2153     colours = new ButtonGroup();
2154
2155     colourMenu.add(applyToAllGroups);
2156     colourMenu.add(textColour);
2157     colourMenu.addSeparator();
2158     colourMenu.add(noColourmenuItem);
2159     colourMenu.add(clustalColour);
2160     colourMenu.add(BLOSUM62Colour);
2161     colourMenu.add(PIDColour);
2162     colourMenu.add(zappoColour);
2163     colourMenu.add(taylorColour);
2164     colourMenu.add(hydrophobicityColour);
2165     colourMenu.add(helixColour);
2166     colourMenu.add(strandColour);
2167     colourMenu.add(turnColour);
2168     colourMenu.add(buriedColour);
2169     colourMenu.add(nucleotideColour);
2170     colourMenu.add(purinePyrimidineColour);
2171     // colourMenu.add(RNAInteractionColour);
2172     // colourMenu.add(covariationColour);
2173     colourMenu.add(tcoffeeColour);
2174
2175     /*
2176      * add any user-defined colours
2177      */
2178     Map<String, UserColourScheme> userColourSchemes = UserDefinedColours
2179             .getUserColourSchemes();
2180     if (userColourSchemes != null)
2181     {
2182       for (String userColour : userColourSchemes.keySet())
2183       {
2184         final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(
2185                 userColour);
2186         radioItem.setName(USER_DEFINED_COLOUR_SCHEME);
2187         radioItem.addMouseListener(new MouseAdapter()
2188         {
2189           @Override
2190           public void mousePressed(MouseEvent evt)
2191           {
2192             if (evt.isPopupTrigger()) // Mac
2193             {
2194               offerRemoval();
2195             }
2196           }
2197
2198           @Override
2199           public void mouseReleased(MouseEvent evt)
2200           {
2201             if (evt.isPopupTrigger()) // Windows
2202             {
2203               offerRemoval();
2204             }
2205           }
2206
2207           void offerRemoval()
2208           {
2209             radioItem.removeActionListener(radioItem.getActionListeners()[0]);
2210
2211             int option = JvOptionPane.showInternalConfirmDialog(
2212                     Desktop.desktop, MessageManager
2213                             .getString("label.remove_from_default_list"),
2214                     MessageManager
2215                             .getString("label.remove_user_defined_colour"),
2216                     JvOptionPane.YES_NO_OPTION);
2217             if (option == JvOptionPane.YES_OPTION)
2218             {
2219               UserDefinedColours.removeColourFromDefaults(radioItem
2220                       .getText());
2221               colourMenu.remove(radioItem);
2222             }
2223             else
2224             {
2225               radioItem.addActionListener(new ActionListener()
2226               {
2227                 @Override
2228                 public void actionPerformed(ActionEvent evt)
2229                 {
2230                   userDefinedColour_actionPerformed(evt);
2231                 }
2232               });
2233             }
2234           }
2235         });
2236         radioItem.addActionListener(new ActionListener()
2237         {
2238           @Override
2239           public void actionPerformed(ActionEvent evt)
2240           {
2241             userDefinedColour_actionPerformed(evt);
2242           }
2243         });
2244         colourMenu.add(radioItem);
2245         colours.add(radioItem);
2246       }
2247     }
2248
2249     colourMenu.add(userDefinedColour);
2250     colourMenu.addSeparator();
2251     colourMenu.add(conservationMenuItem);
2252     colourMenu.add(modifyConservation);
2253     colourMenu.add(abovePIDThreshold);
2254     colourMenu.add(modifyPID);
2255     colourMenu.add(annotationColour);
2256     colourMenu.add(rnahelicesColour);
2257
2258     /*
2259      * add colours to a ButtonGroup to make their 
2260      * selection mutually exclusive
2261      */
2262     colours.add(noColourmenuItem);
2263     colours.add(clustalColour);
2264     colours.add(zappoColour);
2265     colours.add(taylorColour);
2266     colours.add(hydrophobicityColour);
2267     colours.add(helixColour);
2268     colours.add(strandColour);
2269     colours.add(turnColour);
2270     colours.add(buriedColour);
2271     colours.add(userDefinedColour);
2272     colours.add(PIDColour);
2273     colours.add(BLOSUM62Colour);
2274     colours.add(nucleotideColour);
2275     colours.add(purinePyrimidineColour);
2276     // colours.add(covariationColour);
2277     colours.add(tcoffeeColour);
2278     colours.add(RNAInteractionColour);
2279     setColourSelected(Cache.getDefault(Preferences.DEFAULT_COLOUR, "None"));
2280
2281   }
2282
2283   /**
2284    * Constructs the entries on the Colour menu (but does not add them to the
2285    * menu)
2286    */
2287   protected void initColourMenu()
2288   {
2289     applyToAllGroups = new JCheckBoxMenuItem(
2290             MessageManager.getString("label.apply_colour_to_all_groups"));
2291     applyToAllGroups.addActionListener(new ActionListener()
2292     {
2293       @Override
2294       public void actionPerformed(ActionEvent e)
2295       {
2296         applyToAllGroups_actionPerformed();
2297       }
2298     });
2299
2300     textColour = new JRadioButtonMenuItem(
2301             MessageManager.getString("action.set_text_colour"));
2302     textColour.addActionListener(new ActionListener()
2303     {
2304       @Override
2305       public void actionPerformed(ActionEvent e)
2306       {
2307         textColour_actionPerformed();
2308       }
2309     });
2310     clustalColour = new JRadioButtonMenuItem(
2311             MessageManager.getString("label.clustalx"));
2312     clustalColour.addActionListener(new ActionListener()
2313     {
2314       @Override
2315       public void actionPerformed(ActionEvent e)
2316       {
2317         clustalColour_actionPerformed();
2318       }
2319     });
2320     zappoColour = new JRadioButtonMenuItem(
2321             MessageManager.getString("label.zappo"));
2322     zappoColour.addActionListener(new ActionListener()
2323     {
2324       @Override
2325       public void actionPerformed(ActionEvent e)
2326       {
2327         zappoColour_actionPerformed();
2328       }
2329     });
2330     taylorColour = new JRadioButtonMenuItem(
2331             MessageManager.getString("label.taylor"));
2332     taylorColour.addActionListener(new ActionListener()
2333     {
2334       @Override
2335       public void actionPerformed(ActionEvent e)
2336       {
2337         taylorColour_actionPerformed();
2338       }
2339     });
2340     hydrophobicityColour = new JRadioButtonMenuItem(
2341             MessageManager
2342             .getString("label.hydrophobicity"));
2343     hydrophobicityColour.addActionListener(new ActionListener()
2344     {
2345       @Override
2346       public void actionPerformed(ActionEvent e)
2347       {
2348         hydrophobicityColour_actionPerformed();
2349       }
2350     });
2351     helixColour = new JRadioButtonMenuItem(
2352             MessageManager.getString("label.helix_propensity"));
2353     helixColour.addActionListener(new ActionListener()
2354     {
2355       @Override
2356       public void actionPerformed(ActionEvent e)
2357       {
2358         helixColour_actionPerformed();
2359       }
2360     });
2361     strandColour = new JRadioButtonMenuItem(
2362             MessageManager
2363             .getString("label.strand_propensity"));
2364     strandColour.addActionListener(new ActionListener()
2365     {
2366       @Override
2367       public void actionPerformed(ActionEvent e)
2368       {
2369         strandColour_actionPerformed();
2370       }
2371     });
2372     turnColour = new JRadioButtonMenuItem(
2373             MessageManager.getString("label.turn_propensity"));
2374     turnColour.addActionListener(new ActionListener()
2375     {
2376       @Override
2377       public void actionPerformed(ActionEvent e)
2378       {
2379         turnColour_actionPerformed();
2380       }
2381     });
2382     buriedColour = new JRadioButtonMenuItem(
2383             MessageManager.getString("label.buried_index"));
2384     buriedColour.addActionListener(new ActionListener()
2385     {
2386       @Override
2387       public void actionPerformed(ActionEvent e)
2388       {
2389         buriedColour_actionPerformed();
2390       }
2391     });
2392     userDefinedColour = new JRadioButtonMenuItem(
2393             MessageManager
2394             .getString("action.user_defined"));
2395     userDefinedColour.addActionListener(new ActionListener()
2396     {
2397       @Override
2398       public void actionPerformed(ActionEvent e)
2399       {
2400         userDefinedColour_actionPerformed(e);
2401       }
2402     });
2403     PIDColour = new JRadioButtonMenuItem(
2404             MessageManager.getString("label.percentage_identity"));
2405     PIDColour.addActionListener(new ActionListener()
2406     {
2407       @Override
2408       public void actionPerformed(ActionEvent e)
2409       {
2410         PIDColour_actionPerformed();
2411       }
2412     });
2413     BLOSUM62Colour = new JRadioButtonMenuItem(
2414             MessageManager.getString("label.blosum62_score"));
2415     BLOSUM62Colour.addActionListener(new ActionListener()
2416     {
2417       @Override
2418       public void actionPerformed(ActionEvent e)
2419       {
2420         BLOSUM62Colour_actionPerformed();
2421       }
2422     });
2423     nucleotideColour = new JRadioButtonMenuItem(
2424             MessageManager.getString("label.nucleotide"));
2425     nucleotideColour.addActionListener(new ActionListener()
2426     {
2427       @Override
2428       public void actionPerformed(ActionEvent e)
2429       {
2430         nucleotideColour_actionPerformed();
2431       }
2432     });
2433     purinePyrimidineColour = new JRadioButtonMenuItem(
2434             MessageManager.getString("label.purine_pyrimidine"));
2435     purinePyrimidineColour.addActionListener(new ActionListener()
2436     {
2437       @Override
2438       public void actionPerformed(ActionEvent e)
2439       {
2440         purinePyrimidineColour_actionPerformed();
2441       }
2442     });
2443
2444     tcoffeeColour = new JRadioButtonMenuItem(
2445             MessageManager.getString("label.tcoffee_scores"));
2446     tcoffeeColour.setEnabled(false);
2447     tcoffeeColour.addActionListener(new ActionListener()
2448     {
2449
2450       @Override
2451       public void actionPerformed(ActionEvent e)
2452       {
2453         tcoffeeColorScheme_actionPerformed();
2454       }
2455     });
2456
2457     RNAInteractionColour = new JRadioButtonMenuItem("RNA Interaction type");
2458     RNAInteractionColour.addActionListener(new ActionListener()
2459     {
2460       @Override
2461       public void actionPerformed(ActionEvent e)
2462       {
2463         RNAInteractionColour_actionPerformed();
2464       }
2465     });
2466     /*
2467      * covariationColour = new JRadioButtonMenuItem("Covariation");
2468      * covariationColour.addActionListener(new ActionListener() { public void
2469      * actionPerformed(ActionEvent e) { covariationColour_actionPerformed(); }
2470      * });
2471      */
2472
2473     conservationMenuItem = new JCheckBoxMenuItem(
2474             MessageManager.getString("action.by_conservation"));
2475     conservationMenuItem.addActionListener(new ActionListener()
2476     {
2477       @Override
2478       public void actionPerformed(ActionEvent e)
2479       {
2480         conservationMenuItem_actionPerformed();
2481       }
2482     });
2483     noColourmenuItem = new JRadioButtonMenuItem(
2484             MessageManager.getString("label.none"));
2485     noColourmenuItem.addActionListener(new ActionListener()
2486     {
2487       @Override
2488       public void actionPerformed(ActionEvent e)
2489       {
2490         noColourmenuItem_actionPerformed();
2491       }
2492     });
2493
2494     abovePIDThreshold = new JCheckBoxMenuItem(
2495             MessageManager.getString("label.above_identity_threshold"));
2496     abovePIDThreshold.addActionListener(new ActionListener()
2497     {
2498       @Override
2499       public void actionPerformed(ActionEvent e)
2500       {
2501         abovePIDThreshold_actionPerformed();
2502       }
2503     });
2504     modifyPID = new JMenuItem(
2505             MessageManager.getString("label.modify_identity_threshold"));
2506     modifyPID.addActionListener(new ActionListener()
2507     {
2508       @Override
2509       public void actionPerformed(ActionEvent e)
2510       {
2511         modifyPID_actionPerformed();
2512       }
2513     });
2514     modifyConservation = new JMenuItem(
2515             MessageManager
2516             .getString("label.modify_conservation_threshold"));
2517     modifyConservation.addActionListener(new ActionListener()
2518     {
2519       @Override
2520       public void actionPerformed(ActionEvent e)
2521       {
2522         modifyConservation_actionPerformed();
2523       }
2524     });
2525
2526     annotationColour = new JMenuItem(
2527             MessageManager.getString("action.by_annotation"));
2528     annotationColour.addActionListener(new ActionListener()
2529     {
2530       @Override
2531       public void actionPerformed(ActionEvent e)
2532       {
2533         annotationColour_actionPerformed();
2534       }
2535     });
2536
2537     rnahelicesColour = new JMenuItem(
2538             MessageManager.getString("action.by_rna_helixes"));
2539     rnahelicesColour.addActionListener(new ActionListener()
2540     {
2541       @Override
2542       public void actionPerformed(ActionEvent e)
2543       {
2544         rnahelicesColour_actionPerformed();
2545       }
2546     });
2547   }
2548
2549   protected void selectHighlightedColumns_actionPerformed(
2550           ActionEvent actionEvent)
2551   {
2552     // TODO Auto-generated method stub
2553
2554   }
2555
2556   /**
2557    * Generate the reverse sequence (or reverse complement if the flag is true)
2558    * and add it to the alignment
2559    * 
2560    * @param complement
2561    */
2562   protected void showReverse_actionPerformed(boolean complement)
2563   {
2564   }
2565
2566   /**
2567    * Try to run script in a Groovy console, having first ensured that this
2568    * alignframe is set as currentAlignFrame in Desktop
2569    */
2570   protected void runGroovy_actionPerformed()
2571   {
2572
2573   }
2574
2575   /**
2576    * Adds the given action listener and key accelerator to the given menu item.
2577    * Also saves in a lookup table to support lookup of action by key stroke.
2578    * 
2579    * @param keyStroke
2580    * @param menuItem
2581    * @param actionListener
2582    */
2583   protected void addMenuActionAndAccelerator(KeyStroke keyStroke,
2584           JMenuItem menuItem, ActionListener actionListener)
2585   {
2586     menuItem.setAccelerator(keyStroke);
2587     accelerators.put(keyStroke, menuItem);
2588     menuItem.addActionListener(actionListener);
2589   }
2590
2591   /**
2592    * Action on clicking sort annotations by type.
2593    * 
2594    * @param sortOrder
2595    */
2596   protected void sortAnnotations_actionPerformed()
2597   {
2598   }
2599
2600   /**
2601    * Action on clicking Show all annotations.
2602    * 
2603    * @param forSequences
2604    *          update sequence-related annotations
2605    * @param forAlignment
2606    *          update non-sequence-related annotations
2607    */
2608   protected void showAllAnnotations_actionPerformed(boolean forSequences,
2609           boolean forAlignment)
2610   {
2611     setAnnotationsVisibility(true, forSequences, forAlignment);
2612   }
2613
2614   /**
2615    * Action on clicking Hide all annotations.
2616    * 
2617    * @param forSequences
2618    *          update sequence-related annotations
2619    * @param forAlignment
2620    *          update non-sequence-related annotations
2621    */
2622   protected void hideAllAnnotations_actionPerformed(boolean forSequences,
2623           boolean forAlignment)
2624   {
2625     setAnnotationsVisibility(false, forSequences, forAlignment);
2626   }
2627
2628   /**
2629    * Set the visibility of annotations to true or false. Can act on
2630    * sequence-related annotations, or alignment-related, or both.
2631    * 
2632    * @param visible
2633    * @param forSequences
2634    *          update sequence-related annotations
2635    * @param forAlignment
2636    *          update non-sequence-related annotations
2637    */
2638   protected void setAnnotationsVisibility(boolean visible,
2639           boolean forSequences, boolean forAlignment)
2640   {
2641
2642   }
2643
2644   protected void normaliseSequenceLogo_actionPerformed(ActionEvent e)
2645   {
2646     // TODO Auto-generated method stub
2647
2648   }
2649
2650   protected void listenToViewSelections_actionPerformed(ActionEvent e)
2651   {
2652     // TODO Auto-generated method stub
2653
2654   }
2655
2656   protected void showAllhidden_actionPerformed(ActionEvent e)
2657   {
2658     // TODO Auto-generated method stub
2659
2660   }
2661
2662   protected void hideAllButSelection_actionPerformed(ActionEvent e)
2663   {
2664     // TODO Auto-generated method stub
2665
2666   }
2667
2668   protected void hideAllSelection_actionPerformed(ActionEvent e)
2669   {
2670     // TODO Auto-generated method stub
2671
2672   }
2673
2674   protected void applyAutoAnnotationSettings_actionPerformed(ActionEvent e)
2675   {
2676     // TODO Auto-generated method stub
2677
2678   }
2679
2680   protected void showConsensusHistogram_actionPerformed(ActionEvent e)
2681   {
2682     // TODO Auto-generated method stub
2683
2684   }
2685
2686   protected void showSequenceLogo_actionPerformed(ActionEvent e)
2687   {
2688     // TODO Auto-generated method stub
2689
2690   }
2691
2692   protected void makeGrpsFromSelection_actionPerformed(ActionEvent e)
2693   {
2694     // TODO Auto-generated method stub
2695
2696   }
2697
2698   protected void showGroupConsensus_actionPerformed(ActionEvent e)
2699   {
2700     // TODO Auto-generated method stub
2701
2702   }
2703
2704   protected void showGroupConservation_actionPerformed(ActionEvent e)
2705   {
2706     // TODO Auto-generated method stub
2707
2708   }
2709
2710   protected void showUnconservedMenuItem_actionPerformed(ActionEvent e)
2711   {
2712     // TODO Auto-generated method stub
2713
2714   }
2715
2716   protected void justifyRightMenuItem_actionPerformed(ActionEvent e)
2717   {
2718     // TODO Auto-generated method stub
2719
2720   }
2721
2722   protected void justifyLeftMenuItem_actionPerformed(ActionEvent e)
2723   {
2724     // TODO Auto-generated method stub
2725
2726   }
2727
2728   protected void followHighlight_actionPerformed()
2729   {
2730     // TODO Auto-generated method stub
2731
2732   }
2733
2734   protected void showNpFeats_actionPerformed(ActionEvent e)
2735   {
2736     // TODO Auto-generated method stub
2737
2738   }
2739
2740   protected void showDbRefs_actionPerformed(ActionEvent e)
2741   {
2742     // TODO Auto-generated method stub
2743
2744   }
2745
2746   protected void centreColumnLabels_actionPerformed(ActionEvent e)
2747   {
2748   }
2749
2750   protected void buildSortByAnnotationScoresMenu()
2751   {
2752   }
2753
2754   protected void extractScores_actionPerformed(ActionEvent e)
2755   {
2756   }
2757
2758   protected void outputText_actionPerformed(ActionEvent e)
2759   {
2760   }
2761
2762   public void addFromFile_actionPerformed(ActionEvent e)
2763   {
2764
2765   }
2766
2767   public void addFromText_actionPerformed(ActionEvent e)
2768   {
2769
2770   }
2771
2772   public void addFromURL_actionPerformed(ActionEvent e)
2773   {
2774
2775   }
2776
2777   public void exportFeatures_actionPerformed(ActionEvent e)
2778   {
2779
2780   }
2781
2782   public void exportAnnotations_actionPerformed(ActionEvent e)
2783   {
2784
2785   }
2786
2787   protected void htmlMenuItem_actionPerformed(ActionEvent e)
2788   {
2789   }
2790
2791   protected void bioJSMenuItem_actionPerformed(ActionEvent e)
2792   {
2793
2794   }
2795
2796   protected void closeMenuItem_actionPerformed(boolean b)
2797   {
2798   }
2799
2800   protected void redoMenuItem_actionPerformed(ActionEvent e)
2801   {
2802   }
2803
2804   protected void undoMenuItem_actionPerformed(ActionEvent e)
2805   {
2806   }
2807
2808   protected void selectAllSequenceMenuItem_actionPerformed(ActionEvent e)
2809   {
2810   }
2811
2812   protected void deselectAllSequenceMenuItem_actionPerformed(ActionEvent e)
2813   {
2814   }
2815
2816   protected void invertSequenceMenuItem_actionPerformed(ActionEvent e)
2817   {
2818   }
2819
2820   protected void remove2LeftMenuItem_actionPerformed(ActionEvent e)
2821   {
2822   }
2823
2824   protected void remove2RightMenuItem_actionPerformed(ActionEvent e)
2825   {
2826   }
2827
2828   protected void removeGappedColumnMenuItem_actionPerformed(ActionEvent e)
2829   {
2830   }
2831
2832   protected void removeAllGapsMenuItem_actionPerformed(ActionEvent e)
2833   {
2834   }
2835
2836   protected void wrapMenuItem_actionPerformed(ActionEvent e)
2837   {
2838   }
2839
2840   protected void viewBoxesMenuItem_actionPerformed(ActionEvent e)
2841   {
2842   }
2843
2844   protected void viewTextMenuItem_actionPerformed(ActionEvent e)
2845   {
2846   }
2847
2848   protected void colourTextMenuItem_actionPerformed(ActionEvent e)
2849   {
2850   }
2851
2852   protected void annotationPanelMenuItem_actionPerformed(ActionEvent e)
2853   {
2854   }
2855
2856   protected void overviewMenuItem_actionPerformed(ActionEvent e)
2857   {
2858   }
2859
2860   protected void sortPairwiseMenuItem_actionPerformed(ActionEvent e)
2861   {
2862   }
2863
2864   protected void sortIDMenuItem_actionPerformed(ActionEvent e)
2865   {
2866   }
2867
2868   protected void sortLengthMenuItem_actionPerformed(ActionEvent e)
2869   {
2870   }
2871
2872   protected void sortGroupMenuItem_actionPerformed(ActionEvent e)
2873   {
2874   }
2875
2876   protected void removeRedundancyMenuItem_actionPerformed(ActionEvent e)
2877   {
2878   }
2879
2880   protected void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)
2881   {
2882   }
2883
2884   protected void PCAMenuItem_actionPerformed(ActionEvent e)
2885   {
2886   }
2887
2888   protected void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)
2889   {
2890   }
2891
2892   protected void neighbourTreeMenuItem_actionPerformed(ActionEvent e)
2893   {
2894   }
2895
2896   protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)
2897   {
2898   }
2899
2900   protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)
2901   {
2902   }
2903
2904   protected void clustalColour_actionPerformed()
2905   {
2906   }
2907
2908   protected void zappoColour_actionPerformed()
2909   {
2910   }
2911
2912   protected void taylorColour_actionPerformed()
2913   {
2914   }
2915
2916   protected void hydrophobicityColour_actionPerformed()
2917   {
2918   }
2919
2920   protected void helixColour_actionPerformed()
2921   {
2922   }
2923
2924   protected void strandColour_actionPerformed()
2925   {
2926   }
2927
2928   protected void turnColour_actionPerformed()
2929   {
2930   }
2931
2932   protected void buriedColour_actionPerformed()
2933   {
2934   }
2935
2936   protected void userDefinedColour_actionPerformed(ActionEvent e)
2937   {
2938   }
2939
2940   protected void PIDColour_actionPerformed()
2941   {
2942   }
2943
2944   protected void BLOSUM62Colour_actionPerformed()
2945   {
2946   }
2947
2948   protected void purinePyrimidineColour_actionPerformed()
2949   {
2950   }
2951
2952   protected void RNAInteractionColour_actionPerformed()
2953   {
2954   }
2955
2956   /*
2957    * protected void covariationColour_actionPerformed() { }
2958    */
2959
2960   protected void noColourmenuItem_actionPerformed()
2961   {
2962   }
2963
2964   protected void conservationMenuItem_actionPerformed()
2965   {
2966   }
2967
2968   protected void printMenuItem_actionPerformed(ActionEvent e)
2969   {
2970   }
2971
2972   protected void renderGapsMenuItem_actionPerformed(ActionEvent e)
2973   {
2974   }
2975
2976   protected void findMenuItem_actionPerformed(ActionEvent e)
2977   {
2978   }
2979
2980   protected void abovePIDThreshold_actionPerformed()
2981   {
2982   }
2983
2984   public void showSeqFeatures_actionPerformed(ActionEvent actionEvent)
2985   {
2986   }
2987
2988   protected void nucleotideColour_actionPerformed()
2989   {
2990   }
2991
2992   protected void deleteGroups_actionPerformed(ActionEvent e)
2993   {
2994   }
2995
2996   protected void createGroup_actionPerformed(ActionEvent e)
2997   {
2998   }
2999
3000   protected void unGroup_actionPerformed(ActionEvent e)
3001   {
3002   }
3003
3004   protected void copy_actionPerformed(ActionEvent e)
3005   {
3006   }
3007
3008   protected void cut_actionPerformed(ActionEvent e)
3009   {
3010   }
3011
3012   protected void delete_actionPerformed(ActionEvent e)
3013   {
3014   }
3015
3016   protected void pasteNew_actionPerformed(ActionEvent e)
3017   {
3018   }
3019
3020   protected void pasteThis_actionPerformed(ActionEvent e)
3021   {
3022   }
3023
3024   protected void applyToAllGroups_actionPerformed()
3025   {
3026   }
3027
3028   public void createPNG(java.io.File f)
3029   {
3030   }
3031
3032   protected void font_actionPerformed(ActionEvent e)
3033   {
3034   }
3035
3036   protected void seqLimit_actionPerformed(ActionEvent e)
3037   {
3038   }
3039
3040   public void seqDBRef_actionPerformed(ActionEvent e)
3041   {
3042
3043   }
3044
3045   public void createEPS(java.io.File f)
3046   {
3047   }
3048
3049   public void createSVG(java.io.File f)
3050   {
3051
3052   }
3053
3054   protected void loadTreeMenuItem_actionPerformed(ActionEvent e)
3055   {
3056
3057   }
3058
3059   /**
3060    * Template method to handle the 'load T-Coffee scores' menu event.
3061    * <p>
3062    * Subclasses override this method to provide a custom action.
3063    * 
3064    * @param event
3065    *          The raised event
3066    */
3067   protected void loadScores_actionPerformed(ActionEvent event)
3068   {
3069
3070   }
3071
3072   /**
3073    * Template method to handle the 'Color T-Coffee scores' menu event.
3074    * <p>
3075    * Subclasses override this method to provide a custom action.
3076    */
3077   protected void tcoffeeColorScheme_actionPerformed()
3078   {
3079
3080   }
3081
3082   protected void jpred_actionPerformed(ActionEvent e)
3083   {
3084   }
3085
3086   protected void scaleAbove_actionPerformed(ActionEvent e)
3087   {
3088   }
3089
3090   protected void scaleLeft_actionPerformed(ActionEvent e)
3091   {
3092   }
3093
3094   protected void scaleRight_actionPerformed(ActionEvent e)
3095   {
3096   }
3097
3098   protected void modifyPID_actionPerformed()
3099   {
3100   }
3101
3102   protected void modifyConservation_actionPerformed()
3103   {
3104   }
3105
3106   protected void saveAs_actionPerformed(ActionEvent e)
3107   {
3108   }
3109
3110   protected void padGapsMenuitem_actionPerformed(ActionEvent e)
3111   {
3112   }
3113
3114   public void vamsasStore_actionPerformed(ActionEvent e)
3115   {
3116
3117   }
3118
3119   public void vamsasLoad_actionPerformed(ActionEvent e)
3120   {
3121
3122   }
3123
3124   public void showTranslation_actionPerformed(ActionEvent e)
3125   {
3126
3127   }
3128
3129   public void featureSettings_actionPerformed(ActionEvent e)
3130   {
3131
3132   }
3133
3134   public void fetchSequence_actionPerformed(ActionEvent e)
3135   {
3136
3137   }
3138
3139   public void smoothFont_actionPerformed(ActionEvent e)
3140   {
3141
3142   }
3143
3144   public void annotationColour_actionPerformed()
3145   {
3146   }
3147
3148   public void annotationColumn_actionPerformed(ActionEvent e)
3149   {
3150   }
3151
3152   public void rnahelicesColour_actionPerformed()
3153   {
3154
3155   }
3156
3157   public void associatedData_actionPerformed(ActionEvent e)
3158   {
3159
3160   }
3161
3162   public void autoCalculate_actionPerformed(ActionEvent e)
3163   {
3164
3165   }
3166
3167   public void sortByTreeOption_actionPerformed(ActionEvent e)
3168   {
3169
3170   }
3171
3172   public void showAllSeqs_actionPerformed(ActionEvent e)
3173   {
3174
3175   }
3176
3177   public void showAllColumns_actionPerformed(ActionEvent e)
3178   {
3179
3180   }
3181
3182   public void hideSelSequences_actionPerformed(ActionEvent e)
3183   {
3184
3185   }
3186
3187   public void hideSelColumns_actionPerformed(ActionEvent e)
3188   {
3189
3190   }
3191
3192   public void hiddenMarkers_actionPerformed(ActionEvent e)
3193   {
3194
3195   }
3196
3197   public void findPdbId_actionPerformed(ActionEvent e)
3198   {
3199
3200   }
3201
3202   public void enterPdbId_actionPerformed(ActionEvent e)
3203   {
3204
3205   }
3206
3207   public void pdbFile_actionPerformed(ActionEvent e)
3208   {
3209
3210   }
3211
3212   public void invertColSel_actionPerformed(ActionEvent e)
3213   {
3214
3215   }
3216
3217   public void tabSelectionChanged(int sel)
3218   {
3219
3220   }
3221
3222   public void tabbedPane_mousePressed(MouseEvent e)
3223   {
3224
3225   }
3226
3227   public void tabbedPane_focusGained(FocusEvent e)
3228   {
3229     requestFocus();
3230   }
3231
3232   public void save_actionPerformed(ActionEvent e)
3233   {
3234
3235   }
3236
3237   public void reload_actionPerformed(ActionEvent e)
3238   {
3239
3240   }
3241
3242   public void newView_actionPerformed(ActionEvent e)
3243   {
3244
3245   }
3246
3247   public void textColour_actionPerformed()
3248   {
3249
3250   }
3251
3252   public void idRightAlign_actionPerformed(ActionEvent e)
3253   {
3254
3255   }
3256
3257   public void expandViews_actionPerformed(ActionEvent e)
3258   {
3259
3260   }
3261
3262   public void gatherViews_actionPerformed(ActionEvent e)
3263   {
3264
3265   }
3266
3267   public void buildTreeMenu()
3268   {
3269
3270   }
3271
3272   public void pageSetup_actionPerformed(ActionEvent e)
3273   {
3274
3275   }
3276
3277   public void alignmentProperties()
3278   {
3279
3280   }
3281
3282   protected void expand_newalign(ActionEvent e)
3283   {
3284     // TODO Auto-generated method stub
3285
3286   }
3287
3288   protected boolean isShowAutoCalculatedAbove()
3289   {
3290     return showAutoCalculatedAbove;
3291   }
3292
3293   protected void setShowAutoCalculatedAbove(boolean showAutoCalculatedAbove)
3294   {
3295     this.showAutoCalculatedAbove = showAutoCalculatedAbove;
3296   }
3297
3298   protected SequenceAnnotationOrder getAnnotationSortOrder()
3299   {
3300     return annotationSortOrder;
3301   }
3302
3303   protected void setAnnotationSortOrder(
3304           SequenceAnnotationOrder annotationSortOrder)
3305   {
3306     this.annotationSortOrder = annotationSortOrder;
3307   }
3308
3309   public Map<KeyStroke, JMenuItem> getAccelerators()
3310   {
3311     return this.accelerators;
3312   }
3313
3314   /**
3315    * Returns the selected index of the tabbed pane, or -1 if none selected
3316    * (including the case where the tabbed pane has not been made visible).
3317    * 
3318    * @return
3319    */
3320   public int getTabIndex()
3321   {
3322     return tabbedPane.getSelectedIndex();
3323   }
3324
3325   public JPanel getStatusPanel()
3326   {
3327     return statusPanel;
3328   }
3329
3330   /**
3331    * Sets a reference to the containing split frame. Also makes the 'toggle
3332    * split view' menu item visible and checked.
3333    * 
3334    * @param sf
3335    */
3336   public void setSplitFrame(SplitContainerI sf)
3337   {
3338     this.splitFrame = sf;
3339     if (sf != null)
3340     {
3341       this.showComplementMenuItem.setVisible(true);
3342       this.showComplementMenuItem.setState(true);
3343     }
3344   }
3345
3346   public SplitContainerI getSplitViewContainer()
3347   {
3348     return this.splitFrame;
3349   }
3350
3351   protected void showComplement_actionPerformed(boolean complement)
3352   {
3353   }
3354 }