Merge branch 'develop' into update_212_Dec_merge_with_21125_chamges
[jalview.git] / src / jalview / appletgui / AlignFrame.java
index 6a90bb5..63ba101 100644 (file)
@@ -95,6 +95,7 @@ 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;
@@ -106,6 +107,7 @@ 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;
@@ -234,6 +236,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
             alignPanel);
     viewport.updateConservation(alignPanel);
     viewport.updateConsensus(alignPanel);
+    viewport.initInformationWorker(alignPanel);
 
     displayNonconservedMenuItem.setState(viewport.getShowUnconserved());
     followMouseOverFlag.setState(viewport.isFollowHighlight());
@@ -574,8 +577,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
     case KeyEvent.VK_F2:
       viewport.cursorMode = !viewport.cursorMode;
-      setStatus(MessageManager
-              .formatMessage("label.keyboard_editing_mode", new String[]
+      setStatus(MessageManager.formatMessage("label.keyboard_editing_mode",
+              new String[]
               { (viewport.cursorMode ? "on" : "off") }));
       if (viewport.cursorMode)
       {
@@ -880,7 +883,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     }
     else if (source == autoCalculate)
     {
-      viewport.autoCalculateConsensus = autoCalculate.getState();
+      viewport.setAutoCalculateConsensusAndConservation(autoCalculate.getState());
     }
     else if (source == sortByTree)
     {
@@ -1202,7 +1205,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     }
     else if (source == featureSettings)
     {
-      new FeatureSettings(alignPanel);
+      showFeatureSettingsUI();
     }
     else if (source == alProperties)
     {
@@ -1322,6 +1325,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     {
       sortGroupMenuItem_actionPerformed();
     }
+    else if (source == sortEValueMenuItem)
+    {
+      sortEValueMenuItem_actionPerformed();
+    }
+    else if (source == sortBitScoreMenuItem)
+    {
+      sortBitScoreMenuItem_actionPerformed();
+    }
     else if (source == removeRedundancyMenuItem)
     {
       removeRedundancyMenuItem_actionPerformed();
@@ -1447,14 +1458,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     {
       features = formatter.printJalviewFormat(
               viewport.getAlignment().getSequencesArray(),
-              getDisplayedFeatureCols(), null, getDisplayedFeatureGroups(),
-              true);
+              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)
@@ -1571,7 +1581,7 @@ 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
@@ -1583,6 +1593,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     catch (java.net.MalformedURLException ex)
     {
       url = viewport.applet.getCodeBase() + url;
+    } catch (UnsupportedEncodingException ex)
+    {
+      System.err.println(
+              "WARNING = IMPLEMENTATION ERROR - UNSUPPORTED ENCODING EXCEPTION FOR "
+                      + url);
+      ex.printStackTrace();
     }
     return url;
   }
@@ -1693,8 +1709,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
                                           // viewport.getColumnSelection().getHiddenColumns()
                                           // != null;
     updateEditMenuBar();
-    originalSource.firePropertyChange("alignment", null,
-            originalSource.getAlignment().getSequences());
+    originalSource.notifyAlignment();
   }
 
   /**
@@ -1726,8 +1741,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
                                           // != null;
 
     updateEditMenuBar();
-    originalSource.firePropertyChange("alignment", null,
-            originalSource.getAlignment().getSequences());
+    originalSource.notifyAlignment();
   }
 
   AlignmentViewport getOriginatingSource(CommandI command)
@@ -2073,10 +2087,10 @@ 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());
+    viewport.notifyAlignment();
 
   }
 
@@ -2150,8 +2164,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     viewport.setSelectionGroup(null);
     viewport.getAlignment().deleteGroup(sg);
 
-    viewport.firePropertyChange("alignment", null,
-            viewport.getAlignment().getSequences());
+    viewport.notifyAlignment();
 
     if (viewport.getAlignment().getHeight() < 1)
     {
@@ -2349,8 +2362,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
                 column, al);
       }
 
-      setStatus(MessageManager
-              .formatMessage("label.removed_columns", new String[]
+      setStatus(MessageManager.formatMessage("label.removed_columns",
+              new String[]
               { Integer.valueOf(trimRegion.getSize()).toString() }));
       addHistoryItem(trimRegion);
 
@@ -2363,7 +2376,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
         }
       }
 
-      viewport.firePropertyChange("alignment", null, al.getSequences());
+      viewport.notifyAlignment();
     }
   }
 
@@ -2393,8 +2406,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
     addHistoryItem(removeGapCols);
 
-    setStatus(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
@@ -2407,7 +2420,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     // if (viewport.hasHiddenColumns)
     // viewport.getColumnSelection().compensateForEdits(shifts);
     ranges.setStartRes(seq.findIndex(startRes) - 1);
-    viewport.firePropertyChange("alignment", null, al.getSequences());
+    viewport.notifyAlignment();
 
   }
 
@@ -2441,7 +2454,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
     ranges.setStartRes(seq.findIndex(startRes) - 1);
 
-    viewport.firePropertyChange("alignment", null, al.getSequences());
+    viewport.notifyAlignment();
 
   }
 
@@ -2765,6 +2778,26 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   }
 
+  public void sortEValueMenuItem_actionPerformed()
+  {
+    SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
+    AlignmentSorter.sortByEValue(viewport.getAlignment());
+    addHistoryItem(new OrderCommand("Group Sort", oldOrder,
+            viewport.getAlignment()));
+    alignPanel.paintAlignment(true, false);
+
+  }
+
+  public void sortBitScoreMenuItem_actionPerformed()
+  {
+    SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
+    AlignmentSorter.sortByBitScore(viewport.getAlignment());
+    addHistoryItem(new OrderCommand("Group Sort", oldOrder,
+            viewport.getAlignment()));
+    alignPanel.paintAlignment(true, false);
+
+  }
+
   public void removeRedundancyMenuItem_actionPerformed()
   {
     new RedundancyPanel(alignPanel);
@@ -3115,6 +3148,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   MenuItem sortGroupMenuItem = new MenuItem();
 
+  MenuItem sortEValueMenuItem = new MenuItem();
+
+  MenuItem sortBitScoreMenuItem = new MenuItem();
+
   MenuItem removeRedundancyMenuItem = new MenuItem();
 
   MenuItem pairwiseAlignmentMenuItem = new MenuItem();
@@ -3512,17 +3549,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"));
@@ -3531,19 +3568,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);
@@ -3955,7 +3992,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
@@ -4143,7 +4180,8 @@ 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");
@@ -4331,4 +4369,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;
+  }
+
 }