JAL-4090 JAL-1551 spotlessApply
[jalview.git] / src / jalview / appletgui / AlignFrame.java
index 73cabc4..f502952 100644 (file)
  */
 package jalview.appletgui;
 
+import java.awt.BorderLayout;
+import java.awt.Canvas;
+import java.awt.CheckboxMenuItem;
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Label;
+import java.awt.Menu;
+import java.awt.MenuBar;
+import java.awt.MenuItem;
+import java.awt.Panel;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.Arrays;
+import java.util.Deque;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import org.jmol.viewer.Viewer;
+
 import jalview.analysis.AlignmentSorter;
 import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
 import jalview.analysis.TreeBuilder;
@@ -81,43 +120,6 @@ import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
 import jalview.viewmodel.ViewportRanges;
 
-import java.awt.BorderLayout;
-import java.awt.Canvas;
-import java.awt.CheckboxMenuItem;
-import java.awt.Color;
-import java.awt.FlowLayout;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Frame;
-import java.awt.Graphics;
-import java.awt.Label;
-import java.awt.Menu;
-import java.awt.MenuBar;
-import java.awt.MenuItem;
-import java.awt.Panel;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLEncoder;
-import java.util.Arrays;
-import java.util.Deque;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import org.jmol.viewer.Viewer;
-
 public class AlignFrame extends EmbmenuFrame implements ActionListener,
         ItemListener, KeyListener, AlignViewControllerGuiI
 {
@@ -416,7 +418,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
         viewport.featureSettings.refreshTable();
       }
       alignPanel.paintAlignment(true, true);
-      statusBar.setText(MessageManager
+      setStatus(MessageManager
               .getString("label.successfully_added_features_alignment"));
     }
     return featuresFile;
@@ -574,8 +576,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
     case KeyEvent.VK_F2:
       viewport.cursorMode = !viewport.cursorMode;
