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