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
1288 resetAllColourSchemes();
\r
1289 if(alignPanel.overviewPanel!=null)
\r
1290 alignPanel.overviewPanel.updateOverviewImage();
\r
1292 viewport.alignment.adjustSequenceAnnotations();
\r
1294 if(alignPanel.overviewPanel!=null)
\r
1295 alignPanel.overviewPanel.updateOverviewImage();
\r
1297 alignPanel.repaint();
\r
1300 void resetAllColourSchemes()
\r
1302 ColourSchemeI cs = viewport.globalColourScheme;
\r
1305 if (cs instanceof ClustalxColourScheme)
\r
1307 ( (ClustalxColourScheme) viewport.getGlobalColourScheme()).
\r
1308 resetClustalX(viewport.alignment.getSequences(),
\r
1309 viewport.alignment.getWidth());
\r
1312 cs.setConsensus(viewport.vconsensus);
\r
1313 if (cs.conservationApplied())
\r
1315 Alignment al = (Alignment) viewport.alignment;
\r
1316 Conservation c = new Conservation("All",
\r
1317 ResidueProperties.propHash, 3,
\r
1318 al.getSequences(), 0,
\r
1319 al.getWidth() - 1);
\r
1321 c.verdict(false, viewport.ConsPercGaps);
\r
1323 cs.setConservation(c);
\r
1327 int s, sSize = viewport.alignment.getGroups().size();
\r
1328 for(s=0; s<sSize; s++)
\r
1330 SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s);
\r
1331 if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme)
\r
1333 ((ClustalxColourScheme)sg.cs).resetClustalX(
\r
1334 sg.getSequences(true), sg.getWidth());
\r
1336 sg.recalcConservation();
\r
1343 * @param e DOCUMENT ME!
\r
1345 public void padGapsMenuitem_actionPerformed(ActionEvent e)
\r
1347 addHistoryItem(new HistoryItem("Pad Gaps", viewport.alignment,
\r
1348 HistoryItem.HIDE));
\r
1350 viewport.padGaps = padGapsMenuitem.isSelected();
\r
1352 // if (viewport.padGaps)
\r
1353 alignmentChanged();
\r
1359 * @param e DOCUMENT ME!
\r
1361 public void findMenuItem_actionPerformed(ActionEvent e)
\r
1363 JInternalFrame frame = new JInternalFrame();
\r
1364 Finder finder = new Finder(viewport, alignPanel, frame);
\r
1365 frame.setContentPane(finder);
\r
1366 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
1367 Desktop.addInternalFrame(frame, "Find", 340, 110);
\r
1373 * @param e DOCUMENT ME!
\r
1375 public void font_actionPerformed(ActionEvent e)
\r
1377 new FontChooser(alignPanel);
\r
1380 public void smoothFont_actionPerformed(ActionEvent e)
\r
1382 viewport.antiAlias = smoothFont.isSelected();
\r
1383 alignPanel.annotationPanel.image = null;
\r
1384 alignPanel.repaint();
\r
1391 * @param e DOCUMENT ME!
\r
1393 protected void seqLimit_actionPerformed(ActionEvent e)
\r
1395 viewport.setShowJVSuffix(seqLimits.isSelected());
\r
1397 alignPanel.idPanel.idCanvas.setPreferredSize(alignPanel.calculateIdWidth());
\r
1398 alignPanel.repaint();
\r
1405 * @param e DOCUMENT ME!
\r
1407 protected void colourTextMenuItem_actionPerformed(ActionEvent e)
\r
1409 viewport.setColourText(colourTextMenuItem.isSelected());
\r
1410 alignPanel.repaint();
\r
1416 * @param e DOCUMENT ME!
\r
1418 public void wrapMenuItem_actionPerformed(ActionEvent e)
\r
1420 scaleAbove.setVisible(wrapMenuItem.isSelected());
\r
1421 scaleLeft.setVisible(wrapMenuItem.isSelected());
\r
1422 scaleRight.setVisible(wrapMenuItem.isSelected());
\r
1423 viewport.setWrapAlignment(wrapMenuItem.isSelected());
\r
1424 alignPanel.setWrapAlignment(wrapMenuItem.isSelected());
\r
1427 public void showAllSeqs_actionPerformed(ActionEvent e)
\r
1429 viewport.showAllHiddenSeqs();
\r
1432 public void showAllColumns_actionPerformed(ActionEvent e)
\r
1434 viewport.showAllHiddenColumns();
\r
1438 public void hideSelSequences_actionPerformed(ActionEvent e)
\r
1440 viewport.hideAllSelectedSeqs();
\r
1443 public void hideSelColumns_actionPerformed(ActionEvent e)
\r
1445 viewport.hideSelectedColumns();
\r
1446 alignPanel.repaint();
\r
1449 public void hiddenMarkers_actionPerformed(ActionEvent e)
\r
1451 viewport.setShowHiddenMarkers(hiddenMarkers.isSelected());
\r
1458 * @param e DOCUMENT ME!
\r
1460 protected void scaleAbove_actionPerformed(ActionEvent e)
\r
1462 viewport.setScaleAboveWrapped(scaleAbove.isSelected());
\r
1463 alignPanel.repaint();
\r
1469 * @param e DOCUMENT ME!
\r
1471 protected void scaleLeft_actionPerformed(ActionEvent e)
\r
1473 viewport.setScaleLeftWrapped(scaleLeft.isSelected());
\r
1474 alignPanel.repaint();
\r
1480 * @param e DOCUMENT ME!
\r
1482 protected void scaleRight_actionPerformed(ActionEvent e)
\r
1484 viewport.setScaleRightWrapped(scaleRight.isSelected());
\r
1485 alignPanel.repaint();
\r
1491 * @param e DOCUMENT ME!
\r
1493 public void viewBoxesMenuItem_actionPerformed(ActionEvent e)
\r
1495 viewport.setShowBoxes(viewBoxesMenuItem.isSelected());
\r
1496 alignPanel.repaint();
\r
1502 * @param e DOCUMENT ME!
\r
1504 public void viewTextMenuItem_actionPerformed(ActionEvent e)
\r
1506 viewport.setShowText(viewTextMenuItem.isSelected());
\r
1507 alignPanel.repaint();
\r
1513 * @param e DOCUMENT ME!
\r
1515 protected void renderGapsMenuItem_actionPerformed(ActionEvent e)
\r
1517 viewport.setRenderGaps(renderGapsMenuItem.isSelected());
\r
1518 alignPanel.repaint();
\r
1522 public FeatureSettings featureSettings;
\r
1523 public void featureSettings_actionPerformed(ActionEvent e)
\r
1525 if(featureSettings !=null )
\r
1527 featureSettings.close();
\r
1528 featureSettings = null;
\r
1530 featureSettings = new FeatureSettings(this);
\r
1536 * @param evt DOCUMENT ME!
\r
1538 public void showSeqFeatures_actionPerformed(ActionEvent evt)
\r
1540 viewport.setShowSequenceFeatures(showSeqFeatures.isSelected());
\r
1541 alignPanel.repaint();
\r
1542 if (alignPanel.getOverviewPanel() != null)
\r
1544 alignPanel.getOverviewPanel().updateOverviewImage();
\r
1551 * @param e DOCUMENT ME!
\r
1553 public void annotationPanelMenuItem_actionPerformed(ActionEvent e)
\r
1555 viewport.setShowAnnotation(annotationPanelMenuItem.isSelected());
\r
1556 alignPanel.setAnnotationVisible(annotationPanelMenuItem.isSelected());
\r
1562 * @param e DOCUMENT ME!
\r
1564 public void overviewMenuItem_actionPerformed(ActionEvent e)
\r
1566 if (alignPanel.overviewPanel != null)
\r
1571 JInternalFrame frame = new JInternalFrame();
\r
1572 OverviewPanel overview = new OverviewPanel(alignPanel);
\r
1573 frame.setContentPane(overview);
\r
1574 Desktop.addInternalFrame(frame, "Overview " + this.getTitle(),
\r
1575 frame.getWidth(), frame.getHeight());
\r
1577 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
1578 frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
\r
1580 public void internalFrameClosed(
\r
1581 javax.swing.event.InternalFrameEvent evt)
\r
1583 alignPanel.setOverviewPanel(null);
\r
1588 alignPanel.setOverviewPanel(overview);
\r
1594 * @param e DOCUMENT ME!
\r
1596 protected void noColourmenuItem_actionPerformed(ActionEvent e)
\r
1598 changeColour(null);
\r
1604 * @param e DOCUMENT ME!
\r
1606 public void clustalColour_actionPerformed(ActionEvent e)
\r
1608 changeColour(new ClustalxColourScheme(
\r
1609 viewport.alignment.getSequences(), viewport.alignment.getWidth()));
\r
1615 * @param e DOCUMENT ME!
\r
1617 public void zappoColour_actionPerformed(ActionEvent e)
\r
1619 changeColour(new ZappoColourScheme());
\r
1625 * @param e DOCUMENT ME!
\r
1627 public void taylorColour_actionPerformed(ActionEvent e)
\r
1629 changeColour(new TaylorColourScheme());
\r
1635 * @param e DOCUMENT ME!
\r
1637 public void hydrophobicityColour_actionPerformed(ActionEvent e)
\r
1639 changeColour(new HydrophobicColourScheme());
\r
1645 * @param e DOCUMENT ME!
\r
1647 public void helixColour_actionPerformed(ActionEvent e)
\r
1649 changeColour(new HelixColourScheme());
\r
1655 * @param e DOCUMENT ME!
\r
1657 public void strandColour_actionPerformed(ActionEvent e)
\r
1659 changeColour(new StrandColourScheme());
\r
1665 * @param e DOCUMENT ME!
\r
1667 public void turnColour_actionPerformed(ActionEvent e)
\r
1669 changeColour(new TurnColourScheme());
\r
1675 * @param e DOCUMENT ME!
\r
1677 public void buriedColour_actionPerformed(ActionEvent e)
\r
1679 changeColour(new BuriedColourScheme());
\r
1685 * @param e DOCUMENT ME!
\r
1687 public void nucleotideColour_actionPerformed(ActionEvent e)
\r
1689 changeColour(new NucleotideColourScheme());
\r
1692 public void annotationColour_actionPerformed(ActionEvent e)
\r
1694 new AnnotationColourChooser(viewport, alignPanel);
\r
1701 * @param e DOCUMENT ME!
\r
1703 protected void applyToAllGroups_actionPerformed(ActionEvent e)
\r
1705 viewport.setColourAppliesToAllGroups(applyToAllGroups.isSelected());
\r
1711 * @param cs DOCUMENT ME!
\r
1713 public void changeColour(ColourSchemeI cs)
\r
1715 int threshold = 0;
\r
1719 if (viewport.getAbovePIDThreshold())
\r
1721 threshold = SliderPanel.setPIDSliderSource(alignPanel, cs,
\r
1724 cs.setThreshold(threshold,
\r
1725 viewport.getIgnoreGapsConsensus());
\r
1727 viewport.setGlobalColourScheme(cs);
\r
1731 cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
\r
1734 if (viewport.getConservationSelected())
\r
1737 Alignment al = (Alignment) viewport.alignment;
\r
1738 Conservation c = new Conservation("All",
\r
1739 ResidueProperties.propHash, 3,
\r
1740 al.getSequences(), 0,
\r
1741 al.getWidth() - 1);
\r
1744 c.verdict(false, viewport.ConsPercGaps);
\r
1746 cs.setConservation(c);
\r
1748 cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, cs,
\r
1753 cs.setConservation(null);
\r
1756 cs.setConsensus(viewport.vconsensus);
\r
1759 viewport.setGlobalColourScheme(cs);
\r
1761 if (viewport.getColourAppliesToAllGroups())
\r
1763 Vector groups = viewport.alignment.getGroups();
\r
1765 for (int i = 0; i < groups.size(); i++)
\r
1767 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
\r
1775 if (cs instanceof ClustalxColourScheme)
\r
1777 sg.cs = new ClustalxColourScheme(
\r
1778 sg.getSequences(true), sg.getWidth());
\r
1780 else if (cs instanceof UserColourScheme)
\r
1782 sg.cs = new UserColourScheme( ( (UserColourScheme) cs).getColours());
\r
1788 sg.cs = (ColourSchemeI) cs.getClass().newInstance();
\r
1790 catch (Exception ex)
\r
1795 if (viewport.getAbovePIDThreshold()
\r
1796 || cs instanceof PIDColourScheme
\r
1797 || cs instanceof Blosum62ColourScheme)
\r
1799 sg.cs.setThreshold(threshold,
\r
1800 viewport.getIgnoreGapsConsensus());
\r
1802 sg.cs.setConsensus(AAFrequency.calculate(
\r
1803 sg.getSequences(true), 0,
\r
1807 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
\r
1810 if (viewport.getConservationSelected())
\r
1812 Conservation c = new Conservation("Group",
\r
1813 ResidueProperties.propHash, 3,
\r
1814 sg.getSequences(true), 0,
\r
1815 viewport.alignment.getWidth() - 1);
\r
1817 c.verdict(false, viewport.ConsPercGaps);
\r
1818 sg.cs.setConservation(c);
\r
1821 sg.cs.setConservation(null);
\r
1825 if (alignPanel.getOverviewPanel() != null)
\r
1827 alignPanel.getOverviewPanel().updateOverviewImage();
\r
1830 alignPanel.repaint();
\r
1836 * @param e DOCUMENT ME!
\r
1838 protected void modifyPID_actionPerformed(ActionEvent e)
\r
1840 if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme!=null)
\r
1842 SliderPanel.setPIDSliderSource(alignPanel,
\r
1843 viewport.getGlobalColourScheme(),
\r
1845 SliderPanel.showPIDSlider();
\r
1852 * @param e DOCUMENT ME!
\r
1854 protected void modifyConservation_actionPerformed(ActionEvent e)
\r
1856 if (viewport.getConservationSelected() && viewport.globalColourScheme!=null)
\r
1858 SliderPanel.setConservationSlider(alignPanel,
\r
1859 viewport.globalColourScheme,
\r
1861 SliderPanel.showConservationSlider();
\r
1868 * @param e DOCUMENT ME!
\r
1870 protected void conservationMenuItem_actionPerformed(ActionEvent e)
\r
1872 viewport.setConservationSelected(conservationMenuItem.isSelected());
\r
1874 viewport.setAbovePIDThreshold(false);
\r
1875 abovePIDThreshold.setSelected(false);
\r
1877 changeColour(viewport.getGlobalColourScheme());
\r
1879 modifyConservation_actionPerformed(null);
\r
1885 * @param e DOCUMENT ME!
\r
1887 public void abovePIDThreshold_actionPerformed(ActionEvent e)
\r
1889 viewport.setAbovePIDThreshold(abovePIDThreshold.isSelected());
\r
1891 conservationMenuItem.setSelected(false);
\r
1892 viewport.setConservationSelected(false);
\r
1894 changeColour(viewport.getGlobalColourScheme());
\r
1896 modifyPID_actionPerformed(null);
\r
1902 * @param e DOCUMENT ME!
\r
1904 public void userDefinedColour_actionPerformed(ActionEvent e)
\r
1906 if (e.getActionCommand().equals("User Defined..."))
\r
1908 new UserDefinedColours(alignPanel, null);
\r
1912 UserColourScheme udc = (UserColourScheme) UserDefinedColours.
\r
1913 getUserColourSchemes().get(e.getActionCommand());
\r
1915 changeColour(udc);
\r
1919 public void updateUserColourMenu()
\r
1922 Component[] menuItems = colourMenu.getMenuComponents();
\r
1923 int i, iSize = menuItems.length;
\r
1924 for (i = 0; i < iSize; i++)
\r
1926 if (menuItems[i].getName() != null &&
\r
1927 menuItems[i].getName().equals("USER_DEFINED"))
\r
1929 colourMenu.remove(menuItems[i]);
\r
1933 if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null)
\r
1935 java.util.Enumeration userColours = jalview.gui.UserDefinedColours.
\r
1936 getUserColourSchemes().keys();
\r
1938 while (userColours.hasMoreElements())
\r
1940 final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(userColours.
\r
1941 nextElement().toString());
\r
1942 radioItem.setName("USER_DEFINED");
\r
1943 radioItem.addMouseListener(new MouseAdapter()
\r
1945 public void mousePressed(MouseEvent evt)
\r
1947 if(evt.isControlDown() || SwingUtilities.isRightMouseButton(evt))
\r
1949 radioItem.removeActionListener(radioItem.getActionListeners()[0]);
\r
1951 int option = JOptionPane.showInternalConfirmDialog(jalview.gui.Desktop.desktop,
\r
1952 "Remove from default list?",
\r
1953 "Remove user defined colour",
\r
1954 JOptionPane.YES_NO_OPTION);
\r
1955 if(option == JOptionPane.YES_OPTION)
\r
1957 jalview.gui.UserDefinedColours.removeColourFromDefaults(radioItem.getText());
\r
1958 colourMenu.remove(radioItem);
\r
1961 radioItem.addActionListener(new ActionListener()
\r
1963 public void actionPerformed(ActionEvent evt)
\r
1965 userDefinedColour_actionPerformed(evt);
\r
1971 radioItem.addActionListener(new ActionListener()
\r
1973 public void actionPerformed(ActionEvent evt)
\r
1975 userDefinedColour_actionPerformed(evt);
\r
1979 colourMenu.insert(radioItem, 15);
\r
1980 colours.add(radioItem);
\r
1988 * @param e DOCUMENT ME!
\r
1990 public void PIDColour_actionPerformed(ActionEvent e)
\r
1992 changeColour(new PIDColourScheme());
\r
1998 * @param e DOCUMENT ME!
\r
2000 public void BLOSUM62Colour_actionPerformed(ActionEvent e)
\r
2002 changeColour(new Blosum62ColourScheme());
\r
2008 * @param e DOCUMENT ME!
\r
2010 public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)
\r
2012 addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment,
\r
2013 HistoryItem.SORT));
\r
2014 AlignmentSorter.sortByPID(viewport.getAlignment(),
\r
2015 viewport.getAlignment().getSequenceAt(0));
\r
2016 alignPanel.repaint();
\r
2022 * @param e DOCUMENT ME!
\r
2024 public void sortIDMenuItem_actionPerformed(ActionEvent e)
\r
2026 addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
\r
2027 HistoryItem.SORT));
\r
2028 AlignmentSorter.sortByID(viewport.getAlignment());
\r
2029 alignPanel.repaint();
\r
2035 * @param e DOCUMENT ME!
\r
2037 public void sortGroupMenuItem_actionPerformed(ActionEvent e)
\r
2039 addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
\r
2040 HistoryItem.SORT));
\r
2042 AlignmentSorter.sortByGroup(viewport.getAlignment());
\r
2043 alignPanel.repaint();
\r
2049 * @param e DOCUMENT ME!
\r
2051 public void removeRedundancyMenuItem_actionPerformed(ActionEvent e)
\r
2053 new RedundancyPanel(alignPanel, this);
\r
2060 * @param e DOCUMENT ME!
\r
2062 public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)
\r
2064 if ( (viewport.getSelectionGroup() == null) ||
\r
2065 (viewport.getSelectionGroup().getSize(false) < 2))
\r
2067 JOptionPane.showInternalMessageDialog(this,
\r
2068 "You must select at least 2 sequences.",
\r
2069 "Invalid Selection",
\r
2070 JOptionPane.WARNING_MESSAGE);
\r
2074 JInternalFrame frame = new JInternalFrame();
\r
2075 frame.setContentPane(new PairwiseAlignPanel(viewport));
\r
2076 Desktop.addInternalFrame(frame, "Pairwise Alignment", 600, 500);
\r
2083 * @param e DOCUMENT ME!
\r
2085 public void PCAMenuItem_actionPerformed(ActionEvent e)
\r
2087 if ( ( (viewport.getSelectionGroup() != null) &&
\r
2088 (viewport.getSelectionGroup().getSize(false) < 4) &&
\r
2089 (viewport.getSelectionGroup().getSize(false) > 0)) ||
\r
2090 (viewport.getAlignment().getHeight() < 4))
\r
2092 JOptionPane.showInternalMessageDialog(this,
\r
2093 "Principal component analysis must take\n" +
\r
2094 "at least 4 input sequences.",
\r
2095 "Sequence selection insufficient",
\r
2096 JOptionPane.WARNING_MESSAGE);
\r
2101 new PCAPanel(viewport);
\r
2105 public void autoCalculate_actionPerformed(ActionEvent e)
\r
2107 viewport.autoCalculateConsensus = autoCalculate.isSelected();
\r
2108 if(viewport.autoCalculateConsensus)
\r
2110 alignmentChanged();
\r
2118 * @param e DOCUMENT ME!
\r
2120 public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)
\r
2122 NewTreePanel("AV", "PID", "Average distance tree using PID");
\r
2128 * @param e DOCUMENT ME!
\r
2130 public void neighbourTreeMenuItem_actionPerformed(ActionEvent e)
\r
2132 NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
\r
2138 * @param e DOCUMENT ME!
\r
2140 protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)
\r
2142 NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
\r
2148 * @param e DOCUMENT ME!
\r
2150 protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)
\r
2152 NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
\r
2158 * @param type DOCUMENT ME!
\r
2159 * @param pwType DOCUMENT ME!
\r
2160 * @param title DOCUMENT ME!
\r
2162 void NewTreePanel(String type, String pwType, String title)
\r
2166 if ( (viewport.getSelectionGroup() != null) &&
\r
2167 (viewport.getSelectionGroup().getSize(false) > 3))
\r
2170 SequenceGroup sg = viewport.getSelectionGroup();
\r
2172 /* Decide if the selection is a column region */
\r
2173 while (s < sg.getSize(false))
\r
2175 if ( ( (SequenceI) sg.getSequences(false).elementAt(s++)).getLength() <
\r
2178 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2179 "The selected region to create a tree may\nonly contain residues or gaps.\n" +
\r
2180 "Try using the Pad function in the edit menu,\n" +
\r
2181 "or one of the multiple sequence alignment web services.",
\r
2182 "Sequences in selection are not aligned",
\r
2183 JOptionPane.WARNING_MESSAGE);
\r
2189 title = title + " on region";
\r
2190 tp = new TreePanel(viewport, type, pwType);
\r
2194 //are the sequences aligned?
\r
2195 if (!viewport.alignment.isAligned())
\r
2197 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2198 "The sequences must be aligned before creating a tree.\n" +
\r
2199 "Try using the Pad function in the edit menu,\n" +
\r
2200 "or one of the multiple sequence alignment web services.",
\r
2201 "Sequences not aligned",
\r
2202 JOptionPane.WARNING_MESSAGE);
\r
2207 if(viewport.alignment.getHeight()<2)
\r
2210 tp = new TreePanel(viewport, type, pwType);
\r
2213 addTreeMenuItem(tp, title);
\r
2215 Desktop.addInternalFrame(tp, title + " from " + this.title, 600, 500);
\r
2221 * @param title DOCUMENT ME!
\r
2222 * @param order DOCUMENT ME!
\r
2224 public void addSortByOrderMenuItem(String title, final AlignmentOrder order)
\r
2226 final JMenuItem item = new JMenuItem("by " + title);
\r
2228 item.addActionListener(new java.awt.event.ActionListener()
\r
2230 public void actionPerformed(ActionEvent e)
\r
2232 addHistoryItem(new HistoryItem("Sort", viewport.alignment,
\r
2233 HistoryItem.SORT));
\r
2235 // TODO: JBPNote - have to map order entries to curent SequenceI pointers
\r
2236 AlignmentSorter.sortBy(viewport.getAlignment(), order);
\r
2237 alignPanel.repaint();
\r
2243 * Maintain the Order by->Displayed Tree menu.
\r
2244 * Creates a new menu item for a TreePanel with an appropriate
\r
2245 * <code>jalview.analysis.AlignmentSorter</code> call. Listeners are added
\r
2246 * to remove the menu item when the treePanel is closed, and adjust
\r
2247 * the tree leaf to sequence mapping when the alignment is modified.
\r
2248 * @param treePanel Displayed tree window.
\r
2249 * @param title SortBy menu item title.
\r
2251 void addTreeMenuItem(final TreePanel treePanel, String title)
\r
2253 final JMenuItem item = new JMenuItem(title);
\r
2257 if (treeCount == 1)
\r
2259 sort.add(sortByTreeMenu);
\r
2262 sortByTreeMenu.add(item);
\r
2263 item.addActionListener(new java.awt.event.ActionListener()
\r
2265 public void actionPerformed(ActionEvent e)
\r
2267 addHistoryItem(new HistoryItem("Tree Sort",
\r
2268 viewport.alignment, HistoryItem.SORT));
\r
2269 AlignmentSorter.sortByTree(viewport.getAlignment(),
\r
2270 treePanel.getTree());
\r
2271 alignPanel.repaint();
\r
2275 treePanel.addInternalFrameListener(new javax.swing.event.
\r
2276 InternalFrameAdapter()
\r
2278 public void internalFrameClosed(
\r
2279 javax.swing.event.InternalFrameEvent evt)
\r
2282 sortByTreeMenu.remove(item);
\r
2284 if (treeCount == 0)
\r
2286 sort.remove(sortByTreeMenu);
\r
2294 * Work out whether the whole set of sequences
\r
2295 * or just the selected set will be submitted for multiple alignment.
\r
2298 private jalview.datamodel.AlignmentView gatherSequencesForAlignment()
\r
2300 // Now, check we have enough sequences
\r
2301 AlignmentView msa = null;
\r
2303 if ( (viewport.getSelectionGroup() != null) &&
\r
2304 (viewport.getSelectionGroup().getSize(false) > 1))
\r
2306 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
\r
2307 /*SequenceGroup seqs = viewport.getSelectionGroup();
\r
2309 msa = new SequenceI[sz = seqs.getSize(false)];
\r
2311 for (int i = 0; i < sz; i++)
\r
2313 msa[i] = (SequenceI) seqs.getSequenceAt(i);
\r
2315 msa = viewport.getAlignmentView(true);
\r
2319 /*Vector seqs = viewport.getAlignment().getSequences();
\r
2321 if (seqs.size() > 1)
\r
2323 msa = new SequenceI[seqs.size()];
\r
2325 for (int i = 0; i < seqs.size(); i++)
\r
2327 msa[i] = (SequenceI) seqs.elementAt(i);
\r
2330 msa = viewport.getAlignmentView(false);
\r
2336 * Decides what is submitted to a secondary structure prediction service,
\r
2337 * the currently selected sequence, or the currently selected alignment
\r
2338 * (where the first sequence in the set is the one that the prediction
\r
2341 SequenceI[] gatherSeqOrMsaForSecStrPrediction()
\r
2343 SequenceI seq = null;
\r
2344 SequenceI[] msa = null;
\r
2346 if ( (viewport.getSelectionGroup() != null) &&
\r
2347 (viewport.getSelectionGroup().getSize(false) > 0))
\r
2349 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
\r
2350 SequenceGroup seqs = viewport.getSelectionGroup();
\r
2352 if ( (seqs.getSize(false) == 1) || !viewport.alignment.isAligned())
\r
2354 seq = (SequenceI) seqs.getSequenceAt(0);
\r
2359 msa = new SequenceI[sz = seqs.getSize(false)];
\r
2361 for (int i = 0; i < sz; i++)
\r
2363 msa[i] = (SequenceI) seqs.getSequenceAt(i);
\r
2369 Vector seqs = viewport.getAlignment().getSequences();
\r
2371 if ( (seqs.size() == 1) || !viewport.alignment.isAligned())
\r
2373 seq = (SequenceI) seqs.elementAt(0);
\r
2377 msa = new SequenceI[seqs.size()];
\r
2379 for (int i = 0; i < seqs.size(); i++)
\r
2381 msa[i] = (SequenceI) seqs.elementAt(i);
\r
2393 return new SequenceI[]
\r
2403 * @param e DOCUMENT ME!
\r
2405 protected void LoadtreeMenuItem_actionPerformed(ActionEvent e)
\r
2407 // Pick the tree file
\r
2408 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
2410 "LAST_DIRECTORY"));
\r
2411 chooser.setFileView(new JalviewFileView());
\r
2412 chooser.setDialogTitle("Select a newick-like tree file");
\r
2413 chooser.setToolTipText("Load a tree file");
\r
2415 int value = chooser.showOpenDialog(null);
\r
2417 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
2419 String choice = chooser.getSelectedFile().getPath();
\r
2420 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
2424 jalview.io.NewickFile fin = new jalview.io.NewickFile(choice,
\r
2426 viewport.setCurrentTree(ShowNewickTree(fin, choice).getTree());
\r
2428 catch (Exception ex)
\r
2430 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2431 "Problem reading tree file",
\r
2433 JOptionPane.WARNING_MESSAGE);
\r
2434 ex.printStackTrace();
\r
2440 public TreePanel ShowNewickTree(NewickFile nf, String title)
\r
2442 return ShowNewickTree(nf,title,600,500,4,5);
\r
2447 * @param nf DOCUMENT ME!
\r
2448 * @param title DOCUMENT ME!
\r
2450 * @return DOCUMENT ME!
\r
2452 public TreePanel ShowNewickTree(NewickFile nf, String title, int w,int h,int x, int y)
\r
2454 TreePanel tp = null;
\r
2460 if (nf.getTree() != null)
\r
2462 tp = new TreePanel(viewport,
\r
2470 tp.setLocation(x,y);
\r
2473 Desktop.addInternalFrame(tp, title, w, h);
\r
2474 addTreeMenuItem(tp, title);
\r
2477 catch (Exception ex)
\r
2479 ex.printStackTrace();
\r
2490 PrinterJob printJob = PrinterJob.getPrinterJob();
\r
2491 PageFormat pf = printJob.pageDialog(printJob.defaultPage());
\r
2492 printJob.setPrintable(alignPanel, pf);
\r
2494 if (printJob.printDialog())
\r
2500 catch (Exception PrintException)
\r
2502 PrintException.printStackTrace();
\r
2509 * Generates menu items and listener event actions for web service clients
\r
2512 public void BuildWebServiceMenu()
\r
2514 if ( (Discoverer.services != null)
\r
2515 && (Discoverer.services.size() > 0))
\r
2517 Vector msaws = (Vector) Discoverer.services.get("MsaWS");
\r
2518 Vector secstrpr = (Vector) Discoverer.services.get("SecStrPred");
\r
2519 Vector wsmenu = new Vector();
\r
2520 if (msaws != null)
\r
2522 // Add any Multiple Sequence Alignment Services
\r
2523 final JMenu msawsmenu = new JMenu("Alignment");
\r
2524 final AlignFrame af = this;
\r
2525 for (int i = 0, j = msaws.size(); i < j; i++)
\r
2527 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws.
\r
2529 final JMenuItem method = new JMenuItem(sh.getName());
\r
2530 method.addActionListener(new ActionListener()
\r
2532 public void actionPerformed(ActionEvent e)
\r
2534 AlignmentView msa = gatherSequencesForAlignment();
\r
2535 new jalview.ws.MsaWSClient(sh, title, msa,
\r
2536 false, true, viewport.getAlignment().getDataset(), af);
\r
2541 msawsmenu.add(method);
\r
2542 // Deal with services that we know accept partial alignments.
\r
2543 if (sh.getName().indexOf("lustal") > -1)
\r
2545 // We know that ClustalWS can accept partial alignments for refinement.
\r
2546 final JMenuItem methodR = new JMenuItem(sh.getName()+" Realign");
\r
2547 methodR.addActionListener(new ActionListener()
\r
2549 public void actionPerformed(ActionEvent e)
\r
2551 AlignmentView msa = gatherSequencesForAlignment();
\r
2552 new jalview.ws.MsaWSClient(sh, title, msa,
\r
2553 true, true, viewport.getAlignment().getDataset(), af);
\r
2558 msawsmenu.add(methodR);
\r
2562 wsmenu.add(msawsmenu);
\r
2564 if (secstrpr != null)
\r
2566 // Add any secondary structure prediction services
\r
2567 final JMenu secstrmenu = new JMenu("Secondary Structure Prediction");
\r
2568 for (int i = 0, j = secstrpr.size(); i < j; i++)
\r
2570 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle)
\r
2572 final JMenuItem method = new JMenuItem(sh.getName());
\r
2573 method.addActionListener(new ActionListener()
\r
2575 public void actionPerformed(ActionEvent e)
\r
2577 SequenceI[] msa = gatherSeqOrMsaForSecStrPrediction();
\r
2578 if (msa.length == 1)
\r
2580 // Single Sequence prediction
\r
2581 new jalview.ws.JPredClient(sh, title, msa[0], null);
\r
2585 if (msa.length > 1)
\r
2587 // Single Sequence prediction
\r
2588 jalview.ws.JPredClient ct = new jalview.ws.JPredClient(sh,
\r
2589 title, msa, null);
\r
2594 secstrmenu.add(method);
\r
2596 wsmenu.add(secstrmenu);
\r
2598 this.webService.removeAll();
\r
2599 for (int i = 0, j = wsmenu.size(); i < j; i++)
\r
2601 webService.add( (JMenu) wsmenu.get(i));
\r
2606 this.webService.removeAll();
\r
2607 this.webService.add(this.webServiceNoServices);
\r
2609 // TODO: add in rediscovery function
\r
2610 // TODO: reduce code redundancy.
\r
2611 // TODO: group services by location as well as function.
\r
2614 /* public void vamsasStore_actionPerformed(ActionEvent e)
\r
2616 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
2617 getProperty("LAST_DIRECTORY"));
\r
2619 chooser.setFileView(new JalviewFileView());
\r
2620 chooser.setDialogTitle("Export to Vamsas file");
\r
2621 chooser.setToolTipText("Export");
\r
2623 int value = chooser.showSaveDialog(this);
\r
2625 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
2627 jalview.io.VamsasDatastore vs = new jalview.io.VamsasDatastore(viewport);
\r
2628 //vs.store(chooser.getSelectedFile().getAbsolutePath() );
\r
2629 vs.storeJalview( chooser.getSelectedFile().getAbsolutePath(), this);
\r
2636 public void showTranslation_actionPerformed(ActionEvent e)
\r
2638 SequenceI [] selection = viewport.getSelectionAsNewSequence();
\r
2639 String [] seqstring = viewport.getViewAsString(true);
\r
2641 int s, sSize = selection.length;
\r
2642 SequenceI [] newSeq = new SequenceI[sSize];
\r
2645 StringBuffer protein;
\r
2647 for(s=0; s<sSize; s++)
\r
2649 protein = new StringBuffer();
\r
2650 seq = AlignSeq.extractGaps("-. ", seqstring[s]);
\r
2651 resSize = seq.length();
\r
2652 resSize -= resSize%3;
\r
2654 for(res = 0; res < resSize; res+=3)
\r
2656 String codon = seq.substring(res, res+3);
\r
2657 codon = codon.replace('U', 'T');
\r
2658 String aa = ResidueProperties.codonTranslate(codon);
\r
2660 protein.append(viewport.getGapCharacter());
\r
2661 else if(aa.equals("STOP"))
\r
2662 protein.append("X");
\r
2664 protein.append( aa );
\r
2666 newSeq[s] = new Sequence(selection[s].getName(),
\r
2667 protein.toString());
\r
2671 AlignmentI al = new Alignment(newSeq);
\r
2672 al.setDataset(null);
\r
2675 ////////////////////////////////
\r
2676 // Copy annotations across
\r
2677 jalview.datamodel.AlignmentAnnotation[] annotations
\r
2678 = viewport.alignment.getAlignmentAnnotation();
\r
2680 if(annotations!=null)
\r
2682 for (int i = 0; i < annotations.length; i++)
\r
2684 if (annotations[i].label.equals("Quality") ||
\r
2685 annotations[i].label.equals("Conservation") ||
\r
2686 annotations[i].label.equals("Consensus"))
\r
2691 aSize = viewport.alignment.getWidth() / 3;
\r
2692 jalview.datamodel.Annotation[] anots =
\r
2693 new jalview.datamodel.Annotation[aSize];
\r
2695 for (a = 0; a < viewport.alignment.getWidth(); a++)
\r
2697 if (annotations[i].annotations[a] == null
\r
2698 || annotations[i].annotations[a] == null)
\r
2701 anots[a / 3] = new Annotation(
\r
2702 annotations[i].annotations[a].displayCharacter,
\r
2703 annotations[i].annotations[a].description,
\r
2704 annotations[i].annotations[a].secondaryStructure,
\r
2705 annotations[i].annotations[a].value,
\r
2706 annotations[i].annotations[a].colour);
\r
2709 jalview.datamodel.AlignmentAnnotation aa
\r
2710 = new jalview.datamodel.AlignmentAnnotation(annotations[i].label,
\r
2711 annotations[i].description, anots);
\r
2712 al.addAnnotation(aa);
\r
2716 AlignFrame af = new AlignFrame(al);
\r
2717 Desktop.addInternalFrame(af, "Translation of "+this.getTitle(),
\r
2719 NEW_WINDOW_HEIGHT);
\r
2722 // AlignViewport newViewport = new AlignViewport(al);
\r
2723 // AlignmentPanel ap = new AlignmentPanel(this, newViewport);
\r
2724 // tabbedPane.add("Protein", ap);
\r
2725 // viewports.add(newViewport);
\r
2726 // alignPanels.add(ap);
\r
2729 /////////////////////////
\r
2731 // AlignViewport ds = new AlignViewport(al.getDataset());
\r
2732 // ds.setDataset(true);
\r
2733 // AlignmentPanel dap = new AlignmentPanel(this, ds);
\r
2734 // tabbedPane.add("Dataset", dap);
\r
2735 // viewports.add(ds);
\r
2736 // alignPanels.add(dap);
\r
2737 /////////////////////////
\r
2742 /*public void tabSelected()
\r
2744 int index = tabbedPane.getSelectedIndex();
\r
2745 viewport = (AlignViewport)viewports.elementAt(index);
\r
2746 alignPanel = (AlignmentPanel)alignPanels.elementAt(index);
\r
2752 * @param String DOCUMENT ME!
\r
2754 public boolean parseFeaturesFile(String file, String type)
\r
2756 boolean featuresFile = false;
\r
2758 featuresFile = new FeaturesFile(file, type).parse(viewport.alignment.getDataset(),
\r
2759 alignPanel.seqPanel.seqCanvas.
\r
2760 getFeatureRenderer().featureColours,
\r
2763 catch(Exception ex)
\r
2765 ex.printStackTrace();
\r
2770 viewport.showSequenceFeatures = true;
\r
2771 showSeqFeatures.setSelected(true);
\r
2772 alignPanel.repaint();
\r
2775 return featuresFile;
\r
2778 public void dragEnter(DropTargetDragEvent evt)
\r
2781 public void dragExit(DropTargetEvent evt)
\r
2784 public void dragOver(DropTargetDragEvent evt)
\r
2787 public void dropActionChanged(DropTargetDragEvent evt)
\r
2790 public void drop(DropTargetDropEvent evt)
\r
2792 Transferable t = evt.getTransferable();
\r
2793 java.util.List files = null;
\r
2797 DataFlavor uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String");
\r
2798 if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
\r
2800 //Works on Windows and MacOSX
\r
2801 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
2802 files = (java.util.List) t.getTransferData(DataFlavor.javaFileListFlavor);
\r
2804 else if (t.isDataFlavorSupported(uriListFlavor))
\r
2806 // This is used by Unix drag system
\r
2807 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
2808 String data = (String) t.getTransferData(uriListFlavor);
\r
2809 files = new java.util.ArrayList(1);
\r
2810 for (java.util.StringTokenizer st = new java.util.StringTokenizer(
\r
2813 st.hasMoreTokens(); )
\r
2815 String s = st.nextToken();
\r
2816 if (s.startsWith("#"))
\r
2818 // the line is a comment (as per the RFC 2483)
\r
2822 java.net.URI uri = new java.net.URI(s);
\r
2823 java.io.File file = new java.io.File(uri);
\r
2828 catch (Exception e)
\r
2830 e.printStackTrace();
\r
2832 if (files != null)
\r
2837 for (int i = 0; i < files.size(); i++)
\r
2839 loadJalviewDataFile(files.get(i).toString());
\r
2842 catch (Exception ex)
\r
2844 ex.printStackTrace();
\r
2849 // This method will attempt to load a "dropped" file first by testing
\r
2850 // whether its and Annotation file, then features file. If both are
\r
2851 // false then the user may have dropped an alignment file onto this
\r
2853 public void loadJalviewDataFile(String file)
\r
2856 boolean isAnnotation = new AnnotationFile().readAnnotationFile(viewport.
\r
2859 if (!isAnnotation)
\r
2861 boolean isGroupsFile = parseFeaturesFile(file,
\r
2862 AppletFormatAdapter.FILE);
\r
2863 if (!isGroupsFile)
\r
2865 String format = new IdentifyFile().Identify(file, FormatAdapter.FILE);
\r
2866 new FileLoader().LoadFile(viewport, file, FormatAdapter.FILE, format);
\r
2872 alignPanel.adjustAnnotationHeight();
\r
2875 }catch(Exception ex)
\r
2877 ex.printStackTrace();
\r