Add header
[jalview.git] / src / jalview / gui / AlignFrame.java
index ba9237b..7984991 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
@@ -96,6 +107,7 @@ public class AlignFrame
      }\r
    });\r
 \r
+\r
     addServiceListeners();\r
   }\r
 \r
@@ -732,7 +744,6 @@ public class AlignFrame
    */\r
   protected void delete_actionPerformed(ActionEvent e)\r
   {\r
-    boolean seqsdeleted = false;\r
 \r
     if (viewport.getSelectionGroup() == null)\r
     {\r
@@ -764,7 +775,6 @@ public class AlignFrame
 \r
       if (seq.getSequence().length() < 1)\r
       {\r
-        seqsdeleted = true;\r
         viewport.getAlignment().deleteSequence(seq);\r
       }\r
       else\r
@@ -993,7 +1003,7 @@ public class AlignFrame
     {\r
       seqs = viewport.getSelectionGroup().sequences;\r
       start = viewport.getSelectionGroup().getStartRes();\r
-      end = viewport.getSelectionGroup().getEndRes();\r
+      end = viewport.getSelectionGroup().getEndRes()+1;\r
     }\r
     else\r
     {\r
@@ -1005,32 +1015,63 @@ public class AlignFrame
       current = (SequenceI) seqs.elementAt(i);\r
       jSize = current.getLength();\r
 \r
+      // Removing a range is much quicker than removing gaps\r
+      // one by one for long sequences\r
       int j = start;\r
+      int rangeStart=-1, rangeEnd=-1;\r
 \r
       do\r
       {\r
         if (jalview.util.Comparison.isGap(current.getCharAt(j)))\r
         {\r
-          current.deleteCharAt(j);\r
-          j--;\r
-          jSize--;\r
+          if(rangeStart==-1)\r
+           {\r
+             rangeStart = j;\r
+             rangeEnd = j+1;\r
+           }\r
+           else\r
+           {\r
+             rangeEnd++;\r
+           }\r
+           j++;\r
+        }\r
+        else\r
+        {\r
+          if(rangeStart>-1)\r
+          {\r
+            current.deleteChars(rangeStart, rangeEnd);\r
+            j-=rangeEnd-rangeStart;\r
+            jSize-=rangeEnd-rangeStart;\r
+            rangeStart = -1;\r
+            rangeEnd = -1;\r
+          }\r
+          else\r
+            j++;\r
         }\r
-        j++;\r
       }\r
       while (j < end && j < jSize);\r
+      if(rangeStart>-1)\r
+      {\r
+       current.deleteChars(rangeStart, rangeEnd);\r
+      }\r
     }\r
 \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
+   if(viewport.vconsensus!=null)\r
+   {\r
+     viewport.updateConsensus();\r
+     viewport.updateConservation();\r
+   }\r
    resetAllColourSchemes();\r
+   if(alignPanel.overviewPanel!=null)\r
+     alignPanel.overviewPanel.updateOverviewImage();\r
+\r
    alignPanel.repaint();\r
  }\r
 \r
@@ -1808,21 +1849,11 @@ public class AlignFrame
       return;\r
     }\r
 \r
-    try\r
-    {\r
       PCAPanel pcaPanel = new PCAPanel(viewport, null);\r
       JInternalFrame frame = new JInternalFrame();\r
       frame.setContentPane(pcaPanel);\r
       Desktop.addInternalFrame(frame, "Principal component analysis",\r
                                400, 400);\r
-    }\r
-    catch (java.lang.OutOfMemoryError ex)\r
-    {\r
-      JOptionPane.showInternalMessageDialog(this,\r
-                                            "Too many sequences selected\nfor Principal Component Analysis!!",\r
-                                            "Out of memory",\r
-                                            JOptionPane.WARNING_MESSAGE);\r
-    }\r
   }\r
 \r
   /**\r
@@ -2004,17 +2035,6 @@ public class AlignFrame
       }\r
       ;\r
     });\r
-    viewport.addPropertyChangeListener(new java.beans.PropertyChangeListener()\r
-    {\r
-      public void propertyChange(PropertyChangeEvent evt)\r
-      {\r
-        if (evt.getPropertyName().equals("alignment"))\r
-        {\r
-          treePanel.getTree().UpdatePlaceHolders( (Vector) evt.getNewValue());\r
-          treePanel.repaint();\r
-        }\r
-      }\r
-    });\r
   }\r
 \r
   /**\r