Merge branch 'master' of https://source.jalview.org/git/jalviewjs.git
[jalviewjs.git] / site / j2s / jalview / appletgui / SeqPanel.js
index 0a53904..3f3eccb 100644 (file)
-Clazz.declarePackage ("jalview.appletgui");\r
-Clazz.load (["awt2swing.Panel", "jalview.structure.SelectionListener", "$.SequenceListener", "java.awt.event.MouseListener", "$.MouseMotionListener", "java.lang.Thread"], "jalview.appletgui.SeqPanel", ["jalview.api.AlignViewportI", "jalview.appletgui.APopupMenu", "$.AlignViewport", "$.PaintRefresher", "$.SeqCanvas", "$.SliderPanel", "$.Tooltip", "jalview.commands.EditCommand", "jalview.datamodel.ColumnSelection", "$.SearchResults", "$.SequenceGroup", "jalview.schemes.ResidueProperties", "jalview.structure.StructureSelectionManager", "jalview.util.Comparison", "$.MappingUtils", "$.MessageManager", "java.awt.BorderLayout", "$.Font", "java.lang.StringBuffer", "$.StringBuilder", "java.util.Vector"], function () {\r
-c$ = Clazz.decorateAsClass (function () {\r
-this.seqCanvas = null;\r
-this.ap = null;\r
-this.lastres = 0;\r
-this.startseq = 0;\r
-this.av = null;\r
-this.seqEditOccurred = false;\r
-this.scrollThread = null;\r
-this.mouseDragging = false;\r
-this.editingSeqs = false;\r
-this.groupEditing = false;\r
-this.oldSeq = -1;\r
-this.changeEndSeq = false;\r
-this.changeStartSeq = false;\r
-this.changeEndRes = false;\r
-this.changeStartRes = false;\r
-this.stretchGroup = null;\r
-this.keyboardNo1 = null;\r
-this.keyboardNo2 = null;\r
-this.mouseWheelPressed = false;\r
-this.lastMousePress = null;\r
-this.editCommand = null;\r
-this.ssm = null;\r
-this.startWrapBlock = -1;\r
-this.wrappedBlock = -1;\r
-this.lastMessage = null;\r
-this.tooltip = null;\r
-if (!Clazz.isClassDefined ("jalview.appletgui.SeqPanel.ScrollThread")) {\r
-jalview.appletgui.SeqPanel.$SeqPanel$ScrollThread$ ();\r
-}\r
-Clazz.instantialize (this, arguments);\r
-}, jalview.appletgui, "SeqPanel", awt2swing.Panel, [java.awt.event.MouseMotionListener, java.awt.event.MouseListener, jalview.structure.SequenceListener, jalview.structure.SelectionListener]);\r
-Clazz.makeConstructor (c$, \r
-function (avp, p) {\r
-Clazz.superConstructor (this, jalview.appletgui.SeqPanel, []);\r
-this.av = avp;\r
-this.setName ("seqPanel");\r
-this.seqCanvas =  new jalview.appletgui.SeqCanvas (avp);\r
-this.setLayout ( new java.awt.BorderLayout ());\r
-this.add (this.seqCanvas);\r
-this.ap = p;\r
-this.seqCanvas.addMouseMotionListener (this);\r
-this.seqCanvas.addMouseListener (this);\r
-this.ssm = jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet);\r
-this.ssm.addStructureViewerListener (this);\r
-this.ssm.addSelectionListener (this);\r
-this.seqCanvas.repaint ();\r
-}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");\r
-Clazz.defineMethod (c$, "endEditing", \r
-function () {\r
-if (this.editCommand != null && this.editCommand.getSize () > 0) {\r
-this.ap.alignFrame.addHistoryItem (this.editCommand);\r
-this.av.firePropertyChange ("alignment", null, this.av.getAlignment ().getSequences ());\r
-}this.startseq = -1;\r
-this.lastres = -1;\r
-this.editingSeqs = false;\r
-this.groupEditing = false;\r
-this.keyboardNo1 = null;\r
-this.keyboardNo2 = null;\r
-this.editCommand = null;\r
-});\r
-Clazz.defineMethod (c$, "setCursorRow", \r
-function () {\r
-this.seqCanvas.cursorY = this.getKeyboardNo1 () - 1;\r
-this.scrollToVisible ();\r
-});\r
-Clazz.defineMethod (c$, "setCursorColumn", \r
-function () {\r
-this.seqCanvas.cursorX = this.getKeyboardNo1 () - 1;\r
-this.scrollToVisible ();\r
-});\r
-Clazz.defineMethod (c$, "setCursorRowAndColumn", \r
-function () {\r
-if (this.keyboardNo2 == null) {\r
-this.keyboardNo2 =  new StringBuffer ();\r
-} else {\r
-this.seqCanvas.cursorX = this.getKeyboardNo1 () - 1;\r
-this.seqCanvas.cursorY = this.getKeyboardNo2 () - 1;\r
-this.scrollToVisible ();\r
-}});\r
-Clazz.defineMethod (c$, "setCursorPosition", \r
-function () {\r
-var sequence = this.av.getAlignment ().getSequenceAt (this.seqCanvas.cursorY);\r
-this.seqCanvas.cursorX = sequence.findIndex (this.getKeyboardNo1 ()) - 1;\r
-this.scrollToVisible ();\r
-});\r
-Clazz.defineMethod (c$, "moveCursor", \r
-function (dx, dy) {\r
-this.seqCanvas.cursorX += dx;\r
-this.seqCanvas.cursorY += dy;\r
-if (this.av.hasHiddenColumns () && !this.av.getColumnSelection ().isVisible (this.seqCanvas.cursorX)) {\r
-var original = this.seqCanvas.cursorX - dx;\r
-var maxWidth = this.av.getAlignment ().getWidth ();\r
-while (!this.av.getColumnSelection ().isVisible (this.seqCanvas.cursorX) && this.seqCanvas.cursorX < maxWidth && this.seqCanvas.cursorX > 0) {\r
-this.seqCanvas.cursorX += dx;\r
-}\r
-if (this.seqCanvas.cursorX >= maxWidth || !this.av.getColumnSelection ().isVisible (this.seqCanvas.cursorX)) {\r
-this.seqCanvas.cursorX = original;\r
-}}this.scrollToVisible ();\r
-}, "~N,~N");\r
-Clazz.defineMethod (c$, "scrollToVisible", \r
-function () {\r
-if (this.seqCanvas.cursorX < 0) {\r
-this.seqCanvas.cursorX = 0;\r
-} else if (this.seqCanvas.cursorX > this.av.getAlignment ().getWidth () - 1) {\r
-this.seqCanvas.cursorX = this.av.getAlignment ().getWidth () - 1;\r
-}if (this.seqCanvas.cursorY < 0) {\r
-this.seqCanvas.cursorY = 0;\r
-} else if (this.seqCanvas.cursorY > this.av.getAlignment ().getHeight () - 1) {\r
-this.seqCanvas.cursorY = this.av.getAlignment ().getHeight () - 1;\r
-}this.endEditing ();\r
-if (this.av.getWrapAlignment ()) {\r
-this.ap.scrollToWrappedVisible (this.seqCanvas.cursorX);\r
-} else {\r
-while (this.seqCanvas.cursorY < this.av.startSeq) {\r
-this.ap.scrollUp (true);\r
-}\r
-while (this.seqCanvas.cursorY + 1 > this.av.endSeq) {\r
-this.ap.scrollUp (false);\r
-}\r
-while (this.seqCanvas.cursorX < this.av.getColumnSelection ().adjustForHiddenColumns (this.av.startRes)) {\r
-if (!this.ap.scrollRight (false)) {\r
-break;\r
-}}\r
-while (this.seqCanvas.cursorX > this.av.getColumnSelection ().adjustForHiddenColumns (this.av.endRes)) {\r
-if (!this.ap.scrollRight (true)) {\r
-break;\r
-}}\r
-}this.setStatusMessage (this.av.getAlignment ().getSequenceAt (this.seqCanvas.cursorY), this.seqCanvas.cursorX, this.seqCanvas.cursorY);\r
-this.seqCanvas.repaint ();\r
-});\r
-Clazz.defineMethod (c$, "setSelectionAreaAtCursor", \r
-function (topLeft) {\r
-var sequence = this.av.getAlignment ().getSequenceAt (this.seqCanvas.cursorY);\r
-if (this.av.getSelectionGroup () != null) {\r
-var sg = this.av.getSelectionGroup ();\r
-var min = this.av.getAlignment ().getHeight ();\r
-var max = 0;\r
-for (var i = 0; i < sg.getSize (); i++) {\r
-var index = this.av.getAlignment ().findIndex (sg.getSequenceAt (i));\r
-if (index > max) {\r
-max = index;\r
-}if (index < min) {\r
-min = index;\r
-}}\r
-max++;\r
-if (topLeft) {\r
-sg.setStartRes (this.seqCanvas.cursorX);\r
-if (sg.getEndRes () < this.seqCanvas.cursorX) {\r
-sg.setEndRes (this.seqCanvas.cursorX);\r
-}min = this.seqCanvas.cursorY;\r
-} else {\r
-sg.setEndRes (this.seqCanvas.cursorX);\r
-if (sg.getStartRes () > this.seqCanvas.cursorX) {\r
-sg.setStartRes (this.seqCanvas.cursorX);\r
-}max = this.seqCanvas.cursorY + 1;\r
-}if (min > max) {\r
-this.av.setSelectionGroup (null);\r
-} else {\r
-sg.clear ();\r
-for (var i = min; i < max; i++) {\r
-sg.addSequence (this.av.getAlignment ().getSequenceAt (i), false);\r
-}\r
-}}if (this.av.getSelectionGroup () == null) {\r
-var sg =  new jalview.datamodel.SequenceGroup ();\r
-sg.setStartRes (this.seqCanvas.cursorX);\r
-sg.setEndRes (this.seqCanvas.cursorX);\r
-sg.addSequence (sequence, false);\r
-this.av.setSelectionGroup (sg);\r
-}this.ap.paintAlignment (false);\r
-this.av.sendSelection ();\r
-}, "~B");\r
-Clazz.defineMethod (c$, "insertGapAtCursor", \r
-function (group) {\r
-this.groupEditing = group;\r
-this.startseq = this.seqCanvas.cursorY;\r
-this.lastres = this.seqCanvas.cursorX;\r
-this.editSequence (true, this.seqCanvas.cursorX + this.getKeyboardNo1 ());\r
-this.endEditing ();\r
-}, "~B");\r
-Clazz.defineMethod (c$, "deleteGapAtCursor", \r
-function (group) {\r
-this.groupEditing = group;\r
-this.startseq = this.seqCanvas.cursorY;\r
-this.lastres = this.seqCanvas.cursorX + this.getKeyboardNo1 ();\r
-this.editSequence (false, this.seqCanvas.cursorX);\r
-this.endEditing ();\r
-}, "~B");\r
-Clazz.defineMethod (c$, "numberPressed", \r
-function (value) {\r
-if (this.keyboardNo1 == null) {\r
-this.keyboardNo1 =  new StringBuffer ();\r
-}if (this.keyboardNo2 != null) {\r
-this.keyboardNo2.append (value);\r
-} else {\r
-this.keyboardNo1.append (value);\r
-}}, "~S");\r
-Clazz.defineMethod (c$, "getKeyboardNo1", \r
-function () {\r
-try {\r
-if (this.keyboardNo1 != null) {\r
-var value = Integer.parseInt (this.keyboardNo1.toString ());\r
-this.keyboardNo1 = null;\r
-return value;\r
-}} catch (x) {\r
-if (Clazz.exceptionOf (x, Exception)) {\r
-} else {\r
-throw x;\r
-}\r
-}\r
-this.keyboardNo1 = null;\r
-return 1;\r
-});\r
-Clazz.defineMethod (c$, "getKeyboardNo2", \r
-function () {\r
-try {\r
-if (this.keyboardNo2 != null) {\r
-var value = Integer.parseInt (this.keyboardNo2.toString ());\r
-this.keyboardNo2 = null;\r
-return value;\r
-}} catch (x) {\r
-if (Clazz.exceptionOf (x, Exception)) {\r
-} else {\r
-throw x;\r
-}\r
-}\r
-this.keyboardNo2 = null;\r
-return 1;\r
-});\r
-Clazz.defineMethod (c$, "setStatusMessage", \r
-function (sequence, res, seq) {\r
-var text =  new StringBuilder (32);\r
-var seqno = seq == -1 ? "" : " " + (seq + 1);\r
-text.append ("Sequence" + seqno + " ID: " + sequence.getName ());\r
-var residue = null;\r
-var displayChar = String.valueOf (sequence.getCharAt (res));\r
-if (this.av.getAlignment ().isNucleotide ()) {\r
-residue = jalview.schemes.ResidueProperties.nucleotideName.get (displayChar);\r
-if (residue != null) {\r
-text.append (" Nucleotide: ").append (residue);\r
-}} else {\r
-residue = "X".equalsIgnoreCase (displayChar) ? "X" : jalview.schemes.ResidueProperties.aa2Triplet.get (displayChar);\r
-if (residue != null) {\r
-text.append (" Residue: ").append (residue);\r
-}}var pos = -1;\r
-if (residue != null) {\r
-pos = sequence.findPosition (res);\r
-text.append (" (").append (Integer.toString (pos)).append (")");\r
-}this.ap.alignFrame.setStatus (text.toString ());\r
-}, "jalview.datamodel.SequenceI,~N,~N");\r
-Clazz.defineMethod (c$, "setStatusMessage", \r
- function (results) {\r
-var matches = results.getResults ();\r
-if (!matches.isEmpty ()) {\r
-var m = matches.get (0);\r
-var seq = m.getSequence ();\r
-var sequenceIndex = this.av.getAlignment ().findIndex (seq);\r
-var start = m.getStart () - 1;\r
-this.setStatusMessage (seq, start, sequenceIndex);\r
-}}, "jalview.datamodel.SearchResults");\r
-Clazz.overrideMethod (c$, "mousePressed", \r
-function (evt) {\r
-this.lastMousePress = evt.getPoint ();\r
-if ((evt.getModifiers () & 8) == 8 && !this.av.MAC) {\r
-this.mouseWheelPressed = true;\r
-return;\r
-}if (evt.isShiftDown () || evt.isControlDown () || evt.isAltDown ()) {\r
-if (evt.isControlDown () || evt.isAltDown ()) {\r
-this.groupEditing = true;\r
-}this.editingSeqs = true;\r
-} else {\r
-this.doMousePressedDefineMode (evt);\r
-return;\r
-}var seq = this.findSeq (evt);\r
-var res = this.findRes (evt);\r
-if (seq < 0 || res < 0) {\r
-return;\r
-}if ((seq < this.av.getAlignment ().getHeight ()) && (res < this.av.getAlignment ().getSequenceAt (seq).getLength ())) {\r
-this.startseq = seq;\r
-this.lastres = res;\r
-} else {\r
-this.startseq = -1;\r
-this.lastres = -1;\r
-}return;\r
-}, "java.awt.event.MouseEvent");\r
-Clazz.overrideMethod (c$, "mouseClicked", \r
-function (evt) {\r
-var sequence = this.av.getAlignment ().getSequenceAt (this.findSeq (evt));\r
-if (evt.getClickCount () > 1) {\r
-if (this.av.getSelectionGroup () != null && this.av.getSelectionGroup ().getSize () == 1 && this.av.getSelectionGroup ().getEndRes () - this.av.getSelectionGroup ().getStartRes () < 2) {\r
-this.av.setSelectionGroup (null);\r
-}var features = this.findFeaturesAtRes (sequence, sequence.findPosition (this.findRes (evt)));\r
-if (features != null && features.length > 0) {\r
-var highlight =  new jalview.datamodel.SearchResults ();\r
-highlight.addResult (sequence, features[0].getBegin (), features[0].getEnd ());\r
-this.seqCanvas.highlightSearchResults (highlight);\r
-}if (features != null && features.length > 0) {\r
-this.seqCanvas.getFeatureRenderer ().amendFeatures ( Clazz.newArray (-1, [sequence]), features, false, this.ap);\r
-this.seqCanvas.highlightSearchResults (null);\r
-}}}, "java.awt.event.MouseEvent");\r
-Clazz.overrideMethod (c$, "mouseReleased", \r
-function (evt) {\r
-this.mouseDragging = false;\r
-this.mouseWheelPressed = false;\r
-this.ap.paintAlignment (true);\r
-if (!this.editingSeqs) {\r
-this.doMouseReleasedDefineMode (evt);\r
-return;\r
-}this.endEditing ();\r
-}, "java.awt.event.MouseEvent");\r
-Clazz.defineMethod (c$, "findRes", \r
-function (evt) {\r
-var res = 0;\r
-var x = evt.getX ();\r
-if (this.av.getWrapAlignment ()) {\r
-var hgap = this.av.getCharHeight ();\r
-if (this.av.getScaleAboveWrapped ()) {\r
-hgap += this.av.getCharHeight ();\r
-}var cHeight = this.av.getAlignment ().getHeight () * this.av.getCharHeight () + hgap + this.seqCanvas.getAnnotationHeight ();\r
-var y = evt.getY ();\r
-y -= hgap;\r
-x -= this.seqCanvas.LABEL_WEST;\r
-var cwidth = this.seqCanvas.getWrappedCanvasWidth (this.getSize ().width);\r
-if (cwidth < 1) {\r
-return 0;\r
-}this.wrappedBlock = Clazz.doubleToInt (y / cHeight);\r
-this.wrappedBlock += Clazz.doubleToInt (this.av.getStartRes () / cwidth);\r
-res = this.wrappedBlock * cwidth + Clazz.doubleToInt (x / this.av.getCharWidth ());\r
-} else {\r
-res = (Clazz.doubleToInt (x / this.av.getCharWidth ())) + this.av.getStartRes ();\r
-}if (this.av.hasHiddenColumns ()) {\r
-res = this.av.getColumnSelection ().adjustForHiddenColumns (res);\r
-}return res;\r
-}, "java.awt.event.MouseEvent");\r
-Clazz.defineMethod (c$, "findSeq", \r
-function (evt) {\r
-var sqnum = this.findAlRow (evt);\r
-return (sqnum < 0) ? 0 : sqnum;\r
-}, "java.awt.event.MouseEvent");\r
-Clazz.defineMethod (c$, "findAlRow", \r
- function (evt) {\r
-var seq = 0;\r
-var y = evt.getY ();\r
-if (this.av.getWrapAlignment ()) {\r
-var hgap = this.av.getCharHeight ();\r
-if (this.av.getScaleAboveWrapped ()) {\r
-hgap += this.av.getCharHeight ();\r
-}var cHeight = this.av.getAlignment ().getHeight () * this.av.getCharHeight () + hgap + this.seqCanvas.getAnnotationHeight ();\r
-y -= hgap;\r
-seq = Math.min (Clazz.doubleToInt ((y % cHeight) / this.av.getCharHeight ()), this.av.getAlignment ().getHeight () - 1);\r
-if (seq < 0) {\r
-seq = -1;\r
-}} else {\r
-seq = Math.min ((Clazz.doubleToInt (y / this.av.getCharHeight ())) + this.av.getStartSeq (), this.av.getAlignment ().getHeight () - 1);\r
-if (seq < 0) {\r
-seq = -1;\r
-}}return seq;\r
-}, "java.awt.event.MouseEvent");\r
-Clazz.defineMethod (c$, "doMousePressed", \r
-function (evt) {\r
-var seq = this.findSeq (evt);\r
-var res = this.findRes (evt);\r
-if (seq < this.av.getAlignment ().getHeight () && res < this.av.getAlignment ().getSequenceAt (seq).getLength ()) {\r
-this.startseq = seq;\r
-this.lastres = res;\r
-} else {\r
-this.startseq = -1;\r
-this.lastres = -1;\r
-}return;\r
-}, "java.awt.event.MouseEvent");\r
-Clazz.overrideMethod (c$, "mouseOverSequence", \r
-function (sequence, index, pos) {\r
-var tmp = sequence.hashCode () + index + "";\r
-if (this.lastMessage == null || !this.lastMessage.equals (tmp)) {\r
-this.ssm.mouseOverSequence (sequence, index, pos, this.av);\r
-}this.lastMessage = tmp;\r
-}, "jalview.datamodel.SequenceI,~N,~N");\r
-Clazz.overrideMethod (c$, "highlightSequence", \r
-function (results) {\r
-if (this.av.isFollowHighlight ()) {\r
-if (this.ap.scrollToPosition (results, true)) {\r
-this.ap.alignFrame.repaint ();\r
-}}this.setStatusMessage (results);\r
-this.seqCanvas.highlightSearchResults (results);\r
-}, "jalview.datamodel.SearchResults");\r
-Clazz.overrideMethod (c$, "getVamsasSource", \r
-function () {\r
-return this.ap == null ? null : this.ap.av;\r
-});\r
-Clazz.overrideMethod (c$, "updateColours", \r
-function (seq, index) {\r
-System.out.println ("update the seqPanel colours");\r
-}, "jalview.datamodel.SequenceI,~N");\r
-Clazz.overrideMethod (c$, "mouseMoved", \r
-function (evt) {\r
-var res = this.findRes (evt);\r
-var seq = this.findSeq (evt);\r
-if (seq >= this.av.getAlignment ().getHeight () || seq < 0 || res < 0) {\r
-if (this.tooltip != null) {\r
-this.tooltip.setTip ("");\r
-}return;\r
-}var sequence = this.av.getAlignment ().getSequenceAt (seq);\r
-if (res > sequence.getLength ()) {\r
-if (this.tooltip != null) {\r
-this.tooltip.setTip ("");\r
-}return;\r
-}var respos = sequence.findPosition (res);\r
-if (this.ssm != null) {\r
-this.mouseOverSequence (sequence, res, respos);\r
-}var text =  new StringBuilder ();\r
-text.append ("Sequence ").append (Integer.toString (seq + 1)).append (" ID: ").append (sequence.getName ());\r
-var obj = null;\r
-var ch = String.valueOf (sequence.getCharAt (res));\r
-if (this.av.getAlignment ().isNucleotide ()) {\r
-obj = jalview.schemes.ResidueProperties.nucleotideName.get (ch);\r
-if (obj != null) {\r
-text.append (" Nucleotide: ").append (obj);\r
-}} else {\r
-obj = "X".equalsIgnoreCase (ch) ? "X" : jalview.schemes.ResidueProperties.aa2Triplet.get (ch);\r
-if (obj != null) {\r
-text.append (" Residue: ").append (obj);\r
-}}if (obj != null) {\r
-text.append (" (").append (Integer.toString (respos)).append (")");\r
-}this.ap.alignFrame.setStatus (text.toString ());\r
-var tooltipText =  new StringBuilder ();\r
-var groups = this.av.getAlignment ().findAllGroups (sequence);\r
-if (groups != null) {\r
-for (var g = 0; g < groups.length; g++) {\r
-if (groups[g].getStartRes () <= res && groups[g].getEndRes () >= res) {\r
-if (!groups[g].getName ().startsWith ("JTreeGroup") && !groups[g].getName ().startsWith ("JGroup")) {\r
-tooltipText.append (groups[g].getName ()).append (" ");\r
-}if (groups[g].getDescription () != null) {\r
-tooltipText.append (groups[g].getDescription ());\r
-}tooltipText.append ("\n");\r
-}}\r
-}var allFeatures = this.findFeaturesAtRes (sequence, sequence.findPosition (res));\r
-var index = 0;\r
-while (index < allFeatures.length) {\r
-var sf = allFeatures[index];\r
-tooltipText.append (sf.getType () + " " + sf.begin + ":" + sf.end);\r
-if (sf.getDescription () != null) {\r
-tooltipText.append (" " + sf.getDescription ());\r
-}if (sf.getValue ("status") != null) {\r
-var status = sf.getValue ("status").toString ();\r
-if (status.length > 0) {\r
-tooltipText.append (" (" + sf.getValue ("status") + ")");\r
-}}tooltipText.append ("\n");\r
-index++;\r
-}\r
-if (this.tooltip == null) {\r
-this.tooltip =  new jalview.appletgui.Tooltip (tooltipText.toString (), this.seqCanvas);\r
-} else {\r
-this.tooltip.setTip (tooltipText.toString ());\r
-}}, "java.awt.event.MouseEvent");\r
-Clazz.defineMethod (c$, "findFeaturesAtRes", \r
-function (sequence, res) {\r
-var tmp =  new java.util.Vector ();\r
-var features = sequence.getSequenceFeatures ();\r
-if (features != null) {\r
-for (var i = 0; i < features.length; i++) {\r
-if (this.av.getFeaturesDisplayed () == null || !this.av.getFeaturesDisplayed ().isVisible (features[i].getType ())) {\r
-continue;\r
-}if (features[i].featureGroup != null && !this.seqCanvas.fr.checkGroupVisibility (features[i].featureGroup, false)) {\r
-continue;\r
-}if ((features[i].getBegin () <= res) && (features[i].getEnd () >= res)) {\r
-tmp.addElement (features[i]);\r
-}}\r
-}features =  new Array (tmp.size ());\r
-tmp.copyInto (features);\r
-return features;\r
-}, "jalview.datamodel.SequenceI,~N");\r
-Clazz.overrideMethod (c$, "mouseDragged", \r
-function (evt) {\r
-if (this.mouseWheelPressed) {\r
-var oldWidth = this.av.getCharWidth ();\r
-if (Math.abs (evt.getY () - this.lastMousePress.y) > Math.abs (evt.getX () - this.lastMousePress.x)) {\r
-var fontSize = this.av.font.getSize ();\r
-if (evt.getY () < this.lastMousePress.y && this.av.getCharHeight () > 1) {\r
-fontSize--;\r
-} else if (evt.getY () > this.lastMousePress.y) {\r
-fontSize++;\r
-}if (fontSize < 1) {\r
-fontSize = 1;\r
-}this.av.setFont ( new java.awt.Font (this.av.font.getName (), this.av.font.getStyle (), fontSize));\r
-this.av.setCharWidth (oldWidth);\r
-} else {\r
-if (evt.getX () < this.lastMousePress.x && this.av.getCharWidth () > 1) {\r
-this.av.setCharWidth (this.av.getCharWidth () - 1);\r
-} else if (evt.getX () > this.lastMousePress.x) {\r
-this.av.setCharWidth (this.av.getCharWidth () + 1);\r
-}if (this.av.getCharWidth () < 1) {\r
-this.av.setCharWidth (1);\r
-}}this.ap.fontChanged ();\r
-var fm = this.getFontMetrics (this.av.getFont ());\r
-this.av.validCharWidth = fm.charWidth ('M') <= this.av.getCharWidth ();\r
-this.lastMousePress = evt.getPoint ();\r
-this.ap.paintAlignment (false);\r
-this.ap.annotationPanel.image = null;\r
-return;\r
-}if (!this.editingSeqs) {\r
-this.doMouseDraggedDefineMode (evt);\r
-return;\r
-}var res = this.findRes (evt);\r
-if (res < 0) {\r
-res = 0;\r
-}if ((this.lastres == -1) || (this.lastres == res)) {\r
-return;\r
-}if ((res < this.av.getAlignment ().getWidth ()) && (res < this.lastres)) {\r
-this.editSequence (false, res);\r
-} else {\r
-this.editSequence (true, res);\r
-}this.mouseDragging = true;\r
-if (this.scrollThread != null) {\r
-this.scrollThread.setEvent (evt);\r
-}}, "java.awt.event.MouseEvent");\r
-Clazz.defineMethod (c$, "editSequence", \r
-function (insertGap, startres) {\r
-var fixedLeft = -1;\r
-var fixedRight = -1;\r
-var fixedColumns = false;\r
-var sg = this.av.getSelectionGroup ();\r
-var seq = this.av.getAlignment ().getSequenceAt (this.startseq);\r
-if (!this.groupEditing && this.av.hasHiddenRows ()) {\r
-if (this.av.isHiddenRepSequence (seq)) {\r
-sg = this.av.getRepresentedSequences (seq);\r
-this.groupEditing = true;\r
-}}var message =  new StringBuffer ();\r
-if (this.groupEditing) {\r
-message.append (jalview.util.MessageManager.getString ("action.edit_group")).append (":");\r
-if (this.editCommand == null) {\r
-this.editCommand =  new jalview.commands.EditCommand (jalview.util.MessageManager.getString ("action.edit_group"));\r
-}} else {\r
-message.append (jalview.util.MessageManager.getString ("label.edit_sequence")).append (" " + seq.getName ());\r
-var label = seq.getName ();\r
-if (label.length > 10) {\r
-label = label.substring (0, 10);\r
-}if (this.editCommand == null) {\r
-this.editCommand =  new jalview.commands.EditCommand (jalview.util.MessageManager.formatMessage ("label.edit_params",  Clazz.newArray (-1, [label])));\r
-}}if (insertGap) {\r
-message.append (" insert ");\r
-} else {\r
-message.append (" delete ");\r
-}message.append (Math.abs (startres - this.lastres) + " gaps.");\r
-this.ap.alignFrame.setStatus (message.toString ());\r
-if (this.groupEditing || (sg != null && sg.getSequences (this.av.getHiddenRepSequences ()).contains (seq))) {\r
-fixedColumns = true;\r
-if (sg == null) {\r
-if (!this.av.isHiddenRepSequence (seq)) {\r
-this.endEditing ();\r
-return;\r
-}sg = this.av.getRepresentedSequences (seq);\r
-}fixedLeft = sg.getStartRes ();\r
-fixedRight = sg.getEndRes ();\r
-if ((startres < fixedLeft && this.lastres >= fixedLeft) || (startres >= fixedLeft && this.lastres < fixedLeft) || (startres > fixedRight && this.lastres <= fixedRight) || (startres <= fixedRight && this.lastres > fixedRight)) {\r
-this.endEditing ();\r
-return;\r
-}if (fixedLeft > startres) {\r
-fixedRight = fixedLeft - 1;\r
-fixedLeft = 0;\r
-} else if (fixedRight < startres) {\r
-fixedLeft = fixedRight;\r
-fixedRight = -1;\r
-}}if (this.av.hasHiddenColumns ()) {\r
-fixedColumns = true;\r
-var y1 = this.av.getColumnSelection ().getHiddenBoundaryLeft (startres);\r
-var y2 = this.av.getColumnSelection ().getHiddenBoundaryRight (startres);\r
-if ((insertGap && startres > y1 && this.lastres < y1) || (!insertGap && startres < y2 && this.lastres > y2)) {\r
-this.endEditing ();\r
-return;\r
-}if (fixedLeft < y1 && (fixedRight > y2 || fixedRight == -1)) {\r
-if (startres >= y2) {\r
-fixedLeft = y2;\r
-} else {\r
-fixedRight = y2 - 1;\r
-}}}if (this.groupEditing) {\r
-var groupSeqs = sg.getSequences (this.av.getHiddenRepSequences ()).toArray ( new Array (0));\r
-if (insertGap) {\r
-if (sg.getStartRes () == 0 && sg.getEndRes () == fixedRight && sg.getEndRes () == this.av.getAlignment ().getWidth () - 1) {\r
-sg.setEndRes (this.av.getAlignment ().getWidth () + startres - this.lastres);\r
-fixedRight = sg.getEndRes ();\r
-}var blank = false;\r
-for (fixedRight = fixedRight; fixedRight > this.lastres; fixedRight--) {\r
-blank = true;\r
-for (var gs, $gs = 0, $$gs = groupSeqs; $gs < $$gs.length && ((gs = $$gs[$gs]) || true); $gs++) {\r
-for (var j = 0; j < startres - this.lastres; j++) {\r
-if (!jalview.util.Comparison.isGap (gs.getCharAt (fixedRight - j))) {\r
-blank = false;\r
-break;\r
-}}\r
-}\r
-if (blank) {\r
-break;\r
-}}\r
-if (!blank) {\r
-if (sg.getSize () == this.av.getAlignment ().getHeight ()) {\r
-if ((this.av.hasHiddenColumns () && startres < this.av.getColumnSelection ().getHiddenBoundaryRight (startres))) {\r
-this.endEditing ();\r
-return;\r
-}var alWidth = this.av.getAlignment ().getWidth ();\r
-if (this.av.hasHiddenRows ()) {\r
-var hwidth = this.av.getAlignment ().getHiddenSequences ().getWidth ();\r
-if (hwidth > alWidth) {\r
-alWidth = hwidth;\r
-}}sg.setEndRes (sg.getEndRes () + startres - this.lastres);\r
-fixedRight = alWidth + startres - this.lastres;\r
-} else {\r
-this.endEditing ();\r
-return;\r
-}}} else if (!insertGap) {\r
-for (var gs, $gs = 0, $$gs = groupSeqs; $gs < $$gs.length && ((gs = $$gs[$gs]) || true); $gs++) {\r
-for (var j = startres; j < this.lastres; j++) {\r
-if (gs.getLength () <= j) {\r
-continue;\r
-}if (!jalview.util.Comparison.isGap (gs.getCharAt (j))) {\r
-this.endEditing ();\r
-return;\r
-}}\r
-}\r
-}if (insertGap) {\r
-if (fixedColumns && fixedRight != -1) {\r
-for (var j = this.lastres; j < startres; j++) {\r
-this.insertChar (j, groupSeqs, fixedRight);\r
-}\r
-} else {\r
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, groupSeqs, startres, startres - this.lastres, this.av.getAlignment (), true);\r
-}} else {\r
-if (fixedColumns && fixedRight != -1) {\r
-for (var j = this.lastres; j > startres; j--) {\r
-this.deleteChar (startres, groupSeqs, fixedRight);\r
-}\r
-} else {\r
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, groupSeqs, startres, this.lastres - startres, this.av.getAlignment (), true);\r
-}}} else {\r
-if (insertGap) {\r
-if (fixedColumns && fixedRight != -1) {\r
-for (var j = this.lastres; j < startres; j++) {\r
-this.insertChar (j,  Clazz.newArray (-1, [seq]), fixedRight);\r
-}\r
-} else {\r
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP,  Clazz.newArray (-1, [seq]), this.lastres, startres - this.lastres, this.av.getAlignment (), true);\r
-}} else {\r
-if (fixedColumns && fixedRight != -1) {\r
-for (var j = this.lastres; j > startres; j--) {\r
-if (!jalview.util.Comparison.isGap (seq.getCharAt (startres))) {\r
-this.endEditing ();\r
-break;\r
-}this.deleteChar (startres,  Clazz.newArray (-1, [seq]), fixedRight);\r
-}\r
-} else {\r
-var max = 0;\r
-for (var m = startres; m < this.lastres; m++) {\r
-if (!jalview.util.Comparison.isGap (seq.getCharAt (m))) {\r
-break;\r
-}max++;\r
-}\r
-if (max > 0) {\r
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP,  Clazz.newArray (-1, [seq]), startres, max, this.av.getAlignment (), true);\r
-}}}}this.lastres = startres;\r
-this.seqCanvas.repaint ();\r
-}, "~B,~N");\r
-Clazz.defineMethod (c$, "insertChar", \r
-function (j, seq, fixedColumn) {\r
-var blankColumn = fixedColumn;\r
-for (var s = 0; s < seq.length; s++) {\r
-for (blankColumn = fixedColumn; blankColumn > j; blankColumn--) {\r
-if (jalview.util.Comparison.isGap (seq[s].getCharAt (blankColumn))) {\r
-break;\r
-}}\r
-if (blankColumn <= j) {\r
-blankColumn = fixedColumn;\r
-this.endEditing ();\r
-return;\r
-}}\r
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, seq, blankColumn, 1, this.av.getAlignment (), true);\r
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, seq, j, 1, this.av.getAlignment (), true);\r
-}, "~N,~A,~N");\r
-Clazz.defineMethod (c$, "deleteChar", \r
-function (j, seq, fixedColumn) {\r
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, seq, j, 1, this.av.getAlignment (), true);\r
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, seq, fixedColumn, 1, this.av.getAlignment (), true);\r
-}, "~N,~A,~N");\r
-Clazz.defineMethod (c$, "doMousePressedDefineMode", \r
-function (evt) {\r
-if (this.scrollThread != null) {\r
-this.scrollThread.running = false;\r
-this.scrollThread = null;\r
-}var res = this.findRes (evt);\r
-var seq = this.findSeq (evt);\r
-this.oldSeq = seq;\r
-this.startWrapBlock = this.wrappedBlock;\r
-if (seq == -1) {\r
-return;\r
-}var sequence = this.av.getAlignment ().getSequenceAt (seq);\r
-if (sequence == null || res > sequence.getLength ()) {\r
-return;\r
-}this.stretchGroup = this.av.getSelectionGroup ();\r
-if (this.stretchGroup == null) {\r
-this.stretchGroup = this.av.getAlignment ().findGroup (sequence);\r
-if (this.stretchGroup != null && res > this.stretchGroup.getStartRes () && res < this.stretchGroup.getEndRes ()) {\r
-this.av.setSelectionGroup (this.stretchGroup);\r
-} else {\r
-this.stretchGroup = null;\r
-}} else if (!this.stretchGroup.getSequences (null).contains (sequence) || this.stretchGroup.getStartRes () > res || this.stretchGroup.getEndRes () < res) {\r
-this.stretchGroup = null;\r
-var allGroups = this.av.getAlignment ().findAllGroups (sequence);\r
-if (allGroups != null) {\r
-for (var i = 0; i < allGroups.length; i++) {\r
-if (allGroups[i].getStartRes () <= res && allGroups[i].getEndRes () >= res) {\r
-this.stretchGroup = allGroups[i];\r
-break;\r
-}}\r
-}this.av.setSelectionGroup (this.stretchGroup);\r
-}if ((evt.getModifiers () & 4) == 4) {\r
-var allFeatures = this.findFeaturesAtRes (sequence, sequence.findPosition (res));\r
-var links = null;\r
-if (allFeatures != null) {\r
-for (var i = 0; i < allFeatures.length; i++) {\r
-if (allFeatures[i].links != null) {\r
-if (links == null) {\r
-links =  new java.util.Vector ();\r
-}for (var j = 0; j < allFeatures[i].links.size (); j++) {\r
-links.addElement (allFeatures[i].links.elementAt (j));\r
-}\r
-}}\r
-}var popup =  new jalview.appletgui.APopupMenu (this.ap, null, links);\r
-this.add (popup);\r
-popup.show (this, evt.getX (), evt.getY ());\r
-return;\r
-}if (this.av.cursorMode) {\r
-this.seqCanvas.cursorX = this.findRes (evt);\r
-this.seqCanvas.cursorY = this.findSeq (evt);\r
-this.seqCanvas.repaint ();\r
-return;\r
-}if (this.stretchGroup == null) {\r
-var sg =  new jalview.datamodel.SequenceGroup ();\r
-sg.setStartRes (res);\r
-sg.setEndRes (res);\r
-sg.addSequence (sequence, false);\r
-this.av.setSelectionGroup (sg);\r
-this.stretchGroup = sg;\r
-if (this.av.getConservationSelected ()) {\r
-jalview.appletgui.SliderPanel.setConservationSlider (this.ap, this.av.getGlobalColourScheme (), "Background");\r
-}if (this.av.getAbovePIDThreshold ()) {\r
-jalview.appletgui.SliderPanel.setPIDSliderSource (this.ap, this.av.getGlobalColourScheme (), "Background");\r
-}}}, "java.awt.event.MouseEvent");\r
-Clazz.defineMethod (c$, "doMouseReleasedDefineMode", \r
-function (evt) {\r
-if (this.stretchGroup == null) {\r
-return;\r
-}this.stretchGroup.recalcConservation ();\r
-if (this.stretchGroup.cs != null) {\r
-this.stretchGroup.cs.alignmentChanged (this.stretchGroup, this.av.getHiddenRepSequences ());\r
-if (this.stretchGroup.cs.conservationApplied ()) {\r
-jalview.appletgui.SliderPanel.setConservationSlider (this.ap, this.stretchGroup.cs, this.stretchGroup.getName ());\r
-} else {\r
-jalview.appletgui.SliderPanel.setPIDSliderSource (this.ap, this.stretchGroup.cs, this.stretchGroup.getName ());\r
-}}this.changeEndRes = false;\r
-this.changeStartRes = false;\r
-this.stretchGroup = null;\r
-jalview.appletgui.PaintRefresher.Refresh (this.ap, this.av.getSequenceSetId ());\r
-this.ap.paintAlignment (true);\r
-this.av.sendSelection ();\r
-}, "java.awt.event.MouseEvent");\r
-Clazz.defineMethod (c$, "doMouseDraggedDefineMode", \r
-function (evt) {\r
-var res = this.findRes (evt);\r
-var y = this.findSeq (evt);\r
-if (this.wrappedBlock != this.startWrapBlock) {\r
-return;\r
-}if (this.stretchGroup == null) {\r
-return;\r
-}this.mouseDragging = true;\r
-if (y > this.av.getAlignment ().getHeight ()) {\r
-y = this.av.getAlignment ().getHeight () - 1;\r
-}if (res >= this.av.getAlignment ().getWidth ()) {\r
-res = this.av.getAlignment ().getWidth () - 1;\r
-}if (this.stretchGroup.getEndRes () == res) {\r
-this.changeEndRes = true;\r
-} else if (this.stretchGroup.getStartRes () == res) {\r
-this.changeStartRes = true;\r
-}if (res < 0) {\r
-res = 0;\r
-}if (this.changeEndRes) {\r
-if (res > (this.stretchGroup.getStartRes () - 1)) {\r
-this.stretchGroup.setEndRes (res);\r
-}} else if (this.changeStartRes) {\r
-if (res < (this.stretchGroup.getEndRes () + 1)) {\r
-this.stretchGroup.setStartRes (res);\r
-}}var dragDirection = 0;\r
-if (y > this.oldSeq) {\r
-dragDirection = 1;\r
-} else if (y < this.oldSeq) {\r
-dragDirection = -1;\r
-}while ((y != this.oldSeq) && (this.oldSeq > -1) && (y < this.av.getAlignment ().getHeight ())) {\r
-var seq = this.av.getAlignment ().getSequenceAt (this.oldSeq);\r
-this.oldSeq += dragDirection;\r
-if (this.oldSeq < 0) {\r
-break;\r
-}var nextSeq = this.av.getAlignment ().getSequenceAt (this.oldSeq);\r
-if (this.stretchGroup.getSequences (null).contains (nextSeq)) {\r
-this.stretchGroup.deleteSequence (seq, false);\r
-} else {\r
-if (seq != null) {\r
-this.stretchGroup.addSequence (seq, false);\r
-}this.stretchGroup.addSequence (nextSeq, false);\r
-}}\r
-if (this.oldSeq < 0) {\r
-this.oldSeq = -1;\r
-}if (res > this.av.endRes || res < this.av.startRes || y < this.av.startSeq || y > this.av.endSeq) {\r
-this.mouseExited (evt);\r
-}if (this.scrollThread != null) {\r
-this.scrollThread.setEvent (evt);\r
-}this.seqCanvas.repaint ();\r
-}, "java.awt.event.MouseEvent");\r
-Clazz.overrideMethod (c$, "mouseEntered", \r
-function (e) {\r
-if (this.oldSeq < 0) {\r
-this.oldSeq = 0;\r
-}if (this.scrollThread != null) {\r
-this.scrollThread.running = false;\r
-this.scrollThread = null;\r
-}}, "java.awt.event.MouseEvent");\r
-Clazz.overrideMethod (c$, "mouseExited", \r
-function (e) {\r
-if (this.av.getWrapAlignment ()) {\r
-return;\r
-}if (this.mouseDragging && this.scrollThread == null) {\r
-this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.SeqPanel.ScrollThread, this, null);\r
-}}, "java.awt.event.MouseEvent");\r
-Clazz.defineMethod (c$, "scrollCanvas", \r
-function (evt) {\r
-if (evt == null) {\r
-if (this.scrollThread != null) {\r
-this.scrollThread.running = false;\r
-this.scrollThread = null;\r
-}this.mouseDragging = false;\r
-} else {\r
-if (this.scrollThread == null) {\r
-this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.SeqPanel.ScrollThread, this, null);\r
-}this.mouseDragging = true;\r
-this.scrollThread.setEvent (evt);\r
-}}, "java.awt.event.MouseEvent");\r
-Clazz.overrideMethod (c$, "selection", \r
-function (seqsel, colsel, source) {\r
-if (this.av != null && (this.av === source || !this.av.followSelection || (Clazz.instanceOf (source, jalview.appletgui.AlignViewport) && (source).getSequenceSetId ().equals (this.av.getSequenceSetId ())))) {\r
-return;\r
-}if (this.selectionFromTranslation (seqsel, colsel, source)) {\r
-return;\r
-}var repaint = false;\r
-var copycolsel = true;\r
-if (this.av.getSelectionGroup () == null || !this.av.isSelectionGroupChanged (true)) {\r
-var sgroup = null;\r
-if (seqsel != null && seqsel.getSize () > 0) {\r
-if (this.av.getAlignment () == null) {\r
-System.out.println ("Selection message: alignviewport av SeqSetId=" + this.av.getSequenceSetId () + " ViewId=" + this.av.getViewId () + " 's alignment is NULL! returning immediatly.");\r
-return;\r
-}sgroup = seqsel.intersect (this.av.getAlignment (), (this.av.hasHiddenRows ()) ? this.av.getHiddenRepSequences () : null);\r
-if ((sgroup == null || sgroup.getSize () == 0) && (colsel == null || colsel.size () == 0)) {\r
-copycolsel = false;\r
-}}if (sgroup != null && sgroup.getSize () > 0) {\r
-this.av.setSelectionGroup (sgroup);\r
-} else {\r
-this.av.setSelectionGroup (null);\r
-}repaint = this.av.isSelectionGroupChanged (true);\r
-}if (copycolsel && (this.av.getColumnSelection () == null || !this.av.isColSelChanged (true))) {\r
-if (colsel == null || colsel.size () == 0) {\r
-if (this.av.getColumnSelection () != null) {\r
-this.av.getColumnSelection ().clear ();\r
-}} else {\r
-if (this.av.getColumnSelection () == null) {\r
-this.av.setColumnSelection ( new jalview.datamodel.ColumnSelection (colsel));\r
-} else {\r
-this.av.getColumnSelection ().setElementsFrom (colsel);\r
-}}repaint = new Boolean (repaint | this.av.isColSelChanged (true)).valueOf ();\r
-}if (copycolsel && this.av.hasHiddenColumns () && (this.av.getColumnSelection () == null || this.av.getColumnSelection ().getHiddenColumns () == null)) {\r
-System.err.println ("Bad things");\r
-}if (repaint) {\r
-this.ap.scalePanelHolder.repaint ();\r
-this.ap.repaint ();\r
-}}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");\r
-Clazz.defineMethod (c$, "scrollTo", \r
-function (row, column) {\r
-row = row < 0 ? this.ap.av.startSeq : row;\r
-column = column < 0 ? this.ap.av.startRes : column;\r
-this.ap.scrollTo (column, column, row, true, true);\r
-}, "~N,~N");\r
-Clazz.defineMethod (c$, "scrollToRow", \r
-function (row) {\r
-row = row < 0 ? this.ap.av.startSeq : row;\r
-this.ap.scrollTo (this.ap.av.startRes, this.ap.av.startRes, row, true, true);\r
-}, "~N");\r
-Clazz.defineMethod (c$, "scrollToColumn", \r
-function (column) {\r
-column = column < 0 ? this.ap.av.startRes : column;\r
-this.ap.scrollTo (column, column, this.ap.av.startSeq, true, true);\r
-}, "~N");\r
-Clazz.defineMethod (c$, "selectionFromTranslation", \r
-function (seqsel, colsel, source) {\r
-if (!(Clazz.instanceOf (source, jalview.api.AlignViewportI))) {\r
-return false;\r
-}var sourceAv = source;\r
-if (sourceAv.getCodingComplement () !== this.av && this.av.getCodingComplement () !== sourceAv) {\r
-return false;\r
-}var sg = jalview.util.MappingUtils.mapSequenceGroup (seqsel, sourceAv, this.av);\r
-this.av.setSelectionGroup (sg);\r
-this.av.isSelectionGroupChanged (true);\r
-var cs = jalview.util.MappingUtils.mapColumnSelection (colsel, sourceAv, this.av);\r
-this.av.setColumnSelection (cs);\r
-this.av.isColSelChanged (true);\r
-this.ap.scalePanelHolder.repaint ();\r
-this.ap.repaint ();\r
-return true;\r
-}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");\r
-c$.$SeqPanel$ScrollThread$ = function () {\r
-Clazz.pu$h(self.c$);\r
-c$ = Clazz.decorateAsClass (function () {\r
-Clazz.prepareCallback (this, arguments);\r
-this.evt = null;\r
-this.running = false;\r
-Clazz.instantialize (this, arguments);\r
-}, jalview.appletgui.SeqPanel, "ScrollThread", Thread);\r
-Clazz.makeConstructor (c$, \r
-function () {\r
-Clazz.superConstructor (this, jalview.appletgui.SeqPanel.ScrollThread, []);\r
-this.start ();\r
-});\r
-Clazz.defineMethod (c$, "setEvent", \r
-function (a) {\r
-this.evt = a;\r
-}, "java.awt.event.MouseEvent");\r
-Clazz.defineMethod (c$, "stopScrolling", \r
-function () {\r
-this.running = false;\r
-});\r
-Clazz.overrideMethod (c$, "run", \r
-function () {\r
-this.running = true;\r
-while (this.running) {\r
-if (this.evt != null) {\r
-if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getY () < 0 && this.b$["jalview.appletgui.SeqPanel"].av.getStartSeq () > 0) {\r
-this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollUp (true);\r
-}if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getY () >= this.b$["jalview.appletgui.SeqPanel"].getSize ().height && this.b$["jalview.appletgui.SeqPanel"].av.getAlignment ().getHeight () > this.b$["jalview.appletgui.SeqPanel"].av.getEndSeq ()) {\r
-this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollUp (false);\r
-}if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getX () < 0) {\r
-this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollRight (false);\r
-} else if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getX () >= this.b$["jalview.appletgui.SeqPanel"].getSize ().width) {\r
-this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollRight (true);\r
-}}try {\r
-Thread.sleep (75);\r
-} catch (ex) {\r
-if (Clazz.exceptionOf (ex, Exception)) {\r
-} else {\r
-throw ex;\r
-}\r
-}\r
-}\r
-});\r
-c$ = Clazz.p0p ();\r
-};\r
-});\r
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "jalview.structure.SelectionListener", "$.SequenceListener", "java.awt.event.MouseListener", "$.MouseMotionListener", "java.lang.Thread"], "jalview.appletgui.SeqPanel", ["jalview.api.AlignViewportI", "jalview.appletgui.APopupMenu", "$.AlignViewport", "$.PaintRefresher", "$.SeqCanvas", "$.SliderPanel", "$.Tooltip", "jalview.commands.EditCommand", "jalview.datamodel.ColumnSelection", "$.SearchResults", "$.SequenceGroup", "jalview.schemes.ResidueProperties", "jalview.structure.StructureSelectionManager", "jalview.util.Comparison", "$.MappingUtils", "$.MessageManager", "java.awt.BorderLayout", "$.Font", "java.lang.StringBuffer", "$.StringBuilder", "java.util.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.seqCanvas = null;
+this.ap = null;
+this.lastres = 0;
+this.startseq = 0;
+this.av = null;
+this.seqEditOccurred = false;
+this.scrollThread = null;
+this.mouseDragging = false;
+this.editingSeqs = false;
+this.groupEditing = false;
+this.oldSeq = -1;
+this.changeEndSeq = false;
+this.changeStartSeq = false;
+this.changeEndRes = false;
+this.changeStartRes = false;
+this.stretchGroup = null;
+this.keyboardNo1 = null;
+this.keyboardNo2 = null;
+this.mouseWheelPressed = false;
+this.lastMousePress = null;
+this.editCommand = null;
+this.ssm = null;
+this.startWrapBlock = -1;
+this.wrappedBlock = -1;
+this.lastMessage = null;
+this.tooltip = null;
+if (!Clazz.isClassDefined ("jalview.appletgui.SeqPanel.ScrollThread")) {
+jalview.appletgui.SeqPanel.$SeqPanel$ScrollThread$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "SeqPanel", awt2swing.Panel, [java.awt.event.MouseMotionListener, java.awt.event.MouseListener, jalview.structure.SequenceListener, jalview.structure.SelectionListener]);
+Clazz.makeConstructor (c$, 
+function (avp, p) {
+Clazz.superConstructor (this, jalview.appletgui.SeqPanel, []);
+this.av = avp;
+this.setName ("seqPanel");
+this.seqCanvas =  new jalview.appletgui.SeqCanvas (avp);
+this.setLayout ( new java.awt.BorderLayout ());
+this.add (this.seqCanvas);
+this.ap = p;
+this.seqCanvas.addMouseMotionListener (this);
+this.seqCanvas.addMouseListener (this);
+this.ssm = jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet);
+this.ssm.addStructureViewerListener (this);
+this.ssm.addSelectionListener (this);
+this.seqCanvas.repaint ();
+}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
+Clazz.defineMethod (c$, "endEditing", 
+function () {
+if (this.editCommand != null && this.editCommand.getSize () > 0) {
+this.ap.alignFrame.addHistoryItem (this.editCommand);
+this.av.firePropertyChange ("alignment", null, this.av.getAlignment ().getSequences ());
+}this.startseq = -1;
+this.lastres = -1;
+this.editingSeqs = false;
+this.groupEditing = false;
+this.keyboardNo1 = null;
+this.keyboardNo2 = null;
+this.editCommand = null;
+});
+Clazz.defineMethod (c$, "setCursorRow", 
+function () {
+this.seqCanvas.cursorY = this.getKeyboardNo1 () - 1;
+this.scrollToVisible ();
+});
+Clazz.defineMethod (c$, "setCursorColumn", 
+function () {
+this.seqCanvas.cursorX = this.getKeyboardNo1 () - 1;
+this.scrollToVisible ();
+});
+Clazz.defineMethod (c$, "setCursorRowAndColumn", 
+function () {
+if (this.keyboardNo2 == null) {
+this.keyboardNo2 =  new StringBuffer ();
+} else {
+this.seqCanvas.cursorX = this.getKeyboardNo1 () - 1;
+this.seqCanvas.cursorY = this.getKeyboardNo2 () - 1;
+this.scrollToVisible ();
+}});
+Clazz.defineMethod (c$, "setCursorPosition", 
+function () {
+var sequence = this.av.getAlignment ().getSequenceAt (this.seqCanvas.cursorY);
+this.seqCanvas.cursorX = sequence.findIndex (this.getKeyboardNo1 ()) - 1;
+this.scrollToVisible ();
+});
+Clazz.defineMethod (c$, "moveCursor", 
+function (dx, dy) {
+this.seqCanvas.cursorX += dx;
+this.seqCanvas.cursorY += dy;
+if (this.av.hasHiddenColumns () && !this.av.getColumnSelection ().isVisible (this.seqCanvas.cursorX)) {
+var original = this.seqCanvas.cursorX - dx;
+var maxWidth = this.av.getAlignment ().getWidth ();
+while (!this.av.getColumnSelection ().isVisible (this.seqCanvas.cursorX) && this.seqCanvas.cursorX < maxWidth && this.seqCanvas.cursorX > 0) {
+this.seqCanvas.cursorX += dx;
+}
+if (this.seqCanvas.cursorX >= maxWidth || !this.av.getColumnSelection ().isVisible (this.seqCanvas.cursorX)) {
+this.seqCanvas.cursorX = original;
+}}this.scrollToVisible ();
+}, "~N,~N");
+Clazz.defineMethod (c$, "scrollToVisible", 
+function () {
+if (this.seqCanvas.cursorX < 0) {
+this.seqCanvas.cursorX = 0;
+} else if (this.seqCanvas.cursorX > this.av.getAlignment ().getWidth () - 1) {
+this.seqCanvas.cursorX = this.av.getAlignment ().getWidth () - 1;
+}if (this.seqCanvas.cursorY < 0) {
+this.seqCanvas.cursorY = 0;
+} else if (this.seqCanvas.cursorY > this.av.getAlignment ().getHeight () - 1) {
+this.seqCanvas.cursorY = this.av.getAlignment ().getHeight () - 1;
+}this.endEditing ();
+if (this.av.getWrapAlignment ()) {
+this.ap.scrollToWrappedVisible (this.seqCanvas.cursorX);
+} else {
+while (this.seqCanvas.cursorY < this.av.startSeq) {
+this.ap.scrollUp (true);
+}
+while (this.seqCanvas.cursorY + 1 > this.av.endSeq) {
+this.ap.scrollUp (false);
+}
+while (this.seqCanvas.cursorX < this.av.getColumnSelection ().adjustForHiddenColumns (this.av.startRes)) {
+if (!this.ap.scrollRight (false)) {
+break;
+}}
+while (this.seqCanvas.cursorX > this.av.getColumnSelection ().adjustForHiddenColumns (this.av.endRes)) {
+if (!this.ap.scrollRight (true)) {
+break;
+}}
+}this.setStatusMessage (this.av.getAlignment ().getSequenceAt (this.seqCanvas.cursorY), this.seqCanvas.cursorX, this.seqCanvas.cursorY);
+this.seqCanvas.repaint ();
+});
+Clazz.defineMethod (c$, "setSelectionAreaAtCursor", 
+function (topLeft) {
+var sequence = this.av.getAlignment ().getSequenceAt (this.seqCanvas.cursorY);
+if (this.av.getSelectionGroup () != null) {
+var sg = this.av.getSelectionGroup ();
+var min = this.av.getAlignment ().getHeight ();
+var max = 0;
+for (var i = 0; i < sg.getSize (); i++) {
+var index = this.av.getAlignment ().findIndex (sg.getSequenceAt (i));
+if (index > max) {
+max = index;
+}if (index < min) {
+min = index;
+}}
+max++;
+if (topLeft) {
+sg.setStartRes (this.seqCanvas.cursorX);
+if (sg.getEndRes () < this.seqCanvas.cursorX) {
+sg.setEndRes (this.seqCanvas.cursorX);
+}min = this.seqCanvas.cursorY;
+} else {
+sg.setEndRes (this.seqCanvas.cursorX);
+if (sg.getStartRes () > this.seqCanvas.cursorX) {
+sg.setStartRes (this.seqCanvas.cursorX);
+}max = this.seqCanvas.cursorY + 1;
+}if (min > max) {
+this.av.setSelectionGroup (null);
+} else {
+sg.clear ();
+for (var i = min; i < max; i++) {
+sg.addSequence (this.av.getAlignment ().getSequenceAt (i), false);
+}
+}}if (this.av.getSelectionGroup () == null) {
+var sg =  new jalview.datamodel.SequenceGroup ();
+sg.setStartRes (this.seqCanvas.cursorX);
+sg.setEndRes (this.seqCanvas.cursorX);
+sg.addSequence (sequence, false);
+this.av.setSelectionGroup (sg);
+}this.ap.paintAlignment (false);
+this.av.sendSelection ();
+}, "~B");
+Clazz.defineMethod (c$, "insertGapAtCursor", 
+function (group) {
+this.groupEditing = group;
+this.startseq = this.seqCanvas.cursorY;
+this.lastres = this.seqCanvas.cursorX;
+this.editSequence (true, this.seqCanvas.cursorX + this.getKeyboardNo1 ());
+this.endEditing ();
+}, "~B");
+Clazz.defineMethod (c$, "deleteGapAtCursor", 
+function (group) {
+this.groupEditing = group;
+this.startseq = this.seqCanvas.cursorY;
+this.lastres = this.seqCanvas.cursorX + this.getKeyboardNo1 ();
+this.editSequence (false, this.seqCanvas.cursorX);
+this.endEditing ();
+}, "~B");
+Clazz.defineMethod (c$, "numberPressed", 
+function (value) {
+if (this.keyboardNo1 == null) {
+this.keyboardNo1 =  new StringBuffer ();
+}if (this.keyboardNo2 != null) {
+this.keyboardNo2.append (value);
+} else {
+this.keyboardNo1.append (value);
+}}, "~S");
+Clazz.defineMethod (c$, "getKeyboardNo1", 
+function () {
+try {
+if (this.keyboardNo1 != null) {
+var value = Integer.parseInt (this.keyboardNo1.toString ());
+this.keyboardNo1 = null;
+return value;
+}} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+} else {
+throw x;
+}
+}
+this.keyboardNo1 = null;
+return 1;
+});
+Clazz.defineMethod (c$, "getKeyboardNo2", 
+function () {
+try {
+if (this.keyboardNo2 != null) {
+var value = Integer.parseInt (this.keyboardNo2.toString ());
+this.keyboardNo2 = null;
+return value;
+}} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+} else {
+throw x;
+}
+}
+this.keyboardNo2 = null;
+return 1;
+});
+Clazz.defineMethod (c$, "setStatusMessage", 
+function (sequence, res, seq) {
+var text =  new StringBuilder (32);
+var seqno = seq == -1 ? "" : " " + (seq + 1);
+text.append ("Sequence" + seqno + " ID: " + sequence.getName ());
+var residue = null;
+var displayChar = String.valueOf (sequence.getCharAt (res));
+if (this.av.getAlignment ().isNucleotide ()) {
+residue = jalview.schemes.ResidueProperties.nucleotideName.get (displayChar);
+if (residue != null) {
+text.append (" Nucleotide: ").append (residue);
+}} else {
+residue = "X".equalsIgnoreCase (displayChar) ? "X" : jalview.schemes.ResidueProperties.aa2Triplet.get (displayChar);
+if (residue != null) {
+text.append (" Residue: ").append (residue);
+}}var pos = -1;
+if (residue != null) {
+pos = sequence.findPosition (res);
+text.append (" (").append (Integer.toString (pos)).append (")");
+}this.ap.alignFrame.setStatus (text.toString ());
+}, "jalview.datamodel.SequenceI,~N,~N");
+Clazz.defineMethod (c$, "setStatusMessage", 
+ function (results) {
+var matches = results.getResults ();
+if (!matches.isEmpty ()) {
+var m = matches.get (0);
+var seq = m.getSequence ();
+var sequenceIndex = this.av.getAlignment ().findIndex (seq);
+var start = m.getStart () - 1;
+this.setStatusMessage (seq, start, sequenceIndex);
+}}, "jalview.datamodel.SearchResults");
+Clazz.overrideMethod (c$, "mousePressed", 
+function (evt) {
+this.lastMousePress = evt.getPoint ();
+if ((evt.getModifiers () & 8) == 8 && !this.av.MAC) {
+this.mouseWheelPressed = true;
+return;
+}if (evt.isShiftDown () || evt.isControlDown () || evt.isAltDown ()) {
+if (evt.isControlDown () || evt.isAltDown ()) {
+this.groupEditing = true;
+}this.editingSeqs = true;
+} else {
+this.doMousePressedDefineMode (evt);
+return;
+}var seq = this.findSeq (evt);
+var res = this.findRes (evt);
+if (seq < 0 || res < 0) {
+return;
+}if ((seq < this.av.getAlignment ().getHeight ()) && (res < this.av.getAlignment ().getSequenceAt (seq).getLength ())) {
+this.startseq = seq;
+this.lastres = res;
+} else {
+this.startseq = -1;
+this.lastres = -1;
+}return;
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseClicked", 
+function (evt) {
+var sequence = this.av.getAlignment ().getSequenceAt (this.findSeq (evt));
+if (evt.getClickCount () > 1) {
+if (this.av.getSelectionGroup () != null && this.av.getSelectionGroup ().getSize () == 1 && this.av.getSelectionGroup ().getEndRes () - this.av.getSelectionGroup ().getStartRes () < 2) {
+this.av.setSelectionGroup (null);
+}var features = this.findFeaturesAtRes (sequence, sequence.findPosition (this.findRes (evt)));
+if (features != null && features.length > 0) {
+var highlight =  new jalview.datamodel.SearchResults ();
+highlight.addResult (sequence, features[0].getBegin (), features[0].getEnd ());
+this.seqCanvas.highlightSearchResults (highlight);
+}if (features != null && features.length > 0) {
+this.seqCanvas.getFeatureRenderer ().amendFeatures ( Clazz.newArray (-1, [sequence]), features, false, this.ap);
+this.seqCanvas.highlightSearchResults (null);
+}}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased", 
+function (evt) {
+this.mouseDragging = false;
+this.mouseWheelPressed = false;
+this.ap.paintAlignment (true);
+if (!this.editingSeqs) {
+this.doMouseReleasedDefineMode (evt);
+return;
+}this.endEditing ();
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "findRes", 
+function (evt) {
+var res = 0;
+var x = evt.getX ();
+if (this.av.getWrapAlignment ()) {
+var hgap = this.av.getCharHeight ();
+if (this.av.getScaleAboveWrapped ()) {
+hgap += this.av.getCharHeight ();
+}var cHeight = this.av.getAlignment ().getHeight () * this.av.getCharHeight () + hgap + this.seqCanvas.getAnnotationHeight ();
+var y = evt.getY ();
+y -= hgap;
+x -= this.seqCanvas.LABEL_WEST;
+var cwidth = this.seqCanvas.getWrappedCanvasWidth (this.getSize ().width);
+if (cwidth < 1) {
+return 0;
+}this.wrappedBlock = Clazz.doubleToInt (y / cHeight);
+this.wrappedBlock += Clazz.doubleToInt (this.av.getStartRes () / cwidth);
+res = this.wrappedBlock * cwidth + Clazz.doubleToInt (x / this.av.getCharWidth ());
+} else {
+res = (Clazz.doubleToInt (x / this.av.getCharWidth ())) + this.av.getStartRes ();
+}if (this.av.hasHiddenColumns ()) {
+res = this.av.getColumnSelection ().adjustForHiddenColumns (res);
+}return res;
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "findSeq", 
+function (evt) {
+var sqnum = this.findAlRow (evt);
+return (sqnum < 0) ? 0 : sqnum;
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "findAlRow", 
+ function (evt) {
+var seq = 0;
+var y = evt.getY ();
+if (this.av.getWrapAlignment ()) {
+var hgap = this.av.getCharHeight ();
+if (this.av.getScaleAboveWrapped ()) {
+hgap += this.av.getCharHeight ();
+}var cHeight = this.av.getAlignment ().getHeight () * this.av.getCharHeight () + hgap + this.seqCanvas.getAnnotationHeight ();
+y -= hgap;
+seq = Math.min (Clazz.doubleToInt ((y % cHeight) / this.av.getCharHeight ()), this.av.getAlignment ().getHeight () - 1);
+if (seq < 0) {
+seq = -1;
+}} else {
+seq = Math.min ((Clazz.doubleToInt (y / this.av.getCharHeight ())) + this.av.getStartSeq (), this.av.getAlignment ().getHeight () - 1);
+if (seq < 0) {
+seq = -1;
+}}return seq;
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "doMousePressed", 
+function (evt) {
+var seq = this.findSeq (evt);
+var res = this.findRes (evt);
+if (seq < this.av.getAlignment ().getHeight () && res < this.av.getAlignment ().getSequenceAt (seq).getLength ()) {
+this.startseq = seq;
+this.lastres = res;
+} else {
+this.startseq = -1;
+this.lastres = -1;
+}return;
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseOverSequence", 
+function (sequence, index, pos) {
+var tmp = sequence.hashCode () + index + "";
+if (this.lastMessage == null || !this.lastMessage.equals (tmp)) {
+this.ssm.mouseOverSequence (sequence, index, pos, this.av);
+}this.lastMessage = tmp;
+}, "jalview.datamodel.SequenceI,~N,~N");
+Clazz.overrideMethod (c$, "highlightSequence", 
+function (results) {
+if (this.av.isFollowHighlight ()) {
+if (this.ap.scrollToPosition (results, true)) {
+this.ap.alignFrame.repaint ();
+}}this.setStatusMessage (results);
+this.seqCanvas.highlightSearchResults (results);
+}, "jalview.datamodel.SearchResults");
+Clazz.overrideMethod (c$, "getVamsasSource", 
+function () {
+return this.ap == null ? null : this.ap.av;
+});
+Clazz.overrideMethod (c$, "updateColours", 
+function (seq, index) {
+System.out.println ("update the seqPanel colours");
+}, "jalview.datamodel.SequenceI,~N");
+Clazz.overrideMethod (c$, "mouseMoved", 
+function (evt) {
+var res = this.findRes (evt);
+var seq = this.findSeq (evt);
+if (seq >= this.av.getAlignment ().getHeight () || seq < 0 || res < 0) {
+if (this.tooltip != null) {
+this.tooltip.setTip ("");
+}return;
+}var sequence = this.av.getAlignment ().getSequenceAt (seq);
+if (res > sequence.getLength ()) {
+if (this.tooltip != null) {
+this.tooltip.setTip ("");
+}return;
+}var respos = sequence.findPosition (res);
+if (this.ssm != null) {
+this.mouseOverSequence (sequence, res, respos);
+}var text =  new StringBuilder ();
+text.append ("Sequence ").append (Integer.toString (seq + 1)).append (" ID: ").append (sequence.getName ());
+var obj = null;
+var ch = String.valueOf (sequence.getCharAt (res));
+if (this.av.getAlignment ().isNucleotide ()) {
+obj = jalview.schemes.ResidueProperties.nucleotideName.get (ch);
+if (obj != null) {
+text.append (" Nucleotide: ").append (obj);
+}} else {
+obj = "X".equalsIgnoreCase (ch) ? "X" : jalview.schemes.ResidueProperties.aa2Triplet.get (ch);
+if (obj != null) {
+text.append (" Residue: ").append (obj);
+}}if (obj != null) {
+text.append (" (").append (Integer.toString (respos)).append (")");
+}this.ap.alignFrame.setStatus (text.toString ());
+var tooltipText =  new StringBuilder ();
+var groups = this.av.getAlignment ().findAllGroups (sequence);
+if (groups != null) {
+for (var g = 0; g < groups.length; g++) {
+if (groups[g].getStartRes () <= res && groups[g].getEndRes () >= res) {
+if (!groups[g].getName ().startsWith ("JTreeGroup") && !groups[g].getName ().startsWith ("JGroup")) {
+tooltipText.append (groups[g].getName ()).append (" ");
+}if (groups[g].getDescription () != null) {
+tooltipText.append (groups[g].getDescription ());
+}tooltipText.append ("\n");
+}}
+}var allFeatures = this.findFeaturesAtRes (sequence, sequence.findPosition (res));
+var index = 0;
+while (index < allFeatures.length) {
+var sf = allFeatures[index];
+tooltipText.append (sf.getType () + " " + sf.begin + ":" + sf.end);
+if (sf.getDescription () != null) {
+tooltipText.append (" " + sf.getDescription ());
+}if (sf.getValue ("status") != null) {
+var status = sf.getValue ("status").toString ();
+if (status.length > 0) {
+tooltipText.append (" (" + sf.getValue ("status") + ")");
+}}tooltipText.append ("\n");
+index++;
+}
+if (this.tooltip == null) {
+this.tooltip =  new jalview.appletgui.Tooltip (tooltipText.toString (), this.seqCanvas);
+} else {
+this.tooltip.setTip (tooltipText.toString ());
+}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "findFeaturesAtRes", 
+function (sequence, res) {
+var tmp =  new java.util.Vector ();
+var features = sequence.getSequenceFeatures ();
+if (features != null) {
+for (var i = 0; i < features.length; i++) {
+if (this.av.getFeaturesDisplayed () == null || !this.av.getFeaturesDisplayed ().isVisible (features[i].getType ())) {
+continue;
+}if (features[i].featureGroup != null && !this.seqCanvas.fr.checkGroupVisibility (features[i].featureGroup, false)) {
+continue;
+}if ((features[i].getBegin () <= res) && (features[i].getEnd () >= res)) {
+tmp.addElement (features[i]);
+}}
+}features =  new Array (tmp.size ());
+tmp.copyInto (features);
+return features;
+}, "jalview.datamodel.SequenceI,~N");
+Clazz.overrideMethod (c$, "mouseDragged", 
+function (evt) {
+if (this.mouseWheelPressed) {
+var oldWidth = this.av.getCharWidth ();
+if (Math.abs (evt.getY () - this.lastMousePress.y) > Math.abs (evt.getX () - this.lastMousePress.x)) {
+var fontSize = this.av.font.getSize ();
+if (evt.getY () < this.lastMousePress.y && this.av.getCharHeight () > 1) {
+fontSize--;
+} else if (evt.getY () > this.lastMousePress.y) {
+fontSize++;
+}if (fontSize < 1) {
+fontSize = 1;
+}this.av.setFont ( new java.awt.Font (this.av.font.getName (), this.av.font.getStyle (), fontSize));
+this.av.setCharWidth (oldWidth);
+} else {
+if (evt.getX () < this.lastMousePress.x && this.av.getCharWidth () > 1) {
+this.av.setCharWidth (this.av.getCharWidth () - 1);
+} else if (evt.getX () > this.lastMousePress.x) {
+this.av.setCharWidth (this.av.getCharWidth () + 1);
+}if (this.av.getCharWidth () < 1) {
+this.av.setCharWidth (1);
+}}this.ap.fontChanged ();
+var fm = this.getFontMetrics (this.av.getFont ());
+this.av.validCharWidth = fm.charWidth ('M') <= this.av.getCharWidth ();
+this.lastMousePress = evt.getPoint ();
+this.ap.paintAlignment (false);
+this.ap.annotationPanel.image = null;
+return;
+}if (!this.editingSeqs) {
+this.doMouseDraggedDefineMode (evt);
+return;
+}var res = this.findRes (evt);
+if (res < 0) {
+res = 0;
+}if ((this.lastres == -1) || (this.lastres == res)) {
+return;
+}if ((res < this.av.getAlignment ().getWidth ()) && (res < this.lastres)) {
+this.editSequence (false, res);
+} else {
+this.editSequence (true, res);
+}this.mouseDragging = true;
+if (this.scrollThread != null) {
+this.scrollThread.setEvent (evt);
+}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "editSequence", 
+function (insertGap, startres) {
+var fixedLeft = -1;
+var fixedRight = -1;
+var fixedColumns = false;
+var sg = this.av.getSelectionGroup ();
+var seq = this.av.getAlignment ().getSequenceAt (this.startseq);
+if (!this.groupEditing && this.av.hasHiddenRows ()) {
+if (this.av.isHiddenRepSequence (seq)) {
+sg = this.av.getRepresentedSequences (seq);
+this.groupEditing = true;
+}}var message =  new StringBuffer ();
+if (this.groupEditing) {
+message.append (jalview.util.MessageManager.getString ("action.edit_group")).append (":");
+if (this.editCommand == null) {
+this.editCommand =  new jalview.commands.EditCommand (jalview.util.MessageManager.getString ("action.edit_group"));
+}} else {
+message.append (jalview.util.MessageManager.getString ("label.edit_sequence")).append (" " + seq.getName ());
+var label = seq.getName ();
+if (label.length > 10) {
+label = label.substring (0, 10);
+}if (this.editCommand == null) {
+this.editCommand =  new jalview.commands.EditCommand (jalview.util.MessageManager.formatMessage ("label.edit_params",  Clazz.newArray (-1, [label])));
+}}if (insertGap) {
+message.append (" insert ");
+} else {
+message.append (" delete ");
+}message.append (Math.abs (startres - this.lastres) + " gaps.");
+this.ap.alignFrame.setStatus (message.toString ());
+if (this.groupEditing || (sg != null && sg.getSequences (this.av.getHiddenRepSequences ()).contains (seq))) {
+fixedColumns = true;
+if (sg == null) {
+if (!this.av.isHiddenRepSequence (seq)) {
+this.endEditing ();
+return;
+}sg = this.av.getRepresentedSequences (seq);
+}fixedLeft = sg.getStartRes ();
+fixedRight = sg.getEndRes ();
+if ((startres < fixedLeft && this.lastres >= fixedLeft) || (startres >= fixedLeft && this.lastres < fixedLeft) || (startres > fixedRight && this.lastres <= fixedRight) || (startres <= fixedRight && this.lastres > fixedRight)) {
+this.endEditing ();
+return;
+}if (fixedLeft > startres) {
+fixedRight = fixedLeft - 1;
+fixedLeft = 0;
+} else if (fixedRight < startres) {
+fixedLeft = fixedRight;
+fixedRight = -1;
+}}if (this.av.hasHiddenColumns ()) {
+fixedColumns = true;
+var y1 = this.av.getColumnSelection ().getHiddenBoundaryLeft (startres);
+var y2 = this.av.getColumnSelection ().getHiddenBoundaryRight (startres);
+if ((insertGap && startres > y1 && this.lastres < y1) || (!insertGap && startres < y2 && this.lastres > y2)) {
+this.endEditing ();
+return;
+}if (fixedLeft < y1 && (fixedRight > y2 || fixedRight == -1)) {
+if (startres >= y2) {
+fixedLeft = y2;
+} else {
+fixedRight = y2 - 1;
+}}}if (this.groupEditing) {
+var groupSeqs = sg.getSequences (this.av.getHiddenRepSequences ()).toArray ( new Array (0));
+if (insertGap) {
+if (sg.getStartRes () == 0 && sg.getEndRes () == fixedRight && sg.getEndRes () == this.av.getAlignment ().getWidth () - 1) {
+sg.setEndRes (this.av.getAlignment ().getWidth () + startres - this.lastres);
+fixedRight = sg.getEndRes ();
+}var blank = false;
+for (fixedRight = fixedRight; fixedRight > this.lastres; fixedRight--) {
+blank = true;
+for (var gs, $gs = 0, $$gs = groupSeqs; $gs < $$gs.length && ((gs = $$gs[$gs]) || true); $gs++) {
+for (var j = 0; j < startres - this.lastres; j++) {
+if (!jalview.util.Comparison.isGap (gs.getCharAt (fixedRight - j))) {
+blank = false;
+break;
+}}
+}
+if (blank) {
+break;
+}}
+if (!blank) {
+if (sg.getSize () == this.av.getAlignment ().getHeight ()) {
+if ((this.av.hasHiddenColumns () && startres < this.av.getColumnSelection ().getHiddenBoundaryRight (startres))) {
+this.endEditing ();
+return;
+}var alWidth = this.av.getAlignment ().getWidth ();
+if (this.av.hasHiddenRows ()) {
+var hwidth = this.av.getAlignment ().getHiddenSequences ().getWidth ();
+if (hwidth > alWidth) {
+alWidth = hwidth;
+}}sg.setEndRes (sg.getEndRes () + startres - this.lastres);
+fixedRight = alWidth + startres - this.lastres;
+} else {
+this.endEditing ();
+return;
+}}} else if (!insertGap) {
+for (var gs, $gs = 0, $$gs = groupSeqs; $gs < $$gs.length && ((gs = $$gs[$gs]) || true); $gs++) {
+for (var j = startres; j < this.lastres; j++) {
+if (gs.getLength () <= j) {
+continue;
+}if (!jalview.util.Comparison.isGap (gs.getCharAt (j))) {
+this.endEditing ();
+return;
+}}
+}
+}if (insertGap) {
+if (fixedColumns && fixedRight != -1) {
+for (var j = this.lastres; j < startres; j++) {
+this.insertChar (j, groupSeqs, fixedRight);
+}
+} else {
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, groupSeqs, startres, startres - this.lastres, this.av.getAlignment (), true);
+}} else {
+if (fixedColumns && fixedRight != -1) {
+for (var j = this.lastres; j > startres; j--) {
+this.deleteChar (startres, groupSeqs, fixedRight);
+}
+} else {
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, groupSeqs, startres, this.lastres - startres, this.av.getAlignment (), true);
+}}} else {
+if (insertGap) {
+if (fixedColumns && fixedRight != -1) {
+for (var j = this.lastres; j < startres; j++) {
+this.insertChar (j,  Clazz.newArray (-1, [seq]), fixedRight);
+}
+} else {
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP,  Clazz.newArray (-1, [seq]), this.lastres, startres - this.lastres, this.av.getAlignment (), true);
+}} else {
+if (fixedColumns && fixedRight != -1) {
+for (var j = this.lastres; j > startres; j--) {
+if (!jalview.util.Comparison.isGap (seq.getCharAt (startres))) {
+this.endEditing ();
+break;
+}this.deleteChar (startres,  Clazz.newArray (-1, [seq]), fixedRight);
+}
+} else {
+var max = 0;
+for (var m = startres; m < this.lastres; m++) {
+if (!jalview.util.Comparison.isGap (seq.getCharAt (m))) {
+break;
+}max++;
+}
+if (max > 0) {
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP,  Clazz.newArray (-1, [seq]), startres, max, this.av.getAlignment (), true);
+}}}}this.lastres = startres;
+this.seqCanvas.repaint ();
+}, "~B,~N");
+Clazz.defineMethod (c$, "insertChar", 
+function (j, seq, fixedColumn) {
+var blankColumn = fixedColumn;
+for (var s = 0; s < seq.length; s++) {
+for (blankColumn = fixedColumn; blankColumn > j; blankColumn--) {
+if (jalview.util.Comparison.isGap (seq[s].getCharAt (blankColumn))) {
+break;
+}}
+if (blankColumn <= j) {
+blankColumn = fixedColumn;
+this.endEditing ();
+return;
+}}
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, seq, blankColumn, 1, this.av.getAlignment (), true);
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, seq, j, 1, this.av.getAlignment (), true);
+}, "~N,~A,~N");
+Clazz.defineMethod (c$, "deleteChar", 
+function (j, seq, fixedColumn) {
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, seq, j, 1, this.av.getAlignment (), true);
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, seq, fixedColumn, 1, this.av.getAlignment (), true);
+}, "~N,~A,~N");
+Clazz.defineMethod (c$, "doMousePressedDefineMode", 
+function (evt) {
+if (this.scrollThread != null) {
+this.scrollThread.running = false;
+this.scrollThread = null;
+}var res = this.findRes (evt);
+var seq = this.findSeq (evt);
+this.oldSeq = seq;
+this.startWrapBlock = this.wrappedBlock;
+if (seq == -1) {
+return;
+}var sequence = this.av.getAlignment ().getSequenceAt (seq);
+if (sequence == null || res > sequence.getLength ()) {
+return;
+}this.stretchGroup = this.av.getSelectionGroup ();
+if (this.stretchGroup == null) {
+this.stretchGroup = this.av.getAlignment ().findGroup (sequence);
+if (this.stretchGroup != null && res > this.stretchGroup.getStartRes () && res < this.stretchGroup.getEndRes ()) {
+this.av.setSelectionGroup (this.stretchGroup);
+} else {
+this.stretchGroup = null;
+}} else if (!this.stretchGroup.getSequences (null).contains (sequence) || this.stretchGroup.getStartRes () > res || this.stretchGroup.getEndRes () < res) {
+this.stretchGroup = null;
+var allGroups = this.av.getAlignment ().findAllGroups (sequence);
+if (allGroups != null) {
+for (var i = 0; i < allGroups.length; i++) {
+if (allGroups[i].getStartRes () <= res && allGroups[i].getEndRes () >= res) {
+this.stretchGroup = allGroups[i];
+break;
+}}
+}this.av.setSelectionGroup (this.stretchGroup);
+}if ((evt.getModifiers () & 4) == 4) {
+var allFeatures = this.findFeaturesAtRes (sequence, sequence.findPosition (res));
+var links = null;
+if (allFeatures != null) {
+for (var i = 0; i < allFeatures.length; i++) {
+if (allFeatures[i].links != null) {
+if (links == null) {
+links =  new java.util.Vector ();
+}for (var j = 0; j < allFeatures[i].links.size (); j++) {
+links.addElement (allFeatures[i].links.elementAt (j));
+}
+}}
+}var popup =  new jalview.appletgui.APopupMenu (this.ap, null, links);
+this.add (popup);
+popup.show (this, evt.getX (), evt.getY ());
+return;
+}if (this.av.cursorMode) {
+this.seqCanvas.cursorX = this.findRes (evt);
+this.seqCanvas.cursorY = this.findSeq (evt);
+this.seqCanvas.repaint ();
+return;
+}if (this.stretchGroup == null) {
+var sg =  new jalview.datamodel.SequenceGroup ();
+sg.setStartRes (res);
+sg.setEndRes (res);
+sg.addSequence (sequence, false);
+this.av.setSelectionGroup (sg);
+this.stretchGroup = sg;
+if (this.av.getConservationSelected ()) {
+jalview.appletgui.SliderPanel.setConservationSlider (this.ap, this.av.getGlobalColourScheme (), "Background");
+}if (this.av.getAbovePIDThreshold ()) {
+jalview.appletgui.SliderPanel.setPIDSliderSource (this.ap, this.av.getGlobalColourScheme (), "Background");
+}}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "doMouseReleasedDefineMode", 
+function (evt) {
+if (this.stretchGroup == null) {
+return;
+}this.stretchGroup.recalcConservation ();
+if (this.stretchGroup.cs != null) {
+this.stretchGroup.cs.alignmentChanged (this.stretchGroup, this.av.getHiddenRepSequences ());
+if (this.stretchGroup.cs.conservationApplied ()) {
+jalview.appletgui.SliderPanel.setConservationSlider (this.ap, this.stretchGroup.cs, this.stretchGroup.getName ());
+} else {
+jalview.appletgui.SliderPanel.setPIDSliderSource (this.ap, this.stretchGroup.cs, this.stretchGroup.getName ());
+}}this.changeEndRes = false;
+this.changeStartRes = false;
+this.stretchGroup = null;
+jalview.appletgui.PaintRefresher.Refresh (this.ap, this.av.getSequenceSetId ());
+this.ap.paintAlignment (true);
+this.av.sendSelection ();
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "doMouseDraggedDefineMode", 
+function (evt) {
+var res = this.findRes (evt);
+var y = this.findSeq (evt);
+if (this.wrappedBlock != this.startWrapBlock) {
+return;
+}if (this.stretchGroup == null) {
+return;
+}this.mouseDragging = true;
+if (y > this.av.getAlignment ().getHeight ()) {
+y = this.av.getAlignment ().getHeight () - 1;
+}if (res >= this.av.getAlignment ().getWidth ()) {
+res = this.av.getAlignment ().getWidth () - 1;
+}if (this.stretchGroup.getEndRes () == res) {
+this.changeEndRes = true;
+} else if (this.stretchGroup.getStartRes () == res) {
+this.changeStartRes = true;
+}if (res < 0) {
+res = 0;
+}if (this.changeEndRes) {
+if (res > (this.stretchGroup.getStartRes () - 1)) {
+this.stretchGroup.setEndRes (res);
+}} else if (this.changeStartRes) {
+if (res < (this.stretchGroup.getEndRes () + 1)) {
+this.stretchGroup.setStartRes (res);
+}}var dragDirection = 0;
+if (y > this.oldSeq) {
+dragDirection = 1;
+} else if (y < this.oldSeq) {
+dragDirection = -1;
+}while ((y != this.oldSeq) && (this.oldSeq > -1) && (y < this.av.getAlignment ().getHeight ())) {
+var seq = this.av.getAlignment ().getSequenceAt (this.oldSeq);
+this.oldSeq += dragDirection;
+if (this.oldSeq < 0) {
+break;
+}var nextSeq = this.av.getAlignment ().getSequenceAt (this.oldSeq);
+if (this.stretchGroup.getSequences (null).contains (nextSeq)) {
+this.stretchGroup.deleteSequence (seq, false);
+} else {
+if (seq != null) {
+this.stretchGroup.addSequence (seq, false);
+}this.stretchGroup.addSequence (nextSeq, false);
+}}
+if (this.oldSeq < 0) {
+this.oldSeq = -1;
+}if (res > this.av.endRes || res < this.av.startRes || y < this.av.startSeq || y > this.av.endSeq) {
+this.mouseExited (evt);
+}if (this.scrollThread != null) {
+this.scrollThread.setEvent (evt);
+}this.seqCanvas.repaint ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered", 
+function (e) {
+if (this.oldSeq < 0) {
+this.oldSeq = 0;
+}if (this.scrollThread != null) {
+this.scrollThread.running = false;
+this.scrollThread = null;
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited", 
+function (e) {
+if (this.av.getWrapAlignment ()) {
+return;
+}if (this.mouseDragging && this.scrollThread == null) {
+this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.SeqPanel.ScrollThread, this, null);
+}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "scrollCanvas", 
+function (evt) {
+if (evt == null) {
+if (this.scrollThread != null) {
+this.scrollThread.running = false;
+this.scrollThread = null;
+}this.mouseDragging = false;
+} else {
+if (this.scrollThread == null) {
+this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.SeqPanel.ScrollThread, this, null);
+}this.mouseDragging = true;
+this.scrollThread.setEvent (evt);
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "selection", 
+function (seqsel, colsel, source) {
+if (this.av != null && (this.av === source || !this.av.followSelection || (Clazz.instanceOf (source, jalview.appletgui.AlignViewport) && (source).getSequenceSetId ().equals (this.av.getSequenceSetId ())))) {
+return;
+}if (this.selectionFromTranslation (seqsel, colsel, source)) {
+return;
+}var repaint = false;
+var copycolsel = true;
+if (this.av.getSelectionGroup () == null || !this.av.isSelectionGroupChanged (true)) {
+var sgroup = null;
+if (seqsel != null && seqsel.getSize () > 0) {
+if (this.av.getAlignment () == null) {
+System.out.println ("Selection message: alignviewport av SeqSetId=" + this.av.getSequenceSetId () + " ViewId=" + this.av.getViewId () + " 's alignment is NULL! returning immediatly.");
+return;
+}sgroup = seqsel.intersect (this.av.getAlignment (), (this.av.hasHiddenRows ()) ? this.av.getHiddenRepSequences () : null);
+if ((sgroup == null || sgroup.getSize () == 0) && (colsel == null || colsel.size () == 0)) {
+copycolsel = false;
+}}if (sgroup != null && sgroup.getSize () > 0) {
+this.av.setSelectionGroup (sgroup);
+} else {
+this.av.setSelectionGroup (null);
+}repaint = this.av.isSelectionGroupChanged (true);
+}if (copycolsel && (this.av.getColumnSelection () == null || !this.av.isColSelChanged (true))) {
+if (colsel == null || colsel.size () == 0) {
+if (this.av.getColumnSelection () != null) {
+this.av.getColumnSelection ().clear ();
+}} else {
+if (this.av.getColumnSelection () == null) {
+this.av.setColumnSelection ( new jalview.datamodel.ColumnSelection (colsel));
+} else {
+this.av.getColumnSelection ().setElementsFrom (colsel);
+}}repaint = new Boolean (repaint | this.av.isColSelChanged (true)).valueOf ();
+}if (copycolsel && this.av.hasHiddenColumns () && (this.av.getColumnSelection () == null || this.av.getColumnSelection ().getHiddenColumns () == null)) {
+System.err.println ("Bad things");
+}if (repaint) {
+this.ap.scalePanelHolder.repaint ();
+this.ap.repaint ();
+}}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");
+Clazz.defineMethod (c$, "scrollTo", 
+function (row, column) {
+row = row < 0 ? this.ap.av.startSeq : row;
+column = column < 0 ? this.ap.av.startRes : column;
+this.ap.scrollTo (column, column, row, true, true);
+}, "~N,~N");
+Clazz.defineMethod (c$, "scrollToRow", 
+function (row) {
+row = row < 0 ? this.ap.av.startSeq : row;
+this.ap.scrollTo (this.ap.av.startRes, this.ap.av.startRes, row, true, true);
+}, "~N");
+Clazz.defineMethod (c$, "scrollToColumn", 
+function (column) {
+column = column < 0 ? this.ap.av.startRes : column;
+this.ap.scrollTo (column, column, this.ap.av.startSeq, true, true);
+}, "~N");
+Clazz.defineMethod (c$, "selectionFromTranslation", 
+function (seqsel, colsel, source) {
+if (!(Clazz.instanceOf (source, jalview.api.AlignViewportI))) {
+return false;
+}var sourceAv = source;
+if (sourceAv.getCodingComplement () !== this.av && this.av.getCodingComplement () !== sourceAv) {
+return false;
+}var sg = jalview.util.MappingUtils.mapSequenceGroup (seqsel, sourceAv, this.av);
+this.av.setSelectionGroup (sg);
+this.av.isSelectionGroupChanged (true);
+var cs = jalview.util.MappingUtils.mapColumnSelection (colsel, sourceAv, this.av);
+this.av.setColumnSelection (cs);
+this.av.isColSelChanged (true);
+this.ap.scalePanelHolder.repaint ();
+this.ap.repaint ();
+return true;
+}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");
+c$.$SeqPanel$ScrollThread$ = function () {
+Clazz.pu$h(self.c$);
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.evt = null;
+this.running = false;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui.SeqPanel, "ScrollThread", Thread);
+Clazz.makeConstructor (c$, 
+function () {
+Clazz.superConstructor (this, jalview.appletgui.SeqPanel.ScrollThread, []);
+this.start ();
+});
+Clazz.defineMethod (c$, "setEvent", 
+function (a) {
+this.evt = a;
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "stopScrolling", 
+function () {
+this.running = false;
+});
+Clazz.overrideMethod (c$, "run", 
+function () {
+this.running = true;
+while (this.running) {
+if (this.evt != null) {
+if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getY () < 0 && this.b$["jalview.appletgui.SeqPanel"].av.getStartSeq () > 0) {
+this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollUp (true);
+}if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getY () >= this.b$["jalview.appletgui.SeqPanel"].getSize ().height && this.b$["jalview.appletgui.SeqPanel"].av.getAlignment ().getHeight () > this.b$["jalview.appletgui.SeqPanel"].av.getEndSeq ()) {
+this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollUp (false);
+}if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getX () < 0) {
+this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollRight (false);
+} else if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getX () >= this.b$["jalview.appletgui.SeqPanel"].getSize ().width) {
+this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollRight (true);
+}}try {
+Thread.sleep (75);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+}
+});
+c$ = Clazz.p0p ();
+};
+});