Alignment of node labels modified
[jalview.git] / src / jalview / appletgui / AlignFrame.java
index 7289fc4..289e761 100755 (executable)
@@ -48,40 +48,43 @@ public class AlignFrame
     add(alignPanel);\r
     alignPanel.validate();\r
 \r
-    String treeFile = applet.getParameter("treeFile");\r
-    if (treeFile != null)\r
+    if(applet!=null)\r
     {\r
-      try\r
+      String treeFile = applet.getParameter("treeFile");\r
+      if (treeFile != null)\r
       {\r
-        treeFile = treeFile;\r
-        jalview.io.NewickFile fin = new jalview.io.NewickFile(applet.\r
-            getCodeBase() + treeFile, "URL");\r
-        fin.parse();\r
+        try\r
+        {\r
+          treeFile = treeFile;\r
+          jalview.io.NewickFile fin = new jalview.io.NewickFile(applet.\r
+              getCodeBase() + treeFile, "URL");\r
+          fin.parse();\r
 \r
-        if (fin.getTree() != null)\r
+          if (fin.getTree() != null)\r
+          {\r
+            TreePanel tp = null;\r
+            tp = new TreePanel(viewport, viewport.getAlignment().getSequences(),\r
+                               fin, "FromFile", applet.getCodeBase() + treeFile);\r
+            jalview.bin.JalviewLite.addFrame(tp, treeFile, 600, 500);\r
+            addTreeMenuItem(tp, treeFile);\r
+          }\r
+        }\r
+        catch (Exception ex)\r
         {\r
-          TreePanel tp = null;\r
-          tp = new TreePanel(viewport, viewport.getAlignment().getSequences(),\r
-                             fin, "FromFile", applet.getCodeBase() + treeFile);\r
-          jalview.bin.JalviewLite.addFrame(tp, treeFile, 600, 500);\r
-          addTreeMenuItem(tp, treeFile);\r
+          ex.printStackTrace();\r
         }\r
       }\r
-      catch (Exception ex)\r
+\r
+      String param = applet.getParameter("sortBy");\r
+      if (param != null)\r
       {\r
-        ex.printStackTrace();\r
+        if (param.equalsIgnoreCase("Id"))\r
+          sortIDMenuItem_actionPerformed(null);\r
+        else if (param.equalsIgnoreCase("Pairwise Identity"))\r
+          sortPairwiseMenuItem_actionPerformed(null);\r
       }\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
@@ -127,6 +130,8 @@ public class AlignFrame
   {\r
     PaintRefresher.components.remove(viewport.alignment);\r
     dispose();\r
+    if(PaintRefresher.components.size()==0 && applet==null)\r
+      System.exit(0);\r
   }\r
 \r
   Stack historyList = new Stack();\r
@@ -623,30 +628,56 @@ 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
       seqs = viewport.alignment.getSequences();\r
 \r
-    for (int i = 0; i <seqs.size(); i++)\r
+    for (int i = 0; i < seqs.size(); i++)\r
     {\r
-      current = (SequenceI)seqs.elementAt(i);\r
+      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
+      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
     viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
   }\r
@@ -656,6 +687,8 @@ public class AlignFrame
     viewport.updateConsensus();\r
     viewport.updateConservation ();\r
     resetAllColourSchemes();\r
+    if(alignPanel.overviewPanel!=null)\r
+      alignPanel.overviewPanel.updateOverviewImage();\r
     alignPanel.repaint();\r
   }\r
 \r
@@ -1161,13 +1194,13 @@ public class AlignFrame
     if (viewport.getSelectionGroup() != null &&\r
         viewport.getSelectionGroup().getSize() > 3)\r
     {\r
-      tp = new TreePanel(alignPanel, viewport.getSelectionGroup().sequences, type,\r
+      tp = new TreePanel(viewport, viewport.getSelectionGroup().sequences, type,\r
                          pwType,\r
                          0, viewport.alignment.getWidth());\r
     }\r
     else\r
     {\r
-      tp = new TreePanel(alignPanel, viewport.getAlignment().getSequences(),\r
+      tp = new TreePanel(viewport, viewport.getAlignment().getSequences(),\r
                          type, pwType, 0, viewport.alignment.getWidth());\r
     }\r
 \r