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