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