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