JAL-1065 - Visualize T-Coffee quality scores for an alignment
[jalview.git] / src / jalview / gui / AlignFrame.java
index 9df4931..b3e34fb 100755 (executable)
@@ -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,11 +68,11 @@ 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;
 import jalview.schemes.ZappoColourScheme;
-import jalview.ws.WSMenuEntryProviderI;
 import jalview.ws.jws1.Discoverer;
 import jalview.ws.jws2.Jws2Discoverer;
 
@@ -141,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
@@ -701,7 +704,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     showDbRefsMenuitem.setSelected(av.isShowDbRefs());
     autoCalculate.setSelected(av.autoCalculateConsensus);
     sortByTree.setSelected(av.sortByTree);
-
+    listenToViewSelections.setSelected(av.followSelection);
+    
     setShowProductsEnabled();
 
     updateEditMenuBar();
@@ -3427,6 +3431,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     viewport.sortByTree = sortByTree.isSelected();
   }
 
+  @Override
+  protected void listenToViewSelections_actionPerformed(ActionEvent e)
+  {
+    viewport.followSelection = listenToViewSelections.isSelected();
+  }
   /**
    * DOCUMENT ME!
    * 
@@ -3853,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);
@@ -3969,18 +4041,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                   "Sequence Database Search");
           final JMenu analymenu = new JMenu(
                   "Analysis");
-          
-          if (Cache.getDefault("SHOW_JWS1_SERVICES", true)
-                  && Discoverer.services != null
+          // 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,