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