2 * Jalview - A Sequence Alignment Editor and Viewer
\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
\r
5 * This program is free software; you can redistribute it and/or
\r
6 * modify it under the terms of the GNU General Public License
\r
7 * as published by the Free Software Foundation; either version 2
\r
8 * of the License, or (at your option) any later version.
\r
10 * This program is distributed in the hope that it will be useful,
\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 * GNU General Public License for more details.
\r
15 * You should have received a copy of the GNU General Public License
\r
16 * along with this program; if not, write to the Free Softwarechang
\r
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
\r
19 package jalview.gui;
\r
21 import java.beans.*;
\r
26 import java.awt.datatransfer.*;
\r
27 import java.awt.event.*;
\r
28 import java.awt.print.*;
\r
29 import javax.swing.*;
\r
31 import jalview.analysis.*;
\r
32 import jalview.datamodel.*;
\r
33 import jalview.io.*;
\r
34 import jalview.jbgui.*;
\r
35 import jalview.schemes.*;
\r
36 import jalview.ws.*;
\r
37 import java.awt.dnd.*;
\r
38 import org.biojava.dasobert.eventmodel.*;
\r
45 * @version $Revision$
\r
47 public class AlignFrame
\r
48 extends GAlignFrame implements DropTargetListener, FeatureListener
\r
50 /** DOCUMENT ME!! */
\r
51 public static final int NEW_WINDOW_WIDTH = 700;
\r
53 /** DOCUMENT ME!! */
\r
54 public static final int NEW_WINDOW_HEIGHT = 500;
\r
55 AlignmentPanel alignPanel;
\r
56 AlignViewport viewport;
\r
58 /** DOCUMENT ME!! */
\r
59 public String currentFileFormat = null;
\r
60 Stack historyList = new Stack();
\r
61 Stack redoList = new Stack();
\r
62 private int treeCount = 0;
\r
66 * Creates a new AlignFrame object.
\r
68 * @param al DOCUMENT ME!
\r
70 public AlignFrame(AlignmentI al)
\r
72 viewport = new AlignViewport(al);
\r
74 this.setDropTarget(new java.awt.dnd.DropTarget(this, this));
\r
76 if(viewport.vconsensus==null)
\r
78 //Out of memory calculating consensus.
\r
79 BLOSUM62Colour.setEnabled(false);
\r
80 PIDColour.setEnabled(false);
\r
81 conservationMenuItem.setEnabled(false);
\r
82 modifyConservation.setEnabled(false);
\r
83 abovePIDThreshold.setEnabled(false);
\r
84 modifyPID.setEnabled(false);
\r
87 alignPanel = new AlignmentPanel(this, viewport);
\r
89 String sortby = jalview.bin.Cache.getDefault("SORT_ALIGNMENT", "No sort");
\r
91 if(sortby.equals("Id"))
\r
92 sortIDMenuItem_actionPerformed(null);
\r
93 else if(sortby.equals("Pairwise Identity"))
\r
94 sortPairwiseMenuItem_actionPerformed(null);
\r
96 // remove(tabbedPane);
\r
97 getContentPane().add(alignPanel, BorderLayout.CENTER);
\r
101 // tabbedPane.add(al.isNucleotide() ? "DNA":"Protein", alignPanel);
\r
104 /////////////////////////
\r
105 if(al.getDataset()==null)
\r
107 al.setDataset(null);
\r
109 // AlignViewport ds = new AlignViewport(al.getDataset(), true);
\r
110 // AlignmentPanel dap = new AlignmentPanel(this, ds);
\r
111 // tabbedPane.add("Dataset", dap);
\r
112 // viewports.add(ds);
\r
113 // alignPanels.add(dap);
\r
114 /////////////////////////
\r
117 viewport.addPropertyChangeListener(new PropertyChangeListener()
\r
119 public void propertyChange(PropertyChangeEvent evt)
\r
121 if (evt.getPropertyName().equals("alignment"))
\r
123 alignmentChanged();
\r
129 if (Desktop.desktop != null)
\r
131 addServiceListeners();
\r
132 setGUINucleotide(al.isNucleotide());
\r
136 if (jalview.bin.Cache.getDefault("WRAP_ALIGNMENT", false))
\r
138 wrapMenuItem.setSelected(true);
\r
139 wrapMenuItem_actionPerformed(null);
\r
144 public AlignViewport getViewport()
\r
149 /* Set up intrinsic listeners for dynamically generated GUI bits. */
\r
150 private void addServiceListeners()
\r
152 final java.beans.PropertyChangeListener thisListener;
\r
153 // Do this once to get current state
\r
154 BuildWebServiceMenu();
\r
155 Desktop.discoverer.addPropertyChangeListener(
\r
156 thisListener = new java.beans.PropertyChangeListener()
\r
158 public void propertyChange(PropertyChangeEvent evt)
\r
160 // System.out.println("Discoverer property change.");
\r
161 if (evt.getPropertyName().equals("services"))
\r
163 // System.out.println("Rebuilding web service menu");
\r
164 BuildWebServiceMenu();
\r
168 addInternalFrameListener(new javax.swing.event.
\r
169 InternalFrameAdapter()
\r
171 public void internalFrameClosed(
\r
172 javax.swing.event.InternalFrameEvent evt)
\r
174 // System.out.println("deregistering discoverer listener");
\r
175 Desktop.discoverer.removePropertyChangeListener(thisListener);
\r
176 closeMenuItem_actionPerformed(null);
\r
182 public void setGUINucleotide(boolean nucleotide)
\r
184 showTranslation.setVisible( nucleotide );
\r
185 //sequenceFeatures.setVisible(!nucleotide );
\r
186 //featureSettings.setVisible( !nucleotide );
\r
187 conservationMenuItem.setVisible( !nucleotide );
\r
188 modifyConservation.setVisible( !nucleotide );
\r
190 //Remember AlignFrame always starts as protein
\r
193 calculateMenu.remove(calculateMenu.getItemCount()-2);
\r
197 public void comeBackLater(FeatureEvent evt)
\r
200 public void newFeatures(FeatureEvent evt)
\r
202 if (evt.getFeatures().length > 0)
\r
204 alignPanel.seqPanel.seqCanvas.fr.featuresAdded();
\r
205 alignPanel.repaint();
\r
206 if(featureSettings!=null)
\r
207 featureSettings.setTableData();
\r
211 Hashtable progressBars;
\r
212 public void setProgressBar(String message, long id)
\r
214 if(progressBars == null)
\r
215 progressBars = new Hashtable();
\r
217 JPanel progressPanel;
\r
218 GridLayout layout = (GridLayout) statusPanel.getLayout();
\r
219 if(progressBars.get( new Long(id) )!=null)
\r
221 progressPanel = (JPanel)progressBars.get( new Long(id) );
\r
222 statusPanel.remove(progressPanel);
\r
223 progressBars.remove( progressPanel );
\r
224 progressPanel = null;
\r
226 statusBar.setText(message);
\r
228 layout.setRows(layout.getRows() - 1);
\r
232 progressPanel = new JPanel(new BorderLayout(10, 5));
\r
234 JProgressBar progressBar = new JProgressBar();
\r
235 progressBar.setIndeterminate(true);
\r
237 progressPanel.add(new JLabel(message), BorderLayout.WEST);
\r
238 progressPanel.add(progressBar, BorderLayout.CENTER);
\r
240 layout.setRows(layout.getRows() + 1);
\r
241 statusPanel.add(progressPanel);
\r
243 progressBars.put(new Long(id), progressPanel);
\r
251 Added so Castor Mapping file can obtain Jalview Version
\r
253 public String getVersion()
\r
255 return jalview.bin.Cache.getProperty("VERSION");
\r
258 public FeatureRenderer getFeatureRenderer()
\r
260 return alignPanel.seqPanel.seqCanvas.getFeatureRenderer();
\r
264 public void fetchSequence_actionPerformed(ActionEvent e)
\r
266 new SequenceFetcher(this);
\r
269 public void addFromFile_actionPerformed(ActionEvent e)
\r
271 Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport);
\r
274 public void addFromText_actionPerformed(ActionEvent e)
\r
276 Desktop.instance.inputTextboxMenuItem_actionPerformed(viewport);
\r
279 public void addFromURL_actionPerformed(ActionEvent e)
\r
281 Desktop.instance.inputURLMenuItem_actionPerformed(viewport);
\r
287 * @param e DOCUMENT ME!
\r
289 public void saveAlignmentMenu_actionPerformed(ActionEvent e)
\r
291 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
292 getProperty( "LAST_DIRECTORY"),
\r
294 { "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc","jar" },
\r
296 { "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "Jalview" },
\r
301 chooser.setFileView(new JalviewFileView());
\r
302 chooser.setDialogTitle("Save Alignment to file");
\r
303 chooser.setToolTipText("Save");
\r
305 int value = chooser.showSaveDialog(this);
\r
307 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
309 currentFileFormat = chooser.getSelectedFormat();
\r
311 if (currentFileFormat == null)
\r
313 JOptionPane.showInternalMessageDialog(Desktop.desktop,
\r
314 "You must select a file format before saving!",
\r
315 "File format not specified",
\r
316 JOptionPane.WARNING_MESSAGE);
\r
317 value = chooser.showSaveDialog(this);
\r
321 jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT",
\r
322 currentFileFormat);
\r
324 String choice = chooser.getSelectedFile().getPath();
\r
325 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
327 saveAlignment(choice, currentFileFormat);
\r
331 public boolean saveAlignment(String file, String format)
\r
333 if (format.equalsIgnoreCase("Jalview"))
\r
335 String shortName = title;
\r
337 if (shortName.indexOf(java.io.File.separatorChar) > -1)
\r
339 shortName = shortName.substring(shortName.lastIndexOf(
\r
340 java.io.File.separatorChar) + 1);
\r
343 new Jalview2XML().SaveAlignment(this, file, shortName);
\r
345 // USE Jalview2XML to save this file
\r
351 String[] omitHidden = null;
\r
353 if (viewport.hasHiddenColumns)
\r
355 // System.out.println("PROMPT USER HERE");
\r
356 // omitHidden = viewport.getSelectionAsString();
\r
359 String output = new FormatAdapter().formatSequences(
\r
361 viewport.alignment.getSequencesArray(),
\r
363 //viewport.getSelectionAsNewSequence(),
\r
367 if (output == null)
\r
374 java.io.PrintWriter out = new java.io.PrintWriter(
\r
375 new java.io.FileWriter(file));
\r
379 this.setTitle(file);
\r
382 catch (Exception ex)
\r
384 ex.printStackTrace();
\r
393 * @param e DOCUMENT ME!
\r
395 protected void outputText_actionPerformed(ActionEvent e)
\r
397 CutAndPasteTransfer cap = new CutAndPasteTransfer();
\r
398 Desktop.addInternalFrame(cap,
\r
399 "Alignment output - " + e.getActionCommand(), 600,
\r
403 String [] omitHidden = null;
\r
405 if(viewport.hasHiddenColumns)
\r
407 // System.out.println("PROMPT USER HERE");
\r
408 // omitHidden = viewport.getSelectionAsString();
\r
411 cap.setText(new FormatAdapter().formatSequences(
\r
412 e.getActionCommand(),
\r
413 viewport.getSelectionAsNewSequence(),
\r
420 * @param e DOCUMENT ME!
\r
422 protected void htmlMenuItem_actionPerformed(ActionEvent e)
\r
424 new HTMLOutput(viewport,
\r
425 alignPanel.seqPanel.seqCanvas.getSequenceRenderer(),
\r
426 alignPanel.seqPanel.seqCanvas.getFeatureRenderer());
\r
429 public void createImageMap(File file, String image)
\r
431 alignPanel.makePNGImageMap(file, image);
\r
437 * @param e DOCUMENT ME!
\r
439 public void createPNG(File f)
\r
441 alignPanel.makePNG(f);
\r
447 * @param e DOCUMENT ME!
\r
449 public void createEPS(File f)
\r
451 alignPanel.makeEPS(f);
\r
457 * @param e DOCUMENT ME!
\r
459 public void printMenuItem_actionPerformed(ActionEvent e)
\r
461 //Putting in a thread avoids Swing painting problems
\r
462 PrintThread thread = new PrintThread();
\r
466 public void exportFeatures_actionPerformed(ActionEvent e)
\r
468 new AnnotationExporter().exportFeatures(alignPanel);
\r
471 public void exportAnnotations_actionPerformed(ActionEvent e)
\r
473 new AnnotationExporter().exportAnnotations(
\r
475 viewport.alignment.getAlignmentAnnotation()
\r
480 public void associatedData_actionPerformed(ActionEvent e)
\r
482 // Pick the tree file
\r
483 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
485 "LAST_DIRECTORY"));
\r
486 chooser.setFileView(new JalviewFileView());
\r
487 chooser.setDialogTitle("Load Jalview Annotations or Features File");
\r
488 chooser.setToolTipText("Load Jalview Annotations / Features file");
\r
490 int value = chooser.showOpenDialog(null);
\r
492 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
494 String choice = chooser.getSelectedFile().getPath();
\r
495 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
496 loadJalviewDataFile(choice);
\r
504 * @param e DOCUMENT ME!
\r
506 public void closeMenuItem_actionPerformed(ActionEvent e)
\r
510 PaintRefresher.components.remove(viewport.alignment);
\r
511 this.setClosed(true);
\r
513 catch (Exception ex)
\r
521 void updateEditMenuBar()
\r
523 if (historyList.size() > 0)
\r
525 undoMenuItem.setEnabled(true);
\r
527 HistoryItem hi = (HistoryItem) historyList.peek();
\r
528 undoMenuItem.setText("Undo " + hi.getDescription());
\r
532 undoMenuItem.setEnabled(false);
\r
533 undoMenuItem.setText("Undo");
\r
536 if (redoList.size() > 0)
\r
538 redoMenuItem.setEnabled(true);
\r
540 HistoryItem hi = (HistoryItem) redoList.peek();
\r
541 redoMenuItem.setText("Redo " + hi.getDescription());
\r
545 redoMenuItem.setEnabled(false);
\r
546 redoMenuItem.setText("Redo");
\r
553 * @param hi DOCUMENT ME!
\r
555 public void addHistoryItem(HistoryItem hi)
\r
557 historyList.push(hi);
\r
558 updateEditMenuBar();
\r
564 * @param e DOCUMENT ME!
\r
566 protected void undoMenuItem_actionPerformed(ActionEvent e)
\r
568 HistoryItem hi = (HistoryItem) historyList.pop();
\r
569 redoList.push(new HistoryItem(hi.getDescription(), viewport.alignment,
\r
570 HistoryItem.HIDE));
\r
571 restoreHistoryItem(hi);
\r
572 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
578 * @param e DOCUMENT ME!
\r
580 protected void redoMenuItem_actionPerformed(ActionEvent e)
\r
582 HistoryItem hi = (HistoryItem) redoList.pop();
\r
583 restoreHistoryItem(hi);
\r
584 updateEditMenuBar();
\r
585 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
588 // used by undo and redo
\r
589 void restoreHistoryItem(HistoryItem hi)
\r
594 updateEditMenuBar();
\r
596 viewport.firePropertyChange("alignment", null,
\r
597 viewport.getAlignment().getSequences());
\r
603 * @param up DOCUMENT ME!
\r
605 public void moveSelectedSequences(boolean up)
\r
607 SequenceGroup sg = viewport.getSelectionGroup();
\r
616 for (int i = 1; i < viewport.alignment.getHeight(); i++)
\r
618 SequenceI seq = viewport.alignment.getSequenceAt(i);
\r
620 if (!sg.getSequences(false).contains(seq))
\r
625 SequenceI temp = viewport.alignment.getSequenceAt(i - 1);
\r
627 if (sg.getSequences(false).contains(temp))
\r
632 viewport.alignment.getSequences().setElementAt(temp, i);
\r
633 viewport.alignment.getSequences().setElementAt(seq, i - 1);
\r
638 for (int i = viewport.alignment.getHeight() - 2; i > -1; i--)
\r
640 SequenceI seq = viewport.alignment.getSequenceAt(i);
\r
642 if (!sg.getSequences(false).contains(seq))
\r
647 SequenceI temp = viewport.alignment.getSequenceAt(i + 1);
\r
649 if (sg.getSequences(false).contains(temp))
\r
654 viewport.alignment.getSequences().setElementAt(temp, i);
\r
655 viewport.alignment.getSequences().setElementAt(seq, i + 1);
\r
659 alignPanel.repaint();
\r
667 * @param e DOCUMENT ME!
\r
669 protected void copy_actionPerformed(ActionEvent e)
\r
671 if (viewport.getSelectionGroup() == null)
\r
676 SequenceI [] seqs = viewport.getSelectionAsNewSequence();
\r
677 String[] omitHidden = null;
\r
679 if (viewport.hasHiddenColumns)
\r
681 omitHidden = viewport.getSelectionAsString();
\r
684 String output = new FormatAdapter().formatSequences(
\r
690 Toolkit.getDefaultToolkit().getSystemClipboard()
\r
691 .setContents(new StringSelection(output), Desktop.instance);
\r
693 Vector hiddenColumns = null;
\r
694 if(viewport.hasHiddenColumns && viewport.getSelectionGroup()!=null)
\r
696 hiddenColumns =new Vector();
\r
697 int hiddenOffset = viewport.getSelectionGroup().getStartRes();
\r
698 for(int i=0; i<viewport.getColumnSelection().getHiddenColumns().size(); i++)
\r
700 int[] region = (int[])
\r
701 viewport.getColumnSelection().getHiddenColumns().elementAt(i);
\r
703 hiddenColumns.addElement(new int[]{region[0]-hiddenOffset,
\r
704 region[1]-hiddenOffset});
\r
708 Desktop.jalviewClipboard = new Object[]{ seqs,
\r
709 viewport.alignment.getDataset(),
\r
716 * @param e DOCUMENT ME!
\r
718 protected void pasteNew_actionPerformed(ActionEvent e)
\r
726 * @param e DOCUMENT ME!
\r
728 protected void pasteThis_actionPerformed(ActionEvent e)
\r
730 addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment,
\r
731 HistoryItem.PASTE));
\r
738 * @param newAlignment DOCUMENT ME!
\r
740 void paste(boolean newAlignment)
\r
744 Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
\r
745 Transferable contents = c.getContents(this);
\r
747 if (contents == null)
\r
752 String str = (String) contents.getTransferData(DataFlavor.stringFlavor);
\r
756 String format = new IdentifyFile().Identify(str, "Paste");
\r
757 SequenceI[] sequences;
\r
759 if(Desktop.jalviewClipboard!=null)
\r
761 // The clipboard was filled from within Jalview, we must use the sequences
\r
762 // And dataset from the copied alignment
\r
763 sequences = (SequenceI[])Desktop.jalviewClipboard[0];
\r
767 sequences = new FormatAdapter().readFile(str, "Paste", format);
\r
770 AlignmentI alignment = null;
\r
774 alignment = new Alignment(sequences);
\r
776 if(Desktop.jalviewClipboard!=null)
\r
777 alignment.setDataset( (Alignment)Desktop.jalviewClipboard[1] );
\r
779 alignment.setDataset( null );
\r
783 alignment = viewport.getAlignment();
\r
786 for (int i = 0; i < sequences.length; i++)
\r
789 Sequence newseq = new Sequence(sequences[i].getName(),
\r
790 sequences[i].getSequence(), sequences[i].getStart(),
\r
791 sequences[i].getEnd());
\r
793 alignment.addSequence(newseq);
\r
795 viewport.setEndSeq(alignment.getHeight());
\r
796 alignment.getWidth();
\r
797 viewport.firePropertyChange("alignment", null, alignment.getSequences());
\r
800 // Add any annotations attached to sequences
\r
801 for (int i = 0; i < sequences.length; i++)
\r
803 if (sequences[i].getAnnotation() != null)
\r
805 for (int a = 0; a < sequences[i].getAnnotation().length; a++)
\r
807 AlignmentAnnotation newAnnot =
\r
808 new AlignmentAnnotation(
\r
809 sequences[i].getAnnotation()[a].label,
\r
810 sequences[i].getAnnotation()[a].description,
\r
811 sequences[i].getAnnotation()[a].annotations,
\r
812 sequences[i].getAnnotation()[a].graphMin,
\r
813 sequences[i].getAnnotation()[a].graphMax,
\r
814 sequences[i].getAnnotation()[a].graph);
\r
816 sequences[i].getAnnotation()[a] = newAnnot;
\r
817 newAnnot.sequenceMapping = sequences[i].getAnnotation()[a].
\r
819 newAnnot.sequenceRef = sequences[i];
\r
820 newAnnot.adjustForAlignment();
\r
821 alignment.addAnnotation(newAnnot);
\r
822 alignment.setAnnotationIndex(newAnnot, a);
\r
825 alignPanel.annotationPanel.adjustPanelHeight();
\r
831 AlignFrame af = new AlignFrame(alignment);
\r
832 String newtitle = new String("Copied sequences");
\r
834 if(Desktop.jalviewClipboard[2]!=null)
\r
836 Vector hc = (Vector)Desktop.jalviewClipboard[2];
\r
837 for(int i=0; i<hc.size(); i++)
\r
839 int [] region = (int[]) hc.elementAt(i);
\r
840 for(int j=region[0]; j<region[1]+1; j++)
\r
841 af.viewport.getColumnSelection().addElement(j);
\r
842 af.viewport.getColumnSelection().hideColumns(region[0], af.viewport);
\r
847 //>>>This is a fix for the moment, until a better solution is found!!<<<
\r
848 af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().transferSettings(
\r
849 alignPanel.seqPanel.seqCanvas.getFeatureRenderer());
\r
852 if (title.startsWith("Copied sequences"))
\r
858 newtitle = newtitle.concat("- from " + title);
\r
861 Desktop.addInternalFrame(af, newtitle, NEW_WINDOW_WIDTH,
\r
862 NEW_WINDOW_HEIGHT);
\r
868 catch (Exception ex)
\r
870 ex.printStackTrace();
\r
871 System.out.println("Exception whilst pasting: "+ex);
\r
872 // could be anything being pasted in here
\r
881 * @param e DOCUMENT ME!
\r
883 protected void cut_actionPerformed(ActionEvent e)
\r
885 copy_actionPerformed(null);
\r
886 delete_actionPerformed(null);
\r
892 * @param e DOCUMENT ME!
\r
894 protected void delete_actionPerformed(ActionEvent e)
\r
897 if (viewport.getSelectionGroup() == null)
\r
903 SequenceGroup sg = viewport.getSelectionGroup();
\r
907 //Jalview no longer allows deletion of residues.
\r
908 //Check here whether any residues are in selection area
\r
909 /* if( sg.getEndRes()-sg.getStartRes() < viewport.alignment.getWidth()-1)
\r
911 for (int i = 0; i < sg.sequences.size(); i++)
\r
913 SequenceI seq = sg.getSequenceAt(i);
\r
914 int j = sg.getStartRes();
\r
917 if (!jalview.util.Comparison.isGap(seq.getCharAt(j)))
\r
919 JOptionPane.showInternalMessageDialog(
\r
920 Desktop.desktop, "Cannot delete residues from alignment!\n"
\r
921 + "Try hiding columns instead.",
\r
922 "Deletion of residues not permitted",
\r
923 JOptionPane.WARNING_MESSAGE);
\r
928 }while(j<=sg.getEndRes());
\r
933 addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment,
\r
934 HistoryItem.HIDE));
\r
937 for (int i = 0; i < sg.getSize(false); i++)
\r
939 SequenceI seq = sg.getSequenceAt(i);
\r
940 int index = viewport.getAlignment().findIndex(seq);
\r
942 seq.deleteChars(sg.getStartRes(), sg.getEndRes() + 1);
\r
944 // If the cut affects all sequences, remove highlighted columns
\r
945 if (sg.getSize(false) == viewport.alignment.getHeight())
\r
947 viewport.getColumnSelection().removeElements(sg.getStartRes(),
\r
948 sg.getEndRes() + 1);
\r
951 if (seq.getSequence().length() < 1)
\r
953 viewport.getAlignment().deleteSequence(seq);
\r
957 viewport.getAlignment().getSequences().setElementAt(seq, index);
\r
961 viewport.setSelectionGroup(null);
\r
962 viewport.alignment.deleteGroup(sg);
\r
964 viewport.firePropertyChange("alignment", null,
\r
965 viewport.getAlignment().getSequences());
\r
969 if (viewport.getAlignment().getHeight() < 1)
\r
973 this.setClosed(true);
\r
975 catch (Exception ex)
\r
984 * @param e DOCUMENT ME!
\r
986 protected void deleteGroups_actionPerformed(ActionEvent e)
\r
988 viewport.alignment.deleteAllGroups();
\r
989 viewport.setSelectionGroup(null);
\r
990 alignPanel.repaint();
\r
996 * @param e DOCUMENT ME!
\r
998 public void selectAllSequenceMenuItem_actionPerformed(ActionEvent e)
\r
1000 SequenceGroup sg = new SequenceGroup();
\r
1002 for (int i = 0; i < viewport.getAlignment().getSequences().size();
\r
1005 sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);
\r
1008 sg.setEndRes(viewport.alignment.getWidth() - 1);
\r
1009 viewport.setSelectionGroup(sg);
\r
1010 PaintRefresher.Refresh(null, viewport.alignment);
\r
1016 * @param e DOCUMENT ME!
\r
1018 public void deselectAllSequenceMenuItem_actionPerformed(ActionEvent e)
\r
1020 if(viewport.cursorMode)
\r
1022 alignPanel.seqPanel.keyboardNo1 = null;
\r
1023 alignPanel.seqPanel.keyboardNo2 = null;
\r
1025 viewport.setSelectionGroup(null);
\r
1026 viewport.getColumnSelection().clear();
\r
1027 viewport.setSelectionGroup(null);
\r
1028 alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);
\r
1029 alignPanel.idPanel.idCanvas.searchResults = null;
\r
1030 alignPanel.repaint();
\r
1031 PaintRefresher.Refresh(null, viewport.alignment);
\r
1037 * @param e DOCUMENT ME!
\r
1039 public void invertSequenceMenuItem_actionPerformed(ActionEvent e)
\r
1041 SequenceGroup sg = viewport.getSelectionGroup();
\r
1045 selectAllSequenceMenuItem_actionPerformed(null);
\r
1050 for (int i = 0; i < viewport.getAlignment().getSequences().size();
\r
1053 sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false);
\r
1056 PaintRefresher.Refresh(null, viewport.alignment);
\r
1062 * @param e DOCUMENT ME!
\r
1064 public void remove2LeftMenuItem_actionPerformed(ActionEvent e)
\r
1066 ColumnSelection colSel = viewport.getColumnSelection();
\r
1068 if (colSel.size() > 0)
\r
1070 addHistoryItem(new HistoryItem("Remove Left", viewport.alignment,
\r
1071 HistoryItem.HIDE));
\r
1073 int min = colSel.getMin();
\r
1074 viewport.getAlignment().trimLeft(min);
\r
1075 colSel.compensateForEdit(0, min);
\r
1077 if (viewport.getSelectionGroup() != null)
\r
1079 viewport.getSelectionGroup().adjustForRemoveLeft(min);
\r
1082 Vector groups = viewport.alignment.getGroups();
\r
1084 for (int i = 0; i < groups.size(); i++)
\r
1086 SequenceGroup sg = (SequenceGroup) groups.get(i);
\r
1088 if (!sg.adjustForRemoveLeft(min))
\r
1090 viewport.alignment.deleteGroup(sg);
\r
1094 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1101 * @param e DOCUMENT ME!
\r
1103 public void remove2RightMenuItem_actionPerformed(ActionEvent e)
\r
1105 ColumnSelection colSel = viewport.getColumnSelection();
\r
1107 if (colSel.size() > 0)
\r
1109 addHistoryItem(new HistoryItem("Remove Right", viewport.alignment,
\r
1110 HistoryItem.HIDE));
\r
1112 int max = colSel.getMax();
\r
1113 viewport.getAlignment().trimRight(max);
\r
1115 if (viewport.getSelectionGroup() != null)
\r
1117 viewport.getSelectionGroup().adjustForRemoveRight(max);
\r
1120 Vector groups = viewport.alignment.getGroups();
\r
1122 for (int i = 0; i < groups.size(); i++)
\r
1124 SequenceGroup sg = (SequenceGroup) groups.get(i);
\r
1126 if (!sg.adjustForRemoveRight(max))
\r
1128 viewport.alignment.deleteGroup(sg);
\r
1132 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1139 * @param e DOCUMENT ME!
\r
1141 public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e)
\r
1143 addHistoryItem(new HistoryItem("Remove Gapped Columns",
\r
1144 viewport.alignment, HistoryItem.HIDE));
\r
1146 //This is to maintain viewport position on first residue
\r
1147 //of first sequence
\r
1148 SequenceI seq = viewport.alignment.getSequenceAt(0);
\r
1149 int startRes = seq.findPosition(viewport.startRes);
\r
1151 viewport.getAlignment().removeGaps();
\r
1153 viewport.setStartRes(seq.findIndex(startRes)-1);
\r
1155 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1161 * @param e DOCUMENT ME!
\r
1163 public void removeAllGapsMenuItem_actionPerformed(ActionEvent e)
\r
1165 addHistoryItem(new HistoryItem("Remove Gaps", viewport.alignment,
\r
1166 HistoryItem.HIDE));
\r
1168 //This is to maintain viewport position on first residue
\r
1169 //of first sequence
\r
1170 SequenceI seq = viewport.alignment.getSequenceAt(0);
\r
1171 int startRes = seq.findPosition(viewport.startRes);
\r
1174 SequenceI current;
\r
1177 Vector seqs = null;
\r
1180 int end = viewport.alignment.getWidth();
\r
1182 if (viewport.getSelectionGroup() != null
\r
1183 && viewport.getSelectionGroup().getSequences(true) != null
\r
1184 && viewport.getSelectionGroup().getSize(true) > 0)
\r
1186 seqs = viewport.getSelectionGroup().getSequences(true);
\r
1187 start = viewport.getSelectionGroup().getStartRes();
\r
1188 end = viewport.getSelectionGroup().getEndRes()+1;
\r
1192 seqs = viewport.alignment.getSequences();
\r
1195 for (int i = 0; i < seqs.size(); i++)
\r
1197 current = (SequenceI) seqs.elementAt(i);
\r
1198 jSize = current.getLength();
\r
1200 // Removing a range is much quicker than removing gaps
\r
1201 // one by one for long sequences
\r
1203 int rangeStart=-1, rangeEnd=-1;
\r
1207 if (jalview.util.Comparison.isGap(current.getCharAt(j)))
\r
1209 if(rangeStart==-1)
\r
1224 current.deleteChars(rangeStart, rangeEnd);
\r
1225 j-=rangeEnd-rangeStart;
\r
1226 jSize-=rangeEnd-rangeStart;
\r
1234 while (j < end && j < jSize);
\r
1237 current.deleteChars(rangeStart, rangeEnd);
\r
1241 viewport.setStartRes(seq.findIndex(startRes)-1);
\r
1243 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1246 public void alignmentChanged()
\r
1248 if(viewport.padGaps)
\r
1249 viewport.getAlignment().padGaps();
\r
1251 if(viewport.vconsensus!=null && viewport.autoCalculateConsensus)
\r
1253 viewport.updateConsensus();
\r
1254 viewport.updateConservation();
\r
1256 resetAllColourSchemes();
\r
1257 if(alignPanel.overviewPanel!=null)
\r
1258 alignPanel.overviewPanel.updateOverviewImage();
\r
1260 viewport.alignment.adjustSequenceAnnotations();
\r
1262 alignPanel.repaint();
\r
1265 void resetAllColourSchemes()
\r
1267 ColourSchemeI cs = viewport.globalColourScheme;
\r
1270 if (cs instanceof ClustalxColourScheme)
\r
1272 ( (ClustalxColourScheme) viewport.getGlobalColourScheme()).
\r
1273 resetClustalX(viewport.alignment.getSequences(),
\r
1274 viewport.alignment.getWidth());
\r
1277 cs.setConsensus(viewport.vconsensus);
\r
1278 if (cs.conservationApplied())
\r
1280 Alignment al = (Alignment) viewport.alignment;
\r
1281 Conservation c = new Conservation("All",
\r
1282 ResidueProperties.propHash, 3,
\r
1283 al.getSequences(), 0,
\r
1284 al.getWidth() - 1);
\r
1286 c.verdict(false, viewport.ConsPercGaps);
\r
1288 cs.setConservation(c);
\r
1292 int s, sSize = viewport.alignment.getGroups().size();
\r
1293 for(s=0; s<sSize; s++)
\r
1295 SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s);
\r
1296 if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme)
\r
1298 ((ClustalxColourScheme)sg.cs).resetClustalX(
\r
1299 sg.getSequences(true), sg.getWidth());
\r
1301 sg.recalcConservation();
\r
1308 * @param e DOCUMENT ME!
\r
1310 public void padGapsMenuitem_actionPerformed(ActionEvent e)
\r
1312 addHistoryItem(new HistoryItem("Pad Gaps", viewport.alignment,
\r
1313 HistoryItem.HIDE));
\r
1315 viewport.padGaps = padGapsMenuitem.isSelected();
\r
1317 // if (viewport.padGaps)
\r
1318 alignmentChanged();
\r
1324 * @param e DOCUMENT ME!
\r
1326 public void findMenuItem_actionPerformed(ActionEvent e)
\r
1328 JInternalFrame frame = new JInternalFrame();
\r
1329 Finder finder = new Finder(viewport, alignPanel, frame);
\r
1330 frame.setContentPane(finder);
\r
1331 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
1332 Desktop.addInternalFrame(frame, "Find", 340, 110);
\r
1338 * @param e DOCUMENT ME!
\r
1340 public void font_actionPerformed(ActionEvent e)
\r
1342 new FontChooser(alignPanel);
\r
1345 public void smoothFont_actionPerformed(ActionEvent e)
\r
1347 viewport.antiAlias = smoothFont.isSelected();
\r
1348 alignPanel.annotationPanel.image = null;
\r
1349 alignPanel.repaint();
\r
1356 * @param e DOCUMENT ME!
\r
1358 protected void seqLimit_actionPerformed(ActionEvent e)
\r
1360 viewport.setShowJVSuffix(seqLimits.isSelected());
\r
1362 alignPanel.idPanel.idCanvas.setPreferredSize(alignPanel.calculateIdWidth());
\r
1363 alignPanel.repaint();
\r
1370 * @param e DOCUMENT ME!
\r
1372 protected void colourTextMenuItem_actionPerformed(ActionEvent e)
\r
1374 viewport.setColourText(colourTextMenuItem.isSelected());
\r
1375 alignPanel.repaint();
\r
1381 * @param e DOCUMENT ME!
\r
1383 public void wrapMenuItem_actionPerformed(ActionEvent e)
\r
1385 scaleAbove.setVisible(wrapMenuItem.isSelected());
\r
1386 scaleLeft.setVisible(wrapMenuItem.isSelected());
\r
1387 scaleRight.setVisible(wrapMenuItem.isSelected());
\r
1388 viewport.setWrapAlignment(wrapMenuItem.isSelected());
\r
1389 alignPanel.setWrapAlignment(wrapMenuItem.isSelected());
\r
1395 * @param e DOCUMENT ME!
\r
1397 protected void scaleAbove_actionPerformed(ActionEvent e)
\r
1399 viewport.setScaleAboveWrapped(scaleAbove.isSelected());
\r
1400 alignPanel.repaint();
\r
1406 * @param e DOCUMENT ME!
\r
1408 protected void scaleLeft_actionPerformed(ActionEvent e)
\r
1410 viewport.setScaleLeftWrapped(scaleLeft.isSelected());
\r
1411 alignPanel.repaint();
\r
1417 * @param e DOCUMENT ME!
\r
1419 protected void scaleRight_actionPerformed(ActionEvent e)
\r
1421 viewport.setScaleRightWrapped(scaleRight.isSelected());
\r
1422 alignPanel.repaint();
\r
1428 * @param e DOCUMENT ME!
\r
1430 public void viewBoxesMenuItem_actionPerformed(ActionEvent e)
\r
1432 viewport.setShowBoxes(viewBoxesMenuItem.isSelected());
\r
1433 alignPanel.repaint();
\r
1439 * @param e DOCUMENT ME!
\r
1441 public void viewTextMenuItem_actionPerformed(ActionEvent e)
\r
1443 viewport.setShowText(viewTextMenuItem.isSelected());
\r
1444 alignPanel.repaint();
\r
1450 * @param e DOCUMENT ME!
\r
1452 protected void renderGapsMenuItem_actionPerformed(ActionEvent e)
\r
1454 viewport.setRenderGaps(renderGapsMenuItem.isSelected());
\r
1455 alignPanel.repaint();
\r
1459 FeatureSettings featureSettings;
\r
1460 public void featureSettings_actionPerformed(ActionEvent e)
\r
1462 if(featureSettings !=null )
\r
1464 featureSettings.close();
\r
1465 featureSettings = null;
\r
1467 featureSettings = new FeatureSettings(this);
\r
1473 * @param evt DOCUMENT ME!
\r
1475 public void showSeqFeatures_actionPerformed(ActionEvent evt)
\r
1477 viewport.setShowSequenceFeatures(showSeqFeatures.isSelected());
\r
1478 alignPanel.repaint();
\r
1479 if (alignPanel.getOverviewPanel() != null)
\r
1481 alignPanel.getOverviewPanel().updateOverviewImage();
\r
1488 * @param e DOCUMENT ME!
\r
1490 public void annotationPanelMenuItem_actionPerformed(ActionEvent e)
\r
1492 viewport.setShowAnnotation(annotationPanelMenuItem.isSelected());
\r
1493 alignPanel.setAnnotationVisible(annotationPanelMenuItem.isSelected());
\r
1499 * @param e DOCUMENT ME!
\r
1501 public void overviewMenuItem_actionPerformed(ActionEvent e)
\r
1503 if (alignPanel.overviewPanel != null)
\r
1508 JInternalFrame frame = new JInternalFrame();
\r
1509 OverviewPanel overview = new OverviewPanel(alignPanel);
\r
1510 frame.setContentPane(overview);
\r
1511 Desktop.addInternalFrame(frame, "Overview " + this.getTitle(),
\r
1512 frame.getWidth(), frame.getHeight());
\r
1514 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
1515 frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
\r
1517 public void internalFrameClosed(
\r
1518 javax.swing.event.InternalFrameEvent evt)
\r
1520 alignPanel.setOverviewPanel(null);
\r
1525 alignPanel.setOverviewPanel(overview);
\r
1531 * @param e DOCUMENT ME!
\r
1533 protected void noColourmenuItem_actionPerformed(ActionEvent e)
\r
1535 changeColour(null);
\r
1541 * @param e DOCUMENT ME!
\r
1543 public void clustalColour_actionPerformed(ActionEvent e)
\r
1545 changeColour(new ClustalxColourScheme(
\r
1546 viewport.alignment.getSequences(), viewport.alignment.getWidth()));
\r
1552 * @param e DOCUMENT ME!
\r
1554 public void zappoColour_actionPerformed(ActionEvent e)
\r
1556 changeColour(new ZappoColourScheme());
\r
1562 * @param e DOCUMENT ME!
\r
1564 public void taylorColour_actionPerformed(ActionEvent e)
\r
1566 changeColour(new TaylorColourScheme());
\r
1572 * @param e DOCUMENT ME!
\r
1574 public void hydrophobicityColour_actionPerformed(ActionEvent e)
\r
1576 changeColour(new HydrophobicColourScheme());
\r
1582 * @param e DOCUMENT ME!
\r
1584 public void helixColour_actionPerformed(ActionEvent e)
\r
1586 changeColour(new HelixColourScheme());
\r
1592 * @param e DOCUMENT ME!
\r
1594 public void strandColour_actionPerformed(ActionEvent e)
\r
1596 changeColour(new StrandColourScheme());
\r
1602 * @param e DOCUMENT ME!
\r
1604 public void turnColour_actionPerformed(ActionEvent e)
\r
1606 changeColour(new TurnColourScheme());
\r
1612 * @param e DOCUMENT ME!
\r
1614 public void buriedColour_actionPerformed(ActionEvent e)
\r
1616 changeColour(new BuriedColourScheme());
\r
1622 * @param e DOCUMENT ME!
\r
1624 public void nucleotideColour_actionPerformed(ActionEvent e)
\r
1626 changeColour(new NucleotideColourScheme());
\r
1629 public void annotationColour_actionPerformed(ActionEvent e)
\r
1631 new AnnotationColourChooser(viewport, alignPanel);
\r
1638 * @param e DOCUMENT ME!
\r
1640 protected void applyToAllGroups_actionPerformed(ActionEvent e)
\r
1642 viewport.setColourAppliesToAllGroups(applyToAllGroups.isSelected());
\r
1648 * @param cs DOCUMENT ME!
\r
1650 public void changeColour(ColourSchemeI cs)
\r
1652 int threshold = 0;
\r
1656 if (viewport.getAbovePIDThreshold())
\r
1658 threshold = SliderPanel.setPIDSliderSource(alignPanel, cs,
\r
1661 cs.setThreshold(threshold,
\r
1662 viewport.getIgnoreGapsConsensus());
\r
1664 viewport.setGlobalColourScheme(cs);
\r
1668 cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
\r
1671 if (viewport.getConservationSelected())
\r
1674 Alignment al = (Alignment) viewport.alignment;
\r
1675 Conservation c = new Conservation("All",
\r
1676 ResidueProperties.propHash, 3,
\r
1677 al.getSequences(), 0,
\r
1678 al.getWidth() - 1);
\r
1681 c.verdict(false, viewport.ConsPercGaps);
\r
1683 cs.setConservation(c);
\r
1685 cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, cs,
\r
1690 cs.setConservation(null);
\r
1693 cs.setConsensus(viewport.vconsensus);
\r
1696 viewport.setGlobalColourScheme(cs);
\r
1698 if (viewport.getColourAppliesToAllGroups())
\r
1700 Vector groups = viewport.alignment.getGroups();
\r
1702 for (int i = 0; i < groups.size(); i++)
\r
1704 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
\r
1712 if (cs instanceof ClustalxColourScheme)
\r
1714 sg.cs = new ClustalxColourScheme(
\r
1715 sg.getSequences(true), sg.getWidth());
\r
1717 else if (cs instanceof UserColourScheme)
\r
1719 sg.cs = new UserColourScheme( ( (UserColourScheme) cs).getColours());
\r
1725 sg.cs = (ColourSchemeI) cs.getClass().newInstance();
\r
1727 catch (Exception ex)
\r
1732 if (viewport.getAbovePIDThreshold()
\r
1733 || cs instanceof PIDColourScheme
\r
1734 || cs instanceof Blosum62ColourScheme)
\r
1736 sg.cs.setThreshold(threshold,
\r
1737 viewport.getIgnoreGapsConsensus());
\r
1739 sg.cs.setConsensus(AAFrequency.calculate(
\r
1740 sg.getSequences(true), 0,
\r
1744 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
\r
1747 if (viewport.getConservationSelected())
\r
1749 Conservation c = new Conservation("Group",
\r
1750 ResidueProperties.propHash, 3,
\r
1751 sg.getSequences(true), 0,
\r
1752 viewport.alignment.getWidth() - 1);
\r
1754 c.verdict(false, viewport.ConsPercGaps);
\r
1755 sg.cs.setConservation(c);
\r
1758 sg.cs.setConservation(null);
\r
1762 if (alignPanel.getOverviewPanel() != null)
\r
1764 alignPanel.getOverviewPanel().updateOverviewImage();
\r
1767 alignPanel.repaint();
\r
1773 * @param e DOCUMENT ME!
\r
1775 protected void modifyPID_actionPerformed(ActionEvent e)
\r
1777 if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme!=null)
\r
1779 SliderPanel.setPIDSliderSource(alignPanel,
\r
1780 viewport.getGlobalColourScheme(),
\r
1782 SliderPanel.showPIDSlider();
\r
1789 * @param e DOCUMENT ME!
\r
1791 protected void modifyConservation_actionPerformed(ActionEvent e)
\r
1793 if (viewport.getConservationSelected() && viewport.globalColourScheme!=null)
\r
1795 SliderPanel.setConservationSlider(alignPanel,
\r
1796 viewport.globalColourScheme,
\r
1798 SliderPanel.showConservationSlider();
\r
1805 * @param e DOCUMENT ME!
\r
1807 protected void conservationMenuItem_actionPerformed(ActionEvent e)
\r
1809 viewport.setConservationSelected(conservationMenuItem.isSelected());
\r
1811 viewport.setAbovePIDThreshold(false);
\r
1812 abovePIDThreshold.setSelected(false);
\r
1814 changeColour(viewport.getGlobalColourScheme());
\r
1816 modifyConservation_actionPerformed(null);
\r
1822 * @param e DOCUMENT ME!
\r
1824 public void abovePIDThreshold_actionPerformed(ActionEvent e)
\r
1826 viewport.setAbovePIDThreshold(abovePIDThreshold.isSelected());
\r
1828 conservationMenuItem.setSelected(false);
\r
1829 viewport.setConservationSelected(false);
\r
1831 changeColour(viewport.getGlobalColourScheme());
\r
1833 modifyPID_actionPerformed(null);
\r
1839 * @param e DOCUMENT ME!
\r
1841 public void userDefinedColour_actionPerformed(ActionEvent e)
\r
1843 if (e.getActionCommand().equals("User Defined..."))
\r
1845 new UserDefinedColours(alignPanel, null);
\r
1849 UserColourScheme udc = (UserColourScheme) UserDefinedColours.
\r
1850 getUserColourSchemes().get(e.getActionCommand());
\r
1852 changeColour(udc);
\r
1856 public void updateUserColourMenu()
\r
1859 Component[] menuItems = colourMenu.getMenuComponents();
\r
1860 int i, iSize = menuItems.length;
\r
1861 for (i = 0; i < iSize; i++)
\r
1863 if (menuItems[i].getName() != null &&
\r
1864 menuItems[i].getName().equals("USER_DEFINED"))
\r
1866 colourMenu.remove(menuItems[i]);
\r
1870 if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null)
\r
1872 java.util.Enumeration userColours = jalview.gui.UserDefinedColours.
\r
1873 getUserColourSchemes().keys();
\r
1875 while (userColours.hasMoreElements())
\r
1877 final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(userColours.
\r
1878 nextElement().toString());
\r
1879 radioItem.setName("USER_DEFINED");
\r
1880 radioItem.addMouseListener(new MouseAdapter()
\r
1882 public void mousePressed(MouseEvent evt)
\r
1884 if(evt.isControlDown() || SwingUtilities.isRightMouseButton(evt))
\r
1886 radioItem.removeActionListener(radioItem.getActionListeners()[0]);
\r
1888 int option = JOptionPane.showInternalConfirmDialog(jalview.gui.Desktop.desktop,
\r
1889 "Remove from default list?",
\r
1890 "Remove user defined colour",
\r
1891 JOptionPane.YES_NO_OPTION);
\r
1892 if(option == JOptionPane.YES_OPTION)
\r
1894 jalview.gui.UserDefinedColours.removeColourFromDefaults(radioItem.getText());
\r
1895 colourMenu.remove(radioItem);
\r
1898 radioItem.addActionListener(new ActionListener()
\r
1900 public void actionPerformed(ActionEvent evt)
\r
1902 userDefinedColour_actionPerformed(evt);
\r
1908 radioItem.addActionListener(new ActionListener()
\r
1910 public void actionPerformed(ActionEvent evt)
\r
1912 userDefinedColour_actionPerformed(evt);
\r
1916 colourMenu.insert(radioItem, 15);
\r
1917 colours.add(radioItem);
\r
1925 * @param e DOCUMENT ME!
\r
1927 public void PIDColour_actionPerformed(ActionEvent e)
\r
1929 changeColour(new PIDColourScheme());
\r
1935 * @param e DOCUMENT ME!
\r
1937 public void BLOSUM62Colour_actionPerformed(ActionEvent e)
\r
1939 changeColour(new Blosum62ColourScheme());
\r
1945 * @param e DOCUMENT ME!
\r
1947 public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)
\r
1949 addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment,
\r
1950 HistoryItem.SORT));
\r
1951 AlignmentSorter.sortByPID(viewport.getAlignment(),
\r
1952 viewport.getAlignment().getSequenceAt(0));
\r
1953 alignPanel.repaint();
\r
1959 * @param e DOCUMENT ME!
\r
1961 public void sortIDMenuItem_actionPerformed(ActionEvent e)
\r
1963 addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
\r
1964 HistoryItem.SORT));
\r
1965 AlignmentSorter.sortByID(viewport.getAlignment());
\r
1966 alignPanel.repaint();
\r
1972 * @param e DOCUMENT ME!
\r
1974 public void sortGroupMenuItem_actionPerformed(ActionEvent e)
\r
1976 addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
\r
1977 HistoryItem.SORT));
\r
1979 AlignmentSorter.sortByGroup(viewport.getAlignment());
\r
1980 alignPanel.repaint();
\r
1986 * @param e DOCUMENT ME!
\r
1988 public void removeRedundancyMenuItem_actionPerformed(ActionEvent e)
\r
1990 new RedundancyPanel(alignPanel, this);
\r
1997 * @param e DOCUMENT ME!
\r
1999 public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)
\r
2001 if ( (viewport.getSelectionGroup() == null) ||
\r
2002 (viewport.getSelectionGroup().getSize(false) < 2))
\r
2004 JOptionPane.showInternalMessageDialog(this,
\r
2005 "You must select at least 2 sequences.",
\r
2006 "Invalid Selection",
\r
2007 JOptionPane.WARNING_MESSAGE);
\r
2011 JInternalFrame frame = new JInternalFrame();
\r
2012 frame.setContentPane(new PairwiseAlignPanel(viewport));
\r
2013 Desktop.addInternalFrame(frame, "Pairwise Alignment", 600, 500);
\r
2020 * @param e DOCUMENT ME!
\r
2022 public void PCAMenuItem_actionPerformed(ActionEvent e)
\r
2024 if ( ( (viewport.getSelectionGroup() != null) &&
\r
2025 (viewport.getSelectionGroup().getSize(false) < 4) &&
\r
2026 (viewport.getSelectionGroup().getSize(false) > 0)) ||
\r
2027 (viewport.getAlignment().getHeight() < 4))
\r
2029 JOptionPane.showInternalMessageDialog(this,
\r
2030 "Principal component analysis must take\n" +
\r
2031 "at least 4 input sequences.",
\r
2032 "Sequence selection insufficient",
\r
2033 JOptionPane.WARNING_MESSAGE);
\r
2038 new PCAPanel(viewport);
\r
2042 public void autoCalculate_actionPerformed(ActionEvent e)
\r
2044 viewport.autoCalculateConsensus = autoCalculate.isSelected();
\r
2045 if(viewport.autoCalculateConsensus)
\r
2047 alignmentChanged();
\r
2055 * @param e DOCUMENT ME!
\r
2057 public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)
\r
2059 NewTreePanel("AV", "PID", "Average distance tree using PID");
\r
2065 * @param e DOCUMENT ME!
\r
2067 public void neighbourTreeMenuItem_actionPerformed(ActionEvent e)
\r
2069 NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
\r
2075 * @param e DOCUMENT ME!
\r
2077 protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)
\r
2079 NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
\r
2085 * @param e DOCUMENT ME!
\r
2087 protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)
\r
2089 NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
\r
2095 * @param type DOCUMENT ME!
\r
2096 * @param pwType DOCUMENT ME!
\r
2097 * @param title DOCUMENT ME!
\r
2099 void NewTreePanel(String type, String pwType, String title)
\r
2103 if ( (viewport.getSelectionGroup() != null) &&
\r
2104 (viewport.getSelectionGroup().getSize(false) > 3))
\r
2107 SequenceGroup sg = viewport.getSelectionGroup();
\r
2109 /* Decide if the selection is a column region */
\r
2110 while (s < sg.getSize(false))
\r
2112 if ( ( (SequenceI) sg.getSequences(false).elementAt(s++)).getLength() <
\r
2115 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2116 "The selected region to create a tree may\nonly contain residues or gaps.\n" +
\r
2117 "Try using the Pad function in the edit menu,\n" +
\r
2118 "or one of the multiple sequence alignment web services.",
\r
2119 "Sequences in selection are not aligned",
\r
2120 JOptionPane.WARNING_MESSAGE);
\r
2126 title = title + " on region";
\r
2127 tp = new TreePanel(viewport, type, pwType);
\r
2131 //are the sequences aligned?
\r
2132 if (!viewport.alignment.isAligned())
\r
2134 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2135 "The sequences must be aligned before creating a tree.\n" +
\r
2136 "Try using the Pad function in the edit menu,\n" +
\r
2137 "or one of the multiple sequence alignment web services.",
\r
2138 "Sequences not aligned",
\r
2139 JOptionPane.WARNING_MESSAGE);
\r
2144 tp = new TreePanel(viewport, type, pwType);
\r
2147 addTreeMenuItem(tp, title);
\r
2149 Desktop.addInternalFrame(tp, title + " from " + this.title, 600, 500);
\r
2155 * @param title DOCUMENT ME!
\r
2156 * @param order DOCUMENT ME!
\r
2158 public void addSortByOrderMenuItem(String title, final AlignmentOrder order)
\r
2160 final JMenuItem item = new JMenuItem("by " + title);
\r
2162 item.addActionListener(new java.awt.event.ActionListener()
\r
2164 public void actionPerformed(ActionEvent e)
\r
2166 addHistoryItem(new HistoryItem("Sort", viewport.alignment,
\r
2167 HistoryItem.SORT));
\r
2169 // TODO: JBPNote - have to map order entries to curent SequenceI pointers
\r
2170 AlignmentSorter.sortBy(viewport.getAlignment(), order);
\r
2171 alignPanel.repaint();
\r
2177 * Maintain the Order by->Displayed Tree menu.
\r
2178 * Creates a new menu item for a TreePanel with an appropriate
\r
2179 * <code>jalview.analysis.AlignmentSorter</code> call. Listeners are added
\r
2180 * to remove the menu item when the treePanel is closed, and adjust
\r
2181 * the tree leaf to sequence mapping when the alignment is modified.
\r
2182 * @param treePanel Displayed tree window.
\r
2183 * @param title SortBy menu item title.
\r
2185 void addTreeMenuItem(final TreePanel treePanel, String title)
\r
2187 final JMenuItem item = new JMenuItem(title);
\r
2191 if (treeCount == 1)
\r
2193 sort.add(sortByTreeMenu);
\r
2196 sortByTreeMenu.add(item);
\r
2197 item.addActionListener(new java.awt.event.ActionListener()
\r
2199 public void actionPerformed(ActionEvent e)
\r
2201 addHistoryItem(new HistoryItem("Tree Sort",
\r
2202 viewport.alignment, HistoryItem.SORT));
\r
2203 AlignmentSorter.sortByTree(viewport.getAlignment(),
\r
2204 treePanel.getTree());
\r
2205 alignPanel.repaint();
\r
2209 treePanel.addInternalFrameListener(new javax.swing.event.
\r
2210 InternalFrameAdapter()
\r
2212 public void internalFrameClosed(
\r
2213 javax.swing.event.InternalFrameEvent evt)
\r
2216 sortByTreeMenu.remove(item);
\r
2218 if (treeCount == 0)
\r
2220 sort.remove(sortByTreeMenu);
\r
2228 * Work out whether the whole set of sequences
\r
2229 * or just the selected set will be submitted for multiple alignment.
\r
2232 private SequenceI[] gatherSequencesForAlignment()
\r
2234 // Now, check we have enough sequences
\r
2235 SequenceI[] msa = null;
\r
2237 if ( (viewport.getSelectionGroup() != null) &&
\r
2238 (viewport.getSelectionGroup().getSize(false) > 1))
\r
2240 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
\r
2241 SequenceGroup seqs = viewport.getSelectionGroup();
\r
2243 msa = new SequenceI[sz = seqs.getSize(false)];
\r
2245 for (int i = 0; i < sz; i++)
\r
2247 msa[i] = (SequenceI) seqs.getSequenceAt(i);
\r
2252 Vector seqs = viewport.getAlignment().getSequences();
\r
2254 if (seqs.size() > 1)
\r
2256 msa = new SequenceI[seqs.size()];
\r
2258 for (int i = 0; i < seqs.size(); i++)
\r
2260 msa[i] = (SequenceI) seqs.elementAt(i);
\r
2268 * Decides what is submitted to a secondary structure prediction service,
\r
2269 * the currently selected sequence, or the currently selected alignment
\r
2270 * (where the first sequence in the set is the one that the prediction
\r
2273 SequenceI[] gatherSeqOrMsaForSecStrPrediction()
\r
2275 SequenceI seq = null;
\r
2276 SequenceI[] msa = null;
\r
2278 if ( (viewport.getSelectionGroup() != null) &&
\r
2279 (viewport.getSelectionGroup().getSize(false) > 0))
\r
2281 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
\r
2282 SequenceGroup seqs = viewport.getSelectionGroup();
\r
2284 if ( (seqs.getSize(false) == 1) || !viewport.alignment.isAligned())
\r
2286 seq = (SequenceI) seqs.getSequenceAt(0);
\r
2291 msa = new SequenceI[sz = seqs.getSize(false)];
\r
2293 for (int i = 0; i < sz; i++)
\r
2295 msa[i] = (SequenceI) seqs.getSequenceAt(i);
\r
2301 Vector seqs = viewport.getAlignment().getSequences();
\r
2303 if ( (seqs.size() == 1) || !viewport.alignment.isAligned())
\r
2305 seq = (SequenceI) seqs.elementAt(0);
\r
2309 msa = new SequenceI[seqs.size()];
\r
2311 for (int i = 0; i < seqs.size(); i++)
\r
2313 msa[i] = (SequenceI) seqs.elementAt(i);
\r
2325 return new SequenceI[]
\r
2335 * @param e DOCUMENT ME!
\r
2337 protected void LoadtreeMenuItem_actionPerformed(ActionEvent e)
\r
2339 // Pick the tree file
\r
2340 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
2342 "LAST_DIRECTORY"));
\r
2343 chooser.setFileView(new JalviewFileView());
\r
2344 chooser.setDialogTitle("Select a newick-like tree file");
\r
2345 chooser.setToolTipText("Load a tree file");
\r
2347 int value = chooser.showOpenDialog(null);
\r
2349 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
2351 String choice = chooser.getSelectedFile().getPath();
\r
2352 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
2356 jalview.io.NewickFile fin = new jalview.io.NewickFile(choice,
\r
2358 viewport.setCurrentTree(ShowNewickTree(fin, choice).getTree());
\r
2360 catch (Exception ex)
\r
2362 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2363 "Problem reading tree file",
\r
2365 JOptionPane.WARNING_MESSAGE);
\r
2366 ex.printStackTrace();
\r
2372 public TreePanel ShowNewickTree(NewickFile nf, String title)
\r
2374 return ShowNewickTree(nf,title,600,500,4,5);
\r
2379 * @param nf DOCUMENT ME!
\r
2380 * @param title DOCUMENT ME!
\r
2382 * @return DOCUMENT ME!
\r
2384 public TreePanel ShowNewickTree(NewickFile nf, String title, int w,int h,int x, int y)
\r
2386 TreePanel tp = null;
\r
2392 if (nf.getTree() != null)
\r
2394 tp = new TreePanel(viewport,
\r
2402 tp.setLocation(x,y);
\r
2405 Desktop.addInternalFrame(tp, title, w, h);
\r
2406 addTreeMenuItem(tp, title);
\r
2409 catch (Exception ex)
\r
2411 ex.printStackTrace();
\r
2422 PrinterJob printJob = PrinterJob.getPrinterJob();
\r
2423 PageFormat pf = printJob.pageDialog(printJob.defaultPage());
\r
2424 printJob.setPrintable(alignPanel, pf);
\r
2426 if (printJob.printDialog())
\r
2432 catch (Exception PrintException)
\r
2434 PrintException.printStackTrace();
\r
2441 * Generates menu items and listener event actions for web service clients
\r
2444 public void BuildWebServiceMenu()
\r
2446 if ( (Discoverer.services != null)
\r
2447 && (Discoverer.services.size() > 0))
\r
2449 Vector msaws = (Vector) Discoverer.services.get("MsaWS");
\r
2450 Vector secstrpr = (Vector) Discoverer.services.get("SecStrPred");
\r
2451 Vector wsmenu = new Vector();
\r
2452 if (msaws != null)
\r
2454 // Add any Multiple Sequence Alignment Services
\r
2455 final JMenu msawsmenu = new JMenu("Alignment");
\r
2456 final AlignFrame af = this;
\r
2457 for (int i = 0, j = msaws.size(); i < j; i++)
\r
2459 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws.
\r
2461 final JMenuItem method = new JMenuItem(sh.getName());
\r
2462 method.addActionListener(new ActionListener()
\r
2464 public void actionPerformed(ActionEvent e)
\r
2466 SequenceI[] msa = gatherSequencesForAlignment();
\r
2467 new jalview.ws.MsaWSClient(sh, title, msa,
\r
2468 false, true, viewport.getAlignment().getDataset(), af);
\r
2473 msawsmenu.add(method);
\r
2474 // Deal with services that we know accept partial alignments.
\r
2475 if (sh.getName().indexOf("lustal") > -1)
\r
2477 // We know that ClustalWS can accept partial alignments for refinement.
\r
2478 final JMenuItem methodR = new JMenuItem(sh.getName()+" Realign");
\r
2479 methodR.addActionListener(new ActionListener()
\r
2481 public void actionPerformed(ActionEvent e)
\r
2483 SequenceI[] msa = gatherSequencesForAlignment();
\r
2484 new jalview.ws.MsaWSClient(sh, title, msa,
\r
2485 true, true, viewport.getAlignment().getDataset(), af);
\r
2490 msawsmenu.add(methodR);
\r
2494 wsmenu.add(msawsmenu);
\r
2496 if (secstrpr != null)
\r
2498 // Add any secondary structure prediction services
\r
2499 final JMenu secstrmenu = new JMenu("Secondary Structure Prediction");
\r
2500 for (int i = 0, j = secstrpr.size(); i < j; i++)
\r
2502 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle)
\r
2504 final JMenuItem method = new JMenuItem(sh.getName());
\r
2505 method.addActionListener(new ActionListener()
\r
2507 public void actionPerformed(ActionEvent e)
\r
2509 SequenceI[] msa = gatherSeqOrMsaForSecStrPrediction();
\r
2510 if (msa.length == 1)
\r
2512 // Single Sequence prediction
\r
2513 new jalview.ws.JPredClient(sh,title, msa[0]);
\r
2517 if (msa.length > 1)
\r
2519 // Single Sequence prediction
\r
2520 jalview.ws.JPredClient ct = new jalview.ws.JPredClient(sh,
\r
2526 secstrmenu.add(method);
\r
2528 wsmenu.add(secstrmenu);
\r
2530 this.webService.removeAll();
\r
2531 for (int i = 0, j = wsmenu.size(); i < j; i++)
\r
2533 webService.add( (JMenu) wsmenu.get(i));
\r
2538 this.webService.removeAll();
\r
2539 this.webService.add(this.webServiceNoServices);
\r
2541 // TODO: add in rediscovery function
\r
2542 // TODO: reduce code redundancy.
\r
2543 // TODO: group services by location as well as function.
\r
2546 /* public void vamsasStore_actionPerformed(ActionEvent e)
\r
2548 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
2549 getProperty("LAST_DIRECTORY"));
\r
2551 chooser.setFileView(new JalviewFileView());
\r
2552 chooser.setDialogTitle("Export to Vamsas file");
\r
2553 chooser.setToolTipText("Export");
\r
2555 int value = chooser.showSaveDialog(this);
\r
2557 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
2559 jalview.io.VamsasDatastore vs = new jalview.io.VamsasDatastore(viewport);
\r
2560 //vs.store(chooser.getSelectedFile().getAbsolutePath() );
\r
2561 vs.storeJalview( chooser.getSelectedFile().getAbsolutePath(), this);
\r
2569 public void showTranslation_actionPerformed(ActionEvent e)
\r
2571 SequenceI [] selection = viewport.getSelectionAsNewSequence();
\r
2572 String [] seqstring = viewport.getSelectionAsString();
\r
2574 int s, sSize = selection.length;
\r
2575 SequenceI [] newSeq = new SequenceI[sSize];
\r
2578 StringBuffer protein;
\r
2580 for(s=0; s<sSize; s++)
\r
2582 protein = new StringBuffer();
\r
2583 seq = AlignSeq.extractGaps("-. ", seqstring[s]);
\r
2584 resSize = seq.length();
\r
2585 resSize -= resSize%3;
\r
2587 for(res = 0; res < resSize; res+=3)
\r
2589 String codon = seq.substring(res, res+3);
\r
2590 codon = codon.replace('U', 'T');
\r
2591 String aa = ResidueProperties.codonTranslate(codon);
\r
2593 protein.append(viewport.getGapCharacter());
\r
2594 else if(aa.equals("STOP"))
\r
2595 protein.append("X");
\r
2597 protein.append( aa );
\r
2599 newSeq[s] = new Sequence(selection[s].getName(),
\r
2600 protein.toString());
\r
2604 AlignmentI al = new Alignment(newSeq);
\r
2605 al.setDataset(null);
\r
2608 ////////////////////////////////
\r
2609 // Copy annotations across
\r
2610 jalview.datamodel.AlignmentAnnotation[] annotations
\r
2611 = viewport.alignment.getAlignmentAnnotation();
\r
2613 if(annotations!=null)
\r
2615 for (int i = 0; i < annotations.length; i++)
\r
2617 if (annotations[i].label.equals("Quality") ||
\r
2618 annotations[i].label.equals("Conservation") ||
\r
2619 annotations[i].label.equals("Consensus"))
\r
2624 aSize = viewport.alignment.getWidth() / 3;
\r
2625 jalview.datamodel.Annotation[] anots =
\r
2626 new jalview.datamodel.Annotation[aSize];
\r
2628 for (a = 0; a < viewport.alignment.getWidth(); a++)
\r
2630 if (annotations[i].annotations[a] == null
\r
2631 || annotations[i].annotations[a] == null)
\r
2634 anots[a / 3] = new Annotation(
\r
2635 annotations[i].annotations[a].displayCharacter,
\r
2636 annotations[i].annotations[a].description,
\r
2637 annotations[i].annotations[a].secondaryStructure,
\r
2638 annotations[i].annotations[a].value,
\r
2639 annotations[i].annotations[a].colour);
\r
2642 jalview.datamodel.AlignmentAnnotation aa
\r
2643 = new jalview.datamodel.AlignmentAnnotation(annotations[i].label,
\r
2644 annotations[i].description, anots);
\r
2645 al.addAnnotation(aa);
\r
2649 AlignFrame af = new AlignFrame(al);
\r
2650 Desktop.addInternalFrame(af, "Translation of "+this.getTitle(),
\r
2652 NEW_WINDOW_HEIGHT);
\r
2655 // AlignViewport newViewport = new AlignViewport(al);
\r
2656 // AlignmentPanel ap = new AlignmentPanel(this, newViewport);
\r
2657 // tabbedPane.add("Protein", ap);
\r
2658 // viewports.add(newViewport);
\r
2659 // alignPanels.add(ap);
\r
2662 /////////////////////////
\r
2664 // AlignViewport ds = new AlignViewport(al.getDataset());
\r
2665 // ds.setDataset(true);
\r
2666 // AlignmentPanel dap = new AlignmentPanel(this, ds);
\r
2667 // tabbedPane.add("Dataset", dap);
\r
2668 // viewports.add(ds);
\r
2669 // alignPanels.add(dap);
\r
2670 /////////////////////////
\r
2675 /*public void tabSelected()
\r
2677 int index = tabbedPane.getSelectedIndex();
\r
2678 viewport = (AlignViewport)viewports.elementAt(index);
\r
2679 alignPanel = (AlignmentPanel)alignPanels.elementAt(index);
\r
2685 * @param String DOCUMENT ME!
\r
2687 public boolean parseFeaturesFile(String file, String type)
\r
2689 boolean featuresFile = false;
\r
2691 featuresFile = new FeaturesFile(file, type).parse(viewport.alignment.getDataset(),
\r
2692 alignPanel.seqPanel.seqCanvas.
\r
2693 getFeatureRenderer().featureColours,
\r
2696 catch(Exception ex)
\r
2698 ex.printStackTrace();
\r
2703 viewport.showSequenceFeatures = true;
\r
2704 showSeqFeatures.setSelected(true);
\r
2705 alignPanel.repaint();
\r
2708 return featuresFile;
\r
2711 public void dragEnter(DropTargetDragEvent evt)
\r
2714 public void dragExit(DropTargetEvent evt)
\r
2717 public void dragOver(DropTargetDragEvent evt)
\r
2720 public void dropActionChanged(DropTargetDragEvent evt)
\r
2723 public void drop(DropTargetDropEvent evt)
\r
2725 Transferable t = evt.getTransferable();
\r
2726 java.util.List files = null;
\r
2730 DataFlavor uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String");
\r
2731 if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
\r
2733 //Works on Windows and MacOSX
\r
2734 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
2735 files = (java.util.List) t.getTransferData(DataFlavor.javaFileListFlavor);
\r
2737 else if (t.isDataFlavorSupported(uriListFlavor))
\r
2739 // This is used by Unix drag system
\r
2740 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
2741 String data = (String) t.getTransferData(uriListFlavor);
\r
2742 files = new java.util.ArrayList(1);
\r
2743 for (java.util.StringTokenizer st = new java.util.StringTokenizer(
\r
2746 st.hasMoreTokens(); )
\r
2748 String s = st.nextToken();
\r
2749 if (s.startsWith("#"))
\r
2751 // the line is a comment (as per the RFC 2483)
\r
2755 java.net.URI uri = new java.net.URI(s);
\r
2756 java.io.File file = new java.io.File(uri);
\r
2761 catch (Exception e)
\r
2763 e.printStackTrace();
\r
2765 if (files != null)
\r
2770 for (int i = 0; i < files.size(); i++)
\r
2772 loadJalviewDataFile(files.get(i).toString());
\r
2775 catch (Exception ex)
\r
2777 ex.printStackTrace();
\r
2782 // This method will attempt to load a "dropped" file first by testing
\r
2783 // whether its and Annotation file, then features file. If both are
\r
2784 // false then the user may have dropped an alignment file onto this
\r
2786 public void loadJalviewDataFile(String file)
\r
2789 boolean isAnnotation = new AnnotationFile().readAnnotationFile(viewport.
\r
2792 if (!isAnnotation)
\r
2794 boolean isGroupsFile = parseFeaturesFile(file,
\r
2795 AppletFormatAdapter.FILE);
\r
2796 if (!isGroupsFile)
\r
2798 String protocol = "File";
\r
2799 String format = new IdentifyFile().Identify(file, protocol);
\r
2800 SequenceI[] sequences = new FormatAdapter().readFile(file, protocol,
\r
2803 FastaFile ff = new FastaFile();
\r
2804 Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
\r
2805 c.setContents(new StringSelection(ff.print(sequences)), Desktop.instance);
\r
2807 this.paste(false);
\r
2813 alignPanel.adjustAnnotationHeight();
\r
2816 }catch(Exception ex)
\r
2818 ex.printStackTrace();
\r