group editing bug fixed
authoramwaterhouse <Andrew Waterhouse>
Thu, 19 May 2005 17:47:37 +0000 (17:47 +0000)
committeramwaterhouse <Andrew Waterhouse>
Thu, 19 May 2005 17:47:37 +0000 (17:47 +0000)
src/jalview/appletgui/SeqPanel.java

index 7df2254..e6e02c5 100755 (executable)
@@ -13,12 +13,8 @@ public class SeqPanel extends Panel
   public    SeqCanvas         seqCanvas;\r
   public    AlignmentPanel    ap;\r
 \r
-  protected int startres;\r
   protected int lastres;\r
-  protected int endres;\r
-\r
   protected int startseq;\r
-  protected int padseq;\r
 \r
   protected AlignViewport av;\r
 \r
@@ -100,13 +96,7 @@ public class SeqPanel extends Panel
 \r
   public void doMouseReleased(MouseEvent evt) {\r
 \r
-    int x = evt.getX();\r
-    int res = x/av.getCharWidth() + av.getStartRes();\r
-\r
-    endres = res;\r
-\r
     startseq = -1;\r
-    startres = -1;\r
     lastres  = -1;\r
     if(seqEditOccurred>-1)\r
       updateConservation(seqEditOccurred);\r
@@ -114,7 +104,6 @@ public class SeqPanel extends Panel
     seqEditOccurred = -1;\r
 \r
     ap.repaint();\r
-\r
   }\r
 \r
   public void doMousePressed(MouseEvent evt) {\r
@@ -136,20 +125,11 @@ public class SeqPanel extends Panel
       // in the alignment\r
 \r
       startseq = seq;\r
-\r
-      if (startseq == (av.getAlignment().getHeight() - 1))\r
-        padseq = 1;\r
-      else\r
-        padseq = 1;\r
-\r
-      startres = res;\r
       lastres = res;\r
-\r
     }\r
     else\r
     {\r
       startseq = -1;\r
-      startres = -1;\r
       lastres = -1;\r
     }\r
 \r
