block edit bug fixed
authoramwaterhouse <Andrew Waterhouse>
Thu, 19 May 2005 17:53:46 +0000 (17:53 +0000)
committeramwaterhouse <Andrew Waterhouse>
Thu, 19 May 2005 17:53:46 +0000 (17:53 +0000)
src/jalview/gui/SeqPanel.java

index 162f978..c43acf9 100755 (executable)
@@ -13,12 +13,8 @@ public class SeqPanel extends JPanel
   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 JPanel
 \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 JPanel
     seqEditOccurred = -1;\r
 \r
     ap.repaint();\r
-\r
   }\r
 \r
   public void doMousePressed(MouseEvent evt) {\r
@@ -137,19 +126,12 @@ public class SeqPanel extends JPanel
 \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
@@ -229,16 +211,19 @@ public class SeqPanel extends JPanel
   }\r
 \r
   public void doMouseDragged(MouseEvent evt) {\r
+\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
-    if(lastres==-1)\r
+    if (lastres == -1 || lastres == res)\r
       return;\r
 \r
-    int x = evt.getX();\r
+    boolean dragRight = true;\r
+    if (res < av.getAlignment().getWidth() && res < lastres)\r
+      dragRight = false;\r
 \r
-    int res = x/av.getCharWidth() + av.getStartRes();\r
-    if (res < 0)\r
-      res = 0;\r
 \r
     if (res != lastres)\r
     {\r
@@ -247,41 +232,48 @@ public class SeqPanel extends JPanel
         {\r
          SequenceGroup sg = av.getSelectionGroup();\r
           if(sg==null)\r
-            av.getAlignment().findGroup(startseq);\r
-          if (sg != null)\r
           {\r
-            boolean deleteAllowed = false;\r
-            if (res < av.getAlignment().getWidth() && res < lastres)\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
-              /// Are we able to delete?\r
-              boolean allGaps = true;\r
-              for (int i = 0; i < sg.getSize(); i++)\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
-                SequenceI s = sg.getSequenceAt(i);\r
-                for (int j = lastres-1; j >= res && allGaps; j--)\r
+                SequenceI seq = sg.getSequenceAt(s);\r
+                for (int j=res; j<lastres; j++)\r
                 {\r
-                    if (!jalview.util.Comparison.isGap(s.getSequence().charAt(j)))\r
-                    {\r
-                      res = j + 1;\r
-                      allGaps = false;\r
-                    }\r
-                }\r
-\r
-                if(!deleteAllowed && allGaps)\r
+                  if(seq.getSequence().length()<=j)\r
+                    continue;\r
+\r
+                  if(!jalview.util.Comparison.isGap(seq.getSequence().charAt(j)))\r
+                  {\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
-\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
@@ -290,21 +282,20 @@ public class SeqPanel extends JPanel
               int k = av.alignment.findIndex(s);\r
 \r
               // drag to right\r
-              if (res < av.getAlignment().getWidth() && res > lastres)\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
+              else\r
               {\r
                 for (int j = res; j < lastres; j++)\r
                 {\r
-                  deleteChar(j, k);\r
-                  startres = res;\r
+                  if(s.getLength()>j)\r
+                    deleteChar(res, k);\r
                 }\r
               }\r
             }\r
-          }\r
         }\r
         else /////Editing a single sequence///////////\r
         {\r
@@ -317,15 +308,13 @@ public class SeqPanel extends JPanel
           else if (res < av.getAlignment().getWidth() && res < lastres)\r
           {\r
             // dragging to the left\r
-            for (int j = res; j < lastres; j++)\r
+            for (int j = lastres; j > res; j--)\r
             {\r
-              deleteChar(j, startseq);\r
-              startres = res;\r
+              deleteChar(res, startseq);\r
             }\r
          }\r
 \r
        }\r
-\r
     }\r
 \r
     lastres = res;\r
@@ -347,8 +336,10 @@ public class SeqPanel extends JPanel
   {\r
 \r
     if ( jalview.util.Comparison.isGap( av.alignment.getSequenceAt(seq).getSequence().charAt(j)))\r
-      av.alignment.getSequenceAt(seq).deleteCharAt(j);\r
+    {  av.alignment.getSequenceAt(seq).deleteCharAt(j);\r
 \r
+    }\r
+    else System.out.println("err "+seq+" "+j);\r
     av.alignment.getWidth();\r
     repaint();\r
     seqEditOccurred=seq;\r