X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=b3e34fb7f6d00cb08d5e712edea2d9399caeaf52;hb=34d8b4dc08dcd27c3b5ac3bf7811f709b4db5938;hp=f74d05e7fb7e441feff528974b8b1e6aa2550430;hpb=ecbe6d4b89de40cd16d94e86ee5ecf68ba32e80c;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index f74d05e..b3e34fb 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) + * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle * * This file is part of Jalview. * @@ -55,6 +55,7 @@ import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; import jalview.io.JnetAnnotationMaker; import jalview.io.NewickFile; +import jalview.io.TCoffeeScoreFile; import jalview.jbgui.GAlignFrame; import jalview.schemes.Blosum62ColourScheme; import jalview.schemes.BuriedColourScheme; @@ -67,6 +68,7 @@ import jalview.schemes.NucleotideColourScheme; import jalview.schemes.PIDColourScheme; import jalview.schemes.ResidueProperties; import jalview.schemes.StrandColourScheme; +import jalview.schemes.TCoffeeColourScheme; import jalview.schemes.TaylorColourScheme; import jalview.schemes.TurnColourScheme; import jalview.schemes.UserColourScheme; @@ -140,6 +142,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, AlignViewport viewport; Vector alignPanels = new Vector(); + + TCoffeeScoreFile tcoffeeScoreFile; /** * Last format used to load or save alignments in this window @@ -698,7 +702,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, applyToAllGroups.setState(av.colourAppliesToAllGroups); showNpFeatsMenuitem.setSelected(av.isShowNpFeats()); showDbRefsMenuitem.setSelected(av.isShowDbRefs()); - + autoCalculate.setSelected(av.autoCalculateConsensus); + sortByTree.setSelected(av.sortByTree); + listenToViewSelections.setSelected(av.followSelection); + setShowProductsEnabled(); updateEditMenuBar(); @@ -754,7 +761,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, progressBars.put(lId, progressPanel); } // update GUI - setMenusForViewport(); + // setMenusForViewport(); validate(); } @@ -3419,7 +3426,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, .getAlignment().getSequences()); } } + public void sortByTreeOption_actionPerformed(ActionEvent e) + { + viewport.sortByTree = sortByTree.isSelected(); + } + @Override + protected void listenToViewSelections_actionPerformed(ActionEvent e) + { + viewport.followSelection = listenToViewSelections.isSelected(); + } /** * DOCUMENT ME! * @@ -3702,21 +3718,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, for (i = 0; i < treePanels.size(); i++) { - TreePanel tp = (TreePanel) treePanels.elementAt(i); + final TreePanel tp = (TreePanel) treePanels.elementAt(i); final JMenuItem item = new JMenuItem(tp.getTitle()); final NJTree tree = ((TreePanel) treePanels.elementAt(i)).getTree(); item.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { - SequenceI[] oldOrder = viewport.getAlignment() - .getSequencesArray(); - AlignmentSorter.sortByTree(viewport.getAlignment(), tree); - - addHistoryItem(new OrderCommand("Tree Sort", oldOrder, - viewport.alignment)); - - alignPanel.paintAlignment(true); + tp.sortByTree_actionPerformed(null); + addHistoryItem(tp.sortAlignmentIn(alignPanel)); + } }); @@ -3724,6 +3735,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } + public boolean sortBy(AlignmentOrder alorder, String undoname) + { + SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); + AlignmentSorter.sortBy(viewport.getAlignment(), alorder); + if (undoname != null) + { + addHistoryItem(new OrderCommand(undoname, oldOrder, + viewport.alignment)); + } + alignPanel.paintAlignment(true); + return true; + } + /** * Work out whether the whole set of sequences or just the selected set will * be submitted for multiple alignment. @@ -3838,7 +3862,70 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } } - + + @Override + public void loadScores_actionPerformed(ActionEvent e) + { + // Pick the tree file + JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.getProperty("LAST_DIRECTORY")); + chooser.setFileView(new JalviewFileView()); + chooser.setDialogTitle("Select a T-Coffee scores ascii file"); + chooser.setToolTipText("Load a score file"); + + int value = chooser.showOpenDialog(null); + + if (value == JalviewFileChooser.APPROVE_OPTION) + { + String sFilePath = chooser.getSelectedFile().getPath(); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", sFilePath); + + + try + { + TCoffeeScoreFile result = TCoffeeScoreFile.load(new File(sFilePath)); + if( result == null ) { throw new RuntimeException("The file provided does not match the T-Coffee scores file format"); } + + // TODO check that the loaded scores matches the current MSA 'dimension' + changeColour( new TCoffeeColourScheme(result) ); + tcoffeeScoreFile = result; + tcoffeeColour.setEnabled(true); + tcoffeeColour.setSelected(true); + + } + catch (Exception ex) { + JOptionPane.showMessageDialog( + Desktop.desktop, + ex.getMessage(), + "Problem reading tree file", + JOptionPane.WARNING_MESSAGE); + + ex.printStackTrace(); + } + } + + } + + + @Override + protected void tcoffeeColorScheme_actionPerformed(ActionEvent e) { + if( tcoffeeScoreFile != null ) { + changeColour( new TCoffeeColourScheme(tcoffeeScoreFile) ); + } + } + +// /** +// * Load the (T-Coffee) score file from the specified url +// * +// * @param url The absolute path from where download and read the score file +// * @throws IOException +// */ +// public void loadScoreFile(URL url ) throws IOException { +// +// TCoffeeScoreFile result = new TCoffeeScoreFile(); +// result.parse( new InputStreamReader( url.openStream() ) ); +// tcoffeeScoreFile = result; +// } + public TreePanel ShowNewickTree(NewickFile nf, String title) { return ShowNewickTree(nf, title, 600, 500, 4, 5); @@ -3947,17 +4034,26 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // object broker mechanism. final Vector wsmenu = new Vector(); final IProgressIndicator af = me; - if (Cache.getDefault("SHOW_JWS1_SERVICES", true) - && Discoverer.services != null + final JMenu msawsmenu = new JMenu("Alignment"); + final JMenu secstrmenu = new JMenu( + "Secondary Structure Prediction"); + final JMenu seqsrchmenu = new JMenu( + "Sequence Database Search"); + final JMenu analymenu = new JMenu( + "Analysis"); + // JAL-940 - only show secondary structure prediction services from the legacy server + if (// Cache.getDefault("SHOW_JWS1_SERVICES", true) + // && + Discoverer.services != null && (Discoverer.services.size() > 0)) { // TODO: refactor to allow list of AbstractName/Handler bindings to // be // stored or retrieved from elsewhere - Vector msaws = (Vector) Discoverer.services.get("MsaWS"); + Vector msaws = null; // (Vector) Discoverer.services.get("MsaWS"); Vector secstrpr = (Vector) Discoverer.services .get("SecStrPred"); - Vector seqsrch = (Vector) Discoverer.services.get("SeqSearch"); + Vector seqsrch = null; // (Vector) Discoverer.services.get("SeqSearch"); // TODO: move GUI generation code onto service implementation - so a // client instance attaches itself to the GUI with method call like // jalview.ws.MsaWSClient.bind(servicehandle, Desktop.instance, @@ -3965,7 +4061,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (msaws != null) { // Add any Multiple Sequence Alignment Services - final JMenu msawsmenu = new JMenu("Alignment"); for (int i = 0, j = msaws.size(); i < j; i++) { final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws @@ -3975,13 +4070,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, impl.attachWSMenuEntry(msawsmenu, me); } - wsmenu.add(msawsmenu); } if (secstrpr != null) { // Add any secondary structure prediction services - final JMenu secstrmenu = new JMenu( - "Secondary Structure Prediction"); for (int i = 0, j = secstrpr.size(); i < j; i++) { final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) secstrpr @@ -3990,13 +4082,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, .getServiceClient(sh); impl.attachWSMenuEntry(secstrmenu, me); } - wsmenu.add(secstrmenu); } if (seqsrch != null) { // Add any sequence search services - final JMenu seqsrchmenu = new JMenu( - "Sequence Database Search"); for (int i = 0, j = seqsrch.size(); i < j; i++) { final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) seqsrch @@ -4005,7 +4094,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, .getServiceClient(sh); impl.attachWSMenuEntry(seqsrchmenu, me); } - wsmenu.add(seqsrchmenu); } } @@ -4017,15 +4105,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { if (jws2servs.hasServices()) { - JMenu jws2men = new JMenu("Jaba Web Services"); - jws2servs.attachWSMenuEntry(jws2men, me); - for (int i = 0, iSize = jws2men.getMenuComponentCount(); i < iSize; i++) - { - wsmenu.add(jws2men.getMenuComponent(i)); - } + jws2servs.attachWSMenuEntry(msawsmenu, me); } } } + // Add all submenus in the order they should appear on the web services menu + wsmenu.add(msawsmenu); + wsmenu.add(secstrmenu); + wsmenu.add(analymenu); + // No search services yet + // wsmenu.add(seqsrchmenu); javax.swing.SwingUtilities.invokeLater(new Runnable() { @@ -4033,9 +4122,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { try { - - resetWebServiceMenu(); - // finally, add the whole shebang onto the webservices menu + webService.removeAll(); + // first, add discovered services onto the webservices menu if (wsmenu.size() > 0) { for (int i = 0, j = wsmenu.size(); i < j; i++) @@ -4045,8 +4133,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } else { - me.webService.add(me.webServiceNoServices); + webService.add(me.webServiceNoServices); } + build_urlServiceMenu(me.webService); + build_fetchdbmenu(webService); } catch (Exception e) { } @@ -4064,17 +4154,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } - /** - * empty the web service menu and add any ad-hoc functions not dynamically - * discovered. - * - */ - private void resetWebServiceMenu() - { - webService.removeAll(); - build_fetchdbmenu(webService); - build_urlServiceMenu(webService); - } /** * construct any groupURL type service menu entries. @@ -4083,11 +4162,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ private void build_urlServiceMenu(JMenu webService) { - if (Cache.getDefault("SHOW_ENFIN_SERVICES", true)) - { - jalview.ws.EnfinEnvision2OneWay.getInstance().attachWSMenuEntry( - webService, this); - } // TODO: remove this code when 2.7 is released // DEBUG - alignmentView /* @@ -4103,9 +4177,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // TODO: refactor to RestClient discoverer and merge menu entries for // rest-style services with other types of analysis/calculation service // SHmmr test client - still being implemented. - jalview.ws.rest.RestClient.makeShmmrRestClient().attachWSMenuEntry( - webService, this); // DEBUG - alignmentView + + for (jalview.ws.rest.RestClient client: jalview.ws.rest.RestClient.getRestClients()) { + client.attachWSMenuEntry(JvSwingUtils.findOrCreateMenu(webService, client.getAction()), this); + } + + if (Cache.getDefault("SHOW_ENFIN_SERVICES", true)) + { + jalview.ws.EnfinEnvision2OneWay.getInstance().attachWSMenuEntry( + webService, this); + } } /* @@ -4377,7 +4459,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, featuresFile = new FeaturesFile(file, type) .parse(viewport.alignment.getDataset(), alignPanel.seqPanel.seqCanvas.getFeatureRenderer().featureColours, - false); + false, jalview.bin.Cache.getDefault( + "RELAXEDSEQIDMATCHING", false)); } catch (Exception ex) { ex.printStackTrace(); @@ -4499,19 +4582,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (pdbfn.length() > 0) { // attempt to find a match in the alignment - SequenceI mtch = idm.findIdMatch(pdbfn); + SequenceI[] mtch = idm.findAllIdMatches(pdbfn); int l = 0, c = pdbfn.indexOf("."); while (mtch == null && c != -1) { - while ((c = pdbfn.indexOf(".", l)) > l) + do { l = c; - } + } while ((c = pdbfn.indexOf(".", l)) > l); if (l > -1) { pdbfn = pdbfn.substring(0, l); } - mtch = idm.findIdMatch(pdbfn); + mtch = idm.findAllIdMatches(pdbfn); } if (mtch != null) { @@ -4556,17 +4639,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // try and associate // TODO: may want to set a standard ID naming formalism for // associating PDB files which have no IDs. + for (SequenceI toassoc: (SequenceI[])fm[2]) { PDBEntry pe = new AssociatePdbFileWithSeq() .associatePdbWithSeq((String) fm[0], (String) fm[1], - (SequenceI) fm[2], false); + toassoc, false); if (pe != null) { System.err .println("Associated file : " + ((String) fm[0]) + " with " - + ((SequenceI) fm[2]).getDisplayId(true)); + + toassoc.getDisplayId(true)); assocfiles++; } + } alignPanel.paintAlignment(true); } } @@ -5030,6 +5115,26 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, alignPanel.paintAlignment(true); } } + + /** + * make the given alignmentPanel the currently selected tab + * + * @param alignmentPanel + */ + public void setDisplayedView(AlignmentPanel alignmentPanel) + { + if (!viewport.getSequenceSetId().equals( + alignmentPanel.av.getSequenceSetId())) + { + throw new Error( + "Implementation error: cannot show a view from another alignment in an AlignFrame."); + } + if (tabbedPane != null + & alignPanels.indexOf(alignmentPanel) != tabbedPane.getSelectedIndex()) + { + tabbedPane.setSelectedIndex(alignPanels.indexOf(alignmentPanel)); + } + } } class PrintThread extends Thread