2 * Jalview - A Sequence Alignment Editor and Viewer
\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
\r
5 * This program is free software; you can redistribute it and/or
\r
6 * modify it under the terms of the GNU General Public License
\r
7 * as published by the Free Software Foundation; either version 2
\r
8 * of the License, or (at your option) any later version.
\r
10 * This program is distributed in the hope that it will be useful,
\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 * GNU General Public License for more details.
\r
15 * You should have received a copy of the GNU General Public License
\r
16 * along with this program; if not, write to the Free Softwarechang
\r
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
\r
19 package jalview.gui;
\r
21 import java.beans.*;
\r
26 import java.awt.datatransfer.*;
\r
27 import java.awt.event.*;
\r
28 import java.awt.print.*;
\r
29 import javax.swing.*;
\r
31 import jalview.analysis.*;
\r
32 import jalview.datamodel.*;
\r
33 import jalview.io.*;
\r
34 import jalview.jbgui.*;
\r
35 import jalview.schemes.*;
\r
36 import jalview.ws.*;
\r
37 import java.awt.dnd.*;
\r
38 import org.biojava.dasobert.eventmodel.*;
\r
44 * @version $Revision$
\r
46 public class AlignFrame
\r
47 extends GAlignFrame implements DropTargetListener, FeatureListener
\r
49 /** DOCUMENT ME!! */
\r
50 public static final int NEW_WINDOW_WIDTH = 700;
\r
52 /** DOCUMENT ME!! */
\r
53 public static final int NEW_WINDOW_HEIGHT = 500;
\r
54 AlignmentPanel alignPanel;
\r
55 AlignViewport viewport;
\r
57 /** DOCUMENT ME!! */
\r
58 public String currentFileFormat = null;
\r
59 Stack historyList = new Stack();
\r
60 Stack redoList = new Stack();
\r
61 private int treeCount = 0;
\r
64 * new alignment window with hidden columns
\r
65 * @param al AlignmentI
\r
66 * @param hiddenColumns ColumnSelection or null
\r
68 public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns) {
\r
70 viewport = new AlignViewport(al, hiddenColumns);
\r
72 this.setDropTarget(new java.awt.dnd.DropTarget(this, this));
\r
74 if(viewport.vconsensus==null)
\r
76 //Out of memory calculating consensus.
\r
77 BLOSUM62Colour.setEnabled(false);
\r
78 PIDColour.setEnabled(false);
\r
79 conservationMenuItem.setEnabled(false);
\r
80 modifyConservation.setEnabled(false);
\r
81 abovePIDThreshold.setEnabled(false);
\r
82 modifyPID.setEnabled(false);
\r
85 alignPanel = new AlignmentPanel(this, viewport);
\r
87 String sortby = jalview.bin.Cache.getDefault("SORT_ALIGNMENT", "No sort");
\r
89 if(sortby.equals("Id"))
\r
90 sortIDMenuItem_actionPerformed(null);
\r
91 else if(sortby.equals("Pairwise Identity"))
\r
92 sortPairwiseMenuItem_actionPerformed(null);
\r
94 // remove(tabbedPane);
\r
95 getContentPane().add(alignPanel, BorderLayout.CENTER);
\r
99 // tabbedPane.add(al.isNucleotide() ? "DNA":"Protein", alignPanel);
\r
102 /////////////////////////
\r
103 if(al.getDataset()==null)
\r
105 al.setDataset(null);
\r
107 // AlignViewport ds = new AlignViewport(al.getDataset(), true);
\r
108 // AlignmentPanel dap = new AlignmentPanel(this, ds);
\r
109 // tabbedPane.add("Dataset", dap);
\r
110 // viewports.add(ds);
\r
111 // alignPanels.add(dap);
\r
112 /////////////////////////
\r
115 viewport.addPropertyChangeListener(new PropertyChangeListener()
\r
117 public void propertyChange(PropertyChangeEvent evt)
\r
119 if (evt.getPropertyName().equals("alignment"))
\r
121 alignmentChanged();
\r
127 if (Desktop.desktop != null)
\r
129 addServiceListeners();
\r
130 setGUINucleotide(al.isNucleotide());
\r
134 if (jalview.bin.Cache.getDefault("WRAP_ALIGNMENT", false))
\r
136 wrapMenuItem.setSelected(true);
\r
137 wrapMenuItem_actionPerformed(null);
\r
144 * Creates a new AlignFrame object.
\r
146 * @param al DOCUMENT ME!
\r
148 public AlignFrame(AlignmentI al)
\r
153 public AlignViewport getViewport()
\r
158 /* Set up intrinsic listeners for dynamically generated GUI bits. */
\r
159 private void addServiceListeners()
\r
161 final java.beans.PropertyChangeListener thisListener;
\r
162 // Do this once to get current state
\r
163 BuildWebServiceMenu();
\r
164 Desktop.discoverer.addPropertyChangeListener(
\r
165 thisListener = new java.beans.PropertyChangeListener()
\r
167 public void propertyChange(PropertyChangeEvent evt)
\r
169 // System.out.println("Discoverer property change.");
\r
170 if (evt.getPropertyName().equals("services"))
\r
172 // System.out.println("Rebuilding web service menu");
\r
173 BuildWebServiceMenu();
\r
177 addInternalFrameListener(new javax.swing.event.
\r
178 InternalFrameAdapter()
\r
180 public void internalFrameClosed(
\r
181 javax.swing.event.InternalFrameEvent evt)
\r
183 // System.out.println("deregistering discoverer listener");
\r
184 Desktop.discoverer.removePropertyChangeListener(thisListener);
\r
185 closeMenuItem_actionPerformed(null);
\r
191 public void setGUINucleotide(boolean nucleotide)
\r
193 showTranslation.setVisible( nucleotide );
\r
194 //sequenceFeatures.setVisible(!nucleotide );
\r
195 //featureSettings.setVisible( !nucleotide );
\r
196 conservationMenuItem.setVisible( !nucleotide );
\r
197 modifyConservation.setVisible( !nucleotide );
\r
199 //Remember AlignFrame always starts as protein
\r
202 calculateMenu.remove(calculateMenu.getItemCount()-2);
\r
206 public void comeBackLater(FeatureEvent evt)
\r
209 public void newFeatures(FeatureEvent evt)
\r
211 if (evt.getFeatures().length > 0)
\r
213 alignPanel.seqPanel.seqCanvas.fr.featuresAdded();
\r
214 alignPanel.repaint();
\r
215 if(featureSettings!=null)
\r
216 featureSettings.setTableData();
\r
220 Hashtable progressBars;
\r
221 public void setProgressBar(String message, long id)
\r
223 if(progressBars == null)
\r
224 progressBars = new Hashtable();
\r
226 JPanel progressPanel;
\r
227 GridLayout layout = (GridLayout) statusPanel.getLayout();
\r
228 if(progressBars.get( new Long(id) )!=null)
\r
230 progressPanel = (JPanel)progressBars.get( new Long(id) );
\r
231 statusPanel.remove(progressPanel);
\r
232 progressBars.remove( progressPanel );
\r
233 progressPanel = null;
\r
235 statusBar.setText(message);
\r
237 layout.setRows(layout.getRows() - 1);
\r
241 progressPanel = new JPanel(new BorderLayout(10, 5));
\r
243 JProgressBar progressBar = new JProgressBar();
\r
244 progressBar.setIndeterminate(true);
\r
246 progressPanel.add(new JLabel(message), BorderLayout.WEST);
\r
247 progressPanel.add(progressBar, BorderLayout.CENTER);
\r
249 layout.setRows(layout.getRows() + 1);
\r
250 statusPanel.add(progressPanel);
\r
252 progressBars.put(new Long(id), progressPanel);
\r
260 Added so Castor Mapping file can obtain Jalview Version
\r
262 public String getVersion()
\r
264 return jalview.bin.Cache.getProperty("VERSION");
\r
267 public FeatureRenderer getFeatureRenderer()
\r
269 return alignPanel.seqPanel.seqCanvas.getFeatureRenderer();
\r
273 public void fetchSequence_actionPerformed(ActionEvent e)
\r
275 new SequenceFetcher(this);
\r
278 public void addFromFile_actionPerformed(ActionEvent e)
\r
280 Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport);
\r
283 public void addFromText_actionPerformed(ActionEvent e)
\r
285 Desktop.instance.inputTextboxMenuItem_actionPerformed(viewport);
\r
288 public void addFromURL_actionPerformed(ActionEvent e)
\r
290 Desktop.instance.inputURLMenuItem_actionPerformed(viewport);
\r
296 * @param e DOCUMENT ME!
\r
298 public void saveAlignmentMenu_actionPerformed(ActionEvent e)
\r
300 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
301 getProperty( "LAST_DIRECTORY"),
\r
303 { "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc","jar" },
\r
305 { "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "Jalview" },
\r
310 chooser.setFileView(new JalviewFileView());
\r
311 chooser.setDialogTitle("Save Alignment to file");
\r
312 chooser.setToolTipText("Save");
\r
314 int value = chooser.showSaveDialog(this);
\r
316 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
318 currentFileFormat = chooser.getSelectedFormat();
\r
320 if (currentFileFormat == null)
\r
322 JOptionPane.showInternalMessageDialog(Desktop.desktop,
\r
323 "You must select a file format before saving!",
\r
324 "File format not specified",
\r
325 JOptionPane.WARNING_MESSAGE);
\r
326 value = chooser.showSaveDialog(this);
\r
330 jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT",
\r
331 currentFileFormat);
\r
333 String choice = chooser.getSelectedFile().getPath();
\r
334 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
336 saveAlignment(choice, currentFileFormat);
\r
340 public boolean saveAlignment(String file, String format)
\r
342 if (format.equalsIgnoreCase("Jalview"))
\r
344 String shortName = title;
\r
346 if (shortName.indexOf(java.io.File.separatorChar) > -1)
\r
348 shortName = shortName.substring(shortName.lastIndexOf(
\r
349 java.io.File.separatorChar) + 1);
\r
352 new Jalview2XML().SaveAlignment(this, file, shortName);
\r
354 // USE Jalview2XML to save this file
\r
360 String[] omitHidden = null;
\r
362 if (viewport.hasHiddenColumns)
\r
364 int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,
\r
365 "The Alignment contains hidden columns."
\r
366 + "\nDo you want to save only the visible alignment?",
\r
367 "Save / Omit Hidden Columns",
\r
368 JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
\r
370 if (reply == JOptionPane.YES_OPTION)
\r
371 omitHidden = viewport.getViewAsString(false);
\r
374 String output = new FormatAdapter().formatSequences(
\r
376 viewport.alignment.getSequencesArray(),
\r
379 if (output == null)
\r
386 java.io.PrintWriter out = new java.io.PrintWriter(
\r
387 new java.io.FileWriter(file));
\r
391 this.setTitle(file);
\r
394 catch (Exception ex)
\r
396 ex.printStackTrace();
\r
405 * @param e DOCUMENT ME!
\r
407 protected void outputText_actionPerformed(ActionEvent e)
\r
409 String [] omitHidden = null;
\r
411 if(viewport.hasHiddenColumns)
\r
413 int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,
\r
414 "The Alignment contains hidden columns."
\r
415 +"\nDo you want to output only the visible alignment?",
\r
416 "Save / Omit Hidden Columns",
\r
417 JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
\r
419 if(reply==JOptionPane.YES_OPTION)
\r
421 omitHidden = viewport.getViewAsString(false);
\r
425 CutAndPasteTransfer cap = new CutAndPasteTransfer();
\r
426 Desktop.addInternalFrame(cap,
\r
427 "Alignment output - " + e.getActionCommand(), 600,
\r
431 cap.setText(new FormatAdapter().formatSequences(
\r
432 e.getActionCommand(),
\r
433 viewport.alignment.getSequencesArray(),
\r
440 * @param e DOCUMENT ME!
\r
442 protected void htmlMenuItem_actionPerformed(ActionEvent e)
\r
444 new HTMLOutput(viewport,
\r
445 alignPanel.seqPanel.seqCanvas.getSequenceRenderer(),
\r
446 alignPanel.seqPanel.seqCanvas.getFeatureRenderer());
\r
449 public void createImageMap(File file, String image)
\r
451 alignPanel.makePNGImageMap(file, image);
\r
457 * @param e DOCUMENT ME!
\r
459 public void createPNG(File f)
\r
461 alignPanel.makePNG(f);
\r
467 * @param e DOCUMENT ME!
\r
469 public void createEPS(File f)
\r
471 alignPanel.makeEPS(f);
\r
477 * @param e DOCUMENT ME!
\r
479 public void printMenuItem_actionPerformed(ActionEvent e)
\r
481 //Putting in a thread avoids Swing painting problems
\r
482 PrintThread thread = new PrintThread();
\r
486 public void exportFeatures_actionPerformed(ActionEvent e)
\r
488 new AnnotationExporter().exportFeatures(alignPanel);
\r
492 public void exportAnnotations_actionPerformed(ActionEvent e)
\r
494 new AnnotationExporter().exportAnnotations(
\r
496 viewport.alignment.getAlignmentAnnotation()
\r
501 public void associatedData_actionPerformed(ActionEvent e)
\r
503 // Pick the tree file
\r
504 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
506 "LAST_DIRECTORY"));
\r
507 chooser.setFileView(new JalviewFileView());
\r
508 chooser.setDialogTitle("Load Jalview Annotations or Features File");
\r
509 chooser.setToolTipText("Load Jalview Annotations / Features file");
\r
511 int value = chooser.showOpenDialog(null);
\r
513 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
515 String choice = chooser.getSelectedFile().getPath();
\r
516 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
517 loadJalviewDataFile(choice);
\r
525 * @param e DOCUMENT ME!
\r
527 public void closeMenuItem_actionPerformed(ActionEvent e)
\r
531 PaintRefresher.components.remove(viewport.alignment);
\r
532 this.setClosed(true);
\r
534 catch (Exception ex)
\r
542 void updateEditMenuBar()
\r
544 if (historyList.size() > 0)
\r
546 undoMenuItem.setEnabled(true);
\r
548 HistoryItem hi = (HistoryItem) historyList.peek();
\r
549 undoMenuItem.setText("Undo " + hi.getDescription());
\r
553 undoMenuItem.setEnabled(false);
\r
554 undoMenuItem.setText("Undo");
\r
557 if (redoList.size() > 0)
\r
559 redoMenuItem.setEnabled(true);
\r
561 HistoryItem hi = (HistoryItem) redoList.peek();
\r
562 redoMenuItem.setText("Redo " + hi.getDescription());
\r
566 redoMenuItem.setEnabled(false);
\r
567 redoMenuItem.setText("Redo");
\r
574 * @param hi DOCUMENT ME!
\r
576 public void addHistoryItem(HistoryItem hi)
\r
578 historyList.push(hi);
\r
579 updateEditMenuBar();
\r
585 * @param e DOCUMENT ME!
\r
587 protected void undoMenuItem_actionPerformed(ActionEvent e)
\r
589 HistoryItem hi = (HistoryItem) historyList.pop();
\r
590 redoList.push(new HistoryItem(hi.getDescription(), viewport.alignment,
\r
591 HistoryItem.HIDE));
\r
592 restoreHistoryItem(hi);
\r
593 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
599 * @param e DOCUMENT ME!
\r
601 protected void redoMenuItem_actionPerformed(ActionEvent e)
\r
603 HistoryItem hi = (HistoryItem) redoList.pop();
\r
604 restoreHistoryItem(hi);
\r
605 updateEditMenuBar();
\r
606 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
609 // used by undo and redo
\r
610 void restoreHistoryItem(HistoryItem hi)
\r
615 updateEditMenuBar();
\r
617 viewport.firePropertyChange("alignment", null,
\r
618 viewport.getAlignment().getSequences());
\r
624 * @param up DOCUMENT ME!
\r
626 public void moveSelectedSequences(boolean up)
\r
628 SequenceGroup sg = viewport.getSelectionGroup();
\r
637 for (int i = 1; i < viewport.alignment.getHeight(); i++)
\r
639 SequenceI seq = viewport.alignment.getSequenceAt(i);
\r
641 if (!sg.getSequences(false).contains(seq))
\r
646 SequenceI temp = viewport.alignment.getSequenceAt(i - 1);
\r
648 if (sg.getSequences(false).contains(temp))
\r
653 viewport.alignment.getSequences().setElementAt(temp, i);
\r
654 viewport.alignment.getSequences().setElementAt(seq, i - 1);
\r
659 for (int i = viewport.alignment.getHeight() - 2; i > -1; i--)
\r
661 SequenceI seq = viewport.alignment.getSequenceAt(i);
\r
663 if (!sg.getSequences(false).contains(seq))
\r
668 SequenceI temp = viewport.alignment.getSequenceAt(i + 1);
\r
670 if (sg.getSequences(false).contains(temp))
\r
675 viewport.alignment.getSequences().setElementAt(temp, i);
\r
676 viewport.alignment.getSequences().setElementAt(seq, i + 1);
\r
680 alignPanel.repaint();
\r
688 * @param e DOCUMENT ME!
\r
690 protected void copy_actionPerformed(ActionEvent e)
\r
692 if (viewport.getSelectionGroup() == null)
\r
697 SequenceI [] seqs = viewport.getSelectionAsNewSequence();
\r
698 String[] omitHidden = null;
\r
700 if (viewport.hasHiddenColumns)
\r
702 omitHidden = viewport.getViewAsString(true);
\r
705 String output = new FormatAdapter().formatSequences(
\r
711 Toolkit.getDefaultToolkit().getSystemClipboard()
\r
712 .setContents(new StringSelection(output), Desktop.instance);
\r
714 Vector hiddenColumns = null;
\r
715 if(viewport.hasHiddenColumns)
\r
717 hiddenColumns =new Vector();
\r
718 int hiddenOffset = viewport.getSelectionGroup().getStartRes();
\r
719 for(int i=0; i<viewport.getColumnSelection().getHiddenColumns().size(); i++)
\r
721 int[] region = (int[])
\r
722 viewport.getColumnSelection().getHiddenColumns().elementAt(i);
\r
724 hiddenColumns.addElement(new int[]{region[0]-hiddenOffset,
\r
725 region[1]-hiddenOffset});
\r
729 Desktop.jalviewClipboard = new Object[]{ seqs,
\r
730 viewport.alignment.getDataset(),
\r
737 * @param e DOCUMENT ME!
\r
739 protected void pasteNew_actionPerformed(ActionEvent e)
\r
747 * @param e DOCUMENT ME!
\r
749 protected void pasteThis_actionPerformed(ActionEvent e)
\r
751 addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment,
\r
752 HistoryItem.PASTE));
\r
759 * @param newAlignment DOCUMENT ME!
\r
761 void paste(boolean newAlignment)
\r
765 Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
\r
766 Transferable contents = c.getContents(this);
\r
768 if (contents == null)
\r
773 String str = (String) contents.getTransferData(DataFlavor.stringFlavor);
\r
777 String format = new IdentifyFile().Identify(str, "Paste");
\r
778 SequenceI[] sequences;
\r
781 if(Desktop.jalviewClipboard!=null)
\r
783 // The clipboard was filled from within Jalview, we must use the sequences
\r
784 // And dataset from the copied alignment
\r
785 sequences = (SequenceI[])Desktop.jalviewClipboard[0];
\r
789 sequences = new FormatAdapter().readFile(str, "Paste", format);
\r
792 AlignmentI alignment = null;
\r
796 alignment = new Alignment(sequences);
\r
798 if(Desktop.jalviewClipboard!=null)
\r
799 alignment.setDataset( (Alignment)Desktop.jalviewClipboard[1] );
\r
801 alignment.setDataset( null );
\r
806 alignment = viewport.getAlignment();
\r
809 for (int i = 0; i < sequences.length; i++)
\r
811 Sequence newseq = new Sequence(sequences[i].getName(),
\r
812 sequences[i].getSequence(), sequences[i].getStart(),
\r
813 sequences[i].getEnd());
\r
815 alignment.addSequence(newseq);
\r
819 viewport.setEndSeq(alignment.getHeight());
\r
820 alignment.getWidth();
\r
821 viewport.firePropertyChange("alignment", null, alignment.getSequences());
\r
828 // Add any annotations attached to sequences
\r
829 for (int i = 0; i < sequences.length; i++)
\r
831 if (sequences[i].getAnnotation() != null)
\r
833 for (int a = 0; a < sequences[i].getAnnotation().length; a++)
\r
835 AlignmentAnnotation newAnnot =
\r
836 new AlignmentAnnotation(
\r
837 sequences[i].getAnnotation()[a].label,
\r
838 sequences[i].getAnnotation()[a].description,
\r
839 sequences[i].getAnnotation()[a].annotations,
\r
840 sequences[i].getAnnotation()[a].graphMin,
\r
841 sequences[i].getAnnotation()[a].graphMax,
\r
842 sequences[i].getAnnotation()[a].graph);
\r
844 sequences[i].getAnnotation()[a] = newAnnot;
\r
845 newAnnot.sequenceMapping = sequences[i].getAnnotation()[a].
\r
847 newAnnot.sequenceRef = sequences[i];
\r
848 newAnnot.adjustForAlignment();
\r
849 alignment.addAnnotation(newAnnot);
\r
850 alignment.setAnnotationIndex(newAnnot, a);
\r
853 alignPanel.annotationPanel.adjustPanelHeight();
\r
859 AlignFrame af = new AlignFrame(alignment);
\r
860 String newtitle = new String("Copied sequences");
\r
862 if(Desktop.jalviewClipboard!=null && Desktop.jalviewClipboard[2]!=null)
\r
864 Vector hc = (Vector)Desktop.jalviewClipboard[2];
\r
865 for(int i=0; i<hc.size(); i++)
\r
867 int [] region = (int[]) hc.elementAt(i);
\r
868 af.viewport.hideColumns(region[0], region[1]);
\r
873 //>>>This is a fix for the moment, until a better solution is found!!<<<
\r
874 af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().transferSettings(
\r
875 alignPanel.seqPanel.seqCanvas.getFeatureRenderer());
\r
878 if (title.startsWith("Copied sequences"))
\r
884 newtitle = newtitle.concat("- from " + title);
\r
887 Desktop.addInternalFrame(af, newtitle, NEW_WINDOW_WIDTH,
\r
888 NEW_WINDOW_HEIGHT);
\r
894 catch (Exception ex)
\r
896 ex.printStackTrace();
\r
897 System.out.println("Exception whilst pasting: "+ex);
\r
898 // could be anything being pasted in here
\r
907 * @param e DOCUMENT ME!
\r
909 protected void cut_actionPerformed(ActionEvent e)
\r
911 copy_actionPerformed(null);
\r
912 delete_actionPerformed(null);
\r
918 * @param e DOCUMENT ME!
\r
920 protected void delete_actionPerformed(ActionEvent e)
\r
923 if (viewport.getSelectionGroup() == null)
\r
929 SequenceGroup sg = viewport.getSelectionGroup();
\r
933 //Jalview no longer allows deletion of residues.
\r
934 //Check here whether any residues are in selection area
\r
935 /* if( sg.getEndRes()-sg.getStartRes() < viewport.alignment.getWidth()-1)
\r
937 for (int i = 0; i < sg.sequences.size(); i++)
\r
939 SequenceI seq = sg.getSequenceAt(i);
\r
940 int j = sg.getStartRes();
\r
943 if (!jalview.util.Comparison.isGap(seq.getCharAt(j)))
\r
945 JOptionPane.showInternalMessageDialog(
\r
946 Desktop.desktop, "Cannot delete residues from alignment!\n"
\r
947 + "Try hiding columns instead.",
\r
948 "Deletion of residues not permitted",
\r
949 JOptionPane.WARNING_MESSAGE);
\r
954 }while(j<=sg.getEndRes());
\r
959 addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment,
\r
960 HistoryItem.HIDE));
\r
963 for (int i = 0; i < sg.getSize(false); i++)
\r
965 SequenceI seq = sg.getSequenceAt(i);
\r
966 int index = viewport.getAlignment().findIndex(seq);
\r
968 seq.deleteChars(sg.getStartRes(), sg.getEndRes() + 1);
\r
970 // If the cut affects all sequences, remove highlighted columns
\r
971 if (sg.getSize(false) == viewport.alignment.getHeight())
\r
973 viewport.getColumnSelection().removeElements(sg.getStartRes(),
\r
974 sg.getEndRes() + 1);
\r
977 if (seq.getSequence().length() < 1)
\r
979 viewport.getAlignment().deleteSequence(seq);
\r
983 viewport.getAlignment().getSequences().setElementAt(seq, index);
\r
987 viewport.setSelectionGroup(null);
\r
988 viewport.alignment.deleteGroup(sg);
\r
990 viewport.firePropertyChange("alignment", null,
\r
991 viewport.getAlignment().getSequences());
\r
995 if (viewport.getAlignment().getHeight() < 1)
\r
999 this.setClosed(true);
\r
1001 catch (Exception ex)
\r
1010 * @param e DOCUMENT ME!
\r
1012 protected void deleteGroups_actionPerformed(ActionEvent e)
\r
1014 viewport.alignment.deleteAllGroups();
\r
1015 viewport.setSelectionGroup(null);
\r
1016 alignPanel.repaint();
\r
1022 * @param e DOCUMENT ME!
\r
1024 public void selectAllSequenceMenuItem_actionPerformed(ActionEvent e)
\r
1026 SequenceGroup sg = new SequenceGroup();
\r
1028 for (int i = 0; i < viewport.getAlignment().getSequences().size();
\r
1031 sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);
\r
1034 sg.setEndRes(viewport.alignment.getWidth() - 1);
\r
1035 viewport.setSelectionGroup(sg);
\r
1036 PaintRefresher.Refresh(null, viewport.alignment);
\r
1042 * @param e DOCUMENT ME!
\r
1044 public void deselectAllSequenceMenuItem_actionPerformed(ActionEvent e)
\r
1046 if(viewport.cursorMode)
\r
1048 alignPanel.seqPanel.keyboardNo1 = null;
\r
1049 alignPanel.seqPanel.keyboardNo2 = null;
\r
1051 viewport.setSelectionGroup(null);
\r
1052 viewport.getColumnSelection().clear();
\r
1053 viewport.setSelectionGroup(null);
\r
1054 alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);
\r
1055 alignPanel.idPanel.idCanvas.searchResults = null;
\r
1056 alignPanel.repaint();
\r
1057 PaintRefresher.Refresh(null, viewport.alignment);
\r
1063 * @param e DOCUMENT ME!
\r
1065 public void invertSequenceMenuItem_actionPerformed(ActionEvent e)
\r
1067 SequenceGroup sg = viewport.getSelectionGroup();
\r
1071 selectAllSequenceMenuItem_actionPerformed(null);
\r
1076 for (int i = 0; i < viewport.getAlignment().getSequences().size();
\r
1079 sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false);
\r
1082 PaintRefresher.Refresh(null, viewport.alignment);
\r
1088 * @param e DOCUMENT ME!
\r
1090 public void remove2LeftMenuItem_actionPerformed(ActionEvent e)
\r
1092 ColumnSelection colSel = viewport.getColumnSelection();
\r
1094 if (colSel.size() > 0)
\r
1096 addHistoryItem(new HistoryItem("Remove Left", viewport.alignment,
\r
1097 HistoryItem.HIDE));
\r
1099 int min = colSel.getMin();
\r
1100 viewport.getAlignment().trimLeft(min);
\r
1101 colSel.compensateForEdit(0, min);
\r
1103 if (viewport.getSelectionGroup() != null)
\r
1105 viewport.getSelectionGroup().adjustForRemoveLeft(min);
\r
1108 Vector groups = viewport.alignment.getGroups();
\r
1110 for (int i = 0; i < groups.size(); i++)
\r
1112 SequenceGroup sg = (SequenceGroup) groups.get(i);
\r
1114 if (!sg.adjustForRemoveLeft(min))
\r
1116 viewport.alignment.deleteGroup(sg);
\r
1120 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1127 * @param e DOCUMENT ME!
\r
1129 public void remove2RightMenuItem_actionPerformed(ActionEvent e)
\r
1131 ColumnSelection colSel = viewport.getColumnSelection();
\r
1133 if (colSel.size() > 0)
\r
1135 addHistoryItem(new HistoryItem("Remove Right", viewport.alignment,
\r
1136 HistoryItem.HIDE));
\r
1138 int max = colSel.getMax();
\r
1139 viewport.getAlignment().trimRight(max);
\r
1141 if (viewport.getSelectionGroup() != null)
\r
1143 viewport.getSelectionGroup().adjustForRemoveRight(max);
\r
1146 Vector groups = viewport.alignment.getGroups();
\r
1148 for (int i = 0; i < groups.size(); i++)
\r
1150 SequenceGroup sg = (SequenceGroup) groups.get(i);
\r
1152 if (!sg.adjustForRemoveRight(max))
\r
1154 viewport.alignment.deleteGroup(sg);
\r
1158 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1165 * @param e DOCUMENT ME!
\r
1167 public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e)
\r
1169 addHistoryItem(new HistoryItem("Remove Gapped Columns",
\r
1170 viewport.alignment, HistoryItem.HIDE));
\r
1172 //This is to maintain viewport position on first residue
\r
1173 //of first sequence
\r
1174 SequenceI seq = viewport.alignment.getSequenceAt(0);
\r
1175 int startRes = seq.findPosition(viewport.startRes);
\r
1177 viewport.getAlignment().removeGaps();
\r
1179 viewport.setStartRes(seq.findIndex(startRes)-1);
\r
1181 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1187 * @param e DOCUMENT ME!
\r
1189 public void removeAllGapsMenuItem_actionPerformed(ActionEvent e)
\r
1191 addHistoryItem(new HistoryItem("Remove Gaps", viewport.alignment,
\r
1192 HistoryItem.HIDE));
\r
1194 //This is to maintain viewport position on first residue
\r
1195 //of first sequence
\r
1196 SequenceI seq = viewport.alignment.getSequenceAt(0);
\r
1197 int startRes = seq.findPosition(viewport.startRes);
\r
1200 SequenceI current;
\r
1203 Vector seqs = null;
\r
1206 int end = viewport.alignment.getWidth();
\r
1208 if (viewport.getSelectionGroup() != null
\r
1209 && viewport.getSelectionGroup().getSequences(true) != null
\r
1210 && viewport.getSelectionGroup().getSize(true) > 0)
\r
1212 seqs = viewport.getSelectionGroup().getSequences(true);
\r
1213 start = viewport.getSelectionGroup().getStartRes();
\r
1214 end = viewport.getSelectionGroup().getEndRes()+1;
\r
1218 seqs = viewport.alignment.getSequences();
\r
1221 for (int i = 0; i < seqs.size(); i++)
\r
1223 current = (SequenceI) seqs.elementAt(i);
\r
1224 jSize = current.getLength();
\r
1226 // Removing a range is much quicker than removing gaps
\r
1227 // one by one for long sequences
\r
1229 int rangeStart=-1, rangeEnd=-1;
\r
1233 if (jalview.util.Comparison.isGap(current.getCharAt(j)))
\r
1235 if(rangeStart==-1)
\r
1250 current.deleteChars(rangeStart, rangeEnd);
\r
1251 j-=rangeEnd-rangeStart;
\r
1252 jSize-=rangeEnd-rangeStart;
\r
1260 while (j < end && j < jSize);
\r
1263 current.deleteChars(rangeStart, rangeEnd);
\r
1267 viewport.setStartRes(seq.findIndex(startRes)-1);
\r
1269 viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
\r
1272 public void alignmentChanged()
\r
1274 if(viewport.padGaps)
\r
1275 viewport.getAlignment().padGaps();
\r
1277 if(viewport.vconsensus!=null && viewport.autoCalculateConsensus)
\r
1279 viewport.updateConsensus();
\r
1280 viewport.updateConservation();
\r
1282 resetAllColourSchemes();
\r
1283 if(alignPanel.overviewPanel!=null)
\r
1284 alignPanel.overviewPanel.updateOverviewImage();
\r
1286 viewport.alignment.adjustSequenceAnnotations();
\r
1288 alignPanel.repaint();
\r
1291 void resetAllColourSchemes()
\r
1293 ColourSchemeI cs = viewport.globalColourScheme;
\r
1296 if (cs instanceof ClustalxColourScheme)
\r
1298 ( (ClustalxColourScheme) viewport.getGlobalColourScheme()).
\r
1299 resetClustalX(viewport.alignment.getSequences(),
\r
1300 viewport.alignment.getWidth());
\r
1303 cs.setConsensus(viewport.vconsensus);
\r
1304 if (cs.conservationApplied())
\r
1306 Alignment al = (Alignment) viewport.alignment;
\r
1307 Conservation c = new Conservation("All",
\r
1308 ResidueProperties.propHash, 3,
\r
1309 al.getSequences(), 0,
\r
1310 al.getWidth() - 1);
\r
1312 c.verdict(false, viewport.ConsPercGaps);
\r
1314 cs.setConservation(c);
\r
1318 int s, sSize = viewport.alignment.getGroups().size();
\r
1319 for(s=0; s<sSize; s++)
\r
1321 SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s);
\r
1322 if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme)
\r
1324 ((ClustalxColourScheme)sg.cs).resetClustalX(
\r
1325 sg.getSequences(true), sg.getWidth());
\r
1327 sg.recalcConservation();
\r
1334 * @param e DOCUMENT ME!
\r
1336 public void padGapsMenuitem_actionPerformed(ActionEvent e)
\r
1338 addHistoryItem(new HistoryItem("Pad Gaps", viewport.alignment,
\r
1339 HistoryItem.HIDE));
\r
1341 viewport.padGaps = padGapsMenuitem.isSelected();
\r
1343 // if (viewport.padGaps)
\r
1344 alignmentChanged();
\r
1350 * @param e DOCUMENT ME!
\r
1352 public void findMenuItem_actionPerformed(ActionEvent e)
\r
1354 JInternalFrame frame = new JInternalFrame();
\r
1355 Finder finder = new Finder(viewport, alignPanel, frame);
\r
1356 frame.setContentPane(finder);
\r
1357 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
1358 Desktop.addInternalFrame(frame, "Find", 340, 110);
\r
1364 * @param e DOCUMENT ME!
\r
1366 public void font_actionPerformed(ActionEvent e)
\r
1368 new FontChooser(alignPanel);
\r
1371 public void smoothFont_actionPerformed(ActionEvent e)
\r
1373 viewport.antiAlias = smoothFont.isSelected();
\r
1374 alignPanel.annotationPanel.image = null;
\r
1375 alignPanel.repaint();
\r
1382 * @param e DOCUMENT ME!
\r
1384 protected void seqLimit_actionPerformed(ActionEvent e)
\r
1386 viewport.setShowJVSuffix(seqLimits.isSelected());
\r
1388 alignPanel.idPanel.idCanvas.setPreferredSize(alignPanel.calculateIdWidth());
\r
1389 alignPanel.repaint();
\r
1396 * @param e DOCUMENT ME!
\r
1398 protected void colourTextMenuItem_actionPerformed(ActionEvent e)
\r
1400 viewport.setColourText(colourTextMenuItem.isSelected());
\r
1401 alignPanel.repaint();
\r
1407 * @param e DOCUMENT ME!
\r
1409 public void wrapMenuItem_actionPerformed(ActionEvent e)
\r
1411 scaleAbove.setVisible(wrapMenuItem.isSelected());
\r
1412 scaleLeft.setVisible(wrapMenuItem.isSelected());
\r
1413 scaleRight.setVisible(wrapMenuItem.isSelected());
\r
1414 viewport.setWrapAlignment(wrapMenuItem.isSelected());
\r
1415 alignPanel.setWrapAlignment(wrapMenuItem.isSelected());
\r
1418 public void showAllSeqs_actionPerformed(ActionEvent e)
\r
1420 viewport.showAllHiddenSeqs();
\r
1424 public void showAllColumns_actionPerformed(ActionEvent e)
\r
1426 viewport.showAllHiddenColumns();
\r
1429 public void hideSelSequences_actionPerformed(ActionEvent e)
\r
1431 if(viewport.getSelectionGroup()==null)
\r
1434 SequenceI [] seqs = viewport.getSelectionGroup().getSequencesInOrder(
\r
1435 viewport.alignment
\r
1438 for(int i=0; i<seqs.length; i++)
\r
1440 viewport.hideSequence(seqs[i]);
\r
1443 alignPanel.repaint();
\r
1446 public void hideSelColumns_actionPerformed(ActionEvent e)
\r
1448 viewport.hideSelectedColumns();
\r
1449 alignPanel.repaint();
\r
1452 public void hiddenMarkers_actionPerformed(ActionEvent e)
\r
1454 viewport.setShowHiddenMarkers(hiddenMarkers.isSelected());
\r
1461 * @param e DOCUMENT ME!
\r
1463 protected void scaleAbove_actionPerformed(ActionEvent e)
\r
1465 viewport.setScaleAboveWrapped(scaleAbove.isSelected());
\r
1466 alignPanel.repaint();
\r
1472 * @param e DOCUMENT ME!
\r
1474 protected void scaleLeft_actionPerformed(ActionEvent e)
\r
1476 viewport.setScaleLeftWrapped(scaleLeft.isSelected());
\r
1477 alignPanel.repaint();
\r
1483 * @param e DOCUMENT ME!
\r
1485 protected void scaleRight_actionPerformed(ActionEvent e)
\r
1487 viewport.setScaleRightWrapped(scaleRight.isSelected());
\r
1488 alignPanel.repaint();
\r
1494 * @param e DOCUMENT ME!
\r
1496 public void viewBoxesMenuItem_actionPerformed(ActionEvent e)
\r
1498 viewport.setShowBoxes(viewBoxesMenuItem.isSelected());
\r
1499 alignPanel.repaint();
\r
1505 * @param e DOCUMENT ME!
\r
1507 public void viewTextMenuItem_actionPerformed(ActionEvent e)
\r
1509 viewport.setShowText(viewTextMenuItem.isSelected());
\r
1510 alignPanel.repaint();
\r
1516 * @param e DOCUMENT ME!
\r
1518 protected void renderGapsMenuItem_actionPerformed(ActionEvent e)
\r
1520 viewport.setRenderGaps(renderGapsMenuItem.isSelected());
\r
1521 alignPanel.repaint();
\r
1525 FeatureSettings featureSettings;
\r
1526 public void featureSettings_actionPerformed(ActionEvent e)
\r
1528 if(featureSettings !=null )
\r
1530 featureSettings.close();
\r
1531 featureSettings = null;
\r
1533 featureSettings = new FeatureSettings(this);
\r
1539 * @param evt DOCUMENT ME!
\r
1541 public void showSeqFeatures_actionPerformed(ActionEvent evt)
\r
1543 viewport.setShowSequenceFeatures(showSeqFeatures.isSelected());
\r
1544 alignPanel.repaint();
\r
1545 if (alignPanel.getOverviewPanel() != null)
\r
1547 alignPanel.getOverviewPanel().updateOverviewImage();
\r
1554 * @param e DOCUMENT ME!
\r
1556 public void annotationPanelMenuItem_actionPerformed(ActionEvent e)
\r
1558 viewport.setShowAnnotation(annotationPanelMenuItem.isSelected());
\r
1559 alignPanel.setAnnotationVisible(annotationPanelMenuItem.isSelected());
\r
1565 * @param e DOCUMENT ME!
\r
1567 public void overviewMenuItem_actionPerformed(ActionEvent e)
\r
1569 if (alignPanel.overviewPanel != null)
\r
1574 JInternalFrame frame = new JInternalFrame();
\r
1575 OverviewPanel overview = new OverviewPanel(alignPanel);
\r
1576 frame.setContentPane(overview);
\r
1577 Desktop.addInternalFrame(frame, "Overview " + this.getTitle(),
\r
1578 frame.getWidth(), frame.getHeight());
\r
1580 frame.setLayer(JLayeredPane.PALETTE_LAYER);
\r
1581 frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
\r
1583 public void internalFrameClosed(
\r
1584 javax.swing.event.InternalFrameEvent evt)
\r
1586 alignPanel.setOverviewPanel(null);
\r
1591 alignPanel.setOverviewPanel(overview);
\r
1597 * @param e DOCUMENT ME!
\r
1599 protected void noColourmenuItem_actionPerformed(ActionEvent e)
\r
1601 changeColour(null);
\r
1607 * @param e DOCUMENT ME!
\r
1609 public void clustalColour_actionPerformed(ActionEvent e)
\r
1611 changeColour(new ClustalxColourScheme(
\r
1612 viewport.alignment.getSequences(), viewport.alignment.getWidth()));
\r
1618 * @param e DOCUMENT ME!
\r
1620 public void zappoColour_actionPerformed(ActionEvent e)
\r
1622 changeColour(new ZappoColourScheme());
\r
1628 * @param e DOCUMENT ME!
\r
1630 public void taylorColour_actionPerformed(ActionEvent e)
\r
1632 changeColour(new TaylorColourScheme());
\r
1638 * @param e DOCUMENT ME!
\r
1640 public void hydrophobicityColour_actionPerformed(ActionEvent e)
\r
1642 changeColour(new HydrophobicColourScheme());
\r
1648 * @param e DOCUMENT ME!
\r
1650 public void helixColour_actionPerformed(ActionEvent e)
\r
1652 changeColour(new HelixColourScheme());
\r
1658 * @param e DOCUMENT ME!
\r
1660 public void strandColour_actionPerformed(ActionEvent e)
\r
1662 changeColour(new StrandColourScheme());
\r
1668 * @param e DOCUMENT ME!
\r
1670 public void turnColour_actionPerformed(ActionEvent e)
\r
1672 changeColour(new TurnColourScheme());
\r
1678 * @param e DOCUMENT ME!
\r
1680 public void buriedColour_actionPerformed(ActionEvent e)
\r
1682 changeColour(new BuriedColourScheme());
\r
1688 * @param e DOCUMENT ME!
\r
1690 public void nucleotideColour_actionPerformed(ActionEvent e)
\r
1692 changeColour(new NucleotideColourScheme());
\r
1695 public void annotationColour_actionPerformed(ActionEvent e)
\r
1697 new AnnotationColourChooser(viewport, alignPanel);
\r
1704 * @param e DOCUMENT ME!
\r
1706 protected void applyToAllGroups_actionPerformed(ActionEvent e)
\r
1708 viewport.setColourAppliesToAllGroups(applyToAllGroups.isSelected());
\r
1714 * @param cs DOCUMENT ME!
\r
1716 public void changeColour(ColourSchemeI cs)
\r
1718 int threshold = 0;
\r
1722 if (viewport.getAbovePIDThreshold())
\r
1724 threshold = SliderPanel.setPIDSliderSource(alignPanel, cs,
\r
1727 cs.setThreshold(threshold,
\r
1728 viewport.getIgnoreGapsConsensus());
\r
1730 viewport.setGlobalColourScheme(cs);
\r
1734 cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
\r
1737 if (viewport.getConservationSelected())
\r
1740 Alignment al = (Alignment) viewport.alignment;
\r
1741 Conservation c = new Conservation("All",
\r
1742 ResidueProperties.propHash, 3,
\r
1743 al.getSequences(), 0,
\r
1744 al.getWidth() - 1);
\r
1747 c.verdict(false, viewport.ConsPercGaps);
\r
1749 cs.setConservation(c);
\r
1751 cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, cs,
\r
1756 cs.setConservation(null);
\r
1759 cs.setConsensus(viewport.vconsensus);
\r
1762 viewport.setGlobalColourScheme(cs);
\r
1764 if (viewport.getColourAppliesToAllGroups())
\r
1766 Vector groups = viewport.alignment.getGroups();
\r
1768 for (int i = 0; i < groups.size(); i++)
\r
1770 SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
\r
1778 if (cs instanceof ClustalxColourScheme)
\r
1780 sg.cs = new ClustalxColourScheme(
\r
1781 sg.getSequences(true), sg.getWidth());
\r
1783 else if (cs instanceof UserColourScheme)
\r
1785 sg.cs = new UserColourScheme( ( (UserColourScheme) cs).getColours());
\r
1791 sg.cs = (ColourSchemeI) cs.getClass().newInstance();
\r
1793 catch (Exception ex)
\r
1798 if (viewport.getAbovePIDThreshold()
\r
1799 || cs instanceof PIDColourScheme
\r
1800 || cs instanceof Blosum62ColourScheme)
\r
1802 sg.cs.setThreshold(threshold,
\r
1803 viewport.getIgnoreGapsConsensus());
\r
1805 sg.cs.setConsensus(AAFrequency.calculate(
\r
1806 sg.getSequences(true), 0,
\r
1810 sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
\r
1813 if (viewport.getConservationSelected())
\r
1815 Conservation c = new Conservation("Group",
\r
1816 ResidueProperties.propHash, 3,
\r
1817 sg.getSequences(true), 0,
\r
1818 viewport.alignment.getWidth() - 1);
\r
1820 c.verdict(false, viewport.ConsPercGaps);
\r
1821 sg.cs.setConservation(c);
\r
1824 sg.cs.setConservation(null);
\r
1828 if (alignPanel.getOverviewPanel() != null)
\r
1830 alignPanel.getOverviewPanel().updateOverviewImage();
\r
1833 alignPanel.repaint();
\r
1839 * @param e DOCUMENT ME!
\r
1841 protected void modifyPID_actionPerformed(ActionEvent e)
\r
1843 if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme!=null)
\r
1845 SliderPanel.setPIDSliderSource(alignPanel,
\r
1846 viewport.getGlobalColourScheme(),
\r
1848 SliderPanel.showPIDSlider();
\r
1855 * @param e DOCUMENT ME!
\r
1857 protected void modifyConservation_actionPerformed(ActionEvent e)
\r
1859 if (viewport.getConservationSelected() && viewport.globalColourScheme!=null)
\r
1861 SliderPanel.setConservationSlider(alignPanel,
\r
1862 viewport.globalColourScheme,
\r
1864 SliderPanel.showConservationSlider();
\r
1871 * @param e DOCUMENT ME!
\r
1873 protected void conservationMenuItem_actionPerformed(ActionEvent e)
\r
1875 viewport.setConservationSelected(conservationMenuItem.isSelected());
\r
1877 viewport.setAbovePIDThreshold(false);
\r
1878 abovePIDThreshold.setSelected(false);
\r
1880 changeColour(viewport.getGlobalColourScheme());
\r
1882 modifyConservation_actionPerformed(null);
\r
1888 * @param e DOCUMENT ME!
\r
1890 public void abovePIDThreshold_actionPerformed(ActionEvent e)
\r
1892 viewport.setAbovePIDThreshold(abovePIDThreshold.isSelected());
\r
1894 conservationMenuItem.setSelected(false);
\r
1895 viewport.setConservationSelected(false);
\r
1897 changeColour(viewport.getGlobalColourScheme());
\r
1899 modifyPID_actionPerformed(null);
\r
1905 * @param e DOCUMENT ME!
\r
1907 public void userDefinedColour_actionPerformed(ActionEvent e)
\r
1909 if (e.getActionCommand().equals("User Defined..."))
\r
1911 new UserDefinedColours(alignPanel, null);
\r
1915 UserColourScheme udc = (UserColourScheme) UserDefinedColours.
\r
1916 getUserColourSchemes().get(e.getActionCommand());
\r
1918 changeColour(udc);
\r
1922 public void updateUserColourMenu()
\r
1925 Component[] menuItems = colourMenu.getMenuComponents();
\r
1926 int i, iSize = menuItems.length;
\r
1927 for (i = 0; i < iSize; i++)
\r
1929 if (menuItems[i].getName() != null &&
\r
1930 menuItems[i].getName().equals("USER_DEFINED"))
\r
1932 colourMenu.remove(menuItems[i]);
\r
1936 if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null)
\r
1938 java.util.Enumeration userColours = jalview.gui.UserDefinedColours.
\r
1939 getUserColourSchemes().keys();
\r
1941 while (userColours.hasMoreElements())
\r
1943 final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(userColours.
\r
1944 nextElement().toString());
\r
1945 radioItem.setName("USER_DEFINED");
\r
1946 radioItem.addMouseListener(new MouseAdapter()
\r
1948 public void mousePressed(MouseEvent evt)
\r
1950 if(evt.isControlDown() || SwingUtilities.isRightMouseButton(evt))
\r
1952 radioItem.removeActionListener(radioItem.getActionListeners()[0]);
\r
1954 int option = JOptionPane.showInternalConfirmDialog(jalview.gui.Desktop.desktop,
\r
1955 "Remove from default list?",
\r
1956 "Remove user defined colour",
\r
1957 JOptionPane.YES_NO_OPTION);
\r
1958 if(option == JOptionPane.YES_OPTION)
\r
1960 jalview.gui.UserDefinedColours.removeColourFromDefaults(radioItem.getText());
\r
1961 colourMenu.remove(radioItem);
\r
1964 radioItem.addActionListener(new ActionListener()
\r
1966 public void actionPerformed(ActionEvent evt)
\r
1968 userDefinedColour_actionPerformed(evt);
\r
1974 radioItem.addActionListener(new ActionListener()
\r
1976 public void actionPerformed(ActionEvent evt)
\r
1978 userDefinedColour_actionPerformed(evt);
\r
1982 colourMenu.insert(radioItem, 15);
\r
1983 colours.add(radioItem);
\r
1991 * @param e DOCUMENT ME!
\r
1993 public void PIDColour_actionPerformed(ActionEvent e)
\r
1995 changeColour(new PIDColourScheme());
\r
2001 * @param e DOCUMENT ME!
\r
2003 public void BLOSUM62Colour_actionPerformed(ActionEvent e)
\r
2005 changeColour(new Blosum62ColourScheme());
\r
2011 * @param e DOCUMENT ME!
\r
2013 public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)
\r
2015 addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment,
\r
2016 HistoryItem.SORT));
\r
2017 AlignmentSorter.sortByPID(viewport.getAlignment(),
\r
2018 viewport.getAlignment().getSequenceAt(0));
\r
2019 alignPanel.repaint();
\r
2025 * @param e DOCUMENT ME!
\r
2027 public void sortIDMenuItem_actionPerformed(ActionEvent e)
\r
2029 addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
\r
2030 HistoryItem.SORT));
\r
2031 AlignmentSorter.sortByID(viewport.getAlignment());
\r
2032 alignPanel.repaint();
\r
2038 * @param e DOCUMENT ME!
\r
2040 public void sortGroupMenuItem_actionPerformed(ActionEvent e)
\r
2042 addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
\r
2043 HistoryItem.SORT));
\r
2045 AlignmentSorter.sortByGroup(viewport.getAlignment());
\r
2046 alignPanel.repaint();
\r
2052 * @param e DOCUMENT ME!
\r
2054 public void removeRedundancyMenuItem_actionPerformed(ActionEvent e)
\r
2056 new RedundancyPanel(alignPanel, this);
\r
2063 * @param e DOCUMENT ME!
\r
2065 public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)
\r
2067 if ( (viewport.getSelectionGroup() == null) ||
\r
2068 (viewport.getSelectionGroup().getSize(false) < 2))
\r
2070 JOptionPane.showInternalMessageDialog(this,
\r
2071 "You must select at least 2 sequences.",
\r
2072 "Invalid Selection",
\r
2073 JOptionPane.WARNING_MESSAGE);
\r
2077 JInternalFrame frame = new JInternalFrame();
\r
2078 frame.setContentPane(new PairwiseAlignPanel(viewport));
\r
2079 Desktop.addInternalFrame(frame, "Pairwise Alignment", 600, 500);
\r
2086 * @param e DOCUMENT ME!
\r
2088 public void PCAMenuItem_actionPerformed(ActionEvent e)
\r
2090 if ( ( (viewport.getSelectionGroup() != null) &&
\r
2091 (viewport.getSelectionGroup().getSize(false) < 4) &&
\r
2092 (viewport.getSelectionGroup().getSize(false) > 0)) ||
\r
2093 (viewport.getAlignment().getHeight() < 4))
\r
2095 JOptionPane.showInternalMessageDialog(this,
\r
2096 "Principal component analysis must take\n" +
\r
2097 "at least 4 input sequences.",
\r
2098 "Sequence selection insufficient",
\r
2099 JOptionPane.WARNING_MESSAGE);
\r
2104 new PCAPanel(viewport);
\r
2108 public void autoCalculate_actionPerformed(ActionEvent e)
\r
2110 viewport.autoCalculateConsensus = autoCalculate.isSelected();
\r
2111 if(viewport.autoCalculateConsensus)
\r
2113 alignmentChanged();
\r
2121 * @param e DOCUMENT ME!
\r
2123 public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)
\r
2125 NewTreePanel("AV", "PID", "Average distance tree using PID");
\r
2131 * @param e DOCUMENT ME!
\r
2133 public void neighbourTreeMenuItem_actionPerformed(ActionEvent e)
\r
2135 NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
\r
2141 * @param e DOCUMENT ME!
\r
2143 protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)
\r
2145 NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
\r
2151 * @param e DOCUMENT ME!
\r
2153 protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)
\r
2155 NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
\r
2161 * @param type DOCUMENT ME!
\r
2162 * @param pwType DOCUMENT ME!
\r
2163 * @param title DOCUMENT ME!
\r
2165 void NewTreePanel(String type, String pwType, String title)
\r
2169 if ( (viewport.getSelectionGroup() != null) &&
\r
2170 (viewport.getSelectionGroup().getSize(false) > 3))
\r
2173 SequenceGroup sg = viewport.getSelectionGroup();
\r
2175 /* Decide if the selection is a column region */
\r
2176 while (s < sg.getSize(false))
\r
2178 if ( ( (SequenceI) sg.getSequences(false).elementAt(s++)).getLength() <
\r
2181 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2182 "The selected region to create a tree may\nonly contain residues or gaps.\n" +
\r
2183 "Try using the Pad function in the edit menu,\n" +
\r
2184 "or one of the multiple sequence alignment web services.",
\r
2185 "Sequences in selection are not aligned",
\r
2186 JOptionPane.WARNING_MESSAGE);
\r
2192 title = title + " on region";
\r
2193 tp = new TreePanel(viewport, type, pwType);
\r
2197 //are the sequences aligned?
\r
2198 if (!viewport.alignment.isAligned())
\r
2200 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2201 "The sequences must be aligned before creating a tree.\n" +
\r
2202 "Try using the Pad function in the edit menu,\n" +
\r
2203 "or one of the multiple sequence alignment web services.",
\r
2204 "Sequences not aligned",
\r
2205 JOptionPane.WARNING_MESSAGE);
\r
2210 if(viewport.alignment.getHeight()<2)
\r
2213 tp = new TreePanel(viewport, type, pwType);
\r
2216 addTreeMenuItem(tp, title);
\r
2218 Desktop.addInternalFrame(tp, title + " from " + this.title, 600, 500);
\r
2224 * @param title DOCUMENT ME!
\r
2225 * @param order DOCUMENT ME!
\r
2227 public void addSortByOrderMenuItem(String title, final AlignmentOrder order)
\r
2229 final JMenuItem item = new JMenuItem("by " + title);
\r
2231 item.addActionListener(new java.awt.event.ActionListener()
\r
2233 public void actionPerformed(ActionEvent e)
\r
2235 addHistoryItem(new HistoryItem("Sort", viewport.alignment,
\r
2236 HistoryItem.SORT));
\r
2238 // TODO: JBPNote - have to map order entries to curent SequenceI pointers
\r
2239 AlignmentSorter.sortBy(viewport.getAlignment(), order);
\r
2240 alignPanel.repaint();
\r
2246 * Maintain the Order by->Displayed Tree menu.
\r
2247 * Creates a new menu item for a TreePanel with an appropriate
\r
2248 * <code>jalview.analysis.AlignmentSorter</code> call. Listeners are added
\r
2249 * to remove the menu item when the treePanel is closed, and adjust
\r
2250 * the tree leaf to sequence mapping when the alignment is modified.
\r
2251 * @param treePanel Displayed tree window.
\r
2252 * @param title SortBy menu item title.
\r
2254 void addTreeMenuItem(final TreePanel treePanel, String title)
\r
2256 final JMenuItem item = new JMenuItem(title);
\r
2260 if (treeCount == 1)
\r
2262 sort.add(sortByTreeMenu);
\r
2265 sortByTreeMenu.add(item);
\r
2266 item.addActionListener(new java.awt.event.ActionListener()
\r
2268 public void actionPerformed(ActionEvent e)
\r
2270 addHistoryItem(new HistoryItem("Tree Sort",
\r
2271 viewport.alignment, HistoryItem.SORT));
\r
2272 AlignmentSorter.sortByTree(viewport.getAlignment(),
\r
2273 treePanel.getTree());
\r
2274 alignPanel.repaint();
\r
2278 treePanel.addInternalFrameListener(new javax.swing.event.
\r
2279 InternalFrameAdapter()
\r
2281 public void internalFrameClosed(
\r
2282 javax.swing.event.InternalFrameEvent evt)
\r
2285 sortByTreeMenu.remove(item);
\r
2287 if (treeCount == 0)
\r
2289 sort.remove(sortByTreeMenu);
\r
2297 * Work out whether the whole set of sequences
\r
2298 * or just the selected set will be submitted for multiple alignment.
\r
2301 private jalview.datamodel.AlignmentView gatherSequencesForAlignment()
\r
2303 // Now, check we have enough sequences
\r
2304 AlignmentView msa = null;
\r
2306 if ( (viewport.getSelectionGroup() != null) &&
\r
2307 (viewport.getSelectionGroup().getSize(false) > 1))
\r
2309 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
\r
2310 /*SequenceGroup seqs = viewport.getSelectionGroup();
\r
2312 msa = new SequenceI[sz = seqs.getSize(false)];
\r
2314 for (int i = 0; i < sz; i++)
\r
2316 msa[i] = (SequenceI) seqs.getSequenceAt(i);
\r
2318 msa = viewport.getAlignmentView(true);
\r
2322 /*Vector seqs = viewport.getAlignment().getSequences();
\r
2324 if (seqs.size() > 1)
\r
2326 msa = new SequenceI[seqs.size()];
\r
2328 for (int i = 0; i < seqs.size(); i++)
\r
2330 msa[i] = (SequenceI) seqs.elementAt(i);
\r
2333 msa = viewport.getAlignmentView(false);
\r
2339 * Decides what is submitted to a secondary structure prediction service,
\r
2340 * the currently selected sequence, or the currently selected alignment
\r
2341 * (where the first sequence in the set is the one that the prediction
\r
2344 SequenceI[] gatherSeqOrMsaForSecStrPrediction()
\r
2346 SequenceI seq = null;
\r
2347 SequenceI[] msa = null;
\r
2349 if ( (viewport.getSelectionGroup() != null) &&
\r
2350 (viewport.getSelectionGroup().getSize(false) > 0))
\r
2352 // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!
\r
2353 SequenceGroup seqs = viewport.getSelectionGroup();
\r
2355 if ( (seqs.getSize(false) == 1) || !viewport.alignment.isAligned())
\r
2357 seq = (SequenceI) seqs.getSequenceAt(0);
\r
2362 msa = new SequenceI[sz = seqs.getSize(false)];
\r
2364 for (int i = 0; i < sz; i++)
\r
2366 msa[i] = (SequenceI) seqs.getSequenceAt(i);
\r
2372 Vector seqs = viewport.getAlignment().getSequences();
\r
2374 if ( (seqs.size() == 1) || !viewport.alignment.isAligned())
\r
2376 seq = (SequenceI) seqs.elementAt(0);
\r
2380 msa = new SequenceI[seqs.size()];
\r
2382 for (int i = 0; i < seqs.size(); i++)
\r
2384 msa[i] = (SequenceI) seqs.elementAt(i);
\r
2396 return new SequenceI[]
\r
2406 * @param e DOCUMENT ME!
\r
2408 protected void LoadtreeMenuItem_actionPerformed(ActionEvent e)
\r
2410 // Pick the tree file
\r
2411 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
2413 "LAST_DIRECTORY"));
\r
2414 chooser.setFileView(new JalviewFileView());
\r
2415 chooser.setDialogTitle("Select a newick-like tree file");
\r
2416 chooser.setToolTipText("Load a tree file");
\r
2418 int value = chooser.showOpenDialog(null);
\r
2420 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
2422 String choice = chooser.getSelectedFile().getPath();
\r
2423 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
\r
2427 jalview.io.NewickFile fin = new jalview.io.NewickFile(choice,
\r
2429 viewport.setCurrentTree(ShowNewickTree(fin, choice).getTree());
\r
2431 catch (Exception ex)
\r
2433 JOptionPane.showMessageDialog(Desktop.desktop,
\r
2434 "Problem reading tree file",
\r
2436 JOptionPane.WARNING_MESSAGE);
\r
2437 ex.printStackTrace();
\r
2443 public TreePanel ShowNewickTree(NewickFile nf, String title)
\r
2445 return ShowNewickTree(nf,title,600,500,4,5);
\r
2450 * @param nf DOCUMENT ME!
\r
2451 * @param title DOCUMENT ME!
\r
2453 * @return DOCUMENT ME!
\r
2455 public TreePanel ShowNewickTree(NewickFile nf, String title, int w,int h,int x, int y)
\r
2457 TreePanel tp = null;
\r
2463 if (nf.getTree() != null)
\r
2465 tp = new TreePanel(viewport,
\r
2473 tp.setLocation(x,y);
\r
2476 Desktop.addInternalFrame(tp, title, w, h);
\r
2477 addTreeMenuItem(tp, title);
\r
2480 catch (Exception ex)
\r
2482 ex.printStackTrace();
\r
2493 PrinterJob printJob = PrinterJob.getPrinterJob();
\r
2494 PageFormat pf = printJob.pageDialog(printJob.defaultPage());
\r
2495 printJob.setPrintable(alignPanel, pf);
\r
2497 if (printJob.printDialog())
\r
2503 catch (Exception PrintException)
\r
2505 PrintException.printStackTrace();
\r
2512 * Generates menu items and listener event actions for web service clients
\r
2515 public void BuildWebServiceMenu()
\r
2517 if ( (Discoverer.services != null)
\r
2518 && (Discoverer.services.size() > 0))
\r
2520 Vector msaws = (Vector) Discoverer.services.get("MsaWS");
\r
2521 Vector secstrpr = (Vector) Discoverer.services.get("SecStrPred");
\r
2522 Vector wsmenu = new Vector();
\r
2523 if (msaws != null)
\r
2525 // Add any Multiple Sequence Alignment Services
\r
2526 final JMenu msawsmenu = new JMenu("Alignment");
\r
2527 final AlignFrame af = this;
\r
2528 for (int i = 0, j = msaws.size(); i < j; i++)
\r
2530 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws.
\r
2532 final JMenuItem method = new JMenuItem(sh.getName());
\r
2533 method.addActionListener(new ActionListener()
\r
2535 public void actionPerformed(ActionEvent e)
\r
2537 AlignmentView msa = gatherSequencesForAlignment();
\r
2538 new jalview.ws.MsaWSClient(sh, title, msa,
\r
2539 false, true, viewport.getAlignment().getDataset(), af);
\r
2544 msawsmenu.add(method);
\r
2545 // Deal with services that we know accept partial alignments.
\r
2546 if (sh.getName().indexOf("lustal") > -1)
\r
2548 // We know that ClustalWS can accept partial alignments for refinement.
\r
2549 final JMenuItem methodR = new JMenuItem(sh.getName()+" Realign");
\r
2550 methodR.addActionListener(new ActionListener()
\r
2552 public void actionPerformed(ActionEvent e)
\r
2554 AlignmentView msa = gatherSequencesForAlignment();
\r
2555 new jalview.ws.MsaWSClient(sh, title, msa,
\r
2556 true, true, viewport.getAlignment().getDataset(), af);
\r
2561 msawsmenu.add(methodR);
\r
2565 wsmenu.add(msawsmenu);
\r
2567 if (secstrpr != null)
\r
2569 // Add any secondary structure prediction services
\r
2570 final JMenu secstrmenu = new JMenu("Secondary Structure Prediction");
\r
2571 for (int i = 0, j = secstrpr.size(); i < j; i++)
\r
2573 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle)
\r
2575 final JMenuItem method = new JMenuItem(sh.getName());
\r
2576 method.addActionListener(new ActionListener()
\r
2578 public void actionPerformed(ActionEvent e)
\r
2580 SequenceI[] msa = gatherSeqOrMsaForSecStrPrediction();
\r
2581 if (msa.length == 1)
\r
2583 // Single Sequence prediction
\r
2584 new jalview.ws.JPredClient(sh,title, msa[0]);
\r
2588 if (msa.length > 1)
\r
2590 // Single Sequence prediction
\r
2591 jalview.ws.JPredClient ct = new jalview.ws.JPredClient(sh,
\r
2597 secstrmenu.add(method);
\r
2599 wsmenu.add(secstrmenu);
\r
2601 this.webService.removeAll();
\r
2602 for (int i = 0, j = wsmenu.size(); i < j; i++)
\r
2604 webService.add( (JMenu) wsmenu.get(i));
\r
2609 this.webService.removeAll();
\r
2610 this.webService.add(this.webServiceNoServices);
\r
2612 // TODO: add in rediscovery function
\r
2613 // TODO: reduce code redundancy.
\r
2614 // TODO: group services by location as well as function.
\r
2617 /* public void vamsasStore_actionPerformed(ActionEvent e)
\r
2619 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
\r
2620 getProperty("LAST_DIRECTORY"));
\r
2622 chooser.setFileView(new JalviewFileView());
\r
2623 chooser.setDialogTitle("Export to Vamsas file");
\r
2624 chooser.setToolTipText("Export");
\r
2626 int value = chooser.showSaveDialog(this);
\r
2628 if (value == JalviewFileChooser.APPROVE_OPTION)
\r
2630 jalview.io.VamsasDatastore vs = new jalview.io.VamsasDatastore(viewport);
\r
2631 //vs.store(chooser.getSelectedFile().getAbsolutePath() );
\r
2632 vs.storeJalview( chooser.getSelectedFile().getAbsolutePath(), this);
\r
2639 public void showTranslation_actionPerformed(ActionEvent e)
\r
2641 SequenceI [] selection = viewport.getSelectionAsNewSequence();
\r
2642 String [] seqstring = viewport.getViewAsString(true);
\r
2644 int s, sSize = selection.length;
\r
2645 SequenceI [] newSeq = new SequenceI[sSize];
\r
2648 StringBuffer protein;
\r
2650 for(s=0; s<sSize; s++)
\r
2652 protein = new StringBuffer();
\r
2653 seq = AlignSeq.extractGaps("-. ", seqstring[s]);
\r
2654 resSize = seq.length();
\r
2655 resSize -= resSize%3;
\r
2657 for(res = 0; res < resSize; res+=3)
\r
2659 String codon = seq.substring(res, res+3);
\r
2660 codon = codon.replace('U', 'T');
\r
2661 String aa = ResidueProperties.codonTranslate(codon);
\r
2663 protein.append(viewport.getGapCharacter());
\r
2664 else if(aa.equals("STOP"))
\r
2665 protein.append("X");
\r
2667 protein.append( aa );
\r
2669 newSeq[s] = new Sequence(selection[s].getName(),
\r
2670 protein.toString());
\r
2674 AlignmentI al = new Alignment(newSeq);
\r
2675 al.setDataset(null);
\r
2678 ////////////////////////////////
\r
2679 // Copy annotations across
\r
2680 jalview.datamodel.AlignmentAnnotation[] annotations
\r
2681 = viewport.alignment.getAlignmentAnnotation();
\r
2683 if(annotations!=null)
\r
2685 for (int i = 0; i < annotations.length; i++)
\r
2687 if (annotations[i].label.equals("Quality") ||
\r
2688 annotations[i].label.equals("Conservation") ||
\r
2689 annotations[i].label.equals("Consensus"))
\r
2694 aSize = viewport.alignment.getWidth() / 3;
\r
2695 jalview.datamodel.Annotation[] anots =
\r
2696 new jalview.datamodel.Annotation[aSize];
\r
2698 for (a = 0; a < viewport.alignment.getWidth(); a++)
\r
2700 if (annotations[i].annotations[a] == null
\r
2701 || annotations[i].annotations[a] == null)
\r
2704 anots[a / 3] = new Annotation(
\r
2705 annotations[i].annotations[a].displayCharacter,
\r
2706 annotations[i].annotations[a].description,
\r
2707 annotations[i].annotations[a].secondaryStructure,
\r
2708 annotations[i].annotations[a].value,
\r
2709 annotations[i].annotations[a].colour);
\r
2712 jalview.datamodel.AlignmentAnnotation aa
\r
2713 = new jalview.datamodel.AlignmentAnnotation(annotations[i].label,
\r
2714 annotations[i].description, anots);
\r
2715 al.addAnnotation(aa);
\r
2719 AlignFrame af = new AlignFrame(al);
\r
2720 Desktop.addInternalFrame(af, "Translation of "+this.getTitle(),
\r
2722 NEW_WINDOW_HEIGHT);
\r
2725 // AlignViewport newViewport = new AlignViewport(al);
\r
2726 // AlignmentPanel ap = new AlignmentPanel(this, newViewport);
\r
2727 // tabbedPane.add("Protein", ap);
\r
2728 // viewports.add(newViewport);
\r
2729 // alignPanels.add(ap);
\r
2732 /////////////////////////
\r
2734 // AlignViewport ds = new AlignViewport(al.getDataset());
\r
2735 // ds.setDataset(true);
\r
2736 // AlignmentPanel dap = new AlignmentPanel(this, ds);
\r
2737 // tabbedPane.add("Dataset", dap);
\r
2738 // viewports.add(ds);
\r
2739 // alignPanels.add(dap);
\r
2740 /////////////////////////
\r
2745 /*public void tabSelected()
\r
2747 int index = tabbedPane.getSelectedIndex();
\r
2748 viewport = (AlignViewport)viewports.elementAt(index);
\r
2749 alignPanel = (AlignmentPanel)alignPanels.elementAt(index);
\r
2755 * @param String DOCUMENT ME!
\r
2757 public boolean parseFeaturesFile(String file, String type)
\r
2759 boolean featuresFile = false;
\r
2761 featuresFile = new FeaturesFile(file, type).parse(viewport.alignment.getDataset(),
\r
2762 alignPanel.seqPanel.seqCanvas.
\r
2763 getFeatureRenderer().featureColours,
\r
2766 catch(Exception ex)
\r
2768 ex.printStackTrace();
\r
2773 viewport.showSequenceFeatures = true;
\r
2774 showSeqFeatures.setSelected(true);
\r
2775 alignPanel.repaint();
\r
2778 return featuresFile;
\r
2781 public void dragEnter(DropTargetDragEvent evt)
\r
2784 public void dragExit(DropTargetEvent evt)
\r
2787 public void dragOver(DropTargetDragEvent evt)
\r
2790 public void dropActionChanged(DropTargetDragEvent evt)
\r
2793 public void drop(DropTargetDropEvent evt)
\r
2795 Transferable t = evt.getTransferable();
\r
2796 java.util.List files = null;
\r
2800 DataFlavor uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String");
\r
2801 if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
\r
2803 //Works on Windows and MacOSX
\r
2804 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
2805 files = (java.util.List) t.getTransferData(DataFlavor.javaFileListFlavor);
\r
2807 else if (t.isDataFlavorSupported(uriListFlavor))
\r
2809 // This is used by Unix drag system
\r
2810 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
\r
2811 String data = (String) t.getTransferData(uriListFlavor);
\r
2812 files = new java.util.ArrayList(1);
\r
2813 for (java.util.StringTokenizer st = new java.util.StringTokenizer(
\r
2816 st.hasMoreTokens(); )
\r
2818 String s = st.nextToken();
\r
2819 if (s.startsWith("#"))
\r
2821 // the line is a comment (as per the RFC 2483)
\r
2825 java.net.URI uri = new java.net.URI(s);
\r
2826 java.io.File file = new java.io.File(uri);
\r
2831 catch (Exception e)
\r
2833 e.printStackTrace();
\r
2835 if (files != null)
\r
2840 for (int i = 0; i < files.size(); i++)
\r
2842 loadJalviewDataFile(files.get(i).toString());
\r
2845 catch (Exception ex)
\r
2847 ex.printStackTrace();
\r
2852 // This method will attempt to load a "dropped" file first by testing
\r
2853 // whether its and Annotation file, then features file. If both are
\r
2854 // false then the user may have dropped an alignment file onto this
\r
2856 public void loadJalviewDataFile(String file)
\r
2859 boolean isAnnotation = new AnnotationFile().readAnnotationFile(viewport.
\r
2862 if (!isAnnotation)
\r
2864 boolean isGroupsFile = parseFeaturesFile(file,
\r
2865 AppletFormatAdapter.FILE);
\r
2866 if (!isGroupsFile)
\r
2868 String format = new IdentifyFile().Identify(file, FormatAdapter.FILE);
\r
2869 new FileLoader().LoadFile(viewport, file, FormatAdapter.FILE, format);
\r
2875 alignPanel.adjustAnnotationHeight();
\r
2878 }catch(Exception ex)
\r
2880 ex.printStackTrace();
\r