If vconsensus is null, return
[jalview.git] / src / jalview / appletgui / AlignFrame.java
index 1b5629f..7289fc4 100755 (executable)
@@ -39,24 +39,6 @@ public class AlignFrame
   public static final int NEW_WINDOW_HEIGHT = 500;\r
   jalview.bin.JalviewLite applet;\r
 \r
-  public AlignFrame(AlignmentI al)\r
-  {\r
-    this.applet = null;\r
-    viewport = new AlignViewport(al, null);\r
-    alignPanel = new AlignmentPanel(this, viewport);\r
-    add(alignPanel);\r
-    alignPanel.validate();\r
-\r
-    this.addWindowListener(new WindowAdapter()\r
-    {\r
-      public void windowClosing(WindowEvent e)\r
-      {\r
-        closeMenuItem_actionPerformed(null);\r
-      }\r
-    });\r
-\r
-  }\r
-\r
 \r
   public AlignFrame(AlignmentI al, jalview.bin.JalviewLite applet)\r
   {\r
@@ -91,6 +73,15 @@ public class AlignFrame
       }\r
     }\r
 \r
+    String param = applet.getParameter("sortBy");\r
+    if(param!=null)\r
+    {\r
+      if (param.equalsIgnoreCase("Id"))\r
+        sortIDMenuItem_actionPerformed(null);\r
+      else if (param.equalsIgnoreCase("Pairwise Identity"))\r
+        sortPairwiseMenuItem_actionPerformed(null);\r
+    }\r
+\r
     this.addWindowListener(new WindowAdapter()\r
     {\r
       public void windowClosing(WindowEvent e)\r
@@ -99,13 +90,21 @@ public class AlignFrame
           }\r
     });\r
 \r
-\r
-\r
+    viewport.addPropertyChangeListener(new java.beans.PropertyChangeListener()\r
+    {\r
+     public void propertyChange(java.beans.PropertyChangeEvent evt)\r
+     {\r
+       if (evt.getPropertyName().equals("alignment"))\r
+       {\r
+         alignmentChanged();\r
+       }\r
+     }\r
+   });\r
   }\r
 \r
   public void inputText_actionPerformed(ActionEvent e)\r
   {\r
-    CutAndPasteTransfer cap = new CutAndPasteTransfer(true);\r
+    CutAndPasteTransfer cap = new CutAndPasteTransfer(true, applet);\r
     Frame frame = new Frame();\r
     frame.add(cap);\r
     jalview.bin.JalviewLite.addFrame(frame, "Cut & Paste Input", 500, 500);\r
@@ -113,7 +112,7 @@ public class AlignFrame
 \r
   protected void outputText_actionPerformed(ActionEvent e)\r
   {\r
-    CutAndPasteTransfer cap = new CutAndPasteTransfer(false);\r
+    CutAndPasteTransfer cap = new CutAndPasteTransfer(false, applet);\r
     Frame frame = new Frame();\r
     frame.add(cap);\r
     jalview.bin.JalviewLite.addFrame(frame,\r
@@ -172,6 +171,7 @@ public class AlignFrame
     redoList.push(new HistoryItem(hi.getDescription(), viewport.alignment,\r
                                   HistoryItem.HIDE));\r
     restoreHistoryItem(hi);\r
+    viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
   }\r
 \r
   protected void redoMenuItem_actionPerformed(ActionEvent e)\r
@@ -179,9 +179,7 @@ public class AlignFrame
     HistoryItem hi = (HistoryItem) redoList.pop();\r
     restoreHistoryItem(hi);\r
     updateEditMenuBar();\r
-    viewport.updateConsensus();\r
-    alignPanel.repaint();\r
-    alignPanel.repaint();\r
+    viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
   }\r
 \r
   // used by undo and redo\r
@@ -225,9 +223,7 @@ public class AlignFrame
 \r
     updateEditMenuBar();\r
 \r
-    viewport.updateConsensus();\r
-    viewport.updateConservation();\r
-    alignPanel.repaint();\r
+    viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
   }\r
 \r
   public void moveSelectedSequences(boolean up)\r
@@ -418,9 +414,7 @@ public class AlignFrame
       {\r
         viewport.setEndSeq(viewport.alignment.getHeight());\r
         viewport.alignment.getWidth();\r
-        viewport.updateConservation();\r
-        viewport.updateConsensus();\r
-        alignPanel.repaint();\r
+        viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
       }\r
 \r
     }\r
@@ -486,9 +480,7 @@ public class AlignFrame
       catch (Exception ex)\r
       {}\r
     }\r
-    viewport.updateConservation();\r
-    viewport.updateConsensus();\r
-    alignPanel.repaint();\r
+    viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
 \r
   }\r
 \r
@@ -507,7 +499,7 @@ public class AlignFrame
     {\r
       sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);\r
     }\r
-    sg.setEndRes(viewport.alignment.getWidth());\r
+    sg.setEndRes(viewport.alignment.getWidth()-1);\r
     viewport.setSelectionGroup(sg);\r
     alignPanel.repaint();\r
     PaintRefresher.Refresh(null, viewport.alignment);\r
@@ -518,6 +510,7 @@ public class AlignFrame
     viewport.setSelectionGroup(null);\r
     viewport.getColumnSelection().clear();\r
     viewport.setSelectionGroup(null);\r
