2 * Jalview - A Sequence Alignment Editor and Viewer
3 * Copyright (C) 2007 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
20 package jalview.appletgui;
27 import java.awt.event.*;
29 import jalview.analysis.*;
30 import jalview.commands.*;
31 import jalview.datamodel.*;
33 import jalview.schemes.*;
35 public class AlignFrame
36 extends EmbmenuFrame implements ActionListener,
37 ItemListener, KeyListener
39 public AlignmentPanel alignPanel;
40 public AlignViewport viewport;
41 int DEFAULT_WIDTH = 700;
42 int DEFAULT_HEIGHT = 500;
44 String jalviewServletURL;
46 public AlignFrame(AlignmentI al,
47 jalview.bin.JalviewLite applet,
54 jalviewServletURL = applet.getParameter("APPLICATION_URL");
66 viewport = new AlignViewport(al, applet);
67 alignPanel = new AlignmentPanel(this, viewport);
69 viewport.updateConservation(alignPanel);
70 viewport.updateConsensus(alignPanel);
72 annotationPanelMenuItem.setState(viewport.showAnnotation);
74 seqLimits.setState(viewport.showJVSuffix);
78 String param = applet.getParameter("sortBy");
81 if (param.equalsIgnoreCase("Id"))
83 sortIDMenuItem_actionPerformed();
85 else if (param.equalsIgnoreCase("Pairwise Identity"))
87 sortPairwiseMenuItem_actionPerformed();
91 param = applet.getParameter("wrap");
94 if (param.equalsIgnoreCase("true"))
96 wrapMenuItem.setState(true);
97 wrapMenuItem_actionPerformed();
100 param = applet.getParameter("centrecolumnlabels");
103 centreColumnLabelFlag.setState(true);
104 centreColumnLabelFlag_stateChanged();
109 param = applet.getParameter("windowWidth");
112 int width = Integer.parseInt(param);
113 DEFAULT_WIDTH = width;
115 param = applet.getParameter("windowHeight");
118 int height = Integer.parseInt(param);
119 DEFAULT_HEIGHT = height;
127 //Some JVMS send keyevents to Top frame or lowest panel,
128 //Havent worked out why yet. So add to both this frame and seqCanvas for now
129 this.addKeyListener(this);
130 alignPanel.seqPanel.seqCanvas.addKeyListener(this);
131 alignPanel.idPanel.idCanvas.addKeyListener(this);
132 alignPanel.scalePanel.addKeyListener(this);
133 alignPanel.annotationPanel.addKeyListener(this);
134 createAlignFrameWindow(embedded, title);
135 alignPanel.validate();
136 alignPanel.paintAlignment(true);
139 public AlignViewport getAlignViewport()
144 public SeqCanvas getSeqcanvas()
146 return alignPanel.seqPanel.seqCanvas;
152 * @param String DOCUMENT ME!
155 public void parseFeaturesFile(String file, String type)
157 Hashtable featureLinks = new Hashtable();
158 boolean featuresFile = false;
161 featuresFile = new jalview.io.FeaturesFile(file,
162 type).parse(viewport.alignment,
163 alignPanel.seqPanel.seqCanvas.
164 getFeatureRenderer().featureColours,
170 ex.printStackTrace();
175 if (featureLinks.size() > 0)
177 alignPanel.seqPanel.seqCanvas
178 .getFeatureRenderer().featureLinks = featureLinks;
180 viewport.showSequenceFeatures = true;
181 sequenceFeatures.setState(true);
182 alignPanel.paintAlignment(true);
187 public void keyPressed(KeyEvent evt)
189 if (viewport.cursorMode &&
190 ( (evt.getKeyCode() >= KeyEvent.VK_0 &&
191 evt.getKeyCode() <= KeyEvent.VK_9)
193 (evt.getKeyCode() >= KeyEvent.VK_NUMPAD0 &&
194 evt.getKeyCode() <= KeyEvent.VK_NUMPAD9)
196 && Character.isDigit(evt.getKeyChar()))
197 alignPanel.seqPanel.numberPressed(evt.getKeyChar());
200 switch (evt.getKeyCode())
202 case 27: // escape key
203 deselectAllSequenceMenuItem_actionPerformed();
206 if (evt.isControlDown() || evt.isMetaDown())
208 cut_actionPerformed();
212 if (viewport.cursorMode && !evt.isControlDown())
214 alignPanel.seqPanel.setCursorColumn();
216 if (evt.isControlDown() || evt.isMetaDown())
218 copy_actionPerformed();
222 if (evt.isControlDown())
224 paste(evt.isShiftDown());
228 if (evt.isControlDown() || evt.isMetaDown())
230 selectAllSequenceMenuItem_actionPerformed();
233 case KeyEvent.VK_DOWN:
234 if (viewport.cursorMode)
236 alignPanel.seqPanel.moveCursor(0, 1);
240 moveSelectedSequences(false);
245 if (viewport.cursorMode)
247 alignPanel.seqPanel.moveCursor(0, -1);
251 moveSelectedSequences(true);
255 case KeyEvent.VK_LEFT:
256 if (evt.isAltDown() || !viewport.cursorMode)
257 slideSequences(false,
258 alignPanel.seqPanel.getKeyboardNo1());
260 alignPanel.seqPanel.moveCursor( -1, 0);
263 case KeyEvent.VK_RIGHT:
264 if (evt.isAltDown() || !viewport.cursorMode)
266 alignPanel.seqPanel.getKeyboardNo1());
268 alignPanel.seqPanel.moveCursor( 1, 0);
271 case KeyEvent.VK_SPACE:
272 if (viewport.cursorMode)
274 alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown()
281 case KeyEvent.VK_DELETE:
282 case KeyEvent.VK_BACK_SPACE:
283 if (viewport.cursorMode)
285 alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown()
291 cut_actionPerformed();
292 alignPanel.seqPanel.seqCanvas.repaint();
297 if (viewport.cursorMode)
299 alignPanel.seqPanel.setCursorRow();
303 if (viewport.cursorMode)
305 alignPanel.seqPanel.setCursorPosition();
309 case KeyEvent.VK_ENTER:
310 case KeyEvent.VK_COMMA:
311 if (viewport.cursorMode)
313 alignPanel.seqPanel.setCursorRowAndColumn();
318 if (viewport.cursorMode)
320 alignPanel.seqPanel.setSelectionAreaAtCursor(true);
324 if (viewport.cursorMode)
326 alignPanel.seqPanel.setSelectionAreaAtCursor(false);
331 viewport.cursorMode = !viewport.cursorMode;
332 statusBar.setText("Keyboard editing mode is " +
333 (viewport.cursorMode ? "on" : "off"));
334 if (viewport.cursorMode)
336 alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes;
337 alignPanel.seqPanel.seqCanvas.cursorY = viewport.startSeq;
342 if (evt.isControlDown())
344 findMenuItem_actionPerformed();
350 boolean toggleSeqs = !evt.isControlDown();
351 boolean toggleCols = !evt.isShiftDown();
352 boolean hide = false;
353 SequenceGroup sg = viewport.getSelectionGroup();
357 if (sg != null && sg.getSize() != viewport.alignment.getHeight())
360 viewport.hideAllSelectedSeqs();
362 else if (! (toggleCols && viewport.colSel.getSelected().size() > 0))
364 viewport.showAllHiddenSeqs();
370 if (viewport.colSel.getSelected().size() > 0)
372 viewport.hideSelectedColumns();
375 viewport.selectionGroup = sg;
380 viewport.showAllHiddenColumns();
386 case KeyEvent.VK_PAGE_UP:
387 if (viewport.wrapAlignment)
389 alignPanel.scrollUp(true);
393 alignPanel.setScrollValues(viewport.startRes,
395 - viewport.endSeq + viewport.startSeq);
399 case KeyEvent.VK_PAGE_DOWN:
400 if (viewport.wrapAlignment)
402 alignPanel.scrollUp(false);
406 alignPanel.setScrollValues(viewport.startRes,
408 + viewport.endSeq - viewport.startSeq);
413 if (evt.isControlDown())
415 undoMenuItem_actionPerformed();
420 if (evt.isControlDown())
422 redoMenuItem_actionPerformed();
427 if (evt.isControlDown())
434 if (evt.isControlDown())
436 trimAlignment(false);
441 if (evt.isControlDown())
443 if (evt.isShiftDown())
445 this.removeAllGapsMenuItem_actionPerformed();
449 removeGappedColumnMenuItem_actionPerformed();
454 if (evt.isControlDown())
458 viewport.invertColumnSelection();
462 this.invertSequenceMenuItem_actionPerformed();
468 if (evt.isControlDown())
470 this.deleteGroups_actionPerformed();
475 if (evt.isControlDown())
482 alignPanel.paintAlignment(true);
485 public void keyReleased(KeyEvent evt)
488 public void keyTyped(KeyEvent evt)
491 public void itemStateChanged(ItemEvent evt)
493 if (evt.getSource() == colourTextMenuItem)
495 colourTextMenuItem_actionPerformed();
497 else if (evt.getSource() == wrapMenuItem)
499 wrapMenuItem_actionPerformed();
501 else if (evt.getSource() == scaleAbove)
503 viewport.setScaleAboveWrapped(scaleAbove.getState());
505 else if (evt.getSource() == scaleLeft)
507 viewport.setScaleLeftWrapped(scaleLeft.getState());
509 else if (evt.getSource() == scaleRight)
511 viewport.setScaleRightWrapped(scaleRight.getState());
513 else if (evt.getSource() == seqLimits)
515 seqLimits_itemStateChanged();
517 else if (evt.getSource() == viewBoxesMenuItem)
519 viewport.setShowBoxes(viewBoxesMenuItem.getState());
521 else if (evt.getSource() == viewTextMenuItem)
523 viewport.setShowText(viewTextMenuItem.getState());
525 else if (evt.getSource() == renderGapsMenuItem)
527 viewport.setRenderGaps(renderGapsMenuItem.getState());
529 else if (evt.getSource() == annotationPanelMenuItem)
531 viewport.setShowAnnotation(annotationPanelMenuItem.getState());
532 alignPanel.setAnnotationVisible(annotationPanelMenuItem.getState());
534 else if (evt.getSource() == sequenceFeatures)
536 viewport.showSequenceFeatures(sequenceFeatures.getState());
537 alignPanel.seqPanel.seqCanvas.repaint();
539 else if (evt.getSource() == conservationMenuItem)
541 conservationMenuItem_actionPerformed();
543 else if (evt.getSource() == abovePIDThreshold)
545 abovePIDThreshold_actionPerformed();
547 else if (evt.getSource() == applyToAllGroups)
549 viewport.setColourAppliesToAllGroups(applyToAllGroups.getState());
551 else if (evt.getSource() == autoCalculate)
553 viewport.autocalculateConsensus = autoCalculate.getState();
554 } else if (evt.getSource() == this.centreColumnLabelFlag)
556 centreColumnLabelFlag_stateChanged();
559 alignPanel.paintAlignment(true);
562 private void centreColumnLabelFlag_stateChanged()
564 viewport.centreColumnLabels = centreColumnLabelFlag.getState();
565 this.alignPanel.annotationPanel.repaint();
568 public void actionPerformed(ActionEvent evt)
570 Object source = evt.getSource();
572 if (source == inputText)
574 inputText_actionPerformed();
576 else if (source == loadTree)
578 loadTree_actionPerformed();
580 else if (source == loadApplication)
582 launchFullApplication();
584 else if (source == loadAnnotations)
588 else if (source == outputAnnotations)
590 outputAnnotations(true);
592 else if (source == outputFeatures)
594 outputFeatures(true, "Jalview");
596 else if (source == closeMenuItem)
598 closeMenuItem_actionPerformed();
600 else if (source == copy)
602 copy_actionPerformed();
604 else if (source == undoMenuItem)
606 undoMenuItem_actionPerformed();
608 else if (source == redoMenuItem)
610 redoMenuItem_actionPerformed();
612 else if (source == inputText)
614 inputText_actionPerformed();
616 else if (source == closeMenuItem)
618 closeMenuItem_actionPerformed();
620 else if (source == undoMenuItem)
622 undoMenuItem_actionPerformed();
624 else if (source == redoMenuItem)
626 redoMenuItem_actionPerformed();
628 else if (source == copy)
630 copy_actionPerformed();
632 else if (source == pasteNew)
634 pasteNew_actionPerformed();
636 else if (source == pasteThis)
638 pasteThis_actionPerformed();
640 else if (source == cut)
642 cut_actionPerformed();
644 else if (source == delete)
646 delete_actionPerformed();
648 else if (source == deleteGroups)
650 deleteGroups_actionPerformed();
652 else if (source == selectAllSequenceMenuItem)
654 selectAllSequenceMenuItem_actionPerformed();
656 else if (source == deselectAllSequenceMenuItem)
658 deselectAllSequenceMenuItem_actionPerformed();
660 else if (source == invertSequenceMenuItem)
662 invertSequenceMenuItem_actionPerformed();
664 else if (source == invertColSel)
666 viewport.invertColumnSelection();
667 alignPanel.paintAlignment(true);
669 else if (source == remove2LeftMenuItem)
673 else if (source == remove2RightMenuItem)
675 trimAlignment(false);
677 else if (source == removeGappedColumnMenuItem)
679 removeGappedColumnMenuItem_actionPerformed();
681 else if (source == removeAllGapsMenuItem)
683 removeAllGapsMenuItem_actionPerformed();
685 else if (source == findMenuItem)
687 findMenuItem_actionPerformed();
689 else if (source == font)
691 new FontChooser(alignPanel);
693 else if (source == newView)
697 else if (source == showColumns)
699 viewport.showAllHiddenColumns();
700 alignPanel.paintAlignment(true);
702 else if (source == showSeqs)
704 viewport.showAllHiddenSeqs();
706 else if (source == hideColumns)
708 viewport.hideSelectedColumns();
709 alignPanel.paintAlignment(true);
711 else if (source == hideSequences && viewport.getSelectionGroup() != null)
713 viewport.hideAllSelectedSeqs();
715 else if (source == featureSettings)
717 new FeatureSettings(alignPanel);
719 else if(source== alProperties)
721 StringBuffer contents = new StringBuffer();
724 int min=Integer.MAX_VALUE, max=0;
725 for(int i=0; i<viewport.alignment.getHeight(); i++)
727 int size = viewport.alignment.getSequenceAt(i).getEnd()
728 -viewport.alignment.getSequenceAt(i).getStart();
735 avg = avg/(float)viewport.alignment.getHeight();
737 contents.append("\nSequences: "+ viewport.alignment.getHeight());
738 contents.append("\nMinimum Sequence Length: "+min);
739 contents.append("\nMaximum Sequence Length: "+max);
740 contents.append("\nAverage Length: "+(int)avg);
742 if (((Alignment)viewport.alignment).alignmentProperties != null)
744 Hashtable props = ((Alignment)viewport.alignment).alignmentProperties;
745 Enumeration en = props.keys();
746 while(en.hasMoreElements())
748 String key = en.nextElement().toString();
749 contents.append("\n"+key+"\t"+props.get(key));
753 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this);
754 cap.setText(contents.toString());
755 Frame frame = new Frame();
757 jalview.bin.JalviewLite.addFrame(frame,
758 "Alignment Properties: "+getTitle()
761 else if (source == overviewMenuItem)
763 overviewMenuItem_actionPerformed();
765 else if (source == noColourmenuItem)
769 else if (source == clustalColour)
771 abovePIDThreshold.setState(false);
772 changeColour(new ClustalxColourScheme(viewport.alignment.getSequences(),
773 viewport.alignment.getWidth()));
775 else if (source == zappoColour)
777 changeColour(new ZappoColourScheme());
779 else if (source == taylorColour)
781 changeColour(new TaylorColourScheme());
783 else if (source == hydrophobicityColour)
785 changeColour(new HydrophobicColourScheme());
787 else if (source == helixColour)
789 changeColour(new HelixColourScheme());
791 else if (source == strandColour)
793 changeColour(new StrandColourScheme());
795 else if (source == turnColour)
797 changeColour(new TurnColourScheme());
799 else if (source == buriedColour)
801 changeColour(new BuriedColourScheme());
803 else if (source == nucleotideColour)
805 changeColour(new NucleotideColourScheme());
807 else if (source == modifyPID)
809 modifyPID_actionPerformed();
811 else if (source == modifyConservation)
813 modifyConservation_actionPerformed();
815 else if (source == userDefinedColour)
817 new UserDefinedColours(alignPanel, null);
819 else if (source == PIDColour)
821 changeColour(new PIDColourScheme());
823 else if (source == BLOSUM62Colour)
825 changeColour(new Blosum62ColourScheme());
827 else if (source == annotationColour)
829 new AnnotationColourChooser(viewport, alignPanel);
831 else if (source == sortPairwiseMenuItem)
833 sortPairwiseMenuItem_actionPerformed();
835 else if (source == sortIDMenuItem)
837 sortIDMenuItem_actionPerformed();
839 else if (source == sortGroupMenuItem)
841 sortGroupMenuItem_actionPerformed();
843 else if (source == removeRedundancyMenuItem)
845 removeRedundancyMenuItem_actionPerformed();
847 else if (source == pairwiseAlignmentMenuItem)
849 pairwiseAlignmentMenuItem_actionPerformed();
851 else if (source == PCAMenuItem)
853 PCAMenuItem_actionPerformed();
855 else if (source == averageDistanceTreeMenuItem)
857 averageDistanceTreeMenuItem_actionPerformed();
859 else if (source == neighbourTreeMenuItem)
861 neighbourTreeMenuItem_actionPerformed();
863 else if (source == njTreeBlosumMenuItem)
865 njTreeBlosumMenuItem_actionPerformed();
867 else if (source == avDistanceTreeBlosumMenuItem)
869 avTreeBlosumMenuItem_actionPerformed();
871 else if (source == documentation)
873 documentation_actionPerformed();
875 else if (source == about)
877 about_actionPerformed();
882 public void inputText_actionPerformed()
884 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
885 Frame frame = new Frame();
887 jalview.bin.JalviewLite.addFrame(frame, "Cut & Paste Input", 500, 500);
890 protected void outputText_actionPerformed(ActionEvent e)
892 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
893 Frame frame = new Frame();
895 jalview.bin.JalviewLite.addFrame(frame,
896 "Alignment output - " + e.getActionCommand(),
898 cap.setText(new AppletFormatAdapter().formatSequences(e.getActionCommand(),
899 viewport.getAlignment(),
900 viewport.showJVSuffix));
903 public void loadAnnotations()
905 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
906 cap.setText("Paste your features / annotations file here.");
907 cap.setAnnotationImport();
908 Frame frame = new Frame();
910 jalview.bin.JalviewLite.addFrame(frame, "Paste Annotations ", 400, 300);
914 public String outputAnnotations(boolean displayTextbox)
916 String annotation = new AnnotationFile().printAnnotations(
917 viewport.showAnnotation ? viewport.alignment.getAlignmentAnnotation() : null,
918 viewport.alignment.getGroups(),
919 ((Alignment) viewport.alignment).alignmentProperties);
923 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this);
924 Frame frame = new Frame();
926 jalview.bin.JalviewLite.addFrame(frame,
929 cap.setText(annotation);
935 public String outputFeatures(boolean displayTextbox, String format)
938 if (format.equalsIgnoreCase("Jalview"))
940 features = new FeaturesFile().printJalviewFormat(
941 viewport.alignment.getSequencesArray(),
942 viewport.featuresDisplayed);
946 features = new FeaturesFile().printGFFFormat(
947 viewport.alignment.getSequencesArray(),
948 viewport.featuresDisplayed);
953 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this);
954 Frame frame = new Frame();
956 jalview.bin.JalviewLite.addFrame(frame,
960 cap.setText(features);
966 void launchFullApplication()
968 StringBuffer url = new StringBuffer(jalviewServletURL);
970 url.append("?open=" +
971 appendProtocol(viewport.applet.getParameter("file")));
973 if (viewport.applet.getParameter("features") != null)
975 url.append("&features=");
976 url.append(appendProtocol(viewport.applet.getParameter("features")));
979 if (viewport.applet.getParameter("annotations") != null)
981 url.append("&annotations=");
982 url.append(appendProtocol(viewport.applet.getParameter("annotations")));
985 if (viewport.applet.getParameter("jnetfile") != null)
987 url.append("&annotations=");
988 url.append(appendProtocol(viewport.applet.getParameter("jnetfile")));
991 if (viewport.applet.getParameter("defaultColour") != null)
993 url.append("&colour=" +
994 removeWhiteSpace(viewport.applet.getParameter("defaultColour"))
998 if (viewport.applet.getParameter("userDefinedColour") != null)
1000 url.append("&colour=" +
1001 removeWhiteSpace(viewport.applet.getParameter(
1002 "userDefinedColour"))
1005 if (viewport.applet.getParameter("tree")!=null)
1007 url.append("&tree="+appendProtocol(viewport.applet.getParameter("tree")));
1009 if (viewport.applet.getParameter("treeFile")!=null)
1011 url.append("&tree="+appendProtocol(viewport.applet.getParameter("treeFile")));
1014 showURL(url.toString(), "FULL_APP");
1017 String removeWhiteSpace(String colour)
1019 StringBuffer sb = new StringBuffer();
1020 for (int i = 0; i < colour.length(); i++)
1022 if (Character.isWhitespace(colour.charAt(i)))
1028 sb.append(colour.charAt(i));
1032 return sb.toString();
1035 String appendProtocol(String url)
1040 url = URLEncoder.encode(url);
1042 /* When we finally deprecate 1.1 compatibility,
1043 * we can start to use URLEncoder.encode(url,"UTF-8")
1044 * and then we'll need this catch:
1045 * catch (UnsupportedEncodingException ex)
1047 System.err.println("WARNING - IMPLEMENTATION ERROR - UNSUPPORTED ENCODING EXCEPTION FOR "+url);
1048 ex.printStackTrace();
1050 catch (java.net.MalformedURLException ex)
1052 url = viewport.applet.getCodeBase() + url;
1057 public void closeMenuItem_actionPerformed()
1059 PaintRefresher.RemoveComponent(alignPanel);
1060 PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas);
1061 PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas);
1063 if (PaintRefresher.components.size() == 0 && viewport.applet == null)
1074 void updateEditMenuBar()
1077 if (viewport.historyList.size() > 0)
1079 undoMenuItem.setEnabled(true);
1080 CommandI command = (CommandI) viewport.historyList.peek();
1081 undoMenuItem.setLabel("Undo " + command.getDescription());
1085 undoMenuItem.setEnabled(false);
1086 undoMenuItem.setLabel("Undo");
1089 if (viewport.redoList.size() > 0)
1091 redoMenuItem.setEnabled(true);
1093 CommandI command = (CommandI) viewport.redoList.peek();
1094 redoMenuItem.setLabel("Redo " + command.getDescription());
1098 redoMenuItem.setEnabled(false);
1099 redoMenuItem.setLabel("Redo");
1103 public void addHistoryItem(CommandI command)
1105 if (command.getSize() > 0)
1107 viewport.historyList.push(command);
1108 viewport.redoList.removeAllElements();
1109 updateEditMenuBar();
1110 viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1116 * @param e DOCUMENT ME!
1118 protected void undoMenuItem_actionPerformed()
1120 if (viewport.historyList.size() < 1)
1125 CommandI command = (CommandI) viewport.historyList.pop();
1126 viewport.redoList.push(command);
1127 command.undoCommand(null);
1129 AlignViewport originalSource = getOriginatingSource(command);
1131 originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1132 updateEditMenuBar();
1133 originalSource.firePropertyChange("alignment", null,
1134 originalSource.alignment.getSequences());
1140 * @param e DOCUMENT ME!
1142 protected void redoMenuItem_actionPerformed()
1144 if (viewport.redoList.size() < 1)
1149 CommandI command = (CommandI) viewport.redoList.pop();
1150 viewport.historyList.push(command);
1151 command.doCommand(null);
1153 AlignViewport originalSource = getOriginatingSource(command);
1154 originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1156 updateEditMenuBar();
1157 originalSource.firePropertyChange("alignment", null,
1158 originalSource.alignment.getSequences());
1161 AlignViewport getOriginatingSource(CommandI command)
1163 AlignViewport originalSource = null;
1164 //For sequence removal and addition, we need to fire
1165 //the property change event FROM the viewport where the
1166 //original alignment was altered
1167 AlignmentI al = null;
1168 if (command instanceof EditCommand)
1170 EditCommand editCommand = (EditCommand) command;
1171 al = editCommand.getAlignment();
1172 Vector comps = (Vector) PaintRefresher.components
1173 .get(viewport.getSequenceSetId());
1174 for (int i = 0; i < comps.size(); i++)
1176 if (comps.elementAt(i) instanceof AlignmentPanel)
1178 if (al == ( (AlignmentPanel) comps.elementAt(i)).av.alignment)
1180 originalSource = ( (AlignmentPanel) comps.elementAt(i)).av;
1187 if (originalSource == null)
1189 //The original view is closed, we must validate
1190 //the current view against the closed view first
1193 PaintRefresher.validateSequences(al, viewport.alignment);
1196 originalSource = viewport;
1199 return originalSource;
1202 public void moveSelectedSequences(boolean up)
1204 SequenceGroup sg = viewport.getSelectionGroup();
1212 for (int i = 1; i < viewport.alignment.getHeight(); i++)
1214 SequenceI seq = viewport.alignment.getSequenceAt(i);
1215 if (!sg.getSequences(null).contains(seq))
1220 SequenceI temp = viewport.alignment.getSequenceAt(i - 1);
1221 if (sg.getSequences(null).contains(temp))
1226 viewport.alignment.getSequences().setElementAt(temp, i);
1227 viewport.alignment.getSequences().setElementAt(seq, i - 1);
1232 for (int i = viewport.alignment.getHeight() - 2; i > -1; i--)
1234 SequenceI seq = viewport.alignment.getSequenceAt(i);
1235 if (!sg.getSequences(viewport.hiddenRepSequences).contains(seq))
1240 SequenceI temp = viewport.alignment.getSequenceAt(i + 1);
1241 if (sg.getSequences(viewport.hiddenRepSequences).contains(temp))
1246 viewport.alignment.getSequences().setElementAt(temp, i);
1247 viewport.alignment.getSequences().setElementAt(seq, i + 1);
1251 alignPanel.paintAlignment(true);
1254 synchronized void slideSequences(boolean right, int size)
1256 Vector sg = new Vector();
1257 if(viewport.cursorMode)
1259 sg.addElement(viewport.alignment.getSequenceAt(
1260 alignPanel.seqPanel.seqCanvas.cursorY));
1262 else if(viewport.getSelectionGroup()!=null
1263 && viewport.getSelectionGroup().getSize()!=viewport.alignment.getHeight())
1265 sg = viewport.getSelectionGroup().getSequences(
1266 viewport.hiddenRepSequences);
1274 Vector invertGroup = new Vector();
1276 for (int i = 0; i < viewport.alignment.getHeight(); i++)
1278 if(!sg.contains(viewport.alignment.getSequenceAt(i)))
1279 invertGroup.addElement(viewport.alignment.getSequenceAt(i));
1282 SequenceI[] seqs1 = new SequenceI[sg.size()];
1283 for (int i = 0; i < sg.size(); i++)
1284 seqs1[i] = (SequenceI) sg.elementAt(i);
1286 SequenceI[] seqs2 = new SequenceI[invertGroup.size()];
1287 for (int i = 0; i < invertGroup.size(); i++)
1288 seqs2[i] = (SequenceI) invertGroup.elementAt(i);
1290 SlideSequencesCommand ssc;
1292 ssc = new SlideSequencesCommand("Slide Sequences",
1294 viewport.getGapCharacter()
1297 ssc = new SlideSequencesCommand("Slide Sequences",
1299 viewport.getGapCharacter()
1302 int groupAdjustment = 0;
1303 if (ssc.getGapsInsertedBegin() && right)
1305 if (viewport.cursorMode)
1306 alignPanel.seqPanel.moveCursor(size, 0);
1308 groupAdjustment = size;
1310 else if (!ssc.getGapsInsertedBegin() && !right)
1312 if (viewport.cursorMode)
1313 alignPanel.seqPanel.moveCursor( -size, 0);
1315 groupAdjustment = -size;
1318 if (groupAdjustment != 0)
1320 viewport.getSelectionGroup().setStartRes(
1321 viewport.getSelectionGroup().getStartRes() + groupAdjustment);
1322 viewport.getSelectionGroup().setEndRes(
1323 viewport.getSelectionGroup().getEndRes() + groupAdjustment);
1327 boolean appendHistoryItem = false;
1328 if(viewport.historyList!=null
1329 && viewport.historyList.size()>0
1330 && viewport.historyList.peek() instanceof SlideSequencesCommand)
1332 appendHistoryItem = ssc.appendSlideCommand(
1333 (SlideSequencesCommand)viewport.historyList.peek())
1337 if(!appendHistoryItem)
1338 addHistoryItem(ssc);
1343 static StringBuffer copiedSequences;
1344 static Vector copiedHiddenColumns;
1345 protected void copy_actionPerformed()
1347 if (viewport.getSelectionGroup() == null)
1352 SequenceGroup sg = viewport.getSelectionGroup();
1353 copiedSequences = new StringBuffer();
1354 Hashtable orderedSeqs = new Hashtable();
1355 for (int i = 0; i < sg.getSize(); i++)
1357 SequenceI seq = sg.getSequenceAt(i);
1358 int index = viewport.alignment.findIndex(seq);
1359 orderedSeqs.put(index + "", seq);
1362 int index = 0, startRes, endRes;
1365 if (viewport.hasHiddenColumns && viewport.getSelectionGroup() != null)
1367 copiedHiddenColumns = new Vector();
1368 int hiddenOffset = viewport.getSelectionGroup().getStartRes();
1369 for (int i = 0; i < viewport.getColumnSelection().getHiddenColumns().size();
1372 int[] region = (int[])
1373 viewport.getColumnSelection().getHiddenColumns().elementAt(i);
1375 copiedHiddenColumns.addElement(new int[]
1376 {region[0] - hiddenOffset,
1377 region[1] - hiddenOffset});
1382 copiedHiddenColumns = null;
1385 for (int i = 0; i < sg.getSize(); i++)
1387 SequenceI seq = null;
1391 if (orderedSeqs.containsKey(index + ""))
1393 seq = (SequenceI) orderedSeqs.get(index + "");
1405 //Returns residue following index if gap
1406 startRes = seq.findPosition(sg.getStartRes());
1409 //Need to find the residue preceeding index if gap
1412 for (int j = 0; j < sg.getEndRes() + 1 && j < seq.getLength(); j++)
1414 ch = seq.getCharAt(j);
1415 if (!jalview.util.Comparison.isGap( (ch)))
1423 endRes += seq.getStart() - 1;
1426 copiedSequences.append(seq.getName() + "\t" +
1429 seq.getSequenceAsString(sg.getStartRes(),
1430 sg.getEndRes() + 1) + "\n");
1435 protected void pasteNew_actionPerformed()
1440 protected void pasteThis_actionPerformed()
1445 void paste(boolean newAlignment)
1450 if (copiedSequences == null)
1455 StringTokenizer st = new StringTokenizer(copiedSequences.toString());
1456 Vector seqs = new Vector();
1457 while (st.hasMoreElements())
1459 String name = st.nextToken();
1460 int start = Integer.parseInt(st.nextToken());
1461 int end = Integer.parseInt(st.nextToken());
1462 seqs.addElement(new Sequence(name, st.nextToken(), start, end));
1464 SequenceI[] newSeqs = new SequenceI[seqs.size()];
1465 for (int i = 0; i < seqs.size(); i++)
1467 newSeqs[i] = (SequenceI) seqs.elementAt(i);
1472 String newtitle = new String("Copied sequences");
1473 if (getTitle().startsWith("Copied sequences"))
1475 newtitle = getTitle();
1479 newtitle = newtitle.concat("- from " + getTitle());
1481 AlignFrame af = new AlignFrame(new Alignment(newSeqs),
1485 if (copiedHiddenColumns != null)
1487 for (int i = 0; i < copiedHiddenColumns.size(); i++)
1489 int[] region = (int[]) copiedHiddenColumns.elementAt(i);
1490 af.viewport.hideColumns(region[0], region[1]);
1494 jalview.bin.JalviewLite.addFrame(af, newtitle, DEFAULT_WIDTH,
1499 addSequences(newSeqs);
1503 catch (Exception ex)
1504 {} // could be anything being pasted in here
1508 void addSequences(SequenceI[] seqs)
1510 for (int i = 0; i < seqs.length; i++)
1512 viewport.alignment.addSequence(seqs[i]);
1516 addHistoryItem(new EditCommand(
1521 viewport.alignment.getWidth(),
1525 viewport.setEndSeq(viewport.alignment.getHeight());
1526 viewport.alignment.getWidth();
1527 viewport.firePropertyChange("alignment", null,
1528 viewport.alignment.getSequences());
1532 protected void cut_actionPerformed()
1534 copy_actionPerformed();
1535 delete_actionPerformed();
1538 protected void delete_actionPerformed()
1541 SequenceGroup sg = viewport.getSelectionGroup();
1547 Vector seqs = new Vector();
1549 for (int i = 0; i < sg.getSize(); i++)
1551 seq = sg.getSequenceAt(i);
1552 seqs.addElement(seq);
1555 // If the cut affects all sequences, remove highlighted columns
1556 if (sg.getSize() == viewport.alignment.getHeight())
1558 viewport.getColumnSelection().removeElements(sg.getStartRes(),
1559 sg.getEndRes() + 1);
1562 SequenceI[] cut = new SequenceI[seqs.size()];
1563 for (int i = 0; i < seqs.size(); i++)
1565 cut[i] = (SequenceI) seqs.elementAt(i);
1571 addHistoryItem(new EditCommand("Cut Sequences",
1575 sg.getEndRes() - sg.getStartRes() + 1,
1576 viewport.alignment));
1578 viewport.setSelectionGroup(null);
1579 viewport.alignment.deleteGroup(sg);
1581 viewport.firePropertyChange("alignment", null,
1582 viewport.getAlignment().getSequences());
1584 if (viewport.getAlignment().getHeight() < 1)
1586 this.setVisible(false);
1590 protected void deleteGroups_actionPerformed()
1592 viewport.alignment.deleteAllGroups();
1593 viewport.sequenceColours = null;
1594 viewport.setSelectionGroup(null);
1596 alignPanel.paintAlignment(true);
1599 public void selectAllSequenceMenuItem_actionPerformed()
1601 SequenceGroup sg = new SequenceGroup();
1602 for (int i = 0; i < viewport.getAlignment().getSequences().size(); i++)
1604 sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);
1606 sg.setEndRes(viewport.alignment.getWidth() - 1);
1607 viewport.setSelectionGroup(sg);
1608 alignPanel.paintAlignment(true);
1609 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1612 public void deselectAllSequenceMenuItem_actionPerformed()
1614 if (viewport.cursorMode)
1616 alignPanel.seqPanel.keyboardNo1 = null;
1617 alignPanel.seqPanel.keyboardNo2 = null;
1619 viewport.setSelectionGroup(null);
1620 viewport.getColumnSelection().clear();
1621 viewport.setSelectionGroup(null);
1622 alignPanel.idPanel.idCanvas.searchResults = null;
1623 alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);
1624 alignPanel.paintAlignment(true);
1625 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1628 public void invertSequenceMenuItem_actionPerformed()
1630 SequenceGroup sg = viewport.getSelectionGroup();
1631 for (int i = 0; i < viewport.getAlignment().getSequences().size(); i++)
1633 sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false);
1636 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1639 void trimAlignment(boolean trimLeft)
1641 ColumnSelection colSel = viewport.getColumnSelection();
1644 if (colSel.size() > 0)
1648 column = colSel.getMin();
1652 column = colSel.getMax();
1656 if (viewport.getSelectionGroup() != null)
1658 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1659 hiddenRepSequences);
1663 seqs = viewport.alignment.getSequencesArray();
1666 TrimRegionCommand trimRegion;
1669 trimRegion = new TrimRegionCommand("Remove Left",
1670 TrimRegionCommand.TRIM_LEFT,
1675 viewport.selectionGroup);
1676 viewport.setStartRes(0);
1680 trimRegion = new TrimRegionCommand("Remove Right",
1681 TrimRegionCommand.TRIM_RIGHT,
1686 viewport.selectionGroup);
1689 statusBar.setText("Removed " + trimRegion.getSize() + " columns.");
1691 addHistoryItem(trimRegion);
1693 Vector groups = viewport.alignment.getGroups();
1695 for (int i = 0; i < groups.size(); i++)
1697 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
1699 if ( (trimLeft && !sg.adjustForRemoveLeft(column))
1700 || (!trimLeft && !sg.adjustForRemoveRight(column)))
1702 viewport.alignment.deleteGroup(sg);
1706 viewport.firePropertyChange("alignment", null,
1707 viewport.getAlignment().getSequences());
1711 public void removeGappedColumnMenuItem_actionPerformed()
1713 int start = 0, end = viewport.alignment.getWidth() - 1;
1716 if (viewport.getSelectionGroup() != null)
1718 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1719 hiddenRepSequences);
1720 start = viewport.getSelectionGroup().getStartRes();
1721 end = viewport.getSelectionGroup().getEndRes();
1725 seqs = viewport.alignment.getSequencesArray();
1728 RemoveGapColCommand removeGapCols =
1729 new RemoveGapColCommand("Remove Gapped Columns",
1732 viewport.alignment);
1734 addHistoryItem(removeGapCols);
1736 statusBar.setText("Removed " + removeGapCols.getSize() + " empty columns.");
1738 //This is to maintain viewport position on first residue
1740 SequenceI seq = viewport.alignment.getSequenceAt(0);
1741 int startRes = seq.findPosition(viewport.startRes);
1742 // ShiftList shifts;
1743 // viewport.getAlignment().removeGaps(shifts=new ShiftList());
1744 // edit.alColumnChanges=shifts.getInverse();
1745 // if (viewport.hasHiddenColumns)
1746 // viewport.getColumnSelection().compensateForEdits(shifts);
1747 viewport.setStartRes(seq.findIndex(startRes) - 1);
1748 viewport.firePropertyChange("alignment", null,
1749 viewport.getAlignment().getSequences());
1753 public void removeAllGapsMenuItem_actionPerformed()
1755 int start = 0, end = viewport.alignment.getWidth() - 1;
1758 if (viewport.getSelectionGroup() != null)
1760 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1761 hiddenRepSequences);
1762 start = viewport.getSelectionGroup().getStartRes();
1763 end = viewport.getSelectionGroup().getEndRes();
1767 seqs = viewport.alignment.getSequencesArray();
1770 //This is to maintain viewport position on first residue
1772 SequenceI seq = viewport.alignment.getSequenceAt(0);
1773 int startRes = seq.findPosition(viewport.startRes);
1775 addHistoryItem(new RemoveGapsCommand("Remove Gaps",
1778 viewport.alignment));
1780 viewport.setStartRes(seq.findIndex(startRes) - 1);
1782 viewport.firePropertyChange("alignment", null,
1783 viewport.getAlignment().getSequences());
1787 public void findMenuItem_actionPerformed()
1789 new Finder(alignPanel);
1792 * create a new view derived from the current view
1794 * @return frame for the new view
1796 public AlignFrame newView(String viewtitle)
1799 if (viewport.hasHiddenRows)
1801 newal = new Alignment(viewport.getAlignment().
1802 getHiddenSequences()
1803 .getFullAlignment().
1804 getSequencesArray());
1808 newal = new Alignment(viewport.alignment.getSequencesArray());
1811 if (viewport.alignment.getAlignmentAnnotation() != null)
1813 for (int i = 0; i < viewport.alignment.getAlignmentAnnotation().length; i++)
1815 if (!viewport.alignment.getAlignmentAnnotation()[i].autoCalculated)
1817 newal.addAnnotation(viewport.alignment.getAlignmentAnnotation()[i]);
1822 AlignFrame newaf = new AlignFrame(newal,
1827 newaf.viewport.sequenceSetID = alignPanel.av.getSequenceSetId();
1828 PaintRefresher.Register(alignPanel, alignPanel.av.getSequenceSetId());
1829 PaintRefresher.Register(newaf.alignPanel,
1830 newaf.alignPanel.av.getSequenceSetId());
1832 PaintRefresher.Register(newaf.alignPanel.idPanel.idCanvas,
1833 newaf.alignPanel.av.getSequenceSetId());
1834 PaintRefresher.Register(newaf.alignPanel.seqPanel.seqCanvas,
1835 newaf.alignPanel.av.getSequenceSetId());
1837 Vector comps = (Vector) PaintRefresher.components.get(viewport.
1838 getSequenceSetId());
1840 for (int i = 0; i < comps.size(); i++)
1842 if (comps.elementAt(i) instanceof AlignmentPanel)
1848 String title = new String(this.getTitle());
1849 if (viewtitle!=null)
1851 title = viewtitle+" ( "+title+")";
1853 if (title.indexOf("(View") > -1)
1855 title = title.substring(0, title.indexOf("(View"));
1857 title += "(View " + viewSize + ")";
1860 newaf.setTitle(title.toString());
1862 newaf.viewport.historyList = viewport.historyList;
1863 newaf.viewport.redoList = viewport.redoList;
1868 * @return list of feature groups on the view
1870 public String[] getFeatureGroups()
1872 FeatureRenderer fr = null;
1873 if (alignPanel!=null && (fr=alignPanel.getFeatureRenderer())!=null)
1875 return fr.getGroups();
1880 * get sequence feature groups that are hidden or shown
1881 * @param visible true is visible
1884 public String[] getFeatureGroupsOfState(boolean visible)
1886 FeatureRenderer fr = null;
1887 if (alignPanel!=null && (fr=alignPanel.getFeatureRenderer())!=null)
1889 return fr.getGroups(visible);
1894 * Change the display state for the given feature groups
1895 * @param groups list of group strings
1896 * @param state visible or invisible
1898 public void setFeatureGroupState(String[] groups, boolean state) {
1899 FeatureRenderer fr = null;
1900 this.sequenceFeatures.setState(true);
1901 viewport.showSequenceFeatures(true);
1902 if (alignPanel!=null && (fr=alignPanel.getFeatureRenderer())!=null)
1904 fr.setGroupState(groups, state);
1905 alignPanel.seqPanel.seqCanvas.repaint();
1906 if (alignPanel.overviewPanel != null)
1908 alignPanel.overviewPanel.updateOverviewImage();
1912 public void seqLimits_itemStateChanged()
1914 viewport.setShowJVSuffix(seqLimits.getState());
1915 alignPanel.fontChanged();
1916 alignPanel.paintAlignment(true);
1919 protected void colourTextMenuItem_actionPerformed()
1921 viewport.setColourText(colourTextMenuItem.getState());
1922 alignPanel.paintAlignment(true);
1925 protected void wrapMenuItem_actionPerformed()
1927 viewport.setWrapAlignment(wrapMenuItem.getState());
1928 alignPanel.setWrapAlignment(wrapMenuItem.getState());
1929 scaleAbove.setEnabled(wrapMenuItem.getState());
1930 scaleLeft.setEnabled(wrapMenuItem.getState());
1931 scaleRight.setEnabled(wrapMenuItem.getState());
1932 alignPanel.paintAlignment(true);
1935 public void overviewMenuItem_actionPerformed()
1937 if (alignPanel.overviewPanel != null)
1942 Frame frame = new Frame();
1943 OverviewPanel overview = new OverviewPanel(alignPanel);
1944 frame.add(overview);
1945 // +50 must allow for applet frame window
1946 jalview.bin.JalviewLite.addFrame(frame, "Overview " + this.getTitle(),
1947 overview.getPreferredSize().width,
1948 overview.getPreferredSize().height + 50);
1951 frame.addWindowListener(new WindowAdapter()
1953 public void windowClosing(WindowEvent e)
1955 alignPanel.setOverviewPanel(null);
1959 alignPanel.setOverviewPanel(overview);
1963 void changeColour(ColourSchemeI cs)
1969 if (viewport.getAbovePIDThreshold())
1971 threshold = SliderPanel.setPIDSliderSource(alignPanel, cs, "Background");
1973 cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus());
1975 viewport.setGlobalColourScheme(cs);
1979 cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
1982 if (viewport.getConservationSelected())
1985 Alignment al = (Alignment) viewport.alignment;
1986 Conservation c = new Conservation("All",
1987 ResidueProperties.propHash, 3,
1988 al.getSequences(), 0,
1992 c.verdict(false, viewport.ConsPercGaps);
1994 cs.setConservation(c);
1996 cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, cs,
2002 cs.setConservation(null);
2005 cs.setConsensus(viewport.hconsensus);
2008 viewport.setGlobalColourScheme(cs);
2010 if (viewport.getColourAppliesToAllGroups())
2012 Vector groups = viewport.alignment.getGroups();
2013 for (int i = 0; i < groups.size(); i++)
2015 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
2022 if (cs instanceof ClustalxColourScheme)
2024 sg.cs = new ClustalxColourScheme(
2025 sg.getSequences(viewport.hiddenRepSequences),
2032 sg.cs = (ColourSchemeI) cs.getClass().newInstance();
2034 catch (Exception ex)
2036 ex.printStackTrace();
2041 if (viewport.getAbovePIDThreshold()
2042 || cs instanceof PIDColourScheme
2043 || cs instanceof Blosum62ColourScheme)
2045 sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus());
2046 sg.cs.setConsensus(AAFrequency.calculate(
2047 sg.getSequences(viewport.hiddenRepSequences), 0, sg.getWidth()));
2051 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
2054 if (viewport.getConservationSelected())
2056 Conservation c = new Conservation("Group",
2057 ResidueProperties.propHash, 3,
2058 sg.getSequences(viewport.
2059 hiddenRepSequences), 0,
2060 viewport.alignment.getWidth() - 1);
2062 c.verdict(false, viewport.ConsPercGaps);
2063 sg.cs.setConservation(c);
2067 sg.cs.setConservation(null);
2068 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
2074 if (alignPanel.getOverviewPanel() != null)
2076 alignPanel.getOverviewPanel().updateOverviewImage();
2079 jalview.structure.StructureSelectionManager.getStructureSelectionManager()
2080 .sequenceColoursChanged(alignPanel);
2082 alignPanel.paintAlignment(true);
2085 protected void modifyPID_actionPerformed()
2087 if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme != null)
2089 SliderPanel.setPIDSliderSource(alignPanel, viewport.getGlobalColourScheme(),
2091 SliderPanel.showPIDSlider();
2095 protected void modifyConservation_actionPerformed()
2097 if (viewport.getConservationSelected() && viewport.globalColourScheme != null)
2099 SliderPanel.setConservationSlider(alignPanel, viewport.globalColourScheme,
2101 SliderPanel.showConservationSlider();
2105 protected void conservationMenuItem_actionPerformed()
2107 viewport.setConservationSelected(conservationMenuItem.getState());
2109 viewport.setAbovePIDThreshold(false);
2110 abovePIDThreshold.setState(false);
2112 changeColour(viewport.getGlobalColourScheme());
2114 modifyConservation_actionPerformed();
2117 public void abovePIDThreshold_actionPerformed()
2119 viewport.setAbovePIDThreshold(abovePIDThreshold.getState());
2121 conservationMenuItem.setState(false);
2122 viewport.setConservationSelected(false);
2124 changeColour(viewport.getGlobalColourScheme());
2126 modifyPID_actionPerformed();
2129 public void sortPairwiseMenuItem_actionPerformed()
2131 SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
2132 AlignmentSorter.sortByPID(viewport.getAlignment(),
2133 viewport.getAlignment().getSequenceAt(0), null);
2134 addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder,
2135 viewport.alignment));
2136 alignPanel.paintAlignment(true);
2139 public void sortIDMenuItem_actionPerformed()
2141 // addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
2142 // HistoryItem.SORT));
2143 AlignmentSorter.sortByID(viewport.getAlignment());
2144 alignPanel.paintAlignment(true);
2147 public void sortGroupMenuItem_actionPerformed()
2149 // addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
2150 // HistoryItem.SORT));
2151 AlignmentSorter.sortByGroup(viewport.getAlignment());
2152 alignPanel.paintAlignment(true);
2156 public void removeRedundancyMenuItem_actionPerformed()
2158 new RedundancyPanel(alignPanel);
2161 public void pairwiseAlignmentMenuItem_actionPerformed()
2163 if (viewport.getSelectionGroup() != null
2164 && viewport.getSelectionGroup().getSize() > 1)
2166 Frame frame = new Frame();
2167 frame.add(new PairwiseAlignPanel(alignPanel));
2168 jalview.bin.JalviewLite.addFrame(frame, "Pairwise Alignment", 600, 500);
2172 public void PCAMenuItem_actionPerformed()
2174 //are the sequences aligned?
2175 if (!viewport.alignment.isAligned())
2178 int Width = viewport.getAlignment().getWidth();
2180 for (int i = 0; i < viewport.getAlignment().getSequences().size();
2183 current = viewport.getAlignment().getSequenceAt(i);
2185 if (current.getLength() < Width)
2187 current.insertCharAt(Width - 1, viewport.getGapCharacter());
2190 alignPanel.paintAlignment(true);
2193 if ( (viewport.getSelectionGroup() != null &&
2194 viewport.getSelectionGroup().getSize() < 4 &&
2195 viewport.getSelectionGroup().getSize() > 0)
2196 || viewport.getAlignment().getHeight() < 4)
2203 new PCAPanel(viewport);
2205 catch (java.lang.OutOfMemoryError ex)
2211 public void averageDistanceTreeMenuItem_actionPerformed()
2213 NewTreePanel("AV", "PID", "Average distance tree using PID");
2216 public void neighbourTreeMenuItem_actionPerformed()
2218 NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
2221 protected void njTreeBlosumMenuItem_actionPerformed()
2223 NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
2226 protected void avTreeBlosumMenuItem_actionPerformed()
2228 NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
2231 void NewTreePanel(String type, String pwType, String title)
2233 //are the sequences aligned?
2234 if (!viewport.alignment.isAligned())
2237 int Width = viewport.getAlignment().getWidth();
2239 for (int i = 0; i < viewport.getAlignment().getSequences().size();
2242 current = viewport.getAlignment().getSequenceAt(i);
2244 if (current.getLength() < Width)
2246 current.insertCharAt(Width - 1, viewport.getGapCharacter());
2249 alignPanel.paintAlignment(true);
2253 if ( (viewport.getSelectionGroup() != null &&
2254 viewport.getSelectionGroup().getSize() > 1)
2255 || (viewport.getSelectionGroup() == null
2256 && viewport.alignment.getHeight() > 1))
2258 final TreePanel tp = new TreePanel(viewport,
2262 addTreeMenuItem(tp, title);
2264 jalview.bin.JalviewLite.addFrame(tp, title, 600, 500);
2268 void loadTree_actionPerformed()
2270 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
2271 cap.setText("Paste your Newick tree file here.");
2272 cap.setTreeImport();
2273 Frame frame = new Frame();
2275 jalview.bin.JalviewLite.addFrame(frame, "Paste Newick file ", 400, 300);
2278 public void loadTree(jalview.io.NewickFile tree, String treeFile)
2280 TreePanel tp = new TreePanel(viewport,
2284 jalview.bin.JalviewLite.addFrame(tp, treeFile, 600, 500);
2285 addTreeMenuItem(tp, treeFile);
2288 void addTreeMenuItem(final TreePanel treePanel, String title)
2290 final MenuItem item = new MenuItem(title);
2291 sortByTreeMenu.add(item);
2292 item.addActionListener(new java.awt.event.ActionListener()
2294 public void actionPerformed(ActionEvent evt)
2296 // addHistoryItem(new HistoryItem("Sort", viewport.alignment,
2297 // HistoryItem.SORT));
2298 AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree());
2299 alignPanel.paintAlignment(true);
2303 treePanel.addWindowListener(new WindowAdapter()
2305 public void windowClosing(WindowEvent e)
2307 sortByTreeMenu.remove(item);
2312 protected void documentation_actionPerformed()
2314 showURL("http://www.jalview.org/help.html", "HELP");
2317 protected void about_actionPerformed()
2324 public AboutPanel(String version)
2326 this.version = version;
2329 public void paint(Graphics g)
2331 g.setColor(Color.white);
2332 g.fillRect(0, 0, getSize().width, getSize().height);
2333 g.setFont(new Font("Helvetica", Font.PLAIN, 12));
2334 FontMetrics fm = g.getFontMetrics();
2335 int fh = fm.getHeight();
2337 g.setColor(Color.black);
2338 g.setFont(new Font("Helvetica", Font.BOLD, 14));
2339 g.drawString("Jalview - Release " + version, 200, y += fh);
2340 g.setFont(new Font("Helvetica", Font.PLAIN, 12));
2341 g.drawString("Authors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton.",
2343 g.drawString("Current development managed by Andrew Waterhouse; Barton Group, University of Dundee.",
2346 "For any issues relating to Jalview, email help@jalview.org", x,
2348 g.drawString("If you use JalView, please cite:", x, y += fh + 8);
2349 g.drawString("\"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"",
2351 g.drawString("Bioinformatics, 2004 20;426-7.", x, y += fh);
2355 String version = "test";
2356 java.net.URL url = getClass().getResource("/.build_properties");
2361 BufferedReader reader = new BufferedReader(new InputStreamReader(
2364 while ( (line = reader.readLine()) != null)
2366 if (line.indexOf("VERSION") > -1)
2368 version = line.substring(line.indexOf("=") + 1);
2372 catch (Exception ex)
2374 ex.printStackTrace();
2378 Frame frame = new Frame();
2379 frame.add(new AboutPanel(version));
2380 jalview.bin.JalviewLite.addFrame(frame, "Jalview", 580, 200);
2384 public void showURL(String url, String target)
2386 if (viewport.applet == null)
2388 System.out.println("Not running as applet - no browser available.");
2394 System.out.println("Show url: " + url);
2395 viewport.applet.getAppletContext().showDocument(new java.net.URL(url),
2398 catch (Exception ex)
2400 ex.printStackTrace();
2405 //////////////////////////////////////////////////////////////////////////////////
2406 //JBuilder Graphics here
2408 MenuBar alignFrameMenuBar = new MenuBar();
2409 Menu fileMenu = new Menu("File");
2410 MenuItem loadApplication = new MenuItem("View in Full Application");
2411 MenuItem loadTree = new MenuItem("Load Associated Tree ...");
2412 MenuItem loadAnnotations = new MenuItem(
2413 "Load Features/Annotations ...");
2414 MenuItem outputFeatures = new MenuItem("Export Features ...");
2415 MenuItem outputAnnotations = new MenuItem("Export Annotations ...");
2417 MenuItem closeMenuItem = new MenuItem("Close");
2418 Menu editMenu = new Menu("Edit");
2419 Menu viewMenu = new Menu("View");
2420 Menu colourMenu = new Menu("Colour");
2421 Menu calculateMenu = new Menu("Calculate");
2422 MenuItem selectAllSequenceMenuItem = new MenuItem("Select all");
2423 MenuItem deselectAllSequenceMenuItem = new MenuItem("Deselect All");
2424 MenuItem invertSequenceMenuItem = new MenuItem("Invert Selection");
2425 MenuItem remove2LeftMenuItem = new MenuItem();
2426 MenuItem remove2RightMenuItem = new MenuItem();
2427 MenuItem removeGappedColumnMenuItem = new MenuItem();
2428 MenuItem removeAllGapsMenuItem = new MenuItem();
2429 CheckboxMenuItem viewBoxesMenuItem = new CheckboxMenuItem();
2430 CheckboxMenuItem viewTextMenuItem = new CheckboxMenuItem();
2431 MenuItem sortPairwiseMenuItem = new MenuItem();
2432 MenuItem sortIDMenuItem = new MenuItem();
2433 MenuItem sortGroupMenuItem = new MenuItem();
2434 MenuItem removeRedundancyMenuItem = new MenuItem();
2435 MenuItem pairwiseAlignmentMenuItem = new MenuItem();
2436 MenuItem PCAMenuItem = new MenuItem();
2437 MenuItem averageDistanceTreeMenuItem = new MenuItem();
2438 MenuItem neighbourTreeMenuItem = new MenuItem();
2439 BorderLayout borderLayout1 = new BorderLayout();
2440 public Label statusBar = new Label();
2441 Menu outputTextboxMenu = new Menu();
2442 MenuItem clustalColour = new MenuItem();
2443 MenuItem zappoColour = new MenuItem();
2444 MenuItem taylorColour = new MenuItem();
2445 MenuItem hydrophobicityColour = new MenuItem();
2446 MenuItem helixColour = new MenuItem();
2447 MenuItem strandColour = new MenuItem();
2448 MenuItem turnColour = new MenuItem();
2449 MenuItem buriedColour = new MenuItem();
2450 MenuItem userDefinedColour = new MenuItem();
2451 MenuItem PIDColour = new MenuItem();
2452 MenuItem BLOSUM62Colour = new MenuItem();
2453 MenuItem njTreeBlosumMenuItem = new MenuItem();
2454 MenuItem avDistanceTreeBlosumMenuItem = new MenuItem();
2455 CheckboxMenuItem annotationPanelMenuItem = new CheckboxMenuItem();
2456 CheckboxMenuItem colourTextMenuItem = new CheckboxMenuItem();
2457 MenuItem alProperties = new MenuItem("Alignment Properties...");
2458 MenuItem overviewMenuItem = new MenuItem();
2459 MenuItem undoMenuItem = new MenuItem();
2460 MenuItem redoMenuItem = new MenuItem();
2461 CheckboxMenuItem conservationMenuItem = new CheckboxMenuItem();
2462 MenuItem noColourmenuItem = new MenuItem();
2463 CheckboxMenuItem wrapMenuItem = new CheckboxMenuItem();
2464 CheckboxMenuItem renderGapsMenuItem = new CheckboxMenuItem();
2465 MenuItem findMenuItem = new MenuItem();
2466 CheckboxMenuItem abovePIDThreshold = new CheckboxMenuItem();
2467 MenuItem nucleotideColour = new MenuItem();
2468 MenuItem deleteGroups = new MenuItem();
2469 MenuItem delete = new MenuItem();
2470 MenuItem copy = new MenuItem();
2471 MenuItem cut = new MenuItem();
2472 Menu pasteMenu = new Menu();
2473 MenuItem pasteNew = new MenuItem();
2474 MenuItem pasteThis = new MenuItem();
2475 CheckboxMenuItem applyToAllGroups = new CheckboxMenuItem();
2476 MenuItem font = new MenuItem();
2477 CheckboxMenuItem scaleAbove = new CheckboxMenuItem();
2478 CheckboxMenuItem scaleLeft = new CheckboxMenuItem();
2479 CheckboxMenuItem scaleRight = new CheckboxMenuItem();
2480 MenuItem modifyPID = new MenuItem();
2481 MenuItem modifyConservation = new MenuItem();
2482 CheckboxMenuItem autoCalculate
2483 = new CheckboxMenuItem("Autocalculate Consensus", true);
2484 Menu sortByTreeMenu = new Menu();
2485 Menu sort = new Menu();
2486 Menu calculate = new Menu();
2487 MenuItem inputText = new MenuItem();
2488 Menu helpMenu = new Menu();
2489 MenuItem documentation = new MenuItem();
2490 MenuItem about = new MenuItem();
2491 CheckboxMenuItem seqLimits = new CheckboxMenuItem();
2492 CheckboxMenuItem centreColumnLabelFlag = new CheckboxMenuItem();
2494 private void jbInit()
2498 setMenuBar(alignFrameMenuBar);
2502 // dynamically fill save as menu with available formats
2503 for (int i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length;
2507 item = new MenuItem(jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS[i]);
2509 item.addActionListener(new java.awt.event.ActionListener()
2511 public void actionPerformed(ActionEvent e)
2513 outputText_actionPerformed(e);
2517 outputTextboxMenu.add(item);
2519 closeMenuItem.addActionListener(this);
2520 loadApplication.addActionListener(this);
2522 loadTree.addActionListener(this);
2523 loadAnnotations.addActionListener(this);
2524 outputFeatures.addActionListener(this);
2525 outputAnnotations.addActionListener(this);
2526 selectAllSequenceMenuItem.addActionListener(this);
2527 deselectAllSequenceMenuItem.addActionListener(this);
2528 invertSequenceMenuItem.addActionListener(this);
2529 remove2LeftMenuItem.setLabel("Remove Left");
2530 remove2LeftMenuItem.addActionListener(this);
2531 remove2RightMenuItem.setLabel("Remove Right");
2532 remove2RightMenuItem.addActionListener(this);
2533 removeGappedColumnMenuItem.setLabel("Remove Empty Columns");
2534 removeGappedColumnMenuItem.addActionListener(this);
2535 removeAllGapsMenuItem.setLabel("Remove All Gaps");
2536 removeAllGapsMenuItem.addActionListener(this);
2537 viewBoxesMenuItem.setLabel("Boxes");
2538 viewBoxesMenuItem.setState(true);
2539 viewBoxesMenuItem.addItemListener(this);
2540 viewTextMenuItem.setLabel("Text");
2541 viewTextMenuItem.setState(true);
2542 viewTextMenuItem.addItemListener(this);
2543 sortPairwiseMenuItem.setLabel("by Pairwise Identity");
2544 sortPairwiseMenuItem.addActionListener(this);
2545 sortIDMenuItem.setLabel("by ID");
2546 sortIDMenuItem.addActionListener(this);
2547 sortGroupMenuItem.setLabel("by Group");
2548 sortGroupMenuItem.addActionListener(this);
2549 removeRedundancyMenuItem.setLabel("Remove Redundancy...");
2550 removeRedundancyMenuItem.addActionListener(this);
2551 pairwiseAlignmentMenuItem.setLabel("Pairwise Alignments...");
2552 pairwiseAlignmentMenuItem.addActionListener(this);
2553 PCAMenuItem.setLabel("Principal Component Analysis");
2554 PCAMenuItem.addActionListener(this);
2555 averageDistanceTreeMenuItem.setLabel(
2556 "Average Distance Using % Identity");
2557 averageDistanceTreeMenuItem.addActionListener(this);
2558 neighbourTreeMenuItem.setLabel("Neighbour Joining Using % Identity");
2559 neighbourTreeMenuItem.addActionListener(this);
2560 statusBar.setBackground(Color.white);
2561 statusBar.setFont(new java.awt.Font("Verdana", 0, 11));
2562 statusBar.setText("Status bar");
2563 outputTextboxMenu.setLabel("Output to Textbox");
2564 clustalColour.setLabel("Clustalx");
2566 clustalColour.addActionListener(this);
2567 zappoColour.setLabel("Zappo");
2568 zappoColour.addActionListener(this);
2569 taylorColour.setLabel("Taylor");
2570 taylorColour.addActionListener(this);
2571 hydrophobicityColour.setLabel("Hydrophobicity");
2572 hydrophobicityColour.addActionListener(this);
2573 helixColour.setLabel("Helix Propensity");
2574 helixColour.addActionListener(this);
2575 strandColour.setLabel("Strand Propensity");
2576 strandColour.addActionListener(this);
2577 turnColour.setLabel("Turn Propensity");
2578 turnColour.addActionListener(this);
2579 buriedColour.setLabel("Buried Index");
2580 buriedColour.addActionListener(this);
2581 userDefinedColour.setLabel("User Defined...");
2582 userDefinedColour.addActionListener(this);
2583 PIDColour.setLabel("Percentage Identity");
2584 PIDColour.addActionListener(this);
2585 BLOSUM62Colour.setLabel("BLOSUM62 Score");
2586 BLOSUM62Colour.addActionListener(this);
2587 avDistanceTreeBlosumMenuItem.setLabel(
2588 "Average Distance Using BLOSUM62");
2589 avDistanceTreeBlosumMenuItem.addActionListener(this);
2590 njTreeBlosumMenuItem.setLabel("Neighbour Joining Using BLOSUM62");
2591 njTreeBlosumMenuItem.addActionListener(this);
2592 annotationPanelMenuItem.setLabel("Show Annotations");
2593 annotationPanelMenuItem.addItemListener(this);
2594 colourTextMenuItem.setLabel("Colour Text");
2595 colourTextMenuItem.addItemListener(this);
2596 alProperties.addActionListener(this);
2597 overviewMenuItem.setLabel("Overview Window");
2598 overviewMenuItem.addActionListener(this);
2599 undoMenuItem.setEnabled(false);
2600 undoMenuItem.setLabel("Undo");
2601 undoMenuItem.addActionListener(this);
2602 redoMenuItem.setEnabled(false);
2603 redoMenuItem.setLabel("Redo");
2604 redoMenuItem.addActionListener(this);
2605 conservationMenuItem.setLabel("by Conservation");
2606 conservationMenuItem.addItemListener(this);
2607 noColourmenuItem.setLabel("None");
2608 noColourmenuItem.addActionListener(this);
2609 wrapMenuItem.setLabel("Wrap");
2610 wrapMenuItem.addItemListener(this);
2611 renderGapsMenuItem.setLabel("Show Gaps");
2612 renderGapsMenuItem.setState(true);
2613 renderGapsMenuItem.addItemListener(this);
2614 findMenuItem.setLabel("Find...");
2615 findMenuItem.addActionListener(this);
2616 abovePIDThreshold.setLabel("Above Identity Threshold");
2617 abovePIDThreshold.addItemListener(this);
2618 nucleotideColour.setLabel("Nucleotide");
2619 nucleotideColour.addActionListener(this);
2620 deleteGroups.setLabel("Undefine Groups");
2621 deleteGroups.addActionListener(this);
2622 copy.setLabel("Copy");
2623 copy.addActionListener(this);
2624 cut.setLabel("Cut");
2625 cut.addActionListener(this);
2626 delete.setLabel("Delete");
2627 delete.addActionListener(this);
2628 pasteMenu.setLabel("Paste");
2629 pasteNew.setLabel("To New Alignment");
2630 pasteNew.addActionListener(this);
2631 pasteThis.setLabel("Add To This Alignment");
2632 pasteThis.addActionListener(this);
2633 applyToAllGroups.setLabel("Apply Colour To All Groups");
2634 applyToAllGroups.setState(true);
2635 applyToAllGroups.addItemListener(this);
2636 font.setLabel("Font...");
2637 font.addActionListener(this);
2638 scaleAbove.setLabel("Scale Above");
2639 scaleAbove.setState(true);
2640 scaleAbove.setEnabled(false);
2641 scaleAbove.addItemListener(this);
2642 scaleLeft.setEnabled(false);
2643 scaleLeft.setState(true);
2644 scaleLeft.setLabel("Scale Left");
2645 scaleLeft.addItemListener(this);
2646 scaleRight.setEnabled(false);
2647 scaleRight.setState(true);
2648 scaleRight.setLabel("Scale Right");
2649 scaleRight.addItemListener(this);
2650 modifyPID.setLabel("Modify Identity Threshold...");
2651 modifyPID.addActionListener(this);
2652 modifyConservation.setLabel("Modify Conservation Threshold...");
2653 modifyConservation.addActionListener(this);
2654 sortByTreeMenu.setLabel("By Tree Order");
2655 sort.setLabel("Sort");
2656 calculate.setLabel("Calculate Tree");
2657 autoCalculate.addItemListener(this);
2658 inputText.setLabel("Input from textbox");
2659 inputText.addActionListener(this);
2660 centreColumnLabelFlag.setLabel("Centre column labels");
2661 centreColumnLabelFlag.addItemListener(this);
2663 helpMenu.setLabel("Help");
2664 documentation.setLabel("Documentation");
2665 documentation.addActionListener(this);
2667 about.setLabel("About...");
2668 about.addActionListener(this);
2669 seqLimits.setState(true);
2670 seqLimits.setLabel("Show Sequence Limits");
2671 seqLimits.addItemListener(this);
2672 featureSettings.setLabel("Feature Settings...");
2673 featureSettings.addActionListener(this);
2674 sequenceFeatures.setLabel("Sequence Features");
2675 sequenceFeatures.addItemListener(this);
2676 sequenceFeatures.setState(false);
2677 annotationColour.setLabel("by Annotation...");
2678 annotationColour.addActionListener(this);
2679 invertSequenceMenuItem.setLabel("Invert Sequence Selection");
2680 invertColSel.setLabel("Invert Column Selection");
2681 menu1.setLabel("Show");
2682 showColumns.setLabel("All Columns ");
2683 showSeqs.setLabel("All Sequences");
2684 menu2.setLabel("Hide");
2685 hideColumns.setLabel("Selected Columns");
2686 hideSequences.setLabel("Selected Sequences");
2687 invertColSel.addActionListener(this);
2688 showColumns.addActionListener(this);
2689 showSeqs.addActionListener(this);
2690 hideColumns.addActionListener(this);
2691 hideSequences.addActionListener(this);
2692 formatMenu.setLabel("Format");
2693 selectMenu.setLabel("Select");
2694 newView.setLabel("New View");
2695 newView.addActionListener(this);
2696 alignFrameMenuBar.add(fileMenu);
2697 alignFrameMenuBar.add(editMenu);
2698 alignFrameMenuBar.add(selectMenu);
2699 alignFrameMenuBar.add(viewMenu);
2700 alignFrameMenuBar.add(formatMenu);
2701 alignFrameMenuBar.add(colourMenu);
2702 alignFrameMenuBar.add(calculateMenu);
2703 alignFrameMenuBar.add(helpMenu);
2705 fileMenu.add(inputText);
2706 fileMenu.add(loadTree);
2707 fileMenu.add(loadAnnotations);
2709 fileMenu.addSeparator();
2710 fileMenu.add(outputTextboxMenu);
2711 fileMenu.add(outputFeatures);
2712 fileMenu.add(outputAnnotations);
2714 if (jalviewServletURL != null)
2716 fileMenu.add(loadApplication);
2719 fileMenu.addSeparator();
2720 fileMenu.add(closeMenuItem);
2722 editMenu.add(undoMenuItem);
2723 editMenu.add(redoMenuItem);
2726 editMenu.add(pasteMenu);
2727 editMenu.add(delete);
2728 editMenu.addSeparator();
2729 editMenu.add(remove2LeftMenuItem);
2730 editMenu.add(remove2RightMenuItem);
2731 editMenu.add(removeGappedColumnMenuItem);
2732 editMenu.add(removeAllGapsMenuItem);
2733 editMenu.add(removeRedundancyMenuItem);
2734 viewMenu.add(newView);
2735 viewMenu.addSeparator();
2736 viewMenu.add(menu1);
2737 viewMenu.add(menu2);
2738 viewMenu.addSeparator();
2739 viewMenu.add(annotationPanelMenuItem);
2740 viewMenu.addSeparator();
2741 viewMenu.add(sequenceFeatures);
2742 viewMenu.add(featureSettings);
2743 viewMenu.addSeparator();
2744 viewMenu.add(alProperties);
2745 viewMenu.addSeparator();
2746 viewMenu.add(overviewMenuItem);
2747 colourMenu.add(applyToAllGroups);
2748 colourMenu.addSeparator();
2749 colourMenu.add(noColourmenuItem);
2750 colourMenu.add(clustalColour);
2751 colourMenu.add(BLOSUM62Colour);
2752 colourMenu.add(PIDColour);
2753 colourMenu.add(zappoColour);
2754 colourMenu.add(taylorColour);
2755 colourMenu.add(hydrophobicityColour);
2756 colourMenu.add(helixColour);
2757 colourMenu.add(strandColour);
2758 colourMenu.add(turnColour);
2759 colourMenu.add(buriedColour);
2760 colourMenu.add(nucleotideColour);
2761 colourMenu.add(userDefinedColour);
2762 colourMenu.addSeparator();
2763 colourMenu.add(conservationMenuItem);
2764 colourMenu.add(modifyConservation);
2765 colourMenu.add(abovePIDThreshold);
2766 colourMenu.add(modifyPID);
2767 colourMenu.add(annotationColour);
2768 calculateMenu.add(sort);
2769 calculateMenu.add(calculate);
2770 calculateMenu.addSeparator();
2771 calculateMenu.add(pairwiseAlignmentMenuItem);
2772 calculateMenu.add(PCAMenuItem);
2773 calculateMenu.add(autoCalculate);
2774 this.add(statusBar, BorderLayout.SOUTH);
2775 pasteMenu.add(pasteNew);
2776 pasteMenu.add(pasteThis);
2777 sort.add(sortIDMenuItem);
2778 sort.add(sortByTreeMenu);
2779 sort.add(sortGroupMenuItem);
2780 sort.add(sortPairwiseMenuItem);
2781 calculate.add(averageDistanceTreeMenuItem);
2782 calculate.add(neighbourTreeMenuItem);
2783 calculate.add(avDistanceTreeBlosumMenuItem);
2784 calculate.add(njTreeBlosumMenuItem);
2785 helpMenu.add(documentation);
2786 helpMenu.add(about);
2787 menu1.add(showColumns);
2788 menu1.add(showSeqs);
2789 menu2.add(hideColumns);
2790 menu2.add(hideSequences);
2791 formatMenu.add(font);
2792 formatMenu.add(seqLimits);
2793 formatMenu.add(wrapMenuItem);
2794 formatMenu.add(scaleAbove);
2795 formatMenu.add(scaleLeft);
2796 formatMenu.add(scaleRight);
2797 formatMenu.add(viewBoxesMenuItem);
2798 formatMenu.add(viewTextMenuItem);
2799 formatMenu.add(colourTextMenuItem);
2800 formatMenu.add(renderGapsMenuItem);
2801 formatMenu.add(centreColumnLabelFlag);
2802 selectMenu.add(findMenuItem);
2803 selectMenu.addSeparator();
2804 selectMenu.add(selectAllSequenceMenuItem);
2805 selectMenu.add(deselectAllSequenceMenuItem);
2806 selectMenu.add(invertSequenceMenuItem);
2807 selectMenu.add(invertColSel);
2808 selectMenu.add(deleteGroups);
2810 MenuItem featureSettings = new MenuItem();
2811 CheckboxMenuItem sequenceFeatures = new CheckboxMenuItem();
2812 MenuItem annotationColour = new MenuItem();
2813 MenuItem invertColSel = new MenuItem();
2814 Menu menu1 = new Menu();
2815 MenuItem showColumns = new MenuItem();
2816 MenuItem showSeqs = new MenuItem();
2817 Menu menu2 = new Menu();
2818 MenuItem hideColumns = new MenuItem();
2819 MenuItem hideSequences = new MenuItem();
2820 Menu formatMenu = new Menu();
2821 Menu selectMenu = new Menu();
2822 MenuItem newView = new MenuItem();
2825 * Attach the alignFrame panels after embedding menus, if necessary.
2826 * This used to be called setEmbedded, but is now creates the
2827 * dropdown menus in a platform independent manner
2828 * to avoid OSX/Mac menu appendage daftness.
2830 * @param reallyEmbedded true to attach the view to the applet area on the page rather than in a new window
2832 public void createAlignFrameWindow(boolean reallyEmbedded, String title)
2837 // Explicly build the embedded menu panel for the on-page applet
2839 // view cannot be closed if its actually on the page
2840 fileMenu.remove(closeMenuItem);
2841 fileMenu.remove(3); // Remove Seperator
2842 embeddedMenu = makeEmbeddedPopupMenu(alignFrameMenuBar, "Arial", Font.PLAIN, 10, false); // use our own fonts.
2843 // and actually add the components to the applet area
2844 viewport.applet.setLayout(new BorderLayout());
2845 viewport.applet.add(embeddedMenu, BorderLayout.NORTH);
2846 viewport.applet.add(statusBar, BorderLayout.SOUTH);
2847 alignPanel.setSize(viewport.applet.getSize().width,
2848 viewport.applet.getSize().height
2849 - embeddedMenu.HEIGHT - statusBar.HEIGHT);
2850 viewport.applet.add(alignPanel, BorderLayout.CENTER);
2851 viewport.applet.validate();
2854 // test and embed menu bar if necessary.
2856 if (embedMenuIfNeeded(alignPanel)) {
2857 // adjust for status bar height too
2858 alignPanel.setSize(getSize().width,
2860 - statusBar.HEIGHT);
2862 add(statusBar, BorderLayout.SOUTH);
2863 add(alignPanel, BorderLayout.CENTER);
2864 // and register with the applet so it can pass external API calls to us
2865 jalview.bin.JalviewLite.addFrame(this, title, DEFAULT_WIDTH,