@@ -226,107 +206,114 @@ public class SeqPanel extends Panel
   }\r
 \r
   public void doMouseDragged(MouseEvent evt) {\r
-    // If we're dragging we're editing\r
 \r
-    if(lastres==-1)\r
-      return;\r
+      // If we're dragging we're editing\r
+      int res = evt.getX() / av.getCharWidth() + av.getStartRes();\r
+      if (res < 0)\r
+        res = 0;\r
 \r
-    int x = evt.getX();\r
+      if (lastres == -1 || lastres == res)\r
+        return;\r
 \r
-    int res = x/av.getCharWidth() + av.getStartRes();\r
-    if (res < 0)\r
-      res = 0;\r
+      boolean dragRight = true;\r
+      if (res < av.getAlignment().getWidth() && res < lastres)\r
+        dragRight = false;\r
 \r
-    if (res != lastres)\r
-    {\r
-       // Group editing\r
-       if (evt.isAltDown() || evt.isControlDown())\r
-        {\r
-         SequenceGroup sg = av.getSelectionGroup();\r
-          if(sg==null)\r
-            av.getAlignment().findGroup(startseq);\r
-          if (sg != null)\r
+\r
+      if (res != lastres)\r
+      {\r
+          // Group editing\r
+          if (evt.isAltDown() || evt.isControlDown())\r
           {\r
-            boolean deleteAllowed = false;\r
-            if (res < av.getAlignment().getWidth() && res < lastres)\r
+            SequenceGroup sg = av.getSelectionGroup();\r
+            if(sg==null)\r
             {\r
-              /// Are we able to delete?\r
-              boolean allGaps = true;\r
-              for (int i = 0; i < sg.getSize(); i++)\r
+              lastres=-1;\r
+              return;\r
+            }\r
+\r
+              // drag to right\r
+              if(dragRight)\r
+                  sg.setEndRes(sg.getEndRes() + (res-lastres));\r
+\r
+              // drag to left\r
+              else\r
               {\r
-                SequenceI s = sg.getSequenceAt(i);\r
-                for (int j = lastres-1; j >= res && allGaps; j--)\r
+                 /// Are we able to delete?\r
+                 // ie are all columns blank?\r
+                 boolean deleteAllowed = false;\r
+                for (int s = 0; s < sg.getSize(); s++)\r
                 {\r
-                    if (!jalview.util.Comparison.isGap(s.getSequence().charAt(j)))\r
+                  SequenceI seq = sg.getSequenceAt(s);\r
+                  for (int j=res; j<lastres; j++)\r
+                  {\r
+                    if(seq.getSequence().length()<=j)\r
+                      continue;\r
+\r
+                    if(!jalview.util.Comparison.isGap(seq.getSequence().charAt(j)))\r
                     {\r
-                      res = j + 1;\r
-                      allGaps = false;\r
+                      // Not a gap, block edit not valid\r
+                      res=j+1;\r
+                      deleteAllowed = false;\r
+                      continue;\r
                     }\r
+                    deleteAllowed = true;\r
+                  }\r
                 }\r
 \r
-                if(!deleteAllowed && allGaps)\r
-                  deleteAllowed = true;\r
-              }\r
-            }\r
-\r
-            // drag to right\r
-            if (res < av.getAlignment().getWidth() && res > lastres)\r
-                sg.setEndRes(sg.getEndRes() + 1);\r
-\r
-            // drag to left\r
-            else if (deleteAllowed && res < av.getAlignment().getWidth() &&\r
-                     res < lastres)\r
-                sg.setEndRes(sg.getEndRes() - 1);\r
-\r
+                if(!deleteAllowed)\r
+                {\r
+                  lastres = -1;\r
+                  return;\r
+                }\r
 \r
+                sg.setEndRes(sg.getEndRes() - (lastres-res));\r
+              }\r
 \r
 \r
-            for (int i = 0; i < sg.getSize(); i++)\r
-            {\r
-              SequenceI s = sg.getSequenceAt(i);\r
-              int k = av.alignment.findIndex(s);\r
+              for (int i = 0; i < sg.getSize(); i++)\r
+              {\r
+                SequenceI s = sg.getSequenceAt(i);\r
+                int k = av.alignment.findIndex(s);\r
 \r
-              // drag to right\r
-              if (res < av.getAlignment().getWidth() && res > lastres)\r
-                for (int j = lastres; j < res; j++)\r
-                  insertChar(j, k);\r
+                // drag to right\r
+                if (dragRight)\r
+                  for (int j = lastres; j < res; j++)\r
+                    insertChar(j, k);\r
 \r
-              // drag to left\r
-              else if (deleteAllowed && res < av.getAlignment().getWidth() && res < lastres)\r
-              {\r
-                for (int j = res; j < lastres; j++)\r
+                // drag to left\r
+                else\r
                 {\r
-                  deleteChar(j, k);\r
-                  startres = res;\r
+                  for (int j = res; j < lastres; j++)\r
+                  {\r
+                    if(s.getLength()>j)\r
+                      deleteChar(res, k);\r
+                  }\r
                 }\r
               }\r
-            }\r
-          }\r
-        }\r
-        else /////Editing a single sequence///////////\r
-        {\r
-          if (res < av.getAlignment().getWidth() && res > lastres)\r
-          {\r
-            // dragging to the right\r
-            for (int j = lastres; j < res; j++)\r
-              insertChar(j, startseq);\r
           }\r
-          else if (res < av.getAlignment().getWidth() && res < lastres)\r
+          else /////Editing a single sequence///////////\r
           {\r
-            // dragging to the left\r
-            for (int j = res; j < lastres; j++)\r
+            if (res < av.getAlignment().getWidth() && res > lastres)\r
             {\r
-              deleteChar(j, startseq);\r
-              startres = res;\r
+              // dragging to the right\r
+              for (int j = lastres; j < res; j++)\r
+                insertChar(j, startseq);\r
+            }\r
+            else if (res < av.getAlignment().getWidth() && res < lastres)\r
+            {\r
+              // dragging to the left\r
+              for (int j = lastres; j > res; j--)\r
+              {\r
+                deleteChar(res, startseq);\r
+              }\r
             }\r
-         }\r
-\r
-       }\r
 \r
-    }\r
+          }\r
+      }\r
 \r
-    lastres = res;\r
-    seqCanvas.repaint();\r
+      lastres = res;\r
+      seqCanvas.repaint();\r
   }\r
 \r
   public void drawChars(int seqstart, int seqend, int start) {\r