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
44 * @version $Revision$
\r
46 public class AlignFrame
\r
47 extends GAlignFrame implements DropTargetListener, FeatureListener
\r
49 /** DOCUMENT ME!! */
\r
50 public static final int NEW_WINDOW_WIDTH = 700;
\r
52 /** DOCUMENT ME!! */
\r
53 public static final int NEW_WINDOW_HEIGHT = 500;
\r
54 AlignmentPanel alignPanel;
\r
55 AlignViewport viewport;
\r
57 /** DOCUMENT ME!! */
\r
58 public String currentFileFormat = null;
\r
59 Stack historyList = new Stack();
\r
60 Stack redoList = new Stack();
\r
61 private int treeCount = 0;
\r
64 * new alignment window with hidden columns
\r
65 * @param al AlignmentI
\r
66 * @param hiddenColumns ColumnSelection or null
\r
68 public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns) {
\r
70 viewport = new AlignViewport(al, hiddenColumns);
\r
72 this.setDropTarget(new java.awt.dnd.DropTarget(this, this));
\r
74 if(viewport.vconsensus==null)
\r
76 //Out of memory calculating consensus.
\r
77 BLOSUM62Colour.setEnabled(false);
\r
78 PIDColour.setEnabled(false);
\r
79 conservationMenuItem.setEnabled(false);
\r
80 modifyConservation.setEnabled(false);
\r
81 abovePIDThreshold.setEnabled(false);
\r
82 modifyPID.setEnabled(false);
\r
85 alignPanel = new AlignmentPanel(this, viewport);
\r
87 String sortby = jalview.bin.Cache.getDefault("SORT_ALIGNMENT", "No sort");
\r
89 if(sortby.equals("Id"))
\r
90 sortIDMenuItem_actionPerformed(null);
\r
91 else if(sortby.equals("Pairwise Identity"))
\r
92 sortPairwiseMenuItem_actionPerformed(null);
\r
94 // remove(tabbedPane);
\r
95 getContentPane().add(alignPanel, BorderLayout.CENTER);
\r
99 // tabbedPane.add(al.isNucleotide() ? "DNA":"Protein", alignPanel);
\r
102 /////////////////////////
\r
103 if(al.getDataset()==null)
\r
105 al.setDataset(null);
\r
107 // AlignViewport ds = new AlignViewport(al.getDataset(), true);
\r
108 // AlignmentPanel dap = new AlignmentPanel(this, ds);
\r
109 // tabbedPane.add("Dataset", dap);
\r
110 // viewports.add(ds);
\r
111 // alignPanels.add(dap);
\r
112 /////////////////////////
\r
115 viewport.addPropertyChangeListener(new PropertyChangeListener()
\r
117 public void propertyChange(PropertyChangeEvent evt)
\r
119 if (evt.getPropertyName().equals("alignment"))
\r
121 alignmentChanged();
\r
127 if (Desktop.desktop != null)
\r
129 addServiceListeners();
\r
130 setGUINucleotide(al.isNucleotide());
\r
134 if (jalview.bin.Cache.getDefault("WRAP_ALIGNMENT", false))
\r
136 wrapMenuItem.setSelected(true);
\r
137 wrapMenuItem_actionPerformed(null);
\r
144 * Creates a new AlignFrame object.
\r
146 * @param al DOCUMENT ME!
\r
148 public AlignFrame(AlignmentI al)
\r
153 public AlignViewport getViewport()
\r
158 /* Set up intrinsic listeners for dynamically generated GUI bits. */
\r
159 private void addServiceListeners()
\r
161 final java.beans.PropertyChangeListener thisListener;
\r
162 // Do this once to get current state
\r
163 BuildWebServiceMenu();
\r
164 Desktop.discoverer.addPropertyChangeListener(
\r
165 thisListener = new java.beans.PropertyChangeListener()
\r
167 public void propertyChange(PropertyChangeEvent evt)
\r
169 // System.out.println("Discoverer property change.");
\r
170 if (evt.getPropertyName().equals("services"))
\r
172 // System.out.println("Rebuilding web service menu");
\r
173 BuildWebServiceMenu();
\r
177 addInternalFrameListener(new javax.swing.event.
\r
178 InternalFrameAdapter()
\r
180 public void internalFrameClosed(
\r
181 javax.swing.event.InternalFrameEvent evt)
\r
183 // System.out.println("deregistering discoverer listener");
\r
184 Desktop.discoverer.removePropertyChangeListener(thisListener);
\r
185 closeMenuItem_actionPerformed(null);
\r
191 public void setGUINucleotide(boolean nucleotide)
\r
193 showTranslation.setVisible( nucleotide );
\r
194 //sequenceFeatures.setVisible(!nucleotide );
\r
195 //featureSettings.setVisible( !nucleotide );
\r
196 conservationMenuItem.setVisible( !nucleotide );
\r
197 modifyConservation.setVisible( !nucleotide );
\r
199 //Remember AlignFrame always starts as protein
\r
202 calculateMenu.remove(calculateMenu.getItemCount()-2);
\r
206 public void comeBackLater(FeatureEvent evt)
\r
209 public void newFeatures(FeatureEvent evt)
\r
211 if (evt.getFeatures().length > 0)
\r
213 alignPanel.seqPanel.seqCanvas.fr.featuresAdded();
\r
214 alignPanel.repaint();
\r
215 if(featureSettings!=null)
\r
216 featureSettings.setTableData();
\r
220 Hashtable progressBars;
\r
221 public void setProgressBar(String message, long id)
\r
223 if(progressBars == null)
\r
224 progressBars = new Hashtable();
\r
226 JPanel progressPanel;
\r
227 GridLayout layout = (GridLayout) statusPanel.getLayout();
\r
228 if(progressBars.get( new Long(id) )!=null)
\r
230 progressPanel = (JPanel)progressBars.get( new Long(id) );
\r
231 statusPanel.remove(progressPanel);
\r
232 progressBars.remove( progressPanel );
\r
233 progressPanel = null;
\r
235 statusBar.setText(message);
\r
237 layout.setRows(layout.getRows() - 1);
\r
241 progressPanel = new JPanel(new BorderLayout(10, 5));
\r
243 JProgressBar progressBar = new JProgressBar();
\r
244 progressBar.setIndeterminate(true);
\r
246 progressPanel.add(new JLabel(message), BorderLayout.WEST);
\r
247 progressPanel.add(progressBar, BorderLayout.CENTER);
\r
249 layout.setRows(layout.getRows() + 1);
\r
250 statusPanel.add(progressPanel);
\r
252 progressBars.put(new Long(id), progressPanel);
\r
260 Added so Castor Mapping file can obtain Jalview Version
\r
262 public String getVersion()
\r
264 return jalview.bin.Cache.getProperty("VERSION");
\r
267 public FeatureRenderer getFeatureRenderer()
\r
269 return alignPanel.seqPanel.seqCanvas.getFeatureRenderer();
\r
273 public void fetchSequence_actionPerformed(ActionEvent e)
\r
275 new SequenceFetcher(this);
\r
278 public void addFromFile_actionPerformed(ActionEvent e)
\r
280 Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport);
\r
283 public void addFromText_actionPerformed(ActionEvent e)
\r
285 Desktop.instance.inputTextboxMenuItem_actionPerformed(viewport);
\r
288 public void addFromURL_actionPerformed(ActionEvent e)
\r
290 Desktop.instance.inputURLMenuItem_actionPerformed(viewport);
\r
296 * @param e DOCUMENT ME!
\r
298 public void saveAlignmentMenu_actionPerformed(ActionEvent e)
\r
300 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
301 getProperty( "LAST_DIRECTORY"),
\r
303 { "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc","jar" },
\r
305 { "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "Jalview" },
\r
310 chooser.setFileView(new JalviewFileView());
\r
311 chooser.setDialogTitle("Save Alignment to file");
\r
312 chooser.setToolTipText("Save");
\r
314 int value = chooser.showSaveDialog(this);
\r
316 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
318 currentFileFormat = chooser.getSelectedFormat();
\r
320 if (currentFileFormat == null)
\r
322 JOptionPane.showInternalMessageDialog(Desktop.desktop,
\r
323 "You must select a file format before saving!",
\r
324 "File format not specified",
\r
325 JOptionPane.WARNING_MESSAGE);
\r
326 value = chooser.showSaveDialog(this);
\r
330 jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT",
\r
331 currentFileFormat);
\r
333 String choice = chooser.getSelectedFile().getPath();
\r
334 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
336 saveAlignment(choice, currentFileFormat);
\r
340 public boolean saveAlignment(String file, String format)
\r
342 if (format.equalsIgnoreCase("Jalview"))
\r
344 String shortName = title;
\r
346 if (shortName.indexOf(java.io.File.separatorChar) > -1)
\r
348 shortName = shortName.substring(shortName.lastIndexOf(
\r
349 java.io.File.separatorChar) + 1);
\r
352 new Jalview2XML().SaveAlignment(this, file, shortName);
\r
354 // USE Jalview2XML to save this file
\r
360 String[] omitHidden = null;
\r
362 if (viewport.hasHiddenColumns)
\r
364 int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,
\r
365 "The Alignment contains hidden columns."
\r
366 + "\nDo you want to save only the visible alignment?",
\r
367 "Save / Omit Hidden Columns",
\r
368 JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
\r
370 if (reply == JOptionPane.YES_OPTION)
\r
371 omitHidden = viewport.getViewAsString(false);
\r
374 String output = new FormatAdapter().formatSequences(
\r
376 viewport.alignment.getSequencesArray(),
\r
379 if (output == null)
\r
386 java.io.PrintWriter out = new java.io.PrintWriter(
\r
387 new java.io.FileWriter(file));
\r
391 this.setTitle(file);
\r
394 catch (Exception ex)
\r
396 ex.printStackTrace();
\r
405 * @param e DOCUMENT ME!
\r
407 protected void outputText_actionPerformed(ActionEvent e)
\r
409 String [] omitHidden = null;
\r
411 if(viewport.hasHiddenColumns)
\r
413 int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,
\r
414 "The Alignment contains hidden columns."
\r
415 +"\nDo you want to output only the visible alignment?",
\r
416 "Save / Omit Hidden Columns",
\r
417 JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
\r
419 if(reply==JOptionPane.YES_OPTION)
\r
421 omitHidden = viewport.getViewAsString(false);
\r
425 CutAndPasteTransfer cap = new CutAndPasteTransfer();
\r
426 Desktop.addInternalFrame(cap,
\r
427 "Alignment output - " + e.getActionCommand(), 600,
\r
431 cap.setText(new FormatAdapter().formatSequences(
\r
432 e.getActionCommand(),
\r
433 viewport.alignment.getSequencesArray(),
\r
440 * @param e DOCUMENT ME!
\r
442 protected void htmlMenuItem_actionPerformed(ActionEvent e)
\r
444 new HTMLOutput(viewport,
\r
445 alignPanel.seqPanel.seqCanvas.getSequenceRenderer(),
\r
446 alignPanel.seqPanel.seqCanvas.getFeatureRenderer());
\r
449 public void createImageMap(File file, String image)
\r
451 alignPanel.makePNGImageMap(file, image);
\r
457 * @param e DOCUMENT ME!
\r
459 public void createPNG(File f)
\r
461 alignPanel.makePNG(f);
\r
467 * @param e DOCUMENT ME!
\r
469 public void createEPS(File f)
\r
471 alignPanel.makeEPS(f);
\r
477 * @param e DOCUMENT ME!
\r
479 public void printMenuItem_actionPerformed(ActionEvent e)
\r
481 //Putting in a thread avoids Swing painting problems
\r
482 PrintThread thread = new PrintThread();
\r
486 public void exportFeatures_actionPerformed(ActionEvent e)
\r
488 new AnnotationExporter().exportFeatures(alignPanel);
\r
492 public void exportAnnotations_actionPerformed(ActionEvent e)
\r
494 new AnnotationExporter().exportAnnotations(
\r
496 viewport.alignment.getAlignmentAnnotation()
\r
501 public void associatedData_actionPerformed(ActionEvent e)
\r
503 // Pick the tree file
\r
504 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
506 "LAST_DIRECTORY"));
\r
507 chooser.setFileView(new JalviewFileView());
\r
508 chooser.setDialogTitle("Load Jalview Annotations or Features File");
\r
509 chooser.setToolTipText("Load Jalview Annotations / Features file");
\r
511 int value = chooser.showOpenDialog(null);
\r
513 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
515 String choice = chooser.getSelectedFile().getPath();
\r
516 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
517 loadJalviewDataFile(choice);
\r
525 * @param e DOCUMENT ME!
\r
527 public void closeMenuItem_actionPerformed(ActionEvent e)
\r
531 PaintRefresher.components.remove(viewport.alignment);
\r
532 this.setClosed(true);
\r
534 catch (Exception ex)
\r
542 void updateEditMenuBar()
\r
544 if (historyList.size() > 0)
\r
546 undoMenuItem.setEnabled(true);
\r
548 HistoryItem hi = (HistoryItem) historyList.peek();
\r
549 undoMenuItem.setText("Undo " + hi.getDescription());
\r
553 undoMenuItem.setEnabled(false);
\r
554 undoMenuItem.setText("Undo");
\r
557 if (redoList.size() > 0)
\r
559 redoMenuItem.setEnabled(true);
\r
561 HistoryItem hi = (HistoryItem) redoList.peek();
\r
562 redoMenuItem.setText("Redo " + hi.getDescription());
\r
566 redoMenuItem.setEnabled(false);
\r
567 redoMenuItem.setText("Redo");
\r
574 * @param hi DOCUMENT ME!
\r
576 public void addHistoryItem(HistoryItem hi)
\r
578 historyList.push(hi);
\r
579 updateEditMenuBar();
\r
585 * @param e DOCUMENT ME!
\r
587 protected void undoMenuItem_actionPerformed(ActionEvent e)
\r
589 HistoryItem hi = (HistoryItem) historyList.pop();
\r
590 redoList.push(new HistoryItem(hi.getDescription(), viewport.alignment,
\r
591 HistoryItem.HIDE));
\r
592 restoreHistoryItem(hi);
\r
593 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
599 * @param e DOCUMENT ME!
\r
601 protected void redoMenuItem_actionPerformed(ActionEvent e)
\r
603 HistoryItem hi = (HistoryItem) redoList.pop();
\r
604 restoreHistoryItem(hi);
\r
605 updateEditMenuBar();
\r
606 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
609 // used by undo and redo
\r
610 void restoreHistoryItem(HistoryItem hi)
\r
615 updateEditMenuBar();
\r
617 viewport.firePropertyChange("alignment", null,
\r
618 viewport.getAlignment().getSequences());
\r
624 * @param up DOCUMENT ME!
\r
626 public void moveSelectedSequences(boolean up)
\r
628 SequenceGroup sg = viewport.getSelectionGroup();
\r
637 for (int i = 1; i < viewport.alignment.getHeight(); i++)
\r
639 SequenceI seq = viewport.alignment.getSequenceAt(i);
\r
641 if (!sg.getSequences(false).contains(seq))
\r
646 SequenceI temp = viewport.alignment.getSequenceAt(i - 1);
\r
648 if (sg.getSequences(false).contains(temp))
\r
653 viewport.alignment.getSequences().setElementAt(temp, i);
\r
654 viewport.alignment.getSequences().setElementAt(seq, i - 1);
\r
659 for (int i = viewport.alignment.getHeight() - 2; i > -1; i--)
\r
661 SequenceI seq = viewport.alignment.getSequenceAt(i);
\r
663 if (!sg.getSequences(false).contains(seq))
\r
668 SequenceI temp = viewport.alignment.getSequenceAt(i + 1);
\r
670 if (sg.getSequences(false).contains(temp))
\r
675 viewport.alignment.getSequences().setElementAt(temp, i);
\r
676 viewport.alignment.getSequences().setElementAt(seq, i + 1);
\r
680 alignPanel.repaint();
\r
688 * @param e DOCUMENT ME!
\r
690 protected void copy_actionPerformed(ActionEvent e)
\r
692 if (viewport.getSelectionGroup() == null)
\r
697 SequenceI [] seqs = viewport.getSelectionAsNewSequence();
\r
698 String[] omitHidden = null;
\r
700 if (viewport.hasHiddenColumns)
\r
702 omitHidden = viewport.getViewAsString(true);
\r
705 String output = new FormatAdapter().formatSequences(
\r
711 Toolkit.getDefaultToolkit().getSystemClipboard()
\r
712 .setContents(new StringSelection(output), Desktop.instance);
\r
714 Vector hiddenColumns = null;
\r
715 if(viewport.hasHiddenColumns)
\r
717 hiddenColumns =new Vector();
\r
718 int hiddenOffset = viewport.getSelectionGroup().getStartRes();
\r
719 for(int i=0; i<viewport.getColumnSelection().getHiddenColumns().size(); i++)
\r
721 int[] region = (int[])
\r
722 viewport.getColumnSelection().getHiddenColumns().elementAt(i);
\r
724 hiddenColumns.addElement(new int[]{region[0]-hiddenOffset,
\r
725 region[1]-hiddenOffset});
\r
729 Desktop.jalviewClipboard = new Object[]{ seqs,
\r
730 viewport.alignment.getDataset(),
\r
737 * @param e DOCUMENT ME!
\r
739 protected void pasteNew_actionPerformed(ActionEvent e)
\r
747 * @param e DOCUMENT ME!
\r
749 protected void pasteThis_actionPerformed(ActionEvent e)
\r
751 addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment,
\r
752 HistoryItem.PASTE));
\r
759 * @param newAlignment DOCUMENT ME!
\r
761 void paste(boolean newAlignment)
\r
765 Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
\r
766 Transferable contents = c.getContents(this);
\r
768 if (contents == null)
\r
773 String str = (String) contents.getTransferData(DataFlavor.stringFlavor);
\r
777 String format = new IdentifyFile().Identify(str, "Paste");
\r
778 SequenceI[] sequences;
\r
781 if(Desktop.jalviewClipboard!=null)
\r
783 // The clipboard was filled from within Jalview, we must use the sequences
\r
784 // And dataset from the copied alignment
\r
785 sequences = (SequenceI[])Desktop.jalviewClipboard[0];
\r
789 sequences = new FormatAdapter().readFile(str, "Paste", format);
\r
792 AlignmentI alignment = null;
\r
796 alignment = new Alignment(sequences);
\r
798 if(Desktop.jalviewClipboard!=null)
\r
799 alignment.setDataset( (Alignment)Desktop.jalviewClipboard[1] );
\r
801 alignment.setDataset( null );
\r
806 alignment = viewport.getAlignment();
\r
809 for (int i = 0; i < sequences.length; i++)
\r
811 Sequence newseq = new Sequence(sequences[i].getName(),
\r
812 sequences[i].getSequence(), sequences[i].getStart(),
\r
813 sequences[i].getEnd());
\r
815 alignment.addSequence(newseq);
\r
819 viewport.setEndSeq(alignment.getHeight());
\r
820 alignment.getWidth();
\r
821 viewport.firePropertyChange("alignment", null, alignment.getSequences());
\r
828 // Add any annotations attached to sequences
\r
829 for (int i = 0; i < sequences.length; i++)
\r
831 if (sequences[i].getAnnotation() != null)
\r
833 for (int a = 0; a < sequences[i].getAnnotation().length; a++)
\r
835 AlignmentAnnotation newAnnot =
\r
836 new AlignmentAnnotation(
\r
837 sequences[i].getAnnotation()[a].label,
\r
838 sequences[i].getAnnotation()[a].description,
\r
839 sequences[i].getAnnotation()[a].annotations,
\r
840 sequences[i].getAnnotation()[a].graphMin,
\r
841 sequences[i].getAnnotation()[a].graphMax,
\r
842 sequences[i].getAnnotation()[a].graph);
\r
844 sequences[i].getAnnotation()[a] = newAnnot;
\r
845 newAnnot.sequenceMapping = sequences[i].getAnnotation()[a].
\r
847 newAnnot.sequenceRef = sequences[i];
\r
848 newAnnot.adjustForAlignment();
\r
849 alignment.addAnnotation(newAnnot);
\r
850 alignment.setAnnotationIndex(newAnnot, a);
\r
853 alignPanel.annotationPanel.adjustPanelHeight();
\r
859 AlignFrame af = new AlignFrame(alignment);
\r
860 String newtitle = new String("Copied sequences");
\r
862 if(Desktop.jalviewClipboard!=null && Desktop.jalviewClipboard[2]!=null)
\r
864 Vector hc = (Vector)Desktop.jalviewClipboard[2];
\r
865 for(int i=0; i<hc.size(); i++)
\r
867 int [] region = (int[]) hc.elementAt(i);
\r
868 af.viewport.hideColumns(region[0], region[1]);
\r
873 //>>>This is a fix for the moment, until a better solution is found!!<<<
\r
874 af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().transferSettings(
\r
875 alignPanel.seqPanel.seqCanvas.getFeatureRenderer());
\r
878 if (title.startsWith("Copied sequences"))
\r
884 newtitle = newtitle.concat("- from " + title);
\r
887 Desktop.addInternalFrame(af, newtitle, NEW_WINDOW_WIDTH,
\r
888 NEW_WINDOW_HEIGHT);
\r
894 catch (Exception ex)
\r
896 ex.printStackTrace();
\r
897 System.out.println("Exception whilst pasting: "+ex);
\r
898 // could be anything being pasted in here
\r
907 * @param e DOCUMENT ME!
\r
909 protected void cut_actionPerformed(ActionEvent e)
\r
911 copy_actionPerformed(null);
\r
912 delete_actionPerformed(null);
\r
918 * @param e DOCUMENT ME!
\r
920 protected void delete_actionPerformed(ActionEvent e)
\r
923 if (viewport.getSelectionGroup() == null)
\r
929 SequenceGroup sg = viewport.getSelectionGroup();
\r
933 //Jalview no longer allows deletion of residues.
\r
934 //Check here whether any residues are in selection area
\r
935 /* if( sg.getEndRes()-sg.getStartRes() < viewport.alignment.getWidth()-1)
\r
937 for (int i = 0; i < sg.sequences.size(); i++)
\r
939 SequenceI seq = sg.getSequenceAt(i);
\r
940 int j = sg.getStartRes();
\r
943 if (!jalview.util.Comparison.isGap(seq.getCharAt(j)))
\r
945 JOptionPane.showInternalMessageDialog(
\r
946 Desktop.desktop, "Cannot delete residues from alignment!\n"
\r
947 + "Try hiding columns instead.",
\r
948 "Deletion of residues not permitted",
\r
949 JOptionPane.WARNING_MESSAGE);
\r
954 }while(j<=sg.getEndRes());
\r
959 addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment,
\r
960 HistoryItem.HIDE));
\r
963 for (int i = 0; i < sg.getSize(false); i++)
\r
965 SequenceI seq = sg.getSequenceAt(i);
\r
966 int index = viewport.getAlignment().findIndex(seq);
\r
968 seq.deleteChars(sg.getStartRes(), sg.getEndRes() + 1);
\r
970 // If the cut affects all sequences, remove highlighted columns
\r
971 if (sg.getSize(false) == viewport.alignment.getHeight())
\r
973 viewport.getColumnSelection().removeElements(sg.getStartRes(),
\r
974 sg.getEndRes() + 1);
\r
977 if (seq.getSequence().length() < 1)
\r
979 viewport.getAlignment().deleteSequence(seq);
\r
983 viewport.getAlignment().getSequences().setElementAt(seq, index);
\r
987 viewport.setSelectionGroup(null);
\r
988 viewport.alignment.deleteGroup(sg);
\r
990 viewport.firePropertyChange("alignment", null,
\r
991 viewport.getAlignment().getSequences());
\r
995 if (viewport.getAlignment().getHeight() < 1)
\r
999 this.setClosed(true);
\r
1001 catch (Exception ex)
\r
1010 * @param e DOCUMENT ME!
\r
1012 protected void deleteGroups_actionPerformed(ActionEvent e)
\r
1014 viewport.alignment.deleteAllGroups();
\r
1015 viewport.setSelectionGroup(null);
\r
1016 alignPanel.repaint();
\r
1022 * @param e DOCUMENT ME!
\r
1024 public void selectAllSequenceMenuItem_actionPerformed(ActionEvent e)
\r
1026 SequenceGroup sg = new SequenceGroup();
\r
1028 for (int i = 0; i < viewport.getAlignment().getSequences().size();
\r
1031 sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);
\r
1034 sg.setEndRes(viewport.alignment.getWidth() - 1);
\r
1035 viewport.setSelectionGroup(sg);
\r
1036 PaintRefresher.Refresh(null, viewport.alignment);
\r
1042 * @param e DOCUMENT ME!
\r
1044 public void deselectAllSequenceMenuItem_actionPerformed(ActionEvent e)
\r
1046 if(viewport.cursorMode)
\r
1048 alignPanel.seqPanel.keyboardNo1 = null;
\r
1049 alignPanel.seqPanel.keyboardNo2 = null;
\r
1051 viewport.setSelectionGroup(null);
\r
1052 viewport.getColumnSelection().clear();
\r
1053 viewport.setSelectionGroup(null);
\r
1054 alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);
\r
1055 alignPanel.idPanel.idCanvas.searchResults = null;
\r
1056 alignPanel.repaint();
\r
1057 PaintRefresher.Refresh(null, viewport.alignment);
\r
1063 * @param e DOCUMENT ME!
\r
1065 public void invertSequenceMenuItem_actionPerformed(ActionEvent e)
\r
1067 SequenceGroup sg = viewport.getSelectionGroup();
\r
1071 selectAllSequenceMenuItem_actionPerformed(null);
\r
1076 for (int i = 0; i < viewport.getAlignment().getSequences().size();
\r
1079 sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false);
\r
1082 PaintRefresher.Refresh(null, viewport.alignment);
\r
1085 public void invertColSel_actionPerformed(ActionEvent e)
\r
1087 viewport.invertColumnSelection();
\r
1088 alignPanel.repaint();
\r
1095 * @param e DOCUMENT ME!
\r
1097 public void remove2LeftMenuItem_actionPerformed(ActionEvent e)
\r
1099 ColumnSelection colSel = viewport.getColumnSelection();
\r
1101 if (colSel.size() > 0)
\r
1103 addHistoryItem(new HistoryItem("Remove Left", viewport.alignment,
\r
1104 HistoryItem.HIDE));
\r
1106 int min = colSel.getMin();
\r
1107 viewport.getAlignment().trimLeft(min);
\r
1108 colSel.compensateForEdit(0, min);
\r
1110 if (viewport.getSelectionGroup() != null)
\r
1112 viewport.getSelectionGroup().adjustForRemoveLeft(min);
\r
1115 Vector groups = viewport.alignment.getGroups();
\r
1117 for (int i = 0; i < groups.size(); i++)
\r
1119 SequenceGroup sg = (SequenceGroup) groups.get(i);
\r
1121 if (!sg.adjustForRemoveLeft(min))
\r
1123 viewport.alignment.deleteGroup(sg);
\r
1127 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1134 * @param e DOCUMENT ME!
\r
1136 public void remove2RightMenuItem_actionPerformed(ActionEvent e)
\r
1138 ColumnSelection colSel = viewport.getColumnSelection();
\r
1140 if (colSel.size() > 0)
\r
1142 addHistoryItem(new HistoryItem("Remove Right", viewport.alignment,
\r
1143 HistoryItem.HIDE));
\r
1145 int max = colSel.getMax();
\r
1146 viewport.getAlignment().trimRight(max);
\r
1148 if (viewport.getSelectionGroup() != null)
\r
1150 viewport.getSelectionGroup().adjustForRemoveRight(max);
\r
1153 Vector groups = viewport.alignment.getGroups();
\r
1155 for (int i = 0; i < groups.size(); i++)
\r
1157 SequenceGroup sg = (SequenceGroup) groups.get(i);
\r
1159 if (!sg.adjustForRemoveRight(max))
\r
1161 viewport.alignment.deleteGroup(sg);
\r
1165 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1172 * @param e DOCUMENT ME!
\r
1174 public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e)
\r
1176 addHistoryItem(new HistoryItem("Remove Gapped Columns",
\r
1177 viewport.alignment, HistoryItem.HIDE));
\r
1179 //This is to maintain viewport position on first residue
\r
1180 //of first sequence
\r
1181 SequenceI seq = viewport.alignment.getSequenceAt(0);
\r
1182 int startRes = seq.findPosition(viewport.startRes);
\r
1184 viewport.getAlignment().removeGaps();
\r
1186 viewport.setStartRes(seq.findIndex(startRes)-1);
\r
1188 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1194 * @param e DOCUMENT ME!
\r
1196 public void removeAllGapsMenuItem_actionPerformed(ActionEvent e)
\r
1198 addHistoryItem(new HistoryItem("Remove Gaps", viewport.alignment,
\r
1199 HistoryItem.HIDE));
\r
1201 //This is to maintain viewport position on first residue
\r
1202 //of first sequence
\r
1203 SequenceI seq = viewport.alignment.getSequenceAt(0);
\r
1204 int startRes = seq.findPosition(viewport.startRes);
\r
1207 SequenceI current;
\r
1210 Vector seqs = null;
\r
1213 int end = viewport.alignment.getWidth();
\r
1215 if (viewport.getSelectionGroup() != null
\r
1216 && viewport.getSelectionGroup().getSequences(true) != null
\r
1217 && viewport.getSelectionGroup().getSize(true) > 0)
\r
1219 seqs = viewport.getSelectionGroup().getSequences(true);
\r
1220 start = viewport.getSelectionGroup().getStartRes();
\r
1221 end = viewport.getSelectionGroup().getEndRes()+1;
\r
1225 seqs = viewport.alignment.getSequences();
\r
1228 for (int i = 0; i < seqs.size(); i++)
\r
1230 current = (SequenceI) seqs.elementAt(i);
\r
1231 jSize = current.getLength();
\r
1233 // Removing a range is much quicker than removing gaps
\r
1234 // one by one for long sequences
\r
1236 int rangeStart=-1, rangeEnd=-1;
\r
1240 if (jalview.util.Comparison.isGap(current.getCharAt(j)))
\r
1242 if(rangeStart==-1)
\r
1257 current.deleteChars(rangeStart, rangeEnd);
\r
1258 j-=rangeEnd-rangeStart;
\r
1259 jSize-=rangeEnd-rangeStart;
\r
1267 while (j < end && j < jSize);
\r
1270 current.deleteChars(rangeStart, rangeEnd);
\r
1274 viewport.setStartRes(seq.findIndex(startRes)-1);
\r
1276 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1279 public void alignmentChanged()
\r
1281 if(viewport.padGaps)
\r
1282 viewport.getAlignment().padGaps();
\r
1284 if(viewport.vconsensus!=null && viewport.autoCalculateConsensus)
\r
1286 viewport.updateConsensus();
\r
1287 viewport.updateConservation();
\r
1289 resetAllColourSchemes();
\r
1290 if(alignPanel.overviewPanel!=null)
\r
1291 alignPanel.overviewPanel.updateOverviewImage();
\r
1293 viewport.alignment.adjustSequenceAnnotations();
\r
1295 alignPanel.repaint();
\r
1298 void resetAllColourSchemes()
\r
1300 ColourSchemeI cs = viewport.globalColourScheme;
\r
1303 if (cs instanceof ClustalxColourScheme)
\r
1305 ( (ClustalxColourScheme) viewport.getGlobalColourScheme()).
\r
1306 resetClustalX(viewport.alignment.getSequences(),
\r
1307 viewport.alignment.getWidth());
\r
1310 cs.setConsensus(viewport.vconsensus);
\r
1311 if (cs.conservationApplied())
\r
1313 Alignment al = (Alignment) viewport.alignment;
\r
1314 Conservation c = new Conservation("All",
\r
1315 ResidueProperties.propHash, 3,
\r
1316 al.getSequences(), 0,
\r
1317 al.getWidth() - 1);
\r
1319 c.verdict(false, viewport.ConsPercGaps);
\r
1321 cs.setConservation(c);
\r
1325 int s, sSize = viewport.alignment.getGroups().size();
\r
1326 for(s=0; s<sSize; s++)
\r
1328 SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s);
\r
1329 if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme)
\r
1331 ((ClustalxColourScheme)sg.cs).resetClustalX(
\r
1332 sg.getSequences(true), sg.getWidth());
\r
1334 sg.recalcConservation();
\r
1341 * @param e DOCUMENT ME!
\r
1343 public void padGapsMenuitem_actionPerformed(ActionEvent e)
\r
1345 addHistoryItem(new HistoryItem("Pad Gaps", viewport.alignment,
\r
1346 HistoryItem.HIDE));
\r
1348 viewport.padGaps = padGapsMenuitem.isSelected();
\r
1350 // if (viewport.padGaps)
\r
1351 alignmentChanged();
\r
1357 * @param e DOCUMENT ME!
\r
1359 public void findMenuItem_actionPerformed(ActionEvent e)
\r
1361 JInternalFrame frame = new JInternalFrame();
\r
1362 Finder finder = new Finder(viewport, alignPanel, frame);
\r
1363 frame.setContentPane(finder);
\r
1364 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
1365 Desktop.addInternalFrame(frame, "Find", 340, 110);
\r
1371 * @param e DOCUMENT ME!
\r
1373 public void font_actionPerformed(ActionEvent e)
\r
1375 new FontChooser(alignPanel);
\r
1378 public void smoothFont_actionPerformed(ActionEvent e)
\r
1380 viewport.antiAlias = smoothFont.isSelected();
\r
1381 alignPanel.annotationPanel.image = null;
\r
1382 alignPanel.repaint();
\r
1389 * @param e DOCUMENT ME!
\r
1391 protected void seqLimit_actionPerformed(ActionEvent e)
\r
1393 viewport.setShowJVSuffix(seqLimits.isSelected());
\r
1395 alignPanel.idPanel.idCanvas.setPreferredSize(alignPanel.calculateIdWidth());
\r
1396 alignPanel.repaint();
\r
1403 * @param e DOCUMENT ME!
\r
1405 protected void colourTextMenuItem_actionPerformed(ActionEvent e)
\r
1407 viewport.setColourText(colourTextMenuItem.isSelected());
\r
1408 alignPanel.repaint();
\r
1414 * @param e DOCUMENT ME!
\r
1416 public void wrapMenuItem_actionPerformed(ActionEvent e)
\r
1418 scaleAbove.setVisible(wrapMenuItem.isSelected());
\r
1419 scaleLeft.setVisible(wrapMenuItem.isSelected());
\r
1420 scaleRight.setVisible(wrapMenuItem.isSelected());
\r
1421 viewport.setWrapAlignment(wrapMenuItem.isSelected());
\r
1422 alignPanel.setWrapAlignment(wrapMenuItem.isSelected());
\r
1425 public void showAllSeqs_actionPerformed(ActionEvent e)
\r
1427 viewport.showAllHiddenSeqs();
\r
1431 public void showAllColumns_actionPerformed(ActionEvent e)
\r
1433 viewport.showAllHiddenColumns();
\r
1436 public void hideSelSequences_actionPerformed(ActionEvent e)
\r
1438 if(viewport.getSelectionGroup()==null)
\r
1441 SequenceI [] seqs = viewport.getSelectionGroup().getSequencesInOrder(
\r
1442 viewport.alignment
\r
1445 for(int i=0; i<seqs.length; i++)
\r
1447 viewport.hideSequence(seqs[i]);
\r
1450 alignPanel.repaint();
\r
1453 public void hideSelColumns_actionPerformed(ActionEvent e)
\r
1455 viewport.hideSelectedColumns();
\r
1456 alignPanel.repaint();
\r
1459 public void hiddenMarkers_actionPerformed(ActionEvent e)
\r
1461 viewport.setShowHiddenMarkers(hiddenMarkers.isSelected());
\r
1468 * @param e DOCUMENT ME!
\r
1470 protected void scaleAbove_actionPerformed(ActionEvent e)
\r
1472 viewport.setScaleAboveWrapped(scaleAbove.isSelected());
\r
1473 alignPanel.repaint();
\r
1479 * @param e DOCUMENT ME!
\r
1481 protected void scaleLeft_actionPerformed(ActionEvent e)
\r
1483 viewport.setScaleLeftWrapped(scaleLeft.isSelected());
\r
1484 alignPanel.repaint();
\r
1490 * @param e DOCUMENT ME!
\r
1492 protected void scaleRight_actionPerformed(ActionEvent e)
\r
1494 viewport.setScaleRightWrapped(scaleRight.isSelected());
\r
1495 alignPanel.repaint();
\r
1501 * @param e DOCUMENT ME!
\r
1503 public void viewBoxesMenuItem_actionPerformed(ActionEvent e)
\r
1505 viewport.setShowBoxes(viewBoxesMenuItem.isSelected());
\r
1506 alignPanel.repaint();
\r
1512 * @param e DOCUMENT ME!
\r
1514 public void viewTextMenuItem_actionPerformed(ActionEvent e)
\r
1516 viewport.setShowText(viewTextMenuItem.isSelected());
\r
1517 alignPanel.repaint();
\r
1523 * @param e DOCUMENT ME!
\r
1525 protected void renderGapsMenuItem_actionPerformed(ActionEvent e)
\r
1527 viewport.setRenderGaps(renderGapsMenuItem.isSelected());
\r
1528 alignPanel.repaint();
\r
1532 FeatureSettings featureSettings;
\r
1533 public void featureSettings_actionPerformed(ActionEvent e)
\r
1535 if(featureSettings !=null )
\r
1537 featureSettings.close();
\r
1538 featureSettings = null;
\r
1540 featureSettings = new FeatureSettings(this);
\r
1546 * @param evt DOCUMENT ME!
\r
1548 public void showSeqFeatures_actionPerformed(ActionEvent evt)
\r
1550 viewport.setShowSequenceFeatures(showSeqFeatures.isSelected());
\r
1551 alignPanel.repaint();
\r
1552 if (alignPanel.getOverviewPanel() != null)
\r
1554 alignPanel.getOverviewPanel().updateOverviewImage();
\r
1561 * @param e DOCUMENT ME!
\r
1563 public void annotationPanelMenuItem_actionPerformed(ActionEvent e)
\r
1565 viewport.setShowAnnotation(annotationPanelMenuItem.isSelected());
\r
1566 alignPanel.setAnnotationVisible(annotationPanelMenuItem.isSelected());
\r
1572 * @param e DOCUMENT ME!
\r
1574 public void overviewMenuItem_actionPerformed(ActionEvent e)
\r
1576 if (alignPanel.overviewPanel != null)
\r
1581 JInternalFrame frame = new JInternalFrame();
\r
1582 OverviewPanel overview = new OverviewPanel(alignPanel);
\r
1583 frame.setContentPane(overview);
\r
1584 Desktop.addInternalFrame(frame, "Overview " + this.getTitle(),
\r
1585 frame.getWidth(), frame.getHeight());
\r
1587 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
1588 frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
\r
1590 public void internalFrameClosed(
\r
1591 javax.swing.event.InternalFrameEvent evt)
\r
1593 alignPanel.setOverviewPanel(null);
\r
1598 alignPanel.setOverviewPanel(overview);
\r
1604 * @param e DOCUMENT ME!
\r
1606 protected void noColourmenuItem_actionPerformed(ActionEvent e)
\r
1608 changeColour(null);
\r
1614 * @param e DOCUMENT ME!
\r
1616 public void clustalColour_actionPerformed(ActionEvent e)
\r
1618 changeColour(new ClustalxColourScheme(
\r
1619 viewport.alignment.getSequences(), viewport.alignment.getWidth()));
\r
1625 * @param e DOCUMENT ME!
\r
1627 public void zappoColour_actionPerformed(ActionEvent e)
\r
1629 changeColour(new ZappoColourScheme());
\r
1635 * @param e DOCUMENT ME!
\r
1637 public void taylorColour_actionPerformed(ActionEvent e)
\r
1639 changeColour(new TaylorColourScheme());
\r
1645 * @param e DOCUMENT ME!
\r
1647 public void hydrophobicityColour_actionPerformed(ActionEvent e)
\r
1649 changeColour(new HydrophobicColourScheme());
\r
1655 * @param e DOCUMENT ME!
\r
1657 public void helixColour_actionPerformed(ActionEvent e)
\r
1659 changeColour(new HelixColourScheme());
\r
1665 * @param e DOCUMENT ME!
\r
1667 public void strandColour_actionPerformed(ActionEvent e)
\r
1669 changeColour(new StrandColourScheme());
\r
1675 * @param e DOCUMENT ME!
\r
1677 public void turnColour_actionPerformed(ActionEvent e)
\r
1679 changeColour(new TurnColourScheme());
\r
1685 * @param e DOCUMENT ME!
\r
1687 public void buriedColour_actionPerformed(ActionEvent e)
\r
1689 changeColour(new BuriedColourScheme());
\r
1695 * @param e DOCUMENT ME!
\r
1697 public void nucleotideColour_actionPerformed(ActionEvent e)
\r
1699 changeColour(new NucleotideColourScheme());
\r
1702 public void annotationColour_actionPerformed(ActionEvent e)
\r
1704 new AnnotationColourChooser(viewport, alignPanel);
\r
1711 * @param e DOCUMENT ME!
\r
1713 protected void applyToAllGroups_actionPerformed(ActionEvent e)
\r
1715 viewport.setColourAppliesToAllGroups(applyToAllGroups.isSelected());
\r
1721 * @param cs DOCUMENT ME!
\r
1723 public void changeColour(ColourSchemeI cs)
\r
1725 int threshold = 0;
\r
1729 if (viewport.getAbovePIDThreshold())
\r
1731 threshold = SliderPanel.setPIDSliderSource(alignPanel, cs,
\r
1734 cs.setThreshold(threshold,
\r
1735 viewport.getIgnoreGapsConsensus());
\r
1737 viewport.setGlobalColourScheme(cs);
\r
1741 cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
\r
1744 if (viewport.getConservationSelected())
\r
1747 Alignment al = (Alignment) viewport.alignment;
\r
1748 Conservation c = new Conservation("All",
\r
1749 ResidueProperties.propHash, 3,
\r
1750 al.getSequences(), 0,
\r
1751 al.getWidth() - 1);
\r
1754 c.verdict(false, viewport.ConsPercGaps);
\r
1756 cs.setConservation(c);
\r
1758 cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, cs,
\r
1763 cs.setConservation(null);
\r
1766 cs.setConsensus(viewport.vconsensus);
\r
1769 viewport.setGlobalColourScheme(cs);
\r
1771 if (viewport.getColourAppliesToAllGroups())
\r
1773 Vector groups = viewport.alignment.getGroups();
\r
1775 for (int i = 0; i < groups.size(); i++)
\r
1777 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
\r
1785 if (cs instanceof ClustalxColourScheme)
\r
1787 sg.cs = new ClustalxColourScheme(
\r
1788 sg.getSequences(true), sg.getWidth());
\r
1790 else if (cs instanceof UserColourScheme)
\r
1792 sg.cs = new UserColourScheme( ( (UserColourScheme) cs).getColours());
\r
1798 sg.cs = (ColourSchemeI) cs.getClass().newInstance();
\r
1800 catch (Exception ex)
\r
1805 if (viewport.getAbovePIDThreshold()
\r
1806 || cs instanceof PIDColourScheme
\r
1807 || cs instanceof Blosum62ColourScheme)
\r
1809 sg.cs.setThreshold(threshold,
\r
1810 viewport.getIgnoreGapsConsensus());
\r
1812 sg.cs.setConsensus(AAFrequency.calculate(
\r
1813 sg.getSequences(true), 0,
\r
1817 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
\r
1820 if (viewport.getConservationSelected())
\r
1822 Conservation c = new Conservation("Group",
\r
1823 ResidueProperties.propHash, 3,
\r
1824 sg.getSequences(true), 0,
\r
1825 viewport.alignment.getWidth() - 1);
\r
1827 c.verdict(false, viewport.ConsPercGaps);
\r
1828 sg.cs.setConservation(c);
\r
1831 sg.cs.setConservation(null);
\r
1835 if (alignPanel.getOverviewPanel() != null)
\r
1837 alignPanel.getOverviewPanel().updateOverviewImage();
\r
1840 alignPanel.repaint();
\r
1846 * @param e DOCUMENT ME!
\r
1848 protected void modifyPID_actionPerformed(ActionEvent e)
\r
1850 if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme!=null)
\r
1852 SliderPanel.setPIDSliderSource(alignPanel,
\r
1853 viewport.getGlobalColourScheme(),
\r
1855 SliderPanel.showPIDSlider();
\r
1862 * @param e DOCUMENT ME!
\r
1864 protected void modifyConservation_actionPerformed(ActionEvent e)
\r
1866 if (viewport.getConservationSelected() && viewport.globalColourScheme!=null)
\r
1868 SliderPanel.setConservationSlider(alignPanel,
\r
1869 viewport.globalColourScheme,
\r
1871 SliderPanel.showConservationSlider();
\r
1878 * @param e DOCUMENT ME!
\r
1880 protected void conservationMenuItem_actionPerformed(ActionEvent e)
\r
1882 viewport.setConservationSelected(conservationMenuItem.isSelected());
\r
1884 viewport.setAbovePIDThreshold(false);
\r
1885 abovePIDThreshold.setSelected(false);
\r
1887 changeColour(viewport.getGlobalColourScheme());
\r
1889 modifyConservation_actionPerformed(null);
\r
1895 * @param e DOCUMENT ME!
\r
1897 public void abovePIDThreshold_actionPerformed(ActionEvent e)
\r
1899 viewport.setAbovePIDThreshold(abovePIDThreshold.isSelected());
\r
1901 conservationMenuItem.setSelected(false);
\r
1902 viewport.setConservationSelected(false);
\r
1904 changeColour(viewport.getGlobalColourScheme());
\r
1906 modifyPID_actionPerformed(null);
\r
1912 * @param e DOCUMENT ME!
\r
1914 public void userDefinedColour_actionPerformed(ActionEvent e)
\r
1916 if (e.getActionCommand().equals("User Defined..."))
\r
1918 new UserDefinedColours(alignPanel, null);
\r
1922 UserColourScheme udc = (UserColourScheme) UserDefinedColours.
\r
1923 getUserColourSchemes().get(e.getActionCommand());
\r
1925 changeColour(udc);
\r
1929 public void updateUserColourMenu()
\r
1932 Component[] menuItems = colourMenu.getMenuComponents();
\r
1933 int i, iSize = menuItems.length;
\r
1934 for (i = 0; i < iSize; i++)
\r
1936 if (menuItems[i].getName() != null &&
\r
1937 menuItems[i].getName().equals("USER_DEFINED"))
\r
1939 colourMenu.remove(menuItems[i]);
\r
1943 if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null)
\r
1945 java.util.Enumeration userColours = jalview.gui.UserDefinedColours.
\r
1946 getUserColourSchemes().keys();
\r
1948 while (userColours.hasMoreElements())
\r
1950 final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(userColours.
\r
1951 nextElement().toString());
\r
1952 radioItem.setName("USER_DEFINED");
\r
1953 radioItem.addMouseListener(new MouseAdapter()
\r
1955 public void mousePressed(MouseEvent evt)
\r
1957 if(evt.isControlDown() || SwingUtilities.isRightMouseButton(evt))
\r
1959 radioItem.removeActionListener(radioItem.getActionListeners()[0]);
\r
1961 int option = JOptionPane.showInternalConfirmDialog(jalview.gui.Desktop.desktop,
\r
1962 "Remove from default list?",
\r
1963 "Remove user defined colour",
\r
1964 JOptionPane.YES_NO_OPTION);
\r
1965 if(option == JOptionPane.YES_OPTION)
\r
1967 jalview.gui.UserDefinedColours.removeColourFromDefaults(radioItem.getText());
\r
1968 colourMenu.remove(radioItem);
\r
1971 radioItem.addActionListener(new ActionListener()
\r
1973 public void actionPerformed(ActionEvent evt)
\r
1975 userDefinedColour_actionPerformed(evt);
\r
1981 radioItem.addActionListener(new ActionListener()
\r
1983 public void actionPerformed(ActionEvent evt)
\r
1985 userDefinedColour_actionPerformed(evt);
\r
1989 colourMenu.insert(radioItem, 15);
\r
1990 colours.add(radioItem);
\r
1998 * @param e DOCUMENT ME!
\r
2000 public void PIDColour_actionPerformed(ActionEvent e)
\r
2002 changeColour(new PIDColourScheme());
\r
2008 * @param e DOCUMENT ME!
\r
2010 public void BLOSUM62Colour_actionPerformed(ActionEvent e)
\r
2012 changeColour(new Blosum62ColourScheme());
\r
2018 * @param e DOCUMENT ME!
\r
2020 public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)
\r
2022 addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment,
\r
2023 HistoryItem.SORT));
\r
2024 AlignmentSorter.sortByPID(viewport.getAlignment(),
\r
2025 viewport.getAlignment().getSequenceAt(0));
\r
2026 alignPanel.repaint();
\r
2032 * @param e DOCUMENT ME!
\r
2034 public void sortIDMenuItem_actionPerformed(ActionEvent e)
\r
2036 addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
\r
2037 HistoryItem.SORT));
\r
2038 AlignmentSorter.sortByID(viewport.getAlignment());
\r
2039 alignPanel.repaint();
\r
2045 * @param e DOCUMENT ME!
\r
2047 public void sortGroupMenuItem_actionPerformed(ActionEvent e)
\r
2049 addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
\r
2050 HistoryItem.SORT));
\r
2052 AlignmentSorter.sortByGroup(viewport.getAlignment());
\r
2053 alignPanel.repaint();
\r
2059 * @param e DOCUMENT ME!
\r
2061 public void removeRedundancyMenuItem_actionPerformed(ActionEvent e)
\r
2063 new RedundancyPanel(alignPanel, this);
\r
2070 * @param e DOCUMENT ME!
\r
2072 public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)
\r
2074 if ( (viewport.getSelectionGroup() == null) ||
\r
2075 (viewport.getSelectionGroup().getSize(false) < 2))
\r
2077 JOptionPane.showInternalMessageDialog(this,
\r
2078 "You must select at least 2 sequences.",
\r
2079 "Invalid Selection",
\r
2080 JOptionPane.WARNING_MESSAGE);
\r
2084 JInternalFrame frame = new JInternalFrame();
\r
2085 frame.setContentPane(new PairwiseAlignPanel(viewport));
\r
2086 Desktop.addInternalFrame(frame, "Pairwise Alignment", 600, 500);
\r
2093 * @param e DOCUMENT ME!
\r
2095 public void PCAMenuItem_actionPerformed(ActionEvent e)
\r
2097 if ( ( (viewport.getSelectionGroup() != null) &&
\r
2098 (viewport.getSelectionGroup().getSize(false) < 4) &&
\r
2099 (viewport.getSelectionGroup().getSize(false) > 0)) ||
\r
2100 (viewport.getAlignment().getHeight() < 4))
\r
2102 JOptionPane.showInternalMessageDialog(this,
\r
2103 "Principal component analysis must take\n" +
\r
2104 "at least 4 input sequences.",
\r
2105 "Sequence selection insufficient",
\r
2106 JOptionPane.WARNING_MESSAGE);
\r
2111 new PCAPanel(viewport);
\r
2115 public void autoCalculate_actionPerformed(ActionEvent e)
\r
2117 viewport.autoCalculateConsensus = autoCalculate.isSelected();
\r
2118 if(viewport.autoCalculateConsensus)
\r
2120 alignmentChanged();
\r
2128 * @param e DOCUMENT ME!
\r
2130 public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)
\r
2132 NewTreePanel("AV", "PID", "Average distance tree using PID");
\r
2138 * @param e DOCUMENT ME!
\r
2140 public void neighbourTreeMenuItem_actionPerformed(ActionEvent e)
\r
2142 NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
\r
2148 * @param e DOCUMENT ME!
\r
2150 protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)
\r
2152 NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
\r
2158 * @param e DOCUMENT ME!
\r
2160 protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)
\r
2162 NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
\r
2168 * @param type DOCUMENT ME!
\r
2169 * @param pwType DOCUMENT ME!
\r
2170 * @param title DOCUMENT ME!
\r
2172 void NewTreePanel(String type, String pwType, String title)
\r
2176 if ( (viewport.getSelectionGroup() != null) &&
\r
2177 (viewport.getSelectionGroup().getSize(false) > 3))
\r
2180 SequenceGroup sg = viewport.getSelectionGroup();
\r
2182 /* Decide if the selection is a column region */
\r
2183 while (s < sg.getSize(false))
\r
2185 if ( ( (SequenceI) sg.getSequences(false).elementAt(s++)).getLength() <
\r
2188 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2189 "The selected region to create a tree may\nonly contain residues or gaps.\n" +
\r
2190 "Try using the Pad function in the edit menu,\n" +
\r
2191 "or one of the multiple sequence alignment web services.",
\r
2192 "Sequences in selection are not aligned",
\r
2193 JOptionPane.WARNING_MESSAGE);
\r
2199 title = title + " on region";
\r
2200 tp = new TreePanel(viewport, type, pwType);
\r
2204 //are the sequences aligned?
\r
2205 if (!viewport.alignment.isAligned())
\r
2207 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2208 "The sequences must be aligned before creating a tree.\n" +
\r
2209 "Try using the Pad function in the edit menu,\n" +
\r
2210 "or one of the multiple sequence alignment web services.",
\r
2211 "Sequences not aligned",
\r
2212 JOptionPane.WARNING_MESSAGE);
\r
2217 if(viewport.alignment.getHeight()<2)
\r
2220 tp = new TreePanel(viewport, type, pwType);
\r
2223 addTreeMenuItem(tp, title);
\r
2225 Desktop.addInternalFrame(tp, title + " from " + this.title, 600, 500);
\r
2231 * @param title DOCUMENT ME!
\r
2232 * @param order DOCUMENT ME!
\r
2234 public void addSortByOrderMenuItem(String title, final AlignmentOrder order)
\r
2236 final JMenuItem item = new JMenuItem("by " + title);
\r
2238 item.addActionListener(new java.awt.event.ActionListener()
\r
2240 public void actionPerformed(ActionEvent e)
\r
2242 addHistoryItem(new HistoryItem("Sort", viewport.alignment,
\r
2243 HistoryItem.SORT));
\r
2245 // TODO: JBPNote - have to map order entries to curent SequenceI pointers
\r
2246 AlignmentSorter.sortBy(viewport.getAlignment(), order);
\r
2247 alignPanel.repaint();
\r
2253 * Maintain the Order by->Displayed Tree menu.
\r
2254 * Creates a new menu item for a TreePanel with an appropriate
\r
2255 * <code>jalview.analysis.AlignmentSorter</code> call. Listeners are added
\r
2256 * to remove the menu item when the treePanel is closed, and adjust
\r
2257 * the tree leaf to sequence mapping when the alignment is modified.
\r
2258 * @param treePanel Displayed tree window.
\r
2259 * @param title SortBy menu item title.
\r
2261 void addTreeMenuItem(final TreePanel treePanel, String title)
\r
2263 final JMenuItem item = new JMenuItem(title);
\r
2267 if (treeCount == 1)
\r
2269 sort.add(sortByTreeMenu);
\r
2272 sortByTreeMenu.add(item);
\r
2273 item.addActionListener(new java.awt.event.ActionListener()
\r
2275 public void actionPerformed(ActionEvent e)
\r
2277 addHistoryItem(new HistoryItem("Tree Sort",
\r
2278 viewport.alignment, HistoryItem.SORT));
\r
2279 AlignmentSorter.sortByTree(viewport.getAlignment(),
\r
2280 treePanel.getTree());
\r
2281 alignPanel.repaint();
\r
2285 treePanel.addInternalFrameListener(new javax.swing.event.
\r
2286 InternalFrameAdapter()
\r
2288 public void internalFrameClosed(
\r
2289 javax.swing.event.InternalFrameEvent evt)
\r
2292 sortByTreeMenu.remove(item);
\r
2294 if (treeCount == 0)
\r
2296 sort.remove(sortByTreeMenu);
\r
2304 * Work out whether the whole set of sequences
\r
2305 * or just the selected set will be submitted for multiple alignment.
\r
2308 private jalview.datamodel.AlignmentView gatherSequencesForAlignment()
\r
2310 // Now, check we have enough sequences
\r
2311 AlignmentView msa = null;
\r
2313 if ( (viewport.getSelectionGroup() != null) &&
\r
2314 (viewport.getSelectionGroup().getSize(false) > 1))
\r
2316 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
\r
2317 /*SequenceGroup seqs = viewport.getSelectionGroup();
\r
2319 msa = new SequenceI[sz = seqs.getSize(false)];
\r
2321 for (int i = 0; i < sz; i++)
\r
2323 msa[i] = (SequenceI) seqs.getSequenceAt(i);
\r
2325 msa = viewport.getAlignmentView(true);
\r
2329 /*Vector seqs = viewport.getAlignment().getSequences();
\r
2331 if (seqs.size() > 1)
\r
2333 msa = new SequenceI[seqs.size()];
\r
2335 for (int i = 0; i < seqs.size(); i++)
\r
2337 msa[i] = (SequenceI) seqs.elementAt(i);
\r
2340 msa = viewport.getAlignmentView(false);
\r
2346 * Decides what is submitted to a secondary structure prediction service,
\r
2347 * the currently selected sequence, or the currently selected alignment
\r
2348 * (where the first sequence in the set is the one that the prediction
\r
2351 SequenceI[] gatherSeqOrMsaForSecStrPrediction()
\r
2353 SequenceI seq = null;
\r
2354 SequenceI[] msa = null;
\r
2356 if ( (viewport.getSelectionGroup() != null) &&
\r
2357 (viewport.getSelectionGroup().getSize(false) > 0))
\r
2359 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
\r
2360 SequenceGroup seqs = viewport.getSelectionGroup();
\r
2362 if ( (seqs.getSize(false) == 1) || !viewport.alignment.isAligned())
\r
2364 seq = (SequenceI) seqs.getSequenceAt(0);
\r
2369 msa = new SequenceI[sz = seqs.getSize(false)];
\r
2371 for (int i = 0; i < sz; i++)
\r
2373 msa[i] = (SequenceI) seqs.getSequenceAt(i);
\r
2379 Vector seqs = viewport.getAlignment().getSequences();
\r
2381 if ( (seqs.size() == 1) || !viewport.alignment.isAligned())
\r
2383 seq = (SequenceI) seqs.elementAt(0);
\r
2387 msa = new SequenceI[seqs.size()];
\r
2389 for (int i = 0; i < seqs.size(); i++)
\r
2391 msa[i] = (SequenceI) seqs.elementAt(i);
\r
2403 return new SequenceI[]
\r
2413 * @param e DOCUMENT ME!
\r
2415 protected void LoadtreeMenuItem_actionPerformed(ActionEvent e)
\r
2417 // Pick the tree file
\r
2418 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
2420 "LAST_DIRECTORY"));
\r
2421 chooser.setFileView(new JalviewFileView());
\r
2422 chooser.setDialogTitle("Select a newick-like tree file");
\r
2423 chooser.setToolTipText("Load a tree file");
\r
2425 int value = chooser.showOpenDialog(null);
\r
2427 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
2429 String choice = chooser.getSelectedFile().getPath();
\r
2430 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
2434 jalview.io.NewickFile fin = new jalview.io.NewickFile(choice,
\r
2436 viewport.setCurrentTree(ShowNewickTree(fin, choice).getTree());
\r
2438 catch (Exception ex)
\r
2440 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2441 "Problem reading tree file",
\r
2443 JOptionPane.WARNING_MESSAGE);
\r
2444 ex.printStackTrace();
\r
2450 public TreePanel ShowNewickTree(NewickFile nf, String title)
\r
2452 return ShowNewickTree(nf,title,600,500,4,5);
\r
2457 * @param nf DOCUMENT ME!
\r
2458 * @param title DOCUMENT ME!
\r
2460 * @return DOCUMENT ME!
\r
2462 public TreePanel ShowNewickTree(NewickFile nf, String title, int w,int h,int x, int y)
\r
2464 TreePanel tp = null;
\r
2470 if (nf.getTree() != null)
\r
2472 tp = new TreePanel(viewport,
\r
2480 tp.setLocation(x,y);
\r
2483 Desktop.addInternalFrame(tp, title, w, h);
\r
2484 addTreeMenuItem(tp, title);
\r
2487 catch (Exception ex)
\r
2489 ex.printStackTrace();
\r
2500 PrinterJob printJob = PrinterJob.getPrinterJob();
\r
2501 PageFormat pf = printJob.pageDialog(printJob.defaultPage());
\r
2502 printJob.setPrintable(alignPanel, pf);
\r
2504 if (printJob.printDialog())
\r
2510 catch (Exception PrintException)
\r
2512 PrintException.printStackTrace();
\r
2519 * Generates menu items and listener event actions for web service clients
\r
2522 public void BuildWebServiceMenu()
\r
2524 if ( (Discoverer.services != null)
\r
2525 && (Discoverer.services.size() > 0))
\r
2527 Vector msaws = (Vector) Discoverer.services.get("MsaWS");
\r
2528 Vector secstrpr = (Vector) Discoverer.services.get("SecStrPred");
\r
2529 Vector wsmenu = new Vector();
\r
2530 if (msaws != null)
\r
2532 // Add any Multiple Sequence Alignment Services
\r
2533 final JMenu msawsmenu = new JMenu("Alignment");
\r
2534 final AlignFrame af = this;
\r
2535 for (int i = 0, j = msaws.size(); i < j; i++)
\r
2537 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws.
\r
2539 final JMenuItem method = new JMenuItem(sh.getName());
\r
2540 method.addActionListener(new ActionListener()
\r
2542 public void actionPerformed(ActionEvent e)
\r
2544 AlignmentView msa = gatherSequencesForAlignment();
\r
2545 new jalview.ws.MsaWSClient(sh, title, msa,
\r
2546 false, true, viewport.getAlignment().getDataset(), af);
\r
2551 msawsmenu.add(method);
\r
2552 // Deal with services that we know accept partial alignments.
\r
2553 if (sh.getName().indexOf("lustal") > -1)
\r
2555 // We know that ClustalWS can accept partial alignments for refinement.
\r
2556 final JMenuItem methodR = new JMenuItem(sh.getName()+" Realign");
\r
2557 methodR.addActionListener(new ActionListener()
\r
2559 public void actionPerformed(ActionEvent e)
\r
2561 AlignmentView msa = gatherSequencesForAlignment();
\r
2562 new jalview.ws.MsaWSClient(sh, title, msa,
\r
2563 true, true, viewport.getAlignment().getDataset(), af);
\r
2568 msawsmenu.add(methodR);
\r
2572 wsmenu.add(msawsmenu);
\r
2574 if (secstrpr != null)
\r
2576 // Add any secondary structure prediction services
\r
2577 final JMenu secstrmenu = new JMenu("Secondary Structure Prediction");
\r
2578 for (int i = 0, j = secstrpr.size(); i < j; i++)
\r
2580 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle)
\r
2582 final JMenuItem method = new JMenuItem(sh.getName());
\r
2583 method.addActionListener(new ActionListener()
\r
2585 public void actionPerformed(ActionEvent e)
\r
2587 SequenceI[] msa = gatherSeqOrMsaForSecStrPrediction();
\r
2588 if (msa.length == 1)
\r
2590 // Single Sequence prediction
\r
2591 new jalview.ws.JPredClient(sh,title, msa[0]);
\r
2595 if (msa.length > 1)
\r
2597 // Single Sequence prediction
\r
2598 jalview.ws.JPredClient ct = new jalview.ws.JPredClient(sh,
\r
2604 secstrmenu.add(method);
\r
2606 wsmenu.add(secstrmenu);
\r
2608 this.webService.removeAll();
\r
2609 for (int i = 0, j = wsmenu.size(); i < j; i++)
\r
2611 webService.add( (JMenu) wsmenu.get(i));
\r
2616 this.webService.removeAll();
\r
2617 this.webService.add(this.webServiceNoServices);
\r
2619 // TODO: add in rediscovery function
\r
2620 // TODO: reduce code redundancy.
\r
2621 // TODO: group services by location as well as function.
\r
2624 /* public void vamsasStore_actionPerformed(ActionEvent e)
\r
2626 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
2627 getProperty("LAST_DIRECTORY"));
\r
2629 chooser.setFileView(new JalviewFileView());
\r
2630 chooser.setDialogTitle("Export to Vamsas file");
\r
2631 chooser.setToolTipText("Export");
\r
2633 int value = chooser.showSaveDialog(this);
\r
2635 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
2637 jalview.io.VamsasDatastore vs = new jalview.io.VamsasDatastore(viewport);
\r
2638 //vs.store(chooser.getSelectedFile().getAbsolutePath() );
\r
2639 vs.storeJalview( chooser.getSelectedFile().getAbsolutePath(), this);
\r
2646 public void showTranslation_actionPerformed(ActionEvent e)
\r
2648 SequenceI [] selection = viewport.getSelectionAsNewSequence();
\r
2649 String [] seqstring = viewport.getViewAsString(true);
\r
2651 int s, sSize = selection.length;
\r
2652 SequenceI [] newSeq = new SequenceI[sSize];
\r
2655 StringBuffer protein;
\r
2657 for(s=0; s<sSize; s++)
\r
2659 protein = new StringBuffer();
\r
2660 seq = AlignSeq.extractGaps("-. ", seqstring[s]);
\r
2661 resSize = seq.length();
\r
2662 resSize -= resSize%3;
\r
2664 for(res = 0; res < resSize; res+=3)
\r
2666 String codon = seq.substring(res, res+3);
\r
2667 codon = codon.replace('U', 'T');
\r
2668 String aa = ResidueProperties.codonTranslate(codon);
\r
2670 protein.append(viewport.getGapCharacter());
\r
2671 else if(aa.equals("STOP"))
\r
2672 protein.append("X");
\r
2674 protein.append( aa );
\r
2676 newSeq[s] = new Sequence(selection[s].getName(),
\r
2677 protein.toString());
\r
2681 AlignmentI al = new Alignment(newSeq);
\r
2682 al.setDataset(null);
\r
2685 ////////////////////////////////
\r
2686 // Copy annotations across
\r
2687 jalview.datamodel.AlignmentAnnotation[] annotations
\r
2688 = viewport.alignment.getAlignmentAnnotation();
\r
2690 if(annotations!=null)
\r
2692 for (int i = 0; i < annotations.length; i++)
\r
2694 if (annotations[i].label.equals("Quality") ||
\r
2695 annotations[i].label.equals("Conservation") ||
\r
2696 annotations[i].label.equals("Consensus"))
\r
2701 aSize = viewport.alignment.getWidth() / 3;
\r
2702 jalview.datamodel.Annotation[] anots =
\r
2703 new jalview.datamodel.Annotation[aSize];
\r
2705 for (a = 0; a < viewport.alignment.getWidth(); a++)
\r
2707 if (annotations[i].annotations[a] == null
\r
2708 || annotations[i].annotations[a] == null)
\r
2711 anots[a / 3] = new Annotation(
\r
2712 annotations[i].annotations[a].displayCharacter,
\r
2713 annotations[i].annotations[a].description,
\r
2714 annotations[i].annotations[a].secondaryStructure,
\r
2715 annotations[i].annotations[a].value,
\r
2716 annotations[i].annotations[a].colour);
\r
2719 jalview.datamodel.AlignmentAnnotation aa
\r
2720 = new jalview.datamodel.AlignmentAnnotation(annotations[i].label,
\r
2721 annotations[i].description, anots);
\r
2722 al.addAnnotation(aa);
\r
2726 AlignFrame af = new AlignFrame(al);
\r
2727 Desktop.addInternalFrame(af, "Translation of "+this.getTitle(),
\r
2729 NEW_WINDOW_HEIGHT);
\r
2732 // AlignViewport newViewport = new AlignViewport(al);
\r
2733 // AlignmentPanel ap = new AlignmentPanel(this, newViewport);
\r
2734 // tabbedPane.add("Protein", ap);
\r
2735 // viewports.add(newViewport);
\r
2736 // alignPanels.add(ap);
\r
2739 /////////////////////////
\r
2741 // AlignViewport ds = new AlignViewport(al.getDataset());
\r
2742 // ds.setDataset(true);
\r
2743 // AlignmentPanel dap = new AlignmentPanel(this, ds);
\r
2744 // tabbedPane.add("Dataset", dap);
\r
2745 // viewports.add(ds);
\r
2746 // alignPanels.add(dap);
\r
2747 /////////////////////////
\r
2752 /*public void tabSelected()
\r
2754 int index = tabbedPane.getSelectedIndex();
\r
2755 viewport = (AlignViewport)viewports.elementAt(index);
\r
2756 alignPanel = (AlignmentPanel)alignPanels.elementAt(index);
\r
2762 * @param String DOCUMENT ME!
\r
2764 public boolean parseFeaturesFile(String file, String type)
\r
2766 boolean featuresFile = false;
\r
2768 featuresFile = new FeaturesFile(file, type).parse(viewport.alignment.getDataset(),
\r
2769 alignPanel.seqPanel.seqCanvas.
\r
2770 getFeatureRenderer().featureColours,
\r
2773 catch(Exception ex)
\r
2775 ex.printStackTrace();
\r
2780 viewport.showSequenceFeatures = true;
\r
2781 showSeqFeatures.setSelected(true);
\r
2782 alignPanel.repaint();
\r
2785 return featuresFile;
\r
2788 public void dragEnter(DropTargetDragEvent evt)
\r
2791 public void dragExit(DropTargetEvent evt)
\r
2794 public void dragOver(DropTargetDragEvent evt)
\r
2797 public void dropActionChanged(DropTargetDragEvent evt)
\r
2800 public void drop(DropTargetDropEvent evt)
\r
2802 Transferable t = evt.getTransferable();
\r
2803 java.util.List files = null;
\r
2807 DataFlavor uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String");
\r
2808 if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
\r
2810 //Works on Windows and MacOSX
\r
2811 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
2812 files = (java.util.List) t.getTransferData(DataFlavor.javaFileListFlavor);
\r
2814 else if (t.isDataFlavorSupported(uriListFlavor))
\r
2816 // This is used by Unix drag system
\r
2817 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
2818 String data = (String) t.getTransferData(uriListFlavor);
\r
2819 files = new java.util.ArrayList(1);
\r
2820 for (java.util.StringTokenizer st = new java.util.StringTokenizer(
\r
2823 st.hasMoreTokens(); )
\r
2825 String s = st.nextToken();
\r
2826 if (s.startsWith("#"))
\r
2828 // the line is a comment (as per the RFC 2483)
\r
2832 java.net.URI uri = new java.net.URI(s);
\r
2833 java.io.File file = new java.io.File(uri);
\r
2838 catch (Exception e)
\r
2840 e.printStackTrace();
\r
2842 if (files != null)
\r
2847 for (int i = 0; i < files.size(); i++)
\r
2849 loadJalviewDataFile(files.get(i).toString());
\r
2852 catch (Exception ex)
\r
2854 ex.printStackTrace();
\r
2859 // This method will attempt to load a "dropped" file first by testing
\r
2860 // whether its and Annotation file, then features file. If both are
\r
2861 // false then the user may have dropped an alignment file onto this
\r
2863 public void loadJalviewDataFile(String file)
\r
2866 boolean isAnnotation = new AnnotationFile().readAnnotationFile(viewport.
\r
2869 if (!isAnnotation)
\r
2871 boolean isGroupsFile = parseFeaturesFile(file,
\r
2872 AppletFormatAdapter.FILE);
\r
2873 if (!isGroupsFile)
\r
2875 String format = new IdentifyFile().Identify(file, FormatAdapter.FILE);
\r
2876 new FileLoader().LoadFile(viewport, file, FormatAdapter.FILE, format);
\r
2882 alignPanel.adjustAnnotationHeight();
\r
2885 }catch(Exception ex)
\r
2887 ex.printStackTrace();
\r