+\r
+ int hgap = av.charHeight;\r
+ if (av.scaleAboveWrapped)\r
+ hgap += av.charHeight;\r
+\r
+ int cHeight = av.getAlignment().getHeight() * av.charHeight\r
+ + hgap + seqCanvas.getAnnotationHeight();\r
+\r
+ int y = evt.getY();\r
+ y -= hgap;\r
+ x -= seqCanvas.LABEL_WEST;\r
+\r
+\r
+ int cwidth = seqCanvas.getWrappedCanvasWidth(this.getWidth());\r
+\r
+ wrappedBlock = y / cHeight;\r
+ wrappedBlock += av.getStartRes() / cwidth;\r
+\r
+ res = wrappedBlock * cwidth + x / av.getCharWidth();\r
+\r
+ }\r
+ else\r
+ {\r
+ res = (x / av.getCharWidth()) + av.getStartRes();\r
+ }\r
+\r
+ if(av.hasHiddenColumns)\r
+ res = av.getColumnSelection().adjustForHiddenColumns(res);\r
+\r
+ return res;\r
+\r
+ }\r
+\r
+ int findSeq(MouseEvent evt)\r
+ {\r
+\r
+ int seq = 0;\r
+ int y = evt.getY();\r
+\r
+ if (av.wrapAlignment)\r
+ {\r
+ int hgap = av.charHeight;\r
+ if (av.scaleAboveWrapped)\r
+ hgap += av.charHeight;\r
+\r
+ int cHeight = av.getAlignment().getHeight() * av.charHeight\r
+ + hgap + seqCanvas.getAnnotationHeight();\r
+\r
+ y -= hgap;\r
+\r
+ seq = ( (y % cHeight) / av.getCharHeight());\r
+ }\r
+ else\r
+ {\r
+ seq = (y / av.getCharHeight()) + av.getStartSeq();\r
+ }\r
+\r
+ return seq;\r
+ }\r
+\r
+ void endEditing()\r
+ {\r
+ startseq = -1;\r
+ lastres = -1;\r
+ seqEditOccurred = false;\r
+ editingSeqs = false;\r
+ groupEditing = false;\r
+ keyboardGaps = null;\r
+ }\r
+\r
+\r
+ void moveCursor(int dx, int dy)\r
+ {\r
+ seqCanvas.cursorX += dx;\r
+ seqCanvas.cursorY += dy;\r
+\r
+ if(seqCanvas.cursorX<0)\r
+ seqCanvas.cursorX = 0;\r
+ else if(seqCanvas.cursorX>av.alignment.getWidth()-1)\r
+ seqCanvas.cursorX = av.alignment.getWidth()-1;\r
+ if(seqCanvas.cursorX<av.startRes)\r
+ ap.scrollRight(false);\r
+ else if(seqCanvas.cursorX>av.endRes)\r
+ ap.scrollRight(true);\r
+\r
+ if(seqCanvas.cursorY<0)\r
+ seqCanvas.cursorY=0;\r
+ else if(seqCanvas.cursorY>av.alignment.getHeight()-1)\r
+ seqCanvas.cursorY = av.alignment.getHeight()-1;\r
+ if(seqCanvas.cursorY<av.startSeq)\r
+ ap.scrollUp(true);\r
+ else if(seqCanvas.cursorY+1>av.endSeq)\r
+ ap.scrollUp(false);\r
+\r
+ setStatusMessage(av.alignment.getSequenceAt(seqCanvas.cursorY),\r
+ seqCanvas.cursorX, seqCanvas.cursorY);\r
+ seqCanvas.repaint();\r
+ }\r
+\r
+ void setSelectionAreaAtCursor(boolean topLeft)\r
+ {\r
+ SequenceI sequence =\r
+ (Sequence) av.getAlignment().getSequenceAt(seqCanvas.cursorY);\r
+\r
+ if(av.getSelectionGroup()!=null)\r