X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=87cd9a967b27b41045cc3cc0be5e3440cdeb742c;hb=6fc9aca27f606f6e3a0121597896e1a5dae35c36;hp=8c31ed0df7734b0f317e24409177a1455f4dc221;hpb=9c5d69ef1e102b1eac18ec13c362522f40c9000d;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 8c31ed0..87cd9a9 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -34,7 +34,8 @@ import jalview.io.*; import jalview.jbgui.*; import jalview.schemes.*; import jalview.ws.*; -import javax.swing.event.AncestorEvent; +import java.awt.dnd.*; + /** * DOCUMENT ME! @@ -43,7 +44,7 @@ import javax.swing.event.AncestorEvent; * @version $Revision$ */ public class AlignFrame - extends GAlignFrame implements ClipboardOwner + extends GAlignFrame implements ClipboardOwner, DropTargetListener { /** DOCUMENT ME!! */ public static final int NEW_WINDOW_WIDTH = 700; @@ -73,6 +74,7 @@ public class AlignFrame viewport = new AlignViewport(al); viewports.add(viewport); + this.setDropTarget(new java.awt.dnd.DropTarget(this, this)); if(viewport.vconsensus==null) { @@ -172,18 +174,13 @@ public class AlignFrame public void setGUINucleotide(boolean nucleotide) { showTranslation.setVisible( nucleotide ); - sequenceFeatures.setVisible(!nucleotide ); - featureSettings.setVisible( !nucleotide ); + //sequenceFeatures.setVisible(!nucleotide ); + //featureSettings.setVisible( !nucleotide ); conservationMenuItem.setVisible( !nucleotide ); modifyConservation.setVisible( !nucleotide ); - //Deal with separators //Remember AlignFrame always starts as protein - if(nucleotide) - { - viewMenu.remove(viewMenu.getItemCount()-2); - } - else + if(!nucleotide) { calculateMenu.remove(calculateMenu.getItemCount()-2); } @@ -198,100 +195,16 @@ public class AlignFrame return jalview.bin.Cache.getProperty("VERSION"); } - - /** - * DOCUMENT ME! - * - * @param String DOCUMENT ME! - */ - - public void parseGroupsFile(String file) + public FeatureRenderer getFeatureRenderer() { - try - { - BufferedReader in = new BufferedReader(new FileReader(file)); - SequenceI seq = null; - String line, type, desc, token; - - int index, start, end; - StringTokenizer st; - SequenceFeature sf; - FeatureRenderer fr = alignPanel.seqPanel.seqCanvas.getFeatureRenderer(); - int lineNo = 0; - while ( (line = in.readLine()) != null) - { - lineNo++; - st = new StringTokenizer(line, "\t"); - if (st.countTokens() == 2) - { - type = st.nextToken(); - UserColourScheme ucs = new UserColourScheme(st.nextToken()); - fr.setColour(type, ucs.findColour("A")); - continue; - } - - while (st.hasMoreElements()) - { - desc = st.nextToken(); - token = st.nextToken(); - if (!token.equals("ID_NOT_SPECIFIED")) - { - index = viewport.alignment.findIndex(viewport.alignment.findName( - token)); - st.nextToken(); - } - else - { - index = Integer.parseInt(st.nextToken()); - } - - start = Integer.parseInt(st.nextToken()); - end = Integer.parseInt(st.nextToken()); - - seq = viewport.alignment.getSequenceAt(index); - start = seq.findIndex(start) - 1; - end = seq.findIndex(end) - 1; - - type = st.nextToken(); - - if (fr.getColour(type) == null) - { - // Probably the old style groups file - UserColourScheme ucs = new UserColourScheme(type); - fr.setColour(type, ucs.findColour("A")); - } - - - sf = new SequenceFeature(type, desc, "", start, end); - - seq.addSequenceFeature(sf); - - - // sg = new SequenceGroup(text, ucs, true, true, false, start, end); - // sg.addSequence(seq, false); - - // viewport.alignment.addGroup(sg); - - } - } - - viewport.showSequenceFeatures = true; - - alignPanel.repaint(); - - } - catch (Exception ex) - { - System.out.println("Error parsing groups file: " + ex); - } + return alignPanel.seqPanel.seqCanvas.getFeatureRenderer(); } + public void fetchSequence_actionPerformed(ActionEvent e) { new SequenceFetcher(this); } - - /** * DOCUMENT ME! * @@ -355,7 +268,7 @@ public class AlignFrame java.io.File.separatorChar) + 1); } - Jalview2XML.SaveAlignment(this, file, shortName); + new Jalview2XML().SaveAlignment(this, file, shortName); // USE Jalview2XML to save this file return true; @@ -452,6 +365,27 @@ public class AlignFrame thread.start(); } + public void associatedData_actionPerformed(ActionEvent e) + { + // Pick the tree file + JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. + getProperty( + "LAST_DIRECTORY")); + chooser.setFileView(new JalviewFileView()); + chooser.setDialogTitle("Load Jalview Annotations or Features File"); + chooser.setToolTipText("Load Jalview Annotations / Features file"); + + int value = chooser.showOpenDialog(null); + + if (value == JalviewFileChooser.APPROVE_OPTION) + { + String choice = chooser.getSelectedFile().getPath(); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice); + loadJalviewDataFile(choice); + } + + } + /** * DOCUMENT ME! * @@ -542,42 +476,8 @@ public class AlignFrame // used by undo and redo void restoreHistoryItem(HistoryItem hi) { - if (hi.getType() == HistoryItem.SORT) - { - for (int i = 0; i < hi.getSequences().size(); i++) - { - viewport.alignment.getSequences().setElementAt(hi.getSequences() - .elementAt(i), - i); - } - } - else - { - for (int i = 0; i < hi.getSequences().size(); i++) - { - SequenceI restore = (SequenceI) hi.getSequences().elementAt(i); - if (restore.getLength() == 0) - { - restore.setSequence(hi.getHidden().elementAt(i).toString()); - viewport.alignment.getSequences().insertElementAt(restore, - hi.getAlignIndex(i)); - } - else - { - restore.setSequence(hi.getHidden().elementAt(i).toString()); - } - } - - if (hi.getType() == HistoryItem.PASTE) - { - for (int i = viewport.alignment.getHeight() - 1; - i > (hi.getSequences().size() - 1); i--) - { - viewport.alignment.deleteSequence(i); - } - } - } + hi.restore(); updateEditMenuBar(); @@ -783,7 +683,7 @@ public class AlignFrame if(str.length()<1) return; - String format = IdentifyFile.Identify(str, "Paste"); + String format = new IdentifyFile().Identify(str, "Paste"); SequenceI[] sequences; if(Desktop.jalviewClipboard!=null) @@ -811,6 +711,11 @@ public class AlignFrame AlignFrame af = new AlignFrame(alignment); String newtitle = new String("Copied sequences"); + //>>>This is a fix for the moment, until a better solution is found!!<<< + af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().transferSettings( + alignPanel.seqPanel.seqCanvas.getFeatureRenderer()); + + if (title.startsWith("Copied sequences")) { newtitle = title; @@ -844,7 +749,17 @@ public class AlignFrame newseq.setDatasetSequence(ds); viewport.alignment.getDataset().addSequence(ds); } - + else + { + newseq.setDatasetSequence(sequences[i].getDatasetSequence()); + if(sequences[i].getDatasetSequence().getAnnotation()!=null) + { + for(int aa=0; aa 3)) @@ -2078,7 +2053,6 @@ public class AlignFrame } addTreeMenuItem(tp, title); - viewport.setCurrentTree(tp.getTree()); Desktop.addInternalFrame(tp, title + " from " + this.title, 600, 500); } @@ -2387,6 +2361,7 @@ public class AlignFrame { // Add any Multiple Sequence Alignment Services final JMenu msawsmenu = new JMenu("Alignment"); + final AlignFrame af = this; for (int i = 0, j = msaws.size(); i < j; i++) { final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws. @@ -2398,7 +2373,7 @@ public class AlignFrame { SequenceI[] msa = gatherSequencesForAlignment(); new jalview.ws.MsaWSClient(sh, title, msa, - false, true, viewport.getAlignment().getDataset()); + false, true, viewport.getAlignment().getDataset(), af); } @@ -2415,7 +2390,7 @@ public class AlignFrame { SequenceI[] msa = gatherSequencesForAlignment(); new jalview.ws.MsaWSClient(sh, title, msa, - true, true, viewport.getAlignment().getDataset()); + true, true, viewport.getAlignment().getDataset(), af); } @@ -2495,10 +2470,7 @@ public class AlignFrame } }*/ - public void featureSettings_actionPerformed(ActionEvent e) - { - new FeatureSettings(viewport, alignPanel); - } + @@ -2515,6 +2487,8 @@ public void showTranslation_actionPerformed(ActionEvent e) protein = new StringBuffer(); seq = AlignSeq.extractGaps("-. ", viewport.alignment.getSequenceAt(s).getSequence()); resSize = seq.length(); + resSize -= resSize%3; + for(res = 0; res < resSize; res+=3) { String codon = seq.substring(res, res+3); @@ -2608,4 +2582,217 @@ public void showTranslation_actionPerformed(ActionEvent e) viewport = (AlignViewport)viewports.elementAt(index); alignPanel = (AlignmentPanel)alignPanels.elementAt(index); }*/ + +/** + * DOCUMENT ME! + * + * @param String DOCUMENT ME! + */ +public boolean parseGroupsFile(String file) +{ + String line = null; + try + { + BufferedReader in = new BufferedReader(new FileReader(file)); + SequenceI seq = null; + String type, desc, token; + + int index, start, end; + StringTokenizer st; + SequenceFeature sf; + int lineNo = 0; + String featureGroup = null; + while ( (line = in.readLine()) != null) + { + lineNo++; + st = new StringTokenizer(line, "\t"); + if (st.countTokens() == 2) + { + type = st.nextToken(); + if (type.equalsIgnoreCase("startgroup")) + { + featureGroup = st.nextToken(); + } + else if (type.equalsIgnoreCase("endgroup")) + { + //We should check whether this is the current group, + //but at present theres no way of showing more than 1 group + st.nextToken(); + featureGroup = null; + } + else + { + UserColourScheme ucs = new UserColourScheme(st.nextToken()); + alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setColour(type, + ucs.findColour("A")); + } + continue; + } + + while (st.hasMoreElements()) + { + desc = st.nextToken(); + token = st.nextToken(); + if (!token.equals("ID_NOT_SPECIFIED")) + { + index = viewport.alignment.findIndex(viewport.alignment.findName(token)); + st.nextToken(); + } + else + { + index = Integer.parseInt(st.nextToken()); + } + + start = Integer.parseInt(st.nextToken()); + end = Integer.parseInt(st.nextToken()); + + seq = viewport.alignment.getSequenceAt(index); + + type = st.nextToken(); + + if (alignPanel.seqPanel.seqCanvas.getFeatureRenderer().getColour(type) == null) + { + // Probably the old style groups file + UserColourScheme ucs = new UserColourScheme(type); + alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setColour(type, ucs.findColour("A")); + } + + sf = new SequenceFeature(type, desc, "", start, end, featureGroup); + + seq.getDatasetSequence().addSequenceFeature(sf); + } + } + } + catch (Exception ex) + { + System.out.println(line); + ex.printStackTrace(); + System.out.println("Error parsing groups file: " + ex +"\n"+line); + return false; + } + + viewport.showSequenceFeatures = true; + showSeqFeatures.setSelected(true); + alignPanel.repaint(); + return true; +} + +public void dragEnter(DropTargetDragEvent evt) +{} + +public void dragExit(DropTargetEvent evt) +{} + +public void dragOver(DropTargetDragEvent evt) +{} + +public void dropActionChanged(DropTargetDragEvent evt) +{} + +public void drop(DropTargetDropEvent evt) +{ + Transferable t = evt.getTransferable(); + java.util.List files = null; + + try + { + DataFlavor uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String"); + if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) + { + //Works on Windows and MacOSX + evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); + files = (java.util.List) t.getTransferData(DataFlavor.javaFileListFlavor); + } + else if (t.isDataFlavorSupported(uriListFlavor)) + { + // This is used by Unix drag system + evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); + String data = (String) t.getTransferData(uriListFlavor); + files = new java.util.ArrayList(1); + for (java.util.StringTokenizer st = new java.util.StringTokenizer( + data, + "\r\n"); + st.hasMoreTokens(); ) + { + String s = st.nextToken(); + if (s.startsWith("#")) + { + // the line is a comment (as per the RFC 2483) + continue; + } + + java.net.URI uri = new java.net.URI(s); + java.io.File file = new java.io.File(uri); + files.add(file); + } + } + } + catch (Exception e) + { + e.printStackTrace(); + } + if (files != null) + { + try + { + + for (int i = 0; i < files.size(); i++) + { + loadJalviewDataFile(files.get(i).toString()); + } + } + catch (Exception ex) + { + ex.printStackTrace(); + } + } +} + + // This method will attempt to load a "dropped" file first by testing + // whether its and Annotation file, then features file. If both are + // false then the user may have dropped an alignment file onto this + // AlignFrame + public void loadJalviewDataFile(String file) + { + try{ + boolean isAnnotation = new AnnotationReader().readAnnotationFile(viewport. + alignment, file); + + if (!isAnnotation) + { + boolean isGroupsFile = parseGroupsFile(file); + if (!isGroupsFile) + { + String protocol = "File"; + String format = new IdentifyFile().Identify(file, protocol); + SequenceI[] sequences = new FormatAdapter().readFile(file, protocol, + format); + + FastaFile ff = new FastaFile(); + Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); + c.setContents(new StringSelection(ff.print(sequences)), this); + + this.paste(false); + } + } + + if (isAnnotation) + { + int height = alignPanel.annotationPanel.adjustPanelHeight(); + alignPanel.annotationScroller.setPreferredSize( + new Dimension(alignPanel.annotationScroller.getWidth(), + height)); + + alignPanel.annotationSpaceFillerHolder.setPreferredSize(new Dimension( + alignPanel.annotationSpaceFillerHolder.getWidth(), + height)); + + alignPanel.addNotify(); + } + + }catch(Exception ex) + { + ex.printStackTrace(); + } + } }