JAL-1807 still testing
[jalviewjs.git] / bin / jalview / appletgui / SeqPanel.js
index d500d0e..7f97353 100644 (file)
-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", 
-($fz = 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);
-}}, $fz.isPrivate = true, $fz), "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", 
-($fz = 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;
-}, $fz.isPrivate = true, $fz), "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 ();
-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 ();
-};
-});
+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
+($fz = 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
+}}, $fz.isPrivate = true, $fz), "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
+($fz = 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
+}, $fz.isPrivate = true, $fz), "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 ();\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