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