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