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 Softwarechang
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
26 import java.awt.datatransfer.*;
27 import java.awt.dnd.*;
28 import java.awt.event.*;
29 import java.awt.print.*;
32 import jalview.analysis.*;
33 import jalview.commands.*;
34 import jalview.datamodel.*;
36 import jalview.jbgui.*;
37 import jalview.schemes.*;
46 public class AlignFrame
47 extends GAlignFrame implements DropTargetListener
50 public static final int DEFAULT_WIDTH = 700;
53 public static final int DEFAULT_HEIGHT = 500;
54 public AlignmentPanel alignPanel;
56 AlignViewport viewport;
58 Vector alignPanels = new Vector();
61 String currentFileFormat = null;
63 String fileName = null;
66 * Creates a new AlignFrame object.
68 * @param al DOCUMENT ME!
70 public AlignFrame(AlignmentI al, int width, int height)
72 this(al, null, width, height);
76 * new alignment window with hidden columns
77 * @param al AlignmentI
78 * @param hiddenColumns ColumnSelection or null
80 public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns,
81 int width, int height)
83 this.setSize(width, height);
84 viewport = new AlignViewport(al, hiddenColumns);
86 alignPanel = new AlignmentPanel(this, viewport);
88 if (al.getDataset() == null)
93 addAlignmentPanel(alignPanel, true);
98 * Make a new AlignFrame from exisiting alignmentPanels
99 * @param ap AlignmentPanel
100 * @param av AlignViewport
102 public AlignFrame(AlignmentPanel ap)
106 addAlignmentPanel(ap, false);
112 this.setDropTarget(new java.awt.dnd.DropTarget(this, this));
114 if (viewport.conservation == null)
116 BLOSUM62Colour.setEnabled(false);
117 conservationMenuItem.setEnabled(false);
118 modifyConservation.setEnabled(false);
119 // PIDColour.setEnabled(false);
120 // abovePIDThreshold.setEnabled(false);
121 // modifyPID.setEnabled(false);
124 String sortby = jalview.bin.Cache.getDefault("SORT_ALIGNMENT", "No sort");
126 if (sortby.equals("Id"))
128 sortIDMenuItem_actionPerformed(null);
130 else if (sortby.equals("Pairwise Identity"))
132 sortPairwiseMenuItem_actionPerformed(null);
135 if (Desktop.desktop != null)
137 addServiceListeners();
138 setGUINucleotide(viewport.alignment.isNucleotide());
141 setMenusFromViewport(viewport);
143 if (viewport.wrapAlignment)
145 wrapMenuItem_actionPerformed(null);
152 public void setFileName(String file, String format)
155 currentFileFormat = format;
156 reload.setEnabled(true);
159 void addKeyListener()
161 addKeyListener(new KeyAdapter()
163 public void keyPressed(KeyEvent evt)
165 if (viewport.cursorMode
166 && evt.getKeyCode() >= KeyEvent.VK_0
167 && evt.getKeyCode() <= KeyEvent.VK_9)
169 alignPanel.seqPanel.numberPressed(evt.getKeyChar());
172 switch (evt.getKeyCode())
175 case 27: // escape key
176 deselectAllSequenceMenuItem_actionPerformed(null);
180 case KeyEvent.VK_DOWN:
181 if (viewport.cursorMode)
183 alignPanel.seqPanel.moveCursor(0, 1);
187 moveSelectedSequences(false);
192 if (viewport.cursorMode)
194 alignPanel.seqPanel.moveCursor(0, -1);
198 moveSelectedSequences(true);
202 case KeyEvent.VK_LEFT:
203 if (viewport.cursorMode)
205 alignPanel.seqPanel.moveCursor( -1, 0);
209 case KeyEvent.VK_RIGHT:
210 if (viewport.cursorMode)
212 alignPanel.seqPanel.moveCursor(1, 0);
216 case KeyEvent.VK_SPACE:
217 if (viewport.cursorMode)
219 alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown()
225 case KeyEvent.VK_DELETE:
226 case KeyEvent.VK_BACK_SPACE:
227 if (!viewport.cursorMode)
229 cut_actionPerformed(null);
233 alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown()
241 if (viewport.cursorMode)
243 alignPanel.seqPanel.setCursorRow();
247 if (viewport.cursorMode && !evt.isControlDown())
249 alignPanel.seqPanel.setCursorColumn();
253 if (viewport.cursorMode)
255 alignPanel.seqPanel.setCursorPosition();
259 case KeyEvent.VK_ENTER:
260 case KeyEvent.VK_COMMA:
261 if (viewport.cursorMode)
263 alignPanel.seqPanel.setCursorRowAndColumn();
268 if (viewport.cursorMode)
270 alignPanel.seqPanel.setSelectionAreaAtCursor(true);
274 if (viewport.cursorMode)
276 alignPanel.seqPanel.setSelectionAreaAtCursor(false);
281 viewport.cursorMode = !viewport.cursorMode;
282 statusBar.setText("Keyboard editing mode is " +
283 (viewport.cursorMode ? "on" : "off"));
284 if (viewport.cursorMode)
286 alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes;
287 alignPanel.seqPanel.seqCanvas.cursorY = viewport.startSeq;
289 alignPanel.seqPanel.seqCanvas.repaint();
295 ClassLoader cl = jalview.gui.Desktop.class.getClassLoader();
296 java.net.URL url = javax.help.HelpSet.findHelpSet(cl, "help/help");
297 javax.help.HelpSet hs = new javax.help.HelpSet(cl, url);
299 javax.help.HelpBroker hb = hs.createHelpBroker();
300 hb.setCurrentID("home");
301 hb.setDisplayed(true);
305 ex.printStackTrace();
311 boolean toggleSeqs = !evt.isControlDown();
312 boolean toggleCols = !evt.isShiftDown();
314 boolean hide = false;
316 SequenceGroup sg = viewport.getSelectionGroup();
319 if (sg != null && sg.getSize() != viewport.alignment.getHeight())
321 hideSelSequences_actionPerformed(null);
324 else if (! (toggleCols &&
325 viewport.colSel.getSelected().size() > 0))
327 showAllSeqs_actionPerformed(null);
333 if (viewport.colSel.getSelected().size() > 0)
335 hideSelColumns_actionPerformed(null);
338 viewport.selectionGroup = sg;
343 showAllColumns_actionPerformed(null);
348 case KeyEvent.VK_PAGE_UP:
349 if (viewport.wrapAlignment)
351 alignPanel.scrollUp(true);
355 alignPanel.setScrollValues(viewport.startRes,
357 - viewport.endSeq + viewport.startSeq);
360 case KeyEvent.VK_PAGE_DOWN:
361 if (viewport.wrapAlignment)
363 alignPanel.scrollUp(false);
367 alignPanel.setScrollValues(viewport.startRes,
369 + viewport.endSeq - viewport.startSeq);
377 public void addAlignmentPanel(final AlignmentPanel ap,
380 ap.alignFrame = this;
382 alignPanels.addElement(ap);
384 PaintRefresher.Register(ap, ap.av.getSequenceSetId());
386 int aSize = alignPanels.size();
388 tabbedPane.setVisible(aSize > 1 || ap.av.viewName != null);
390 if (aSize == 1 && ap.av.viewName == null)
392 this.getContentPane().add(ap, BorderLayout.CENTER);
398 setInitialTabVisible();
401 expandViews.setEnabled(true);
402 gatherViews.setEnabled(true);
403 tabbedPane.addTab(ap.av.viewName, ap);
405 ap.setVisible(false);
412 ap.av.alignment.padGaps();
414 ap.av.updateConservation(ap);
415 ap.av.updateConsensus(ap);
419 public void setInitialTabVisible()
421 expandViews.setEnabled(true);
422 gatherViews.setEnabled(true);
423 tabbedPane.setVisible(true);
424 AlignmentPanel first = (AlignmentPanel) alignPanels.firstElement();
425 tabbedPane.addTab(first.av.viewName, first);
426 this.getContentPane().add(tabbedPane, BorderLayout.CENTER);
429 public AlignViewport getViewport()
434 /* Set up intrinsic listeners for dynamically generated GUI bits. */
435 private void addServiceListeners()
437 final java.beans.PropertyChangeListener thisListener;
438 // Do this once to get current state
439 BuildWebServiceMenu();
440 Desktop.discoverer.addPropertyChangeListener(
441 thisListener = new java.beans.PropertyChangeListener()
443 public void propertyChange(PropertyChangeEvent evt)
445 // System.out.println("Discoverer property change.");
446 if (evt.getPropertyName().equals("services"))
448 // System.out.println("Rebuilding web service menu");
449 BuildWebServiceMenu();
454 addInternalFrameListener(new javax.swing.event.
455 InternalFrameAdapter()
457 public void internalFrameClosed(
458 javax.swing.event.InternalFrameEvent evt)
460 // System.out.println("deregistering discoverer listener");
461 Desktop.discoverer.removePropertyChangeListener(thisListener);
462 closeMenuItem_actionPerformed(true);
468 public void setGUINucleotide(boolean nucleotide)
470 showTranslation.setVisible(nucleotide);
471 conservationMenuItem.setEnabled(!nucleotide);
472 modifyConservation.setEnabled(!nucleotide);
474 //Remember AlignFrame always starts as protein
477 calculateMenu.remove(calculateMenu.getItemCount() - 2);
482 * Need to call this method when tabs are selected for multiple views,
483 * or when loading from Jalview2XML.java
484 * @param av AlignViewport
486 void setMenusFromViewport(AlignViewport av)
488 padGapsMenuitem.setSelected(av.padGaps);
489 colourTextMenuItem.setSelected(av.showColourText);
490 abovePIDThreshold.setSelected(av.getAbovePIDThreshold());
491 conservationMenuItem.setSelected(av.getConservationSelected());
492 seqLimits.setSelected(av.getShowJVSuffix());
493 idRightAlign.setSelected(av.rightAlignIds);
494 renderGapsMenuItem.setSelected(av.renderGaps);
495 wrapMenuItem.setSelected(av.wrapAlignment);
496 scaleAbove.setVisible(av.wrapAlignment);
497 scaleLeft.setVisible(av.wrapAlignment);
498 scaleRight.setVisible(av.wrapAlignment);
499 annotationPanelMenuItem.setState(av.showAnnotation);
500 viewBoxesMenuItem.setSelected(av.showBoxes);
501 viewTextMenuItem.setSelected(av.showText);
503 setColourSelected(ColourSchemeProperty.
504 getColourName(av.getGlobalColourScheme()));
506 showSeqFeatures.setSelected(av.showSequenceFeatures);
507 hiddenMarkers.setState(av.showHiddenMarkers);
508 applyToAllGroups.setState(av.colourAppliesToAllGroups);
513 Hashtable progressBars;
514 public void setProgressBar(String message, long id)
516 if (progressBars == null)
518 progressBars = new Hashtable();
521 JPanel progressPanel;
522 GridLayout layout = (GridLayout) statusPanel.getLayout();
523 if (progressBars.get(new Long(id)) != null)
525 progressPanel = (JPanel) progressBars.get(new Long(id));
526 statusPanel.remove(progressPanel);
527 progressBars.remove(progressPanel);
528 progressPanel = null;
531 statusBar.setText(message);
534 layout.setRows(layout.getRows() - 1);
538 progressPanel = new JPanel(new BorderLayout(10, 5));
540 JProgressBar progressBar = new JProgressBar();
541 progressBar.setIndeterminate(true);
543 progressPanel.add(new JLabel(message), BorderLayout.WEST);
544 progressPanel.add(progressBar, BorderLayout.CENTER);
546 layout.setRows(layout.getRows() + 1);
547 statusPanel.add(progressPanel);
549 progressBars.put(new Long(id), progressPanel);
556 Added so Castor Mapping file can obtain Jalview Version
558 public String getVersion()
560 return jalview.bin.Cache.getProperty("VERSION");
563 public FeatureRenderer getFeatureRenderer()
565 return alignPanel.seqPanel.seqCanvas.getFeatureRenderer();
568 public void fetchSequence_actionPerformed(ActionEvent e)
570 new SequenceFetcher(this);
573 public void addFromFile_actionPerformed(ActionEvent e)
575 Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport);
578 public void reload_actionPerformed(ActionEvent e)
580 if (fileName != null)
582 if (currentFileFormat.equals("Jalview"))
584 JInternalFrame[] frames = Desktop.desktop.getAllFrames();
585 for (int i = 0; i < frames.length; i++)
587 if (frames[i] instanceof AlignFrame
589 && ( (AlignFrame) frames[i]).fileName.equals(fileName))
593 frames[i].setSelected(true);
594 Desktop.instance.closeAssociatedWindows();
596 catch (java.beans.PropertyVetoException ex)
601 Desktop.instance.closeAssociatedWindows();
606 Rectangle bounds = this.getBounds();
608 FileLoader loader = new FileLoader();
609 String protocol = fileName.startsWith("http:") ? "URL" : "File";
610 AlignFrame newframe =
611 loader.LoadFileWaitTillLoaded(fileName, protocol, currentFileFormat);
613 newframe.setBounds(bounds);
615 this.closeMenuItem_actionPerformed(true);
620 public void addFromText_actionPerformed(ActionEvent e)
622 Desktop.instance.inputTextboxMenuItem_actionPerformed(viewport);
625 public void addFromURL_actionPerformed(ActionEvent e)
627 Desktop.instance.inputURLMenuItem_actionPerformed(viewport);
630 public void save_actionPerformed(ActionEvent e)
633 || currentFileFormat == null
634 || fileName.startsWith("http")
637 saveAs_actionPerformed(null);
641 saveAlignment(fileName, currentFileFormat);
648 * @param e DOCUMENT ME!
650 public void saveAs_actionPerformed(ActionEvent e)
652 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
653 getProperty("LAST_DIRECTORY"),
655 {"fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc", "jar"},
657 {"Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "Jalview"},
661 chooser.setFileView(new JalviewFileView());
662 chooser.setDialogTitle("Save Alignment to file");
663 chooser.setToolTipText("Save");
665 int value = chooser.showSaveDialog(this);
667 if (value == JalviewFileChooser.APPROVE_OPTION)
669 currentFileFormat = chooser.getSelectedFormat();
670 if (currentFileFormat == null)
672 JOptionPane.showInternalMessageDialog(Desktop.desktop,
673 "You must select a file format before saving!",
674 "File format not specified",
675 JOptionPane.WARNING_MESSAGE);
676 value = chooser.showSaveDialog(this);
680 fileName = chooser.getSelectedFile().getPath();
682 jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT",
685 jalview.bin.Cache.setProperty("LAST_DIRECTORY", fileName);
687 saveAlignment(fileName, currentFileFormat);
691 public boolean saveAlignment(String file, String format)
693 boolean success = true;
695 if (format.equalsIgnoreCase("Jalview"))
697 String shortName = title;
699 if (shortName.indexOf(java.io.File.separatorChar) > -1)
701 shortName = shortName.substring(shortName.lastIndexOf(
702 java.io.File.separatorChar) + 1);
705 success = new Jalview2XML().SaveAlignment(this, file, shortName);
707 statusBar.setText("Successfully saved to file: "
709 + format + " format.");
715 String[] omitHidden = null;
717 if (viewport.hasHiddenColumns)
719 int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,
720 "The Alignment contains hidden columns."
721 + "\nDo you want to save only the visible alignment?",
722 "Save / Omit Hidden Columns",
723 JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
725 if (reply == JOptionPane.YES_OPTION)
727 omitHidden = viewport.getViewAsString(false);
731 String output = new FormatAdapter().formatSequences(
733 viewport.alignment.getSequencesArray(),
744 java.io.PrintWriter out = new java.io.PrintWriter(
745 new java.io.FileWriter(file));
750 statusBar.setText("Successfully saved to file: "
752 + format + " format.");
757 ex.printStackTrace();
764 JOptionPane.showInternalMessageDialog(
765 this, "Couldn't save file: " + fileName,
767 JOptionPane.WARNING_MESSAGE);
776 * @param e DOCUMENT ME!
778 protected void outputText_actionPerformed(ActionEvent e)
780 String[] omitHidden = null;
782 if (viewport.hasHiddenColumns)
784 int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,
785 "The Alignment contains hidden columns."
786 + "\nDo you want to output only the visible alignment?",
787 "Save / Omit Hidden Columns",
788 JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
790 if (reply == JOptionPane.YES_OPTION)
792 omitHidden = viewport.getViewAsString(false);
796 CutAndPasteTransfer cap = new CutAndPasteTransfer();
797 cap.setForInput(null);
798 Desktop.addInternalFrame(cap,
799 "Alignment output - " + e.getActionCommand(), 600,
802 cap.setText(new FormatAdapter().formatSequences(
803 e.getActionCommand(),
804 viewport.alignment.getSequencesArray(),
811 * @param e DOCUMENT ME!
813 protected void htmlMenuItem_actionPerformed(ActionEvent e)
815 new HTMLOutput(viewport,
816 alignPanel.seqPanel.seqCanvas.getSequenceRenderer(),
817 alignPanel.seqPanel.seqCanvas.getFeatureRenderer());
820 public void createImageMap(File file, String image)
822 alignPanel.makePNGImageMap(file, image);
828 * @param e DOCUMENT ME!
830 public void createPNG(File f)
832 alignPanel.makePNG(f);
838 * @param e DOCUMENT ME!
840 public void createEPS(File f)
842 alignPanel.makeEPS(f);
845 public void pageSetup_actionPerformed(ActionEvent e)
847 PrinterJob printJob = PrinterJob.getPrinterJob();
848 PrintThread.pf = printJob.pageDialog(printJob.defaultPage());
854 * @param e DOCUMENT ME!
856 public void printMenuItem_actionPerformed(ActionEvent e)
858 //Putting in a thread avoids Swing painting problems
859 PrintThread thread = new PrintThread(alignPanel);
863 public void exportFeatures_actionPerformed(ActionEvent e)
865 new AnnotationExporter().exportFeatures(alignPanel);
868 public void exportAnnotations_actionPerformed(ActionEvent e)
870 new AnnotationExporter().exportAnnotations(
872 viewport.showAnnotation ? viewport.alignment.getAlignmentAnnotation() : null,
873 viewport.alignment.getGroups()
877 public void associatedData_actionPerformed(ActionEvent e)
879 // Pick the tree file
880 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
883 chooser.setFileView(new JalviewFileView());
884 chooser.setDialogTitle("Load Jalview Annotations or Features File");
885 chooser.setToolTipText("Load Jalview Annotations / Features file");
887 int value = chooser.showOpenDialog(null);
889 if (value == JalviewFileChooser.APPROVE_OPTION)
891 String choice = chooser.getSelectedFile().getPath();
892 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
893 loadJalviewDataFile(choice);
901 * @param e DOCUMENT ME!
903 public void closeMenuItem_actionPerformed(boolean closeAllTabs)
905 if (alignPanels != null && alignPanels.size() < 2)
912 if (alignPanels != null)
916 for (int i = 0; i < alignPanels.size(); i++)
918 AlignmentPanel ap = (AlignmentPanel) alignPanels.elementAt(i);
919 PaintRefresher.RemoveComponent(ap.seqPanel.seqCanvas);
920 PaintRefresher.RemoveComponent(ap.idPanel.idCanvas);
921 PaintRefresher.RemoveComponent(ap);
926 int index = tabbedPane.getSelectedIndex();
928 alignPanels.removeElement(alignPanel);
929 PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas);
930 PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas);
931 PaintRefresher.RemoveComponent(alignPanel);
935 tabbedPane.removeTabAt(index);
936 tabbedPane.validate();
938 if (index == tabbedPane.getTabCount())
943 this.tabSelectionChanged(index);
949 this.setClosed(true);
954 ex.printStackTrace();
961 void updateEditMenuBar()
964 if (viewport.historyList.size() > 0)
966 undoMenuItem.setEnabled(true);
967 CommandI command = (CommandI) viewport.historyList.peek();
968 undoMenuItem.setText("Undo " + command.getDescription());
972 undoMenuItem.setEnabled(false);
973 undoMenuItem.setText("Undo");
976 if (viewport.redoList.size() > 0)
978 redoMenuItem.setEnabled(true);
980 CommandI command = (CommandI) viewport.redoList.peek();
981 redoMenuItem.setText("Redo " + command.getDescription());
985 redoMenuItem.setEnabled(false);
986 redoMenuItem.setText("Redo");
990 public void addHistoryItem(CommandI command)
992 if (command.getSize() > 0)
994 viewport.historyList.push(command);
995 viewport.redoList.clear();
997 viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1004 * @param e DOCUMENT ME!
1006 protected void undoMenuItem_actionPerformed(ActionEvent e)
1008 CommandI command = (CommandI) viewport.historyList.pop();
1009 viewport.redoList.push(command);
1010 command.undoCommand();
1012 AlignViewport originalSource = getOriginatingSource(command);
1013 updateEditMenuBar();
1015 if (originalSource != null)
1017 originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1018 originalSource.firePropertyChange("alignment",
1020 originalSource.alignment.getSequences());
1027 * @param e DOCUMENT ME!
1029 protected void redoMenuItem_actionPerformed(ActionEvent e)
1031 if (viewport.redoList.size() < 1)
1036 CommandI command = (CommandI) viewport.redoList.pop();
1037 viewport.historyList.push(command);
1038 command.doCommand();
1040 AlignViewport originalSource = getOriginatingSource(command);
1041 updateEditMenuBar();
1043 if (originalSource != null)
1045 originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
1046 originalSource.firePropertyChange("alignment",
1048 originalSource.alignment.getSequences());
1052 AlignViewport getOriginatingSource(CommandI command)
1054 AlignViewport originalSource = null;
1055 //For sequence removal and addition, we need to fire
1056 //the property change event FROM the viewport where the
1057 //original alignment was altered
1058 AlignmentI al = null;
1059 if (command instanceof EditCommand)
1061 EditCommand editCommand = (EditCommand) command;
1062 al = editCommand.getAlignment();
1063 Vector comps = (Vector) PaintRefresher.components
1064 .get(viewport.getSequenceSetId());
1066 for (int i = 0; i < comps.size(); i++)
1068 if (comps.elementAt(i) instanceof AlignmentPanel)
1070 if (al == ( (AlignmentPanel) comps.elementAt(i)).av.alignment)
1072 originalSource = ( (AlignmentPanel) comps.elementAt(i)).av;
1079 if (originalSource == null)
1081 //The original view is closed, we must validate
1082 //the current view against the closed view first
1085 PaintRefresher.validateSequences(al, viewport.alignment);
1088 originalSource = viewport;
1091 return originalSource;
1097 * @param up DOCUMENT ME!
1099 public void moveSelectedSequences(boolean up)
1101 SequenceGroup sg = viewport.getSelectionGroup();
1110 for (int i = 1; i < viewport.alignment.getHeight(); i++)
1112 SequenceI seq = viewport.alignment.getSequenceAt(i);
1114 if (!sg.getSequences(null).contains(seq))
1119 SequenceI temp = viewport.alignment.getSequenceAt(i - 1);
1121 if (sg.getSequences(null).contains(temp))
1126 viewport.alignment.getSequences().setElementAt(temp, i);
1127 viewport.alignment.getSequences().setElementAt(seq, i - 1);
1132 for (int i = viewport.alignment.getHeight() - 2; i > -1; i--)
1134 SequenceI seq = viewport.alignment.getSequenceAt(i);
1136 if (!sg.getSequences(null).contains(seq))
1141 SequenceI temp = viewport.alignment.getSequenceAt(i + 1);
1143 if (sg.getSequences(null).contains(temp))
1148 viewport.alignment.getSequences().setElementAt(temp, i);
1149 viewport.alignment.getSequences().setElementAt(seq, i + 1);
1153 alignPanel.repaint();
1159 * @param e DOCUMENT ME!
1161 protected void copy_actionPerformed(ActionEvent e)
1164 if (viewport.getSelectionGroup() == null)
1169 SequenceI[] seqs = viewport.getSelectionAsNewSequence();
1170 String[] omitHidden = null;
1172 if (viewport.hasHiddenColumns)
1174 omitHidden = viewport.getViewAsString(true);
1177 String output = new FormatAdapter().formatSequences(
1182 StringSelection ss = new StringSelection(output);
1186 jalview.gui.Desktop.internalCopy = true;
1187 //Its really worth setting the clipboard contents
1188 //to empty before setting the large StringSelection!!
1189 Toolkit.getDefaultToolkit().getSystemClipboard()
1190 .setContents(new StringSelection(""), null);
1192 Toolkit.getDefaultToolkit().getSystemClipboard()
1193 .setContents(ss, Desktop.instance);
1195 catch (OutOfMemoryError er)
1197 er.printStackTrace();
1198 javax.swing.SwingUtilities.invokeLater(new Runnable()
1202 javax.swing.JOptionPane.showInternalMessageDialog(Desktop.desktop,
1203 "Out of memory copying region!!"
1205 "\nSee help files for increasing Java Virtual Machine memory."
1207 javax.swing.JOptionPane.WARNING_MESSAGE);
1214 Vector hiddenColumns = null;
1215 if (viewport.hasHiddenColumns)
1217 hiddenColumns = new Vector();
1218 int hiddenOffset = viewport.getSelectionGroup().getStartRes();
1219 for (int i = 0; i < viewport.getColumnSelection().getHiddenColumns().size();
1222 int[] region = (int[])
1223 viewport.getColumnSelection().getHiddenColumns().elementAt(i);
1225 hiddenColumns.addElement(new int[]
1226 {region[0] - hiddenOffset,
1227 region[1] - hiddenOffset});
1231 Desktop.jalviewClipboard = new Object[]
1234 viewport.alignment.getDataset(),
1236 statusBar.setText("Copied " + seqs.length + " sequences to clipboard.");
1242 * @param e DOCUMENT ME!
1244 protected void pasteNew_actionPerformed(ActionEvent e)
1252 * @param e DOCUMENT ME!
1254 protected void pasteThis_actionPerformed(ActionEvent e)
1262 * @param newAlignment DOCUMENT ME!
1264 void paste(boolean newAlignment)
1268 Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
1269 Transferable contents = c.getContents(this);
1271 if (contents == null)
1279 str = (String) contents.getTransferData(DataFlavor.stringFlavor);
1280 if (str.length() < 1)
1285 format = new IdentifyFile().Identify(str, "Paste");
1288 catch (OutOfMemoryError er)
1290 er.printStackTrace();
1291 javax.swing.SwingUtilities.invokeLater(new Runnable()
1295 javax.swing.JOptionPane.showInternalMessageDialog(Desktop.desktop,
1296 "Out of memory pasting sequences!!"
1298 "\nSee help files for increasing Java Virtual Machine memory."
1300 javax.swing.JOptionPane.WARNING_MESSAGE);
1307 SequenceI[] sequences;
1309 if (Desktop.jalviewClipboard != null)
1311 // The clipboard was filled from within Jalview, we must use the sequences
1312 // And dataset from the copied alignment
1313 sequences = (SequenceI[]) Desktop.jalviewClipboard[0];
1317 sequences = new FormatAdapter().readFile(str, "Paste", format).
1318 getSequencesArray();
1321 AlignmentI alignment = null;
1325 alignment = new Alignment(sequences);
1327 if (Desktop.jalviewClipboard != null)
1329 alignment.setDataset( (Alignment) Desktop.jalviewClipboard[1]);
1333 alignment.setDataset(null);
1338 alignment = viewport.getAlignment();
1341 SequenceI[] newseqs = new SequenceI[sequences.length];
1342 for (int i = 0; i < sequences.length; i++)
1344 newseqs[i] = new Sequence(sequences[i].getName(),
1345 sequences[i].getSequence(),
1346 sequences[i].getStart(),
1347 sequences[i].getEnd());
1349 alignment.addSequence(newseqs[i]);
1355 addHistoryItem(new EditCommand(
1360 alignment.getWidth(),
1364 viewport.setEndSeq(alignment.getHeight());
1365 alignment.getWidth();
1366 viewport.firePropertyChange("alignment", null, alignment.getSequences());
1369 // Add any annotations attached to sequences
1370 for (int i = 0; i < sequences.length; i++)
1372 if (sequences[i].getAnnotation() != null)
1374 for (int a = 0; a < sequences[i].getAnnotation().length; a++)
1376 AlignmentAnnotation newAnnot =
1377 new AlignmentAnnotation(
1378 sequences[i].getAnnotation()[a].label,
1379 sequences[i].getAnnotation()[a].description,
1380 sequences[i].getAnnotation()[a].annotations,
1381 sequences[i].getAnnotation()[a].graphMin,
1382 sequences[i].getAnnotation()[a].graphMax,
1383 sequences[i].getAnnotation()[a].graph);
1385 sequences[i].getAnnotation()[a] = newAnnot;
1386 newAnnot.sequenceMapping = sequences[i].getAnnotation()[a].
1388 newAnnot.sequenceRef = sequences[i];
1389 newAnnot.adjustForAlignment();
1390 alignment.addAnnotation(newAnnot);
1391 alignment.setAnnotationIndex(newAnnot, a);
1394 alignPanel.annotationPanel.adjustPanelHeight();
1400 AlignFrame af = new AlignFrame(alignment, DEFAULT_WIDTH, DEFAULT_HEIGHT);
1401 String newtitle = new String("Copied sequences");
1403 if (Desktop.jalviewClipboard != null && Desktop.jalviewClipboard[2] != null)
1405 Vector hc = (Vector) Desktop.jalviewClipboard[2];
1406 for (int i = 0; i < hc.size(); i++)
1408 int[] region = (int[]) hc.elementAt(i);
1409 af.viewport.hideColumns(region[0], region[1]);
1413 //>>>This is a fix for the moment, until a better solution is found!!<<<
1414 af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().transferSettings(
1415 alignPanel.seqPanel.seqCanvas.getFeatureRenderer());
1417 if (title.startsWith("Copied sequences"))
1423 newtitle = newtitle.concat("- from " + title);
1426 Desktop.addInternalFrame(af, newtitle, DEFAULT_WIDTH,
1432 catch (Exception ex)
1434 ex.printStackTrace();
1435 System.out.println("Exception whilst pasting: " + ex);
1436 // could be anything being pasted in here
1444 * @param e DOCUMENT ME!
1446 protected void cut_actionPerformed(ActionEvent e)
1448 copy_actionPerformed(null);
1449 delete_actionPerformed(null);
1455 * @param e DOCUMENT ME!
1457 protected void delete_actionPerformed(ActionEvent evt)
1460 SequenceGroup sg = viewport.getSelectionGroup();
1466 Vector seqs = new Vector();
1468 for (int i = 0; i < sg.getSize(); i++)
1470 seq = sg.getSequenceAt(i);
1471 seqs.addElement(seq);
1474 // If the cut affects all sequences, remove highlighted columns
1475 if (sg.getSize() == viewport.alignment.getHeight())
1477 viewport.getColumnSelection().removeElements(sg.getStartRes(),
1478 sg.getEndRes() + 1);
1481 SequenceI[] cut = new SequenceI[seqs.size()];
1482 for (int i = 0; i < seqs.size(); i++)
1484 cut[i] = (SequenceI) seqs.elementAt(i);
1490 addHistoryItem(new EditCommand("Cut Sequences",
1494 sg.getEndRes() - sg.getStartRes() + 1,
1495 viewport.alignment));
1497 viewport.setSelectionGroup(null);
1498 viewport.alignment.deleteGroup(sg);
1500 viewport.firePropertyChange("alignment", null,
1501 viewport.getAlignment().getSequences());
1503 if (viewport.getAlignment().getHeight() < 1)
1507 this.setClosed(true);
1509 catch (Exception ex)
1518 * @param e DOCUMENT ME!
1520 protected void deleteGroups_actionPerformed(ActionEvent e)
1522 viewport.alignment.deleteAllGroups();
1523 viewport.sequenceColours = null;
1524 viewport.setSelectionGroup(null);
1525 PaintRefresher.Refresh(this, viewport.getSequenceSetId());
1526 alignPanel.repaint();
1532 * @param e DOCUMENT ME!
1534 public void selectAllSequenceMenuItem_actionPerformed(ActionEvent e)
1536 SequenceGroup sg = new SequenceGroup();
1538 for (int i = 0; i < viewport.getAlignment().getSequences().size();
1541 sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);
1544 sg.setEndRes(viewport.alignment.getWidth() - 1);
1545 viewport.setSelectionGroup(sg);
1546 alignPanel.repaint();
1547 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1553 * @param e DOCUMENT ME!
1555 public void deselectAllSequenceMenuItem_actionPerformed(ActionEvent e)
1557 if (viewport.cursorMode)
1559 alignPanel.seqPanel.keyboardNo1 = null;
1560 alignPanel.seqPanel.keyboardNo2 = null;
1562 viewport.setSelectionGroup(null);
1563 viewport.getColumnSelection().clear();
1564 viewport.setSelectionGroup(null);
1565 alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);
1566 alignPanel.idPanel.idCanvas.searchResults = null;
1567 alignPanel.repaint();
1568 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1574 * @param e DOCUMENT ME!
1576 public void invertSequenceMenuItem_actionPerformed(ActionEvent e)
1578 SequenceGroup sg = viewport.getSelectionGroup();
1582 selectAllSequenceMenuItem_actionPerformed(null);
1587 for (int i = 0; i < viewport.getAlignment().getSequences().size();
1590 sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false);
1593 alignPanel.repaint();
1595 PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
1598 public void invertColSel_actionPerformed(ActionEvent e)
1600 viewport.invertColumnSelection();
1601 alignPanel.repaint();
1607 * @param e DOCUMENT ME!
1609 public void remove2LeftMenuItem_actionPerformed(ActionEvent e)
1611 trimAlignment(true);
1617 * @param e DOCUMENT ME!
1619 public void remove2RightMenuItem_actionPerformed(ActionEvent e)
1621 trimAlignment(false);
1624 void trimAlignment(boolean trimLeft)
1626 ColumnSelection colSel = viewport.getColumnSelection();
1629 if (colSel.size() > 0)
1633 column = colSel.getMin();
1637 column = colSel.getMax();
1641 if (viewport.getSelectionGroup() != null)
1643 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1644 hiddenRepSequences);
1648 seqs = viewport.alignment.getSequencesArray();
1651 TrimRegionCommand trimRegion;
1654 trimRegion = new TrimRegionCommand("Remove Left",
1655 TrimRegionCommand.TRIM_LEFT,
1660 viewport.selectionGroup);
1661 viewport.setStartRes(0);
1665 trimRegion = new TrimRegionCommand("Remove Right",
1666 TrimRegionCommand.TRIM_RIGHT,
1671 viewport.selectionGroup);
1674 statusBar.setText("Removed " + trimRegion.getSize() + " columns.");
1676 addHistoryItem(trimRegion);
1678 Vector groups = viewport.alignment.getGroups();
1680 for (int i = 0; i < groups.size(); i++)
1682 SequenceGroup sg = (SequenceGroup) groups.get(i);
1684 if ( (trimLeft && !sg.adjustForRemoveLeft(column))
1685 || (!trimLeft && !sg.adjustForRemoveRight(column)))
1687 viewport.alignment.deleteGroup(sg);
1691 viewport.firePropertyChange("alignment", null,
1692 viewport.getAlignment().getSequences());
1699 * @param e DOCUMENT ME!
1701 public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e)
1703 int start = 0, end = viewport.alignment.getWidth() - 1;
1706 if (viewport.getSelectionGroup() != null)
1708 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1709 hiddenRepSequences);
1710 start = viewport.getSelectionGroup().getStartRes();
1711 end = viewport.getSelectionGroup().getEndRes();
1715 seqs = viewport.alignment.getSequencesArray();
1718 RemoveGapColCommand removeGapCols =
1719 new RemoveGapColCommand("Remove Gapped Columns",
1722 viewport.alignment);
1724 addHistoryItem(removeGapCols);
1726 statusBar.setText("Removed " + removeGapCols.getSize() + " empty columns.");
1728 //This is to maintain viewport position on first residue
1730 SequenceI seq = viewport.alignment.getSequenceAt(0);
1731 int startRes = seq.findPosition(viewport.startRes);
1732 // ShiftList shifts;
1733 // viewport.getAlignment().removeGaps(shifts=new ShiftList());
1734 // edit.alColumnChanges=shifts.getInverse();
1735 // if (viewport.hasHiddenColumns)
1736 // viewport.getColumnSelection().compensateForEdits(shifts);
1737 viewport.setStartRes(seq.findIndex(startRes) - 1);
1738 viewport.firePropertyChange("alignment", null,
1739 viewport.getAlignment().getSequences());
1746 * @param e DOCUMENT ME!
1748 public void removeAllGapsMenuItem_actionPerformed(ActionEvent e)
1750 int start = 0, end = viewport.alignment.getWidth() - 1;
1753 if (viewport.getSelectionGroup() != null)
1755 seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.
1756 hiddenRepSequences);
1757 start = viewport.getSelectionGroup().getStartRes();
1758 end = viewport.getSelectionGroup().getEndRes();
1762 seqs = viewport.alignment.getSequencesArray();
1765 //This is to maintain viewport position on first residue
1767 SequenceI seq = viewport.alignment.getSequenceAt(0);
1768 int startRes = seq.findPosition(viewport.startRes);
1770 addHistoryItem(new RemoveGapsCommand("Remove Gaps",
1773 viewport.alignment));
1775 viewport.setStartRes(seq.findIndex(startRes) - 1);
1777 viewport.firePropertyChange("alignment", null,
1778 viewport.getAlignment().getSequences());
1785 * @param e DOCUMENT ME!
1787 public void padGapsMenuitem_actionPerformed(ActionEvent e)
1789 viewport.padGaps = padGapsMenuitem.isSelected();
1791 viewport.firePropertyChange("alignment",
1793 viewport.getAlignment().getSequences());
1799 * @param e DOCUMENT ME!
1801 public void findMenuItem_actionPerformed(ActionEvent e)
1806 public void newView_actionPerformed(ActionEvent e)
1808 AlignmentPanel newap =
1809 new Jalview2XML().copyAlignPanel(alignPanel, true);
1811 if (viewport.viewName == null)
1813 viewport.viewName = "Original";
1816 newap.av.historyList = viewport.historyList;
1817 newap.av.redoList = viewport.redoList;
1819 int index = Desktop.getViewCount(viewport.getSequenceSetId());
1820 String newViewName = "View " + index;
1822 Vector comps = (Vector) PaintRefresher.components.get(viewport.
1823 getSequenceSetId());
1824 Vector existingNames = new Vector();
1825 for (int i = 0; i < comps.size(); i++)
1827 if (comps.elementAt(i) instanceof AlignmentPanel)
1829 AlignmentPanel ap = (AlignmentPanel) comps.elementAt(i);
1830 if (!existingNames.contains(ap.av.viewName))
1832 existingNames.addElement(ap.av.viewName);
1837 while (existingNames.contains(newViewName))
1839 newViewName = "View " + (++index);
1842 newap.av.viewName = newViewName;
1844 addAlignmentPanel(newap, false);
1846 if (alignPanels.size() == 2)
1848 viewport.gatherViewsHere = true;
1850 tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
1853 public void expandViews_actionPerformed(ActionEvent e)
1855 Desktop.instance.explodeViews(this);
1858 public void gatherViews_actionPerformed(ActionEvent e)
1860 Desktop.instance.gatherViews(this);
1866 * @param e DOCUMENT ME!
1868 public void font_actionPerformed(ActionEvent e)
1870 new FontChooser(alignPanel);
1876 * @param e DOCUMENT ME!
1878 protected void seqLimit_actionPerformed(ActionEvent e)
1880 viewport.setShowJVSuffix(seqLimits.isSelected());
1882 alignPanel.idPanel.idCanvas.setPreferredSize(alignPanel.calculateIdWidth());
1883 alignPanel.repaint();
1886 public void idRightAlign_actionPerformed(ActionEvent e)
1888 viewport.rightAlignIds = idRightAlign.isSelected();
1889 alignPanel.repaint();
1895 * @param e DOCUMENT ME!
1897 protected void colourTextMenuItem_actionPerformed(ActionEvent e)
1899 viewport.setColourText(colourTextMenuItem.isSelected());
1900 alignPanel.repaint();
1906 * @param e DOCUMENT ME!
1908 public void wrapMenuItem_actionPerformed(ActionEvent e)
1910 scaleAbove.setVisible(wrapMenuItem.isSelected());
1911 scaleLeft.setVisible(wrapMenuItem.isSelected());
1912 scaleRight.setVisible(wrapMenuItem.isSelected());
1913 viewport.setWrapAlignment(wrapMenuItem.isSelected());
1914 alignPanel.setWrapAlignment(wrapMenuItem.isSelected());
1917 public void showAllSeqs_actionPerformed(ActionEvent e)
1919 viewport.showAllHiddenSeqs();
1922 public void showAllColumns_actionPerformed(ActionEvent e)
1924 viewport.showAllHiddenColumns();
1928 public void hideSelSequences_actionPerformed(ActionEvent e)
1930 viewport.hideAllSelectedSeqs();
1931 alignPanel.repaint();
1934 public void hideSelColumns_actionPerformed(ActionEvent e)
1936 viewport.hideSelectedColumns();
1937 alignPanel.repaint();
1940 public void hiddenMarkers_actionPerformed(ActionEvent e)
1942 viewport.setShowHiddenMarkers(hiddenMarkers.isSelected());
1949 * @param e DOCUMENT ME!
1951 protected void scaleAbove_actionPerformed(ActionEvent e)
1953 viewport.setScaleAboveWrapped(scaleAbove.isSelected());
1954 alignPanel.repaint();
1960 * @param e DOCUMENT ME!
1962 protected void scaleLeft_actionPerformed(ActionEvent e)
1964 viewport.setScaleLeftWrapped(scaleLeft.isSelected());
1965 alignPanel.repaint();
1971 * @param e DOCUMENT ME!
1973 protected void scaleRight_actionPerformed(ActionEvent e)
1975 viewport.setScaleRightWrapped(scaleRight.isSelected());
1976 alignPanel.repaint();
1982 * @param e DOCUMENT ME!
1984 public void viewBoxesMenuItem_actionPerformed(ActionEvent e)
1986 viewport.setShowBoxes(viewBoxesMenuItem.isSelected());
1987 alignPanel.repaint();
1993 * @param e DOCUMENT ME!
1995 public void viewTextMenuItem_actionPerformed(ActionEvent e)
1997 viewport.setShowText(viewTextMenuItem.isSelected());
1998 alignPanel.repaint();
2004 * @param e DOCUMENT ME!
2006 protected void renderGapsMenuItem_actionPerformed(ActionEvent e)
2008 viewport.setRenderGaps(renderGapsMenuItem.isSelected());
2009 alignPanel.repaint();
2012 public FeatureSettings featureSettings;
2013 public void featureSettings_actionPerformed(ActionEvent e)
2015 if (featureSettings != null)
2017 featureSettings.close();
2018 featureSettings = null;
2020 featureSettings = new FeatureSettings(this);
2026 * @param evt DOCUMENT ME!
2028 public void showSeqFeatures_actionPerformed(ActionEvent evt)
2030 viewport.setShowSequenceFeatures(showSeqFeatures.isSelected());
2031 alignPanel.repaint();
2032 if (alignPanel.getOverviewPanel() != null)
2034 alignPanel.getOverviewPanel().updateOverviewImage();
2041 * @param e DOCUMENT ME!
2043 public void annotationPanelMenuItem_actionPerformed(ActionEvent e)
2045 viewport.setShowAnnotation(annotationPanelMenuItem.isSelected());
2046 alignPanel.setAnnotationVisible(annotationPanelMenuItem.isSelected());
2052 * @param e DOCUMENT ME!
2054 public void overviewMenuItem_actionPerformed(ActionEvent e)
2056 if (alignPanel.overviewPanel != null)
2061 JInternalFrame frame = new JInternalFrame();
2062 OverviewPanel overview = new OverviewPanel(alignPanel);
2063 frame.setContentPane(overview);
2064 Desktop.addInternalFrame(frame, "Overview " + this.getTitle(),
2065 frame.getWidth(), frame.getHeight());
2067 frame.setLayer(JLayeredPane.PALETTE_LAYER);
2068 frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
2070 public void internalFrameClosed(
2071 javax.swing.event.InternalFrameEvent evt)
2073 alignPanel.setOverviewPanel(null);
2078 alignPanel.setOverviewPanel(overview);
2081 public void textColour_actionPerformed(ActionEvent e)
2083 new TextColourChooser().chooseColour(alignPanel, null);
2089 * @param e DOCUMENT ME!
2091 protected void noColourmenuItem_actionPerformed(ActionEvent e)
2099 * @param e DOCUMENT ME!
2101 public void clustalColour_actionPerformed(ActionEvent e)
2103 changeColour(new ClustalxColourScheme(
2104 viewport.alignment.getSequences(), viewport.alignment.getWidth()));
2110 * @param e DOCUMENT ME!
2112 public void zappoColour_actionPerformed(ActionEvent e)
2114 changeColour(new ZappoColourScheme());
2120 * @param e DOCUMENT ME!
2122 public void taylorColour_actionPerformed(ActionEvent e)
2124 changeColour(new TaylorColourScheme());
2130 * @param e DOCUMENT ME!
2132 public void hydrophobicityColour_actionPerformed(ActionEvent e)
2134 changeColour(new HydrophobicColourScheme());
2140 * @param e DOCUMENT ME!
2142 public void helixColour_actionPerformed(ActionEvent e)
2144 changeColour(new HelixColourScheme());
2150 * @param e DOCUMENT ME!
2152 public void strandColour_actionPerformed(ActionEvent e)
2154 changeColour(new StrandColourScheme());
2160 * @param e DOCUMENT ME!
2162 public void turnColour_actionPerformed(ActionEvent e)
2164 changeColour(new TurnColourScheme());
2170 * @param e DOCUMENT ME!
2172 public void buriedColour_actionPerformed(ActionEvent e)
2174 changeColour(new BuriedColourScheme());
2180 * @param e DOCUMENT ME!
2182 public void nucleotideColour_actionPerformed(ActionEvent e)
2184 changeColour(new NucleotideColourScheme());
2187 public void annotationColour_actionPerformed(ActionEvent e)
2189 new AnnotationColourChooser(viewport, alignPanel);
2195 * @param e DOCUMENT ME!
2197 protected void applyToAllGroups_actionPerformed(ActionEvent e)
2199 viewport.setColourAppliesToAllGroups(applyToAllGroups.isSelected());
2205 * @param cs DOCUMENT ME!
2207 public void changeColour(ColourSchemeI cs)
2213 if (viewport.getAbovePIDThreshold())
2215 threshold = SliderPanel.setPIDSliderSource(alignPanel, cs,
2218 cs.setThreshold(threshold,
2219 viewport.getIgnoreGapsConsensus());
2221 viewport.setGlobalColourScheme(cs);
2225 cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
2228 if (viewport.getConservationSelected())
2231 Alignment al = (Alignment) viewport.alignment;
2232 Conservation c = new Conservation("All",
2233 ResidueProperties.propHash, 3,
2234 al.getSequences(), 0,
2238 c.verdict(false, viewport.ConsPercGaps);
2240 cs.setConservation(c);
2242 cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, cs,
2247 cs.setConservation(null);
2250 cs.setConsensus(viewport.hconsensus);
2253 viewport.setGlobalColourScheme(cs);
2255 if (viewport.getColourAppliesToAllGroups())
2257 Vector groups = viewport.alignment.getGroups();
2259 for (int i = 0; i < groups.size(); i++)
2261 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
2269 if (cs instanceof ClustalxColourScheme)
2271 sg.cs = new ClustalxColourScheme(
2272 sg.getSequences(viewport.hiddenRepSequences), sg.getWidth());
2274 else if (cs instanceof UserColourScheme)
2276 sg.cs = new UserColourScheme( ( (UserColourScheme) cs).getColours());
2282 sg.cs = (ColourSchemeI) cs.getClass().newInstance();
2284 catch (Exception ex)
2289 if (viewport.getAbovePIDThreshold()
2290 || cs instanceof PIDColourScheme
2291 || cs instanceof Blosum62ColourScheme)
2293 sg.cs.setThreshold(threshold,
2294 viewport.getIgnoreGapsConsensus());
2296 sg.cs.setConsensus(AAFrequency.calculate(
2297 sg.getSequences(viewport.hiddenRepSequences), sg.getStartRes(),
2298 sg.getEndRes() + 1));
2302 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
2305 if (viewport.getConservationSelected())
2307 Conservation c = new Conservation("Group",
2308 ResidueProperties.propHash, 3,
2309 sg.getSequences(viewport.
2310 hiddenRepSequences),
2312 sg.getEndRes() + 1);
2314 c.verdict(false, viewport.ConsPercGaps);
2315 sg.cs.setConservation(c);
2319 sg.cs.setConservation(null);
2324 if (alignPanel.getOverviewPanel() != null)
2326 alignPanel.getOverviewPanel().updateOverviewImage();
2329 alignPanel.repaint();
2335 * @param e DOCUMENT ME!
2337 protected void modifyPID_actionPerformed(ActionEvent e)
2339 if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme != null)
2341 SliderPanel.setPIDSliderSource(alignPanel,
2342 viewport.getGlobalColourScheme(),
2344 SliderPanel.showPIDSlider();
2351 * @param e DOCUMENT ME!
2353 protected void modifyConservation_actionPerformed(ActionEvent e)
2355 if (viewport.getConservationSelected() && viewport.globalColourScheme != null)
2357 SliderPanel.setConservationSlider(alignPanel,
2358 viewport.globalColourScheme,
2360 SliderPanel.showConservationSlider();
2367 * @param e DOCUMENT ME!
2369 protected void conservationMenuItem_actionPerformed(ActionEvent e)
2371 viewport.setConservationSelected(conservationMenuItem.isSelected());
2373 viewport.setAbovePIDThreshold(false);
2374 abovePIDThreshold.setSelected(false);
2376 changeColour(viewport.getGlobalColourScheme());
2378 modifyConservation_actionPerformed(null);
2384 * @param e DOCUMENT ME!
2386 public void abovePIDThreshold_actionPerformed(ActionEvent e)
2388 viewport.setAbovePIDThreshold(abovePIDThreshold.isSelected());
2390 conservationMenuItem.setSelected(false);
2391 viewport.setConservationSelected(false);
2393 changeColour(viewport.getGlobalColourScheme());
2395 modifyPID_actionPerformed(null);
2401 * @param e DOCUMENT ME!
2403 public void userDefinedColour_actionPerformed(ActionEvent e)
2405 if (e.getActionCommand().equals("User Defined..."))
2407 new UserDefinedColours(alignPanel, null);
2411 UserColourScheme udc = (UserColourScheme) UserDefinedColours.
2412 getUserColourSchemes().get(e.getActionCommand());
2418 public void updateUserColourMenu()
2421 Component[] menuItems = colourMenu.getMenuComponents();
2422 int i, iSize = menuItems.length;
2423 for (i = 0; i < iSize; i++)
2425 if (menuItems[i].getName() != null &&
2426 menuItems[i].getName().equals("USER_DEFINED"))
2428 colourMenu.remove(menuItems[i]);
2432 if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null)
2434 java.util.Enumeration userColours = jalview.gui.UserDefinedColours.
2435 getUserColourSchemes().keys();
2437 while (userColours.hasMoreElements())
2439 final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(
2441 nextElement().toString());
2442 radioItem.setName("USER_DEFINED");
2443 radioItem.addMouseListener(new MouseAdapter()
2445 public void mousePressed(MouseEvent evt)
2447 if (evt.isControlDown() || SwingUtilities.isRightMouseButton(evt))
2449 radioItem.removeActionListener(radioItem.getActionListeners()[0]);
2451 int option = JOptionPane.showInternalConfirmDialog(jalview.gui.
2453 "Remove from default list?",
2454 "Remove user defined colour",
2455 JOptionPane.YES_NO_OPTION);
2456 if (option == JOptionPane.YES_OPTION)
2458 jalview.gui.UserDefinedColours.removeColourFromDefaults(
2459 radioItem.getText());
2460 colourMenu.remove(radioItem);
2464 radioItem.addActionListener(new ActionListener()
2466 public void actionPerformed(ActionEvent evt)
2468 userDefinedColour_actionPerformed(evt);
2475 radioItem.addActionListener(new ActionListener()
2477 public void actionPerformed(ActionEvent evt)
2479 userDefinedColour_actionPerformed(evt);
2483 colourMenu.insert(radioItem, 15);
2484 colours.add(radioItem);
2492 * @param e DOCUMENT ME!
2494 public void PIDColour_actionPerformed(ActionEvent e)
2496 changeColour(new PIDColourScheme());
2502 * @param e DOCUMENT ME!
2504 public void BLOSUM62Colour_actionPerformed(ActionEvent e)
2506 changeColour(new Blosum62ColourScheme());
2512 * @param e DOCUMENT ME!
2514 public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)
2516 SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
2517 AlignmentSorter.sortByPID(viewport.getAlignment(),
2518 viewport.getAlignment().getSequenceAt(0));
2519 addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder,
2520 viewport.alignment));
2521 alignPanel.repaint();
2527 * @param e DOCUMENT ME!
2529 public void sortIDMenuItem_actionPerformed(ActionEvent e)
2531 SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
2532 AlignmentSorter.sortByID(viewport.getAlignment());
2533 addHistoryItem(new OrderCommand("ID Sort", oldOrder, viewport.alignment));
2534 alignPanel.repaint();
2540 * @param e DOCUMENT ME!
2542 public void sortGroupMenuItem_actionPerformed(ActionEvent e)
2544 SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
2545 AlignmentSorter.sortByGroup(viewport.getAlignment());
2546 addHistoryItem(new OrderCommand("Group Sort", oldOrder, viewport.alignment));
2548 alignPanel.repaint();
2554 * @param e DOCUMENT ME!
2556 public void removeRedundancyMenuItem_actionPerformed(ActionEvent e)
2558 new RedundancyPanel(alignPanel, this);
2564 * @param e DOCUMENT ME!
2566 public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)
2568 if ( (viewport.getSelectionGroup() == null) ||
2569 (viewport.getSelectionGroup().getSize() < 2))
2571 JOptionPane.showInternalMessageDialog(this,
2572 "You must select at least 2 sequences.",
2573 "Invalid Selection",
2574 JOptionPane.WARNING_MESSAGE);
2578 JInternalFrame frame = new JInternalFrame();
2579 frame.setContentPane(new PairwiseAlignPanel(viewport));
2580 Desktop.addInternalFrame(frame, "Pairwise Alignment", 600, 500);
2587 * @param e DOCUMENT ME!
2589 public void PCAMenuItem_actionPerformed(ActionEvent e)
2591 if ( ( (viewport.getSelectionGroup() != null) &&
2592 (viewport.getSelectionGroup().getSize() < 4) &&
2593 (viewport.getSelectionGroup().getSize() > 0)) ||
2594 (viewport.getAlignment().getHeight() < 4))
2596 JOptionPane.showInternalMessageDialog(this,
2597 "Principal component analysis must take\n" +
2598 "at least 4 input sequences.",
2599 "Sequence selection insufficient",
2600 JOptionPane.WARNING_MESSAGE);
2605 new PCAPanel(alignPanel);
2608 public void autoCalculate_actionPerformed(ActionEvent e)
2610 viewport.autoCalculateConsensus = autoCalculate.isSelected();
2611 if (viewport.autoCalculateConsensus)
2613 viewport.firePropertyChange("alignment",
2615 viewport.getAlignment().getSequences());
2622 * @param e DOCUMENT ME!
2624 public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)
2626 NewTreePanel("AV", "PID", "Average distance tree using PID");
2632 * @param e DOCUMENT ME!
2634 public void neighbourTreeMenuItem_actionPerformed(ActionEvent e)
2636 NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
2642 * @param e DOCUMENT ME!
2644 protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)
2646 NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
2652 * @param e DOCUMENT ME!
2654 protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)
2656 NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
2662 * @param type DOCUMENT ME!
2663 * @param pwType DOCUMENT ME!
2664 * @param title DOCUMENT ME!
2666 void NewTreePanel(String type, String pwType, String title)
2670 if (viewport.getSelectionGroup() != null)
2672 if (viewport.getSelectionGroup().getSize() < 3)
2674 JOptionPane.showMessageDialog(Desktop.desktop,
2675 "You need to have more than two sequences selected to build a tree!",
2676 "Not enough sequences",
2677 JOptionPane.WARNING_MESSAGE);
2682 SequenceGroup sg = viewport.getSelectionGroup();
2684 /* Decide if the selection is a column region */
2685 while (s < sg.getSize())
2687 if ( ( (SequenceI) sg.getSequences(null).elementAt(s++)).getLength() <
2690 JOptionPane.showMessageDialog(Desktop.desktop,
2691 "The selected region to create a tree may\nonly contain residues or gaps.\n" +
2692 "Try using the Pad function in the edit menu,\n" +
2693 "or one of the multiple sequence alignment web services.",
2694 "Sequences in selection are not aligned",
2695 JOptionPane.WARNING_MESSAGE);
2701 title = title + " on region";
2702 tp = new TreePanel(alignPanel, type, pwType);
2706 //are the sequences aligned?
2707 if (!viewport.alignment.isAligned())
2709 JOptionPane.showMessageDialog(Desktop.desktop,
2710 "The sequences must be aligned before creating a tree.\n" +
2711 "Try using the Pad function in the edit menu,\n" +
2712 "or one of the multiple sequence alignment web services.",
2713 "Sequences not aligned",
2714 JOptionPane.WARNING_MESSAGE);
2719 if (viewport.alignment.getHeight() < 2)
2724 tp = new TreePanel(alignPanel, type, pwType);
2729 if (viewport.viewName != null)
2731 title += viewport.viewName + " of ";
2734 title += this.title;
2736 Desktop.addInternalFrame(tp, title, 600, 500);
2742 * @param title DOCUMENT ME!
2743 * @param order DOCUMENT ME!
2745 public void addSortByOrderMenuItem(String title, final AlignmentOrder order)
2747 final JMenuItem item = new JMenuItem("by " + title);
2749 item.addActionListener(new java.awt.event.ActionListener()
2751 public void actionPerformed(ActionEvent e)
2753 SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
2755 // TODO: JBPNote - have to map order entries to curent SequenceI pointers
2756 AlignmentSorter.sortBy(viewport.getAlignment(), order);
2758 addHistoryItem(new OrderCommand(order.getName(), oldOrder,
2759 viewport.alignment));
2761 alignPanel.repaint();
2767 * Maintain the Order by->Displayed Tree menu.
2768 * Creates a new menu item for a TreePanel with an appropriate
2769 * <code>jalview.analysis.AlignmentSorter</code> call. Listeners are added
2770 * to remove the menu item when the treePanel is closed, and adjust
2771 * the tree leaf to sequence mapping when the alignment is modified.
2772 * @param treePanel Displayed tree window.
2773 * @param title SortBy menu item title.
2775 public void buildTreeMenu()
2777 sortByTreeMenu.removeAll();
2779 Vector comps = (Vector) PaintRefresher.components.get(viewport.
2780 getSequenceSetId());
2781 Vector treePanels = new Vector();
2782 int i, iSize = comps.size();
2783 for (i = 0; i < iSize; i++)
2785 if (comps.elementAt(i) instanceof TreePanel)
2787 treePanels.add(comps.elementAt(i));
2791 iSize = treePanels.size();
2795 sortByTreeMenu.setVisible(false);
2799 sortByTreeMenu.setVisible(true);
2801 for (i = 0; i < treePanels.size(); i++)
2803 TreePanel tp = (TreePanel) treePanels.elementAt(i);
2804 final JMenuItem item = new JMenuItem(tp.getTitle());
2805 final NJTree tree = ( (TreePanel) treePanels.elementAt(i)).getTree();
2806 item.addActionListener(new java.awt.event.ActionListener()
2808 public void actionPerformed(ActionEvent e)
2810 SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
2811 AlignmentSorter.sortByTree(viewport.getAlignment(), tree);
2813 addHistoryItem(new OrderCommand("Tree Sort",
2815 viewport.alignment));
2817 alignPanel.repaint();
2821 sortByTreeMenu.add(item);
2826 * Work out whether the whole set of sequences
2827 * or just the selected set will be submitted for multiple alignment.
2830 private jalview.datamodel.AlignmentView gatherSequencesForAlignment()
2832 // Now, check we have enough sequences
2833 AlignmentView msa = null;
2835 if ( (viewport.getSelectionGroup() != null) &&
2836 (viewport.getSelectionGroup().getSize() > 1))
2838 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
2839 /*SequenceGroup seqs = viewport.getSelectionGroup();
2841 msa = new SequenceI[sz = seqs.getSize(false)];
2843 for (int i = 0; i < sz; i++)
2845 msa[i] = (SequenceI) seqs.getSequenceAt(i);
2847 msa = viewport.getAlignmentView(true);
2851 /*Vector seqs = viewport.getAlignment().getSequences();
2852 if (seqs.size() > 1)
2854 msa = new SequenceI[seqs.size()];
2856 for (int i = 0; i < seqs.size(); i++)
2858 msa[i] = (SequenceI) seqs.elementAt(i);
2861 msa = viewport.getAlignmentView(false);
2867 * Decides what is submitted to a secondary structure prediction service,
2868 * the currently selected sequence, or the currently selected alignment
2869 * (where the first sequence in the set is the one that the prediction
2872 AlignmentView gatherSeqOrMsaForSecStrPrediction()
2874 AlignmentView seqs = null;
2876 if ( (viewport.getSelectionGroup() != null) &&
2877 (viewport.getSelectionGroup().getSize() > 0))
2879 seqs = viewport.getAlignmentView(true);
2883 seqs = viewport.getAlignmentView(false);
2885 // limit sequences - JBPNote in future - could spawn multiple prediction jobs
2886 // TODO: viewport.alignment.isAligned is a global state - the local selection may well be aligned - we preserve 2.0.8 behaviour for moment.
2887 if (!viewport.alignment.isAligned())
2889 seqs.setSequences(new SeqCigar[]
2890 {seqs.getSequences()[0]});
2898 * @param e DOCUMENT ME!
2900 protected void LoadtreeMenuItem_actionPerformed(ActionEvent e)
2902 // Pick the tree file
2903 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
2906 chooser.setFileView(new JalviewFileView());
2907 chooser.setDialogTitle("Select a newick-like tree file");
2908 chooser.setToolTipText("Load a tree file");
2910 int value = chooser.showOpenDialog(null);
2912 if (value == JalviewFileChooser.APPROVE_OPTION)
2914 String choice = chooser.getSelectedFile().getPath();
2915 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
2919 jalview.io.NewickFile fin = new jalview.io.NewickFile(choice,
2921 viewport.setCurrentTree(ShowNewickTree(fin, choice).getTree());
2923 catch (Exception ex)
2925 JOptionPane.showMessageDialog(Desktop.desktop,
2926 "Problem reading tree file",
2928 JOptionPane.WARNING_MESSAGE);
2929 ex.printStackTrace();
2934 public TreePanel ShowNewickTree(NewickFile nf, String title)
2936 return ShowNewickTree(nf, title, 600, 500, 4, 5);
2939 public TreePanel ShowNewickTree(NewickFile nf, String title,
2940 AlignmentView input)
2942 return ShowNewickTree(nf, title, input, 600, 500, 4, 5);
2945 public TreePanel ShowNewickTree(NewickFile nf, String title, int w, int h,
2948 return ShowNewickTree(nf, title, null, w, h, x, y);
2952 * Add a treeviewer for the tree extracted from a newick file object to the current alignment view
2954 * @param nf the tree
2955 * @param title tree viewer title
2956 * @param input Associated alignment input data (or null)
2961 * @return TreePanel handle
2963 public TreePanel ShowNewickTree(NewickFile nf, String title,
2964 AlignmentView input, int w, int h, int x,
2967 TreePanel tp = null;
2973 if (nf.getTree() != null)
2975 tp = new TreePanel(alignPanel,
2984 tp.setLocation(x, y);
2987 Desktop.addInternalFrame(tp, title, w, h);
2990 catch (Exception ex)
2992 ex.printStackTrace();
2999 * Generates menu items and listener event actions for web service clients
3002 public void BuildWebServiceMenu()
3004 if ( (Discoverer.services != null)
3005 && (Discoverer.services.size() > 0))
3007 Vector msaws = (Vector) Discoverer.services.get("MsaWS");
3008 Vector secstrpr = (Vector) Discoverer.services.get("SecStrPred");
3009 Vector wsmenu = new Vector();
3010 final AlignFrame af = this;
3013 // Add any Multiple Sequence Alignment Services
3014 final JMenu msawsmenu = new JMenu("Alignment");
3015 for (int i = 0, j = msaws.size(); i < j; i++)
3017 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws.
3019 final JMenuItem method = new JMenuItem(sh.getName());
3020 method.addActionListener(new ActionListener()
3022 public void actionPerformed(ActionEvent e)
3024 AlignmentView msa = gatherSequencesForAlignment();
3025 new jalview.ws.MsaWSClient(sh, title, msa,
3027 viewport.getAlignment().getDataset(),
3033 msawsmenu.add(method);
3034 // Deal with services that we know accept partial alignments.
3035 if (sh.getName().indexOf("lustal") > -1)
3037 // We know that ClustalWS can accept partial alignments for refinement.
3038 final JMenuItem methodR = new JMenuItem(sh.getName() + " Realign");
3039 methodR.addActionListener(new ActionListener()
3041 public void actionPerformed(ActionEvent e)
3043 AlignmentView msa = gatherSequencesForAlignment();
3044 new jalview.ws.MsaWSClient(sh, title, msa,
3046 viewport.getAlignment().getDataset(),
3052 msawsmenu.add(methodR);
3056 wsmenu.add(msawsmenu);
3058 if (secstrpr != null)
3060 // Add any secondary structure prediction services
3061 final JMenu secstrmenu = new JMenu("Secondary Structure Prediction");
3062 for (int i = 0, j = secstrpr.size(); i < j; i++)
3064 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle)
3066 final JMenuItem method = new JMenuItem(sh.getName());
3067 method.addActionListener(new ActionListener()
3069 public void actionPerformed(ActionEvent e)
3071 AlignmentView msa = gatherSeqOrMsaForSecStrPrediction();
3072 if (msa.getSequences().length == 1)
3074 // Single Sequence prediction
3075 new jalview.ws.JPredClient(sh, title, false, msa, af, true);
3079 if (msa.getSequences().length > 1)
3081 // Sequence profile based prediction
3082 new jalview.ws.JPredClient(sh,
3083 title, true, msa, af, true);
3088 secstrmenu.add(method);
3090 wsmenu.add(secstrmenu);
3092 this.webService.removeAll();
3093 for (int i = 0, j = wsmenu.size(); i < j; i++)
3095 webService.add( (JMenu) wsmenu.get(i));
3100 this.webService.removeAll();
3101 this.webService.add(this.webServiceNoServices);
3103 // TODO: add in rediscovery function
3104 // TODO: reduce code redundancy.
3105 // TODO: group services by location as well as function.
3108 /* public void vamsasStore_actionPerformed(ActionEvent e)
3110 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
3111 getProperty("LAST_DIRECTORY"));
3113 chooser.setFileView(new JalviewFileView());
3114 chooser.setDialogTitle("Export to Vamsas file");
3115 chooser.setToolTipText("Export");
3117 int value = chooser.showSaveDialog(this);
3119 if (value == JalviewFileChooser.APPROVE_OPTION)
3121 jalview.io.VamsasDatastore vs = new jalview.io.VamsasDatastore(viewport);
3122 //vs.store(chooser.getSelectedFile().getAbsolutePath() );
3123 vs.storeJalview( chooser.getSelectedFile().getAbsolutePath(), this);
3130 public void showTranslation_actionPerformed(ActionEvent e)
3132 SequenceI[] selection = viewport.getSelectionAsNewSequence();
3133 String[] seqstring = viewport.getViewAsString(true);
3135 int s, sSize = selection.length;
3136 SequenceI[] newSeq = new SequenceI[sSize];
3139 StringBuffer protein;
3141 for (s = 0; s < sSize; s++)
3143 protein = new StringBuffer();
3144 seq = AlignSeq.extractGaps("-. ", seqstring[s]);
3145 resSize = seq.length();
3146 resSize -= resSize % 3;
3148 for (res = 0; res < resSize; res += 3)
3150 String codon = seq.substring(res, res + 3);
3151 codon = codon.replace('U', 'T');
3152 String aa = ResidueProperties.codonTranslate(codon);
3155 protein.append(viewport.getGapCharacter());
3157 else if (aa.equals("STOP"))
3159 protein.append("X");
3166 newSeq[s] = new Sequence(selection[s].getName(),
3167 protein.toString());
3170 AlignmentI al = new Alignment(newSeq);
3171 al.setDataset(null);
3173 ////////////////////////////////
3174 // Copy annotations across
3175 jalview.datamodel.AlignmentAnnotation[] annotations
3176 = viewport.alignment.getAlignmentAnnotation();
3178 if (annotations != null)
3180 for (int i = 0; i < annotations.length; i++)
3182 if (annotations[i] == viewport.quality ||
3183 annotations[i] == viewport.conservation ||
3184 annotations[i] == viewport.consensus)
3186 System.out.println("COPT HERE");
3190 aSize = viewport.alignment.getWidth() / 3;
3191 jalview.datamodel.Annotation[] anots =
3192 new jalview.datamodel.Annotation[aSize];
3194 for (a = 0; a < viewport.alignment.getWidth(); a++)
3196 if (annotations[i].annotations[a] == null
3197 || annotations[i].annotations[a] == null)
3202 anots[a / 3] = new Annotation(
3203 annotations[i].annotations[a].displayCharacter,
3204 annotations[i].annotations[a].description,
3205 annotations[i].annotations[a].secondaryStructure,
3206 annotations[i].annotations[a].value,
3207 annotations[i].annotations[a].colour);
3210 jalview.datamodel.AlignmentAnnotation aa
3211 = new jalview.datamodel.AlignmentAnnotation(annotations[i].label,
3212 annotations[i].description, anots);
3213 al.addAnnotation(aa);
3217 AlignFrame af = new AlignFrame(al, DEFAULT_WIDTH, DEFAULT_HEIGHT);
3218 Desktop.addInternalFrame(af, "Translation of " + this.getTitle(),
3227 * @param String DOCUMENT ME!
3229 public boolean parseFeaturesFile(String file, String type)
3231 boolean featuresFile = false;
3234 featuresFile = new FeaturesFile(file,
3235 type).parse(viewport.alignment.getDataset(),
3236 alignPanel.seqPanel.seqCanvas.
3237 getFeatureRenderer().featureColours,
3240 catch (Exception ex)
3242 ex.printStackTrace();
3247 viewport.showSequenceFeatures = true;
3248 showSeqFeatures.setSelected(true);
3249 alignPanel.repaint();
3252 return featuresFile;
3255 public void dragEnter(DropTargetDragEvent evt)
3258 public void dragExit(DropTargetEvent evt)
3261 public void dragOver(DropTargetDragEvent evt)
3264 public void dropActionChanged(DropTargetDragEvent evt)
3267 public void drop(DropTargetDropEvent evt)
3269 Transferable t = evt.getTransferable();
3270 java.util.List files = null;
3274 DataFlavor uriListFlavor = new DataFlavor(
3275 "text/uri-list;class=java.lang.String");
3276 if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
3278 //Works on Windows and MacOSX
3279 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
3280 files = (java.util.List) t.getTransferData(DataFlavor.
3281 javaFileListFlavor);
3283 else if (t.isDataFlavorSupported(uriListFlavor))
3285 // This is used by Unix drag system
3286 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
3287 String data = (String) t.getTransferData(uriListFlavor);
3288 files = new java.util.ArrayList(1);
3289 for (java.util.StringTokenizer st = new java.util.StringTokenizer(
3292 st.hasMoreTokens(); )
3294 String s = st.nextToken();
3295 if (s.startsWith("#"))
3297 // the line is a comment (as per the RFC 2483)
3301 java.net.URI uri = new java.net.URI(s);
3302 java.io.File file = new java.io.File(uri);
3309 e.printStackTrace();
3316 for (int i = 0; i < files.size(); i++)
3318 loadJalviewDataFile(files.get(i).toString());
3321 catch (Exception ex)
3323 ex.printStackTrace();
3328 // This method will attempt to load a "dropped" file first by testing
3329 // whether its and Annotation file, then features file. If both are
3330 // false then the user may have dropped an alignment file onto this
3332 public void loadJalviewDataFile(String file)
3336 String protocol = "File";
3338 if (file.indexOf("http:") > -1 || file.indexOf("file:") > -1)
3343 boolean isAnnotation = new AnnotationFile().readAnnotationFile(viewport.
3344 alignment, file, protocol);
3348 boolean isGroupsFile = parseFeaturesFile(file, protocol);
3351 String format = new IdentifyFile().Identify(file, protocol);
3353 if (format.equalsIgnoreCase("JnetFile"))
3355 jalview.io.JPredFile predictions = new jalview.io.JPredFile(
3357 new JnetAnnotationMaker().add_annotation(predictions,
3358 viewport.getAlignment(),
3360 alignPanel.adjustAnnotationHeight();
3361 alignPanel.repaint();
3365 new FileLoader().LoadFile(viewport, file, protocol, format);
3372 alignPanel.adjustAnnotationHeight();
3376 catch (Exception ex)
3378 ex.printStackTrace();
3382 public void tabSelectionChanged(int index)
3386 alignPanel = (AlignmentPanel) alignPanels.elementAt(index);
3387 viewport = alignPanel.av;
3388 setMenusFromViewport(viewport);
3392 public void tabbedPane_mousePressed(MouseEvent e)
3394 if (SwingUtilities.isRightMouseButton(e))
3396 String reply = JOptionPane.showInternalInputDialog(this,
3399 JOptionPane.QUESTION_MESSAGE);
3403 viewport.viewName = reply;
3404 tabbedPane.setTitleAt(tabbedPane.getSelectedIndex(), reply);
3409 public AlignViewport getCurrentView()
3419 public PrintThread(AlignmentPanel ap)
3424 static PageFormat pf;
3427 PrinterJob printJob = PrinterJob.getPrinterJob();
3431 printJob.setPrintable(ap, pf);
3435 printJob.setPrintable(ap);
3438 if (printJob.printDialog())
3444 catch (Exception PrintException)
3446 PrintException.printStackTrace();