X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignFrame.java;h=fce50fe01b7eed25210665beabad05992e760521;hb=153dd62dc91da13ae732600e6ea55ddbe15eab39;hp=0aefe9b01b51d544ce42103ceb58fea4f0c904a2;hpb=6b544d4a85673db44b7f75f40c22d9b7425d444e;p=jalview.git diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 0aefe9b..fce50fe 100755 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -1,5 +1,5 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle * * This file is part of Jalview. @@ -21,10 +21,14 @@ import java.io.*; import java.net.*; import java.util.*; +import java.applet.Applet; import java.awt.*; import java.awt.event.*; +import org.jmol.api.JmolViewer; + import jalview.analysis.*; +import jalview.api.SequenceStructureBinding; import jalview.bin.JalviewLite; import jalview.commands.*; import jalview.datamodel.*; @@ -162,10 +166,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, boolean featuresFile = false; try { - featuresFile = new jalview.io.FeaturesFile(file, type).parse( - viewport.alignment, alignPanel.seqPanel.seqCanvas - .getFeatureRenderer().featureColours, featureLinks, - true); + featuresFile = new jalview.io.FeaturesFile(file, type) + .parse(viewport.alignment, + alignPanel.seqPanel.seqCanvas.getFeatureRenderer().featureColours, + featureLinks, true); } catch (Exception ex) { ex.printStackTrace(); @@ -842,8 +846,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, else if (source == clustalColour) { abovePIDThreshold.setState(false); - changeColour(new ClustalxColourScheme(viewport.alignment - .getSequences(), viewport.alignment.getWidth())); + changeColour(new ClustalxColourScheme( + viewport.alignment.getSequences(), + viewport.alignment.getWidth())); } else if (source == zappoColour) { @@ -969,10 +974,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this); Frame frame = new Frame(); frame.add(cap); - jalview.bin.JalviewLite.addFrame(frame, "Alignment output - " - + e.getActionCommand(), 600, 500); - cap.setText(new AppletFormatAdapter().formatSequences(e - .getActionCommand(), viewport.getAlignment(), + jalview.bin.JalviewLite.addFrame(frame, + "Alignment output - " + e.getActionCommand(), 600, 500); + cap.setText(new AppletFormatAdapter().formatSequences( + e.getActionCommand(), viewport.getAlignment(), viewport.showJVSuffix)); } @@ -1029,13 +1034,15 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, String features; if (format.equalsIgnoreCase("Jalview")) { - features = new FeaturesFile().printJalviewFormat(viewport.alignment - .getSequencesArray(), getDisplayedFeatureCols()); + features = new FeaturesFile().printJalviewFormat( + viewport.alignment.getSequencesArray(), + getDisplayedFeatureCols()); } else { - features = new FeaturesFile().printGFFFormat(viewport.alignment - .getSequencesArray(), getDisplayedFeatureCols()); + features = new FeaturesFile().printGFFFormat( + viewport.alignment.getSequencesArray(), + getDisplayedFeatureCols()); } if (displayTextbox) @@ -1067,9 +1074,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (viewport.applet.getParameter("annotations") != null) { url.append("&annotations="); - url - .append(appendProtocol(viewport.applet - .getParameter("annotations"))); + url.append(appendProtocol(viewport.applet.getParameter("annotations"))); } if (viewport.applet.getParameter("jnetfile") != null) @@ -1608,8 +1613,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewport.setEndSeq(viewport.alignment.getHeight()); viewport.alignment.getWidth(); - viewport.firePropertyChange("alignment", null, viewport.alignment - .getSequences()); + viewport.firePropertyChange("alignment", null, + viewport.alignment.getSequences()); } @@ -1673,8 +1678,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (viewport.getSelectionGroup() != null) { SequenceGroup[] gps = jalview.analysis.Grouping.makeGroupsFrom( - viewport.getSequenceSelection(), viewport.getAlignmentView( - true).getSequenceStrings(viewport.getGapCharacter()), + viewport.getSequenceSelection(), + viewport.getAlignmentView(true).getSequenceStrings( + viewport.getGapCharacter()), viewport.alignment.getGroups()); viewport.alignment.deleteAllGroups(); viewport.sequenceColours = null; @@ -1685,8 +1691,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // gps[g].setShowunconserved(viewport.getShowUnconserved()); gps[g].setshowSequenceLogo(viewport.isShowSequenceLogo()); viewport.alignment.addGroup(gps[g]); - Color col = new Color((int) (Math.random() * 255), (int) (Math - .random() * 255), (int) (Math.random() * 255)); + Color col = new Color((int) (Math.random() * 255), + (int) (Math.random() * 255), (int) (Math.random() * 255)); col = col.brighter(); for (Enumeration sq = gps[g].getSequences(null).elements(); sq .hasMoreElements(); viewport.setSequenceColour( @@ -1923,9 +1929,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { if (!viewport.alignment.getAlignmentAnnotation()[i].autoCalculated) { - newal - .addAnnotation(viewport.alignment - .getAlignmentAnnotation()[i]); + newal.addAnnotation(viewport.alignment.getAlignmentAnnotation()[i]); } } } @@ -1934,8 +1938,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, newaf.viewport.sequenceSetID = alignPanel.av.getSequenceSetId(); PaintRefresher.Register(alignPanel, alignPanel.av.getSequenceSetId()); - PaintRefresher.Register(newaf.alignPanel, newaf.alignPanel.av - .getSequenceSetId()); + PaintRefresher.Register(newaf.alignPanel, + newaf.alignPanel.av.getSequenceSetId()); PaintRefresher.Register(newaf.alignPanel.idPanel.idCanvas, newaf.alignPanel.av.getSequenceSetId()); @@ -2114,8 +2118,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, Alignment al = (Alignment) viewport.alignment; Conservation c = new Conservation("All", - ResidueProperties.propHash, 3, al.getSequences(), 0, al - .getWidth() - 1); + ResidueProperties.propHash, 3, al.getSequences(), 0, + al.getWidth() - 1); c.calculate(); c.verdict(false, viewport.ConsPercGaps); @@ -2150,8 +2154,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } if (cs instanceof ClustalxColourScheme) { - sg.cs = new ClustalxColourScheme(sg - .getSequences(viewport.hiddenRepSequences), sg.getWidth()); + sg.cs = new ClustalxColourScheme( + sg.getSequences(viewport.hiddenRepSequences), + sg.getWidth()); } else { @@ -2170,9 +2175,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, || cs instanceof Blosum62ColourScheme) { sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus()); - sg.cs.setConsensus(AAFrequency.calculate(sg - .getSequences(viewport.hiddenRepSequences), 0, sg - .getWidth())); + sg.cs.setConsensus(AAFrequency.calculate( + sg.getSequences(viewport.hiddenRepSequences), 0, + sg.getWidth())); } else { @@ -2182,8 +2187,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (viewport.getConservationSelected()) { Conservation c = new Conservation("Group", - ResidueProperties.propHash, 3, sg - .getSequences(viewport.hiddenRepSequences), 0, + ResidueProperties.propHash, 3, + sg.getSequences(viewport.hiddenRepSequences), 0, viewport.alignment.getWidth() - 1); c.calculate(); c.verdict(false, viewport.ConsPercGaps); @@ -2215,8 +2220,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme != null) { - SliderPanel.setPIDSliderSource(alignPanel, viewport - .getGlobalColourScheme(), "Background"); + SliderPanel.setPIDSliderSource(alignPanel, + viewport.getGlobalColourScheme(), "Background"); SliderPanel.showPIDSlider(); } } @@ -2279,7 +2284,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByLength(viewport.getAlignment()); - addHistoryItem(new OrderCommand("Length Sort", oldOrder, viewport.alignment)); + addHistoryItem(new OrderCommand("Length Sort", oldOrder, + viewport.alignment)); alignPanel.paintAlignment(true); } @@ -2512,28 +2518,23 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, g.setFont(new Font("Helvetica", Font.BOLD, 12)); g.drawString("Build date: " + builddate, x, y += fh); g.setFont(new Font("Helvetica", Font.PLAIN, 12)); - g - .drawString( - "Authors: Andrew Waterhouse, Jim Procter, Michele Clamp, James Cuff, Steve Searle,", - x, y += fh * 1.5); + g.drawString( + "Authors: Andrew Waterhouse, Jim Procter, Michele Clamp, James Cuff, Steve Searle,", + x, y += fh * 1.5); g.drawString("David Martin & Geoff Barton.", x + 50, y += fh); - g - .drawString( - "Development managed by The Barton Group, University of Dundee, Scotland, UK.", - x, y += fh); - g - .drawString( - "For help, see the FAQ at www.jalview.org and/or join the jalview-discuss@jalview.org mailing list", - x, y += fh); + g.drawString( + "Development managed by The Barton Group, University of Dundee, Scotland, UK.", + x, y += fh); + g.drawString( + "For help, see the FAQ at www.jalview.org and/or join the jalview-discuss@jalview.org mailing list", + x, y += fh); g.drawString("If you use Jalview, please cite:", x, y += fh + 8); - g - .drawString( - "Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)", - x, y += fh); - g - .drawString( - "Jalview Version 2 - a multiple sequence alignment editor and analysis workbench", - x, y += fh); + g.drawString( + "Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)", + x, y += fh); + g.drawString( + "Jalview Version 2 - a multiple sequence alignment editor and analysis workbench", + x, y += fh); g.drawString("Bioinformatics doi: 10.1093/bioinformatics/btp033", x, y += fh); } @@ -2577,8 +2578,17 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { System.out.println("Show url: " + url); } - viewport.applet.getAppletContext().showDocument( - new java.net.URL(url), target); + if (url.indexOf("javascript:") == 0) + { + // no target for the javascript context + viewport.applet.getAppletContext().showDocument( + new java.net.URL(url)); + } + else + { + viewport.applet.getAppletContext().showDocument( + new java.net.URL(url), target); + } } catch (Exception ex) { ex.printStackTrace(); @@ -3156,9 +3166,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewport.applet.setLayout(new BorderLayout()); viewport.applet.add(embeddedMenu, BorderLayout.NORTH); viewport.applet.add(statusBar, BorderLayout.SOUTH); - alignPanel.setSize(viewport.applet.getSize().width, viewport.applet - .getSize().height - - embeddedMenu.HEIGHT - statusBar.HEIGHT); + alignPanel.setSize(viewport.applet.getSize().width, + viewport.applet.getSize().height - embeddedMenu.HEIGHT + - statusBar.HEIGHT); viewport.applet.add(alignPanel, BorderLayout.CENTER); viewport.applet.validate(); } @@ -3180,4 +3190,207 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, DEFAULT_HEIGHT); } } + + /** + * create a new binding between structures in an existing jmol viewer instance + * and an alignpanel with sequences that have existing PDBFile entries. Note, + * this does not open a new Jmol window, or modify the display of the + * structures in the original jmol window. Note + * + * @param viewer + * JmolViewer instance + * @param sequenceIds + * - sequence Ids to search for associations + * This method doesn't work. See http://issues.jalview.org/browse/JAL-621 + * + public SequenceStructureBinding addStructureViewInstance(Object jmolviewer, String[] sequenceIds) + { + org.jmol.api.JmolViewer viewer=null; + try { + viewer = (org.jmol.api.JmolViewer) jmolviewer; + } + catch (ClassCastException ex) { + System.err.println("Unsupported viewer object :"+jmolviewer.getClass()); + } + if (viewer==null) + { + System.err.println("Can't use this object as a structure viewer:"+jmolviewer.getClass()); + return null; + } + SequenceI[] seqs=null; + if (sequenceIds==null || sequenceIds.length==0) + { + seqs = viewport.getAlignment().getSequencesArray(); + } else { + Vector sqi=new Vector(); + AlignmentI al = viewport.getAlignment(); + for (int sid=0;sid0) { + seqs = new SequenceI[sqi.size()]; + for (int sid=0,sSize=sqi.size();sid 0) + { + for (int pe = 0, peSize = pdbe.size(); pe < peSize; pe++) + { + pdbentry = (PDBEntry) pdbe.elementAt(pe); + if (!pdbentry.getId().equals(pdbEntryString) + && !pdbentry.getFile().equals(pdbFile)) + { + pdbentry = null; + } + else + { + continue; + } + } + } + if (pdbentry == null) + { + pdbentry = new PDBEntry(); + pdbentry.setId(pdbEntryString); + pdbentry.setFile(pdbFile); + needtoadd = true; // add this new entry to sequence. + } + // resolve data source + // TODO: this code should be a refactored to an io package + String protocol = AppletFormatAdapter.resolveProtocol(pdbFile, "PDB"); + if (protocol == null) + { + return false; + } + if (needtoadd) + { + // make a note of the access mode and add + if (pdbentry.getProperty()==null) + {pdbentry.setProperty(new Hashtable());} + pdbentry.getProperty().put("protocol", protocol); + toaddpdb.addPDBId(pdbentry); + } + } + return true; + } + private Object[] cleanSeqChainArrays(SequenceI[] seqs, String[] chains) + { + if (seqs != null) + { + Vector sequences = new Vector(); + for (int i = 0; i < seqs.length; i++) + { + if (seqs[i] != null) + { + sequences.addElement(new Object[] { seqs[i], (chains!=null) ? chains[i] : null}); + } + } + seqs = new SequenceI[sequences.size()]; + chains = new String[sequences.size()]; + for (int i = 0, isize = sequences.size(); i < isize; i++) + { + Object[] oj = (Object[]) sequences.elementAt(i); + + seqs[i] = (SequenceI) oj[0]; + chains[i] = (String) oj[1]; + } + } + return new Object[] { seqs, chains}; + + } + public void newStructureView(JalviewLite applet, PDBEntry pdb, + SequenceI[] seqs, String[] chains, String protocol) + { + // Scrub any null sequences from the array + Object[] sqch = cleanSeqChainArrays(seqs, chains); + seqs = (SequenceI[]) sqch[0]; + chains = (String[]) sqch[1]; + if (seqs == null || seqs.length == 0) + { + System.err + .println("JalviewLite.AlignFrame:newStructureView: No sequence to bind structure to."); + } + if (protocol == null || protocol.trim().length() == 0 + || protocol.equals("null")) + { + protocol = (String) pdb.getProperty().get("protocol"); + if (protocol == null) + { + System.err.println("Couldn't work out protocol to open structure: " + + pdb.getId()); + return; + } + } + if (applet.isAlignPdbStructures() && applet.jmolAvailable) + { + // can only do alignments with Jmol + // find the last jmol window assigned to this alignment + jalview.appletgui.AppletJmol ajm = null, tajm; + Vector jmols = applet + .getAppletWindow(jalview.appletgui.AppletJmol.class); + for (int i = 0, iSize = jmols.size(); i < iSize; i++) + { + tajm = (jalview.appletgui.AppletJmol) jmols.elementAt(i); + if (tajm.ap.alignFrame == this) + { + ajm = tajm; + break; + } + } + if (ajm!=null) + { + System.err.println("Incremental adding and aligning structure to existing Jmol view not yet implemented."); + // try and add the pdb structure + // ajm.addS + ajm = null; + } + } + // otherwise, create a new window + if (applet.jmolAvailable) + { + new jalview.appletgui.AppletJmol(pdb, seqs, chains, alignPanel, + protocol); + applet.lastFrameX += 40; + applet.lastFrameY += 40; + } + else + { + new MCview.AppletPDBViewer(pdb, seqs, chains, alignPanel, protocol); + } + + } + + public void alignedStructureView(JalviewLite applet, PDBEntry[] pdb, + SequenceI[][] seqs, String[][] chains, String[] protocols) + { + // TODO Auto-generated method stub + System.err.println("Aligned Structure View: Not yet implemented."); + } }