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