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