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