- else if(!stretchGroup.sequences.contains((Sequence)av.getAlignment().getSequenceAt(seq))\r
- || stretchGroup.getStartRes()>res\r
- || stretchGroup.getEndRes()<res)\r
- {\r
- stretchGroup = null;\r
-\r
- SequenceGroup[] allGroups = av.alignment.findAllGroups( (Sequence) av.\r
- getAlignment().\r
- getSequenceAt(seq));\r
-\r
- if (allGroups != null)\r
- for (int i = 0; i < allGroups.length; i++)\r
- if (allGroups[i].getStartRes() <= res &&\r
- allGroups[i].getEndRes() >= res)\r
- {\r
- stretchGroup = allGroups[i];\r
- av.setRubberbandGroup(stretchGroup);\r
- break;\r
- }\r
- }\r
+ int blankColumn = -1;\r
+\r
+ // drag to right\r
+ if (dragRight)\r
+ {\r
+\r
+ // Is it valid??\r
+ // Find the next gap before the end\r
+ // of the visible region boundary\r
+ if (av.hasHiddenColumns)\r
+ {\r
+ if(res-lastres > 1)\r
+ {\r
+ res = lastres+1;\r
+ }\r
+\r
+\r
+ int lastCol = av.getColumnSelection().\r
+ getHiddenRegionBoundary(res);\r
+\r
+ if(lastCol!=res)\r
+ {\r
+ for (blankColumn = lastCol;\r
+ blankColumn > lastres;\r
+ blankColumn--)\r
+ {\r
+ boolean blank = true;\r
+ for (int s = 0; s < sg.getSize(); s++)\r
+ {\r
+ seq = sg.getSequenceAt(s);\r
+\r
+ if (seq.getSequence().length() <= blankColumn)\r
+ {\r
+ continue;\r
+ }\r
+\r
+ if (!jalview.util.Comparison.isGap(\r
+ seq.getSequence().charAt(blankColumn)))\r
+ {\r
+ blank = false;\r
+ continue;\r
+ }\r
+ }\r
+ if (blank)\r
+ break;\r
+ }\r
+\r
+\r
+ if (blankColumn <= lastres)\r
+ {\r
+ endEditing();\r
+ return;\r
+ }\r
+ }\r
+ else\r
+ blankColumn = -1;\r
+\r
+ }\r
+\r
+ sg.setEndRes(sg.getEndRes() + (res - lastres));\r
+ }\r
+\r
+ // drag to left\r
+ else\r
+ {\r
+ /// Are we able to delete?\r
+ // ie are all columns blank?\r
+\r
+ for (int s = 0; s < sg.getSize(); s++)\r
+ {\r
+ seq = sg.getSequenceAt(s);\r
+\r
+ for (int j = res; j < lastres; j++)\r
+ {\r
+ if (seq.getSequence().length() <= j)\r
+ {\r
+ continue;\r
+ }\r
+\r
+ if (!jalview.util.Comparison.isGap(\r
+ seq.getSequence().charAt(j)))\r
+ {\r
+ // Not a gap, block edit not valid\r
+ endEditing();\r
+ return;\r
+ }\r
+ }\r
+ }\r
+\r
+ if(res<sg.getStartRes())\r
+ {\r
+ sg.setStartRes(sg.getStartRes() - 1);\r
+ }\r
+ sg.setEndRes(sg.getEndRes() - (lastres - res));\r
+ }\r
+\r
+ for (int i = 0; i < sg.getSize(); i++)\r
+ {\r
+ seq = sg.getSequenceAt(i);\r
+\r
+ // drag to right\r
+ if (dragRight)\r
+ {\r
+ for (int j = lastres; j < res; j++)\r
+ {\r
+ insertChar(j, seq, blankColumn);\r
+ }\r
+ }\r
+\r
+ // drag to left\r
+ else\r
+ {\r
+ for (int j = res; j < lastres; j++)\r
+ {\r
+ if (seq.getLength()-1 > res)\r
+ {\r
+ deleteChar(res, seq);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else /////Editing a single sequence///////////\r
+ {\r
+ seq = av.alignment.getSequenceAt(startseq);\r
+ if ((res < av.getAlignment().getWidth()) && (res > lastres))\r
+ {\r
+ // dragging to the right\r
+ for (int j = lastres; j < res; j++)\r
+ {\r
+ insertChar(j, seq, j);\r
+ }\r
+ }\r
+ else if ((res < av.getAlignment().getWidth()) &&\r
+ (res < lastres))\r
+ {\r
+ // dragging to the left\r
+ for (int j = lastres; j > res; j--)\r
+ {\r
+ if (jalview.util.Comparison.isGap(\r
+ av.alignment.getSequenceAt(startseq)\r
+ .getSequence().charAt(res)))\r
+ {\r
+ deleteChar(res, seq);\r
+ }\r
+ else\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ mouseDragging = true;\r
+ if(scrollThread!=null)\r
+ scrollThread.setEvent(evt);\r
+\r
+ endEdit = res;\r
+ lastres = res;\r
+ seqCanvas.repaint();\r
+ }\r