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