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