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