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