TreePanel takes viewport
[jalview.git] / src / jalview / gui / AlignFrame.java
index 084ad7d..46b2cc5 100755 (executable)
@@ -68,6 +68,17 @@ public class AlignFrame
   {\r
     viewport = new AlignViewport(al);\r
 \r
+    if(viewport.vconsensus==null)\r
+    {\r
+      //Out of memory caluclating consensus.\r
+      BLOSUM62Colour.setEnabled(false);\r
+      PIDColour.setEnabled(false);\r
+      conservationMenuItem.setEnabled(false);\r
+      modifyConservation.setEnabled(false);\r
+      abovePIDThreshold.setEnabled(false);\r
+      modifyPID.setEnabled(false);\r
+    }\r
+\r
     alignPanel = new AlignmentPanel(this, viewport);\r
     alignPanel.annotationPanel.adjustPanelHeight();\r
     alignPanel.annotationSpaceFillerHolder.setPreferredSize(alignPanel.\r
@@ -76,21 +87,27 @@ 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
+\r
     addServiceListeners();\r
   }\r
 \r
@@ -410,6 +427,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
@@ -422,9 +440,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
@@ -469,9 +485,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
@@ -700,20 +713,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
@@ -778,13 +788,10 @@ public class AlignFrame
     viewport.setSelectionGroup(null);\r
     viewport.alignment.deleteGroup(sg);\r
 \r
-    if (seqsdeleted)\r
-    {\r
-      viewport.firePropertyChange("alignment", null,\r
+    viewport.firePropertyChange("alignment", null,\r
                                   viewport.getAlignment().getSequences());\r
-    }\r
 \r
-    viewport.resetSeqLimits(alignPanel.seqPanel.seqCanvas.getHeight());\r
+\r
 \r
     if (viewport.getAlignment().getHeight() < 1)\r
     {\r
@@ -796,10 +803,6 @@ public class AlignFrame
       {\r
       }\r
     }\r
-\r
-    viewport.updateConservation();\r
-    viewport.updateConsensus();\r
-    alignPanel.repaint();\r
   }\r
 \r
   /**\r
@@ -908,7 +911,7 @@ public class AlignFrame
         }\r
       }\r
 \r
-      alignPanel.repaint();\r
+      viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
     }\r
   }\r
 \r
@@ -946,7 +949,7 @@ public class AlignFrame
         }\r
       }\r
 \r
-      alignPanel.repaint();\r
+      viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
     }\r
   }\r
 \r
@@ -960,11 +963,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
-    resetAllClustalSchemes();\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
@@ -977,6 +985,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
@@ -1018,31 +1032,58 @@ public class AlignFrame
       while (j < end && j < jSize);\r
     }\r
 \r
-    resetAllClustalSchemes();\r
+    viewport.setStartRes(seq.findIndex(startRes)-1);\r
 \r
-    viewport.updateConservation();\r
-    viewport.updateConsensus();\r
-    alignPanel.repaint();\r
+    viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
   }\r
 \r
-  void resetAllClustalSchemes()\r
+ public void alignmentChanged()\r
+ {\r
+   if(viewport.vconsensus!=null)\r
+   {\r
+     viewport.updateConsensus();\r
+     viewport.updateConservation();\r
+   }\r
+   resetAllColourSchemes();\r
+   alignPanel.repaint();\r
+ }\r
+\r
+  void resetAllColourSchemes()\r
   {\r
-    if(viewport.getGlobalColourScheme()!=null\r
-       && viewport.getGlobalColourScheme() instanceof ClustalxColourScheme)\r
+    ColourSchemeI cs = viewport.globalColourScheme;\r
+    if(cs!=null)\r
     {\r
-      ((ClustalxColourScheme)viewport.getGlobalColourScheme()).\r
-          resetClustalX(viewport.alignment.getSequences(),\r
-                        viewport.alignment.getWidth());\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 instanceof ClustalxColourScheme)\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
@@ -1070,9 +1111,7 @@ public class AlignFrame
       }\r
     }\r
 \r
-    viewport.updateConservation();\r
-    viewport.updateConsensus();\r
-    alignPanel.repaint();\r
+    alignmentChanged();\r
   }\r
 \r
   /**\r