-      statusBar.setText(MessageManager
-              .formatMessage("label.keyboard_editing_mode", new String[]
+      setStatus(MessageManager.formatMessage("label.keyboard_editing_mode",
+              new String[]
               { (viewport.cursorMode ? "on" : "off") }));
       if (viewport.cursorMode)
       {
@@ -1202,7 +1204,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     }
     else if (source == featureSettings)
     {
-      new FeatureSettings(alignPanel);
+      showFeatureSettingsUI();
     }
     else if (source == alProperties)
     {
@@ -1445,15 +1447,15 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     FeaturesFile formatter = new FeaturesFile();
     if (format.equalsIgnoreCase("Jalview"))
     {
-      features = formatter.printJalviewFormat(viewport.getAlignment()
-              .getSequencesArray(), getDisplayedFeatureCols(),
-              getDisplayedFeatureGroups(), true);
+      features = formatter.printJalviewFormat(
+              viewport.getAlignment().getSequencesArray(),
+              alignPanel.getFeatureRenderer(), true, false);
     }
     else
     {
-      features = formatter.printGffFormat(viewport.getAlignment()
-              .getSequencesArray(), getDisplayedFeatureCols(),
-              getDisplayedFeatureGroups(), true);
+      features = formatter.printGffFormat(
+              viewport.getAlignment().getSequencesArray(),
+              alignPanel.getFeatureRenderer(), true, false);
     }
 
     if (displayTextbox)
@@ -1570,18 +1572,24 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     try
     {
       new URL(url);
-      url = URLEncoder.encode(url);
+      url = URLEncoder.encode(url, "UTF-8");
     }
     /*
      * When we finally deprecate 1.1 compatibility, we can start to use
      * URLEncoder.encode(url,"UTF-8") and then we'll need this catch: catch
-     * (UnsupportedEncodingException ex) { System.err.println("WARNING -
+     * (UnsupportedEncodingException ex) { jalview.bin.Console.errPrintln("WARNING -
      * IMPLEMENTATION ERROR - UNSUPPORTED ENCODING EXCEPTION FOR "+url);
      * ex.printStackTrace(); }
      */
     catch (java.net.MalformedURLException ex)
     {
       url = viewport.applet.getCodeBase() + url;
+    } catch (UnsupportedEncodingException ex)
+    {
+      jalview.bin.Console.errPrintln(
+              "WARNING = IMPLEMENTATION ERROR - UNSUPPORTED ENCODING EXCEPTION FOR "
+                      + url);
+      ex.printStackTrace();
     }
     return url;
   }
@@ -2005,13 +2013,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
   {
     try
     {
-
       if (copiedSequences == null)
       {
         return;
       }
 
-      StringTokenizer st = new StringTokenizer(copiedSequences.toString());
+      StringTokenizer st = new StringTokenizer(copiedSequences.toString(),
+              "\t");
       Vector seqs = new Vector();
       while (st.hasMoreElements())
       {
@@ -2072,7 +2080,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
             seqs, 0, viewport.getAlignment().getWidth(),
             viewport.getAlignment()));
 
-    viewport.getRanges().setEndSeq(viewport.getAlignment().getHeight());
+    viewport.getRanges().setEndSeq(viewport.getAlignment().getHeight() - 1); // BH
+                                                                             // 2019.04.18
     viewport.getAlignment().getWidth();
     viewport.firePropertyChange("alignment", null,
             viewport.getAlignment().getSequences());
@@ -2348,8 +2357,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
                 column, al);
       }
 
-      statusBar.setText(MessageManager
-              .formatMessage("label.removed_columns", new String[]
+      setStatus(MessageManager.formatMessage("label.removed_columns",
+              new String[]
               { Integer.valueOf(trimRegion.getSize()).toString() }));
       addHistoryItem(trimRegion);
 
@@ -2392,8 +2401,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
     addHistoryItem(removeGapCols);
 
-    statusBar.setText(MessageManager
-            .formatMessage("label.removed_empty_columns", new String[]
+    setStatus(MessageManager.formatMessage("label.removed_empty_columns",
+            new String[]
             { Integer.valueOf(removeGapCols.getSize()).toString() }));
 
     // This is to maintain viewport position on first residue
@@ -2966,7 +2975,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
     if (viewport.applet.debug)
     {
-      System.err.println("Sorting " + alorder.getOrder().size()
+      jalview.bin.Console.errPrintln("Sorting " + alorder.getOrder().size()
               + " in alignment '" + getTitle() + "'");
     }
     AlignmentSorter.sortBy(viewport.getAlignment(), alorder);
@@ -3052,7 +3061,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
   {
     if (viewport.applet == null)
     {
-      System.out.println("Not running as applet - no browser available.");
+      jalview.bin.Console
+              .outPrintln("Not running as applet - no browser available.");
     }
     else
     {
@@ -3511,17 +3521,17 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     hydrophobicityColour.setLabel(
             MessageManager.getString("label.colourScheme_hydrophobic"));
     hydrophobicityColour.addActionListener(this);
-    helixColour.setLabel(MessageManager
-            .getString("label.colourScheme_helix_propensity"));
+    helixColour.setLabel(
+            MessageManager.getString("label.colourScheme_helixpropensity"));
     helixColour.addActionListener(this);
     strandColour.setLabel(MessageManager
-            .getString("label.colourScheme_strand_propensity"));
+            .getString("label.colourScheme_strandpropensity"));
     strandColour.addActionListener(this);
     turnColour.setLabel(
-            MessageManager.getString("label.colourScheme_turn_propensity"));
+            MessageManager.getString("label.colourScheme_turnpropensity"));
     turnColour.addActionListener(this);
     buriedColour.setLabel(
-            MessageManager.getString("label.colourScheme_buried_index"));
+            MessageManager.getString("label.colourScheme_buriedindex"));
     buriedColour.addActionListener(this);
     purinePyrimidineColour.setLabel(MessageManager
             .getString("label.colourScheme_purine/pyrimidine"));
@@ -3530,19 +3540,19 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     // .getString("label.rna_interaction"));
     // RNAInteractionColour.addActionListener(this);
     RNAHelixColour.setLabel(
-            MessageManager.getString("label.colourScheme_rna_helices"));
+            MessageManager.getString("label.colourScheme_rnahelices"));
     RNAHelixColour.addActionListener(this);
     userDefinedColour
             .setLabel(MessageManager.getString("action.user_defined"));
     userDefinedColour.addActionListener(this);
     PIDColour.setLabel(
-            MessageManager.getString("label.colourScheme_%_identity"));
+            MessageManager.getString("label.colourScheme_%identity"));
     PIDColour.addActionListener(this);
     BLOSUM62Colour.setLabel(
             MessageManager.getString("label.colourScheme_blosum62"));
     BLOSUM62Colour.addActionListener(this);
     tcoffeeColour.setLabel(
-            MessageManager.getString("label.colourScheme_t-coffee_scores"));
+            MessageManager.getString("label.colourScheme_t-coffeescores"));
     // it will be enabled only if a score file is provided
     tcoffeeColour.setEnabled(false);
     tcoffeeColour.addActionListener(this);
@@ -3814,7 +3824,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
      */
     statusBar.setBackground(Color.white);
     statusBar.setFont(new java.awt.Font("Verdana", 0, 11));
-    statusBar.setText(MessageManager.getString("label.status_bar"));
+    setStatus(MessageManager.getString("label.status_bar"));
     this.add(statusBar, BorderLayout.SOUTH);
   }
 
@@ -3954,7 +3964,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
    * without an additional javascript library to exchange messages between the
    * distinct applets. See http://issues.jalview.org/browse/JAL-621
    * 
-   * @param viewer
+   * @param jmolViewer
    *          JmolViewer instance
    * @param sequenceIds
    *          - sequence Ids to search for associations
@@ -3968,13 +3978,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
       viewer = (Viewer) jmolviewer;
     } catch (ClassCastException ex)
     {
-      System.err.println(
+      jalview.bin.Console.errPrintln(
               "Unsupported viewer object :" + jmolviewer.getClass());
     }
     if (viewer == null)
     {
-      System.err.println("Can't use this object as a structure viewer:"
-              + jmolviewer.getClass());
+      jalview.bin.Console
+              .errPrintln("Can't use this object as a structure viewer:"
+                      + jmolviewer.getClass());
       return null;
     }
     SequenceI[] seqs = null;
@@ -4118,7 +4129,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     chains = (String[]) sqch[1];
     if (seqs == null || seqs.length == 0)
     {
-      System.err.println(
+      jalview.bin.Console.errPrintln(
               "JalviewLite.AlignFrame:newStructureView: No sequence to bind structure to.");
     }
     if (protocol == null)
@@ -4133,8 +4144,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
       }
       if (protocol == null)
       {
-        System.err.println("Couldn't work out protocol to open structure: "
-                + pdb.getId());
+        jalview.bin.Console
+                .errPrintln("Couldn't work out protocol to open structure: "
+                        + pdb.getId());
         return;
       }
     }
