Use propertyListener for alignment edits
[jalview.git] / src / jalview / gui / AlignFrame.java
index c1d383e..4b28166 100755 (executable)
@@ -76,32 +76,35 @@ public class AlignFrame
         getPreferredSize());\r
     alignPanel.setAnnotationVisible(viewport.getShowAnnotation());\r
 \r
+    String sortby = jalview.bin.Cache.getDefault("SORT_ALIGNMENT", "No sort");\r
+\r
+    if(sortby.equals("Id"))\r
+      sortIDMenuItem_actionPerformed(null);\r
+    else if(sortby.equals("Pairwise Identity"))\r
+      sortPairwiseMenuItem_actionPerformed(null);\r
+\r
     getContentPane().add(alignPanel, java.awt.BorderLayout.CENTER);\r
 \r
-    addInternalFrameListener(new InternalFrameAdapter()\r
+    viewport.addPropertyChangeListener(new PropertyChangeListener()\r
     {\r
-      public void internalFrameActivated(InternalFrameEvent evt)\r
-      {\r
-        javax.swing.SwingUtilities.invokeLater(new Runnable()\r
-        {\r
-          public void run()\r
-          {\r
-            alignPanel.requestFocus();\r
-          }\r
-        });\r
-      }\r
-    });\r
+     public void propertyChange(PropertyChangeEvent evt)\r
+     {\r
+       if (evt.getPropertyName().equals("alignment"))\r
+       {\r
+         alignmentChanged();\r
+       }\r
+     }\r
+   });\r
+\r
     addServiceListeners();\r
   }\r
 \r
   /* Set up intrinsic listeners for dynamically generated GUI bits. */\r
   private void addServiceListeners()\r
   {\r
-\r
-    final AlignFrame thisFrame = this;\r
     final java.beans.PropertyChangeListener thisListener;\r
     // Do this once to get current state\r
-    thisFrame.BuildWebServiceMenu();\r
+    BuildWebServiceMenu();\r
     Desktop.discoverer.addPropertyChangeListener(\r
         thisListener = new java.beans.PropertyChangeListener()\r
     {\r
@@ -111,7 +114,7 @@ public class AlignFrame
         if (evt.getPropertyName().equals("services"))\r
         {\r
           // System.out.println("Rebuilding web service menu");\r
-          thisFrame.BuildWebServiceMenu();\r
+          BuildWebServiceMenu();\r
         }\r
       }\r
     });\r
@@ -123,6 +126,7 @@ public class AlignFrame
       {\r
         // System.out.println("deregistering discoverer listener");\r
         Desktop.discoverer.removePropertyChangeListener(thisListener);\r
+        closeMenuItem_actionPerformed(null);\r
       }\r
       ;\r
     });\r
@@ -264,7 +268,8 @@ public class AlignFrame
       {\r
         java.io.PrintWriter out = new java.io.PrintWriter(\r
             new java.io.FileWriter(file));\r
-        out.println(output);\r
+\r
+        out.print(output);\r
         out.close();\r
         return true;\r
       }\r
@@ -348,6 +353,7 @@ public class AlignFrame
   {\r
     try\r
     {\r
+      PaintRefresher.components.remove(viewport.alignment);\r
       this.setClosed(true);\r
     }\r
     catch (Exception ex)\r
@@ -409,6 +415,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
   /**\r
@@ -421,9 +428,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
@@ -468,9 +473,6 @@ public class AlignFrame
 \r
     updateEditMenuBar();\r
 \r
-    viewport.updateConsensus();\r
-    viewport.updateConservation();\r
-    alignPanel.repaint();\r
     viewport.firePropertyChange("alignment", null,\r
                                 viewport.getAlignment().getSequences());\r
   }\r
@@ -699,20 +701,17 @@ public class AlignFrame
       }\r
       else\r
       {\r
-        viewport.firePropertyChange("alignment", null,\r
-                                    viewport.getAlignment().getSequences());\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
     catch (Exception ex)\r
     {\r
+        // could be anything being pasted in here\r
     }\r
 \r
-    // could be anything being pasted in here\r
+\r
   }\r
 \r
   /**\r
@@ -783,7 +782,6 @@ public class AlignFrame
                                   viewport.getAlignment().getSequences());\r
     }\r
 \r
-    viewport.resetSeqLimits(alignPanel.seqPanel.seqCanvas.getHeight());\r
 \r
     if (viewport.getAlignment().getHeight() < 1)\r
     {\r
@@ -795,10 +793,6 @@ public class AlignFrame
       {\r
       }\r
     }\r
-\r
-    viewport.updateConservation();\r
-    viewport.updateConsensus();\r
-    alignPanel.repaint();\r
   }\r
 \r
   /**\r
@@ -907,7 +901,7 @@ public class AlignFrame
         }\r
       }\r
 \r
-      alignPanel.repaint();\r
+      viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
     }\r
   }\r
 \r
@@ -945,7 +939,7 @@ public class AlignFrame
         }\r
       }\r
 \r
-      alignPanel.repaint();\r
+      viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
     }\r
   }\r
 \r
@@ -959,10 +953,16 @@ public class AlignFrame
     addHistoryItem(new HistoryItem("Remove Gapped Columns",\r
                                    viewport.alignment, 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
   /**\r
@@ -975,6 +975,12 @@ 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
+\r
     SequenceI current;\r
     int jSize;\r
 \r
@@ -1016,9 +1022,57 @@ public class AlignFrame
       while (j < end && j < jSize);\r
     }\r
 \r
-    viewport.updateConservation();\r
-    viewport.updateConsensus();\r
-    alignPanel.repaint();\r
+    viewport.setStartRes(seq.findIndex(startRes)-1);\r
+\r
+\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
@@ -1045,9 +1099,7 @@ public class AlignFrame
       }\r
     }\r
 \r
-    viewport.updateConservation();\r
-    viewport.updateConsensus();\r
-    alignPanel.repaint();\r
+    alignmentChanged();\r
   }\r
 \r
   /**\r