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
218 Hashtable progressBars;
\r
219 public void setProgressBar(String message, long id)
\r
221 if(progressBars == null)
\r
222 progressBars = new Hashtable();
\r
224 JPanel progressPanel;
\r
225 GridLayout layout = (GridLayout) statusPanel.getLayout();
\r
226 if(progressBars.get( new Long(id) )!=null)
\r
228 progressPanel = (JPanel)progressBars.get( new Long(id) );
\r
229 statusPanel.remove(progressPanel);
\r
230 progressBars.remove( progressPanel );
\r
231 progressPanel = null;
\r
233 statusBar.setText(message);
\r
235 layout.setRows(layout.getRows() - 1);
\r
239 progressPanel = new JPanel(new BorderLayout(10, 5));
\r
241 JProgressBar progressBar = new JProgressBar();
\r
242 progressBar.setIndeterminate(true);
\r
244 progressPanel.add(new JLabel(message), BorderLayout.WEST);
\r
245 progressPanel.add(progressBar, BorderLayout.CENTER);
\r
247 layout.setRows(layout.getRows() + 1);
\r
248 statusPanel.add(progressPanel);
\r
250 progressBars.put(new Long(id), progressPanel);
\r
258 Added so Castor Mapping file can obtain Jalview Version
\r
260 public String getVersion()
\r
262 return jalview.bin.Cache.getProperty("VERSION");
\r
265 public FeatureRenderer getFeatureRenderer()
\r
267 return alignPanel.seqPanel.seqCanvas.getFeatureRenderer();
\r
271 public void fetchSequence_actionPerformed(ActionEvent e)
\r
273 new SequenceFetcher(this);
\r
276 public void addFromFile_actionPerformed(ActionEvent e)
\r
278 Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport);
\r
281 public void addFromText_actionPerformed(ActionEvent e)
\r
283 Desktop.instance.inputTextboxMenuItem_actionPerformed(viewport);
\r
286 public void addFromURL_actionPerformed(ActionEvent e)
\r
288 Desktop.instance.inputURLMenuItem_actionPerformed(viewport);
\r
294 * @param e DOCUMENT ME!
\r
296 public void saveAlignmentMenu_actionPerformed(ActionEvent e)
\r
298 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
299 getProperty( "LAST_DIRECTORY"),
\r
301 { "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc","jar" },
\r
303 { "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "Jalview" },
\r
308 chooser.setFileView(new JalviewFileView());
\r
309 chooser.setDialogTitle("Save Alignment to file");
\r
310 chooser.setToolTipText("Save");
\r
312 int value = chooser.showSaveDialog(this);
\r
314 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
316 currentFileFormat = chooser.getSelectedFormat();
\r
318 if (currentFileFormat == null)
\r
320 JOptionPane.showInternalMessageDialog(Desktop.desktop,
\r
321 "You must select a file format before saving!",
\r
322 "File format not specified",
\r
323 JOptionPane.WARNING_MESSAGE);
\r
324 value = chooser.showSaveDialog(this);
\r
328 jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT",
\r
329 currentFileFormat);
\r
331 String choice = chooser.getSelectedFile().getPath();
\r
332 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
334 saveAlignment(choice, currentFileFormat);
\r
338 public boolean saveAlignment(String file, String format)
\r
340 if (format.equalsIgnoreCase("Jalview"))
\r
342 String shortName = title;
\r
344 if (shortName.indexOf(java.io.File.separatorChar) > -1)
\r
346 shortName = shortName.substring(shortName.lastIndexOf(
\r
347 java.io.File.separatorChar) + 1);
\r
350 new Jalview2XML().SaveAlignment(this, file, shortName);
\r
352 // USE Jalview2XML to save this file
\r
358 String[] omitHidden = null;
\r
360 if (viewport.hasHiddenColumns)
\r
362 int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,
\r
363 "The Alignment contains hidden columns."
\r
364 + "\nDo you want to save only the visible alignment?",
\r
365 "Save / Omit Hidden Columns",
\r
366 JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
\r
368 if (reply == JOptionPane.YES_OPTION)
\r
369 omitHidden = viewport.getViewAsString(false);
\r
372 String output = new FormatAdapter().formatSequences(
\r
374 viewport.alignment.getSequencesArray(),
\r
377 if (output == null)
\r
384 java.io.PrintWriter out = new java.io.PrintWriter(
\r
385 new java.io.FileWriter(file));
\r
389 this.setTitle(file);
\r
392 catch (Exception ex)
\r
394 ex.printStackTrace();
\r
403 * @param e DOCUMENT ME!
\r
405 protected void outputText_actionPerformed(ActionEvent e)
\r
407 String [] omitHidden = null;
\r
409 if(viewport.hasHiddenColumns)
\r
411 int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,
\r
412 "The Alignment contains hidden columns."
\r
413 +"\nDo you want to output only the visible alignment?",
\r
414 "Save / Omit Hidden Columns",
\r
415 JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
\r
417 if(reply==JOptionPane.YES_OPTION)
\r
419 omitHidden = viewport.getViewAsString(false);
\r
423 CutAndPasteTransfer cap = new CutAndPasteTransfer();
\r
424 Desktop.addInternalFrame(cap,
\r
425 "Alignment output - " + e.getActionCommand(), 600,
\r
429 cap.setText(new FormatAdapter().formatSequences(
\r
430 e.getActionCommand(),
\r
431 viewport.alignment.getSequencesArray(),
\r
438 * @param e DOCUMENT ME!
\r
440 protected void htmlMenuItem_actionPerformed(ActionEvent e)
\r
442 new HTMLOutput(viewport,
\r
443 alignPanel.seqPanel.seqCanvas.getSequenceRenderer(),
\r
444 alignPanel.seqPanel.seqCanvas.getFeatureRenderer());
\r
447 public void createImageMap(File file, String image)
\r
449 alignPanel.makePNGImageMap(file, image);
\r
455 * @param e DOCUMENT ME!
\r
457 public void createPNG(File f)
\r
459 alignPanel.makePNG(f);
\r
465 * @param e DOCUMENT ME!
\r
467 public void createEPS(File f)
\r
469 alignPanel.makeEPS(f);
\r
475 * @param e DOCUMENT ME!
\r
477 public void printMenuItem_actionPerformed(ActionEvent e)
\r
479 //Putting in a thread avoids Swing painting problems
\r
480 PrintThread thread = new PrintThread();
\r
484 public void exportFeatures_actionPerformed(ActionEvent e)
\r
486 new AnnotationExporter().exportFeatures(alignPanel);
\r
490 public void exportAnnotations_actionPerformed(ActionEvent e)
\r
492 new AnnotationExporter().exportAnnotations(
\r
494 viewport.alignment.getAlignmentAnnotation()
\r
499 public void associatedData_actionPerformed(ActionEvent e)
\r
501 // Pick the tree file
\r
502 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
504 "LAST_DIRECTORY"));
\r
505 chooser.setFileView(new JalviewFileView());
\r
506 chooser.setDialogTitle("Load Jalview Annotations or Features File");
\r
507 chooser.setToolTipText("Load Jalview Annotations / Features file");
\r
509 int value = chooser.showOpenDialog(null);
\r
511 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
513 String choice = chooser.getSelectedFile().getPath();
\r
514 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
515 loadJalviewDataFile(choice);
\r
523 * @param e DOCUMENT ME!
\r
525 public void closeMenuItem_actionPerformed(ActionEvent e)
\r
529 PaintRefresher.components.remove(viewport.alignment);
\r
530 this.setClosed(true);
\r
532 catch (Exception ex)
\r
540 void updateEditMenuBar()
\r
542 if (historyList.size() > 0)
\r
544 undoMenuItem.setEnabled(true);
\r
546 HistoryItem hi = (HistoryItem) historyList.peek();
\r
547 undoMenuItem.setText("Undo " + hi.getDescription());
\r
551 undoMenuItem.setEnabled(false);
\r
552 undoMenuItem.setText("Undo");
\r
555 if (redoList.size() > 0)
\r
557 redoMenuItem.setEnabled(true);
\r
559 HistoryItem hi = (HistoryItem) redoList.peek();
\r
560 redoMenuItem.setText("Redo " + hi.getDescription());
\r
564 redoMenuItem.setEnabled(false);
\r
565 redoMenuItem.setText("Redo");
\r
572 * @param hi DOCUMENT ME!
\r
574 public void addHistoryItem(HistoryItem hi)
\r
576 historyList.push(hi);
\r
577 updateEditMenuBar();
\r
583 * @param e DOCUMENT ME!
\r
585 protected void undoMenuItem_actionPerformed(ActionEvent e)
\r
587 HistoryItem hi = (HistoryItem) historyList.pop();
\r
588 redoList.push(new HistoryItem(hi.getDescription(), viewport.alignment,
\r
589 HistoryItem.HIDE));
\r
590 restoreHistoryItem(hi);
\r
591 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
597 * @param e DOCUMENT ME!
\r
599 protected void redoMenuItem_actionPerformed(ActionEvent e)
\r
601 HistoryItem hi = (HistoryItem) redoList.pop();
\r
602 restoreHistoryItem(hi);
\r
603 updateEditMenuBar();
\r
604 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
607 // used by undo and redo
\r
608 void restoreHistoryItem(HistoryItem hi)
\r
613 updateEditMenuBar();
\r
615 viewport.firePropertyChange("alignment", null,
\r
616 viewport.getAlignment().getSequences());
\r
622 * @param up DOCUMENT ME!
\r
624 public void moveSelectedSequences(boolean up)
\r
626 SequenceGroup sg = viewport.getSelectionGroup();
\r
635 for (int i = 1; i < viewport.alignment.getHeight(); i++)
\r
637 SequenceI seq = viewport.alignment.getSequenceAt(i);
\r
639 if (!sg.getSequences(false).contains(seq))
\r
644 SequenceI temp = viewport.alignment.getSequenceAt(i - 1);
\r
646 if (sg.getSequences(false).contains(temp))
\r
651 viewport.alignment.getSequences().setElementAt(temp, i);
\r
652 viewport.alignment.getSequences().setElementAt(seq, i - 1);
\r
657 for (int i = viewport.alignment.getHeight() - 2; i > -1; i--)
\r
659 SequenceI seq = viewport.alignment.getSequenceAt(i);
\r
661 if (!sg.getSequences(false).contains(seq))
\r
666 SequenceI temp = viewport.alignment.getSequenceAt(i + 1);
\r
668 if (sg.getSequences(false).contains(temp))
\r
673 viewport.alignment.getSequences().setElementAt(temp, i);
\r
674 viewport.alignment.getSequences().setElementAt(seq, i + 1);
\r
678 alignPanel.repaint();
\r
686 * @param e DOCUMENT ME!
\r
688 protected void copy_actionPerformed(ActionEvent e)
\r
690 if (viewport.getSelectionGroup() == null)
\r
695 SequenceI [] seqs = viewport.getSelectionAsNewSequence();
\r
696 String[] omitHidden = null;
\r
698 if (viewport.hasHiddenColumns)
\r
700 omitHidden = viewport.getViewAsString(true);
\r
703 String output = new FormatAdapter().formatSequences(
\r
709 Toolkit.getDefaultToolkit().getSystemClipboard()
\r
710 .setContents(new StringSelection(output), Desktop.instance);
\r
712 Vector hiddenColumns = null;
\r
713 if(viewport.hasHiddenColumns)
\r
715 hiddenColumns =new Vector();
\r
716 int hiddenOffset = viewport.getSelectionGroup().getStartRes();
\r
717 for(int i=0; i<viewport.getColumnSelection().getHiddenColumns().size(); i++)
\r
719 int[] region = (int[])
\r
720 viewport.getColumnSelection().getHiddenColumns().elementAt(i);
\r
722 hiddenColumns.addElement(new int[]{region[0]-hiddenOffset,
\r
723 region[1]-hiddenOffset});
\r
727 Desktop.jalviewClipboard = new Object[]{ seqs,
\r
728 viewport.alignment.getDataset(),
\r
735 * @param e DOCUMENT ME!
\r
737 protected void pasteNew_actionPerformed(ActionEvent e)
\r
745 * @param e DOCUMENT ME!
\r
747 protected void pasteThis_actionPerformed(ActionEvent e)
\r
749 addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment,
\r
750 HistoryItem.PASTE));
\r
757 * @param newAlignment DOCUMENT ME!
\r
759 void paste(boolean newAlignment)
\r
763 Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
\r
764 Transferable contents = c.getContents(this);
\r
766 if (contents == null)
\r
771 String str = (String) contents.getTransferData(DataFlavor.stringFlavor);
\r
775 String format = new IdentifyFile().Identify(str, "Paste");
\r
776 SequenceI[] sequences;
\r
779 if(Desktop.jalviewClipboard!=null)
\r
781 // The clipboard was filled from within Jalview, we must use the sequences
\r
782 // And dataset from the copied alignment
\r
783 sequences = (SequenceI[])Desktop.jalviewClipboard[0];
\r
787 sequences = new FormatAdapter().readFile(str, "Paste", format);
\r
790 AlignmentI alignment = null;
\r
794 alignment = new Alignment(sequences);
\r
796 if(Desktop.jalviewClipboard!=null)
\r
797 alignment.setDataset( (Alignment)Desktop.jalviewClipboard[1] );
\r
799 alignment.setDataset( null );
\r
804 alignment = viewport.getAlignment();
\r
807 for (int i = 0; i < sequences.length; i++)
\r
809 Sequence newseq = new Sequence(sequences[i].getName(),
\r
810 sequences[i].getSequence(), sequences[i].getStart(),
\r
811 sequences[i].getEnd());
\r
813 alignment.addSequence(newseq);
\r
817 viewport.setEndSeq(alignment.getHeight());
\r
818 alignment.getWidth();
\r
819 viewport.firePropertyChange("alignment", null, alignment.getSequences());
\r
826 // Add any annotations attached to sequences
\r
827 for (int i = 0; i < sequences.length; i++)
\r
829 if (sequences[i].getAnnotation() != null)
\r
831 for (int a = 0; a < sequences[i].getAnnotation().length; a++)
\r
833 AlignmentAnnotation newAnnot =
\r
834 new AlignmentAnnotation(
\r
835 sequences[i].getAnnotation()[a].label,
\r
836 sequences[i].getAnnotation()[a].description,
\r
837 sequences[i].getAnnotation()[a].annotations,
\r
838 sequences[i].getAnnotation()[a].graphMin,
\r
839 sequences[i].getAnnotation()[a].graphMax,
\r
840 sequences[i].getAnnotation()[a].graph);
\r
842 sequences[i].getAnnotation()[a] = newAnnot;
\r
843 newAnnot.sequenceMapping = sequences[i].getAnnotation()[a].
\r
845 newAnnot.sequenceRef = sequences[i];
\r
846 newAnnot.adjustForAlignment();
\r
847 alignment.addAnnotation(newAnnot);
\r
848 alignment.setAnnotationIndex(newAnnot, a);
\r
851 alignPanel.annotationPanel.adjustPanelHeight();
\r
857 AlignFrame af = new AlignFrame(alignment);
\r
858 String newtitle = new String("Copied sequences");
\r
860 if(Desktop.jalviewClipboard!=null && Desktop.jalviewClipboard[2]!=null)
\r
862 Vector hc = (Vector)Desktop.jalviewClipboard[2];
\r
863 for(int i=0; i<hc.size(); i++)
\r
865 int [] region = (int[]) hc.elementAt(i);
\r
866 af.viewport.hideColumns(region[0], region[1]);
\r
871 //>>>This is a fix for the moment, until a better solution is found!!<<<
\r
872 af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().transferSettings(
\r
873 alignPanel.seqPanel.seqCanvas.getFeatureRenderer());
\r
876 if (title.startsWith("Copied sequences"))
\r
882 newtitle = newtitle.concat("- from " + title);
\r
885 Desktop.addInternalFrame(af, newtitle, NEW_WINDOW_WIDTH,
\r
886 NEW_WINDOW_HEIGHT);
\r
892 catch (Exception ex)
\r
894 ex.printStackTrace();
\r
895 System.out.println("Exception whilst pasting: "+ex);
\r
896 // could be anything being pasted in here
\r
905 * @param e DOCUMENT ME!
\r
907 protected void cut_actionPerformed(ActionEvent e)
\r
909 copy_actionPerformed(null);
\r
910 delete_actionPerformed(null);
\r
916 * @param e DOCUMENT ME!
\r
918 protected void delete_actionPerformed(ActionEvent e)
\r
921 if (viewport.getSelectionGroup() == null)
\r
927 SequenceGroup sg = viewport.getSelectionGroup();
\r
931 //Jalview no longer allows deletion of residues.
\r
932 //Check here whether any residues are in selection area
\r
933 /* if( sg.getEndRes()-sg.getStartRes() < viewport.alignment.getWidth()-1)
\r
935 for (int i = 0; i < sg.sequences.size(); i++)
\r
937 SequenceI seq = sg.getSequenceAt(i);
\r
938 int j = sg.getStartRes();
\r
941 if (!jalview.util.Comparison.isGap(seq.getCharAt(j)))
\r
943 JOptionPane.showInternalMessageDialog(
\r
944 Desktop.desktop, "Cannot delete residues from alignment!\n"
\r
945 + "Try hiding columns instead.",
\r
946 "Deletion of residues not permitted",
\r
947 JOptionPane.WARNING_MESSAGE);
\r
952 }while(j<=sg.getEndRes());
\r
957 addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment,
\r
958 HistoryItem.HIDE));
\r
961 for (int i = 0; i < sg.getSize(false); i++)
\r
963 SequenceI seq = sg.getSequenceAt(i);
\r
964 int index = viewport.getAlignment().findIndex(seq);
\r
966 seq.deleteChars(sg.getStartRes(), sg.getEndRes() + 1);
\r
968 // If the cut affects all sequences, remove highlighted columns
\r
969 if (sg.getSize(false) == viewport.alignment.getHeight())
\r
971 viewport.getColumnSelection().removeElements(sg.getStartRes(),
\r
972 sg.getEndRes() + 1);
\r
975 if (seq.getSequence().length() < 1)
\r
977 viewport.getAlignment().deleteSequence(seq);
\r
981 viewport.getAlignment().getSequences().setElementAt(seq, index);
\r
985 viewport.setSelectionGroup(null);
\r
986 viewport.alignment.deleteGroup(sg);
\r
988 viewport.firePropertyChange("alignment", null,
\r
989 viewport.getAlignment().getSequences());
\r
993 if (viewport.getAlignment().getHeight() < 1)
\r
997 this.setClosed(true);
\r
999 catch (Exception ex)
\r
1008 * @param e DOCUMENT ME!
\r
1010 protected void deleteGroups_actionPerformed(ActionEvent e)
\r
1012 viewport.alignment.deleteAllGroups();
\r
1013 viewport.setSelectionGroup(null);
\r
1014 alignPanel.repaint();
\r
1020 * @param e DOCUMENT ME!
\r
1022 public void selectAllSequenceMenuItem_actionPerformed(ActionEvent e)
\r
1024 SequenceGroup sg = new SequenceGroup();
\r
1026 for (int i = 0; i < viewport.getAlignment().getSequences().size();
\r
1029 sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);
\r
1032 sg.setEndRes(viewport.alignment.getWidth() - 1);
\r
1033 viewport.setSelectionGroup(sg);
\r
1034 PaintRefresher.Refresh(null, viewport.alignment);
\r
1040 * @param e DOCUMENT ME!
\r
1042 public void deselectAllSequenceMenuItem_actionPerformed(ActionEvent e)
\r
1044 if(viewport.cursorMode)
\r
1046 alignPanel.seqPanel.keyboardNo1 = null;
\r
1047 alignPanel.seqPanel.keyboardNo2 = null;
\r
1049 viewport.setSelectionGroup(null);
\r
1050 viewport.getColumnSelection().clear();
\r
1051 viewport.setSelectionGroup(null);
\r
1052 alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);
\r
1053 alignPanel.idPanel.idCanvas.searchResults = null;
\r
1054 alignPanel.repaint();
\r
1055 PaintRefresher.Refresh(null, viewport.alignment);
\r
1061 * @param e DOCUMENT ME!
\r
1063 public void invertSequenceMenuItem_actionPerformed(ActionEvent e)
\r
1065 SequenceGroup sg = viewport.getSelectionGroup();
\r
1069 selectAllSequenceMenuItem_actionPerformed(null);
\r
1074 for (int i = 0; i < viewport.getAlignment().getSequences().size();
\r
1077 sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false);
\r
1080 PaintRefresher.Refresh(null, viewport.alignment);
\r
1083 public void invertColSel_actionPerformed(ActionEvent e)
\r
1085 viewport.invertColumnSelection();
\r
1086 alignPanel.repaint();
\r
1093 * @param e DOCUMENT ME!
\r
1095 public void remove2LeftMenuItem_actionPerformed(ActionEvent e)
\r
1097 ColumnSelection colSel = viewport.getColumnSelection();
\r
1099 if (colSel.size() > 0)
\r
1101 addHistoryItem(new HistoryItem("Remove Left", viewport.alignment,
\r
1102 HistoryItem.HIDE));
\r
1104 int min = colSel.getMin();
\r
1105 viewport.getAlignment().trimLeft(min);
\r
1106 colSel.compensateForEdit(0, min);
\r
1108 if (viewport.getSelectionGroup() != null)
\r
1110 viewport.getSelectionGroup().adjustForRemoveLeft(min);
\r
1113 Vector groups = viewport.alignment.getGroups();
\r
1115 for (int i = 0; i < groups.size(); i++)
\r
1117 SequenceGroup sg = (SequenceGroup) groups.get(i);
\r
1119 if (!sg.adjustForRemoveLeft(min))
\r
1121 viewport.alignment.deleteGroup(sg);
\r
1125 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1132 * @param e DOCUMENT ME!
\r
1134 public void remove2RightMenuItem_actionPerformed(ActionEvent e)
\r
1136 ColumnSelection colSel = viewport.getColumnSelection();
\r
1138 if (colSel.size() > 0)
\r
1140 addHistoryItem(new HistoryItem("Remove Right", viewport.alignment,
\r
1141 HistoryItem.HIDE));
\r
1143 int max = colSel.getMax();
\r
1144 viewport.getAlignment().trimRight(max);
\r
1146 if (viewport.getSelectionGroup() != null)
\r
1148 viewport.getSelectionGroup().adjustForRemoveRight(max);
\r
1151 Vector groups = viewport.alignment.getGroups();
\r
1153 for (int i = 0; i < groups.size(); i++)
\r
1155 SequenceGroup sg = (SequenceGroup) groups.get(i);
\r
1157 if (!sg.adjustForRemoveRight(max))
\r
1159 viewport.alignment.deleteGroup(sg);
\r
1163 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1170 * @param e DOCUMENT ME!
\r
1172 public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e)
\r
1174 addHistoryItem(new HistoryItem("Remove Gapped Columns",
\r
1175 viewport.alignment, HistoryItem.HIDE));
\r
1177 //This is to maintain viewport position on first residue
\r
1178 //of first sequence
\r
1179 SequenceI seq = viewport.alignment.getSequenceAt(0);
\r
1180 int startRes = seq.findPosition(viewport.startRes);
\r
1182 viewport.getAlignment().removeGaps();
\r
1184 viewport.setStartRes(seq.findIndex(startRes)-1);
\r
1186 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1192 * @param e DOCUMENT ME!
\r
1194 public void removeAllGapsMenuItem_actionPerformed(ActionEvent e)
\r
1196 addHistoryItem(new HistoryItem("Remove Gaps", viewport.alignment,
\r
1197 HistoryItem.HIDE));
\r
1199 //This is to maintain viewport position on first residue
\r
1200 //of first sequence
\r
1201 SequenceI seq = viewport.alignment.getSequenceAt(0);
\r
1202 int startRes = seq.findPosition(viewport.startRes);
\r
1205 SequenceI current;
\r
1208 Vector seqs = null;
\r
1211 int end = viewport.alignment.getWidth();
\r
1213 if (viewport.getSelectionGroup() != null
\r
1214 && viewport.getSelectionGroup().getSequences(true) != null
\r
1215 && viewport.getSelectionGroup().getSize(true) > 0)
\r
1217 seqs = viewport.getSelectionGroup().getSequences(true);
\r
1218 start = viewport.getSelectionGroup().getStartRes();
\r
1219 end = viewport.getSelectionGroup().getEndRes()+1;
\r
1223 seqs = viewport.alignment.getSequences();
\r
1226 for (int i = 0; i < seqs.size(); i++)
\r
1228 current = (SequenceI) seqs.elementAt(i);
\r
1229 jSize = current.getLength();
\r
1231 // Removing a range is much quicker than removing gaps
\r
1232 // one by one for long sequences
\r
1234 int rangeStart=-1, rangeEnd=-1;
\r
1238 if (jalview.util.Comparison.isGap(current.getCharAt(j)))
\r
1240 if(rangeStart==-1)
\r
1255 current.deleteChars(rangeStart, rangeEnd);
\r
1256 j-=rangeEnd-rangeStart;
\r
1257 jSize-=rangeEnd-rangeStart;
\r
1265 while (j < end && j < jSize);
\r
1268 current.deleteChars(rangeStart, rangeEnd);
\r
1272 viewport.setStartRes(seq.findIndex(startRes)-1);
\r
1274 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1277 public void alignmentChanged()
\r
1279 if(viewport.padGaps)
\r
1280 viewport.getAlignment().padGaps();
\r
1282 if(viewport.vconsensus!=null && viewport.autoCalculateConsensus)
\r
1284 viewport.updateConsensus();
\r
1285 viewport.updateConservation();
\r
1287 resetAllColourSchemes();
\r
1288 if(alignPanel.overviewPanel!=null)
\r
1289 alignPanel.overviewPanel.updateOverviewImage();
\r
1291 viewport.alignment.adjustSequenceAnnotations();
\r
1293 alignPanel.repaint();
\r
1296 void resetAllColourSchemes()
\r
1298 ColourSchemeI cs = viewport.globalColourScheme;
\r
1301 if (cs instanceof ClustalxColourScheme)
\r
1303 ( (ClustalxColourScheme) viewport.getGlobalColourScheme()).
\r
1304 resetClustalX(viewport.alignment.getSequences(),
\r
1305 viewport.alignment.getWidth());
\r
1308 cs.setConsensus(viewport.vconsensus);
\r
1309 if (cs.conservationApplied())
\r
1311 Alignment al = (Alignment) viewport.alignment;
\r
1312 Conservation c = new Conservation("All",
\r
1313 ResidueProperties.propHash, 3,
\r
1314 al.getSequences(), 0,
\r
1315 al.getWidth() - 1);
\r
1317 c.verdict(false, viewport.ConsPercGaps);
\r
1319 cs.setConservation(c);
\r
1323 int s, sSize = viewport.alignment.getGroups().size();
\r
1324 for(s=0; s<sSize; s++)
\r
1326 SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s);
\r
1327 if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme)
\r
1329 ((ClustalxColourScheme)sg.cs).resetClustalX(
\r
1330 sg.getSequences(true), sg.getWidth());
\r
1332 sg.recalcConservation();
\r
1339 * @param e DOCUMENT ME!
\r
1341 public void padGapsMenuitem_actionPerformed(ActionEvent e)
\r
1343 addHistoryItem(new HistoryItem("Pad Gaps", viewport.alignment,
\r
1344 HistoryItem.HIDE));
\r
1346 viewport.padGaps = padGapsMenuitem.isSelected();
\r
1348 // if (viewport.padGaps)
\r
1349 alignmentChanged();
\r
1355 * @param e DOCUMENT ME!
\r
1357 public void findMenuItem_actionPerformed(ActionEvent e)
\r
1359 JInternalFrame frame = new JInternalFrame();
\r
1360 Finder finder = new Finder(viewport, alignPanel, frame);
\r
1361 frame.setContentPane(finder);
\r
1362 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
1363 Desktop.addInternalFrame(frame, "Find", 340, 110);
\r
1369 * @param e DOCUMENT ME!
\r
1371 public void font_actionPerformed(ActionEvent e)
\r
1373 new FontChooser(alignPanel);
\r
1376 public void smoothFont_actionPerformed(ActionEvent e)
\r
1378 viewport.antiAlias = smoothFont.isSelected();
\r
1379 alignPanel.annotationPanel.image = null;
\r
1380 alignPanel.repaint();
\r
1387 * @param e DOCUMENT ME!
\r
1389 protected void seqLimit_actionPerformed(ActionEvent e)
\r
1391 viewport.setShowJVSuffix(seqLimits.isSelected());
\r
1393 alignPanel.idPanel.idCanvas.setPreferredSize(alignPanel.calculateIdWidth());
\r
1394 alignPanel.repaint();
\r
1401 * @param e DOCUMENT ME!
\r
1403 protected void colourTextMenuItem_actionPerformed(ActionEvent e)
\r
1405 viewport.setColourText(colourTextMenuItem.isSelected());
\r
1406 alignPanel.repaint();
\r
1412 * @param e DOCUMENT ME!
\r
1414 public void wrapMenuItem_actionPerformed(ActionEvent e)
\r
1416 scaleAbove.setVisible(wrapMenuItem.isSelected());
\r
1417 scaleLeft.setVisible(wrapMenuItem.isSelected());
\r
1418 scaleRight.setVisible(wrapMenuItem.isSelected());
\r
1419 viewport.setWrapAlignment(wrapMenuItem.isSelected());
\r
1420 alignPanel.setWrapAlignment(wrapMenuItem.isSelected());
\r
1423 public void showAllSeqs_actionPerformed(ActionEvent e)
\r
1425 viewport.showAllHiddenSeqs();
\r
1429 public void showAllColumns_actionPerformed(ActionEvent e)
\r
1431 viewport.showAllHiddenColumns();
\r
1434 public void hideSelSequences_actionPerformed(ActionEvent e)
\r
1436 if(viewport.getSelectionGroup()==null)
\r
1439 SequenceI [] seqs = viewport.getSelectionGroup().getSequencesInOrder(
\r
1440 viewport.alignment
\r
1443 for(int i=0; i<seqs.length; i++)
\r
1445 viewport.hideSequence(seqs[i]);
\r
1448 alignPanel.repaint();
\r
1451 public void hideSelColumns_actionPerformed(ActionEvent e)
\r
1453 viewport.hideSelectedColumns();
\r
1454 alignPanel.repaint();
\r
1457 public void hiddenMarkers_actionPerformed(ActionEvent e)
\r
1459 viewport.setShowHiddenMarkers(hiddenMarkers.isSelected());
\r
1466 * @param e DOCUMENT ME!
\r
1468 protected void scaleAbove_actionPerformed(ActionEvent e)
\r
1470 viewport.setScaleAboveWrapped(scaleAbove.isSelected());
\r
1471 alignPanel.repaint();
\r
1477 * @param e DOCUMENT ME!
\r
1479 protected void scaleLeft_actionPerformed(ActionEvent e)
\r
1481 viewport.setScaleLeftWrapped(scaleLeft.isSelected());
\r
1482 alignPanel.repaint();
\r
1488 * @param e DOCUMENT ME!
\r
1490 protected void scaleRight_actionPerformed(ActionEvent e)
\r
1492 viewport.setScaleRightWrapped(scaleRight.isSelected());
\r
1493 alignPanel.repaint();
\r
1499 * @param e DOCUMENT ME!
\r
1501 public void viewBoxesMenuItem_actionPerformed(ActionEvent e)
\r
1503 viewport.setShowBoxes(viewBoxesMenuItem.isSelected());
\r
1504 alignPanel.repaint();
\r
1510 * @param e DOCUMENT ME!
\r
1512 public void viewTextMenuItem_actionPerformed(ActionEvent e)
\r
1514 viewport.setShowText(viewTextMenuItem.isSelected());
\r
1515 alignPanel.repaint();
\r
1521 * @param e DOCUMENT ME!
\r
1523 protected void renderGapsMenuItem_actionPerformed(ActionEvent e)
\r
1525 viewport.setRenderGaps(renderGapsMenuItem.isSelected());
\r
1526 alignPanel.repaint();
\r
1530 public FeatureSettings featureSettings;
\r
1531 public void featureSettings_actionPerformed(ActionEvent e)
\r
1533 if(featureSettings !=null )
\r
1535 featureSettings.close();
\r
1536 featureSettings = null;
\r
1538 featureSettings = new FeatureSettings(this);
\r
1544 * @param evt DOCUMENT ME!
\r
1546 public void showSeqFeatures_actionPerformed(ActionEvent evt)
\r
1548 viewport.setShowSequenceFeatures(showSeqFeatures.isSelected());
\r
1549 alignPanel.repaint();
\r
1550 if (alignPanel.getOverviewPanel() != null)
\r
1552 alignPanel.getOverviewPanel().updateOverviewImage();
\r
1559 * @param e DOCUMENT ME!
\r
1561 public void annotationPanelMenuItem_actionPerformed(ActionEvent e)
\r
1563 viewport.setShowAnnotation(annotationPanelMenuItem.isSelected());
\r
1564 alignPanel.setAnnotationVisible(annotationPanelMenuItem.isSelected());
\r
1570 * @param e DOCUMENT ME!
\r
1572 public void overviewMenuItem_actionPerformed(ActionEvent e)
\r
1574 if (alignPanel.overviewPanel != null)
\r
1579 JInternalFrame frame = new JInternalFrame();
\r
1580 OverviewPanel overview = new OverviewPanel(alignPanel);
\r
1581 frame.setContentPane(overview);
\r
1582 Desktop.addInternalFrame(frame, "Overview " + this.getTitle(),
\r
1583 frame.getWidth(), frame.getHeight());
\r
1585 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
1586 frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
\r
1588 public void internalFrameClosed(
\r
1589 javax.swing.event.InternalFrameEvent evt)
\r
1591 alignPanel.setOverviewPanel(null);
\r
1596 alignPanel.setOverviewPanel(overview);
\r
1602 * @param e DOCUMENT ME!
\r
1604 protected void noColourmenuItem_actionPerformed(ActionEvent e)
\r
1606 changeColour(null);
\r
1612 * @param e DOCUMENT ME!
\r
1614 public void clustalColour_actionPerformed(ActionEvent e)
\r
1616 changeColour(new ClustalxColourScheme(
\r
1617 viewport.alignment.getSequences(), viewport.alignment.getWidth()));
\r
1623 * @param e DOCUMENT ME!
\r
1625 public void zappoColour_actionPerformed(ActionEvent e)
\r
1627 changeColour(new ZappoColourScheme());
\r
1633 * @param e DOCUMENT ME!
\r
1635 public void taylorColour_actionPerformed(ActionEvent e)
\r
1637 changeColour(new TaylorColourScheme());
\r
1643 * @param e DOCUMENT ME!
\r
1645 public void hydrophobicityColour_actionPerformed(ActionEvent e)
\r
1647 changeColour(new HydrophobicColourScheme());
\r
1653 * @param e DOCUMENT ME!
\r
1655 public void helixColour_actionPerformed(ActionEvent e)
\r
1657 changeColour(new HelixColourScheme());
\r
1663 * @param e DOCUMENT ME!
\r
1665 public void strandColour_actionPerformed(ActionEvent e)
\r
1667 changeColour(new StrandColourScheme());
\r
1673 * @param e DOCUMENT ME!
\r
1675 public void turnColour_actionPerformed(ActionEvent e)
\r
1677 changeColour(new TurnColourScheme());
\r
1683 * @param e DOCUMENT ME!
\r
1685 public void buriedColour_actionPerformed(ActionEvent e)
\r
1687 changeColour(new BuriedColourScheme());
\r
1693 * @param e DOCUMENT ME!
\r
1695 public void nucleotideColour_actionPerformed(ActionEvent e)
\r
1697 changeColour(new NucleotideColourScheme());
\r
1700 public void annotationColour_actionPerformed(ActionEvent e)
\r
1702 new AnnotationColourChooser(viewport, alignPanel);
\r
1709 * @param e DOCUMENT ME!
\r
1711 protected void applyToAllGroups_actionPerformed(ActionEvent e)
\r
1713 viewport.setColourAppliesToAllGroups(applyToAllGroups.isSelected());
\r
1719 * @param cs DOCUMENT ME!
\r
1721 public void changeColour(ColourSchemeI cs)
\r
1723 int threshold = 0;
\r
1727 if (viewport.getAbovePIDThreshold())
\r
1729 threshold = SliderPanel.setPIDSliderSource(alignPanel, cs,
\r
1732 cs.setThreshold(threshold,
\r
1733 viewport.getIgnoreGapsConsensus());
\r
1735 viewport.setGlobalColourScheme(cs);
\r
1739 cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
\r
1742 if (viewport.getConservationSelected())
\r
1745 Alignment al = (Alignment) viewport.alignment;
\r
1746 Conservation c = new Conservation("All",
\r
1747 ResidueProperties.propHash, 3,
\r
1748 al.getSequences(), 0,
\r
1749 al.getWidth() - 1);
\r
1752 c.verdict(false, viewport.ConsPercGaps);
\r
1754 cs.setConservation(c);
\r
1756 cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, cs,
\r
1761 cs.setConservation(null);
\r
1764 cs.setConsensus(viewport.vconsensus);
\r
1767 viewport.setGlobalColourScheme(cs);
\r
1769 if (viewport.getColourAppliesToAllGroups())
\r
1771 Vector groups = viewport.alignment.getGroups();
\r
1773 for (int i = 0; i < groups.size(); i++)
\r
1775 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
\r
1783 if (cs instanceof ClustalxColourScheme)
\r
1785 sg.cs = new ClustalxColourScheme(
\r
1786 sg.getSequences(true), sg.getWidth());
\r
1788 else if (cs instanceof UserColourScheme)
\r
1790 sg.cs = new UserColourScheme( ( (UserColourScheme) cs).getColours());
\r
1796 sg.cs = (ColourSchemeI) cs.getClass().newInstance();
\r
1798 catch (Exception ex)
\r
1803 if (viewport.getAbovePIDThreshold()
\r
1804 || cs instanceof PIDColourScheme
\r
1805 || cs instanceof Blosum62ColourScheme)
\r
1807 sg.cs.setThreshold(threshold,
\r
1808 viewport.getIgnoreGapsConsensus());
\r
1810 sg.cs.setConsensus(AAFrequency.calculate(
\r
1811 sg.getSequences(true), 0,
\r
1815 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
\r
1818 if (viewport.getConservationSelected())
\r
1820 Conservation c = new Conservation("Group",
\r
1821 ResidueProperties.propHash, 3,
\r
1822 sg.getSequences(true), 0,
\r
1823 viewport.alignment.getWidth() - 1);
\r
1825 c.verdict(false, viewport.ConsPercGaps);
\r
1826 sg.cs.setConservation(c);
\r
1829 sg.cs.setConservation(null);
\r
1833 if (alignPanel.getOverviewPanel() != null)
\r
1835 alignPanel.getOverviewPanel().updateOverviewImage();
\r
1838 alignPanel.repaint();
\r
1844 * @param e DOCUMENT ME!
\r
1846 protected void modifyPID_actionPerformed(ActionEvent e)
\r
1848 if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme!=null)
\r
1850 SliderPanel.setPIDSliderSource(alignPanel,
\r
1851 viewport.getGlobalColourScheme(),
\r
1853 SliderPanel.showPIDSlider();
\r
1860 * @param e DOCUMENT ME!
\r
1862 protected void modifyConservation_actionPerformed(ActionEvent e)
\r
1864 if (viewport.getConservationSelected() && viewport.globalColourScheme!=null)
\r
1866 SliderPanel.setConservationSlider(alignPanel,
\r
1867 viewport.globalColourScheme,
\r
1869 SliderPanel.showConservationSlider();
\r
1876 * @param e DOCUMENT ME!
\r
1878 protected void conservationMenuItem_actionPerformed(ActionEvent e)
\r
1880 viewport.setConservationSelected(conservationMenuItem.isSelected());
\r
1882 viewport.setAbovePIDThreshold(false);
\r
1883 abovePIDThreshold.setSelected(false);
\r
1885 changeColour(viewport.getGlobalColourScheme());
\r
1887 modifyConservation_actionPerformed(null);
\r
1893 * @param e DOCUMENT ME!
\r
1895 public void abovePIDThreshold_actionPerformed(ActionEvent e)
\r
1897 viewport.setAbovePIDThreshold(abovePIDThreshold.isSelected());
\r
1899 conservationMenuItem.setSelected(false);
\r
1900 viewport.setConservationSelected(false);
\r
1902 changeColour(viewport.getGlobalColourScheme());
\r
1904 modifyPID_actionPerformed(null);
\r
1910 * @param e DOCUMENT ME!
\r
1912 public void userDefinedColour_actionPerformed(ActionEvent e)
\r
1914 if (e.getActionCommand().equals("User Defined..."))
\r
1916 new UserDefinedColours(alignPanel, null);
\r
1920 UserColourScheme udc = (UserColourScheme) UserDefinedColours.
\r
1921 getUserColourSchemes().get(e.getActionCommand());
\r
1923 changeColour(udc);
\r
1927 public void updateUserColourMenu()
\r
1930 Component[] menuItems = colourMenu.getMenuComponents();
\r
1931 int i, iSize = menuItems.length;
\r
1932 for (i = 0; i < iSize; i++)
\r
1934 if (menuItems[i].getName() != null &&
\r
1935 menuItems[i].getName().equals("USER_DEFINED"))
\r
1937 colourMenu.remove(menuItems[i]);
\r
1941 if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null)
\r
1943 java.util.Enumeration userColours = jalview.gui.UserDefinedColours.
\r
1944 getUserColourSchemes().keys();
\r
1946 while (userColours.hasMoreElements())
\r
1948 final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(userColours.
\r
1949 nextElement().toString());
\r
1950 radioItem.setName("USER_DEFINED");
\r
1951 radioItem.addMouseListener(new MouseAdapter()
\r
1953 public void mousePressed(MouseEvent evt)
\r
1955 if(evt.isControlDown() || SwingUtilities.isRightMouseButton(evt))
\r
1957 radioItem.removeActionListener(radioItem.getActionListeners()[0]);
\r
1959 int option = JOptionPane.showInternalConfirmDialog(jalview.gui.Desktop.desktop,
\r
1960 "Remove from default list?",
\r
1961 "Remove user defined colour",
\r
1962 JOptionPane.YES_NO_OPTION);
\r
1963 if(option == JOptionPane.YES_OPTION)
\r
1965 jalview.gui.UserDefinedColours.removeColourFromDefaults(radioItem.getText());
\r
1966 colourMenu.remove(radioItem);
\r
1969 radioItem.addActionListener(new ActionListener()
\r
1971 public void actionPerformed(ActionEvent evt)
\r
1973 userDefinedColour_actionPerformed(evt);
\r
1979 radioItem.addActionListener(new ActionListener()
\r
1981 public void actionPerformed(ActionEvent evt)
\r
1983 userDefinedColour_actionPerformed(evt);
\r
1987 colourMenu.insert(radioItem, 15);
\r
1988 colours.add(radioItem);
\r
1996 * @param e DOCUMENT ME!
\r
1998 public void PIDColour_actionPerformed(ActionEvent e)
\r
2000 changeColour(new PIDColourScheme());
\r
2006 * @param e DOCUMENT ME!
\r
2008 public void BLOSUM62Colour_actionPerformed(ActionEvent e)
\r
2010 changeColour(new Blosum62ColourScheme());
\r
2016 * @param e DOCUMENT ME!
\r
2018 public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)
\r
2020 addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment,
\r
2021 HistoryItem.SORT));
\r
2022 AlignmentSorter.sortByPID(viewport.getAlignment(),
\r
2023 viewport.getAlignment().getSequenceAt(0));
\r
2024 alignPanel.repaint();
\r
2030 * @param e DOCUMENT ME!
\r
2032 public void sortIDMenuItem_actionPerformed(ActionEvent e)
\r
2034 addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
\r
2035 HistoryItem.SORT));
\r
2036 AlignmentSorter.sortByID(viewport.getAlignment());
\r
2037 alignPanel.repaint();
\r
2043 * @param e DOCUMENT ME!
\r
2045 public void sortGroupMenuItem_actionPerformed(ActionEvent e)
\r
2047 addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
\r
2048 HistoryItem.SORT));
\r
2050 AlignmentSorter.sortByGroup(viewport.getAlignment());
\r
2051 alignPanel.repaint();
\r
2057 * @param e DOCUMENT ME!
\r
2059 public void removeRedundancyMenuItem_actionPerformed(ActionEvent e)
\r
2061 new RedundancyPanel(alignPanel, this);
\r
2068 * @param e DOCUMENT ME!
\r
2070 public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)
\r
2072 if ( (viewport.getSelectionGroup() == null) ||
\r
2073 (viewport.getSelectionGroup().getSize(false) < 2))
\r
2075 JOptionPane.showInternalMessageDialog(this,
\r
2076 "You must select at least 2 sequences.",
\r
2077 "Invalid Selection",
\r
2078 JOptionPane.WARNING_MESSAGE);
\r
2082 JInternalFrame frame = new JInternalFrame();
\r
2083 frame.setContentPane(new PairwiseAlignPanel(viewport));
\r
2084 Desktop.addInternalFrame(frame, "Pairwise Alignment", 600, 500);
\r
2091 * @param e DOCUMENT ME!
\r
2093 public void PCAMenuItem_actionPerformed(ActionEvent e)
\r
2095 if ( ( (viewport.getSelectionGroup() != null) &&
\r
2096 (viewport.getSelectionGroup().getSize(false) < 4) &&
\r
2097 (viewport.getSelectionGroup().getSize(false) > 0)) ||
\r
2098 (viewport.getAlignment().getHeight() < 4))
\r
2100 JOptionPane.showInternalMessageDialog(this,
\r
2101 "Principal component analysis must take\n" +
\r
2102 "at least 4 input sequences.",
\r
2103 "Sequence selection insufficient",
\r
2104 JOptionPane.WARNING_MESSAGE);
\r
2109 new PCAPanel(viewport);
\r
2113 public void autoCalculate_actionPerformed(ActionEvent e)
\r
2115 viewport.autoCalculateConsensus = autoCalculate.isSelected();
\r
2116 if(viewport.autoCalculateConsensus)
\r
2118 alignmentChanged();
\r
2126 * @param e DOCUMENT ME!
\r
2128 public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)
\r
2130 NewTreePanel("AV", "PID", "Average distance tree using PID");
\r
2136 * @param e DOCUMENT ME!
\r
2138 public void neighbourTreeMenuItem_actionPerformed(ActionEvent e)
\r
2140 NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
\r
2146 * @param e DOCUMENT ME!
\r
2148 protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)
\r
2150 NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
\r
2156 * @param e DOCUMENT ME!
\r
2158 protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)
\r
2160 NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
\r
2166 * @param type DOCUMENT ME!
\r
2167 * @param pwType DOCUMENT ME!
\r
2168 * @param title DOCUMENT ME!
\r
2170 void NewTreePanel(String type, String pwType, String title)
\r
2174 if ( (viewport.getSelectionGroup() != null) &&
\r
2175 (viewport.getSelectionGroup().getSize(false) > 3))
\r
2178 SequenceGroup sg = viewport.getSelectionGroup();
\r
2180 /* Decide if the selection is a column region */
\r
2181 while (s < sg.getSize(false))
\r
2183 if ( ( (SequenceI) sg.getSequences(false).elementAt(s++)).getLength() <
\r
2186 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2187 "The selected region to create a tree may\nonly contain residues or gaps.\n" +
\r
2188 "Try using the Pad function in the edit menu,\n" +
\r
2189 "or one of the multiple sequence alignment web services.",
\r
2190 "Sequences in selection are not aligned",
\r
2191 JOptionPane.WARNING_MESSAGE);
\r
2197 title = title + " on region";
\r
2198 tp = new TreePanel(viewport, type, pwType);
\r
2202 //are the sequences aligned?
\r
2203 if (!viewport.alignment.isAligned())
\r
2205 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2206 "The sequences must be aligned before creating a tree.\n" +
\r
2207 "Try using the Pad function in the edit menu,\n" +
\r
2208 "or one of the multiple sequence alignment web services.",
\r
2209 "Sequences not aligned",
\r
2210 JOptionPane.WARNING_MESSAGE);
\r
2215 if(viewport.alignment.getHeight()<2)
\r
2218 tp = new TreePanel(viewport, type, pwType);
\r
2221 addTreeMenuItem(tp, title);
\r
2223 Desktop.addInternalFrame(tp, title + " from " + this.title, 600, 500);
\r
2229 * @param title DOCUMENT ME!
\r
2230 * @param order DOCUMENT ME!
\r
2232 public void addSortByOrderMenuItem(String title, final AlignmentOrder order)
\r
2234 final JMenuItem item = new JMenuItem("by " + title);
\r
2236 item.addActionListener(new java.awt.event.ActionListener()
\r
2238 public void actionPerformed(ActionEvent e)
\r
2240 addHistoryItem(new HistoryItem("Sort", viewport.alignment,
\r
2241 HistoryItem.SORT));
\r
2243 // TODO: JBPNote - have to map order entries to curent SequenceI pointers
\r
2244 AlignmentSorter.sortBy(viewport.getAlignment(), order);
\r
2245 alignPanel.repaint();
\r
2251 * Maintain the Order by->Displayed Tree menu.
\r
2252 * Creates a new menu item for a TreePanel with an appropriate
\r
2253 * <code>jalview.analysis.AlignmentSorter</code> call. Listeners are added
\r
2254 * to remove the menu item when the treePanel is closed, and adjust
\r
2255 * the tree leaf to sequence mapping when the alignment is modified.
\r
2256 * @param treePanel Displayed tree window.
\r
2257 * @param title SortBy menu item title.
\r
2259 void addTreeMenuItem(final TreePanel treePanel, String title)
\r
2261 final JMenuItem item = new JMenuItem(title);
\r
2265 if (treeCount == 1)
\r
2267 sort.add(sortByTreeMenu);
\r
2270 sortByTreeMenu.add(item);
\r
2271 item.addActionListener(new java.awt.event.ActionListener()
\r
2273 public void actionPerformed(ActionEvent e)
\r
2275 addHistoryItem(new HistoryItem("Tree Sort",
\r
2276 viewport.alignment, HistoryItem.SORT));
\r
2277 AlignmentSorter.sortByTree(viewport.getAlignment(),
\r
2278 treePanel.getTree());
\r
2279 alignPanel.repaint();
\r
2283 treePanel.addInternalFrameListener(new javax.swing.event.
\r
2284 InternalFrameAdapter()
\r
2286 public void internalFrameClosed(
\r
2287 javax.swing.event.InternalFrameEvent evt)
\r
2290 sortByTreeMenu.remove(item);
\r
2292 if (treeCount == 0)
\r
2294 sort.remove(sortByTreeMenu);
\r
2302 * Work out whether the whole set of sequences
\r
2303 * or just the selected set will be submitted for multiple alignment.
\r
2306 private jalview.datamodel.AlignmentView gatherSequencesForAlignment()
\r
2308 // Now, check we have enough sequences
\r
2309 AlignmentView msa = null;
\r
2311 if ( (viewport.getSelectionGroup() != null) &&
\r
2312 (viewport.getSelectionGroup().getSize(false) > 1))
\r
2314 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
\r
2315 /*SequenceGroup seqs = viewport.getSelectionGroup();
\r
2317 msa = new SequenceI[sz = seqs.getSize(false)];
\r
2319 for (int i = 0; i < sz; i++)
\r
2321 msa[i] = (SequenceI) seqs.getSequenceAt(i);
\r
2323 msa = viewport.getAlignmentView(true);
\r
2327 /*Vector seqs = viewport.getAlignment().getSequences();
\r
2329 if (seqs.size() > 1)
\r
2331 msa = new SequenceI[seqs.size()];
\r
2333 for (int i = 0; i < seqs.size(); i++)
\r
2335 msa[i] = (SequenceI) seqs.elementAt(i);
\r
2338 msa = viewport.getAlignmentView(false);
\r
2344 * Decides what is submitted to a secondary structure prediction service,
\r
2345 * the currently selected sequence, or the currently selected alignment
\r
2346 * (where the first sequence in the set is the one that the prediction
\r
2349 SequenceI[] gatherSeqOrMsaForSecStrPrediction()
\r
2351 SequenceI seq = null;
\r
2352 SequenceI[] msa = null;
\r
2354 if ( (viewport.getSelectionGroup() != null) &&
\r
2355 (viewport.getSelectionGroup().getSize(false) > 0))
\r
2357 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
\r
2358 SequenceGroup seqs = viewport.getSelectionGroup();
\r
2360 if ( (seqs.getSize(false) == 1) || !viewport.alignment.isAligned())
\r
2362 seq = (SequenceI) seqs.getSequenceAt(0);
\r
2367 msa = new SequenceI[sz = seqs.getSize(false)];
\r
2369 for (int i = 0; i < sz; i++)
\r
2371 msa[i] = (SequenceI) seqs.getSequenceAt(i);
\r
2377 Vector seqs = viewport.getAlignment().getSequences();
\r
2379 if ( (seqs.size() == 1) || !viewport.alignment.isAligned())
\r
2381 seq = (SequenceI) seqs.elementAt(0);
\r
2385 msa = new SequenceI[seqs.size()];
\r
2387 for (int i = 0; i < seqs.size(); i++)
\r
2389 msa[i] = (SequenceI) seqs.elementAt(i);
\r
2401 return new SequenceI[]
\r
2411 * @param e DOCUMENT ME!
\r
2413 protected void LoadtreeMenuItem_actionPerformed(ActionEvent e)
\r
2415 // Pick the tree file
\r
2416 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
2418 "LAST_DIRECTORY"));
\r
2419 chooser.setFileView(new JalviewFileView());
\r
2420 chooser.setDialogTitle("Select a newick-like tree file");
\r
2421 chooser.setToolTipText("Load a tree file");
\r
2423 int value = chooser.showOpenDialog(null);
\r
2425 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
2427 String choice = chooser.getSelectedFile().getPath();
\r
2428 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
2432 jalview.io.NewickFile fin = new jalview.io.NewickFile(choice,
\r
2434 viewport.setCurrentTree(ShowNewickTree(fin, choice).getTree());
\r
2436 catch (Exception ex)
\r
2438 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2439 "Problem reading tree file",
\r
2441 JOptionPane.WARNING_MESSAGE);
\r
2442 ex.printStackTrace();
\r
2448 public TreePanel ShowNewickTree(NewickFile nf, String title)
\r
2450 return ShowNewickTree(nf,title,600,500,4,5);
\r
2455 * @param nf DOCUMENT ME!
\r
2456 * @param title DOCUMENT ME!
\r
2458 * @return DOCUMENT ME!
\r
2460 public TreePanel ShowNewickTree(NewickFile nf, String title, int w,int h,int x, int y)
\r
2462 TreePanel tp = null;
\r
2468 if (nf.getTree() != null)
\r
2470 tp = new TreePanel(viewport,
\r
2478 tp.setLocation(x,y);
\r
2481 Desktop.addInternalFrame(tp, title, w, h);
\r
2482 addTreeMenuItem(tp, title);
\r
2485 catch (Exception ex)
\r
2487 ex.printStackTrace();
\r
2498 PrinterJob printJob = PrinterJob.getPrinterJob();
\r
2499 PageFormat pf = printJob.pageDialog(printJob.defaultPage());
\r
2500 printJob.setPrintable(alignPanel, pf);
\r
2502 if (printJob.printDialog())
\r
2508 catch (Exception PrintException)
\r
2510 PrintException.printStackTrace();
\r
2517 * Generates menu items and listener event actions for web service clients
\r
2520 public void BuildWebServiceMenu()
\r
2522 if ( (Discoverer.services != null)
\r
2523 && (Discoverer.services.size() > 0))
\r
2525 Vector msaws = (Vector) Discoverer.services.get("MsaWS");
\r
2526 Vector secstrpr = (Vector) Discoverer.services.get("SecStrPred");
\r
2527 Vector wsmenu = new Vector();
\r
2528 if (msaws != null)
\r
2530 // Add any Multiple Sequence Alignment Services
\r
2531 final JMenu msawsmenu = new JMenu("Alignment");
\r
2532 final AlignFrame af = this;
\r
2533 for (int i = 0, j = msaws.size(); i < j; i++)
\r
2535 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws.
\r
2537 final JMenuItem method = new JMenuItem(sh.getName());
\r
2538 method.addActionListener(new ActionListener()
\r
2540 public void actionPerformed(ActionEvent e)
\r
2542 AlignmentView msa = gatherSequencesForAlignment();
\r
2543 new jalview.ws.MsaWSClient(sh, title, msa,
\r
2544 false, true, viewport.getAlignment().getDataset(), af);
\r
2549 msawsmenu.add(method);
\r
2550 // Deal with services that we know accept partial alignments.
\r
2551 if (sh.getName().indexOf("lustal") > -1)
\r
2553 // We know that ClustalWS can accept partial alignments for refinement.
\r
2554 final JMenuItem methodR = new JMenuItem(sh.getName()+" Realign");
\r
2555 methodR.addActionListener(new ActionListener()
\r
2557 public void actionPerformed(ActionEvent e)
\r
2559 AlignmentView msa = gatherSequencesForAlignment();
\r
2560 new jalview.ws.MsaWSClient(sh, title, msa,
\r
2561 true, true, viewport.getAlignment().getDataset(), af);
\r
2566 msawsmenu.add(methodR);
\r
2570 wsmenu.add(msawsmenu);
\r
2572 if (secstrpr != null)
\r
2574 // Add any secondary structure prediction services
\r
2575 final JMenu secstrmenu = new JMenu("Secondary Structure Prediction");
\r
2576 for (int i = 0, j = secstrpr.size(); i < j; i++)
\r
2578 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle)
\r
2580 final JMenuItem method = new JMenuItem(sh.getName());
\r
2581 method.addActionListener(new ActionListener()
\r
2583 public void actionPerformed(ActionEvent e)
\r
2585 SequenceI[] msa = gatherSeqOrMsaForSecStrPrediction();
\r
2586 if (msa.length == 1)
\r
2588 // Single Sequence prediction
\r
2589 new jalview.ws.JPredClient(sh,title, msa[0]);
\r
2593 if (msa.length > 1)
\r
2595 // Single Sequence prediction
\r
2596 jalview.ws.JPredClient ct = new jalview.ws.JPredClient(sh,
\r
2602 secstrmenu.add(method);
\r
2604 wsmenu.add(secstrmenu);
\r
2606 this.webService.removeAll();
\r
2607 for (int i = 0, j = wsmenu.size(); i < j; i++)
\r
2609 webService.add( (JMenu) wsmenu.get(i));
\r
2614 this.webService.removeAll();
\r
2615 this.webService.add(this.webServiceNoServices);
\r
2617 // TODO: add in rediscovery function
\r
2618 // TODO: reduce code redundancy.
\r
2619 // TODO: group services by location as well as function.
\r
2622 /* public void vamsasStore_actionPerformed(ActionEvent e)
\r
2624 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
2625 getProperty("LAST_DIRECTORY"));
\r
2627 chooser.setFileView(new JalviewFileView());
\r
2628 chooser.setDialogTitle("Export to Vamsas file");
\r
2629 chooser.setToolTipText("Export");
\r
2631 int value = chooser.showSaveDialog(this);
\r
2633 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
2635 jalview.io.VamsasDatastore vs = new jalview.io.VamsasDatastore(viewport);
\r
2636 //vs.store(chooser.getSelectedFile().getAbsolutePath() );
\r
2637 vs.storeJalview( chooser.getSelectedFile().getAbsolutePath(), this);
\r
2644 public void showTranslation_actionPerformed(ActionEvent e)
\r
2646 SequenceI [] selection = viewport.getSelectionAsNewSequence();
\r
2647 String [] seqstring = viewport.getViewAsString(true);
\r
2649 int s, sSize = selection.length;
\r
2650 SequenceI [] newSeq = new SequenceI[sSize];
\r
2653 StringBuffer protein;
\r
2655 for(s=0; s<sSize; s++)
\r
2657 protein = new StringBuffer();
\r
2658 seq = AlignSeq.extractGaps("-. ", seqstring[s]);
\r
2659 resSize = seq.length();
\r
2660 resSize -= resSize%3;
\r
2662 for(res = 0; res < resSize; res+=3)
\r
2664 String codon = seq.substring(res, res+3);
\r
2665 codon = codon.replace('U', 'T');
\r
2666 String aa = ResidueProperties.codonTranslate(codon);
\r
2668 protein.append(viewport.getGapCharacter());
\r
2669 else if(aa.equals("STOP"))
\r
2670 protein.append("X");
\r
2672 protein.append( aa );
\r
2674 newSeq[s] = new Sequence(selection[s].getName(),
\r
2675 protein.toString());
\r
2679 AlignmentI al = new Alignment(newSeq);
\r
2680 al.setDataset(null);
\r
2683 ////////////////////////////////
\r
2684 // Copy annotations across
\r
2685 jalview.datamodel.AlignmentAnnotation[] annotations
\r
2686 = viewport.alignment.getAlignmentAnnotation();
\r
2688 if(annotations!=null)
\r
2690 for (int i = 0; i < annotations.length; i++)
\r
2692 if (annotations[i].label.equals("Quality") ||
\r
2693 annotations[i].label.equals("Conservation") ||
\r
2694 annotations[i].label.equals("Consensus"))
\r
2699 aSize = viewport.alignment.getWidth() / 3;
\r
2700 jalview.datamodel.Annotation[] anots =
\r
2701 new jalview.datamodel.Annotation[aSize];
\r
2703 for (a = 0; a < viewport.alignment.getWidth(); a++)
\r
2705 if (annotations[i].annotations[a] == null
\r
2706 || annotations[i].annotations[a] == null)
\r
2709 anots[a / 3] = new Annotation(
\r
2710 annotations[i].annotations[a].displayCharacter,
\r
2711 annotations[i].annotations[a].description,
\r
2712 annotations[i].annotations[a].secondaryStructure,
\r
2713 annotations[i].annotations[a].value,
\r
2714 annotations[i].annotations[a].colour);
\r
2717 jalview.datamodel.AlignmentAnnotation aa
\r
2718 = new jalview.datamodel.AlignmentAnnotation(annotations[i].label,
\r
2719 annotations[i].description, anots);
\r
2720 al.addAnnotation(aa);
\r
2724 AlignFrame af = new AlignFrame(al);
\r
2725 Desktop.addInternalFrame(af, "Translation of "+this.getTitle(),
\r
2727 NEW_WINDOW_HEIGHT);
\r
2730 // AlignViewport newViewport = new AlignViewport(al);
\r
2731 // AlignmentPanel ap = new AlignmentPanel(this, newViewport);
\r
2732 // tabbedPane.add("Protein", ap);
\r
2733 // viewports.add(newViewport);
\r
2734 // alignPanels.add(ap);
\r
2737 /////////////////////////
\r
2739 // AlignViewport ds = new AlignViewport(al.getDataset());
\r
2740 // ds.setDataset(true);
\r
2741 // AlignmentPanel dap = new AlignmentPanel(this, ds);
\r
2742 // tabbedPane.add("Dataset", dap);
\r
2743 // viewports.add(ds);
\r
2744 // alignPanels.add(dap);
\r
2745 /////////////////////////
\r
2750 /*public void tabSelected()
\r
2752 int index = tabbedPane.getSelectedIndex();
\r
2753 viewport = (AlignViewport)viewports.elementAt(index);
\r
2754 alignPanel = (AlignmentPanel)alignPanels.elementAt(index);
\r
2760 * @param String DOCUMENT ME!
\r
2762 public boolean parseFeaturesFile(String file, String type)
\r
2764 boolean featuresFile = false;
\r
2766 featuresFile = new FeaturesFile(file, type).parse(viewport.alignment.getDataset(),
\r
2767 alignPanel.seqPanel.seqCanvas.
\r
2768 getFeatureRenderer().featureColours,
\r
2771 catch(Exception ex)
\r
2773 ex.printStackTrace();
\r
2778 viewport.showSequenceFeatures = true;
\r
2779 showSeqFeatures.setSelected(true);
\r
2780 alignPanel.repaint();
\r
2783 return featuresFile;
\r
2786 public void dragEnter(DropTargetDragEvent evt)
\r
2789 public void dragExit(DropTargetEvent evt)
\r
2792 public void dragOver(DropTargetDragEvent evt)
\r
2795 public void dropActionChanged(DropTargetDragEvent evt)
\r
2798 public void drop(DropTargetDropEvent evt)
\r
2800 Transferable t = evt.getTransferable();
\r
2801 java.util.List files = null;
\r
2805 DataFlavor uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String");
\r
2806 if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
\r
2808 //Works on Windows and MacOSX
\r
2809 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
2810 files = (java.util.List) t.getTransferData(DataFlavor.javaFileListFlavor);
\r
2812 else if (t.isDataFlavorSupported(uriListFlavor))
\r
2814 // This is used by Unix drag system
\r
2815 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
2816 String data = (String) t.getTransferData(uriListFlavor);
\r
2817 files = new java.util.ArrayList(1);
\r
2818 for (java.util.StringTokenizer st = new java.util.StringTokenizer(
\r
2821 st.hasMoreTokens(); )
\r
2823 String s = st.nextToken();
\r
2824 if (s.startsWith("#"))
\r
2826 // the line is a comment (as per the RFC 2483)
\r
2830 java.net.URI uri = new java.net.URI(s);
\r
2831 java.io.File file = new java.io.File(uri);
\r
2836 catch (Exception e)
\r
2838 e.printStackTrace();
\r
2840 if (files != null)
\r
2845 for (int i = 0; i < files.size(); i++)
\r
2847 loadJalviewDataFile(files.get(i).toString());
\r
2850 catch (Exception ex)
\r
2852 ex.printStackTrace();
\r
2857 // This method will attempt to load a "dropped" file first by testing
\r
2858 // whether its and Annotation file, then features file. If both are
\r
2859 // false then the user may have dropped an alignment file onto this
\r
2861 public void loadJalviewDataFile(String file)
\r
2864 boolean isAnnotation = new AnnotationFile().readAnnotationFile(viewport.
\r
2867 if (!isAnnotation)
\r
2869 boolean isGroupsFile = parseFeaturesFile(file,
\r
2870 AppletFormatAdapter.FILE);
\r
2871 if (!isGroupsFile)
\r
2873 String format = new IdentifyFile().Identify(file, FormatAdapter.FILE);
\r
2874 new FileLoader().LoadFile(viewport, file, FormatAdapter.FILE, format);
\r
2880 alignPanel.adjustAnnotationHeight();
\r
2883 }catch(Exception ex)
\r
2885 ex.printStackTrace();
\r