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