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