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 viewport.setSelectionGroup(null);
\r
1450 alignPanel.repaint();
\r
1453 public void hideSelColumns_actionPerformed(ActionEvent e)
\r
1455 viewport.hideSelectedColumns();
\r
1456 alignPanel.repaint();
\r
1459 public void hiddenMarkers_actionPerformed(ActionEvent e)
\r
1461 viewport.setShowHiddenMarkers(hiddenMarkers.isSelected());
\r
1468 * @param e DOCUMENT ME!
\r
1470 protected void scaleAbove_actionPerformed(ActionEvent e)
\r
1472 viewport.setScaleAboveWrapped(scaleAbove.isSelected());
\r
1473 alignPanel.repaint();
\r
1479 * @param e DOCUMENT ME!
\r
1481 protected void scaleLeft_actionPerformed(ActionEvent e)
\r
1483 viewport.setScaleLeftWrapped(scaleLeft.isSelected());
\r
1484 alignPanel.repaint();
\r
1490 * @param e DOCUMENT ME!
\r
1492 protected void scaleRight_actionPerformed(ActionEvent e)
\r
1494 viewport.setScaleRightWrapped(scaleRight.isSelected());
\r
1495 alignPanel.repaint();
\r
1501 * @param e DOCUMENT ME!
\r
1503 public void viewBoxesMenuItem_actionPerformed(ActionEvent e)
\r
1505 viewport.setShowBoxes(viewBoxesMenuItem.isSelected());
\r
1506 alignPanel.repaint();
\r
1512 * @param e DOCUMENT ME!
\r
1514 public void viewTextMenuItem_actionPerformed(ActionEvent e)
\r
1516 viewport.setShowText(viewTextMenuItem.isSelected());
\r
1517 alignPanel.repaint();
\r
1523 * @param e DOCUMENT ME!
\r
1525 protected void renderGapsMenuItem_actionPerformed(ActionEvent e)
\r
1527 viewport.setRenderGaps(renderGapsMenuItem.isSelected());
\r
1528 alignPanel.repaint();
\r
1532 public FeatureSettings featureSettings;
\r
1533 public void featureSettings_actionPerformed(ActionEvent e)
\r
1535 if(featureSettings !=null )
\r
1537 featureSettings.close();
\r
1538 featureSettings = null;
\r
1540 featureSettings = new FeatureSettings(this);
\r
1546 * @param evt DOCUMENT ME!
\r
1548 public void showSeqFeatures_actionPerformed(ActionEvent evt)
\r
1550 viewport.setShowSequenceFeatures(showSeqFeatures.isSelected());
\r
1551 alignPanel.repaint();
\r
1552 if (alignPanel.getOverviewPanel() != null)
\r
1554 alignPanel.getOverviewPanel().updateOverviewImage();
\r
1561 * @param e DOCUMENT ME!
\r
1563 public void annotationPanelMenuItem_actionPerformed(ActionEvent e)
\r
1565 viewport.setShowAnnotation(annotationPanelMenuItem.isSelected());
\r
1566 alignPanel.setAnnotationVisible(annotationPanelMenuItem.isSelected());
\r
1572 * @param e DOCUMENT ME!
\r
1574 public void overviewMenuItem_actionPerformed(ActionEvent e)
\r
1576 if (alignPanel.overviewPanel != null)
\r
1581 JInternalFrame frame = new JInternalFrame();
\r
1582 OverviewPanel overview = new OverviewPanel(alignPanel);
\r
1583 frame.setContentPane(overview);
\r
1584 Desktop.addInternalFrame(frame, "Overview " + this.getTitle(),
\r
1585 frame.getWidth(), frame.getHeight());
\r
1587 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
1588 frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
\r
1590 public void internalFrameClosed(
\r
1591 javax.swing.event.InternalFrameEvent evt)
\r
1593 alignPanel.setOverviewPanel(null);
\r
1598 alignPanel.setOverviewPanel(overview);
\r
1604 * @param e DOCUMENT ME!
\r
1606 protected void noColourmenuItem_actionPerformed(ActionEvent e)
\r
1608 changeColour(null);
\r
1614 * @param e DOCUMENT ME!
\r
1616 public void clustalColour_actionPerformed(ActionEvent e)
\r
1618 changeColour(new ClustalxColourScheme(
\r
1619 viewport.alignment.getSequences(), viewport.alignment.getWidth()));
\r
1625 * @param e DOCUMENT ME!
\r
1627 public void zappoColour_actionPerformed(ActionEvent e)
\r
1629 changeColour(new ZappoColourScheme());
\r
1635 * @param e DOCUMENT ME!
\r
1637 public void taylorColour_actionPerformed(ActionEvent e)
\r
1639 changeColour(new TaylorColourScheme());
\r
1645 * @param e DOCUMENT ME!
\r
1647 public void hydrophobicityColour_actionPerformed(ActionEvent e)
\r
1649 changeColour(new HydrophobicColourScheme());
\r
1655 * @param e DOCUMENT ME!
\r
1657 public void helixColour_actionPerformed(ActionEvent e)
\r
1659 changeColour(new HelixColourScheme());
\r
1665 * @param e DOCUMENT ME!
\r
1667 public void strandColour_actionPerformed(ActionEvent e)
\r
1669 changeColour(new StrandColourScheme());
\r
1675 * @param e DOCUMENT ME!
\r
1677 public void turnColour_actionPerformed(ActionEvent e)
\r
1679 changeColour(new TurnColourScheme());
\r
1685 * @param e DOCUMENT ME!
\r
1687 public void buriedColour_actionPerformed(ActionEvent e)
\r
1689 changeColour(new BuriedColourScheme());
\r
1695 * @param e DOCUMENT ME!
\r
1697 public void nucleotideColour_actionPerformed(ActionEvent e)
\r
1699 changeColour(new NucleotideColourScheme());
\r
1702 public void annotationColour_actionPerformed(ActionEvent e)
\r
1704 new AnnotationColourChooser(viewport, alignPanel);
\r
1711 * @param e DOCUMENT ME!
\r
1713 protected void applyToAllGroups_actionPerformed(ActionEvent e)
\r
1715 viewport.setColourAppliesToAllGroups(applyToAllGroups.isSelected());
\r
1721 * @param cs DOCUMENT ME!
\r
1723 public void changeColour(ColourSchemeI cs)
\r
1725 int threshold = 0;
\r
1729 if (viewport.getAbovePIDThreshold())
\r
1731 threshold = SliderPanel.setPIDSliderSource(alignPanel, cs,
\r
1734 cs.setThreshold(threshold,
\r
1735 viewport.getIgnoreGapsConsensus());
\r
1737 viewport.setGlobalColourScheme(cs);
\r
1741 cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
\r
1744 if (viewport.getConservationSelected())
\r
1747 Alignment al = (Alignment) viewport.alignment;
\r
1748 Conservation c = new Conservation("All",
\r
1749 ResidueProperties.propHash, 3,
\r
1750 al.getSequences(), 0,
\r
1751 al.getWidth() - 1);
\r
1754 c.verdict(false, viewport.ConsPercGaps);
\r
1756 cs.setConservation(c);
\r
1758 cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, cs,
\r
1763 cs.setConservation(null);
\r
1766 cs.setConsensus(viewport.vconsensus);
\r
1769 viewport.setGlobalColourScheme(cs);
\r
1771 if (viewport.getColourAppliesToAllGroups())
\r
1773 Vector groups = viewport.alignment.getGroups();
\r
1775 for (int i = 0; i < groups.size(); i++)
\r
1777 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
\r
1785 if (cs instanceof ClustalxColourScheme)
\r
1787 sg.cs = new ClustalxColourScheme(
\r
1788 sg.getSequences(true), sg.getWidth());
\r
1790 else if (cs instanceof UserColourScheme)
\r
1792 sg.cs = new UserColourScheme( ( (UserColourScheme) cs).getColours());
\r
1798 sg.cs = (ColourSchemeI) cs.getClass().newInstance();
\r
1800 catch (Exception ex)
\r
1805 if (viewport.getAbovePIDThreshold()
\r
1806 || cs instanceof PIDColourScheme
\r
1807 || cs instanceof Blosum62ColourScheme)
\r
1809 sg.cs.setThreshold(threshold,
\r
1810 viewport.getIgnoreGapsConsensus());
\r
1812 sg.cs.setConsensus(AAFrequency.calculate(
\r
1813 sg.getSequences(true), 0,
\r
1817 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
\r
1820 if (viewport.getConservationSelected())
\r
1822 Conservation c = new Conservation("Group",
\r
1823 ResidueProperties.propHash, 3,
\r
1824 sg.getSequences(true), 0,
\r
1825 viewport.alignment.getWidth() - 1);
\r
1827 c.verdict(false, viewport.ConsPercGaps);
\r
1828 sg.cs.setConservation(c);
\r
1831 sg.cs.setConservation(null);
\r
1835 if (alignPanel.getOverviewPanel() != null)
\r
1837 alignPanel.getOverviewPanel().updateOverviewImage();
\r
1840 alignPanel.repaint();
\r
1846 * @param e DOCUMENT ME!
\r
1848 protected void modifyPID_actionPerformed(ActionEvent e)
\r
1850 if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme!=null)
\r
1852 SliderPanel.setPIDSliderSource(alignPanel,
\r
1853 viewport.getGlobalColourScheme(),
\r
1855 SliderPanel.showPIDSlider();
\r
1862 * @param e DOCUMENT ME!
\r
1864 protected void modifyConservation_actionPerformed(ActionEvent e)
\r
1866 if (viewport.getConservationSelected() && viewport.globalColourScheme!=null)
\r
1868 SliderPanel.setConservationSlider(alignPanel,
\r
1869 viewport.globalColourScheme,
\r
1871 SliderPanel.showConservationSlider();
\r
1878 * @param e DOCUMENT ME!
\r
1880 protected void conservationMenuItem_actionPerformed(ActionEvent e)
\r
1882 viewport.setConservationSelected(conservationMenuItem.isSelected());
\r
1884 viewport.setAbovePIDThreshold(false);
\r
1885 abovePIDThreshold.setSelected(false);
\r
1887 changeColour(viewport.getGlobalColourScheme());
\r
1889 modifyConservation_actionPerformed(null);
\r
1895 * @param e DOCUMENT ME!
\r
1897 public void abovePIDThreshold_actionPerformed(ActionEvent e)
\r
1899 viewport.setAbovePIDThreshold(abovePIDThreshold.isSelected());
\r
1901 conservationMenuItem.setSelected(false);
\r
1902 viewport.setConservationSelected(false);
\r
1904 changeColour(viewport.getGlobalColourScheme());
\r
1906 modifyPID_actionPerformed(null);
\r
1912 * @param e DOCUMENT ME!
\r
1914 public void userDefinedColour_actionPerformed(ActionEvent e)
\r
1916 if (e.getActionCommand().equals("User Defined..."))
\r
1918 new UserDefinedColours(alignPanel, null);
\r
1922 UserColourScheme udc = (UserColourScheme) UserDefinedColours.
\r
1923 getUserColourSchemes().get(e.getActionCommand());
\r
1925 changeColour(udc);
\r
1929 public void updateUserColourMenu()
\r
1932 Component[] menuItems = colourMenu.getMenuComponents();
\r
1933 int i, iSize = menuItems.length;
\r
1934 for (i = 0; i < iSize; i++)
\r
1936 if (menuItems[i].getName() != null &&
\r
1937 menuItems[i].getName().equals("USER_DEFINED"))
\r
1939 colourMenu.remove(menuItems[i]);
\r
1943 if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null)
\r
1945 java.util.Enumeration userColours = jalview.gui.UserDefinedColours.
\r
1946 getUserColourSchemes().keys();
\r
1948 while (userColours.hasMoreElements())
\r
1950 final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(userColours.
\r
1951 nextElement().toString());
\r
1952 radioItem.setName("USER_DEFINED");
\r
1953 radioItem.addMouseListener(new MouseAdapter()
\r
1955 public void mousePressed(MouseEvent evt)
\r
1957 if(evt.isControlDown() || SwingUtilities.isRightMouseButton(evt))
\r
1959 radioItem.removeActionListener(radioItem.getActionListeners()[0]);
\r
1961 int option = JOptionPane.showInternalConfirmDialog(jalview.gui.Desktop.desktop,
\r
1962 "Remove from default list?",
\r
1963 "Remove user defined colour",
\r
1964 JOptionPane.YES_NO_OPTION);
\r
1965 if(option == JOptionPane.YES_OPTION)
\r
1967 jalview.gui.UserDefinedColours.removeColourFromDefaults(radioItem.getText());
\r
1968 colourMenu.remove(radioItem);
\r
1971 radioItem.addActionListener(new ActionListener()
\r
1973 public void actionPerformed(ActionEvent evt)
\r
1975 userDefinedColour_actionPerformed(evt);
\r
1981 radioItem.addActionListener(new ActionListener()
\r
1983 public void actionPerformed(ActionEvent evt)
\r
1985 userDefinedColour_actionPerformed(evt);
\r
1989 colourMenu.insert(radioItem, 15);
\r
1990 colours.add(radioItem);
\r
1998 * @param e DOCUMENT ME!
\r
2000 public void PIDColour_actionPerformed(ActionEvent e)
\r
2002 changeColour(new PIDColourScheme());
\r
2008 * @param e DOCUMENT ME!
\r
2010 public void BLOSUM62Colour_actionPerformed(ActionEvent e)
\r
2012 changeColour(new Blosum62ColourScheme());
\r
2018 * @param e DOCUMENT ME!
\r
2020 public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)
\r
2022 addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment,
\r
2023 HistoryItem.SORT));
\r
2024 AlignmentSorter.sortByPID(viewport.getAlignment(),
\r
2025 viewport.getAlignment().getSequenceAt(0));
\r
2026 alignPanel.repaint();
\r
2032 * @param e DOCUMENT ME!
\r
2034 public void sortIDMenuItem_actionPerformed(ActionEvent e)
\r
2036 addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
\r
2037 HistoryItem.SORT));
\r
2038 AlignmentSorter.sortByID(viewport.getAlignment());
\r
2039 alignPanel.repaint();
\r
2045 * @param e DOCUMENT ME!
\r
2047 public void sortGroupMenuItem_actionPerformed(ActionEvent e)
\r
2049 addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
\r
2050 HistoryItem.SORT));
\r
2052 AlignmentSorter.sortByGroup(viewport.getAlignment());
\r
2053 alignPanel.repaint();
\r
2059 * @param e DOCUMENT ME!
\r
2061 public void removeRedundancyMenuItem_actionPerformed(ActionEvent e)
\r
2063 new RedundancyPanel(alignPanel, this);
\r
2070 * @param e DOCUMENT ME!
\r
2072 public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)
\r
2074 if ( (viewport.getSelectionGroup() == null) ||
\r
2075 (viewport.getSelectionGroup().getSize(false) < 2))
\r
2077 JOptionPane.showInternalMessageDialog(this,
\r
2078 "You must select at least 2 sequences.",
\r
2079 "Invalid Selection",
\r
2080 JOptionPane.WARNING_MESSAGE);
\r
2084 JInternalFrame frame = new JInternalFrame();
\r
2085 frame.setContentPane(new PairwiseAlignPanel(viewport));
\r
2086 Desktop.addInternalFrame(frame, "Pairwise Alignment", 600, 500);
\r
2093 * @param e DOCUMENT ME!
\r
2095 public void PCAMenuItem_actionPerformed(ActionEvent e)
\r
2097 if ( ( (viewport.getSelectionGroup() != null) &&
\r
2098 (viewport.getSelectionGroup().getSize(false) < 4) &&
\r
2099 (viewport.getSelectionGroup().getSize(false) > 0)) ||
\r
2100 (viewport.getAlignment().getHeight() < 4))
\r
2102 JOptionPane.showInternalMessageDialog(this,
\r
2103 "Principal component analysis must take\n" +
\r
2104 "at least 4 input sequences.",
\r
2105 "Sequence selection insufficient",
\r
2106 JOptionPane.WARNING_MESSAGE);
\r
2111 new PCAPanel(viewport);
\r
2115 public void autoCalculate_actionPerformed(ActionEvent e)
\r
2117 viewport.autoCalculateConsensus = autoCalculate.isSelected();
\r
2118 if(viewport.autoCalculateConsensus)
\r
2120 alignmentChanged();
\r
2128 * @param e DOCUMENT ME!
\r
2130 public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)
\r
2132 NewTreePanel("AV", "PID", "Average distance tree using PID");
\r
2138 * @param e DOCUMENT ME!
\r
2140 public void neighbourTreeMenuItem_actionPerformed(ActionEvent e)
\r
2142 NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
\r
2148 * @param e DOCUMENT ME!
\r
2150 protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)
\r
2152 NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
\r
2158 * @param e DOCUMENT ME!
\r
2160 protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)
\r
2162 NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
\r
2168 * @param type DOCUMENT ME!
\r
2169 * @param pwType DOCUMENT ME!
\r
2170 * @param title DOCUMENT ME!
\r
2172 void NewTreePanel(String type, String pwType, String title)
\r
2176 if ( (viewport.getSelectionGroup() != null) &&
\r
2177 (viewport.getSelectionGroup().getSize(false) > 3))
\r
2180 SequenceGroup sg = viewport.getSelectionGroup();
\r
2182 /* Decide if the selection is a column region */
\r
2183 while (s < sg.getSize(false))
\r
2185 if ( ( (SequenceI) sg.getSequences(false).elementAt(s++)).getLength() <
\r
2188 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2189 "The selected region to create a tree may\nonly contain residues or gaps.\n" +
\r
2190 "Try using the Pad function in the edit menu,\n" +
\r
2191 "or one of the multiple sequence alignment web services.",
\r
2192 "Sequences in selection are not aligned",
\r
2193 JOptionPane.WARNING_MESSAGE);
\r
2199 title = title + " on region";
\r
2200 tp = new TreePanel(viewport, type, pwType);
\r
2204 //are the sequences aligned?
\r
2205 if (!viewport.alignment.isAligned())
\r
2207 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2208 "The sequences must be aligned before creating a tree.\n" +
\r
2209 "Try using the Pad function in the edit menu,\n" +
\r
2210 "or one of the multiple sequence alignment web services.",
\r
2211 "Sequences not aligned",
\r
2212 JOptionPane.WARNING_MESSAGE);
\r
2217 if(viewport.alignment.getHeight()<2)
\r
2220 tp = new TreePanel(viewport, type, pwType);
\r
2223 addTreeMenuItem(tp, title);
\r
2225 Desktop.addInternalFrame(tp, title + " from " + this.title, 600, 500);
\r
2231 * @param title DOCUMENT ME!
\r
2232 * @param order DOCUMENT ME!
\r
2234 public void addSortByOrderMenuItem(String title, final AlignmentOrder order)
\r
2236 final JMenuItem item = new JMenuItem("by " + title);
\r
2238 item.addActionListener(new java.awt.event.ActionListener()
\r
2240 public void actionPerformed(ActionEvent e)
\r
2242 addHistoryItem(new HistoryItem("Sort", viewport.alignment,
\r
2243 HistoryItem.SORT));
\r
2245 // TODO: JBPNote - have to map order entries to curent SequenceI pointers
\r
2246 AlignmentSorter.sortBy(viewport.getAlignment(), order);
\r
2247 alignPanel.repaint();
\r
2253 * Maintain the Order by->Displayed Tree menu.
\r
2254 * Creates a new menu item for a TreePanel with an appropriate
\r
2255 * <code>jalview.analysis.AlignmentSorter</code> call. Listeners are added
\r
2256 * to remove the menu item when the treePanel is closed, and adjust
\r
2257 * the tree leaf to sequence mapping when the alignment is modified.
\r
2258 * @param treePanel Displayed tree window.
\r
2259 * @param title SortBy menu item title.
\r
2261 void addTreeMenuItem(final TreePanel treePanel, String title)
\r
2263 final JMenuItem item = new JMenuItem(title);
\r
2267 if (treeCount == 1)
\r
2269 sort.add(sortByTreeMenu);
\r
2272 sortByTreeMenu.add(item);
\r
2273 item.addActionListener(new java.awt.event.ActionListener()
\r
2275 public void actionPerformed(ActionEvent e)
\r
2277 addHistoryItem(new HistoryItem("Tree Sort",
\r
2278 viewport.alignment, HistoryItem.SORT));
\r
2279 AlignmentSorter.sortByTree(viewport.getAlignment(),
\r
2280 treePanel.getTree());
\r
2281 alignPanel.repaint();
\r
2285 treePanel.addInternalFrameListener(new javax.swing.event.
\r
2286 InternalFrameAdapter()
\r
2288 public void internalFrameClosed(
\r
2289 javax.swing.event.InternalFrameEvent evt)
\r
2292 sortByTreeMenu.remove(item);
\r
2294 if (treeCount == 0)
\r
2296 sort.remove(sortByTreeMenu);
\r
2304 * Work out whether the whole set of sequences
\r
2305 * or just the selected set will be submitted for multiple alignment.
\r
2308 private jalview.datamodel.AlignmentView gatherSequencesForAlignment()
\r
2310 // Now, check we have enough sequences
\r
2311 AlignmentView msa = null;
\r
2313 if ( (viewport.getSelectionGroup() != null) &&
\r
2314 (viewport.getSelectionGroup().getSize(false) > 1))
\r
2316 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
\r
2317 /*SequenceGroup seqs = viewport.getSelectionGroup();
\r
2319 msa = new SequenceI[sz = seqs.getSize(false)];
\r
2321 for (int i = 0; i < sz; i++)
\r
2323 msa[i] = (SequenceI) seqs.getSequenceAt(i);
\r
2325 msa = viewport.getAlignmentView(true);
\r
2329 /*Vector seqs = viewport.getAlignment().getSequences();
\r
2331 if (seqs.size() > 1)
\r
2333 msa = new SequenceI[seqs.size()];
\r
2335 for (int i = 0; i < seqs.size(); i++)
\r
2337 msa[i] = (SequenceI) seqs.elementAt(i);
\r
2340 msa = viewport.getAlignmentView(false);
\r
2346 * Decides what is submitted to a secondary structure prediction service,
\r
2347 * the currently selected sequence, or the currently selected alignment
\r
2348 * (where the first sequence in the set is the one that the prediction
\r
2351 SequenceI[] gatherSeqOrMsaForSecStrPrediction()
\r
2353 SequenceI seq = null;
\r
2354 SequenceI[] msa = null;
\r
2356 if ( (viewport.getSelectionGroup() != null) &&
\r
2357 (viewport.getSelectionGroup().getSize(false) > 0))
\r
2359 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
\r
2360 SequenceGroup seqs = viewport.getSelectionGroup();
\r
2362 if ( (seqs.getSize(false) == 1) || !viewport.alignment.isAligned())
\r
2364 seq = (SequenceI) seqs.getSequenceAt(0);
\r
2369 msa = new SequenceI[sz = seqs.getSize(false)];
\r
2371 for (int i = 0; i < sz; i++)
\r
2373 msa[i] = (SequenceI) seqs.getSequenceAt(i);
\r
2379 Vector seqs = viewport.getAlignment().getSequences();
\r
2381 if ( (seqs.size() == 1) || !viewport.alignment.isAligned())
\r
2383 seq = (SequenceI) seqs.elementAt(0);
\r
2387 msa = new SequenceI[seqs.size()];
\r
2389 for (int i = 0; i < seqs.size(); i++)
\r
2391 msa[i] = (SequenceI) seqs.elementAt(i);
\r
2403 return new SequenceI[]
\r
2413 * @param e DOCUMENT ME!
\r
2415 protected void LoadtreeMenuItem_actionPerformed(ActionEvent e)
\r
2417 // Pick the tree file
\r
2418 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
2420 "LAST_DIRECTORY"));
\r
2421 chooser.setFileView(new JalviewFileView());
\r
2422 chooser.setDialogTitle("Select a newick-like tree file");
\r
2423 chooser.setToolTipText("Load a tree file");
\r
2425 int value = chooser.showOpenDialog(null);
\r
2427 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
2429 String choice = chooser.getSelectedFile().getPath();
\r
2430 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
2434 jalview.io.NewickFile fin = new jalview.io.NewickFile(choice,
\r
2436 viewport.setCurrentTree(ShowNewickTree(fin, choice).getTree());
\r
2438 catch (Exception ex)
\r
2440 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2441 "Problem reading tree file",
\r
2443 JOptionPane.WARNING_MESSAGE);
\r
2444 ex.printStackTrace();
\r
2450 public TreePanel ShowNewickTree(NewickFile nf, String title)
\r
2452 return ShowNewickTree(nf,title,600,500,4,5);
\r
2457 * @param nf DOCUMENT ME!
\r
2458 * @param title DOCUMENT ME!
\r
2460 * @return DOCUMENT ME!
\r
2462 public TreePanel ShowNewickTree(NewickFile nf, String title, int w,int h,int x, int y)
\r
2464 TreePanel tp = null;
\r
2470 if (nf.getTree() != null)
\r
2472 tp = new TreePanel(viewport,
\r
2480 tp.setLocation(x,y);
\r
2483 Desktop.addInternalFrame(tp, title, w, h);
\r
2484 addTreeMenuItem(tp, title);
\r
2487 catch (Exception ex)
\r
2489 ex.printStackTrace();
\r
2500 PrinterJob printJob = PrinterJob.getPrinterJob();
\r
2501 PageFormat pf = printJob.pageDialog(printJob.defaultPage());
\r
2502 printJob.setPrintable(alignPanel, pf);
\r
2504 if (printJob.printDialog())
\r
2510 catch (Exception PrintException)
\r
2512 PrintException.printStackTrace();
\r
2519 * Generates menu items and listener event actions for web service clients
\r
2522 public void BuildWebServiceMenu()
\r
2524 if ( (Discoverer.services != null)
\r
2525 && (Discoverer.services.size() > 0))
\r
2527 Vector msaws = (Vector) Discoverer.services.get("MsaWS");
\r
2528 Vector secstrpr = (Vector) Discoverer.services.get("SecStrPred");
\r
2529 Vector wsmenu = new Vector();
\r
2530 if (msaws != null)
\r
2532 // Add any Multiple Sequence Alignment Services
\r
2533 final JMenu msawsmenu = new JMenu("Alignment");
\r
2534 final AlignFrame af = this;
\r
2535 for (int i = 0, j = msaws.size(); i < j; i++)
\r
2537 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws.
\r
2539 final JMenuItem method = new JMenuItem(sh.getName());
\r
2540 method.addActionListener(new ActionListener()
\r
2542 public void actionPerformed(ActionEvent e)
\r
2544 AlignmentView msa = gatherSequencesForAlignment();
\r
2545 new jalview.ws.MsaWSClient(sh, title, msa,
\r
2546 false, true, viewport.getAlignment().getDataset(), af);
\r
2551 msawsmenu.add(method);
\r
2552 // Deal with services that we know accept partial alignments.
\r
2553 if (sh.getName().indexOf("lustal") > -1)
\r
2555 // We know that ClustalWS can accept partial alignments for refinement.
\r
2556 final JMenuItem methodR = new JMenuItem(sh.getName()+" Realign");
\r
2557 methodR.addActionListener(new ActionListener()
\r
2559 public void actionPerformed(ActionEvent e)
\r
2561 AlignmentView msa = gatherSequencesForAlignment();
\r
2562 new jalview.ws.MsaWSClient(sh, title, msa,
\r
2563 true, true, viewport.getAlignment().getDataset(), af);
\r
2568 msawsmenu.add(methodR);
\r
2572 wsmenu.add(msawsmenu);
\r
2574 if (secstrpr != null)
\r
2576 // Add any secondary structure prediction services
\r
2577 final JMenu secstrmenu = new JMenu("Secondary Structure Prediction");
\r
2578 for (int i = 0, j = secstrpr.size(); i < j; i++)
\r
2580 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle)
\r
2582 final JMenuItem method = new JMenuItem(sh.getName());
\r
2583 method.addActionListener(new ActionListener()
\r
2585 public void actionPerformed(ActionEvent e)
\r
2587 SequenceI[] msa = gatherSeqOrMsaForSecStrPrediction();
\r
2588 if (msa.length == 1)
\r
2590 // Single Sequence prediction
\r
2591 new jalview.ws.JPredClient(sh,title, msa[0]);
\r
2595 if (msa.length > 1)
\r
2597 // Single Sequence prediction
\r
2598 jalview.ws.JPredClient ct = new jalview.ws.JPredClient(sh,
\r
2604 secstrmenu.add(method);
\r
2606 wsmenu.add(secstrmenu);
\r
2608 this.webService.removeAll();
\r
2609 for (int i = 0, j = wsmenu.size(); i < j; i++)
\r
2611 webService.add( (JMenu) wsmenu.get(i));
\r
2616 this.webService.removeAll();
\r
2617 this.webService.add(this.webServiceNoServices);
\r
2619 // TODO: add in rediscovery function
\r
2620 // TODO: reduce code redundancy.
\r
2621 // TODO: group services by location as well as function.
\r
2624 /* public void vamsasStore_actionPerformed(ActionEvent e)
\r
2626 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
2627 getProperty("LAST_DIRECTORY"));
\r
2629 chooser.setFileView(new JalviewFileView());
\r
2630 chooser.setDialogTitle("Export to Vamsas file");
\r
2631 chooser.setToolTipText("Export");
\r
2633 int value = chooser.showSaveDialog(this);
\r
2635 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
2637 jalview.io.VamsasDatastore vs = new jalview.io.VamsasDatastore(viewport);
\r
2638 //vs.store(chooser.getSelectedFile().getAbsolutePath() );
\r
2639 vs.storeJalview( chooser.getSelectedFile().getAbsolutePath(), this);
\r
2646 public void showTranslation_actionPerformed(ActionEvent e)
\r
2648 SequenceI [] selection = viewport.getSelectionAsNewSequence();
\r
2649 String [] seqstring = viewport.getViewAsString(true);
\r
2651 int s, sSize = selection.length;
\r
2652 SequenceI [] newSeq = new SequenceI[sSize];
\r
2655 StringBuffer protein;
\r
2657 for(s=0; s<sSize; s++)
\r
2659 protein = new StringBuffer();
\r
2660 seq = AlignSeq.extractGaps("-. ", seqstring[s]);
\r
2661 resSize = seq.length();
\r
2662 resSize -= resSize%3;
\r
2664 for(res = 0; res < resSize; res+=3)
\r
2666 String codon = seq.substring(res, res+3);
\r
2667 codon = codon.replace('U', 'T');
\r
2668 String aa = ResidueProperties.codonTranslate(codon);
\r
2670 protein.append(viewport.getGapCharacter());
\r
2671 else if(aa.equals("STOP"))
\r
2672 protein.append("X");
\r
2674 protein.append( aa );
\r
2676 newSeq[s] = new Sequence(selection[s].getName(),
\r
2677 protein.toString());
\r
2681 AlignmentI al = new Alignment(newSeq);
\r
2682 al.setDataset(null);
\r
2685 ////////////////////////////////
\r
2686 // Copy annotations across
\r
2687 jalview.datamodel.AlignmentAnnotation[] annotations
\r
2688 = viewport.alignment.getAlignmentAnnotation();
\r
2690 if(annotations!=null)
\r
2692 for (int i = 0; i < annotations.length; i++)
\r
2694 if (annotations[i].label.equals("Quality") ||
\r
2695 annotations[i].label.equals("Conservation") ||
\r
2696 annotations[i].label.equals("Consensus"))
\r
2701 aSize = viewport.alignment.getWidth() / 3;
\r
2702 jalview.datamodel.Annotation[] anots =
\r
2703 new jalview.datamodel.Annotation[aSize];
\r
2705 for (a = 0; a < viewport.alignment.getWidth(); a++)
\r
2707 if (annotations[i].annotations[a] == null
\r
2708 || annotations[i].annotations[a] == null)
\r
2711 anots[a / 3] = new Annotation(
\r
2712 annotations[i].annotations[a].displayCharacter,
\r
2713 annotations[i].annotations[a].description,
\r
2714 annotations[i].annotations[a].secondaryStructure,
\r
2715 annotations[i].annotations[a].value,
\r
2716 annotations[i].annotations[a].colour);
\r
2719 jalview.datamodel.AlignmentAnnotation aa
\r
2720 = new jalview.datamodel.AlignmentAnnotation(annotations[i].label,
\r
2721 annotations[i].description, anots);
\r
2722 al.addAnnotation(aa);
\r
2726 AlignFrame af = new AlignFrame(al);
\r
2727 Desktop.addInternalFrame(af, "Translation of "+this.getTitle(),
\r
2729 NEW_WINDOW_HEIGHT);
\r
2732 // AlignViewport newViewport = new AlignViewport(al);
\r
2733 // AlignmentPanel ap = new AlignmentPanel(this, newViewport);
\r
2734 // tabbedPane.add("Protein", ap);
\r
2735 // viewports.add(newViewport);
\r
2736 // alignPanels.add(ap);
\r
2739 /////////////////////////
\r
2741 // AlignViewport ds = new AlignViewport(al.getDataset());
\r
2742 // ds.setDataset(true);
\r
2743 // AlignmentPanel dap = new AlignmentPanel(this, ds);
\r
2744 // tabbedPane.add("Dataset", dap);
\r
2745 // viewports.add(ds);
\r
2746 // alignPanels.add(dap);
\r
2747 /////////////////////////
\r
2752 /*public void tabSelected()
\r
2754 int index = tabbedPane.getSelectedIndex();
\r
2755 viewport = (AlignViewport)viewports.elementAt(index);
\r
2756 alignPanel = (AlignmentPanel)alignPanels.elementAt(index);
\r
2762 * @param String DOCUMENT ME!
\r
2764 public boolean parseFeaturesFile(String file, String type)
\r
2766 boolean featuresFile = false;
\r
2768 featuresFile = new FeaturesFile(file, type).parse(viewport.alignment.getDataset(),
\r
2769 alignPanel.seqPanel.seqCanvas.
\r
2770 getFeatureRenderer().featureColours,
\r
2773 catch(Exception ex)
\r
2775 ex.printStackTrace();
\r
2780 viewport.showSequenceFeatures = true;
\r
2781 showSeqFeatures.setSelected(true);
\r
2782 alignPanel.repaint();
\r
2785 return featuresFile;
\r
2788 public void dragEnter(DropTargetDragEvent evt)
\r
2791 public void dragExit(DropTargetEvent evt)
\r
2794 public void dragOver(DropTargetDragEvent evt)
\r
2797 public void dropActionChanged(DropTargetDragEvent evt)
\r
2800 public void drop(DropTargetDropEvent evt)
\r
2802 Transferable t = evt.getTransferable();
\r
2803 java.util.List files = null;
\r
2807 DataFlavor uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String");
\r
2808 if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
\r
2810 //Works on Windows and MacOSX
\r
2811 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
2812 files = (java.util.List) t.getTransferData(DataFlavor.javaFileListFlavor);
\r
2814 else if (t.isDataFlavorSupported(uriListFlavor))
\r
2816 // This is used by Unix drag system
\r
2817 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
2818 String data = (String) t.getTransferData(uriListFlavor);
\r
2819 files = new java.util.ArrayList(1);
\r
2820 for (java.util.StringTokenizer st = new java.util.StringTokenizer(
\r
2823 st.hasMoreTokens(); )
\r
2825 String s = st.nextToken();
\r
2826 if (s.startsWith("#"))
\r
2828 // the line is a comment (as per the RFC 2483)
\r
2832 java.net.URI uri = new java.net.URI(s);
\r
2833 java.io.File file = new java.io.File(uri);
\r
2838 catch (Exception e)
\r
2840 e.printStackTrace();
\r
2842 if (files != null)
\r
2847 for (int i = 0; i < files.size(); i++)
\r
2849 loadJalviewDataFile(files.get(i).toString());
\r
2852 catch (Exception ex)
\r
2854 ex.printStackTrace();
\r
2859 // This method will attempt to load a "dropped" file first by testing
\r
2860 // whether its and Annotation file, then features file. If both are
\r
2861 // false then the user may have dropped an alignment file onto this
\r
2863 public void loadJalviewDataFile(String file)
\r
2866 boolean isAnnotation = new AnnotationFile().readAnnotationFile(viewport.
\r
2869 if (!isAnnotation)
\r
2871 boolean isGroupsFile = parseFeaturesFile(file,
\r
2872 AppletFormatAdapter.FILE);
\r
2873 if (!isGroupsFile)
\r
2875 String format = new IdentifyFile().Identify(file, FormatAdapter.FILE);
\r
2876 new FileLoader().LoadFile(viewport, file, FormatAdapter.FILE, format);
\r
2882 alignPanel.adjustAnnotationHeight();
\r
2885 }catch(Exception ex)
\r
2887 ex.printStackTrace();
\r