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