2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
3 * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
19 package jalview.appletgui;
26 import java.awt.event.*;
28 import jalview.analysis.*;
29 import jalview.commands.*;
30 import jalview.datamodel.*;
32 import jalview.schemes.*;
34 public class AlignFrame
35 extends EmbmenuFrame implements ActionListener,
36 ItemListener, KeyListener
38 public AlignmentPanel alignPanel;
39 public AlignViewport viewport;
40 int DEFAULT_WIDTH = 700;
41 int DEFAULT_HEIGHT = 500;
43 String jalviewServletURL;
45 public AlignFrame(AlignmentI al,
46 jalview.bin.JalviewLite applet,
53 jalviewServletURL = applet.getParameter("APPLICATION_URL");
65 viewport = new AlignViewport(al, applet);
66 alignPanel = new AlignmentPanel(this, viewport);
68 viewport.updateConservation(alignPanel);
69 viewport.updateConsensus(alignPanel);
71 annotationPanelMenuItem.setState(viewport.showAnnotation);
73 seqLimits.setState(viewport.showJVSuffix);
77 String param = applet.getParameter("sortBy");
80 if (param.equalsIgnoreCase("Id"))
82 sortIDMenuItem_actionPerformed();
84 else if (param.equalsIgnoreCase("Pairwise Identity"))
86 sortPairwiseMenuItem_actionPerformed();
90 param = applet.getParameter("wrap");
93 if (param.equalsIgnoreCase("true"))
95 wrapMenuItem.setState(true);
96 wrapMenuItem_actionPerformed();
99 param = applet.getParameter("centrecolumnlabels");
102 centreColumnLabelFlag.setState(true);
103 centreColumnLabelFlag_stateChanged();
108 param = applet.getParameter("windowWidth");
111 int width = Integer.parseInt(param);
112 DEFAULT_WIDTH = width;
114 param = applet.getParameter("windowHeight");
117 int height = Integer.parseInt(param);
118 DEFAULT_HEIGHT = height;
126 //Some JVMS send keyevents to Top frame or lowest panel,
127 //Havent worked out why yet. So add to both this frame and seqCanvas for now
128 this.addKeyListener(this);
129 alignPanel.seqPanel.seqCanvas.addKeyListener(this);
130 alignPanel.idPanel.idCanvas.addKeyListener(this);
131 alignPanel.scalePanel.addKeyListener(this);
132 alignPanel.annotationPanel.addKeyListener(this);
133 createAlignFrameWindow(embedded, title);
134 alignPanel.validate();
135 alignPanel.paintAlignment(true);
138 public AlignViewport getAlignViewport()
143 public SeqCanvas getSeqcanvas()
145 return alignPanel.seqPanel.seqCanvas;
151 * @param String DOCUMENT ME!
154 public void parseFeaturesFile(String file, String type)
156 Hashtable featureLinks = new Hashtable();
157 boolean featuresFile = false;
160 featuresFile = new jalview.io.FeaturesFile(file,
161 type).parse(viewport.alignment,
162 alignPanel.seqPanel.seqCanvas.
163 getFeatureRenderer().featureColours,
169 ex.printStackTrace();
174 if (featureLinks.size() > 0)
176 alignPanel.seqPanel.seqCanvas
177 .getFeatureRenderer().featureLinks = featureLinks;
179 viewport.showSequenceFeatures = true;
180 sequenceFeatures.setState(true);
181 alignPanel.paintAlignment(true);
186 public void keyPressed(KeyEvent evt)
188 if (viewport.cursorMode &&
189 ( (evt.getKeyCode() >= KeyEvent.VK_0 &&
190 evt.getKeyCode() <= KeyEvent.VK_9)
192 (evt.getKeyCode() >= KeyEvent.VK_NUMPAD0 &&
193 evt.getKeyCode() <= KeyEvent.VK_NUMPAD9)
195 && Character.isDigit(evt.getKeyChar()))
196 alignPanel.seqPanel.numberPressed(evt.getKeyChar());
199 switch (evt.getKeyCode())
201 case 27: // escape key
202 deselectAllSequenceMenuItem_actionPerformed();
205 if (evt.isControlDown() || evt.isMetaDown())
207 cut_actionPerformed();
211 if (viewport.cursorMode && !evt.isControlDown())
213 alignPanel.seqPanel.setCursorColumn();
215 if (evt.isControlDown() || evt.isMetaDown())
217 copy_actionPerformed();
221 if (evt.isControlDown())
223 paste(evt.isShiftDown());
227 if (evt.isControlDown() || evt.isMetaDown())
229 selectAllSequenceMenuItem_actionPerformed();
232 case KeyEvent.VK_DOWN:
233 if (viewport.cursorMode)
235 alignPanel.seqPanel.moveCursor(0, 1);
239 moveSelectedSequences(false);
244 if (viewport.cursorMode)
246 alignPanel.seqPanel.moveCursor(0, -1);
250 moveSelectedSequences(true);
254 case KeyEvent.VK_LEFT:
255 if (evt.isAltDown() || !viewport.cursorMode)
256 slideSequences(false,
257 alignPanel.seqPanel.getKeyboardNo1());
259 alignPanel.seqPanel.moveCursor( -1, 0);
262 case KeyEvent.VK_RIGHT:
263 if (evt.isAltDown() || !viewport.cursorMode)
265 alignPanel.seqPanel.getKeyboardNo1());
267 alignPanel.seqPanel.moveCursor( 1, 0);
270 case KeyEvent.VK_SPACE:
271 if (viewport.cursorMode)
273 alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown()
280 case KeyEvent.VK_DELETE:
281 case KeyEvent.VK_BACK_SPACE:
282 if (viewport.cursorMode)
284 alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown()
290 cut_actionPerformed();
291 alignPanel.seqPanel.seqCanvas.repaint();
296 if (viewport.cursorMode)
298 alignPanel.seqPanel.setCursorRow();
302 if (viewport.cursorMode)
304 alignPanel.seqPanel.setCursorPosition();
308 case KeyEvent.VK_ENTER:
309 case KeyEvent.VK_COMMA:
310 if (viewport.cursorMode)
312 alignPanel.seqPanel.setCursorRowAndColumn();
317 if (viewport.cursorMode)
319 alignPanel.seqPanel.setSelectionAreaAtCursor(true);
323 if (viewport.cursorMode)
325 alignPanel.seqPanel.setSelectionAreaAtCursor(false);
330 viewport.cursorMode = !viewport.cursorMode;
331 statusBar.setText("Keyboard editing mode is " +
332 (viewport.cursorMode ? "on" : "off"));
333 if (viewport.cursorMode)
335 alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes;
336 alignPanel.seqPanel.seqCanvas.cursorY = viewport.startSeq;
341 if (evt.isControlDown())
343 findMenuItem_actionPerformed();
349 boolean toggleSeqs = !evt.isControlDown();
350 boolean toggleCols = !evt.isShiftDown();
351 boolean hide = false;
352 SequenceGroup sg = viewport.getSelectionGroup();
356 if (sg != null && sg.getSize() != viewport.alignment.getHeight())
359 viewport.hideAllSelectedSeqs();
361 else if (! (toggleCols && viewport.colSel.getSelected().size() > 0))
363 viewport.showAllHiddenSeqs();
369 if (viewport.colSel.getSelected().size() > 0)
371 viewport.hideSelectedColumns();
374 viewport.selectionGroup = sg;
379 viewport.showAllHiddenColumns();
385 case KeyEvent.VK_PAGE_UP:
386 if (viewport.wrapAlignment)
388 alignPanel.scrollUp(true);
392 alignPanel.setScrollValues(viewport.startRes,
394 - viewport.endSeq + viewport.startSeq);
398 case KeyEvent.VK_PAGE_DOWN:
399 if (viewport.wrapAlignment)
401 alignPanel.scrollUp(false);
405 alignPanel.setScrollValues(viewport.startRes,
407 + viewport.endSeq - viewport.startSeq);
412 if (evt.isControlDown())
414 undoMenuItem_actionPerformed();
419 if (evt.isControlDown())
421 redoMenuItem_actionPerformed();
426 if (evt.isControlDown())
433 if (evt.isControlDown())
435 trimAlignment(false);
440 if (evt.isControlDown())
442 if (evt.isShiftDown())
444 this.removeAllGapsMenuItem_actionPerformed();
448 removeGappedColumnMenuItem_actionPerformed();
453 if (evt.isControlDown())
457 viewport.invertColumnSelection();
461 this.invertSequenceMenuItem_actionPerformed();
467 if (evt.isControlDown())
469 this.deleteGroups_actionPerformed();
474 if (evt.isControlDown())
481 alignPanel.paintAlignment(true);
484 public void keyReleased(KeyEvent evt)
487 public void keyTyped(KeyEvent evt)
490 public void itemStateChanged(ItemEvent evt)
492 if (evt.getSource() == colourTextMenuItem)
494 colourTextMenuItem_actionPerformed();
496 else if (evt.getSource() == wrapMenuItem)
498 wrapMenuItem_actionPerformed();
500 else if (evt.getSource() == scaleAbove)
502 viewport.setScaleAboveWrapped(scaleAbove.getState());
504 else if (evt.getSource() == scaleLeft)
506 viewport.setScaleLeftWrapped(scaleLeft.getState());
508 else if (evt.getSource() == scaleRight)
510 viewport.setScaleRightWrapped(scaleRight.getState());
512 else if (evt.getSource() == seqLimits)
514 seqLimits_itemStateChanged();
516 else if (evt.getSource() == viewBoxesMenuItem)
518 viewport.setShowBoxes(viewBoxesMenuItem.getState());
520 else if (evt.getSource() == viewTextMenuItem)
522 viewport.setShowText(viewTextMenuItem.getState());
524 else if (evt.getSource() == renderGapsMenuItem)
526 viewport.setRenderGaps(renderGapsMenuItem.getState());
528 else if (evt.getSource() == annotationPanelMenuItem)
530 viewport.setShowAnnotation(annotationPanelMenuItem.getState());
531 alignPanel.setAnnotationVisible(annotationPanelMenuItem.getState());
533 else if (evt.getSource() == sequenceFeatures)
535 viewport.showSequenceFeatures(sequenceFeatures.getState());
536 alignPanel.seqPanel.seqCanvas.repaint();
538 else if (evt.getSource() == conservationMenuItem)
540 conservationMenuItem_actionPerformed();
542 else if (evt.getSource() == abovePIDThreshold)
544 abovePIDThreshold_actionPerformed();
546 else if (evt.getSource() == applyToAllGroups)
548 viewport.setColourAppliesToAllGroups(applyToAllGroups.getState());
550 else if (evt.getSource() == autoCalculate)
552 viewport.autocalculateConsensus = autoCalculate.getState();
553 } else if (evt.getSource() == this.centreColumnLabelFlag)
555 centreColumnLabelFlag_stateChanged();
558 alignPanel.paintAlignment(true);
561 private void centreColumnLabelFlag_stateChanged()
563 viewport.centreColumnLabels = centreColumnLabelFlag.getState();
564 this.alignPanel.annotationPanel.repaint();
567 public void actionPerformed(ActionEvent evt)
569 Object source = evt.getSource();
571 if (source == inputText)
573 inputText_actionPerformed();
575 else if (source == loadTree)
577 loadTree_actionPerformed();
579 else if (source == loadApplication)
581 launchFullApplication();
583 else if (source == loadAnnotations)
587 else if (source == outputAnnotations)
589 outputAnnotations(true);
591 else if (source == outputFeatures)
593 outputFeatures(true, "Jalview");
595 else if (source == closeMenuItem)
597 closeMenuItem_actionPerformed();
599 else if (source == copy)
601 copy_actionPerformed();
603 else if (source == undoMenuItem)
605 undoMenuItem_actionPerformed();
607 else if (source == redoMenuItem)
609 redoMenuItem_actionPerformed();
611 else if (source == inputText)
613 inputText_actionPerformed();
615 else if (source == closeMenuItem)
617 closeMenuItem_actionPerformed();
619 else if (source == undoMenuItem)
621 undoMenuItem_actionPerformed();
623 else if (source == redoMenuItem)
625 redoMenuItem_actionPerformed();
627 else if (source == copy)
629 copy_actionPerformed();
631 else if (source == pasteNew)
633 pasteNew_actionPerformed();
635 else if (source == pasteThis)
637 pasteThis_actionPerformed();
639 else if (source == cut)
641 cut_actionPerformed();
643 else if (source == delete)
645 delete_actionPerformed();
647 else if (source == deleteGroups)
649 deleteGroups_actionPerformed();
651 else if (source == selectAllSequenceMenuItem)
653 selectAllSequenceMenuItem_actionPerformed();
655 else if (source == deselectAllSequenceMenuItem)
657 deselectAllSequenceMenuItem_actionPerformed();
659 else if (source == invertSequenceMenuItem)
661 invertSequenceMenuItem_actionPerformed();
663 else if (source == invertColSel)
665 viewport.invertColumnSelection();
666 alignPanel.paintAlignment(true);
668 else if (source == remove2LeftMenuItem)
672 else if (source == remove2RightMenuItem)
674 trimAlignment(false);
676 else if (source == removeGappedColumnMenuItem)
678 removeGappedColumnMenuItem_actionPerformed();
680 else if (source == removeAllGapsMenuItem)
682 removeAllGapsMenuItem_actionPerformed();
684 else if (source == findMenuItem)
686 findMenuItem_actionPerformed();
688 else if (source == font)
690 new FontChooser(alignPanel);
692 else if (source == newView)
696 else if (source == showColumns)
698 viewport.showAllHiddenColumns();
699 alignPanel.paintAlignment(true);
701 else if (source == showSeqs)
703 viewport.showAllHiddenSeqs();
705 else if (source == hideColumns)
707 viewport.hideSelectedColumns();
708 alignPanel.paintAlignment(true);
710 else if (source == hideSequences && viewport.getSelectionGroup() != null)
712 viewport.hideAllSelectedSeqs();
714 else if (source == featureSettings)
716 new FeatureSettings(alignPanel);
718 else if(source== alProperties)
720 StringBuffer contents = new StringBuffer();
723 int min=Integer.MAX_VALUE, max=0;
724 for(int i=0; i<viewport.alignment.getHeight(); i++)
726 int size = viewport.alignment.getSequenceAt(i).getEnd()
727 -viewport.alignment.getSequenceAt(i).getStart();
734 avg = avg/(float)viewport.alignment.getHeight();
736 contents.append("\nSequences: "+ viewport.alignment.getHeight());
737 contents.append("\nMinimum Sequence Length: "+min);
738 contents.append("\nMaximum Sequence Length: "+max);
739 contents.append("\nAverage Length: "+(int)avg);
741 if (((Alignment)viewport.alignment).alignmentProperties != null)
743 Hashtable props = ((Alignment)viewport.alignment).alignmentProperties;
744 Enumeration en = props.keys();
745 while(en.hasMoreElements())
747 String key = en.nextElement().toString();
748 contents.append("\n"+key+"\t"+props.get(key));
752 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this);
753 cap.setText(contents.toString());
754 Frame frame = new Frame();
756 jalview.bin.JalviewLite.addFrame(frame,
757 "Alignment Properties: "+getTitle()
760 else if (source == overviewMenuItem)
762 overviewMenuItem_actionPerformed();
764 else if (source == noColourmenuItem)
768 else if (source == clustalColour)
770 abovePIDThreshold.setState(false);
771 changeColour(new ClustalxColourScheme(viewport.alignment.getSequences(),
772 viewport.alignment.getWidth()));
774 else if (source == zappoColour)
776 changeColour(new ZappoColourScheme());
778 else if (source == taylorColour)
780 changeColour(new TaylorColourScheme());
782 else if (source == hydrophobicityColour)
784 changeColour(new HydrophobicColourScheme());
786 else if (source == helixColour)
788 changeColour(new HelixColourScheme());
790 else if (source == strandColour)
792 changeColour(new StrandColourScheme());
794 else if (source == turnColour)
796 changeColour(new TurnColourScheme());
798 else if (source == buriedColour)
800 changeColour(new BuriedColourScheme());
802 else if (source == nucleotideColour)
804 changeColour(new NucleotideColourScheme());
806 else if (source == modifyPID)
808 modifyPID_actionPerformed();
810 else if (source == modifyConservation)
812 modifyConservation_actionPerformed();
814 else if (source == userDefinedColour)
816 new UserDefinedColours(alignPanel, null);
818 else if (source == PIDColour)
820 changeColour(new PIDColourScheme());
822 else if (source == BLOSUM62Colour)
824 changeColour(new Blosum62ColourScheme());
826 else if (source == annotationColour)
828 new AnnotationColourChooser(viewport, alignPanel);
830 else if (source == sortPairwiseMenuItem)
832 sortPairwiseMenuItem_actionPerformed();
834 else if (source == sortIDMenuItem)
836 sortIDMenuItem_actionPerformed();
838 else if (source == sortGroupMenuItem)
840 sortGroupMenuItem_actionPerformed();
842 else if (source == removeRedundancyMenuItem)
844 removeRedundancyMenuItem_actionPerformed();
846 else if (source == pairwiseAlignmentMenuItem)
848 pairwiseAlignmentMenuItem_actionPerformed();
850 else if (source == PCAMenuItem)
852 PCAMenuItem_actionPerformed();
854 else if (source == averageDistanceTreeMenuItem)
856 averageDistanceTreeMenuItem_actionPerformed();
858 else if (source == neighbourTreeMenuItem)
860 neighbourTreeMenuItem_actionPerformed();
862 else if (source == njTreeBlosumMenuItem)
864 njTreeBlosumMenuItem_actionPerformed();
866 else if (source == avDistanceTreeBlosumMenuItem)
868 avTreeBlosumMenuItem_actionPerformed();
870 else if (source == documentation)
872 documentation_actionPerformed();
874 else if (source == about)
876 about_actionPerformed();
881 public void inputText_actionPerformed()
883 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
884 Frame frame = new Frame();
886 jalview.bin.JalviewLite.addFrame(frame, "Cut & Paste Input", 500, 500);
889 protected void outputText_actionPerformed(ActionEvent e)
891 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
892 Frame frame = new Frame();
894 jalview.bin.JalviewLite.addFrame(frame,
895 "Alignment output - " + e.getActionCommand(),
897 cap.setText(new AppletFormatAdapter().formatSequences(e.getActionCommand(),
898 viewport.getAlignment(),
899 viewport.showJVSuffix));
902 public void loadAnnotations()
904 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
905 cap.setText("Paste your features / annotations file here.");
906 cap.setAnnotationImport();
907 Frame frame = new Frame();
909 jalview.bin.JalviewLite.addFrame(frame, "Paste Annotations ", 400, 300);
913 public String outputAnnotations(boolean displayTextbox)
915 String annotation = new AnnotationFile().printAnnotations(
916 viewport.showAnnotation ? viewport.alignment.getAlignmentAnnotation() : null,
917 viewport.alignment.getGroups(),
918 ((Alignment) viewport.alignment).alignmentProperties);
922 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this);
923 Frame frame = new Frame();
925 jalview.bin.JalviewLite.addFrame(frame,
928 cap.setText(annotation);
934 public String outputFeatures(boolean displayTextbox, String format)
937 if (format.equalsIgnoreCase("Jalview"))
939 features = new FeaturesFile().printJalviewFormat(
940 viewport.alignment.getSequencesArray(),
941 viewport.featuresDisplayed);
945 features = new FeaturesFile().printGFFFormat(
946 viewport.alignment.getSequencesArray(),
947 viewport.featuresDisplayed);
952 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this);
953 Frame frame = new Frame();
955 jalview.bin.JalviewLite.addFrame(frame,
959 cap.setText(features);
965 void launchFullApplication()
967 StringBuffer url = new StringBuffer(jalviewServletURL);
969 url.append("?open=" +
970 appendProtocol(viewport.applet.getParameter("file")));
972 if (viewport.applet.getParameter("features") != null)
974 url.append("&features=");
975 url.append(appendProtocol(viewport.applet.getParameter("features")));
978 if (viewport.applet.getParameter("annotations") != null)
980 url.append("&annotations=");
981 url.append(appendProtocol(viewport.applet.getParameter("annotations")));
984 if (viewport.applet.getParameter("jnetfile") != null)
986 url.append("&annotations=");
987 url.append(appendProtocol(viewport.applet.getParameter("jnetfile")));
990 if (viewport.applet.getParameter("defaultColour") != null)
992 url.append("&colour=" +
993 removeWhiteSpace(viewport.applet.getParameter("defaultColour"))
997 if (viewport.applet.getParameter("userDefinedColour") != null)
999 url.append("&colour=" +
1000 removeWhiteSpace(viewport.applet.getParameter(
1001 "userDefinedColour"))
1004 if (viewport.applet.getParameter("tree")!=null)
1006 url.append("&tree="+appendProtocol(viewport.applet.getParameter("tree")));
1008 if (viewport.applet.getParameter("treeFile")!=null)
1010 url.append("&tree="+appendProtocol(viewport.applet.getParameter("treeFile")));
1013 showURL(url.toString(), "FULL_APP");
1016 String removeWhiteSpace(String colour)
1018 StringBuffer sb = new StringBuffer();
1019 for (int i = 0; i < colour.length(); i++)
1021 if (Character.isWhitespace(colour.charAt(i)))
1027 sb.append(colour.charAt(i));
1031 return sb.toString();
1034 String appendProtocol(String url)
1039 url = URLEncoder.encode(url);
1041 /* When we finally deprecate 1.1 compatibility,
1042 * we can start to use URLEncoder.encode(url,"UTF-8")
1043 * and then we'll need this catch:
1044 * catch (UnsupportedEncodingException ex)
1046 System.err.println("WARNING - IMPLEMENTATION ERROR - UNSUPPORTED ENCODING EXCEPTION FOR "+url);
1047 ex.printStackTrace();
1049 catch (java.net.MalformedURLException ex)
1051 url = viewport.applet.getCodeBase() + url;
1056 public void closeMenuItem_actionPerformed()
1058 PaintRefresher.RemoveComponent(alignPanel);
1059 PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas);
1060 PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas);
1062 if (PaintRefresher.components.size() == 0 && viewport.applet == null)
1073 void updateEditMenuBar()
1076 if (viewport.historyList.size() > 0)
1078 undoMenuItem.setEnabled(true);
1079 CommandI command = (CommandI) viewport.historyList.peek();
1080 undoMenuItem.setLabel("Undo " + command.getDescription());
1084 undoMenuItem.setEnabled(false);
1085 undoMenuItem.setLabel("Undo");
1088 if (viewport.redoList.size() > 0)
1090 redoMenuItem.setEnabled(true);
1092 CommandI command = (CommandI) viewport.redoList.peek();
1093 redoMenuItem.setLabel("Redo " + command.getDescription());
1097 redoMenuItem.setEnabled(false);
1098 redoMenuItem.setLabel("Redo");
1102 public void addHistoryItem(CommandI command)
1104 if (command.getSize() > 0)
1106 viewport.historyList.push(command);
1107 viewport.redoList.removeAllElements();
1108 updateEditMenuBar();
1109 viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1115 * @param e DOCUMENT ME!
1117 protected void undoMenuItem_actionPerformed()
1119 if (viewport.historyList.size() < 1)
1124 CommandI command = (CommandI) viewport.historyList.pop();
1125 viewport.redoList.push(command);
1126 command.undoCommand(null);
1128 AlignViewport originalSource = getOriginatingSource(command);
1130 originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1131 updateEditMenuBar();
1132 originalSource.firePropertyChange("alignment", null,
1133 originalSource.alignment.getSequences());
1139 * @param e DOCUMENT ME!
1141 protected void redoMenuItem_actionPerformed()
1143 if (viewport.redoList.size() < 1)
1148 CommandI command = (CommandI) viewport.redoList.pop();
1149 viewport.historyList.push(command);
1150 command.doCommand(null);
1152 AlignViewport originalSource = getOriginatingSource(command);
1153 originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1155 updateEditMenuBar();
1156 originalSource.firePropertyChange("alignment", null,
1157 originalSource.alignment.getSequences());
1160 AlignViewport getOriginatingSource(CommandI command)
1162 AlignViewport originalSource = null;
1163 //For sequence removal and addition, we need to fire
1164 //the property change event FROM the viewport where the
1165 //original alignment was altered
1166 AlignmentI al = null;
1167 if (command instanceof EditCommand)
1169 EditCommand editCommand = (EditCommand) command;
1170 al = editCommand.getAlignment();
1171 Vector comps = (Vector) PaintRefresher.components
1172 .get(viewport.getSequenceSetId());
1173 for (int i = 0; i < comps.size(); i++)
1175 if (comps.elementAt(i) instanceof AlignmentPanel)
1177 if (al == ( (AlignmentPanel) comps.elementAt(i)).av.alignment)
1179 originalSource = ( (AlignmentPanel) comps.elementAt(i)).av;
1186 if (originalSource == null)
1188 //The original view is closed, we must validate
1189 //the current view against the closed view first
1192 PaintRefresher.validateSequences(al, viewport.alignment);
1195 originalSource = viewport;
1198 return originalSource;
1201 public void moveSelectedSequences(boolean up)
1203 SequenceGroup sg = viewport.getSelectionGroup();
1211 for (int i = 1; i < viewport.alignment.getHeight(); i++)
1213 SequenceI seq = viewport.alignment.getSequenceAt(i);
1214 if (!sg.getSequences(null).contains(seq))
1219 SequenceI temp = viewport.alignment.getSequenceAt(i - 1);
1220 if (sg.getSequences(null).contains(temp))
1225 viewport.alignment.getSequences().setElementAt(temp, i);
1226 viewport.alignment.getSequences().setElementAt(seq, i - 1);
1231 for (int i = viewport.alignment.getHeight() - 2; i > -1; i--)
1233 SequenceI seq = viewport.alignment.getSequenceAt(i);
1234 if (!sg.getSequences(viewport.hiddenRepSequences).contains(seq))
1239 SequenceI temp = viewport.alignment.getSequenceAt(i + 1);
1240 if (sg.getSequences(viewport.hiddenRepSequences).contains(temp))
1245 viewport.alignment.getSequences().setElementAt(temp, i);
1246 viewport.alignment.getSequences().setElementAt(seq, i + 1);
1250 alignPanel.paintAlignment(true);
1253 synchronized void slideSequences(boolean right, int size)
1255 Vector sg = new Vector();
1256 if(viewport.cursorMode)
1258 sg.addElement(viewport.alignment.getSequenceAt(
1259 alignPanel.seqPanel.seqCanvas.cursorY));
1261 else if(viewport.getSelectionGroup()!=null
1262 && viewport.getSelectionGroup().getSize()!=viewport.alignment.getHeight())
1264 sg = viewport.getSelectionGroup().getSequences(
1265 viewport.hiddenRepSequences);
1273 Vector invertGroup = new Vector();
1275 for (int i = 0; i < viewport.alignment.getHeight(); i++)
1277 if(!sg.contains(viewport.alignment.getSequenceAt(i)))
1278 invertGroup.addElement(viewport.alignment.getSequenceAt(i));
1281 SequenceI[] seqs1 = new SequenceI[sg.size()];
1282 for (int i = 0; i < sg.size(); i++)
1283 seqs1[i] = (SequenceI) sg.elementAt(i);
1285 SequenceI[] seqs2 = new SequenceI[invertGroup.size()];
1286 for (int i = 0; i < invertGroup.size(); i++)
1287 seqs2[i] = (SequenceI) invertGroup.elementAt(i);
1289 SlideSequencesCommand ssc;
1291 ssc = new SlideSequencesCommand("Slide Sequences",
1293 viewport.getGapCharacter()
1296 ssc = new SlideSequencesCommand("Slide Sequences",
1298 viewport.getGapCharacter()
1301 int groupAdjustment = 0;
1302 if (ssc.getGapsInsertedBegin() && right)
1304 if (viewport.cursorMode)
1305 alignPanel.seqPanel.moveCursor(size, 0);
1307 groupAdjustment = size;
1309 else if (!ssc.getGapsInsertedBegin() && !right)
1311 if (viewport.cursorMode)
1312 alignPanel.seqPanel.moveCursor( -size, 0);
1314 groupAdjustment = -size;
1317 if (groupAdjustment != 0)
1319 viewport.getSelectionGroup().setStartRes(
1320 viewport.getSelectionGroup().getStartRes() + groupAdjustment);
1321 viewport.getSelectionGroup().setEndRes(
1322 viewport.getSelectionGroup().getEndRes() + groupAdjustment);
1326 boolean appendHistoryItem = false;
1327 if(viewport.historyList!=null
1328 && viewport.historyList.size()>0
1329 && viewport.historyList.peek() instanceof SlideSequencesCommand)
1331 appendHistoryItem = ssc.appendSlideCommand(
1332 (SlideSequencesCommand)viewport.historyList.peek())
1336 if(!appendHistoryItem)
1337 addHistoryItem(ssc);
1342 static StringBuffer copiedSequences;
1343 static Vector copiedHiddenColumns;
1344 protected void copy_actionPerformed()
1346 if (viewport.getSelectionGroup() == null)
1351 SequenceGroup sg = viewport.getSelectionGroup();
1352 copiedSequences = new StringBuffer();
1353 Hashtable orderedSeqs = new Hashtable();
1354 for (int i = 0; i < sg.getSize(); i++)
1356 SequenceI seq = sg.getSequenceAt(i);
1357 int index = viewport.alignment.findIndex(seq);
1358 orderedSeqs.put(index + "", seq);
1361 int index = 0, startRes, endRes;
1364 if (viewport.hasHiddenColumns && viewport.getSelectionGroup() != null)
1366 copiedHiddenColumns = new Vector();
1367 int hiddenOffset = viewport.getSelectionGroup().getStartRes();
1368 for (int i = 0; i < viewport.getColumnSelection().getHiddenColumns().size();
1371 int[] region = (int[])
1372 viewport.getColumnSelection().getHiddenColumns().elementAt(i);
1374 copiedHiddenColumns.addElement(new int[]
1375 {region[0] - hiddenOffset,
1376 region[1] - hiddenOffset});
1381 copiedHiddenColumns = null;
1384 for (int i = 0; i < sg.getSize(); i++)
1386 SequenceI seq = null;
1390 if (orderedSeqs.containsKey(index + ""))
1392 seq = (SequenceI) orderedSeqs.get(index + "");
1404 //Returns residue following index if gap
1405 startRes = seq.findPosition(sg.getStartRes());
1408 //Need to find the residue preceeding index if gap
1411 for (int j = 0; j < sg.getEndRes() + 1 && j < seq.getLength(); j++)
1413 ch = seq.getCharAt(j);
1414 if (!jalview.util.Comparison.isGap( (ch)))
1422 endRes += seq.getStart() - 1;
1425 copiedSequences.append(seq.getName() + "\t" +
1428 seq.getSequenceAsString(sg.getStartRes(),
1429 sg.getEndRes() + 1) + "\n");
1434 protected void pasteNew_actionPerformed()
1439 protected void pasteThis_actionPerformed()
1444 void paste(boolean newAlignment)
1449 if (copiedSequences == null)
1454 StringTokenizer st = new StringTokenizer(copiedSequences.toString());
1455 Vector seqs = new Vector();
1456 while (st.hasMoreElements())
1458 String name = st.nextToken();
1459 int start = Integer.parseInt(st.nextToken());
1460 int end = Integer.parseInt(st.nextToken());
1461 seqs.addElement(new Sequence(name, st.nextToken(), start, end));
1463 SequenceI[] newSeqs = new SequenceI[seqs.size()];
1464 for (int i = 0; i < seqs.size(); i++)
1466 newSeqs[i] = (SequenceI) seqs.elementAt(i);
1471 String newtitle = new String("Copied sequences");
1472 if (getTitle().startsWith("Copied sequences"))
1474 newtitle = getTitle();
1478 newtitle = newtitle.concat("- from " + getTitle());
1480 AlignFrame af = new AlignFrame(new Alignment(newSeqs),
1484 if (copiedHiddenColumns != null)
1486 for (int i = 0; i < copiedHiddenColumns.size(); i++)
1488 int[] region = (int[]) copiedHiddenColumns.elementAt(i);
1489 af.viewport.hideColumns(region[0], region[1]);
1493 jalview.bin.JalviewLite.addFrame(af, newtitle, DEFAULT_WIDTH,
1498 addSequences(newSeqs);
1502 catch (Exception ex)
1503 {} // could be anything being pasted in here
1507 void addSequences(SequenceI[] seqs)
1509 for (int i = 0; i < seqs.length; i++)
1511 viewport.alignment.addSequence(seqs[i]);
1515 addHistoryItem(new EditCommand(
1520 viewport.alignment.getWidth(),
1524 viewport.setEndSeq(viewport.alignment.getHeight());
1525 viewport.alignment.getWidth();
1526 viewport.firePropertyChange("alignment", null,
1527 viewport.alignment.getSequences());
1531 protected void cut_actionPerformed()
1533 copy_actionPerformed();
1534 delete_actionPerformed();
1537 protected void delete_actionPerformed()
1540 SequenceGroup sg = viewport.getSelectionGroup();
1546 Vector seqs = new Vector();
1548 for (int i = 0; i < sg.getSize(); i++)
1550 seq = sg.getSequenceAt(i);
1551 seqs.addElement(seq);
1554 // If the cut affects all sequences, remove highlighted columns
1555 if (sg.getSize() == viewport.alignment.getHeight())
1557 viewport.getColumnSelection().removeElements(sg.getStartRes(),
1558 sg.getEndRes() + 1);
1561 SequenceI[] cut = new SequenceI[seqs.size()];
1562 for (int i = 0; i < seqs.size(); i++)
1564 cut[i] = (SequenceI) seqs.elementAt(i);
1570 addHistoryItem(new EditCommand("Cut Sequences",
1574 sg.getEndRes() - sg.getStartRes() + 1,
1575 viewport.alignment));
1577 viewport.setSelectionGroup(null);
1578 viewport.alignment.deleteGroup(sg);
1580 viewport.firePropertyChange("alignment", null,
1581 viewport.getAlignment().getSequences());
1583 if (viewport.getAlignment().getHeight() < 1)
1585 this.setVisible(false);
1589 protected void deleteGroups_actionPerformed()
1591 viewport.alignment.deleteAllGroups();
1592 viewport.sequenceColours = null;
1593 viewport.setSelectionGroup(null);
1595 alignPanel.paintAlignment(true);
1598 public void selectAllSequenceMenuItem_actionPerformed()
1600 SequenceGroup sg = new SequenceGroup();
1601 for (int i = 0; i < viewport.getAlignment().getSequences().size(); i++)
1603 sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);
1605 sg.setEndRes(viewport.alignment.getWidth() - 1);
1606 viewport.setSelectionGroup(sg);
1607 alignPanel.paintAlignment(true);
1608 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1611 public void deselectAllSequenceMenuItem_actionPerformed()
1613 if (viewport.cursorMode)
1615 alignPanel.seqPanel.keyboardNo1 = null;
1616 alignPanel.seqPanel.keyboardNo2 = null;
1618 viewport.setSelectionGroup(null);
1619 viewport.getColumnSelection().clear();
1620 viewport.setSelectionGroup(null);
1621 alignPanel.idPanel.idCanvas.searchResults = null;
1622 alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);
1623 alignPanel.paintAlignment(true);
1624 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1627 public void invertSequenceMenuItem_actionPerformed()
1629 SequenceGroup sg = viewport.getSelectionGroup();
1630 for (int i = 0; i < viewport.getAlignment().getSequences().size(); i++)
1632 sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false);
1635 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1638 void trimAlignment(boolean trimLeft)
1640 ColumnSelection colSel = viewport.getColumnSelection();
1643 if (colSel.size() > 0)
1647 column = colSel.getMin();
1651 column = colSel.getMax();
1655 if (viewport.getSelectionGroup() != null)
1657 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1658 hiddenRepSequences);
1662 seqs = viewport.alignment.getSequencesArray();
1665 TrimRegionCommand trimRegion;
1668 trimRegion = new TrimRegionCommand("Remove Left",
1669 TrimRegionCommand.TRIM_LEFT,
1674 viewport.selectionGroup);
1675 viewport.setStartRes(0);
1679 trimRegion = new TrimRegionCommand("Remove Right",
1680 TrimRegionCommand.TRIM_RIGHT,
1685 viewport.selectionGroup);
1688 statusBar.setText("Removed " + trimRegion.getSize() + " columns.");
1690 addHistoryItem(trimRegion);
1692 Vector groups = viewport.alignment.getGroups();
1694 for (int i = 0; i < groups.size(); i++)
1696 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
1698 if ( (trimLeft && !sg.adjustForRemoveLeft(column))
1699 || (!trimLeft && !sg.adjustForRemoveRight(column)))
1701 viewport.alignment.deleteGroup(sg);
1705 viewport.firePropertyChange("alignment", null,
1706 viewport.getAlignment().getSequences());
1710 public void removeGappedColumnMenuItem_actionPerformed()
1712 int start = 0, end = viewport.alignment.getWidth() - 1;
1715 if (viewport.getSelectionGroup() != null)
1717 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1718 hiddenRepSequences);
1719 start = viewport.getSelectionGroup().getStartRes();
1720 end = viewport.getSelectionGroup().getEndRes();
1724 seqs = viewport.alignment.getSequencesArray();
1727 RemoveGapColCommand removeGapCols =
1728 new RemoveGapColCommand("Remove Gapped Columns",
1731 viewport.alignment);
1733 addHistoryItem(removeGapCols);
1735 statusBar.setText("Removed " + removeGapCols.getSize() + " empty columns.");
1737 //This is to maintain viewport position on first residue
1739 SequenceI seq = viewport.alignment.getSequenceAt(0);
1740 int startRes = seq.findPosition(viewport.startRes);
1741 // ShiftList shifts;
1742 // viewport.getAlignment().removeGaps(shifts=new ShiftList());
1743 // edit.alColumnChanges=shifts.getInverse();
1744 // if (viewport.hasHiddenColumns)
1745 // viewport.getColumnSelection().compensateForEdits(shifts);
1746 viewport.setStartRes(seq.findIndex(startRes) - 1);
1747 viewport.firePropertyChange("alignment", null,
1748 viewport.getAlignment().getSequences());
1752 public void removeAllGapsMenuItem_actionPerformed()
1754 int start = 0, end = viewport.alignment.getWidth() - 1;
1757 if (viewport.getSelectionGroup() != null)
1759 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1760 hiddenRepSequences);
1761 start = viewport.getSelectionGroup().getStartRes();
1762 end = viewport.getSelectionGroup().getEndRes();
1766 seqs = viewport.alignment.getSequencesArray();
1769 //This is to maintain viewport position on first residue
1771 SequenceI seq = viewport.alignment.getSequenceAt(0);
1772 int startRes = seq.findPosition(viewport.startRes);
1774 addHistoryItem(new RemoveGapsCommand("Remove Gaps",
1777 viewport.alignment));
1779 viewport.setStartRes(seq.findIndex(startRes) - 1);
1781 viewport.firePropertyChange("alignment", null,
1782 viewport.getAlignment().getSequences());
1786 public void findMenuItem_actionPerformed()
1788 new Finder(alignPanel);
1791 * create a new view derived from the current view
1793 * @return frame for the new view
1795 public AlignFrame newView(String viewtitle)
1798 if (viewport.hasHiddenRows)
1800 newal = new Alignment(viewport.getAlignment().
1801 getHiddenSequences()
1802 .getFullAlignment().
1803 getSequencesArray());
1807 newal = new Alignment(viewport.alignment.getSequencesArray());
1810 if (viewport.alignment.getAlignmentAnnotation() != null)
1812 for (int i = 0; i < viewport.alignment.getAlignmentAnnotation().length; i++)
1814 if (!viewport.alignment.getAlignmentAnnotation()[i].autoCalculated)
1816 newal.addAnnotation(viewport.alignment.getAlignmentAnnotation()[i]);
1821 AlignFrame newaf = new AlignFrame(newal,
1826 newaf.viewport.sequenceSetID = alignPanel.av.getSequenceSetId();
1827 PaintRefresher.Register(alignPanel, alignPanel.av.getSequenceSetId());
1828 PaintRefresher.Register(newaf.alignPanel,
1829 newaf.alignPanel.av.getSequenceSetId());
1831 PaintRefresher.Register(newaf.alignPanel.idPanel.idCanvas,
1832 newaf.alignPanel.av.getSequenceSetId());
1833 PaintRefresher.Register(newaf.alignPanel.seqPanel.seqCanvas,
1834 newaf.alignPanel.av.getSequenceSetId());
1836 Vector comps = (Vector) PaintRefresher.components.get(viewport.
1837 getSequenceSetId());
1839 for (int i = 0; i < comps.size(); i++)
1841 if (comps.elementAt(i) instanceof AlignmentPanel)
1847 String title = new String(this.getTitle());
1848 if (viewtitle!=null)
1850 title = viewtitle+" ( "+title+")";
1852 if (title.indexOf("(View") > -1)
1854 title = title.substring(0, title.indexOf("(View"));
1856 title += "(View " + viewSize + ")";
1859 newaf.setTitle(title.toString());
1861 newaf.viewport.historyList = viewport.historyList;
1862 newaf.viewport.redoList = viewport.redoList;
1867 * @return list of feature groups on the view
1869 public String[] getFeatureGroups()
1871 FeatureRenderer fr = null;
1872 if (alignPanel!=null && (fr=alignPanel.getFeatureRenderer())!=null)
1874 return fr.getGroups();
1879 * get sequence feature groups that are hidden or shown
1880 * @param visible true is visible
1883 public String[] getFeatureGroupsOfState(boolean visible)
1885 FeatureRenderer fr = null;
1886 if (alignPanel!=null && (fr=alignPanel.getFeatureRenderer())!=null)
1888 return fr.getGroups(visible);
1893 * Change the display state for the given feature groups
1894 * @param groups list of group strings
1895 * @param state visible or invisible
1897 public void setFeatureGroupState(String[] groups, boolean state) {
1898 FeatureRenderer fr = null;
1899 this.sequenceFeatures.setState(true);
1900 viewport.showSequenceFeatures(true);
1901 if (alignPanel!=null && (fr=alignPanel.getFeatureRenderer())!=null)
1903 fr.setGroupState(groups, state);
1904 alignPanel.seqPanel.seqCanvas.repaint();
1905 if (alignPanel.overviewPanel != null)
1907 alignPanel.overviewPanel.updateOverviewImage();
1911 public void seqLimits_itemStateChanged()
1913 viewport.setShowJVSuffix(seqLimits.getState());
1914 alignPanel.fontChanged();
1915 alignPanel.paintAlignment(true);
1918 protected void colourTextMenuItem_actionPerformed()
1920 viewport.setColourText(colourTextMenuItem.getState());
1921 alignPanel.paintAlignment(true);
1924 protected void wrapMenuItem_actionPerformed()
1926 viewport.setWrapAlignment(wrapMenuItem.getState());
1927 alignPanel.setWrapAlignment(wrapMenuItem.getState());
1928 scaleAbove.setEnabled(wrapMenuItem.getState());
1929 scaleLeft.setEnabled(wrapMenuItem.getState());
1930 scaleRight.setEnabled(wrapMenuItem.getState());
1931 alignPanel.paintAlignment(true);
1934 public void overviewMenuItem_actionPerformed()
1936 if (alignPanel.overviewPanel != null)
1941 Frame frame = new Frame();
1942 OverviewPanel overview = new OverviewPanel(alignPanel);
1943 frame.add(overview);
1944 // +50 must allow for applet frame window
1945 jalview.bin.JalviewLite.addFrame(frame, "Overview " + this.getTitle(),
1946 overview.getPreferredSize().width,
1947 overview.getPreferredSize().height + 50);
1950 frame.addWindowListener(new WindowAdapter()
1952 public void windowClosing(WindowEvent e)
1954 alignPanel.setOverviewPanel(null);
1958 alignPanel.setOverviewPanel(overview);
1962 void changeColour(ColourSchemeI cs)
1968 if (viewport.getAbovePIDThreshold())
1970 threshold = SliderPanel.setPIDSliderSource(alignPanel, cs, "Background");
1972 cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus());
1974 viewport.setGlobalColourScheme(cs);
1978 cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
1981 if (viewport.getConservationSelected())
1984 Alignment al = (Alignment) viewport.alignment;
1985 Conservation c = new Conservation("All",
1986 ResidueProperties.propHash, 3,
1987 al.getSequences(), 0,
1991 c.verdict(false, viewport.ConsPercGaps);
1993 cs.setConservation(c);
1995 cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, cs,
2001 cs.setConservation(null);
2004 cs.setConsensus(viewport.hconsensus);
2007 viewport.setGlobalColourScheme(cs);
2009 if (viewport.getColourAppliesToAllGroups())
2011 Vector groups = viewport.alignment.getGroups();
2012 for (int i = 0; i < groups.size(); i++)
2014 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
2021 if (cs instanceof ClustalxColourScheme)
2023 sg.cs = new ClustalxColourScheme(
2024 sg.getSequences(viewport.hiddenRepSequences),
2031 sg.cs = (ColourSchemeI) cs.getClass().newInstance();
2033 catch (Exception ex)
2035 ex.printStackTrace();
2040 if (viewport.getAbovePIDThreshold()
2041 || cs instanceof PIDColourScheme
2042 || cs instanceof Blosum62ColourScheme)
2044 sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus());
2045 sg.cs.setConsensus(AAFrequency.calculate(
2046 sg.getSequences(viewport.hiddenRepSequences), 0, sg.getWidth()));
2050 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
2053 if (viewport.getConservationSelected())
2055 Conservation c = new Conservation("Group",
2056 ResidueProperties.propHash, 3,
2057 sg.getSequences(viewport.
2058 hiddenRepSequences), 0,
2059 viewport.alignment.getWidth() - 1);
2061 c.verdict(false, viewport.ConsPercGaps);
2062 sg.cs.setConservation(c);
2066 sg.cs.setConservation(null);
2067 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
2073 if (alignPanel.getOverviewPanel() != null)
2075 alignPanel.getOverviewPanel().updateOverviewImage();
2078 jalview.structure.StructureSelectionManager.getStructureSelectionManager()
2079 .sequenceColoursChanged(alignPanel);
2081 alignPanel.paintAlignment(true);
2084 protected void modifyPID_actionPerformed()
2086 if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme != null)
2088 SliderPanel.setPIDSliderSource(alignPanel, viewport.getGlobalColourScheme(),
2090 SliderPanel.showPIDSlider();
2094 protected void modifyConservation_actionPerformed()
2096 if (viewport.getConservationSelected() && viewport.globalColourScheme != null)
2098 SliderPanel.setConservationSlider(alignPanel, viewport.globalColourScheme,
2100 SliderPanel.showConservationSlider();
2104 protected void conservationMenuItem_actionPerformed()
2106 viewport.setConservationSelected(conservationMenuItem.getState());
2108 viewport.setAbovePIDThreshold(false);
2109 abovePIDThreshold.setState(false);
2111 changeColour(viewport.getGlobalColourScheme());
2113 modifyConservation_actionPerformed();
2116 public void abovePIDThreshold_actionPerformed()
2118 viewport.setAbovePIDThreshold(abovePIDThreshold.getState());
2120 conservationMenuItem.setState(false);
2121 viewport.setConservationSelected(false);
2123 changeColour(viewport.getGlobalColourScheme());
2125 modifyPID_actionPerformed();
2128 public void sortPairwiseMenuItem_actionPerformed()
2130 SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
2131 AlignmentSorter.sortByPID(viewport.getAlignment(),
2132 viewport.getAlignment().getSequenceAt(0), null);
2133 addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder,
2134 viewport.alignment));
2135 alignPanel.paintAlignment(true);
2138 public void sortIDMenuItem_actionPerformed()
2140 // addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
2141 // HistoryItem.SORT));
2142 AlignmentSorter.sortByID(viewport.getAlignment());
2143 alignPanel.paintAlignment(true);
2146 public void sortGroupMenuItem_actionPerformed()
2148 // addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
2149 // HistoryItem.SORT));
2150 AlignmentSorter.sortByGroup(viewport.getAlignment());
2151 alignPanel.paintAlignment(true);
2155 public void removeRedundancyMenuItem_actionPerformed()
2157 new RedundancyPanel(alignPanel);
2160 public void pairwiseAlignmentMenuItem_actionPerformed()
2162 if (viewport.getSelectionGroup() != null
2163 && viewport.getSelectionGroup().getSize() > 1)
2165 Frame frame = new Frame();
2166 frame.add(new PairwiseAlignPanel(alignPanel));
2167 jalview.bin.JalviewLite.addFrame(frame, "Pairwise Alignment", 600, 500);
2171 public void PCAMenuItem_actionPerformed()
2173 //are the sequences aligned?
2174 if (!viewport.alignment.isAligned())
2177 int Width = viewport.getAlignment().getWidth();
2179 for (int i = 0; i < viewport.getAlignment().getSequences().size();
2182 current = viewport.getAlignment().getSequenceAt(i);
2184 if (current.getLength() < Width)
2186 current.insertCharAt(Width - 1, viewport.getGapCharacter());
2189 alignPanel.paintAlignment(true);
2192 if ( (viewport.getSelectionGroup() != null &&
2193 viewport.getSelectionGroup().getSize() < 4 &&
2194 viewport.getSelectionGroup().getSize() > 0)
2195 || viewport.getAlignment().getHeight() < 4)
2202 new PCAPanel(viewport);
2204 catch (java.lang.OutOfMemoryError ex)
2210 public void averageDistanceTreeMenuItem_actionPerformed()
2212 NewTreePanel("AV", "PID", "Average distance tree using PID");
2215 public void neighbourTreeMenuItem_actionPerformed()
2217 NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
2220 protected void njTreeBlosumMenuItem_actionPerformed()
2222 NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
2225 protected void avTreeBlosumMenuItem_actionPerformed()
2227 NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
2230 void NewTreePanel(String type, String pwType, String title)
2232 //are the sequences aligned?
2233 if (!viewport.alignment.isAligned())
2236 int Width = viewport.getAlignment().getWidth();
2238 for (int i = 0; i < viewport.getAlignment().getSequences().size();
2241 current = viewport.getAlignment().getSequenceAt(i);
2243 if (current.getLength() < Width)
2245 current.insertCharAt(Width - 1, viewport.getGapCharacter());
2248 alignPanel.paintAlignment(true);
2252 if ( (viewport.getSelectionGroup() != null &&
2253 viewport.getSelectionGroup().getSize() > 1)
2254 || (viewport.getSelectionGroup() == null
2255 && viewport.alignment.getHeight() > 1))
2257 final TreePanel tp = new TreePanel(viewport,
2261 addTreeMenuItem(tp, title);
2263 jalview.bin.JalviewLite.addFrame(tp, title, 600, 500);
2267 void loadTree_actionPerformed()
2269 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
2270 cap.setText("Paste your Newick tree file here.");
2271 cap.setTreeImport();
2272 Frame frame = new Frame();
2274 jalview.bin.JalviewLite.addFrame(frame, "Paste Newick file ", 400, 300);
2277 public void loadTree(jalview.io.NewickFile tree, String treeFile)
2279 TreePanel tp = new TreePanel(viewport,
2283 jalview.bin.JalviewLite.addFrame(tp, treeFile, 600, 500);
2284 addTreeMenuItem(tp, treeFile);
2287 void addTreeMenuItem(final TreePanel treePanel, String title)
2289 final MenuItem item = new MenuItem(title);
2290 sortByTreeMenu.add(item);
2291 item.addActionListener(new java.awt.event.ActionListener()
2293 public void actionPerformed(ActionEvent evt)
2295 // addHistoryItem(new HistoryItem("Sort", viewport.alignment,
2296 // HistoryItem.SORT));
2297 AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree());
2298 alignPanel.paintAlignment(true);
2302 treePanel.addWindowListener(new WindowAdapter()
2304 public void windowClosing(WindowEvent e)
2306 sortByTreeMenu.remove(item);
2311 protected void documentation_actionPerformed()
2313 showURL("http://www.jalview.org/help.html", "HELP");
2316 protected void about_actionPerformed()
2323 public AboutPanel(String version)
2325 this.version = version;
2328 public void paint(Graphics g)
2330 g.setColor(Color.white);
2331 g.fillRect(0, 0, getSize().width, getSize().height);
2332 g.setFont(new Font("Helvetica", Font.PLAIN, 12));
2333 FontMetrics fm = g.getFontMetrics();
2334 int fh = fm.getHeight();
2336 g.setColor(Color.black);
2337 g.setFont(new Font("Helvetica", Font.BOLD, 14));
2338 g.drawString("Jalview - Release " + version, 200, y += fh);
2339 g.setFont(new Font("Helvetica", Font.PLAIN, 12));
2340 g.drawString("Authors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton.",
2342 g.drawString("Current development managed by Andrew Waterhouse; Barton Group, University of Dundee.",
2345 "For any issues relating to Jalview, email help@jalview.org", x,
2347 g.drawString("If you use JalView, please cite:", x, y += fh + 8);
2348 g.drawString("\"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"",
2350 g.drawString("Bioinformatics, 2004 20;426-7.", x, y += fh);
2354 String version = "test";
2355 java.net.URL url = getClass().getResource("/.build_properties");
2360 BufferedReader reader = new BufferedReader(new InputStreamReader(
2363 while ( (line = reader.readLine()) != null)
2365 if (line.indexOf("VERSION") > -1)
2367 version = line.substring(line.indexOf("=") + 1);
2371 catch (Exception ex)
2373 ex.printStackTrace();
2377 Frame frame = new Frame();
2378 frame.add(new AboutPanel(version));
2379 jalview.bin.JalviewLite.addFrame(frame, "Jalview", 580, 200);
2383 public void showURL(String url, String target)
2385 if (viewport.applet == null)
2387 System.out.println("Not running as applet - no browser available.");
2393 System.out.println("Show url: " + url);
2394 viewport.applet.getAppletContext().showDocument(new java.net.URL(url),
2397 catch (Exception ex)
2399 ex.printStackTrace();
2404 //////////////////////////////////////////////////////////////////////////////////
2405 //JBuilder Graphics here
2407 MenuBar alignFrameMenuBar = new MenuBar();
2408 Menu fileMenu = new Menu("File");
2409 MenuItem loadApplication = new MenuItem("View in Full Application");
2410 MenuItem loadTree = new MenuItem("Load Associated Tree ...");
2411 MenuItem loadAnnotations = new MenuItem(
2412 "Load Features/Annotations ...");
2413 MenuItem outputFeatures = new MenuItem("Export Features ...");
2414 MenuItem outputAnnotations = new MenuItem("Export Annotations ...");
2416 MenuItem closeMenuItem = new MenuItem("Close");
2417 Menu editMenu = new Menu("Edit");
2418 Menu viewMenu = new Menu("View");
2419 Menu colourMenu = new Menu("Colour");
2420 Menu calculateMenu = new Menu("Calculate");
2421 MenuItem selectAllSequenceMenuItem = new MenuItem("Select all");
2422 MenuItem deselectAllSequenceMenuItem = new MenuItem("Deselect All");
2423 MenuItem invertSequenceMenuItem = new MenuItem("Invert Selection");
2424 MenuItem remove2LeftMenuItem = new MenuItem();
2425 MenuItem remove2RightMenuItem = new MenuItem();
2426 MenuItem removeGappedColumnMenuItem = new MenuItem();
2427 MenuItem removeAllGapsMenuItem = new MenuItem();
2428 CheckboxMenuItem viewBoxesMenuItem = new CheckboxMenuItem();
2429 CheckboxMenuItem viewTextMenuItem = new CheckboxMenuItem();
2430 MenuItem sortPairwiseMenuItem = new MenuItem();
2431 MenuItem sortIDMenuItem = new MenuItem();
2432 MenuItem sortGroupMenuItem = new MenuItem();
2433 MenuItem removeRedundancyMenuItem = new MenuItem();
2434 MenuItem pairwiseAlignmentMenuItem = new MenuItem();
2435 MenuItem PCAMenuItem = new MenuItem();
2436 MenuItem averageDistanceTreeMenuItem = new MenuItem();
2437 MenuItem neighbourTreeMenuItem = new MenuItem();
2438 BorderLayout borderLayout1 = new BorderLayout();
2439 public Label statusBar = new Label();
2440 Menu outputTextboxMenu = new Menu();
2441 MenuItem clustalColour = new MenuItem();
2442 MenuItem zappoColour = new MenuItem();
2443 MenuItem taylorColour = new MenuItem();
2444 MenuItem hydrophobicityColour = new MenuItem();
2445 MenuItem helixColour = new MenuItem();
2446 MenuItem strandColour = new MenuItem();
2447 MenuItem turnColour = new MenuItem();
2448 MenuItem buriedColour = new MenuItem();
2449 MenuItem userDefinedColour = new MenuItem();
2450 MenuItem PIDColour = new MenuItem();
2451 MenuItem BLOSUM62Colour = new MenuItem();
2452 MenuItem njTreeBlosumMenuItem = new MenuItem();
2453 MenuItem avDistanceTreeBlosumMenuItem = new MenuItem();
2454 CheckboxMenuItem annotationPanelMenuItem = new CheckboxMenuItem();
2455 CheckboxMenuItem colourTextMenuItem = new CheckboxMenuItem();
2456 MenuItem alProperties = new MenuItem("Alignment Properties...");
2457 MenuItem overviewMenuItem = new MenuItem();
2458 MenuItem undoMenuItem = new MenuItem();
2459 MenuItem redoMenuItem = new MenuItem();
2460 CheckboxMenuItem conservationMenuItem = new CheckboxMenuItem();
2461 MenuItem noColourmenuItem = new MenuItem();
2462 CheckboxMenuItem wrapMenuItem = new CheckboxMenuItem();
2463 CheckboxMenuItem renderGapsMenuItem = new CheckboxMenuItem();
2464 MenuItem findMenuItem = new MenuItem();
2465 CheckboxMenuItem abovePIDThreshold = new CheckboxMenuItem();
2466 MenuItem nucleotideColour = new MenuItem();
2467 MenuItem deleteGroups = new MenuItem();
2468 MenuItem delete = new MenuItem();
2469 MenuItem copy = new MenuItem();
2470 MenuItem cut = new MenuItem();
2471 Menu pasteMenu = new Menu();
2472 MenuItem pasteNew = new MenuItem();
2473 MenuItem pasteThis = new MenuItem();
2474 CheckboxMenuItem applyToAllGroups = new CheckboxMenuItem();
2475 MenuItem font = new MenuItem();
2476 CheckboxMenuItem scaleAbove = new CheckboxMenuItem();
2477 CheckboxMenuItem scaleLeft = new CheckboxMenuItem();
2478 CheckboxMenuItem scaleRight = new CheckboxMenuItem();
2479 MenuItem modifyPID = new MenuItem();
2480 MenuItem modifyConservation = new MenuItem();
2481 CheckboxMenuItem autoCalculate
2482 = new CheckboxMenuItem("Autocalculate Consensus", true);
2483 Menu sortByTreeMenu = new Menu();
2484 Menu sort = new Menu();
2485 Menu calculate = new Menu();
2486 MenuItem inputText = new MenuItem();
2487 Menu helpMenu = new Menu();
2488 MenuItem documentation = new MenuItem();
2489 MenuItem about = new MenuItem();
2490 CheckboxMenuItem seqLimits = new CheckboxMenuItem();
2491 CheckboxMenuItem centreColumnLabelFlag = new CheckboxMenuItem();
2493 private void jbInit()
2497 setMenuBar(alignFrameMenuBar);
2501 // dynamically fill save as menu with available formats
2502 for (int i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length;
2506 item = new MenuItem(jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS[i]);
2508 item.addActionListener(new java.awt.event.ActionListener()
2510 public void actionPerformed(ActionEvent e)
2512 outputText_actionPerformed(e);
2516 outputTextboxMenu.add(item);
2518 closeMenuItem.addActionListener(this);
2519 loadApplication.addActionListener(this);
2521 loadTree.addActionListener(this);
2522 loadAnnotations.addActionListener(this);
2523 outputFeatures.addActionListener(this);
2524 outputAnnotations.addActionListener(this);
2525 selectAllSequenceMenuItem.addActionListener(this);
2526 deselectAllSequenceMenuItem.addActionListener(this);
2527 invertSequenceMenuItem.addActionListener(this);
2528 remove2LeftMenuItem.setLabel("Remove Left");
2529 remove2LeftMenuItem.addActionListener(this);
2530 remove2RightMenuItem.setLabel("Remove Right");
2531 remove2RightMenuItem.addActionListener(this);
2532 removeGappedColumnMenuItem.setLabel("Remove Empty Columns");
2533 removeGappedColumnMenuItem.addActionListener(this);
2534 removeAllGapsMenuItem.setLabel("Remove All Gaps");
2535 removeAllGapsMenuItem.addActionListener(this);
2536 viewBoxesMenuItem.setLabel("Boxes");
2537 viewBoxesMenuItem.setState(true);
2538 viewBoxesMenuItem.addItemListener(this);
2539 viewTextMenuItem.setLabel("Text");
2540 viewTextMenuItem.setState(true);
2541 viewTextMenuItem.addItemListener(this);
2542 sortPairwiseMenuItem.setLabel("by Pairwise Identity");
2543 sortPairwiseMenuItem.addActionListener(this);
2544 sortIDMenuItem.setLabel("by ID");
2545 sortIDMenuItem.addActionListener(this);
2546 sortGroupMenuItem.setLabel("by Group");
2547 sortGroupMenuItem.addActionListener(this);
2548 removeRedundancyMenuItem.setLabel("Remove Redundancy...");
2549 removeRedundancyMenuItem.addActionListener(this);
2550 pairwiseAlignmentMenuItem.setLabel("Pairwise Alignments...");
2551 pairwiseAlignmentMenuItem.addActionListener(this);
2552 PCAMenuItem.setLabel("Principal Component Analysis");
2553 PCAMenuItem.addActionListener(this);
2554 averageDistanceTreeMenuItem.setLabel(
2555 "Average Distance Using % Identity");
2556 averageDistanceTreeMenuItem.addActionListener(this);
2557 neighbourTreeMenuItem.setLabel("Neighbour Joining Using % Identity");
2558 neighbourTreeMenuItem.addActionListener(this);
2559 statusBar.setBackground(Color.white);
2560 statusBar.setFont(new java.awt.Font("Verdana", 0, 11));
2561 statusBar.setText("Status bar");
2562 outputTextboxMenu.setLabel("Output to Textbox");
2563 clustalColour.setLabel("Clustalx");
2565 clustalColour.addActionListener(this);
2566 zappoColour.setLabel("Zappo");
2567 zappoColour.addActionListener(this);
2568 taylorColour.setLabel("Taylor");
2569 taylorColour.addActionListener(this);
2570 hydrophobicityColour.setLabel("Hydrophobicity");
2571 hydrophobicityColour.addActionListener(this);
2572 helixColour.setLabel("Helix Propensity");
2573 helixColour.addActionListener(this);
2574 strandColour.setLabel("Strand Propensity");
2575 strandColour.addActionListener(this);
2576 turnColour.setLabel("Turn Propensity");
2577 turnColour.addActionListener(this);
2578 buriedColour.setLabel("Buried Index");
2579 buriedColour.addActionListener(this);
2580 userDefinedColour.setLabel("User Defined...");
2581 userDefinedColour.addActionListener(this);
2582 PIDColour.setLabel("Percentage Identity");
2583 PIDColour.addActionListener(this);
2584 BLOSUM62Colour.setLabel("BLOSUM62 Score");
2585 BLOSUM62Colour.addActionListener(this);
2586 avDistanceTreeBlosumMenuItem.setLabel(
2587 "Average Distance Using BLOSUM62");
2588 avDistanceTreeBlosumMenuItem.addActionListener(this);
2589 njTreeBlosumMenuItem.setLabel("Neighbour Joining Using BLOSUM62");
2590 njTreeBlosumMenuItem.addActionListener(this);
2591 annotationPanelMenuItem.setLabel("Show Annotations");
2592 annotationPanelMenuItem.addItemListener(this);
2593 colourTextMenuItem.setLabel("Colour Text");
2594 colourTextMenuItem.addItemListener(this);
2595 alProperties.addActionListener(this);
2596 overviewMenuItem.setLabel("Overview Window");
2597 overviewMenuItem.addActionListener(this);
2598 undoMenuItem.setEnabled(false);
2599 undoMenuItem.setLabel("Undo");
2600 undoMenuItem.addActionListener(this);
2601 redoMenuItem.setEnabled(false);
2602 redoMenuItem.setLabel("Redo");
2603 redoMenuItem.addActionListener(this);
2604 conservationMenuItem.setLabel("by Conservation");
2605 conservationMenuItem.addItemListener(this);
2606 noColourmenuItem.setLabel("None");
2607 noColourmenuItem.addActionListener(this);
2608 wrapMenuItem.setLabel("Wrap");
2609 wrapMenuItem.addItemListener(this);
2610 renderGapsMenuItem.setLabel("Show Gaps");
2611 renderGapsMenuItem.setState(true);
2612 renderGapsMenuItem.addItemListener(this);
2613 findMenuItem.setLabel("Find...");
2614 findMenuItem.addActionListener(this);
2615 abovePIDThreshold.setLabel("Above Identity Threshold");
2616 abovePIDThreshold.addItemListener(this);
2617 nucleotideColour.setLabel("Nucleotide");
2618 nucleotideColour.addActionListener(this);
2619 deleteGroups.setLabel("Undefine Groups");
2620 deleteGroups.addActionListener(this);
2621 copy.setLabel("Copy");
2622 copy.addActionListener(this);
2623 cut.setLabel("Cut");
2624 cut.addActionListener(this);
2625 delete.setLabel("Delete");
2626 delete.addActionListener(this);
2627 pasteMenu.setLabel("Paste");
2628 pasteNew.setLabel("To New Alignment");
2629 pasteNew.addActionListener(this);
2630 pasteThis.setLabel("Add To This Alignment");
2631 pasteThis.addActionListener(this);
2632 applyToAllGroups.setLabel("Apply Colour To All Groups");
2633 applyToAllGroups.setState(true);
2634 applyToAllGroups.addItemListener(this);
2635 font.setLabel("Font...");
2636 font.addActionListener(this);
2637 scaleAbove.setLabel("Scale Above");
2638 scaleAbove.setState(true);
2639 scaleAbove.setEnabled(false);
2640 scaleAbove.addItemListener(this);
2641 scaleLeft.setEnabled(false);
2642 scaleLeft.setState(true);
2643 scaleLeft.setLabel("Scale Left");
2644 scaleLeft.addItemListener(this);
2645 scaleRight.setEnabled(false);
2646 scaleRight.setState(true);
2647 scaleRight.setLabel("Scale Right");
2648 scaleRight.addItemListener(this);
2649 modifyPID.setLabel("Modify Identity Threshold...");
2650 modifyPID.addActionListener(this);
2651 modifyConservation.setLabel("Modify Conservation Threshold...");
2652 modifyConservation.addActionListener(this);
2653 sortByTreeMenu.setLabel("By Tree Order");
2654 sort.setLabel("Sort");
2655 calculate.setLabel("Calculate Tree");
2656 autoCalculate.addItemListener(this);
2657 inputText.setLabel("Input from textbox");
2658 inputText.addActionListener(this);
2659 centreColumnLabelFlag.setLabel("Centre column labels");
2660 centreColumnLabelFlag.addItemListener(this);
2662 helpMenu.setLabel("Help");
2663 documentation.setLabel("Documentation");
2664 documentation.addActionListener(this);
2666 about.setLabel("About...");
2667 about.addActionListener(this);
2668 seqLimits.setState(true);
2669 seqLimits.setLabel("Show Sequence Limits");
2670 seqLimits.addItemListener(this);
2671 featureSettings.setLabel("Feature Settings...");
2672 featureSettings.addActionListener(this);
2673 sequenceFeatures.setLabel("Sequence Features");
2674 sequenceFeatures.addItemListener(this);
2675 sequenceFeatures.setState(false);
2676 annotationColour.setLabel("by Annotation...");
2677 annotationColour.addActionListener(this);
2678 invertSequenceMenuItem.setLabel("Invert Sequence Selection");
2679 invertColSel.setLabel("Invert Column Selection");
2680 menu1.setLabel("Show");
2681 showColumns.setLabel("All Columns ");
2682 showSeqs.setLabel("All Sequences");
2683 menu2.setLabel("Hide");
2684 hideColumns.setLabel("Selected Columns");
2685 hideSequences.setLabel("Selected Sequences");
2686 invertColSel.addActionListener(this);
2687 showColumns.addActionListener(this);
2688 showSeqs.addActionListener(this);
2689 hideColumns.addActionListener(this);
2690 hideSequences.addActionListener(this);
2691 formatMenu.setLabel("Format");
2692 selectMenu.setLabel("Select");
2693 newView.setLabel("New View");
2694 newView.addActionListener(this);
2695 alignFrameMenuBar.add(fileMenu);
2696 alignFrameMenuBar.add(editMenu);
2697 alignFrameMenuBar.add(selectMenu);
2698 alignFrameMenuBar.add(viewMenu);
2699 alignFrameMenuBar.add(formatMenu);
2700 alignFrameMenuBar.add(colourMenu);
2701 alignFrameMenuBar.add(calculateMenu);
2702 alignFrameMenuBar.add(helpMenu);
2704 fileMenu.add(inputText);
2705 fileMenu.add(loadTree);
2706 fileMenu.add(loadAnnotations);
2708 fileMenu.addSeparator();
2709 fileMenu.add(outputTextboxMenu);
2710 fileMenu.add(outputFeatures);
2711 fileMenu.add(outputAnnotations);
2713 if (jalviewServletURL != null)
2715 fileMenu.add(loadApplication);
2718 fileMenu.addSeparator();
2719 fileMenu.add(closeMenuItem);
2721 editMenu.add(undoMenuItem);
2722 editMenu.add(redoMenuItem);
2725 editMenu.add(pasteMenu);
2726 editMenu.add(delete);
2727 editMenu.addSeparator();
2728 editMenu.add(remove2LeftMenuItem);
2729 editMenu.add(remove2RightMenuItem);
2730 editMenu.add(removeGappedColumnMenuItem);
2731 editMenu.add(removeAllGapsMenuItem);
2732 editMenu.add(removeRedundancyMenuItem);
2733 viewMenu.add(newView);
2734 viewMenu.addSeparator();
2735 viewMenu.add(menu1);
2736 viewMenu.add(menu2);
2737 viewMenu.addSeparator();
2738 viewMenu.add(annotationPanelMenuItem);
2739 viewMenu.addSeparator();
2740 viewMenu.add(sequenceFeatures);
2741 viewMenu.add(featureSettings);
2742 viewMenu.addSeparator();
2743 viewMenu.add(alProperties);
2744 viewMenu.addSeparator();
2745 viewMenu.add(overviewMenuItem);
2746 colourMenu.add(applyToAllGroups);
2747 colourMenu.addSeparator();
2748 colourMenu.add(noColourmenuItem);
2749 colourMenu.add(clustalColour);
2750 colourMenu.add(BLOSUM62Colour);
2751 colourMenu.add(PIDColour);
2752 colourMenu.add(zappoColour);
2753 colourMenu.add(taylorColour);
2754 colourMenu.add(hydrophobicityColour);
2755 colourMenu.add(helixColour);
2756 colourMenu.add(strandColour);
2757 colourMenu.add(turnColour);
2758 colourMenu.add(buriedColour);
2759 colourMenu.add(nucleotideColour);
2760 colourMenu.add(userDefinedColour);
2761 colourMenu.addSeparator();
2762 colourMenu.add(conservationMenuItem);
2763 colourMenu.add(modifyConservation);
2764 colourMenu.add(abovePIDThreshold);
2765 colourMenu.add(modifyPID);
2766 colourMenu.add(annotationColour);
2767 calculateMenu.add(sort);
2768 calculateMenu.add(calculate);
2769 calculateMenu.addSeparator();
2770 calculateMenu.add(pairwiseAlignmentMenuItem);
2771 calculateMenu.add(PCAMenuItem);
2772 calculateMenu.add(autoCalculate);
2773 this.add(statusBar, BorderLayout.SOUTH);
2774 pasteMenu.add(pasteNew);
2775 pasteMenu.add(pasteThis);
2776 sort.add(sortIDMenuItem);
2777 sort.add(sortByTreeMenu);
2778 sort.add(sortGroupMenuItem);
2779 sort.add(sortPairwiseMenuItem);
2780 calculate.add(averageDistanceTreeMenuItem);
2781 calculate.add(neighbourTreeMenuItem);
2782 calculate.add(avDistanceTreeBlosumMenuItem);
2783 calculate.add(njTreeBlosumMenuItem);
2784 helpMenu.add(documentation);
2785 helpMenu.add(about);
2786 menu1.add(showColumns);
2787 menu1.add(showSeqs);
2788 menu2.add(hideColumns);
2789 menu2.add(hideSequences);
2790 formatMenu.add(font);
2791 formatMenu.add(seqLimits);
2792 formatMenu.add(wrapMenuItem);
2793 formatMenu.add(scaleAbove);
2794 formatMenu.add(scaleLeft);
2795 formatMenu.add(scaleRight);
2796 formatMenu.add(viewBoxesMenuItem);
2797 formatMenu.add(viewTextMenuItem);
2798 formatMenu.add(colourTextMenuItem);
2799 formatMenu.add(renderGapsMenuItem);
2800 formatMenu.add(centreColumnLabelFlag);
2801 selectMenu.add(findMenuItem);
2802 selectMenu.addSeparator();
2803 selectMenu.add(selectAllSequenceMenuItem);
2804 selectMenu.add(deselectAllSequenceMenuItem);
2805 selectMenu.add(invertSequenceMenuItem);
2806 selectMenu.add(invertColSel);
2807 selectMenu.add(deleteGroups);
2809 MenuItem featureSettings = new MenuItem();
2810 CheckboxMenuItem sequenceFeatures = new CheckboxMenuItem();
2811 MenuItem annotationColour = new MenuItem();
2812 MenuItem invertColSel = new MenuItem();
2813 Menu menu1 = new Menu();
2814 MenuItem showColumns = new MenuItem();
2815 MenuItem showSeqs = new MenuItem();
2816 Menu menu2 = new Menu();
2817 MenuItem hideColumns = new MenuItem();
2818 MenuItem hideSequences = new MenuItem();
2819 Menu formatMenu = new Menu();
2820 Menu selectMenu = new Menu();
2821 MenuItem newView = new MenuItem();
2824 * Attach the alignFrame panels after embedding menus, if necessary.
2825 * This used to be called setEmbedded, but is now creates the
2826 * dropdown menus in a platform independent manner
2827 * to avoid OSX/Mac menu appendage daftness.
2829 * @param reallyEmbedded true to attach the view to the applet area on the page rather than in a new window
2831 public void createAlignFrameWindow(boolean reallyEmbedded, String title)
2836 // Explicly build the embedded menu panel for the on-page applet
2838 // view cannot be closed if its actually on the page
2839 fileMenu.remove(closeMenuItem);
2840 fileMenu.remove(3); // Remove Seperator
2841 embeddedMenu = makeEmbeddedPopupMenu(alignFrameMenuBar, "Arial", Font.PLAIN, 10, false); // use our own fonts.
2842 // and actually add the components to the applet area
2843 viewport.applet.setLayout(new BorderLayout());
2844 viewport.applet.add(embeddedMenu, BorderLayout.NORTH);
2845 viewport.applet.add(statusBar, BorderLayout.SOUTH);
2846 alignPanel.setSize(viewport.applet.getSize().width,
2847 viewport.applet.getSize().height
2848 - embeddedMenu.HEIGHT - statusBar.HEIGHT);
2849 viewport.applet.add(alignPanel, BorderLayout.CENTER);
2850 viewport.applet.validate();
2853 // test and embed menu bar if necessary.
2855 if (embedMenuIfNeeded(alignPanel)) {
2856 // adjust for status bar height too
2857 alignPanel.setSize(getSize().width,
2859 - statusBar.HEIGHT);
2861 add(statusBar, BorderLayout.SOUTH);
2862 add(alignPanel, BorderLayout.CENTER);
2863 // and register with the applet so it can pass external API calls to us
2864 jalview.bin.JalviewLite.addFrame(this, title, DEFAULT_WIDTH,