+    alignPanel.repaint();\r
     PaintRefresher.Refresh(null, viewport.alignment);\r
   }\r
 \r
@@ -557,8 +550,7 @@ public class AlignFrame
           viewport.alignment.deleteGroup(sg);\r
         }\r
       }\r
-\r
-      alignPanel.repaint();\r
+      viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
     }\r
   }\r
 \r
@@ -585,8 +577,7 @@ public class AlignFrame
           viewport.alignment.deleteGroup(sg);\r
         }\r
       }\r
-\r
-      alignPanel.repaint();\r
+      viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
     }\r
 \r
   }\r
@@ -596,10 +587,17 @@ public class AlignFrame
     addHistoryItem(new HistoryItem("Remove Gapped Columns",\r
                                    viewport.alignment,\r
                                    HistoryItem.HIDE));\r
+\r
+    //This is to maintain viewport position on first residue\r
+    //of first sequence\r
+    SequenceI seq = viewport.alignment.getSequenceAt(0);\r
+    int startRes = seq.findPosition(viewport.startRes);\r
+\r
     viewport.getAlignment().removeGaps();\r
-    viewport.updateConservation();\r
-    viewport.updateConsensus();\r
-    alignPanel.repaint();\r
+\r
+    viewport.setStartRes(seq.findIndex(startRes)-1);\r
+\r
+    viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
   }\r
 \r
   public void removeAllGapsMenuItem_actionPerformed(ActionEvent e)\r
@@ -607,6 +605,11 @@ public class AlignFrame
     addHistoryItem(new HistoryItem("Remove Gaps", viewport.alignment,\r
                                    HistoryItem.HIDE));\r
 \r
+    //This is to maintain viewport position on first residue\r
+    //of first sequence\r
+    SequenceI seq = viewport.alignment.getSequenceAt(0);\r
+    int startRes = seq.findPosition(viewport.startRes);\r
+\r
     SequenceI current;\r
     int jSize;\r
 \r
@@ -644,11 +647,58 @@ public class AlignFrame
       while(j < end && j < jSize) ;\r
     }\r
 \r
-    viewport.updateConservation();\r
+    viewport.setStartRes(seq.findIndex(startRes)-1);\r
+    viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
+  }\r
+\r
+  public void alignmentChanged()\r
+  {\r
     viewport.updateConsensus();\r
+    viewport.updateConservation ();\r
+    resetAllColourSchemes();\r
     alignPanel.repaint();\r
   }\r
 \r
+  void resetAllColourSchemes()\r
+  {\r
+    ColourSchemeI cs = viewport.globalColourScheme;\r
+    if(cs!=null)\r
+    {\r
+      if (cs instanceof ClustalxColourScheme)\r
+      {\r
+        ( (ClustalxColourScheme) viewport.getGlobalColourScheme()).\r
+            resetClustalX(viewport.alignment.getSequences(),\r
+                          viewport.alignment.getWidth());\r
+      }\r
+\r
+      cs.setConsensus(viewport.vconsensus);\r
+      if (cs.conservationApplied())\r
+      {\r
+        Alignment al = (Alignment) viewport.alignment;\r
+        Conservation c = new Conservation("All",\r
+                                          ResidueProperties.propHash, 3,\r
+                                          al.getSequences(), 0,\r
+                                          al.getWidth() - 1);\r
+        c.calculate();\r
+        c.verdict(false, viewport.ConsPercGaps);\r
+\r
+        cs.setConservation(c);\r
+      }\r
+    }\r
+\r
+    int s, sSize = viewport.alignment.getGroups().size();\r
+    for(s=0; s<sSize; s++)\r
+    {\r
+      SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s);\r
+      if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme)\r
+      {\r
+        ((ClustalxColourScheme)sg.cs).resetClustalX(sg.sequences, sg.getWidth());\r
+      }\r
+      sg.recalcConservation();\r
+    }\r
+  }\r
+\r
+\r
 \r
   public void findMenuItem_actionPerformed(ActionEvent e)\r
   {\r
@@ -918,6 +968,7 @@ public class AlignFrame
         else\r
         {\r
           sg.cs.setConservation(null);\r
+          sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());\r
         }\r
 \r
       }\r
@@ -1034,7 +1085,7 @@ public class AlignFrame
     if (viewport.getSelectionGroup().getSize() > 1)\r
     {\r
       Frame frame = new Frame();\r
-      frame.add(new PairwiseAlignPanel(viewport));\r
+      frame.add(new PairwiseAlignPanel(alignPanel));\r
       jalview.bin.JalviewLite.addFrame(frame, "Pairwise Alignment", 600, 500);\r
     }\r
   }\r
@@ -1110,13 +1161,13 @@ public class AlignFrame
     if (viewport.getSelectionGroup() != null &&\r
         viewport.getSelectionGroup().getSize() > 3)\r
     {\r
-      tp = new TreePanel(viewport, viewport.getSelectionGroup().sequences, type,\r
+      tp = new TreePanel(alignPanel, viewport.getSelectionGroup().sequences, type,\r
                          pwType,\r
                          0, viewport.alignment.getWidth());\r
     }\r
     else\r
     {\r
-      tp = new TreePanel(viewport, viewport.getAlignment().getSequences(),\r
+      tp = new TreePanel(alignPanel, viewport.getAlignment().getSequences(),\r
                          type, pwType, 0, viewport.alignment.getWidth());\r
     }\r
 \r