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