JAL-1517 fix copyright for 2.8.2
[jalview.git] / src / jalview / gui / AlignFrame.java
index 57ff660..92316b3 100644 (file)
@@ -1,31 +1,36 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
  * Copyright (C) 2014 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  * Jalview is free software: you can redistribute it and/or
  * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
  *  
  * Jalview is distributed in the hope that it will be useful, but 
  * WITHOUT ANY WARRANTY; without even the implied warranty 
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
  * PURPOSE.  See the GNU General Public License for more details.
  * 
- * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
  * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.gui;
 
 import jalview.analysis.AAFrequency;
 import jalview.analysis.AlignmentSorter;
+import jalview.analysis.AlignmentUtils;
 import jalview.analysis.Conservation;
 import jalview.analysis.CrossRef;
 import jalview.analysis.NJTree;
 import jalview.analysis.ParseProperties;
 import jalview.analysis.SequenceIdMatcher;
+import jalview.api.AlignViewControllerGuiI;
 import jalview.api.AlignViewControllerI;
+import jalview.api.analysis.ScoreModelI;
 import jalview.bin.Cache;
 import jalview.commands.CommandI;
 import jalview.commands.EditCommand;
@@ -84,7 +89,6 @@ import jalview.ws.jws2.jabaws2.Jws2Instance;
 import jalview.ws.seqfetcher.DbSourceProxy;
 
 import java.awt.BorderLayout;
-import java.awt.Color;
 import java.awt.Component;
 import java.awt.GridLayout;
 import java.awt.Rectangle;
@@ -116,6 +120,7 @@ import java.util.List;
 import java.util.Vector;
 
 import javax.swing.JButton;
+import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JEditorPane;
 import javax.swing.JInternalFrame;
 import javax.swing.JLabel;
@@ -136,7 +141,7 @@ import javax.swing.SwingUtilities;
  * @version $Revision$
  */
 public class AlignFrame extends GAlignFrame implements DropTargetListener,
-        IProgressIndicator
+        IProgressIndicator, AlignViewControllerGuiI
 {
 
   /** DOCUMENT ME!! */
@@ -294,7 +299,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    */
   void init()
   {
-    avc = new jalview.controller.AlignViewController(viewport, alignPanel);
+    avc = new jalview.controller.AlignViewController(this, viewport, alignPanel);
     if (viewport.getAlignmentConservationAnnotation() == null)
     {
       BLOSUM62Colour.setEnabled(false);
@@ -326,6 +331,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     setMenusFromViewport(viewport);
     buildSortByAnnotationScoresMenu();
+    buildTreeMenu();
     if (viewport.wrapAlignment)
     {
       wrapMenuItem_actionPerformed(null);
@@ -564,7 +570,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   public void addAlignmentPanel(final AlignmentPanel ap, boolean newPanel)
   {
     ap.alignFrame = this;
-    avc = new jalview.controller.AlignViewController(viewport, alignPanel);
+    avc = new jalview.controller.AlignViewController(this, viewport, alignPanel);
 
     alignPanels.addElement(ap);
 
@@ -848,6 +854,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     return false;
   }
 
+  @Override
+  public void setStatus(String text) {
+    statusBar.setText(text);
+  };
   /*
    * Added so Castor Mapping file can obtain Jalview Version
    */
@@ -985,7 +995,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     chooser.setFileView(new JalviewFileView());
     chooser.setDialogTitle("Save Alignment to file");
-    chooser.setToolTipText("Save");
+    chooser.setToolTipText(MessageManager.getString("action.save"));
 
     int value = chooser.showSaveDialog(this);
 
@@ -1154,7 +1164,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               viewport.getAlignment(), omitHidden,
               viewport.getColumnSelection()));
       Desktop.addInternalFrame(cap,
-              "Alignment output - " + e.getActionCommand(), 600, 500);
+              MessageManager.formatMessage("label.alignment_output_command", new String[]{e.getActionCommand()}), 600, 500);
     } catch (OutOfMemoryError oom)
     {
       new OOMWarning("Outputting alignment as " + e.getActionCommand(), oom);
@@ -1250,8 +1260,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     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");
+    chooser.setDialogTitle(MessageManager.getString("label.load_jalview_annotations"));
+    chooser.setToolTipText(MessageManager.getString("label.load_jalview_annotations"));
 
     int value = chooser.showOpenDialog(null);
 
@@ -2055,7 +2065,59 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
 
   }