@@ -4142,10 +4154,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     {
       // register the association(s) and quit, don't create any windows.
       if (StructureSelectionManager.getStructureSelectionManager(applet)
-              .setMapping(seqs, chains, pdb.getFile(), protocol, null) == null)
+              .setMapping(seqs, chains, pdb.getFile(), protocol,
+                      null) == null)
       {
-        System.err.println("Failed to map " + pdb.getFile() + " ("
-                + protocol + ") to any sequences");
+        jalview.bin.Console.errPrintln("Failed to map " + pdb.getFile()
+                + " (" + protocol + ") to any sequences");
       }
       return;
     }
@@ -4166,7 +4179,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
       }
       if (ajm != null)
       {
-        System.err.println(
+        jalview.bin.Console.errPrintln(
                 "Incremental adding and aligning structure to existing Jmol view not yet implemented.");
         // try and add the pdb structure
         // ajm.addS
@@ -4182,7 +4195,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     }
     else
     {
-      new MCview.AppletPDBViewer(pdb, seqs, chains, alignPanel, protocol);
+      new mc_view.AppletPDBViewer(pdb, seqs, chains, alignPanel, protocol);
     }
 
   }
@@ -4191,7 +4204,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
           SequenceI[][] seqs, String[][] chains, String[] protocols)
   {
     // TODO Auto-generated method stub
-    System.err.println("Aligned Structure View: Not yet implemented.");
+    jalview.bin.Console
+            .errPrintln("Aligned Structure View: Not yet implemented.");
   }
 
   /**
@@ -4248,9 +4262,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     if (!file.isValid())
     {
       // TODO: raise dialog for gui
-      System.err.println("Problems parsing T-Coffee scores: "
+      jalview.bin.Console.errPrintln("Problems parsing T-Coffee scores: "
               + file.getWarningMessage());
-      System.err.println("Origin was:\n" + source);
+      jalview.bin.Console.errPrintln("Origin was:\n" + source);
       return false;
     }
 
@@ -4263,7 +4277,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
                     || aln.getWidth() != file.getWidth()))
     {
       // TODO: raise a dialog box here rather than bomb out.
-      System.err.println(
+      jalview.bin.Console.errPrintln(
               "The scores matrix does not match the alignment dimensions");
 
     }
@@ -4279,10 +4293,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     }
     else
     {
-      System.err.println("Problems resolving T-Coffee scores:");
+      jalview.bin.Console.errPrintln("Problems resolving T-Coffee scores:");
       if (file.getWarningMessage() != null)
       {
-        System.err.println(file.getWarningMessage());
+        jalview.bin.Console.errPrintln(file.getWarningMessage());
       }
     }
     return false;
@@ -4330,4 +4344,24 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     return alignPanel.av.featureSettings;
   }
 
+  @Override
+  public FeatureSettingsControllerI showFeatureSettingsUI()
+  {
+    return new FeatureSettings(alignPanel);
+  }
+
+  private Rectangle fs_bounds = null;
+
+  @Override
+  public void setFeatureSettingsGeometry(Rectangle bounds)
+  {
+    fs_bounds = bounds;
+  }
+
+  @Override
+  public Rectangle getFeatureSettingsGeometry()
+  {
+    return fs_bounds;
+  }
+
 }