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