{\r
seqCanvas.cursorX += dx;\r
seqCanvas.cursorY += dy;\r
+ if (av.hasHiddenColumns && !av.colSel.isVisible(seqCanvas.cursorX))\r
+ {\r
+ int original = seqCanvas.cursorX - dx;\r
+ int maxWidth = av.alignment.getWidth();\r
+\r
+ while(!av.colSel.isVisible(seqCanvas.cursorX)\r
+ && seqCanvas.cursorX<maxWidth\r
+ && seqCanvas.cursorX>0)\r
+ {\r
+ seqCanvas.cursorX += dx;\r
+ }\r
+\r
+ if(seqCanvas.cursorX>=maxWidth\r
+ || !av.colSel.isVisible(seqCanvas.cursorX) )\r
+ {\r
+ seqCanvas.cursorX = original;\r
+ }\r
+ }\r
scrollToVisible();\r
}\r
\r
{\r
ap.scrollUp(false);\r
}\r
- while (seqCanvas.cursorX < av.startRes)\r
+ while (seqCanvas.cursorX < av.colSel.adjustForHiddenColumns(av.startRes))\r
{\r
\r
if (!ap.scrollRight(false))\r
break;\r
}\r
- while (seqCanvas.cursorX > av.endRes)\r
+ while (seqCanvas.cursorX > av.colSel.adjustForHiddenColumns(av.endRes))\r
{\r
if (!ap.scrollRight(true))\r
break;\r
SequenceGroup sg = av.selectionGroup;\r
//Find the top and bottom of this group\r
int min = av.alignment.getHeight(), max = 0;\r
- for(int i=0; i<sg.getSize(false); i++)\r
+ for(int i=0; i<sg.getSize(); i++)\r
{\r
int index = av.alignment.findIndex( sg.getSequenceAt(i) );\r
if(index > max)\r
else\r
{\r
// Now add any sequences between min and max\r
- sg.getSequences(false).removeAllElements();\r
+ sg.getSequences(null).removeAllElements();\r
for (int i = min; i < max; i++)\r
{\r
sg.addSequence(av.alignment.getSequenceAt(i), false);\r
boolean fixedColumns = false;\r
SequenceGroup sg = av.getSelectionGroup();\r
\r
+ SequenceI seq = av.alignment.getSequenceAt(startseq);\r
\r
if (!groupEditing && av.hasHiddenRows)\r
{\r
- if (av.alignment.getSequenceAt(startseq).getHiddenSequences() != null)\r
+ if (av.hiddenRepSequences!=null\r
+ && av.hiddenRepSequences.containsKey(seq))\r
{\r
+ sg = (SequenceGroup)av.hiddenRepSequences.get(seq);\r
groupEditing = true;\r
- }\r
- }\r
-\r
- //No group, but the sequence may represent a group\r
- if (groupEditing\r
- && sg == null\r
- && av.alignment.getSequenceAt(startseq).getHiddenSequences() == null)\r
- {\r
- groupEditing = false;\r
+ }\r
}\r
\r
- SequenceI seq = av.alignment.getSequenceAt(startseq);\r
StringBuffer message = new StringBuffer();\r
if (groupEditing)\r
{\r
\r
//Are we editing within a selection group?\r
if (groupEditing\r
- || (sg != null && sg.getSequences(true).contains(seq)))\r
+ || (sg != null && sg.getSequences(av.hiddenRepSequences).contains(seq)))\r
{\r
fixedColumns = true;\r
\r
//but the sequence represents a group\r
if (sg == null)\r
{\r
- sg = new SequenceGroup(null, null, false, false, false, 0,\r
- av.alignment.getWidth()-1);\r
- sg.addSequence(av.alignment.getSequenceAt(startseq), false);\r
+ sg = (SequenceGroup) av.hiddenRepSequences.get(seq);\r
}\r
\r
fixedLeft = sg.getStartRes();\r
\r
if (groupEditing)\r
{\r
- Vector vseqs = sg.getSequences(true);\r
+ Vector vseqs = sg.getSequences(av.hiddenRepSequences);\r
int g, groupSize = vseqs.size();\r
SequenceI[] groupSeqs = new SequenceI[groupSize];\r
for (g = 0; g < groupSeqs.length; g++)\r
\r
if (!blank)\r
{\r
- if(sg.getSize(false) == av.alignment.getHeight() )\r
+ if(sg.getSize() == av.alignment.getHeight() )\r
{\r
if((av.hasHiddenColumns\r
&& startres<av.getColumnSelection().getHiddenBoundaryRight(startres)))\r
}\r
}\r
\r
- else if (!stretchGroup.getSequences(false).contains(sequence)\r
+ else if (!stretchGroup.getSequences(null).contains(sequence)\r
|| stretchGroup.getStartRes() > res\r
|| stretchGroup.getEndRes() < res)\r
{\r
if (stretchGroup.cs instanceof ClustalxColourScheme)\r
{\r
( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(\r
- stretchGroup.getSequences(true),\r
+ stretchGroup.getSequences(av.hiddenRepSequences),\r
stretchGroup.getWidth());\r
}\r
\r
\r
Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq);\r
\r
- if (stretchGroup.getSequences(false).contains(nextSeq))\r
+ if (stretchGroup.getSequences(null).contains(nextSeq))\r
{\r
stretchGroup.deleteSequence(seq, false);\r
}\r