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