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)
1041 catch (java.net.MalformedURLException ex)
1043 url = viewport.applet.getCodeBase() + url;
1048 public void closeMenuItem_actionPerformed()
1050 PaintRefresher.RemoveComponent(alignPanel);
1051 PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas);
1052 PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas);
1054 if (PaintRefresher.components.size() == 0 && viewport.applet == null)
1065 void updateEditMenuBar()
1068 if (viewport.historyList.size() > 0)
1070 undoMenuItem.setEnabled(true);
1071 CommandI command = (CommandI) viewport.historyList.peek();
1072 undoMenuItem.setLabel("Undo " + command.getDescription());
1076 undoMenuItem.setEnabled(false);
1077 undoMenuItem.setLabel("Undo");
1080 if (viewport.redoList.size() > 0)
1082 redoMenuItem.setEnabled(true);
1084 CommandI command = (CommandI) viewport.redoList.peek();
1085 redoMenuItem.setLabel("Redo " + command.getDescription());
1089 redoMenuItem.setEnabled(false);
1090 redoMenuItem.setLabel("Redo");
1094 public void addHistoryItem(CommandI command)
1096 if (command.getSize() > 0)
1098 viewport.historyList.push(command);
1099 viewport.redoList.removeAllElements();
1100 updateEditMenuBar();
1101 viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1107 * @param e DOCUMENT ME!
1109 protected void undoMenuItem_actionPerformed()
1111 if (viewport.historyList.size() < 1)
1116 CommandI command = (CommandI) viewport.historyList.pop();
1117 viewport.redoList.push(command);
1118 command.undoCommand(null);
1120 AlignViewport originalSource = getOriginatingSource(command);
1122 originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1123 updateEditMenuBar();
1124 originalSource.firePropertyChange("alignment", null,
1125 originalSource.alignment.getSequences());
1131 * @param e DOCUMENT ME!
1133 protected void redoMenuItem_actionPerformed()
1135 if (viewport.redoList.size() < 1)
1140 CommandI command = (CommandI) viewport.redoList.pop();
1141 viewport.historyList.push(command);
1142 command.doCommand(null);
1144 AlignViewport originalSource = getOriginatingSource(command);
1145 originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1147 updateEditMenuBar();
1148 originalSource.firePropertyChange("alignment", null,
1149 originalSource.alignment.getSequences());
1152 AlignViewport getOriginatingSource(CommandI command)
1154 AlignViewport originalSource = null;
1155 //For sequence removal and addition, we need to fire
1156 //the property change event FROM the viewport where the
1157 //original alignment was altered
1158 AlignmentI al = null;
1159 if (command instanceof EditCommand)
1161 EditCommand editCommand = (EditCommand) command;
1162 al = editCommand.getAlignment();
1163 Vector comps = (Vector) PaintRefresher.components
1164 .get(viewport.getSequenceSetId());
1165 for (int i = 0; i < comps.size(); i++)
1167 if (comps.elementAt(i) instanceof AlignmentPanel)
1169 if (al == ( (AlignmentPanel) comps.elementAt(i)).av.alignment)
1171 originalSource = ( (AlignmentPanel) comps.elementAt(i)).av;
1178 if (originalSource == null)
1180 //The original view is closed, we must validate
1181 //the current view against the closed view first
1184 PaintRefresher.validateSequences(al, viewport.alignment);
1187 originalSource = viewport;
1190 return originalSource;
1193 public void moveSelectedSequences(boolean up)
1195 SequenceGroup sg = viewport.getSelectionGroup();
1203 for (int i = 1; i < viewport.alignment.getHeight(); i++)
1205 SequenceI seq = viewport.alignment.getSequenceAt(i);
1206 if (!sg.getSequences(null).contains(seq))
1211 SequenceI temp = viewport.alignment.getSequenceAt(i - 1);
1212 if (sg.getSequences(null).contains(temp))
1217 viewport.alignment.getSequences().setElementAt(temp, i);
1218 viewport.alignment.getSequences().setElementAt(seq, i - 1);
1223 for (int i = viewport.alignment.getHeight() - 2; i > -1; i--)
1225 SequenceI seq = viewport.alignment.getSequenceAt(i);
1226 if (!sg.getSequences(viewport.hiddenRepSequences).contains(seq))
1231 SequenceI temp = viewport.alignment.getSequenceAt(i + 1);
1232 if (sg.getSequences(viewport.hiddenRepSequences).contains(temp))
1237 viewport.alignment.getSequences().setElementAt(temp, i);
1238 viewport.alignment.getSequences().setElementAt(seq, i + 1);
1242 alignPanel.paintAlignment(true);
1245 synchronized void slideSequences(boolean right, int size)
1247 Vector sg = new Vector();
1248 if(viewport.cursorMode)
1250 sg.addElement(viewport.alignment.getSequenceAt(
1251 alignPanel.seqPanel.seqCanvas.cursorY));
1253 else if(viewport.getSelectionGroup()!=null
1254 && viewport.getSelectionGroup().getSize()!=viewport.alignment.getHeight())
1256 sg = viewport.getSelectionGroup().getSequences(
1257 viewport.hiddenRepSequences);
1265 Vector invertGroup = new Vector();
1267 for (int i = 0; i < viewport.alignment.getHeight(); i++)
1269 if(!sg.contains(viewport.alignment.getSequenceAt(i)))
1270 invertGroup.addElement(viewport.alignment.getSequenceAt(i));
1273 SequenceI[] seqs1 = new SequenceI[sg.size()];
1274 for (int i = 0; i < sg.size(); i++)
1275 seqs1[i] = (SequenceI) sg.elementAt(i);
1277 SequenceI[] seqs2 = new SequenceI[invertGroup.size()];
1278 for (int i = 0; i < invertGroup.size(); i++)
1279 seqs2[i] = (SequenceI) invertGroup.elementAt(i);
1281 SlideSequencesCommand ssc;
1283 ssc = new SlideSequencesCommand("Slide Sequences",
1285 viewport.getGapCharacter()
1288 ssc = new SlideSequencesCommand("Slide Sequences",
1290 viewport.getGapCharacter()
1293 int groupAdjustment = 0;
1294 if (ssc.getGapsInsertedBegin() && right)
1296 if (viewport.cursorMode)
1297 alignPanel.seqPanel.moveCursor(size, 0);
1299 groupAdjustment = size;
1301 else if (!ssc.getGapsInsertedBegin() && !right)
1303 if (viewport.cursorMode)
1304 alignPanel.seqPanel.moveCursor( -size, 0);
1306 groupAdjustment = -size;
1309 if (groupAdjustment != 0)
1311 viewport.getSelectionGroup().setStartRes(
1312 viewport.getSelectionGroup().getStartRes() + groupAdjustment);
1313 viewport.getSelectionGroup().setEndRes(
1314 viewport.getSelectionGroup().getEndRes() + groupAdjustment);
1318 boolean appendHistoryItem = false;
1319 if(viewport.historyList!=null
1320 && viewport.historyList.size()>0
1321 && viewport.historyList.peek() instanceof SlideSequencesCommand)
1323 appendHistoryItem = ssc.appendSlideCommand(
1324 (SlideSequencesCommand)viewport.historyList.peek())
1328 if(!appendHistoryItem)
1329 addHistoryItem(ssc);
1334 static StringBuffer copiedSequences;
1335 static Vector copiedHiddenColumns;
1336 protected void copy_actionPerformed()
1338 if (viewport.getSelectionGroup() == null)
1343 SequenceGroup sg = viewport.getSelectionGroup();
1344 copiedSequences = new StringBuffer();
1345 Hashtable orderedSeqs = new Hashtable();
1346 for (int i = 0; i < sg.getSize(); i++)
1348 SequenceI seq = sg.getSequenceAt(i);
1349 int index = viewport.alignment.findIndex(seq);
1350 orderedSeqs.put(index + "", seq);
1353 int index = 0, startRes, endRes;
1356 if (viewport.hasHiddenColumns && viewport.getSelectionGroup() != null)
1358 copiedHiddenColumns = new Vector();
1359 int hiddenOffset = viewport.getSelectionGroup().getStartRes();
1360 for (int i = 0; i < viewport.getColumnSelection().getHiddenColumns().size();
1363 int[] region = (int[])
1364 viewport.getColumnSelection().getHiddenColumns().elementAt(i);
1366 copiedHiddenColumns.addElement(new int[]
1367 {region[0] - hiddenOffset,
1368 region[1] - hiddenOffset});
1373 copiedHiddenColumns = null;
1376 for (int i = 0; i < sg.getSize(); i++)
1378 SequenceI seq = null;
1382 if (orderedSeqs.containsKey(index + ""))
1384 seq = (SequenceI) orderedSeqs.get(index + "");
1396 //Returns residue following index if gap
1397 startRes = seq.findPosition(sg.getStartRes());
1400 //Need to find the residue preceeding index if gap
1403 for (int j = 0; j < sg.getEndRes() + 1 && j < seq.getLength(); j++)
1405 ch = seq.getCharAt(j);
1406 if (!jalview.util.Comparison.isGap( (ch)))
1414 endRes += seq.getStart() - 1;
1417 copiedSequences.append(seq.getName() + "\t" +
1420 seq.getSequenceAsString(sg.getStartRes(),
1421 sg.getEndRes() + 1) + "\n");
1426 protected void pasteNew_actionPerformed()
1431 protected void pasteThis_actionPerformed()
1436 void paste(boolean newAlignment)
1441 if (copiedSequences == null)
1446 StringTokenizer st = new StringTokenizer(copiedSequences.toString());
1447 Vector seqs = new Vector();
1448 while (st.hasMoreElements())
1450 String name = st.nextToken();
1451 int start = Integer.parseInt(st.nextToken());
1452 int end = Integer.parseInt(st.nextToken());
1453 seqs.addElement(new Sequence(name, st.nextToken(), start, end));
1455 SequenceI[] newSeqs = new SequenceI[seqs.size()];
1456 for (int i = 0; i < seqs.size(); i++)
1458 newSeqs[i] = (SequenceI) seqs.elementAt(i);
1463 String newtitle = new String("Copied sequences");
1464 if (getTitle().startsWith("Copied sequences"))
1466 newtitle = getTitle();
1470 newtitle = newtitle.concat("- from " + getTitle());
1472 AlignFrame af = new AlignFrame(new Alignment(newSeqs),
1476 if (copiedHiddenColumns != null)
1478 for (int i = 0; i < copiedHiddenColumns.size(); i++)
1480 int[] region = (int[]) copiedHiddenColumns.elementAt(i);
1481 af.viewport.hideColumns(region[0], region[1]);
1485 jalview.bin.JalviewLite.addFrame(af, newtitle, DEFAULT_WIDTH,
1490 addSequences(newSeqs);
1494 catch (Exception ex)
1495 {} // could be anything being pasted in here
1499 void addSequences(SequenceI[] seqs)
1501 for (int i = 0; i < seqs.length; i++)
1503 viewport.alignment.addSequence(seqs[i]);
1507 addHistoryItem(new EditCommand(
1512 viewport.alignment.getWidth(),
1516 viewport.setEndSeq(viewport.alignment.getHeight());
1517 viewport.alignment.getWidth();
1518 viewport.firePropertyChange("alignment", null,
1519 viewport.alignment.getSequences());
1523 protected void cut_actionPerformed()
1525 copy_actionPerformed();
1526 delete_actionPerformed();
1529 protected void delete_actionPerformed()
1532 SequenceGroup sg = viewport.getSelectionGroup();
1538 Vector seqs = new Vector();
1540 for (int i = 0; i < sg.getSize(); i++)
1542 seq = sg.getSequenceAt(i);
1543 seqs.addElement(seq);
1546 // If the cut affects all sequences, remove highlighted columns
1547 if (sg.getSize() == viewport.alignment.getHeight())
1549 viewport.getColumnSelection().removeElements(sg.getStartRes(),
1550 sg.getEndRes() + 1);
1553 SequenceI[] cut = new SequenceI[seqs.size()];
1554 for (int i = 0; i < seqs.size(); i++)
1556 cut[i] = (SequenceI) seqs.elementAt(i);
1562 addHistoryItem(new EditCommand("Cut Sequences",
1566 sg.getEndRes() - sg.getStartRes() + 1,
1567 viewport.alignment));
1569 viewport.setSelectionGroup(null);
1570 viewport.alignment.deleteGroup(sg);
1572 viewport.firePropertyChange("alignment", null,
1573 viewport.getAlignment().getSequences());
1575 if (viewport.getAlignment().getHeight() < 1)
1577 this.setVisible(false);
1581 protected void deleteGroups_actionPerformed()
1583 viewport.alignment.deleteAllGroups();
1584 viewport.sequenceColours = null;
1585 viewport.setSelectionGroup(null);
1587 alignPanel.paintAlignment(true);
1590 public void selectAllSequenceMenuItem_actionPerformed()
1592 SequenceGroup sg = new SequenceGroup();
1593 for (int i = 0; i < viewport.getAlignment().getSequences().size(); i++)
1595 sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);
1597 sg.setEndRes(viewport.alignment.getWidth() - 1);
1598 viewport.setSelectionGroup(sg);
1599 alignPanel.paintAlignment(true);
1600 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1603 public void deselectAllSequenceMenuItem_actionPerformed()
1605 if (viewport.cursorMode)
1607 alignPanel.seqPanel.keyboardNo1 = null;
1608 alignPanel.seqPanel.keyboardNo2 = null;
1610 viewport.setSelectionGroup(null);
1611 viewport.getColumnSelection().clear();
1612 viewport.setSelectionGroup(null);
1613 alignPanel.idPanel.idCanvas.searchResults = null;
1614 alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);
1615 alignPanel.paintAlignment(true);
1616 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1619 public void invertSequenceMenuItem_actionPerformed()
1621 SequenceGroup sg = viewport.getSelectionGroup();
1622 for (int i = 0; i < viewport.getAlignment().getSequences().size(); i++)
1624 sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false);
1627 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1630 void trimAlignment(boolean trimLeft)
1632 ColumnSelection colSel = viewport.getColumnSelection();
1635 if (colSel.size() > 0)
1639 column = colSel.getMin();
1643 column = colSel.getMax();
1647 if (viewport.getSelectionGroup() != null)
1649 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1650 hiddenRepSequences);
1654 seqs = viewport.alignment.getSequencesArray();
1657 TrimRegionCommand trimRegion;
1660 trimRegion = new TrimRegionCommand("Remove Left",
1661 TrimRegionCommand.TRIM_LEFT,
1666 viewport.selectionGroup);
1667 viewport.setStartRes(0);
1671 trimRegion = new TrimRegionCommand("Remove Right",
1672 TrimRegionCommand.TRIM_RIGHT,
1677 viewport.selectionGroup);
1680 statusBar.setText("Removed " + trimRegion.getSize() + " columns.");
1682 addHistoryItem(trimRegion);
1684 Vector groups = viewport.alignment.getGroups();
1686 for (int i = 0; i < groups.size(); i++)
1688 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
1690 if ( (trimLeft && !sg.adjustForRemoveLeft(column))
1691 || (!trimLeft && !sg.adjustForRemoveRight(column)))
1693 viewport.alignment.deleteGroup(sg);
1697 viewport.firePropertyChange("alignment", null,
1698 viewport.getAlignment().getSequences());
1702 public void removeGappedColumnMenuItem_actionPerformed()
1704 int start = 0, end = viewport.alignment.getWidth() - 1;
1707 if (viewport.getSelectionGroup() != null)
1709 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1710 hiddenRepSequences);
1711 start = viewport.getSelectionGroup().getStartRes();
1712 end = viewport.getSelectionGroup().getEndRes();
1716 seqs = viewport.alignment.getSequencesArray();
1719 RemoveGapColCommand removeGapCols =
1720 new RemoveGapColCommand("Remove Gapped Columns",
1723 viewport.alignment);
1725 addHistoryItem(removeGapCols);
1727 statusBar.setText("Removed " + removeGapCols.getSize() + " empty columns.");
1729 //This is to maintain viewport position on first residue
1731 SequenceI seq = viewport.alignment.getSequenceAt(0);
1732 int startRes = seq.findPosition(viewport.startRes);
1733 // ShiftList shifts;
1734 // viewport.getAlignment().removeGaps(shifts=new ShiftList());
1735 // edit.alColumnChanges=shifts.getInverse();
1736 // if (viewport.hasHiddenColumns)
1737 // viewport.getColumnSelection().compensateForEdits(shifts);
1738 viewport.setStartRes(seq.findIndex(startRes) - 1);
1739 viewport.firePropertyChange("alignment", null,
1740 viewport.getAlignment().getSequences());
1744 public void removeAllGapsMenuItem_actionPerformed()
1746 int start = 0, end = viewport.alignment.getWidth() - 1;
1749 if (viewport.getSelectionGroup() != null)
1751 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1752 hiddenRepSequences);
1753 start = viewport.getSelectionGroup().getStartRes();
1754 end = viewport.getSelectionGroup().getEndRes();
1758 seqs = viewport.alignment.getSequencesArray();
1761 //This is to maintain viewport position on first residue
1763 SequenceI seq = viewport.alignment.getSequenceAt(0);
1764 int startRes = seq.findPosition(viewport.startRes);
1766 addHistoryItem(new RemoveGapsCommand("Remove Gaps",
1769 viewport.alignment));
1771 viewport.setStartRes(seq.findIndex(startRes) - 1);
1773 viewport.firePropertyChange("alignment", null,
1774 viewport.getAlignment().getSequences());
1778 public void findMenuItem_actionPerformed()
1780 new Finder(alignPanel);
1783 * create a new view derived from the current view
1785 * @return frame for the new view
1787 public AlignFrame newView(String viewtitle)
1790 if (viewport.hasHiddenRows)
1792 newal = new Alignment(viewport.getAlignment().
1793 getHiddenSequences()
1794 .getFullAlignment().
1795 getSequencesArray());
1799 newal = new Alignment(viewport.alignment.getSequencesArray());
1802 if (viewport.alignment.getAlignmentAnnotation() != null)
1804 for (int i = 0; i < viewport.alignment.getAlignmentAnnotation().length; i++)
1806 if (!viewport.alignment.getAlignmentAnnotation()[i].autoCalculated)
1808 newal.addAnnotation(viewport.alignment.getAlignmentAnnotation()[i]);
1813 AlignFrame newaf = new AlignFrame(newal,
1818 newaf.viewport.sequenceSetID = alignPanel.av.getSequenceSetId();
1819 PaintRefresher.Register(alignPanel, alignPanel.av.getSequenceSetId());
1820 PaintRefresher.Register(newaf.alignPanel,
1821 newaf.alignPanel.av.getSequenceSetId());
1823 PaintRefresher.Register(newaf.alignPanel.idPanel.idCanvas,
1824 newaf.alignPanel.av.getSequenceSetId());
1825 PaintRefresher.Register(newaf.alignPanel.seqPanel.seqCanvas,
1826 newaf.alignPanel.av.getSequenceSetId());
1828 Vector comps = (Vector) PaintRefresher.components.get(viewport.
1829 getSequenceSetId());
1831 for (int i = 0; i < comps.size(); i++)
1833 if (comps.elementAt(i) instanceof AlignmentPanel)
1839 String title = new String(this.getTitle());
1840 if (viewtitle!=null)
1842 title = viewtitle+" ( "+title+")";
1844 if (title.indexOf("(View") > -1)
1846 title = title.substring(0, title.indexOf("(View"));
1848 title += "(View " + viewSize + ")";
1851 newaf.setTitle(title.toString());
1853 newaf.viewport.historyList = viewport.historyList;
1854 newaf.viewport.redoList = viewport.redoList;
1859 * @return list of feature groups on the view
1861 public String[] getFeatureGroups()
1863 FeatureRenderer fr = null;
1864 if (alignPanel!=null && (fr=alignPanel.getFeatureRenderer())!=null)
1866 return fr.getGroups();
1871 * get sequence feature groups that are hidden or shown
1872 * @param visible true is visible
1875 public String[] getFeatureGroupsOfState(boolean visible)
1877 FeatureRenderer fr = null;
1878 if (alignPanel!=null && (fr=alignPanel.getFeatureRenderer())!=null)
1880 return fr.getGroups(visible);
1885 * Change the display state for the given feature groups
1886 * @param groups list of group strings
1887 * @param state visible or invisible
1889 public void setFeatureGroupState(String[] groups, boolean state) {
1890 FeatureRenderer fr = null;
1891 this.sequenceFeatures.setState(true);
1892 viewport.showSequenceFeatures(true);
1893 if (alignPanel!=null && (fr=alignPanel.getFeatureRenderer())!=null)
1895 fr.setGroupState(groups, state);
1896 alignPanel.seqPanel.seqCanvas.repaint();
1897 if (alignPanel.overviewPanel != null)
1899 alignPanel.overviewPanel.updateOverviewImage();
1903 public void seqLimits_itemStateChanged()
1905 viewport.setShowJVSuffix(seqLimits.getState());
1906 alignPanel.fontChanged();
1907 alignPanel.paintAlignment(true);
1910 protected void colourTextMenuItem_actionPerformed()
1912 viewport.setColourText(colourTextMenuItem.getState());
1913 alignPanel.paintAlignment(true);
1916 protected void wrapMenuItem_actionPerformed()
1918 viewport.setWrapAlignment(wrapMenuItem.getState());
1919 alignPanel.setWrapAlignment(wrapMenuItem.getState());
1920 scaleAbove.setEnabled(wrapMenuItem.getState());
1921 scaleLeft.setEnabled(wrapMenuItem.getState());
1922 scaleRight.setEnabled(wrapMenuItem.getState());
1923 alignPanel.paintAlignment(true);
1926 public void overviewMenuItem_actionPerformed()
1928 if (alignPanel.overviewPanel != null)
1933 Frame frame = new Frame();
1934 OverviewPanel overview = new OverviewPanel(alignPanel);
1935 frame.add(overview);
1936 // +50 must allow for applet frame window
1937 jalview.bin.JalviewLite.addFrame(frame, "Overview " + this.getTitle(),
1938 overview.getPreferredSize().width,
1939 overview.getPreferredSize().height + 50);
1942 frame.addWindowListener(new WindowAdapter()
1944 public void windowClosing(WindowEvent e)
1946 alignPanel.setOverviewPanel(null);
1950 alignPanel.setOverviewPanel(overview);
1954 void changeColour(ColourSchemeI cs)
1960 if (viewport.getAbovePIDThreshold())
1962 threshold = SliderPanel.setPIDSliderSource(alignPanel, cs, "Background");
1964 cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus());
1966 viewport.setGlobalColourScheme(cs);
1970 cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
1973 if (viewport.getConservationSelected())
1976 Alignment al = (Alignment) viewport.alignment;
1977 Conservation c = new Conservation("All",
1978 ResidueProperties.propHash, 3,
1979 al.getSequences(), 0,
1983 c.verdict(false, viewport.ConsPercGaps);
1985 cs.setConservation(c);
1987 cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, cs,
1993 cs.setConservation(null);
1996 cs.setConsensus(viewport.hconsensus);
1999 viewport.setGlobalColourScheme(cs);
2001 if (viewport.getColourAppliesToAllGroups())
2003 Vector groups = viewport.alignment.getGroups();
2004 for (int i = 0; i < groups.size(); i++)
2006 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
2013 if (cs instanceof ClustalxColourScheme)
2015 sg.cs = new ClustalxColourScheme(
2016 sg.getSequences(viewport.hiddenRepSequences),
2023 sg.cs = (ColourSchemeI) cs.getClass().newInstance();
2025 catch (Exception ex)
2027 ex.printStackTrace();
2032 if (viewport.getAbovePIDThreshold()
2033 || cs instanceof PIDColourScheme
2034 || cs instanceof Blosum62ColourScheme)
2036 sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus());
2037 sg.cs.setConsensus(AAFrequency.calculate(
2038 sg.getSequences(viewport.hiddenRepSequences), 0, sg.getWidth()));
2042 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
2045 if (viewport.getConservationSelected())
2047 Conservation c = new Conservation("Group",
2048 ResidueProperties.propHash, 3,
2049 sg.getSequences(viewport.
2050 hiddenRepSequences), 0,
2051 viewport.alignment.getWidth() - 1);
2053 c.verdict(false, viewport.ConsPercGaps);
2054 sg.cs.setConservation(c);
2058 sg.cs.setConservation(null);
2059 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
2065 if (alignPanel.getOverviewPanel() != null)
2067 alignPanel.getOverviewPanel().updateOverviewImage();
2070 jalview.structure.StructureSelectionManager.getStructureSelectionManager()
2071 .sequenceColoursChanged(alignPanel);
2073 alignPanel.paintAlignment(true);
2076 protected void modifyPID_actionPerformed()
2078 if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme != null)
2080 SliderPanel.setPIDSliderSource(alignPanel, viewport.getGlobalColourScheme(),
2082 SliderPanel.showPIDSlider();
2086 protected void modifyConservation_actionPerformed()
2088 if (viewport.getConservationSelected() && viewport.globalColourScheme != null)
2090 SliderPanel.setConservationSlider(alignPanel, viewport.globalColourScheme,
2092 SliderPanel.showConservationSlider();
2096 protected void conservationMenuItem_actionPerformed()
2098 viewport.setConservationSelected(conservationMenuItem.getState());
2100 viewport.setAbovePIDThreshold(false);
2101 abovePIDThreshold.setState(false);
2103 changeColour(viewport.getGlobalColourScheme());
2105 modifyConservation_actionPerformed();
2108 public void abovePIDThreshold_actionPerformed()
2110 viewport.setAbovePIDThreshold(abovePIDThreshold.getState());
2112 conservationMenuItem.setState(false);
2113 viewport.setConservationSelected(false);
2115 changeColour(viewport.getGlobalColourScheme());
2117 modifyPID_actionPerformed();
2120 public void sortPairwiseMenuItem_actionPerformed()
2122 SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
2123 AlignmentSorter.sortByPID(viewport.getAlignment(),
2124 viewport.getAlignment().getSequenceAt(0), null);
2125 addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder,
2126 viewport.alignment));
2127 alignPanel.paintAlignment(true);
2130 public void sortIDMenuItem_actionPerformed()
2132 // addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
2133 // HistoryItem.SORT));
2134 AlignmentSorter.sortByID(viewport.getAlignment());
2135 alignPanel.paintAlignment(true);
2138 public void sortGroupMenuItem_actionPerformed()
2140 // addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
2141 // HistoryItem.SORT));
2142 AlignmentSorter.sortByGroup(viewport.getAlignment());
2143 alignPanel.paintAlignment(true);
2147 public void removeRedundancyMenuItem_actionPerformed()
2149 new RedundancyPanel(alignPanel);
2152 public void pairwiseAlignmentMenuItem_actionPerformed()
2154 if (viewport.getSelectionGroup() != null
2155 && viewport.getSelectionGroup().getSize() > 1)
2157 Frame frame = new Frame();
2158 frame.add(new PairwiseAlignPanel(alignPanel));
2159 jalview.bin.JalviewLite.addFrame(frame, "Pairwise Alignment", 600, 500);
2163 public void PCAMenuItem_actionPerformed()
2165 //are the sequences aligned?
2166 if (!viewport.alignment.isAligned())
2169 int Width = viewport.getAlignment().getWidth();
2171 for (int i = 0; i < viewport.getAlignment().getSequences().size();
2174 current = viewport.getAlignment().getSequenceAt(i);
2176 if (current.getLength() < Width)
2178 current.insertCharAt(Width - 1, viewport.getGapCharacter());
2181 alignPanel.paintAlignment(true);
2184 if ( (viewport.getSelectionGroup() != null &&
2185 viewport.getSelectionGroup().getSize() < 4 &&
2186 viewport.getSelectionGroup().getSize() > 0)
2187 || viewport.getAlignment().getHeight() < 4)
2194 new PCAPanel(viewport);
2196 catch (java.lang.OutOfMemoryError ex)
2202 public void averageDistanceTreeMenuItem_actionPerformed()
2204 NewTreePanel("AV", "PID", "Average distance tree using PID");
2207 public void neighbourTreeMenuItem_actionPerformed()
2209 NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
2212 protected void njTreeBlosumMenuItem_actionPerformed()
2214 NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
2217 protected void avTreeBlosumMenuItem_actionPerformed()
2219 NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
2222 void NewTreePanel(String type, String pwType, String title)
2224 //are the sequences aligned?
2225 if (!viewport.alignment.isAligned())
2228 int Width = viewport.getAlignment().getWidth();
2230 for (int i = 0; i < viewport.getAlignment().getSequences().size();
2233 current = viewport.getAlignment().getSequenceAt(i);
2235 if (current.getLength() < Width)
2237 current.insertCharAt(Width - 1, viewport.getGapCharacter());
2240 alignPanel.paintAlignment(true);
2244 if ( (viewport.getSelectionGroup() != null &&
2245 viewport.getSelectionGroup().getSize() > 1)
2246 || (viewport.getSelectionGroup() == null
2247 && viewport.alignment.getHeight() > 1))
2249 final TreePanel tp = new TreePanel(viewport,
2253 addTreeMenuItem(tp, title);
2255 jalview.bin.JalviewLite.addFrame(tp, title, 600, 500);
2259 void loadTree_actionPerformed()
2261 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
2262 cap.setText("Paste your Newick tree file here.");
2263 cap.setTreeImport();
2264 Frame frame = new Frame();
2266 jalview.bin.JalviewLite.addFrame(frame, "Paste Newick file ", 400, 300);
2269 public void loadTree(jalview.io.NewickFile tree, String treeFile)
2271 TreePanel tp = new TreePanel(viewport,
2275 jalview.bin.JalviewLite.addFrame(tp, treeFile, 600, 500);
2276 addTreeMenuItem(tp, treeFile);
2279 void addTreeMenuItem(final TreePanel treePanel, String title)
2281 final MenuItem item = new MenuItem(title);
2282 sortByTreeMenu.add(item);
2283 item.addActionListener(new java.awt.event.ActionListener()
2285 public void actionPerformed(ActionEvent evt)
2287 // addHistoryItem(new HistoryItem("Sort", viewport.alignment,
2288 // HistoryItem.SORT));
2289 AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree());
2290 alignPanel.paintAlignment(true);
2294 treePanel.addWindowListener(new WindowAdapter()
2296 public void windowClosing(WindowEvent e)
2298 sortByTreeMenu.remove(item);
2303 protected void documentation_actionPerformed()
2305 showURL("http://www.jalview.org/help.html", "HELP");
2308 protected void about_actionPerformed()
2315 public AboutPanel(String version)
2317 this.version = version;
2320 public void paint(Graphics g)
2322 g.setColor(Color.white);
2323 g.fillRect(0, 0, getSize().width, getSize().height);
2324 g.setFont(new Font("Helvetica", Font.PLAIN, 12));
2325 FontMetrics fm = g.getFontMetrics();
2326 int fh = fm.getHeight();
2328 g.setColor(Color.black);
2329 g.setFont(new Font("Helvetica", Font.BOLD, 14));
2330 g.drawString("Jalview - Release " + version, 200, y += fh);
2331 g.setFont(new Font("Helvetica", Font.PLAIN, 12));
2332 g.drawString("Authors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton.",
2334 g.drawString("Current development managed by Andrew Waterhouse; Barton Group, University of Dundee.",
2337 "For any issues relating to Jalview, email help@jalview.org", x,
2339 g.drawString("If you use JalView, please cite:", x, y += fh + 8);
2340 g.drawString("\"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"",
2342 g.drawString("Bioinformatics, 2004 20;426-7.", x, y += fh);
2346 String version = "test";
2347 java.net.URL url = getClass().getResource("/.build_properties");
2352 BufferedReader reader = new BufferedReader(new InputStreamReader(
2355 while ( (line = reader.readLine()) != null)
2357 if (line.indexOf("VERSION") > -1)
2359 version = line.substring(line.indexOf("=") + 1);
2363 catch (Exception ex)
2365 ex.printStackTrace();
2369 Frame frame = new Frame();
2370 frame.add(new AboutPanel(version));
2371 jalview.bin.JalviewLite.addFrame(frame, "Jalview", 580, 200);
2375 public void showURL(String url, String target)
2377 if (viewport.applet == null)
2379 System.out.println("Not running as applet - no browser available.");
2385 System.out.println("Show url: " + url);
2386 viewport.applet.getAppletContext().showDocument(new java.net.URL(url),
2389 catch (Exception ex)
2391 ex.printStackTrace();
2396 //////////////////////////////////////////////////////////////////////////////////
2397 //JBuilder Graphics here
2399 MenuBar alignFrameMenuBar = new MenuBar();
2400 Menu fileMenu = new Menu("File");
2401 MenuItem loadApplication = new MenuItem("View in Full Application");
2402 MenuItem loadTree = new MenuItem("Load Associated Tree ...");
2403 MenuItem loadAnnotations = new MenuItem(
2404 "Load Features/Annotations ...");
2405 MenuItem outputFeatures = new MenuItem("Export Features ...");
2406 MenuItem outputAnnotations = new MenuItem("Export Annotations ...");
2408 MenuItem closeMenuItem = new MenuItem("Close");
2409 Menu editMenu = new Menu("Edit");
2410 Menu viewMenu = new Menu("View");
2411 Menu colourMenu = new Menu("Colour");
2412 Menu calculateMenu = new Menu("Calculate");
2413 MenuItem selectAllSequenceMenuItem = new MenuItem("Select all");
2414 MenuItem deselectAllSequenceMenuItem = new MenuItem("Deselect All");
2415 MenuItem invertSequenceMenuItem = new MenuItem("Invert Selection");
2416 MenuItem remove2LeftMenuItem = new MenuItem();
2417 MenuItem remove2RightMenuItem = new MenuItem();
2418 MenuItem removeGappedColumnMenuItem = new MenuItem();
2419 MenuItem removeAllGapsMenuItem = new MenuItem();
2420 CheckboxMenuItem viewBoxesMenuItem = new CheckboxMenuItem();
2421 CheckboxMenuItem viewTextMenuItem = new CheckboxMenuItem();
2422 MenuItem sortPairwiseMenuItem = new MenuItem();
2423 MenuItem sortIDMenuItem = new MenuItem();
2424 MenuItem sortGroupMenuItem = new MenuItem();
2425 MenuItem removeRedundancyMenuItem = new MenuItem();
2426 MenuItem pairwiseAlignmentMenuItem = new MenuItem();
2427 MenuItem PCAMenuItem = new MenuItem();
2428 MenuItem averageDistanceTreeMenuItem = new MenuItem();
2429 MenuItem neighbourTreeMenuItem = new MenuItem();
2430 BorderLayout borderLayout1 = new BorderLayout();
2431 public Label statusBar = new Label();
2432 Menu outputTextboxMenu = new Menu();
2433 MenuItem clustalColour = new MenuItem();
2434 MenuItem zappoColour = new MenuItem();
2435 MenuItem taylorColour = new MenuItem();
2436 MenuItem hydrophobicityColour = new MenuItem();
2437 MenuItem helixColour = new MenuItem();
2438 MenuItem strandColour = new MenuItem();
2439 MenuItem turnColour = new MenuItem();
2440 MenuItem buriedColour = new MenuItem();
2441 MenuItem userDefinedColour = new MenuItem();
2442 MenuItem PIDColour = new MenuItem();
2443 MenuItem BLOSUM62Colour = new MenuItem();
2444 MenuItem njTreeBlosumMenuItem = new MenuItem();
2445 MenuItem avDistanceTreeBlosumMenuItem = new MenuItem();
2446 CheckboxMenuItem annotationPanelMenuItem = new CheckboxMenuItem();
2447 CheckboxMenuItem colourTextMenuItem = new CheckboxMenuItem();
2448 MenuItem alProperties = new MenuItem("Alignment Properties...");
2449 MenuItem overviewMenuItem = new MenuItem();
2450 MenuItem undoMenuItem = new MenuItem();
2451 MenuItem redoMenuItem = new MenuItem();
2452 CheckboxMenuItem conservationMenuItem = new CheckboxMenuItem();
2453 MenuItem noColourmenuItem = new MenuItem();
2454 CheckboxMenuItem wrapMenuItem = new CheckboxMenuItem();
2455 CheckboxMenuItem renderGapsMenuItem = new CheckboxMenuItem();
2456 MenuItem findMenuItem = new MenuItem();
2457 CheckboxMenuItem abovePIDThreshold = new CheckboxMenuItem();
2458 MenuItem nucleotideColour = new MenuItem();
2459 MenuItem deleteGroups = new MenuItem();
2460 MenuItem delete = new MenuItem();
2461 MenuItem copy = new MenuItem();
2462 MenuItem cut = new MenuItem();
2463 Menu pasteMenu = new Menu();
2464 MenuItem pasteNew = new MenuItem();
2465 MenuItem pasteThis = new MenuItem();
2466 CheckboxMenuItem applyToAllGroups = new CheckboxMenuItem();
2467 MenuItem font = new MenuItem();
2468 CheckboxMenuItem scaleAbove = new CheckboxMenuItem();
2469 CheckboxMenuItem scaleLeft = new CheckboxMenuItem();
2470 CheckboxMenuItem scaleRight = new CheckboxMenuItem();
2471 MenuItem modifyPID = new MenuItem();
2472 MenuItem modifyConservation = new MenuItem();
2473 CheckboxMenuItem autoCalculate
2474 = new CheckboxMenuItem("Autocalculate Consensus", true);
2475 Menu sortByTreeMenu = new Menu();
2476 Menu sort = new Menu();
2477 Menu calculate = new Menu();
2478 MenuItem inputText = new MenuItem();
2479 Menu helpMenu = new Menu();
2480 MenuItem documentation = new MenuItem();
2481 MenuItem about = new MenuItem();
2482 CheckboxMenuItem seqLimits = new CheckboxMenuItem();
2483 CheckboxMenuItem centreColumnLabelFlag = new CheckboxMenuItem();
2485 private void jbInit()
2489 setMenuBar(alignFrameMenuBar);
2493 // dynamically fill save as menu with available formats
2494 for (int i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length;
2498 item = new MenuItem(jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS[i]);
2500 item.addActionListener(new java.awt.event.ActionListener()
2502 public void actionPerformed(ActionEvent e)
2504 outputText_actionPerformed(e);
2508 outputTextboxMenu.add(item);
2510 closeMenuItem.addActionListener(this);
2511 loadApplication.addActionListener(this);
2513 loadTree.addActionListener(this);
2514 loadAnnotations.addActionListener(this);
2515 outputFeatures.addActionListener(this);
2516 outputAnnotations.addActionListener(this);
2517 selectAllSequenceMenuItem.addActionListener(this);
2518 deselectAllSequenceMenuItem.addActionListener(this);
2519 invertSequenceMenuItem.addActionListener(this);
2520 remove2LeftMenuItem.setLabel("Remove Left");
2521 remove2LeftMenuItem.addActionListener(this);
2522 remove2RightMenuItem.setLabel("Remove Right");
2523 remove2RightMenuItem.addActionListener(this);
2524 removeGappedColumnMenuItem.setLabel("Remove Empty Columns");
2525 removeGappedColumnMenuItem.addActionListener(this);
2526 removeAllGapsMenuItem.setLabel("Remove All Gaps");
2527 removeAllGapsMenuItem.addActionListener(this);
2528 viewBoxesMenuItem.setLabel("Boxes");
2529 viewBoxesMenuItem.setState(true);
2530 viewBoxesMenuItem.addItemListener(this);
2531 viewTextMenuItem.setLabel("Text");
2532 viewTextMenuItem.setState(true);
2533 viewTextMenuItem.addItemListener(this);
2534 sortPairwiseMenuItem.setLabel("by Pairwise Identity");
2535 sortPairwiseMenuItem.addActionListener(this);
2536 sortIDMenuItem.setLabel("by ID");
2537 sortIDMenuItem.addActionListener(this);
2538 sortGroupMenuItem.setLabel("by Group");
2539 sortGroupMenuItem.addActionListener(this);
2540 removeRedundancyMenuItem.setLabel("Remove Redundancy...");
2541 removeRedundancyMenuItem.addActionListener(this);
2542 pairwiseAlignmentMenuItem.setLabel("Pairwise Alignments...");
2543 pairwiseAlignmentMenuItem.addActionListener(this);
2544 PCAMenuItem.setLabel("Principal Component Analysis");
2545 PCAMenuItem.addActionListener(this);
2546 averageDistanceTreeMenuItem.setLabel(
2547 "Average Distance Using % Identity");
2548 averageDistanceTreeMenuItem.addActionListener(this);
2549 neighbourTreeMenuItem.setLabel("Neighbour Joining Using % Identity");
2550 neighbourTreeMenuItem.addActionListener(this);
2551 statusBar.setBackground(Color.white);
2552 statusBar.setFont(new java.awt.Font("Verdana", 0, 11));
2553 statusBar.setText("Status bar");
2554 outputTextboxMenu.setLabel("Output to Textbox");
2555 clustalColour.setLabel("Clustalx");
2557 clustalColour.addActionListener(this);
2558 zappoColour.setLabel("Zappo");
2559 zappoColour.addActionListener(this);
2560 taylorColour.setLabel("Taylor");
2561 taylorColour.addActionListener(this);
2562 hydrophobicityColour.setLabel("Hydrophobicity");
2563 hydrophobicityColour.addActionListener(this);
2564 helixColour.setLabel("Helix Propensity");
2565 helixColour.addActionListener(this);
2566 strandColour.setLabel("Strand Propensity");
2567 strandColour.addActionListener(this);
2568 turnColour.setLabel("Turn Propensity");
2569 turnColour.addActionListener(this);
2570 buriedColour.setLabel("Buried Index");
2571 buriedColour.addActionListener(this);
2572 userDefinedColour.setLabel("User Defined...");
2573 userDefinedColour.addActionListener(this);
2574 PIDColour.setLabel("Percentage Identity");
2575 PIDColour.addActionListener(this);
2576 BLOSUM62Colour.setLabel("BLOSUM62 Score");
2577 BLOSUM62Colour.addActionListener(this);
2578 avDistanceTreeBlosumMenuItem.setLabel(
2579 "Average Distance Using BLOSUM62");
2580 avDistanceTreeBlosumMenuItem.addActionListener(this);
2581 njTreeBlosumMenuItem.setLabel("Neighbour Joining Using BLOSUM62");
2582 njTreeBlosumMenuItem.addActionListener(this);
2583 annotationPanelMenuItem.setLabel("Show Annotations");
2584 annotationPanelMenuItem.addItemListener(this);
2585 colourTextMenuItem.setLabel("Colour Text");
2586 colourTextMenuItem.addItemListener(this);
2587 alProperties.addActionListener(this);
2588 overviewMenuItem.setLabel("Overview Window");
2589 overviewMenuItem.addActionListener(this);
2590 undoMenuItem.setEnabled(false);
2591 undoMenuItem.setLabel("Undo");
2592 undoMenuItem.addActionListener(this);
2593 redoMenuItem.setEnabled(false);
2594 redoMenuItem.setLabel("Redo");
2595 redoMenuItem.addActionListener(this);
2596 conservationMenuItem.setLabel("by Conservation");
2597 conservationMenuItem.addItemListener(this);
2598 noColourmenuItem.setLabel("None");
2599 noColourmenuItem.addActionListener(this);
2600 wrapMenuItem.setLabel("Wrap");
2601 wrapMenuItem.addItemListener(this);
2602 renderGapsMenuItem.setLabel("Show Gaps");
2603 renderGapsMenuItem.setState(true);
2604 renderGapsMenuItem.addItemListener(this);
2605 findMenuItem.setLabel("Find...");
2606 findMenuItem.addActionListener(this);
2607 abovePIDThreshold.setLabel("Above Identity Threshold");
2608 abovePIDThreshold.addItemListener(this);
2609 nucleotideColour.setLabel("Nucleotide");
2610 nucleotideColour.addActionListener(this);
2611 deleteGroups.setLabel("Undefine Groups");
2612 deleteGroups.addActionListener(this);
2613 copy.setLabel("Copy");
2614 copy.addActionListener(this);
2615 cut.setLabel("Cut");
2616 cut.addActionListener(this);
2617 delete.setLabel("Delete");
2618 delete.addActionListener(this);
2619 pasteMenu.setLabel("Paste");
2620 pasteNew.setLabel("To New Alignment");
2621 pasteNew.addActionListener(this);
2622 pasteThis.setLabel("Add To This Alignment");
2623 pasteThis.addActionListener(this);
2624 applyToAllGroups.setLabel("Apply Colour To All Groups");
2625 applyToAllGroups.setState(true);
2626 applyToAllGroups.addItemListener(this);
2627 font.setLabel("Font...");
2628 font.addActionListener(this);
2629 scaleAbove.setLabel("Scale Above");
2630 scaleAbove.setState(true);
2631 scaleAbove.setEnabled(false);
2632 scaleAbove.addItemListener(this);
2633 scaleLeft.setEnabled(false);
2634 scaleLeft.setState(true);
2635 scaleLeft.setLabel("Scale Left");
2636 scaleLeft.addItemListener(this);
2637 scaleRight.setEnabled(false);
2638 scaleRight.setState(true);
2639 scaleRight.setLabel("Scale Right");
2640 scaleRight.addItemListener(this);
2641 modifyPID.setLabel("Modify Identity Threshold...");
2642 modifyPID.addActionListener(this);
2643 modifyConservation.setLabel("Modify Conservation Threshold...");
2644 modifyConservation.addActionListener(this);
2645 sortByTreeMenu.setLabel("By Tree Order");
2646 sort.setLabel("Sort");
2647 calculate.setLabel("Calculate Tree");
2648 autoCalculate.addItemListener(this);
2649 inputText.setLabel("Input from textbox");
2650 inputText.addActionListener(this);
2651 centreColumnLabelFlag.setLabel("Centre column labels");
2652 centreColumnLabelFlag.addItemListener(this);
2654 helpMenu.setLabel("Help");
2655 documentation.setLabel("Documentation");
2656 documentation.addActionListener(this);
2658 about.setLabel("About...");
2659 about.addActionListener(this);
2660 seqLimits.setState(true);
2661 seqLimits.setLabel("Show Sequence Limits");
2662 seqLimits.addItemListener(this);
2663 featureSettings.setLabel("Feature Settings...");
2664 featureSettings.addActionListener(this);
2665 sequenceFeatures.setLabel("Sequence Features");
2666 sequenceFeatures.addItemListener(this);
2667 sequenceFeatures.setState(false);
2668 annotationColour.setLabel("by Annotation...");
2669 annotationColour.addActionListener(this);
2670 invertSequenceMenuItem.setLabel("Invert Sequence Selection");
2671 invertColSel.setLabel("Invert Column Selection");
2672 menu1.setLabel("Show");
2673 showColumns.setLabel("All Columns ");
2674 showSeqs.setLabel("All Sequences");
2675 menu2.setLabel("Hide");
2676 hideColumns.setLabel("Selected Columns");
2677 hideSequences.setLabel("Selected Sequences");
2678 invertColSel.addActionListener(this);
2679 showColumns.addActionListener(this);
2680 showSeqs.addActionListener(this);
2681 hideColumns.addActionListener(this);
2682 hideSequences.addActionListener(this);
2683 formatMenu.setLabel("Format");
2684 selectMenu.setLabel("Select");
2685 newView.setLabel("New View");
2686 newView.addActionListener(this);
2687 alignFrameMenuBar.add(fileMenu);
2688 alignFrameMenuBar.add(editMenu);
2689 alignFrameMenuBar.add(selectMenu);
2690 alignFrameMenuBar.add(viewMenu);
2691 alignFrameMenuBar.add(formatMenu);
2692 alignFrameMenuBar.add(colourMenu);
2693 alignFrameMenuBar.add(calculateMenu);
2694 alignFrameMenuBar.add(helpMenu);
2696 fileMenu.add(inputText);
2697 fileMenu.add(loadTree);
2698 fileMenu.add(loadAnnotations);
2700 fileMenu.addSeparator();
2701 fileMenu.add(outputTextboxMenu);
2702 fileMenu.add(outputFeatures);
2703 fileMenu.add(outputAnnotations);
2705 if (jalviewServletURL != null)
2707 fileMenu.add(loadApplication);
2710 fileMenu.addSeparator();
2711 fileMenu.add(closeMenuItem);
2713 editMenu.add(undoMenuItem);
2714 editMenu.add(redoMenuItem);
2717 editMenu.add(pasteMenu);
2718 editMenu.add(delete);
2719 editMenu.addSeparator();
2720 editMenu.add(remove2LeftMenuItem);
2721 editMenu.add(remove2RightMenuItem);
2722 editMenu.add(removeGappedColumnMenuItem);
2723 editMenu.add(removeAllGapsMenuItem);
2724 editMenu.add(removeRedundancyMenuItem);
2725 viewMenu.add(newView);
2726 viewMenu.addSeparator();
2727 viewMenu.add(menu1);
2728 viewMenu.add(menu2);
2729 viewMenu.addSeparator();
2730 viewMenu.add(annotationPanelMenuItem);
2731 viewMenu.addSeparator();
2732 viewMenu.add(sequenceFeatures);
2733 viewMenu.add(featureSettings);
2734 viewMenu.addSeparator();
2735 viewMenu.add(alProperties);
2736 viewMenu.addSeparator();
2737 viewMenu.add(overviewMenuItem);
2738 colourMenu.add(applyToAllGroups);
2739 colourMenu.addSeparator();
2740 colourMenu.add(noColourmenuItem);
2741 colourMenu.add(clustalColour);
2742 colourMenu.add(BLOSUM62Colour);
2743 colourMenu.add(PIDColour);
2744 colourMenu.add(zappoColour);
2745 colourMenu.add(taylorColour);
2746 colourMenu.add(hydrophobicityColour);
2747 colourMenu.add(helixColour);
2748 colourMenu.add(strandColour);
2749 colourMenu.add(turnColour);
2750 colourMenu.add(buriedColour);
2751 colourMenu.add(nucleotideColour);
2752 colourMenu.add(userDefinedColour);
2753 colourMenu.addSeparator();
2754 colourMenu.add(conservationMenuItem);
2755 colourMenu.add(modifyConservation);
2756 colourMenu.add(abovePIDThreshold);
2757 colourMenu.add(modifyPID);
2758 colourMenu.add(annotationColour);
2759 calculateMenu.add(sort);
2760 calculateMenu.add(calculate);
2761 calculateMenu.addSeparator();
2762 calculateMenu.add(pairwiseAlignmentMenuItem);
2763 calculateMenu.add(PCAMenuItem);
2764 calculateMenu.add(autoCalculate);
2765 this.add(statusBar, BorderLayout.SOUTH);
2766 pasteMenu.add(pasteNew);
2767 pasteMenu.add(pasteThis);
2768 sort.add(sortIDMenuItem);
2769 sort.add(sortByTreeMenu);
2770 sort.add(sortGroupMenuItem);
2771 sort.add(sortPairwiseMenuItem);
2772 calculate.add(averageDistanceTreeMenuItem);
2773 calculate.add(neighbourTreeMenuItem);
2774 calculate.add(avDistanceTreeBlosumMenuItem);
2775 calculate.add(njTreeBlosumMenuItem);
2776 helpMenu.add(documentation);
2777 helpMenu.add(about);
2778 menu1.add(showColumns);
2779 menu1.add(showSeqs);
2780 menu2.add(hideColumns);
2781 menu2.add(hideSequences);
2782 formatMenu.add(font);
2783 formatMenu.add(seqLimits);
2784 formatMenu.add(wrapMenuItem);
2785 formatMenu.add(scaleAbove);
2786 formatMenu.add(scaleLeft);
2787 formatMenu.add(scaleRight);
2788 formatMenu.add(viewBoxesMenuItem);
2789 formatMenu.add(viewTextMenuItem);
2790 formatMenu.add(colourTextMenuItem);
2791 formatMenu.add(renderGapsMenuItem);
2792 formatMenu.add(centreColumnLabelFlag);
2793 selectMenu.add(findMenuItem);
2794 selectMenu.addSeparator();
2795 selectMenu.add(selectAllSequenceMenuItem);
2796 selectMenu.add(deselectAllSequenceMenuItem);
2797 selectMenu.add(invertSequenceMenuItem);
2798 selectMenu.add(invertColSel);
2799 selectMenu.add(deleteGroups);
2801 MenuItem featureSettings = new MenuItem();
2802 CheckboxMenuItem sequenceFeatures = new CheckboxMenuItem();
2803 MenuItem annotationColour = new MenuItem();
2804 MenuItem invertColSel = new MenuItem();
2805 Menu menu1 = new Menu();
2806 MenuItem showColumns = new MenuItem();
2807 MenuItem showSeqs = new MenuItem();
2808 Menu menu2 = new Menu();
2809 MenuItem hideColumns = new MenuItem();
2810 MenuItem hideSequences = new MenuItem();
2811 Menu formatMenu = new Menu();
2812 Menu selectMenu = new Menu();
2813 MenuItem newView = new MenuItem();
2816 * Attach the alignFrame panels after embedding menus, if necessary.
2817 * This used to be called setEmbedded, but is now creates the
2818 * dropdown menus in a platform independent manner
2819 * to avoid OSX/Mac menu appendage daftness.
2821 * @param reallyEmbedded true to attach the view to the applet area on the page rather than in a new window
2823 public void createAlignFrameWindow(boolean reallyEmbedded, String title)
2828 // Explicly build the embedded menu panel for the on-page applet
2830 // view cannot be closed if its actually on the page
2831 fileMenu.remove(closeMenuItem);
2832 fileMenu.remove(3); // Remove Seperator
2833 embeddedMenu = makeEmbeddedPopupMenu(alignFrameMenuBar, "Arial", Font.PLAIN, 10, false); // use our own fonts.
2834 // and actually add the components to the applet area
2835 viewport.applet.setLayout(new BorderLayout());
2836 viewport.applet.add(embeddedMenu, BorderLayout.NORTH);
2837 viewport.applet.add(statusBar, BorderLayout.SOUTH);
2838 alignPanel.setSize(viewport.applet.getSize().width,
2839 viewport.applet.getSize().height
2840 - embeddedMenu.HEIGHT - statusBar.HEIGHT);
2841 viewport.applet.add(alignPanel, BorderLayout.CENTER);
2842 viewport.applet.validate();
2845 // test and embed menu bar if necessary.
2847 if (embedMenuIfNeeded(alignPanel)) {
2848 // adjust for status bar height too
2849 alignPanel.setSize(getSize().width,
2851 - statusBar.HEIGHT);
2853 add(statusBar, BorderLayout.SOUTH);
2854 add(alignPanel, BorderLayout.CENTER);
2855 // and register with the applet so it can pass external API calls to us
2856 jalview.bin.JalviewLite.addFrame(this, title, DEFAULT_WIDTH,