+  @Override
+  protected void expand_newalign(ActionEvent e)
+  {
+    try {
+    AlignmentI alignment = AlignmentUtils.expandContext(getViewport().getAlignment(), -1);
+    AlignFrame af = new AlignFrame(alignment, DEFAULT_WIDTH,
+            DEFAULT_HEIGHT);
+    String newtitle = new String("Flanking alignment");
+
+    if (Desktop.jalviewClipboard != null
+            && Desktop.jalviewClipboard[2] != null)
+    {
+      Vector hc = (Vector) Desktop.jalviewClipboard[2];
+      for (int i = 0; i < hc.size(); i++)
+      {
+        int[] region = (int[]) hc.elementAt(i);
+        af.viewport.hideColumns(region[0], region[1]);
+      }
+    }
+
+    // >>>This is a fix for the moment, until a better solution is
+    // found!!<<<
+    af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer()
+            .transferSettings(
+                    alignPanel.seqPanel.seqCanvas.getFeatureRenderer());
+
+    // TODO: maintain provenance of an alignment, rather than just make the
+    // title a concatenation of operations.
+    {
+      if (title.startsWith("Copied sequences"))
+      {
+        newtitle = title;
+      }
+      else
+      {
+        newtitle = newtitle.concat("- from " + title);
+      }
+    }
+
+    Desktop.addInternalFrame(af, newtitle, DEFAULT_WIDTH,
+            DEFAULT_HEIGHT);
 
+    } catch (Exception ex)
+    {
+      ex.printStackTrace();
+      System.out.println("Exception whilst pasting: " + ex);
+      // could be anything being pasted in here
+    }
+    catch (OutOfMemoryError oom)
+    {
+      new OOMWarning("Viewing flanking region of alignment", oom);
+    }
+  }
   /**
    * DOCUMENT ME!
    * 
@@ -2958,8 +3020,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     JInternalFrame frame = new JInternalFrame();
     frame.getContentPane().add(new JScrollPane(editPane));
 
-    Desktop.instance.addInternalFrame(frame, "Alignment Properties: "
-            + getTitle(), 500, 400);
+    Desktop.instance.addInternalFrame(frame, MessageManager.formatMessage("label.alignment_properties", new String[]{getTitle()}), 500, 400);
   }
 
   /**
@@ -2979,7 +3040,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     JInternalFrame frame = new JInternalFrame();
     OverviewPanel overview = new OverviewPanel(alignPanel);
     frame.setContentPane(overview);
-    Desktop.addInternalFrame(frame, "Overview " + this.getTitle(),
+    Desktop.addInternalFrame(frame, MessageManager.formatMessage("label.overview_params", new String[]{this.getTitle()}),
             frame.getWidth(), frame.getHeight());
     frame.pack();
     frame.setLayer(JLayeredPane.PALETTE_LAYER);
@@ -3176,10 +3237,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       {
         threshold = SliderPanel.setPIDSliderSource(alignPanel, cs,
                 "Background");
-
         cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus());
-
-        viewport.setGlobalColourScheme(cs);
       }
       else
       {
@@ -3365,7 +3423,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   public void userDefinedColour_actionPerformed(ActionEvent e)
   {
-    if (e.getActionCommand().equals("User Defined..."))
+    if (e.getActionCommand().equals(MessageManager.getString("action.user_defined")))
     {
       new UserDefinedColours(alignPanel, null);
     }
@@ -3574,7 +3632,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     {
       JInternalFrame frame = new JInternalFrame();
       frame.setContentPane(new PairwiseAlignPanel(viewport));
-      Desktop.addInternalFrame(frame, "Pairwise Alignment", 600, 500);
+      Desktop.addInternalFrame(frame, MessageManager.getString("action.pairwise_alignment"), 600, 500);
     }
   }
 
@@ -3884,6 +3942,35 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   public void buildTreeMenu()
   {
+    calculateTree.removeAll();
+    // build the calculate menu
+    
+    for (final String type:new String[] {"NJ", "AV"})
+    {
+      String treecalcnm = MessageManager.getString("label.tree_calc_"+type.toLowerCase());
+      for (final Object pwtype: ResidueProperties.scoreMatrices.keySet())
+      {
+        JMenuItem tm = new JMenuItem();
+        ScoreModelI sm = ResidueProperties.scoreMatrices.get(pwtype);
+        if (sm.isProtein()==!viewport.getAlignment().isNucleotide())
+        {
+          String smn = MessageManager.getStringOrReturn(
+                  "label.score_model_", sm.getName());
+          final String title = MessageManager.formatMessage(
+                  "label.treecalc_title", treecalcnm, smn);
+          tm.setText(title);//
+          tm.addActionListener(new java.awt.event.ActionListener()
+          {
+            public void actionPerformed(ActionEvent e)
+            {
+              NewTreePanel(type, (String) pwtype, title);
+            }
+          });
+          calculateTree.add(tm);
+        }
+
+      }
+    }
     sortByTreeMenu.removeAll();
 
     Vector comps = (Vector) PaintRefresher.components.get(viewport
@@ -4028,8 +4115,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     JalviewFileChooser chooser = new JalviewFileChooser(
             jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
     chooser.setFileView(new JalviewFileView());
-    chooser.setDialogTitle("Select a newick-like tree file");
-    chooser.setToolTipText("Load a tree file");
+    chooser.setDialogTitle(MessageManager.getString("label.select_newick_like_tree_file"));
+    chooser.setToolTipText(MessageManager.getString("label.load_tree_file"));
 
     int value = chooser.showOpenDialog(null);
 
@@ -4336,12 +4423,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               JvSwingUtils.findOrCreateMenu(webService, client.getAction()),
               this);
     }
-
-    if (Cache.getDefault("SHOW_ENFIN_SERVICES", true))
-    {
-      jalview.ws.EnfinEnvision2OneWay.getInstance().attachWSMenuEntry(
-              webService, this);
-    }
   }
 
   /*
@@ -4558,7 +4639,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     else
     {
       AlignFrame af = new AlignFrame(al, DEFAULT_WIDTH, DEFAULT_HEIGHT);
-      Desktop.addInternalFrame(af, "Translation of " + this.getTitle(),
+      Desktop.addInternalFrame(af, MessageManager.formatMessage("label.translation_of_params", new String[]{this.getTitle()}),
               DEFAULT_WIDTH, DEFAULT_HEIGHT);
     }
   }
@@ -4601,7 +4682,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     else
     {
       AlignFrame af = new AlignFrame(al, DEFAULT_WIDTH, DEFAULT_HEIGHT);
-      Desktop.addInternalFrame(af, "Translation of " + this.getTitle(),
+      Desktop.addInternalFrame(af, MessageManager.formatMessage("label.translation_of_params", new String[]{this.getTitle()}),
               DEFAULT_WIDTH, DEFAULT_HEIGHT);
     }
   }
@@ -5114,12 +5195,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     // TODO We probably want to store a sequence database checklist in
     // preferences and have checkboxes.. rather than individual sources selected
     // here
-    final JMenu rfetch = new JMenu("Fetch DB References");
-    rfetch.setToolTipText("Retrieve and parse sequence database records for the alignment or the currently selected sequences");
+    final JMenu rfetch = new JMenu(MessageManager.getString("action.fetch_db_references"));
+    rfetch.setToolTipText(MessageManager.getString("label.retrieve_parse_sequence_database_records_alignment_or_selected_sequences"));
     webService.add(rfetch);
 
-    JMenuItem fetchr = new JMenuItem("Standard Databases");
-    fetchr.setToolTipText("Fetch from EMBL/EMBLCDS or Uniprot/PDB and any selected DAS sources");
+    final JCheckBoxMenuItem trimrs = new JCheckBoxMenuItem(MessageManager.getString("option.trim_retrieved_seqs"));
+    trimrs.setToolTipText(MessageManager.getString("label.trim_retrieved_sequences"));
+    trimrs.setSelected(Cache.getDefault("TRIM_FETCHED_DATASET_SEQS", true));
+    trimrs.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e) {
+      trimrs.setSelected(trimrs.isSelected());
+      Cache.setProperty("TRIM_FETCHED_DATASET_SEQS", Boolean.valueOf(trimrs.isSelected()).toString());
+    };
+    });
+    rfetch.add(trimrs);
+    JMenuItem fetchr = new JMenuItem(MessageManager.getString("label.standard_databases"));
+    fetchr.setToolTipText(MessageManager.getString("label.fetch_embl_uniprot"));
     fetchr.addActionListener(new ActionListener()
     {
 
@@ -5223,8 +5315,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                         .toArray(new DbSourceProxy[0]);
                 // fetch all entry
                 DbSourceProxy src = otherdb.get(0);
-                fetchr = new JMenuItem("Fetch All '" + src.getDbSource()
-                        + "'");
+                fetchr = new JMenuItem(MessageManager.formatMessage("label.fetch_all_param", new String[]{src.getDbSource()}));
                 fetchr.addActionListener(new ActionListener()
                 {
                   @Override
@@ -5299,7 +5390,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                   ++i;
                   if (++icomp >= mcomp || i == (otherdb.size()))
                   {
-                    ifetch.setText(MessageManager.formatMessage("label.source_to_target",new String[]{imname,sname}));
+                    ifetch.setText(MessageManager.formatMessage("label.source_to_target",imname,sname));
                     dfetch.add(ifetch);
                     ifetch = new JMenu();
                     imname = null;
@@ -5311,7 +5402,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               ++dbi;
               if (comp >= mcomp || dbi >= (dbclasses.length))
               {
-                dfetch.setText(MessageManager.formatMessage("label.source_to_target",new String[]{mname,dbclass}));
+                dfetch.setText(MessageManager.formatMessage("label.source_to_target",mname,dbclass));
                 rfetch.add(dfetch);
                 dfetch = new JMenu();
                 mname = null;