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 Frame implements ActionListener,
37 ItemListener, KeyListener, MouseListener
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();
103 param = applet.getParameter("windowWidth");
106 int width = Integer.parseInt(param);
107 DEFAULT_WIDTH = width;
109 param = applet.getParameter("windowHeight");
112 int height = Integer.parseInt(param);
113 DEFAULT_HEIGHT = height;
121 //Some JVMS send keyevents to Top frame or lowest panel,
122 //Havent worked out why yet. So add to both this frame and seqCanvas for now
123 this.addKeyListener(this);
124 alignPanel.seqPanel.seqCanvas.addKeyListener(this);
125 alignPanel.idPanel.idCanvas.addKeyListener(this);
126 alignPanel.scalePanel.addKeyListener(this);
127 alignPanel.annotationPanel.addKeyListener(this);
135 add(alignPanel, BorderLayout.CENTER);
136 jalview.bin.JalviewLite.addFrame(this, title, DEFAULT_WIDTH,
139 alignPanel.validate();
140 alignPanel.paintAlignment(true);
143 public AlignViewport getAlignViewport()
148 public SeqCanvas getSeqcanvas()
150 return alignPanel.seqPanel.seqCanvas;
156 * @param String DOCUMENT ME!
159 public void parseFeaturesFile(String file, String type)
161 Hashtable featureLinks = new Hashtable();
162 boolean featuresFile = false;
165 featuresFile = new jalview.io.FeaturesFile(file,
166 type).parse(viewport.alignment,
167 alignPanel.seqPanel.seqCanvas.
168 getFeatureRenderer().featureColours,
174 ex.printStackTrace();
179 if (featureLinks.size() > 0)
181 alignPanel.seqPanel.seqCanvas
182 .getFeatureRenderer().featureLinks = featureLinks;
184 viewport.showSequenceFeatures = true;
185 sequenceFeatures.setState(true);
186 alignPanel.paintAlignment(true);
191 public void keyPressed(KeyEvent evt)
193 if (viewport.cursorMode &&
194 ( (evt.getKeyCode() >= KeyEvent.VK_0 &&
195 evt.getKeyCode() <= KeyEvent.VK_9)
197 (evt.getKeyCode() >= KeyEvent.VK_NUMPAD0 &&
198 evt.getKeyCode() <= KeyEvent.VK_NUMPAD9)
200 && Character.isDigit(evt.getKeyChar()))
201 alignPanel.seqPanel.numberPressed(evt.getKeyChar());
204 switch (evt.getKeyCode())
206 case 27: // escape key
207 deselectAllSequenceMenuItem_actionPerformed();
210 if (evt.isControlDown() || evt.isMetaDown())
212 cut_actionPerformed();
216 if (viewport.cursorMode && !evt.isControlDown())
218 alignPanel.seqPanel.setCursorColumn();
220 if (evt.isControlDown() || evt.isMetaDown())
222 copy_actionPerformed();
226 if (evt.isControlDown())
228 paste(evt.isShiftDown());
232 if (evt.isControlDown() || evt.isMetaDown())
234 selectAllSequenceMenuItem_actionPerformed();
237 case KeyEvent.VK_DOWN:
238 if (viewport.cursorMode)
240 alignPanel.seqPanel.moveCursor(0, 1);
244 moveSelectedSequences(false);
249 if (viewport.cursorMode)
251 alignPanel.seqPanel.moveCursor(0, -1);
255 moveSelectedSequences(true);
259 case KeyEvent.VK_LEFT:
260 if (evt.isAltDown() || !viewport.cursorMode)
261 slideSequences(false,
262 alignPanel.seqPanel.getKeyboardNo1());
264 alignPanel.seqPanel.moveCursor( -1, 0);
267 case KeyEvent.VK_RIGHT:
268 if (evt.isAltDown() || !viewport.cursorMode)
270 alignPanel.seqPanel.getKeyboardNo1());
272 alignPanel.seqPanel.moveCursor( 1, 0);
275 case KeyEvent.VK_SPACE:
276 if (viewport.cursorMode)
278 alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown()
285 case KeyEvent.VK_DELETE:
286 case KeyEvent.VK_BACK_SPACE:
287 if (viewport.cursorMode)
289 alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown()
295 cut_actionPerformed();
296 alignPanel.seqPanel.seqCanvas.repaint();
301 if (viewport.cursorMode)
303 alignPanel.seqPanel.setCursorRow();
307 if (viewport.cursorMode)
309 alignPanel.seqPanel.setCursorPosition();
313 case KeyEvent.VK_ENTER:
314 case KeyEvent.VK_COMMA:
315 if (viewport.cursorMode)
317 alignPanel.seqPanel.setCursorRowAndColumn();
322 if (viewport.cursorMode)
324 alignPanel.seqPanel.setSelectionAreaAtCursor(true);
328 if (viewport.cursorMode)
330 alignPanel.seqPanel.setSelectionAreaAtCursor(false);
335 viewport.cursorMode = !viewport.cursorMode;
336 statusBar.setText("Keyboard editing mode is " +
337 (viewport.cursorMode ? "on" : "off"));
338 if (viewport.cursorMode)
340 alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes;
341 alignPanel.seqPanel.seqCanvas.cursorY = viewport.startSeq;
346 if (evt.isControlDown())
348 findMenuItem_actionPerformed();
354 boolean toggleSeqs = !evt.isControlDown();
355 boolean toggleCols = !evt.isShiftDown();
356 boolean hide = false;
357 SequenceGroup sg = viewport.getSelectionGroup();
361 if (sg != null && sg.getSize() != viewport.alignment.getHeight())
364 viewport.hideAllSelectedSeqs();
366 else if (! (toggleCols && viewport.colSel.getSelected().size() > 0))
368 viewport.showAllHiddenSeqs();
374 if (viewport.colSel.getSelected().size() > 0)
376 viewport.hideSelectedColumns();
379 viewport.selectionGroup = sg;
384 viewport.showAllHiddenColumns();
390 case KeyEvent.VK_PAGE_UP:
391 if (viewport.wrapAlignment)
393 alignPanel.scrollUp(true);
397 alignPanel.setScrollValues(viewport.startRes,
399 - viewport.endSeq + viewport.startSeq);
403 case KeyEvent.VK_PAGE_DOWN:
404 if (viewport.wrapAlignment)
406 alignPanel.scrollUp(false);
410 alignPanel.setScrollValues(viewport.startRes,
412 + viewport.endSeq - viewport.startSeq);
417 if (evt.isControlDown())
419 undoMenuItem_actionPerformed();
424 if (evt.isControlDown())
426 redoMenuItem_actionPerformed();
431 if (evt.isControlDown())
438 if (evt.isControlDown())
440 trimAlignment(false);
445 if (evt.isControlDown())
447 if (evt.isShiftDown())
449 this.removeAllGapsMenuItem_actionPerformed();
453 removeGappedColumnMenuItem_actionPerformed();
458 if (evt.isControlDown())
462 viewport.invertColumnSelection();
466 this.invertSequenceMenuItem_actionPerformed();
472 if (evt.isControlDown())
474 this.deleteGroups_actionPerformed();
479 if (evt.isControlDown())
486 alignPanel.paintAlignment(true);
489 public void keyReleased(KeyEvent evt)
492 public void keyTyped(KeyEvent evt)
495 public void itemStateChanged(ItemEvent evt)
497 if (evt.getSource() == colourTextMenuItem)
499 colourTextMenuItem_actionPerformed();
501 else if (evt.getSource() == wrapMenuItem)
503 wrapMenuItem_actionPerformed();
505 else if (evt.getSource() == scaleAbove)
507 viewport.setScaleAboveWrapped(scaleAbove.getState());
509 else if (evt.getSource() == scaleLeft)
511 viewport.setScaleLeftWrapped(scaleLeft.getState());
513 else if (evt.getSource() == scaleRight)
515 viewport.setScaleRightWrapped(scaleRight.getState());
517 else if (evt.getSource() == seqLimits)
519 seqLimits_itemStateChanged();
521 else if (evt.getSource() == viewBoxesMenuItem)
523 viewport.setShowBoxes(viewBoxesMenuItem.getState());
525 else if (evt.getSource() == viewTextMenuItem)
527 viewport.setShowText(viewTextMenuItem.getState());
529 else if (evt.getSource() == renderGapsMenuItem)
531 viewport.setRenderGaps(renderGapsMenuItem.getState());
533 else if (evt.getSource() == annotationPanelMenuItem)
535 viewport.setShowAnnotation(annotationPanelMenuItem.getState());
536 alignPanel.setAnnotationVisible(annotationPanelMenuItem.getState());
538 else if (evt.getSource() == sequenceFeatures)
540 viewport.showSequenceFeatures(sequenceFeatures.getState());
541 alignPanel.seqPanel.seqCanvas.repaint();
543 else if (evt.getSource() == conservationMenuItem)
545 conservationMenuItem_actionPerformed();
547 else if (evt.getSource() == abovePIDThreshold)
549 abovePIDThreshold_actionPerformed();
551 else if (evt.getSource() == applyToAllGroups)
553 viewport.setColourAppliesToAllGroups(applyToAllGroups.getState());
555 else if (evt.getSource() == autoCalculate)
557 viewport.autocalculateConsensus = autoCalculate.getState();
560 alignPanel.paintAlignment(true);
563 public void actionPerformed(ActionEvent evt)
565 Object source = evt.getSource();
567 if (source == inputText)
569 inputText_actionPerformed();
571 else if (source == loadTree)
573 loadTree_actionPerformed();
575 else if (source == loadApplication)
577 launchFullApplication();
579 else if (source == loadAnnotations)
583 else if (source == outputAnnotations)
585 outputAnnotations(true);
587 else if (source == outputFeatures)
589 outputFeatures(true, "Jalview");
591 else if (source == closeMenuItem)
593 closeMenuItem_actionPerformed();
595 else if (source == copy)
597 copy_actionPerformed();
599 else if (source == undoMenuItem)
601 undoMenuItem_actionPerformed();
603 else if (source == redoMenuItem)
605 redoMenuItem_actionPerformed();
607 else if (source == inputText)
609 inputText_actionPerformed();
611 else if (source == closeMenuItem)
613 closeMenuItem_actionPerformed();
615 else if (source == undoMenuItem)
617 undoMenuItem_actionPerformed();
619 else if (source == redoMenuItem)
621 redoMenuItem_actionPerformed();
623 else if (source == copy)
625 copy_actionPerformed();
627 else if (source == pasteNew)
629 pasteNew_actionPerformed();
631 else if (source == pasteThis)
633 pasteThis_actionPerformed();
635 else if (source == cut)
637 cut_actionPerformed();
639 else if (source == delete)
641 delete_actionPerformed();
643 else if (source == deleteGroups)
645 deleteGroups_actionPerformed();
647 else if (source == selectAllSequenceMenuItem)
649 selectAllSequenceMenuItem_actionPerformed();
651 else if (source == deselectAllSequenceMenuItem)
653 deselectAllSequenceMenuItem_actionPerformed();
655 else if (source == invertSequenceMenuItem)
657 invertSequenceMenuItem_actionPerformed();
659 else if (source == invertColSel)
661 viewport.invertColumnSelection();
662 alignPanel.paintAlignment(true);
664 else if (source == remove2LeftMenuItem)
668 else if (source == remove2RightMenuItem)
670 trimAlignment(false);
672 else if (source == removeGappedColumnMenuItem)
674 removeGappedColumnMenuItem_actionPerformed();
676 else if (source == removeAllGapsMenuItem)
678 removeAllGapsMenuItem_actionPerformed();
680 else if (source == findMenuItem)
682 findMenuItem_actionPerformed();
684 else if (source == font)
686 new FontChooser(alignPanel);
688 else if (source == newView)
692 else if (source == showColumns)
694 viewport.showAllHiddenColumns();
695 alignPanel.paintAlignment(true);
697 else if (source == showSeqs)
699 viewport.showAllHiddenSeqs();
701 else if (source == hideColumns)
703 viewport.hideSelectedColumns();
704 alignPanel.paintAlignment(true);
706 else if (source == hideSequences && viewport.getSelectionGroup() != null)
708 viewport.hideAllSelectedSeqs();
710 else if (source == featureSettings)
712 new FeatureSettings(alignPanel);
714 else if(source== alProperties)
716 StringBuffer contents = new StringBuffer();
719 int min=Integer.MAX_VALUE, max=0;
720 for(int i=0; i<viewport.alignment.getHeight(); i++)
722 int size = viewport.alignment.getSequenceAt(i).getEnd()
723 -viewport.alignment.getSequenceAt(i).getStart();
730 avg = avg/(float)viewport.alignment.getHeight();
732 contents.append("\nSequences: "+ viewport.alignment.getHeight());
733 contents.append("\nMinimum Sequence Length: "+min);
734 contents.append("\nMaximum Sequence Length: "+max);
735 contents.append("\nAverage Length: "+(int)avg);
737 if (((Alignment)viewport.alignment).alignmentProperties != null)
739 Hashtable props = ((Alignment)viewport.alignment).alignmentProperties;
740 Enumeration en = props.keys();
741 while(en.hasMoreElements())
743 String key = en.nextElement().toString();
744 contents.append("\n"+key+"\t"+props.get(key));
748 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this);
749 cap.setText(contents.toString());
750 Frame frame = new Frame();
752 jalview.bin.JalviewLite.addFrame(frame,
753 "Alignment Properties: "+getTitle()
756 else if (source == overviewMenuItem)
758 overviewMenuItem_actionPerformed();
760 else if (source == noColourmenuItem)
764 else if (source == clustalColour)
766 abovePIDThreshold.setState(false);
767 changeColour(new ClustalxColourScheme(viewport.alignment.getSequences(),
768 viewport.alignment.getWidth()));
770 else if (source == zappoColour)
772 changeColour(new ZappoColourScheme());
774 else if (source == taylorColour)
776 changeColour(new TaylorColourScheme());
778 else if (source == hydrophobicityColour)
780 changeColour(new HydrophobicColourScheme());
782 else if (source == helixColour)
784 changeColour(new HelixColourScheme());
786 else if (source == strandColour)
788 changeColour(new StrandColourScheme());
790 else if (source == turnColour)
792 changeColour(new TurnColourScheme());
794 else if (source == buriedColour)
796 changeColour(new BuriedColourScheme());
798 else if (source == nucleotideColour)
800 changeColour(new NucleotideColourScheme());
802 else if (source == modifyPID)
804 modifyPID_actionPerformed();
806 else if (source == modifyConservation)
808 modifyConservation_actionPerformed();
810 else if (source == userDefinedColour)
812 new UserDefinedColours(alignPanel, null);
814 else if (source == PIDColour)
816 changeColour(new PIDColourScheme());
818 else if (source == BLOSUM62Colour)
820 changeColour(new Blosum62ColourScheme());
822 else if (source == annotationColour)
824 new AnnotationColourChooser(viewport, alignPanel);
826 else if (source == sortPairwiseMenuItem)
828 sortPairwiseMenuItem_actionPerformed();
830 else if (source == sortIDMenuItem)
832 sortIDMenuItem_actionPerformed();
834 else if (source == sortGroupMenuItem)
836 sortGroupMenuItem_actionPerformed();
838 else if (source == removeRedundancyMenuItem)
840 removeRedundancyMenuItem_actionPerformed();
842 else if (source == pairwiseAlignmentMenuItem)
844 pairwiseAlignmentMenuItem_actionPerformed();
846 else if (source == PCAMenuItem)
848 PCAMenuItem_actionPerformed();
850 else if (source == averageDistanceTreeMenuItem)
852 averageDistanceTreeMenuItem_actionPerformed();
854 else if (source == neighbourTreeMenuItem)
856 neighbourTreeMenuItem_actionPerformed();
858 else if (source == njTreeBlosumMenuItem)
860 njTreeBlosumMenuItem_actionPerformed();
862 else if (source == avDistanceTreeBlosumMenuItem)
864 avTreeBlosumMenuItem_actionPerformed();
866 else if (source == documentation)
868 documentation_actionPerformed();
870 else if (source == about)
872 about_actionPerformed();
877 public void inputText_actionPerformed()
879 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
880 Frame frame = new Frame();
882 jalview.bin.JalviewLite.addFrame(frame, "Cut & Paste Input", 500, 500);
885 protected void outputText_actionPerformed(ActionEvent e)
887 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
888 Frame frame = new Frame();
890 jalview.bin.JalviewLite.addFrame(frame,
891 "Alignment output - " + e.getActionCommand(),
893 cap.setText(new AppletFormatAdapter().formatSequences(e.getActionCommand(),
894 viewport.getAlignment(),
895 viewport.showJVSuffix));
898 public void loadAnnotations()
900 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
901 cap.setText("Paste your features / annotations file here.");
902 cap.setAnnotationImport();
903 Frame frame = new Frame();
905 jalview.bin.JalviewLite.addFrame(frame, "Paste Annotations ", 400, 300);
909 public String outputAnnotations(boolean displayTextbox)
911 String annotation = new AnnotationFile().printAnnotations(
912 viewport.showAnnotation ? viewport.alignment.getAlignmentAnnotation() : null,
913 viewport.alignment.getGroups(),
914 ((Alignment) viewport.alignment).alignmentProperties);
918 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this);
919 Frame frame = new Frame();
921 jalview.bin.JalviewLite.addFrame(frame,
924 cap.setText(annotation);
930 public String outputFeatures(boolean displayTextbox, String format)
933 if (format.equalsIgnoreCase("Jalview"))
935 features = new FeaturesFile().printJalviewFormat(
936 viewport.alignment.getSequencesArray(),
937 viewport.featuresDisplayed);
941 features = new FeaturesFile().printGFFFormat(
942 viewport.alignment.getSequencesArray(),
943 viewport.featuresDisplayed);
948 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this);
949 Frame frame = new Frame();
951 jalview.bin.JalviewLite.addFrame(frame,
955 cap.setText(features);
961 void launchFullApplication()
963 StringBuffer url = new StringBuffer(jalviewServletURL);
965 url.append("?open=" +
966 appendProtocol(viewport.applet.getParameter("file")));
968 if (viewport.applet.getParameter("features") != null)
970 url.append("&features=");
971 url.append(appendProtocol(viewport.applet.getParameter("features")));
974 if (viewport.applet.getParameter("annotations") != null)
976 url.append("&annotations=");
977 url.append(appendProtocol(viewport.applet.getParameter("annotations")));
980 if (viewport.applet.getParameter("jnetfile") != null)
982 url.append("&annotations=");
983 url.append(appendProtocol(viewport.applet.getParameter("jnetfile")));
986 if (viewport.applet.getParameter("defaultColour") != null)
988 url.append("&colour=" +
989 removeWhiteSpace(viewport.applet.getParameter("defaultColour"))
993 if (viewport.applet.getParameter("userDefinedColour") != null)
995 url.append("&colour=" +
996 removeWhiteSpace(viewport.applet.getParameter(
997 "userDefinedColour"))
1000 if (viewport.applet.getParameter("tree")!=null)
1002 url.append("&tree="+appendProtocol(viewport.applet.getParameter("tree")));
1004 if (viewport.applet.getParameter("treeFile")!=null)
1006 url.append("&tree="+appendProtocol(viewport.applet.getParameter("treeFile")));
1009 showURL(url.toString(), "FULL_APP");
1012 String removeWhiteSpace(String colour)
1014 StringBuffer sb = new StringBuffer();
1015 for (int i = 0; i < colour.length(); i++)
1017 if (Character.isWhitespace(colour.charAt(i)))
1023 sb.append(colour.charAt(i));
1027 return sb.toString();
1030 String appendProtocol(String url)
1036 catch (java.net.MalformedURLException ex)
1038 url = viewport.applet.getCodeBase() + url;
1043 public void closeMenuItem_actionPerformed()
1045 PaintRefresher.RemoveComponent(alignPanel);
1046 PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas);
1047 PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas);
1049 if (PaintRefresher.components.size() == 0 && viewport.applet == null)
1060 void updateEditMenuBar()
1063 if (viewport.historyList.size() > 0)
1065 undoMenuItem.setEnabled(true);
1066 CommandI command = (CommandI) viewport.historyList.peek();
1067 undoMenuItem.setLabel("Undo " + command.getDescription());
1071 undoMenuItem.setEnabled(false);
1072 undoMenuItem.setLabel("Undo");
1075 if (viewport.redoList.size() > 0)
1077 redoMenuItem.setEnabled(true);
1079 CommandI command = (CommandI) viewport.redoList.peek();
1080 redoMenuItem.setLabel("Redo " + command.getDescription());
1084 redoMenuItem.setEnabled(false);
1085 redoMenuItem.setLabel("Redo");
1089 public void addHistoryItem(CommandI command)
1091 if (command.getSize() > 0)
1093 viewport.historyList.push(command);
1094 viewport.redoList.removeAllElements();
1095 updateEditMenuBar();
1096 viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1102 * @param e DOCUMENT ME!
1104 protected void undoMenuItem_actionPerformed()
1106 if (viewport.historyList.size() < 1)
1111 CommandI command = (CommandI) viewport.historyList.pop();
1112 viewport.redoList.push(command);
1113 command.undoCommand(null);
1115 AlignViewport originalSource = getOriginatingSource(command);
1117 originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1118 updateEditMenuBar();
1119 originalSource.firePropertyChange("alignment", null,
1120 originalSource.alignment.getSequences());
1126 * @param e DOCUMENT ME!
1128 protected void redoMenuItem_actionPerformed()
1130 if (viewport.redoList.size() < 1)
1135 CommandI command = (CommandI) viewport.redoList.pop();
1136 viewport.historyList.push(command);
1137 command.doCommand(null);
1139 AlignViewport originalSource = getOriginatingSource(command);
1140 originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1142 updateEditMenuBar();
1143 originalSource.firePropertyChange("alignment", null,
1144 originalSource.alignment.getSequences());
1147 AlignViewport getOriginatingSource(CommandI command)
1149 AlignViewport originalSource = null;
1150 //For sequence removal and addition, we need to fire
1151 //the property change event FROM the viewport where the
1152 //original alignment was altered
1153 AlignmentI al = null;
1154 if (command instanceof EditCommand)
1156 EditCommand editCommand = (EditCommand) command;
1157 al = editCommand.getAlignment();
1158 Vector comps = (Vector) PaintRefresher.components
1159 .get(viewport.getSequenceSetId());
1160 for (int i = 0; i < comps.size(); i++)
1162 if (comps.elementAt(i) instanceof AlignmentPanel)
1164 if (al == ( (AlignmentPanel) comps.elementAt(i)).av.alignment)
1166 originalSource = ( (AlignmentPanel) comps.elementAt(i)).av;
1173 if (originalSource == null)
1175 //The original view is closed, we must validate
1176 //the current view against the closed view first
1179 PaintRefresher.validateSequences(al, viewport.alignment);
1182 originalSource = viewport;
1185 return originalSource;
1188 public void moveSelectedSequences(boolean up)
1190 SequenceGroup sg = viewport.getSelectionGroup();
1198 for (int i = 1; i < viewport.alignment.getHeight(); i++)
1200 SequenceI seq = viewport.alignment.getSequenceAt(i);
1201 if (!sg.getSequences(null).contains(seq))
1206 SequenceI temp = viewport.alignment.getSequenceAt(i - 1);
1207 if (sg.getSequences(null).contains(temp))
1212 viewport.alignment.getSequences().setElementAt(temp, i);
1213 viewport.alignment.getSequences().setElementAt(seq, i - 1);
1218 for (int i = viewport.alignment.getHeight() - 2; i > -1; i--)
1220 SequenceI seq = viewport.alignment.getSequenceAt(i);
1221 if (!sg.getSequences(viewport.hiddenRepSequences).contains(seq))
1226 SequenceI temp = viewport.alignment.getSequenceAt(i + 1);
1227 if (sg.getSequences(viewport.hiddenRepSequences).contains(temp))
1232 viewport.alignment.getSequences().setElementAt(temp, i);
1233 viewport.alignment.getSequences().setElementAt(seq, i + 1);
1237 alignPanel.paintAlignment(true);
1240 synchronized void slideSequences(boolean right, int size)
1242 Vector sg = new Vector();
1243 if(viewport.cursorMode)
1245 sg.addElement(viewport.alignment.getSequenceAt(
1246 alignPanel.seqPanel.seqCanvas.cursorY));
1248 else if(viewport.getSelectionGroup()!=null
1249 && viewport.getSelectionGroup().getSize()!=viewport.alignment.getHeight())
1251 sg = viewport.getSelectionGroup().getSequences(
1252 viewport.hiddenRepSequences);
1260 Vector invertGroup = new Vector();
1262 for (int i = 0; i < viewport.alignment.getHeight(); i++)
1264 if(!sg.contains(viewport.alignment.getSequenceAt(i)))
1265 invertGroup.addElement(viewport.alignment.getSequenceAt(i));
1268 SequenceI[] seqs1 = new SequenceI[sg.size()];
1269 for (int i = 0; i < sg.size(); i++)
1270 seqs1[i] = (SequenceI) sg.elementAt(i);
1272 SequenceI[] seqs2 = new SequenceI[invertGroup.size()];
1273 for (int i = 0; i < invertGroup.size(); i++)
1274 seqs2[i] = (SequenceI) invertGroup.elementAt(i);
1276 SlideSequencesCommand ssc;
1278 ssc = new SlideSequencesCommand("Slide Sequences",
1280 viewport.getGapCharacter()
1283 ssc = new SlideSequencesCommand("Slide Sequences",
1285 viewport.getGapCharacter()
1288 int groupAdjustment = 0;
1289 if (ssc.getGapsInsertedBegin() && right)
1291 if (viewport.cursorMode)
1292 alignPanel.seqPanel.moveCursor(size, 0);
1294 groupAdjustment = size;
1296 else if (!ssc.getGapsInsertedBegin() && !right)
1298 if (viewport.cursorMode)
1299 alignPanel.seqPanel.moveCursor( -size, 0);
1301 groupAdjustment = -size;
1304 if (groupAdjustment != 0)
1306 viewport.getSelectionGroup().setStartRes(
1307 viewport.getSelectionGroup().getStartRes() + groupAdjustment);
1308 viewport.getSelectionGroup().setEndRes(
1309 viewport.getSelectionGroup().getEndRes() + groupAdjustment);
1313 boolean appendHistoryItem = false;
1314 if(viewport.historyList!=null
1315 && viewport.historyList.size()>0
1316 && viewport.historyList.peek() instanceof SlideSequencesCommand)
1318 appendHistoryItem = ssc.appendSlideCommand(
1319 (SlideSequencesCommand)viewport.historyList.peek())
1323 if(!appendHistoryItem)
1324 addHistoryItem(ssc);
1329 static StringBuffer copiedSequences;
1330 static Vector copiedHiddenColumns;
1331 protected void copy_actionPerformed()
1333 if (viewport.getSelectionGroup() == null)
1338 SequenceGroup sg = viewport.getSelectionGroup();
1339 copiedSequences = new StringBuffer();
1340 Hashtable orderedSeqs = new Hashtable();
1341 for (int i = 0; i < sg.getSize(); i++)
1343 SequenceI seq = sg.getSequenceAt(i);
1344 int index = viewport.alignment.findIndex(seq);
1345 orderedSeqs.put(index + "", seq);
1348 int index = 0, startRes, endRes;
1351 if (viewport.hasHiddenColumns && viewport.getSelectionGroup() != null)
1353 copiedHiddenColumns = new Vector();
1354 int hiddenOffset = viewport.getSelectionGroup().getStartRes();
1355 for (int i = 0; i < viewport.getColumnSelection().getHiddenColumns().size();
1358 int[] region = (int[])
1359 viewport.getColumnSelection().getHiddenColumns().elementAt(i);
1361 copiedHiddenColumns.addElement(new int[]
1362 {region[0] - hiddenOffset,
1363 region[1] - hiddenOffset});
1368 copiedHiddenColumns = null;
1371 for (int i = 0; i < sg.getSize(); i++)
1373 SequenceI seq = null;
1377 if (orderedSeqs.containsKey(index + ""))
1379 seq = (SequenceI) orderedSeqs.get(index + "");
1391 //Returns residue following index if gap
1392 startRes = seq.findPosition(sg.getStartRes());
1395 //Need to find the residue preceeding index if gap
1398 for (int j = 0; j < sg.getEndRes() + 1 && j < seq.getLength(); j++)
1400 ch = seq.getCharAt(j);
1401 if (!jalview.util.Comparison.isGap( (ch)))
1409 endRes += seq.getStart() - 1;
1412 copiedSequences.append(seq.getName() + "\t" +
1415 seq.getSequenceAsString(sg.getStartRes(),
1416 sg.getEndRes() + 1) + "\n");
1421 protected void pasteNew_actionPerformed()
1426 protected void pasteThis_actionPerformed()
1431 void paste(boolean newAlignment)
1436 if (copiedSequences == null)
1441 StringTokenizer st = new StringTokenizer(copiedSequences.toString());
1442 Vector seqs = new Vector();
1443 while (st.hasMoreElements())
1445 String name = st.nextToken();
1446 int start = Integer.parseInt(st.nextToken());
1447 int end = Integer.parseInt(st.nextToken());
1448 seqs.addElement(new Sequence(name, st.nextToken(), start, end));
1450 SequenceI[] newSeqs = new SequenceI[seqs.size()];
1451 for (int i = 0; i < seqs.size(); i++)
1453 newSeqs[i] = (SequenceI) seqs.elementAt(i);
1458 String newtitle = new String("Copied sequences");
1459 if (getTitle().startsWith("Copied sequences"))
1461 newtitle = getTitle();
1465 newtitle = newtitle.concat("- from " + getTitle());
1467 AlignFrame af = new AlignFrame(new Alignment(newSeqs),
1471 if (copiedHiddenColumns != null)
1473 for (int i = 0; i < copiedHiddenColumns.size(); i++)
1475 int[] region = (int[]) copiedHiddenColumns.elementAt(i);
1476 af.viewport.hideColumns(region[0], region[1]);
1480 jalview.bin.JalviewLite.addFrame(af, newtitle, DEFAULT_WIDTH,
1485 addSequences(newSeqs);
1489 catch (Exception ex)
1490 {} // could be anything being pasted in here
1494 void addSequences(SequenceI[] seqs)
1496 for (int i = 0; i < seqs.length; i++)
1498 viewport.alignment.addSequence(seqs[i]);
1502 addHistoryItem(new EditCommand(
1507 viewport.alignment.getWidth(),
1511 viewport.setEndSeq(viewport.alignment.getHeight());
1512 viewport.alignment.getWidth();
1513 viewport.firePropertyChange("alignment", null,
1514 viewport.alignment.getSequences());
1518 protected void cut_actionPerformed()
1520 copy_actionPerformed();
1521 delete_actionPerformed();
1524 protected void delete_actionPerformed()
1527 SequenceGroup sg = viewport.getSelectionGroup();
1533 Vector seqs = new Vector();
1535 for (int i = 0; i < sg.getSize(); i++)
1537 seq = sg.getSequenceAt(i);
1538 seqs.addElement(seq);
1541 // If the cut affects all sequences, remove highlighted columns
1542 if (sg.getSize() == viewport.alignment.getHeight())
1544 viewport.getColumnSelection().removeElements(sg.getStartRes(),
1545 sg.getEndRes() + 1);
1548 SequenceI[] cut = new SequenceI[seqs.size()];
1549 for (int i = 0; i < seqs.size(); i++)
1551 cut[i] = (SequenceI) seqs.elementAt(i);
1557 addHistoryItem(new EditCommand("Cut Sequences",
1561 sg.getEndRes() - sg.getStartRes() + 1,
1562 viewport.alignment));
1564 viewport.setSelectionGroup(null);
1565 viewport.alignment.deleteGroup(sg);
1567 viewport.firePropertyChange("alignment", null,
1568 viewport.getAlignment().getSequences());
1570 if (viewport.getAlignment().getHeight() < 1)
1572 this.setVisible(false);
1576 protected void deleteGroups_actionPerformed()
1578 viewport.alignment.deleteAllGroups();
1579 viewport.sequenceColours = null;
1580 viewport.setSelectionGroup(null);
1582 alignPanel.paintAlignment(true);
1585 public void selectAllSequenceMenuItem_actionPerformed()
1587 SequenceGroup sg = new SequenceGroup();
1588 for (int i = 0; i < viewport.getAlignment().getSequences().size(); i++)
1590 sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);
1592 sg.setEndRes(viewport.alignment.getWidth() - 1);
1593 viewport.setSelectionGroup(sg);
1594 alignPanel.paintAlignment(true);
1595 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1598 public void deselectAllSequenceMenuItem_actionPerformed()
1600 if (viewport.cursorMode)
1602 alignPanel.seqPanel.keyboardNo1 = null;
1603 alignPanel.seqPanel.keyboardNo2 = null;
1605 viewport.setSelectionGroup(null);
1606 viewport.getColumnSelection().clear();
1607 viewport.setSelectionGroup(null);
1608 alignPanel.idPanel.idCanvas.searchResults = null;
1609 alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);
1610 alignPanel.paintAlignment(true);
1611 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1614 public void invertSequenceMenuItem_actionPerformed()
1616 SequenceGroup sg = viewport.getSelectionGroup();
1617 for (int i = 0; i < viewport.getAlignment().getSequences().size(); i++)
1619 sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false);
1622 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1625 void trimAlignment(boolean trimLeft)
1627 ColumnSelection colSel = viewport.getColumnSelection();
1630 if (colSel.size() > 0)
1634 column = colSel.getMin();
1638 column = colSel.getMax();
1642 if (viewport.getSelectionGroup() != null)
1644 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1645 hiddenRepSequences);
1649 seqs = viewport.alignment.getSequencesArray();
1652 TrimRegionCommand trimRegion;
1655 trimRegion = new TrimRegionCommand("Remove Left",
1656 TrimRegionCommand.TRIM_LEFT,
1661 viewport.selectionGroup);
1662 viewport.setStartRes(0);
1666 trimRegion = new TrimRegionCommand("Remove Right",
1667 TrimRegionCommand.TRIM_RIGHT,
1672 viewport.selectionGroup);
1675 statusBar.setText("Removed " + trimRegion.getSize() + " columns.");
1677 addHistoryItem(trimRegion);
1679 Vector groups = viewport.alignment.getGroups();
1681 for (int i = 0; i < groups.size(); i++)
1683 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
1685 if ( (trimLeft && !sg.adjustForRemoveLeft(column))
1686 || (!trimLeft && !sg.adjustForRemoveRight(column)))
1688 viewport.alignment.deleteGroup(sg);
1692 viewport.firePropertyChange("alignment", null,
1693 viewport.getAlignment().getSequences());
1697 public void removeGappedColumnMenuItem_actionPerformed()
1699 int start = 0, end = viewport.alignment.getWidth() - 1;
1702 if (viewport.getSelectionGroup() != null)
1704 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1705 hiddenRepSequences);
1706 start = viewport.getSelectionGroup().getStartRes();
1707 end = viewport.getSelectionGroup().getEndRes();
1711 seqs = viewport.alignment.getSequencesArray();
1714 RemoveGapColCommand removeGapCols =
1715 new RemoveGapColCommand("Remove Gapped Columns",
1718 viewport.alignment);
1720 addHistoryItem(removeGapCols);
1722 statusBar.setText("Removed " + removeGapCols.getSize() + " empty columns.");
1724 //This is to maintain viewport position on first residue
1726 SequenceI seq = viewport.alignment.getSequenceAt(0);
1727 int startRes = seq.findPosition(viewport.startRes);
1728 // ShiftList shifts;
1729 // viewport.getAlignment().removeGaps(shifts=new ShiftList());
1730 // edit.alColumnChanges=shifts.getInverse();
1731 // if (viewport.hasHiddenColumns)
1732 // viewport.getColumnSelection().compensateForEdits(shifts);
1733 viewport.setStartRes(seq.findIndex(startRes) - 1);
1734 viewport.firePropertyChange("alignment", null,
1735 viewport.getAlignment().getSequences());
1739 public void removeAllGapsMenuItem_actionPerformed()
1741 int start = 0, end = viewport.alignment.getWidth() - 1;
1744 if (viewport.getSelectionGroup() != null)
1746 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1747 hiddenRepSequences);
1748 start = viewport.getSelectionGroup().getStartRes();
1749 end = viewport.getSelectionGroup().getEndRes();
1753 seqs = viewport.alignment.getSequencesArray();
1756 //This is to maintain viewport position on first residue
1758 SequenceI seq = viewport.alignment.getSequenceAt(0);
1759 int startRes = seq.findPosition(viewport.startRes);
1761 addHistoryItem(new RemoveGapsCommand("Remove Gaps",
1764 viewport.alignment));
1766 viewport.setStartRes(seq.findIndex(startRes) - 1);
1768 viewport.firePropertyChange("alignment", null,
1769 viewport.getAlignment().getSequences());
1773 public void findMenuItem_actionPerformed()
1775 new Finder(alignPanel);
1778 public void newView()
1781 if (viewport.hasHiddenRows)
1783 newal = new Alignment(viewport.getAlignment().
1784 getHiddenSequences()
1785 .getFullAlignment().
1786 getSequencesArray());
1790 newal = new Alignment(viewport.alignment.getSequencesArray());
1793 if (viewport.alignment.getAlignmentAnnotation() != null)
1795 for (int i = 0; i < viewport.alignment.getAlignmentAnnotation().length; i++)
1797 if (!viewport.alignment.getAlignmentAnnotation()[i].autoCalculated)
1799 newal.addAnnotation(viewport.alignment.getAlignmentAnnotation()[i]);
1804 AlignFrame newaf = new AlignFrame(newal,
1809 newaf.viewport.sequenceSetID = alignPanel.av.getSequenceSetId();
1810 PaintRefresher.Register(alignPanel, alignPanel.av.getSequenceSetId());
1811 PaintRefresher.Register(newaf.alignPanel,
1812 newaf.alignPanel.av.getSequenceSetId());
1814 PaintRefresher.Register(newaf.alignPanel.idPanel.idCanvas,
1815 newaf.alignPanel.av.getSequenceSetId());
1816 PaintRefresher.Register(newaf.alignPanel.seqPanel.seqCanvas,
1817 newaf.alignPanel.av.getSequenceSetId());
1819 Vector comps = (Vector) PaintRefresher.components.get(viewport.
1820 getSequenceSetId());
1822 for (int i = 0; i < comps.size(); i++)
1824 if (comps.elementAt(i) instanceof AlignmentPanel)
1830 String title = new String(this.getTitle());
1831 if (title.indexOf("(View") > -1)
1833 title = title.substring(0, title.indexOf("(View"));
1836 title += "(View " + viewSize + ")";
1838 newaf.setTitle(title.toString());
1840 newaf.viewport.historyList = viewport.historyList;
1841 newaf.viewport.redoList = viewport.redoList;
1845 public void seqLimits_itemStateChanged()
1847 viewport.setShowJVSuffix(seqLimits.getState());
1848 alignPanel.fontChanged();
1849 alignPanel.paintAlignment(true);
1852 protected void colourTextMenuItem_actionPerformed()
1854 viewport.setColourText(colourTextMenuItem.getState());
1855 alignPanel.paintAlignment(true);
1858 protected void wrapMenuItem_actionPerformed()
1860 viewport.setWrapAlignment(wrapMenuItem.getState());
1861 alignPanel.setWrapAlignment(wrapMenuItem.getState());
1862 scaleAbove.setEnabled(wrapMenuItem.getState());
1863 scaleLeft.setEnabled(wrapMenuItem.getState());
1864 scaleRight.setEnabled(wrapMenuItem.getState());
1865 alignPanel.paintAlignment(true);
1868 public void overviewMenuItem_actionPerformed()
1870 if (alignPanel.overviewPanel != null)
1875 Frame frame = new Frame();
1876 OverviewPanel overview = new OverviewPanel(alignPanel);
1877 frame.add(overview);
1878 // +50 must allow for applet frame window
1879 jalview.bin.JalviewLite.addFrame(frame, "Overview " + this.getTitle(),
1880 overview.getPreferredSize().width,
1881 overview.getPreferredSize().height + 50);
1884 frame.addWindowListener(new WindowAdapter()
1886 public void windowClosing(WindowEvent e)
1888 alignPanel.setOverviewPanel(null);
1892 alignPanel.setOverviewPanel(overview);
1896 void changeColour(ColourSchemeI cs)
1902 if (viewport.getAbovePIDThreshold())
1904 threshold = SliderPanel.setPIDSliderSource(alignPanel, cs, "Background");
1906 cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus());
1908 viewport.setGlobalColourScheme(cs);
1912 cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
1915 if (viewport.getConservationSelected())
1918 Alignment al = (Alignment) viewport.alignment;
1919 Conservation c = new Conservation("All",
1920 ResidueProperties.propHash, 3,
1921 al.getSequences(), 0,
1925 c.verdict(false, viewport.ConsPercGaps);
1927 cs.setConservation(c);
1929 cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, cs,
1935 cs.setConservation(null);
1938 cs.setConsensus(viewport.hconsensus);
1941 viewport.setGlobalColourScheme(cs);
1943 if (viewport.getColourAppliesToAllGroups())
1945 Vector groups = viewport.alignment.getGroups();
1946 for (int i = 0; i < groups.size(); i++)
1948 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
1955 if (cs instanceof ClustalxColourScheme)
1957 sg.cs = new ClustalxColourScheme(
1958 sg.getSequences(viewport.hiddenRepSequences),
1965 sg.cs = (ColourSchemeI) cs.getClass().newInstance();
1967 catch (Exception ex)
1969 ex.printStackTrace();
1974 if (viewport.getAbovePIDThreshold()
1975 || cs instanceof PIDColourScheme
1976 || cs instanceof Blosum62ColourScheme)
1978 sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus());
1979 sg.cs.setConsensus(AAFrequency.calculate(
1980 sg.getSequences(viewport.hiddenRepSequences), 0, sg.getWidth()));
1984 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
1987 if (viewport.getConservationSelected())
1989 Conservation c = new Conservation("Group",
1990 ResidueProperties.propHash, 3,
1991 sg.getSequences(viewport.
1992 hiddenRepSequences), 0,
1993 viewport.alignment.getWidth() - 1);
1995 c.verdict(false, viewport.ConsPercGaps);
1996 sg.cs.setConservation(c);
2000 sg.cs.setConservation(null);
2001 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
2007 if (alignPanel.getOverviewPanel() != null)
2009 alignPanel.getOverviewPanel().updateOverviewImage();
2012 jalview.structure.StructureSelectionManager.getStructureSelectionManager()
2013 .sequenceColoursChanged(alignPanel);
2015 alignPanel.paintAlignment(true);
2018 protected void modifyPID_actionPerformed()
2020 if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme != null)
2022 SliderPanel.setPIDSliderSource(alignPanel, viewport.getGlobalColourScheme(),
2024 SliderPanel.showPIDSlider();
2028 protected void modifyConservation_actionPerformed()
2030 if (viewport.getConservationSelected() && viewport.globalColourScheme != null)
2032 SliderPanel.setConservationSlider(alignPanel, viewport.globalColourScheme,
2034 SliderPanel.showConservationSlider();
2038 protected void conservationMenuItem_actionPerformed()
2040 viewport.setConservationSelected(conservationMenuItem.getState());
2042 viewport.setAbovePIDThreshold(false);
2043 abovePIDThreshold.setState(false);
2045 changeColour(viewport.getGlobalColourScheme());
2047 modifyConservation_actionPerformed();
2050 public void abovePIDThreshold_actionPerformed()
2052 viewport.setAbovePIDThreshold(abovePIDThreshold.getState());
2054 conservationMenuItem.setState(false);
2055 viewport.setConservationSelected(false);
2057 changeColour(viewport.getGlobalColourScheme());
2059 modifyPID_actionPerformed();
2062 public void sortPairwiseMenuItem_actionPerformed()
2064 SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
2065 AlignmentSorter.sortByPID(viewport.getAlignment(),
2066 viewport.getAlignment().getSequenceAt(0));
2067 addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder,
2068 viewport.alignment));
2069 alignPanel.paintAlignment(true);
2072 public void sortIDMenuItem_actionPerformed()
2074 // addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
2075 // HistoryItem.SORT));
2076 AlignmentSorter.sortByID(viewport.getAlignment());
2077 alignPanel.paintAlignment(true);
2080 public void sortGroupMenuItem_actionPerformed()
2082 // addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
2083 // HistoryItem.SORT));
2084 AlignmentSorter.sortByGroup(viewport.getAlignment());
2085 alignPanel.paintAlignment(true);
2089 public void removeRedundancyMenuItem_actionPerformed()
2091 new RedundancyPanel(alignPanel);
2094 public void pairwiseAlignmentMenuItem_actionPerformed()
2096 if (viewport.getSelectionGroup() != null
2097 && viewport.getSelectionGroup().getSize() > 1)
2099 Frame frame = new Frame();
2100 frame.add(new PairwiseAlignPanel(alignPanel));
2101 jalview.bin.JalviewLite.addFrame(frame, "Pairwise Alignment", 600, 500);
2105 public void PCAMenuItem_actionPerformed()
2107 //are the sequences aligned?
2108 if (!viewport.alignment.isAligned())
2111 int Width = viewport.getAlignment().getWidth();
2113 for (int i = 0; i < viewport.getAlignment().getSequences().size();
2116 current = viewport.getAlignment().getSequenceAt(i);
2118 if (current.getLength() < Width)
2120 current.insertCharAt(Width - 1, viewport.getGapCharacter());
2123 alignPanel.paintAlignment(true);
2126 if ( (viewport.getSelectionGroup() != null &&
2127 viewport.getSelectionGroup().getSize() < 4 &&
2128 viewport.getSelectionGroup().getSize() > 0)
2129 || viewport.getAlignment().getHeight() < 4)
2136 new PCAPanel(viewport);
2138 catch (java.lang.OutOfMemoryError ex)
2144 public void averageDistanceTreeMenuItem_actionPerformed()
2146 NewTreePanel("AV", "PID", "Average distance tree using PID");
2149 public void neighbourTreeMenuItem_actionPerformed()
2151 NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
2154 protected void njTreeBlosumMenuItem_actionPerformed()
2156 NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
2159 protected void avTreeBlosumMenuItem_actionPerformed()
2161 NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
2164 void NewTreePanel(String type, String pwType, String title)
2166 //are the sequences aligned?
2167 if (!viewport.alignment.isAligned())
2170 int Width = viewport.getAlignment().getWidth();
2172 for (int i = 0; i < viewport.getAlignment().getSequences().size();
2175 current = viewport.getAlignment().getSequenceAt(i);
2177 if (current.getLength() < Width)
2179 current.insertCharAt(Width - 1, viewport.getGapCharacter());
2182 alignPanel.paintAlignment(true);
2186 if ( (viewport.getSelectionGroup() != null &&
2187 viewport.getSelectionGroup().getSize() > 1)
2188 || (viewport.getSelectionGroup() == null
2189 && viewport.alignment.getHeight() > 1))
2191 final TreePanel tp = new TreePanel(viewport,
2195 addTreeMenuItem(tp, title);
2197 jalview.bin.JalviewLite.addFrame(tp, title, 600, 500);
2201 void loadTree_actionPerformed()
2203 CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
2204 cap.setText("Paste your Newick tree file here.");
2205 cap.setTreeImport();
2206 Frame frame = new Frame();
2208 jalview.bin.JalviewLite.addFrame(frame, "Paste Newick file ", 400, 300);
2211 public void loadTree(jalview.io.NewickFile tree, String treeFile)
2213 TreePanel tp = new TreePanel(viewport,
2217 jalview.bin.JalviewLite.addFrame(tp, treeFile, 600, 500);
2218 addTreeMenuItem(tp, treeFile);
2221 void addTreeMenuItem(final TreePanel treePanel, String title)
2223 final MenuItem item = new MenuItem(title);
2224 sortByTreeMenu.add(item);
2225 item.addActionListener(new java.awt.event.ActionListener()
2227 public void actionPerformed(ActionEvent evt)
2229 // addHistoryItem(new HistoryItem("Sort", viewport.alignment,
2230 // HistoryItem.SORT));
2231 AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree());
2232 alignPanel.paintAlignment(true);
2236 treePanel.addWindowListener(new WindowAdapter()
2238 public void windowClosing(WindowEvent e)
2240 sortByTreeMenu.remove(item);
2245 protected void documentation_actionPerformed()
2247 showURL("http://www.jalview.org/help.html", "HELP");
2250 protected void about_actionPerformed()
2257 public AboutPanel(String version)
2259 this.version = version;
2262 public void paint(Graphics g)
2264 g.setColor(Color.white);
2265 g.fillRect(0, 0, getSize().width, getSize().height);
2266 g.setFont(new Font("Helvetica", Font.PLAIN, 12));
2267 FontMetrics fm = g.getFontMetrics();
2268 int fh = fm.getHeight();
2270 g.setColor(Color.black);
2271 g.setFont(new Font("Helvetica", Font.BOLD, 14));
2272 g.drawString("Jalview - Release " + version, 200, y += fh);
2273 g.setFont(new Font("Helvetica", Font.PLAIN, 12));
2274 g.drawString("Authors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton.",
2276 g.drawString("Current development managed by Andrew Waterhouse; Barton Group, University of Dundee.",
2279 "For any issues relating to Jalview, email help@jalview.org", x,
2281 g.drawString("If you use JalView, please cite:", x, y += fh + 8);
2282 g.drawString("\"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"",
2284 g.drawString("Bioinformatics, 2004 20;426-7.", x, y += fh);
2288 String version = "test";
2289 java.net.URL url = getClass().getResource("/.build_properties");
2294 BufferedReader reader = new BufferedReader(new InputStreamReader(
2297 while ( (line = reader.readLine()) != null)
2299 if (line.indexOf("VERSION") > -1)
2301 version = line.substring(line.indexOf("=") + 1);
2305 catch (Exception ex)
2307 ex.printStackTrace();
2311 Frame frame = new Frame();
2312 frame.add(new AboutPanel(version));
2313 jalview.bin.JalviewLite.addFrame(frame, "Jalview", 580, 200);
2317 public void showURL(String url, String target)
2319 if (viewport.applet == null)
2321 System.out.println("Not running as applet - no browser available.");
2327 System.out.println("Show url: " + url);
2328 viewport.applet.getAppletContext().showDocument(new java.net.URL(url),
2331 catch (Exception ex)
2333 ex.printStackTrace();
2338 //////////////////////////////////////////////////////////////////////////////////
2339 //JBuilder Graphics here
2341 MenuBar alignFrameMenuBar = new MenuBar();
2342 Menu fileMenu = new Menu("File");
2343 MenuItem loadApplication = new MenuItem("View in Full Application");
2344 MenuItem loadTree = new MenuItem("Load Associated Tree ...");
2345 MenuItem loadAnnotations = new MenuItem(
2346 "Load Features/Annotations ...");
2347 MenuItem outputFeatures = new MenuItem("Export Features ...");
2348 MenuItem outputAnnotations = new MenuItem("Export Annotations ...");
2350 MenuItem closeMenuItem = new MenuItem("Close");
2351 Menu editMenu = new Menu("Edit");
2352 Menu viewMenu = new Menu("View");
2353 Menu colourMenu = new Menu("Colour");
2354 Menu calculateMenu = new Menu("Calculate");
2355 MenuItem selectAllSequenceMenuItem = new MenuItem("Select all");
2356 MenuItem deselectAllSequenceMenuItem = new MenuItem("Deselect All");
2357 MenuItem invertSequenceMenuItem = new MenuItem("Invert Selection");
2358 MenuItem remove2LeftMenuItem = new MenuItem();
2359 MenuItem remove2RightMenuItem = new MenuItem();
2360 MenuItem removeGappedColumnMenuItem = new MenuItem();
2361 MenuItem removeAllGapsMenuItem = new MenuItem();
2362 CheckboxMenuItem viewBoxesMenuItem = new CheckboxMenuItem();
2363 CheckboxMenuItem viewTextMenuItem = new CheckboxMenuItem();
2364 MenuItem sortPairwiseMenuItem = new MenuItem();
2365 MenuItem sortIDMenuItem = new MenuItem();
2366 MenuItem sortGroupMenuItem = new MenuItem();
2367 MenuItem removeRedundancyMenuItem = new MenuItem();
2368 MenuItem pairwiseAlignmentMenuItem = new MenuItem();
2369 MenuItem PCAMenuItem = new MenuItem();
2370 MenuItem averageDistanceTreeMenuItem = new MenuItem();
2371 MenuItem neighbourTreeMenuItem = new MenuItem();
2372 BorderLayout borderLayout1 = new BorderLayout();
2373 public Label statusBar = new Label();
2374 Menu outputTextboxMenu = new Menu();
2375 MenuItem clustalColour = new MenuItem();
2376 MenuItem zappoColour = new MenuItem();
2377 MenuItem taylorColour = new MenuItem();
2378 MenuItem hydrophobicityColour = new MenuItem();
2379 MenuItem helixColour = new MenuItem();
2380 MenuItem strandColour = new MenuItem();
2381 MenuItem turnColour = new MenuItem();
2382 MenuItem buriedColour = new MenuItem();
2383 MenuItem userDefinedColour = new MenuItem();
2384 MenuItem PIDColour = new MenuItem();
2385 MenuItem BLOSUM62Colour = new MenuItem();
2386 MenuItem njTreeBlosumMenuItem = new MenuItem();
2387 MenuItem avDistanceTreeBlosumMenuItem = new MenuItem();
2388 CheckboxMenuItem annotationPanelMenuItem = new CheckboxMenuItem();
2389 CheckboxMenuItem colourTextMenuItem = new CheckboxMenuItem();
2390 MenuItem alProperties = new MenuItem("Alignment Properties...");
2391 MenuItem overviewMenuItem = new MenuItem();
2392 MenuItem undoMenuItem = new MenuItem();
2393 MenuItem redoMenuItem = new MenuItem();
2394 CheckboxMenuItem conservationMenuItem = new CheckboxMenuItem();
2395 MenuItem noColourmenuItem = new MenuItem();
2396 CheckboxMenuItem wrapMenuItem = new CheckboxMenuItem();
2397 CheckboxMenuItem renderGapsMenuItem = new CheckboxMenuItem();
2398 MenuItem findMenuItem = new MenuItem();
2399 CheckboxMenuItem abovePIDThreshold = new CheckboxMenuItem();
2400 MenuItem nucleotideColour = new MenuItem();
2401 MenuItem deleteGroups = new MenuItem();
2402 MenuItem delete = new MenuItem();
2403 MenuItem copy = new MenuItem();
2404 MenuItem cut = new MenuItem();
2405 Menu pasteMenu = new Menu();
2406 MenuItem pasteNew = new MenuItem();
2407 MenuItem pasteThis = new MenuItem();
2408 CheckboxMenuItem applyToAllGroups = new CheckboxMenuItem();
2409 MenuItem font = new MenuItem();
2410 CheckboxMenuItem scaleAbove = new CheckboxMenuItem();
2411 CheckboxMenuItem scaleLeft = new CheckboxMenuItem();
2412 CheckboxMenuItem scaleRight = new CheckboxMenuItem();
2413 MenuItem modifyPID = new MenuItem();
2414 MenuItem modifyConservation = new MenuItem();
2415 CheckboxMenuItem autoCalculate
2416 = new CheckboxMenuItem("Autocalculate Consensus", true);
2417 Menu sortByTreeMenu = new Menu();
2418 Menu sort = new Menu();
2419 Menu calculate = new Menu();
2420 MenuItem inputText = new MenuItem();
2421 Menu helpMenu = new Menu();
2422 MenuItem documentation = new MenuItem();
2423 MenuItem about = new MenuItem();
2424 CheckboxMenuItem seqLimits = new CheckboxMenuItem();
2427 Label embeddedSelect;
2429 Label embeddedFormat;
2430 Label embeddedColour;
2433 Label embeddedCalculate;
2434 FlowLayout flowLayout1;
2436 private void jbInit()
2440 setMenuBar(alignFrameMenuBar);
2444 // dynamically fill save as menu with available formats
2445 for (int i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length;
2449 item = new MenuItem(jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS[i]);
2451 item.addActionListener(new java.awt.event.ActionListener()
2453 public void actionPerformed(ActionEvent e)
2455 outputText_actionPerformed(e);
2459 outputTextboxMenu.add(item);
2461 closeMenuItem.addActionListener(this);
2462 loadApplication.addActionListener(this);
2464 loadTree.addActionListener(this);
2465 loadAnnotations.addActionListener(this);
2466 outputFeatures.addActionListener(this);
2467 outputAnnotations.addActionListener(this);
2468 selectAllSequenceMenuItem.addActionListener(this);
2469 deselectAllSequenceMenuItem.addActionListener(this);
2470 invertSequenceMenuItem.addActionListener(this);
2471 remove2LeftMenuItem.setLabel("Remove Left");
2472 remove2LeftMenuItem.addActionListener(this);
2473 remove2RightMenuItem.setLabel("Remove Right");
2474 remove2RightMenuItem.addActionListener(this);
2475 removeGappedColumnMenuItem.setLabel("Remove Empty Columns");
2476 removeGappedColumnMenuItem.addActionListener(this);
2477 removeAllGapsMenuItem.setLabel("Remove All Gaps");
2478 removeAllGapsMenuItem.addActionListener(this);
2479 viewBoxesMenuItem.setLabel("Boxes");
2480 viewBoxesMenuItem.setState(true);
2481 viewBoxesMenuItem.addItemListener(this);
2482 viewTextMenuItem.setLabel("Text");
2483 viewTextMenuItem.setState(true);
2484 viewTextMenuItem.addItemListener(this);
2485 sortPairwiseMenuItem.setLabel("by Pairwise Identity");
2486 sortPairwiseMenuItem.addActionListener(this);
2487 sortIDMenuItem.setLabel("by ID");
2488 sortIDMenuItem.addActionListener(this);
2489 sortGroupMenuItem.setLabel("by Group");
2490 sortGroupMenuItem.addActionListener(this);
2491 removeRedundancyMenuItem.setLabel("Remove Redundancy...");
2492 removeRedundancyMenuItem.addActionListener(this);
2493 pairwiseAlignmentMenuItem.setLabel("Pairwise Alignments...");
2494 pairwiseAlignmentMenuItem.addActionListener(this);
2495 PCAMenuItem.setLabel("Principal Component Analysis");
2496 PCAMenuItem.addActionListener(this);
2497 averageDistanceTreeMenuItem.setLabel(
2498 "Average Distance Using % Identity");
2499 averageDistanceTreeMenuItem.addActionListener(this);
2500 neighbourTreeMenuItem.setLabel("Neighbour Joining Using % Identity");
2501 neighbourTreeMenuItem.addActionListener(this);
2502 statusBar.setBackground(Color.white);
2503 statusBar.setFont(new java.awt.Font("Verdana", 0, 11));
2504 statusBar.setText("Status bar");
2505 outputTextboxMenu.setLabel("Output to Textbox");
2506 clustalColour.setLabel("Clustalx");
2508 clustalColour.addActionListener(this);
2509 zappoColour.setLabel("Zappo");
2510 zappoColour.addActionListener(this);
2511 taylorColour.setLabel("Taylor");
2512 taylorColour.addActionListener(this);
2513 hydrophobicityColour.setLabel("Hydrophobicity");
2514 hydrophobicityColour.addActionListener(this);
2515 helixColour.setLabel("Helix Propensity");
2516 helixColour.addActionListener(this);
2517 strandColour.setLabel("Strand Propensity");
2518 strandColour.addActionListener(this);
2519 turnColour.setLabel("Turn Propensity");
2520 turnColour.addActionListener(this);
2521 buriedColour.setLabel("Buried Index");
2522 buriedColour.addActionListener(this);
2523 userDefinedColour.setLabel("User Defined...");
2524 userDefinedColour.addActionListener(this);
2525 PIDColour.setLabel("Percentage Identity");
2526 PIDColour.addActionListener(this);
2527 BLOSUM62Colour.setLabel("BLOSUM62 Score");
2528 BLOSUM62Colour.addActionListener(this);
2529 avDistanceTreeBlosumMenuItem.setLabel(
2530 "Average Distance Using BLOSUM62");
2531 avDistanceTreeBlosumMenuItem.addActionListener(this);
2532 njTreeBlosumMenuItem.setLabel("Neighbour Joining Using BLOSUM62");
2533 njTreeBlosumMenuItem.addActionListener(this);
2534 annotationPanelMenuItem.setLabel("Show Annotations");
2535 annotationPanelMenuItem.addItemListener(this);
2536 colourTextMenuItem.setLabel("Colour Text");
2537 colourTextMenuItem.addItemListener(this);
2538 alProperties.addActionListener(this);
2539 overviewMenuItem.setLabel("Overview Window");
2540 overviewMenuItem.addActionListener(this);
2541 undoMenuItem.setEnabled(false);
2542 undoMenuItem.setLabel("Undo");
2543 undoMenuItem.addActionListener(this);
2544 redoMenuItem.setEnabled(false);
2545 redoMenuItem.setLabel("Redo");
2546 redoMenuItem.addActionListener(this);
2547 conservationMenuItem.setLabel("by Conservation");
2548 conservationMenuItem.addItemListener(this);
2549 noColourmenuItem.setLabel("None");
2550 noColourmenuItem.addActionListener(this);
2551 wrapMenuItem.setLabel("Wrap");
2552 wrapMenuItem.addItemListener(this);
2553 renderGapsMenuItem.setLabel("Show Gaps");
2554 renderGapsMenuItem.setState(true);
2555 renderGapsMenuItem.addItemListener(this);
2556 findMenuItem.setLabel("Find...");
2557 findMenuItem.addActionListener(this);
2558 abovePIDThreshold.setLabel("Above Identity Threshold");
2559 abovePIDThreshold.addItemListener(this);
2560 nucleotideColour.setLabel("Nucleotide");
2561 nucleotideColour.addActionListener(this);
2562 deleteGroups.setLabel("Undefine Groups");
2563 deleteGroups.addActionListener(this);
2564 copy.setLabel("Copy");
2565 copy.addActionListener(this);
2566 cut.setLabel("Cut");
2567 cut.addActionListener(this);
2568 delete.setLabel("Delete");
2569 delete.addActionListener(this);
2570 pasteMenu.setLabel("Paste");
2571 pasteNew.setLabel("To New Alignment");
2572 pasteNew.addActionListener(this);
2573 pasteThis.setLabel("Add To This Alignment");
2574 pasteThis.addActionListener(this);
2575 applyToAllGroups.setLabel("Apply Colour To All Groups");
2576 applyToAllGroups.setState(true);
2577 applyToAllGroups.addItemListener(this);
2578 font.setLabel("Font...");
2579 font.addActionListener(this);
2580 scaleAbove.setLabel("Scale Above");
2581 scaleAbove.setState(true);
2582 scaleAbove.setEnabled(false);
2583 scaleAbove.addItemListener(this);
2584 scaleLeft.setEnabled(false);
2585 scaleLeft.setState(true);
2586 scaleLeft.setLabel("Scale Left");
2587 scaleLeft.addItemListener(this);
2588 scaleRight.setEnabled(false);
2589 scaleRight.setState(true);
2590 scaleRight.setLabel("Scale Right");
2591 scaleRight.addItemListener(this);
2592 modifyPID.setLabel("Modify Identity Threshold...");
2593 modifyPID.addActionListener(this);
2594 modifyConservation.setLabel("Modify Conservation Threshold...");
2595 modifyConservation.addActionListener(this);
2596 sortByTreeMenu.setLabel("By Tree Order");
2597 sort.setLabel("Sort");
2598 calculate.setLabel("Calculate Tree");
2599 autoCalculate.addItemListener(this);
2600 inputText.setLabel("Input from textbox");
2601 inputText.addActionListener(this);
2603 helpMenu.setLabel("Help");
2604 documentation.setLabel("Documentation");
2605 documentation.addActionListener(this);
2607 about.setLabel("About...");
2608 about.addActionListener(this);
2609 seqLimits.setState(true);
2610 seqLimits.setLabel("Show Sequence Limits");
2611 seqLimits.addItemListener(this);
2612 featureSettings.setLabel("Feature Settings...");
2613 featureSettings.addActionListener(this);
2614 sequenceFeatures.setLabel("Sequence Features");
2615 sequenceFeatures.addItemListener(this);
2616 sequenceFeatures.setState(false);
2617 annotationColour.setLabel("by Annotation...");
2618 annotationColour.addActionListener(this);
2619 invertSequenceMenuItem.setLabel("Invert Sequence Selection");
2620 invertColSel.setLabel("Invert Column Selection");
2621 menu1.setLabel("Show");
2622 showColumns.setLabel("All Columns ");
2623 showSeqs.setLabel("All Sequences");
2624 menu2.setLabel("Hide");
2625 hideColumns.setLabel("Selected Columns");
2626 hideSequences.setLabel("Selected Sequences");
2627 invertColSel.addActionListener(this);
2628 showColumns.addActionListener(this);
2629 showSeqs.addActionListener(this);
2630 hideColumns.addActionListener(this);
2631 hideSequences.addActionListener(this);
2632 formatMenu.setLabel("Format");
2633 selectMenu.setLabel("Select");
2634 newView.setLabel("New View");
2635 newView.addActionListener(this);
2636 alignFrameMenuBar.add(fileMenu);
2637 alignFrameMenuBar.add(editMenu);
2638 alignFrameMenuBar.add(selectMenu);
2639 alignFrameMenuBar.add(viewMenu);
2640 alignFrameMenuBar.add(formatMenu);
2641 alignFrameMenuBar.add(colourMenu);
2642 alignFrameMenuBar.add(calculateMenu);
2643 alignFrameMenuBar.add(helpMenu);
2645 fileMenu.add(inputText);
2646 fileMenu.add(loadTree);
2647 fileMenu.add(loadAnnotations);
2649 fileMenu.addSeparator();
2650 fileMenu.add(outputTextboxMenu);
2651 fileMenu.add(outputFeatures);
2652 fileMenu.add(outputAnnotations);
2654 if (jalviewServletURL != null)
2656 fileMenu.add(loadApplication);
2659 fileMenu.addSeparator();
2660 fileMenu.add(closeMenuItem);
2662 editMenu.add(undoMenuItem);
2663 editMenu.add(redoMenuItem);
2666 editMenu.add(pasteMenu);
2667 editMenu.add(delete);
2668 editMenu.addSeparator();
2669 editMenu.add(remove2LeftMenuItem);
2670 editMenu.add(remove2RightMenuItem);
2671 editMenu.add(removeGappedColumnMenuItem);
2672 editMenu.add(removeAllGapsMenuItem);
2673 editMenu.add(removeRedundancyMenuItem);
2674 viewMenu.add(newView);
2675 viewMenu.addSeparator();
2676 viewMenu.add(menu1);
2677 viewMenu.add(menu2);
2678 viewMenu.addSeparator();
2679 viewMenu.add(annotationPanelMenuItem);
2680 viewMenu.addSeparator();
2681 viewMenu.add(sequenceFeatures);
2682 viewMenu.add(featureSettings);
2683 viewMenu.addSeparator();
2684 viewMenu.add(alProperties);
2685 viewMenu.addSeparator();
2686 viewMenu.add(overviewMenuItem);
2687 colourMenu.add(applyToAllGroups);
2688 colourMenu.addSeparator();
2689 colourMenu.add(noColourmenuItem);
2690 colourMenu.add(clustalColour);
2691 colourMenu.add(BLOSUM62Colour);
2692 colourMenu.add(PIDColour);
2693 colourMenu.add(zappoColour);
2694 colourMenu.add(taylorColour);
2695 colourMenu.add(hydrophobicityColour);
2696 colourMenu.add(helixColour);
2697 colourMenu.add(strandColour);
2698 colourMenu.add(turnColour);
2699 colourMenu.add(buriedColour);
2700 colourMenu.add(nucleotideColour);
2701 colourMenu.add(userDefinedColour);
2702 colourMenu.addSeparator();
2703 colourMenu.add(conservationMenuItem);
2704 colourMenu.add(modifyConservation);
2705 colourMenu.add(abovePIDThreshold);
2706 colourMenu.add(modifyPID);
2707 colourMenu.add(annotationColour);
2708 calculateMenu.add(sort);
2709 calculateMenu.add(calculate);
2710 calculateMenu.addSeparator();
2711 calculateMenu.add(pairwiseAlignmentMenuItem);
2712 calculateMenu.add(PCAMenuItem);
2713 calculateMenu.add(autoCalculate);
2714 this.add(statusBar, BorderLayout.SOUTH);
2715 pasteMenu.add(pasteNew);
2716 pasteMenu.add(pasteThis);
2717 sort.add(sortIDMenuItem);
2718 sort.add(sortByTreeMenu);
2719 sort.add(sortGroupMenuItem);
2720 sort.add(sortPairwiseMenuItem);
2721 calculate.add(averageDistanceTreeMenuItem);
2722 calculate.add(neighbourTreeMenuItem);
2723 calculate.add(avDistanceTreeBlosumMenuItem);
2724 calculate.add(njTreeBlosumMenuItem);
2725 helpMenu.add(documentation);
2726 helpMenu.add(about);
2727 menu1.add(showColumns);
2728 menu1.add(showSeqs);
2729 menu2.add(hideColumns);
2730 menu2.add(hideSequences);
2731 formatMenu.add(font);
2732 formatMenu.add(seqLimits);
2733 formatMenu.add(wrapMenuItem);
2734 formatMenu.add(scaleAbove);
2735 formatMenu.add(scaleLeft);
2736 formatMenu.add(scaleRight);
2737 formatMenu.add(viewBoxesMenuItem);
2738 formatMenu.add(viewTextMenuItem);
2739 formatMenu.add(colourTextMenuItem);
2740 formatMenu.add(renderGapsMenuItem);
2741 selectMenu.add(findMenuItem);
2742 selectMenu.addSeparator();
2743 selectMenu.add(selectAllSequenceMenuItem);
2744 selectMenu.add(deselectAllSequenceMenuItem);
2745 selectMenu.add(invertSequenceMenuItem);
2746 selectMenu.add(invertColSel);
2747 selectMenu.add(deleteGroups);
2750 public void setEmbedded()
2753 embeddedMenu = new Panel();
2754 embeddedEdit = new Label("Edit");
2755 embeddedSelect = new Label("Select");
2756 embeddedView = new Label("View");
2757 embeddedFormat = new Label("Format");
2758 embeddedColour = new Label("Colour");
2759 embeddedFile = new Label("File");
2760 embeddedHelp = new Label("Help");
2761 embeddedCalculate = new Label("Calculate");
2762 flowLayout1 = new FlowLayout();
2763 embeddedMenu.setBackground(Color.lightGray);
2764 embeddedMenu.setLayout(flowLayout1);
2765 embeddedEdit.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
2766 embeddedSelect.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
2767 embeddedView.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
2768 embeddedFormat.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
2769 embeddedColour.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
2770 embeddedFile.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
2771 embeddedHelp.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
2772 embeddedCalculate.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
2773 embeddedMenu.add(embeddedFile);
2774 embeddedMenu.add(embeddedEdit);
2775 embeddedMenu.add(embeddedSelect);
2776 embeddedMenu.add(embeddedView);
2777 embeddedMenu.add(embeddedFormat);
2778 embeddedMenu.add(embeddedColour);
2779 embeddedMenu.add(embeddedCalculate);
2780 embeddedMenu.add(embeddedHelp);
2781 flowLayout1.setAlignment(FlowLayout.LEFT);
2782 flowLayout1.setHgap(2);
2783 flowLayout1.setVgap(0);
2784 embeddedFile.addMouseListener(this);
2785 embeddedEdit.addMouseListener(this);
2786 embeddedSelect.addMouseListener(this);
2787 embeddedView.addMouseListener(this);
2788 embeddedFormat.addMouseListener(this);
2789 embeddedColour.addMouseListener(this);
2790 embeddedCalculate.addMouseListener(this);
2791 embeddedHelp.addMouseListener(this);
2793 fileMenu.remove(closeMenuItem);
2794 fileMenu.remove(3); // Seperator
2796 viewport.applet.setLayout(new BorderLayout());
2797 viewport.applet.add(embeddedMenu, BorderLayout.NORTH);
2798 viewport.applet.add(statusBar, BorderLayout.SOUTH);
2800 alignPanel.setSize(viewport.applet.getSize().width,
2801 viewport.applet.getSize().height
2802 - embeddedMenu.HEIGHT - statusBar.HEIGHT);
2804 viewport.applet.add(alignPanel, BorderLayout.CENTER);
2805 viewport.applet.validate();
2809 PopupMenu filePopup, editPopup, searchPopup,
2810 viewPopup, formatPopup, colourPopup, calculatePopup, helpPopup;
2811 MenuItem featureSettings = new MenuItem();
2812 CheckboxMenuItem sequenceFeatures = new CheckboxMenuItem();
2813 MenuItem annotationColour = new MenuItem();
2814 MenuItem invertColSel = new MenuItem();
2815 Menu menu1 = new Menu();
2816 MenuItem showColumns = new MenuItem();
2817 MenuItem showSeqs = new MenuItem();
2818 Menu menu2 = new Menu();
2819 MenuItem hideColumns = new MenuItem();
2820 MenuItem hideSequences = new MenuItem();
2821 Menu formatMenu = new Menu();
2822 Menu selectMenu = new Menu();
2823 MenuItem newView = new MenuItem();
2825 public void mousePressed(MouseEvent evt)
2827 PopupMenu popup = null;
2828 Label source = (Label) evt.getSource();
2829 if (source == embeddedFile)
2831 popup = filePopup = genPopupMenu(filePopup, fileMenu);
2833 else if (source == embeddedEdit)
2835 popup = editPopup = genPopupMenu(editPopup, editMenu);
2837 else if (source == embeddedSelect)
2839 popup = searchPopup = genPopupMenu(searchPopup, selectMenu);
2841 else if (source == embeddedView)
2843 popup = viewPopup = genPopupMenu(viewPopup, viewMenu);
2845 else if (source == embeddedFormat)
2847 popup = formatPopup = genPopupMenu(formatPopup, formatMenu);
2849 else if (source == embeddedColour)
2851 popup = colourPopup = genPopupMenu(colourPopup, colourMenu);
2853 else if (source == embeddedCalculate)
2855 popup = calculatePopup = genPopupMenu(calculatePopup, calculateMenu);
2857 else if (source == embeddedHelp)
2859 popup = helpPopup = genPopupMenu(helpPopup, helpMenu);
2862 embeddedMenu.add(popup);
2863 popup.show(embeddedMenu,
2864 source.getBounds().x,
2865 source.getBounds().y + source.getBounds().getSize().height);
2868 PopupMenu genPopupMenu(PopupMenu popup, Menu original)
2874 popup = new PopupMenu();
2875 int m, mSize = original.getItemCount();
2876 for (m = 0; m < mSize; m++)
2878 popup.add(original.getItem(m));
2886 public void mouseClicked(MouseEvent evt)
2889 public void mouseReleased(MouseEvent evt)
2892 public void mouseEntered(MouseEvent evt)
2895 public void mouseExited(MouseEvent evt)