JAL-1807 test
[jalviewjs.git] / bin / jalview / appletgui / AlignmentPanel.js
index 8989731..1d6069d 100644 (file)
-Clazz.declarePackage ("jalview.appletgui");\r
-Clazz.load (["awt2swing.Panel", "jalview.api.AlignmentViewPanel", "java.awt.event.AdjustmentListener", "awt2swing.Scrollbar"], "jalview.appletgui.AlignmentPanel", ["awt2swing.Frame", "jalview.analysis.AnnotationSorter", "jalview.appletgui.AnnotationLabels", "$.AnnotationPanel", "$.FeatureRenderer", "$.IdPanel", "$.IdwidthAdjuster", "$.PaintRefresher", "$.ScalePanel", "$.SeqPanel", "jalview.bin.JalviewLite", "jalview.structure.StructureSelectionManager", "java.awt.BorderLayout", "$.Color", "$.Dimension", "java.awt.event.ComponentAdapter", "java.beans.PropertyChangeListener"], function () {\r
-c$ = Clazz.decorateAsClass (function () {\r
-this.av = null;\r
-this.overviewPanel = null;\r
-this.seqPanel = null;\r
-this.idPanel = null;\r
-this.idwidthAdjuster = null;\r
-this.alignFrame = null;\r
-this.scalePanel = null;\r
-this.annotationPanel = null;\r
-this.alabels = null;\r
-this.fastPaint = true;\r
-this.hextent = 0;\r
-this.vextent = 0;\r
-this.sequenceHolderPanel = null;\r
-this.vscroll = null;\r
-this.hscroll = null;\r
-this.seqPanelHolder = null;\r
-this.scalePanelHolder = null;\r
-this.idPanelHolder = null;\r
-this.idSpaceFillerPanel1 = null;\r
-this.annotationSpaceFillerHolder = null;\r
-this.hscrollFillerPanel = null;\r
-this.annotationPanelHolder = null;\r
-this.apvscroll = null;\r
-this.followingComplementScroll = false;\r
-Clazz.instantialize (this, arguments);\r
-}, jalview.appletgui, "AlignmentPanel", awt2swing.Panel, [java.awt.event.AdjustmentListener, jalview.api.AlignmentViewPanel]);\r
-Clazz.prepareFields (c$, function () {\r
-this.sequenceHolderPanel =  new awt2swing.Panel ();\r
-this.vscroll =  new awt2swing.Scrollbar ();\r
-this.hscroll =  new awt2swing.Scrollbar ();\r
-this.seqPanelHolder =  new awt2swing.Panel ();\r
-this.scalePanelHolder =  new awt2swing.Panel ();\r
-this.idPanelHolder =  new awt2swing.Panel ();\r
-this.idSpaceFillerPanel1 =  new awt2swing.Panel ();\r
-this.annotationSpaceFillerHolder =  new awt2swing.Panel ();\r
-this.hscrollFillerPanel =  new awt2swing.Panel ();\r
-this.annotationPanelHolder =  new awt2swing.Panel ();\r
-this.apvscroll =  new awt2swing.Scrollbar ();\r
-});\r
-Clazz.overrideMethod (c$, "finalize", \r
-function () {\r
-this.alignFrame = null;\r
-this.av = null;\r
-this.seqPanel = null;\r
-this.seqPanelHolder = null;\r
-this.sequenceHolderPanel = null;\r
-this.scalePanel = null;\r
-this.scalePanelHolder = null;\r
-this.annotationPanel = null;\r
-this.annotationPanelHolder = null;\r
-this.annotationSpaceFillerHolder = null;\r
-});\r
-Clazz.makeConstructor (c$, \r
-function (af, av) {\r
-Clazz.superConstructor (this, jalview.appletgui.AlignmentPanel, []);\r
-this.setName ("alignmentPanel");\r
-try {\r
-this.jbInit ();\r
-} catch (e) {\r
-if (Clazz.exceptionOf (e, Exception)) {\r
-e.printStackTrace ();\r
-} else {\r
-throw e;\r
-}\r
-}\r
-this.alignFrame = af;\r
-this.av = av;\r
-this.seqPanel =  new jalview.appletgui.SeqPanel (av, this);\r
-this.idPanel =  new jalview.appletgui.IdPanel (av, this);\r
-this.scalePanel =  new jalview.appletgui.ScalePanel (av, this);\r
-this.idwidthAdjuster =  new jalview.appletgui.IdwidthAdjuster (this);\r
-this.annotationPanel =  new jalview.appletgui.AnnotationPanel (this);\r
-this.annotationPanelHolder.add (this.annotationPanel, "Center");\r
-this.sequenceHolderPanel.add (this.annotationPanelHolder, "South");\r
-this.alabels =  new jalview.appletgui.AnnotationLabels (this);\r
-this.setAnnotationVisible (av.isShowAnnotation ());\r
-this.idPanelHolder.add (this.idPanel, "Center");\r
-this.idSpaceFillerPanel1.add (this.idwidthAdjuster, "Center");\r
-this.annotationSpaceFillerHolder.add (this.alabels, "Center");\r
-this.scalePanelHolder.add (this.scalePanel, "Center");\r
-this.seqPanelHolder.add (this.seqPanel, "Center");\r
-this.fontChanged ();\r
-this.setScrollValues (0, 0);\r
-this.apvscroll.addAdjustmentListener (this);\r
-this.hscroll.addAdjustmentListener (this);\r
-this.vscroll.addAdjustmentListener (this);\r
-this.addComponentListener (((Clazz.isClassDefined ("jalview.appletgui.AlignmentPanel$1") ? 0 : jalview.appletgui.AlignmentPanel.$AlignmentPanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignmentPanel$1, this, Clazz.cloneFinals ("av", av))));\r
-var d = this.calculateIdWidth ();\r
-this.idPanel.idCanvas.setSize (d);\r
-this.hscrollFillerPanel.setSize (d.width, this.annotationPanel.getSize ().height);\r
-this.idPanel.idCanvas.setSize (d.width, this.seqPanel.seqCanvas.getSize ().height);\r
-this.annotationSpaceFillerHolder.setSize (d.width, this.annotationPanel.getSize ().height);\r
-this.alabels.setSize (d.width, this.annotationPanel.getSize ().height);\r
-var ap = this;\r
-av.addPropertyChangeListener (((Clazz.isClassDefined ("jalview.appletgui.AlignmentPanel$2") ? 0 : jalview.appletgui.AlignmentPanel.$AlignmentPanel$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignmentPanel$2, this, Clazz.cloneFinals ("ap", ap, "av", av))));\r
-}, "jalview.appletgui.AlignFrame,jalview.appletgui.AlignViewport");\r
-Clazz.overrideMethod (c$, "getAlignViewport", \r
-function () {\r
-return this.av;\r
-});\r
-Clazz.defineMethod (c$, "getSequenceRenderer", \r
-function () {\r
-return this.seqPanel.seqCanvas.sr;\r
-});\r
-Clazz.overrideMethod (c$, "getFeatureRenderer", \r
-function () {\r
-return this.seqPanel.seqCanvas.fr;\r
-});\r
-Clazz.overrideMethod (c$, "cloneFeatureRenderer", \r
-function () {\r
-var nfr =  new jalview.appletgui.FeatureRenderer (this.av);\r
-nfr.transferSettings (this.seqPanel.seqCanvas.fr);\r
-return nfr;\r
-});\r
-Clazz.defineMethod (c$, "alignmentChanged", \r
-function () {\r
-this.av.alignmentChanged (this);\r
-if (this.overviewPanel != null) {\r
-this.overviewPanel.updateOverviewImage ();\r
-}this.alignFrame.updateEditMenuBar ();\r
-this.repaint ();\r
-});\r
-Clazz.defineMethod (c$, "fontChanged", \r
-function () {\r
-this.idPanel.idCanvas.image = null;\r
-var fm = this.getFontMetrics (this.av.getFont ());\r
-this.scalePanel.setSize ( new java.awt.Dimension (10, this.av.getCharHeight () + fm.getDescent ()));\r
-this.idwidthAdjuster.setSize ( new java.awt.Dimension (10, this.av.getCharHeight () + fm.getDescent ()));\r
-this.av.updateSequenceIdColours ();\r
-this.annotationPanel.image = null;\r
-var ap = this.annotationPanel.adjustPanelHeight (false);\r
-var d = this.calculateIdWidth ();\r
-d.setSize (d.width + 4, this.seqPanel.seqCanvas.getSize ().height);\r
-this.alabels.setSize (d.width + 4, ap);\r
-this.idPanel.idCanvas.setSize (d);\r
-this.hscrollFillerPanel.setSize (d);\r
-this.validateAnnotationDimensions (false);\r
-this.annotationPanel.repaint ();\r
-this.validate ();\r
-this.repaint ();\r
-if (this.overviewPanel != null) {\r
-this.overviewPanel.updateOverviewImage ();\r
-}});\r
-Clazz.defineMethod (c$, "setIdWidth", \r
-function (w, h) {\r
-this.idPanel.idCanvas.setSize (w, h);\r
-this.idPanelHolder.setSize (w, this.idPanelHolder.getSize ().height);\r
-this.annotationSpaceFillerHolder.setSize (w, this.annotationSpaceFillerHolder.getSize ().height);\r
-this.alabels.setSize (w, this.alabels.getSize ().height);\r
-this.validate ();\r
-}, "~N,~N");\r
-Clazz.defineMethod (c$, "calculateIdWidth", \r
-function () {\r
-if (this.av.nullFrame == null) {\r
-this.av.nullFrame =  new awt2swing.Frame ();\r
-this.av.nullFrame.addNotify ();\r
-this.av.nullFrame.setFont (this.av.font);\r
-}var g = this.av.nullFrame.getGraphics ();\r
-var fm = g.getFontMetrics (this.av.font);\r
-var al = this.av.getAlignment ();\r
-var i = 0;\r
-var idWidth = 0;\r
-var id;\r
-while (i < al.getHeight () && al.getSequenceAt (i) != null) {\r
-var s = al.getSequenceAt (i);\r
-id = s.getDisplayId (this.av.getShowJVSuffix ());\r
-if (fm.stringWidth (id) > idWidth) {\r
-idWidth = fm.stringWidth (id);\r
-}i++;\r
-}\r
-i = 0;\r
-if (al.getAlignmentAnnotation () != null) {\r
-fm = g.getFontMetrics (this.av.nullFrame.getFont ());\r
-while (i < al.getAlignmentAnnotation ().length) {\r
-var label = al.getAlignmentAnnotation ()[i].label;\r
-if (fm.stringWidth (label) > idWidth) {\r
-idWidth = fm.stringWidth (label);\r
-}i++;\r
-}\r
-}return  new java.awt.Dimension (idWidth, this.idPanel.idCanvas.getSize ().height);\r
-});\r
-Clazz.defineMethod (c$, "highlightSearchResults", \r
-function (results) {\r
-this.scrollToPosition (results);\r
-this.seqPanel.seqCanvas.highlightSearchResults (results);\r
-}, "jalview.datamodel.SearchResults");\r
-Clazz.defineMethod (c$, "scrollToPosition", \r
-function (results) {\r
-return this.scrollToPosition (results, true);\r
-}, "jalview.datamodel.SearchResults");\r
-Clazz.defineMethod (c$, "scrollToPosition", \r
-function (results, redrawOverview) {\r
-return this.scrollToPosition (results, redrawOverview, false);\r
-}, "jalview.datamodel.SearchResults,~B");\r
-Clazz.defineMethod (c$, "scrollToPosition", \r
-function (results, redrawOverview, centre) {\r
-if (results != null && results.getSize () > 0) {\r
-var alignment = this.av.getAlignment ();\r
-var seqIndex = alignment.findIndex (results);\r
-if (seqIndex == -1) {\r
-return false;\r
-}var seq = alignment.getSequenceAt (seqIndex);\r
-var r = results.getResults (seq, 0, alignment.getWidth ());\r
-if (r == null) {\r
-if (jalview.bin.JalviewLite.debug) {\r
-System.out.println ("DEBUG: scroll didn't happen - results not within alignment : " + seq.getStart () + "," + seq.getEnd ());\r
-}return false;\r
-}if (jalview.bin.JalviewLite.debug) {\r
-}var start = r[0];\r
-var end = r[1];\r
-if (centre) {\r
-var offset = Clazz.doubleToInt ((this.av.getEndRes () - this.av.getStartRes () + 1) / 2) - 1;\r
-start = Math.max (start - offset, 0);\r
-end = Math.min (end + offset, seq.getEnd () - 1);\r
-}if (start < 0) {\r
-return false;\r
-}if (end == seq.getEnd ()) {\r
-return false;\r
-}return this.scrollTo (start, end, seqIndex, false, redrawOverview);\r
-}return true;\r
-}, "jalview.datamodel.SearchResults,~B,~B");\r
-Clazz.defineMethod (c$, "scrollTo", \r
-function (ostart, end, seqIndex, scrollToNearest, redrawOverview) {\r
-var startv;\r
-var endv;\r
-var starts;\r
-var ends;\r
-var width;\r
-var start = -1;\r
-if (this.av.hasHiddenColumns ()) {\r
-start = this.av.getColumnSelection ().findColumnPosition (ostart);\r
-end = this.av.getColumnSelection ().findColumnPosition (end);\r
-if (start == end) {\r
-if (!scrollToNearest && !this.av.getColumnSelection ().isVisible (ostart)) {\r
-return false;\r
-}}} else {\r
-start = ostart;\r
-}if (!this.av.getWrapAlignment ()) {\r
-if ((startv = this.av.getStartRes ()) >= start) {\r
-this.setScrollValues (start - 1, seqIndex);\r
-} else if ((endv = this.av.getEndRes ()) <= end) {\r
-this.setScrollValues (startv + 1 + end - endv, seqIndex);\r
-} else if ((starts = this.av.getStartSeq ()) > seqIndex) {\r
-this.setScrollValues (this.av.getStartRes (), seqIndex);\r
-} else if ((ends = this.av.getEndSeq ()) <= seqIndex) {\r
-this.setScrollValues (this.av.getStartRes (), starts + seqIndex - ends + 1);\r
-}} else {\r
-this.scrollToWrappedVisible (start);\r
-}if (redrawOverview && this.overviewPanel != null) {\r
-this.overviewPanel.setBoxPosition ();\r
-}this.paintAlignment (redrawOverview);\r
-return true;\r
-}, "~N,~N,~N,~B,~B");\r
-Clazz.defineMethod (c$, "scrollToWrappedVisible", \r
-function (res) {\r
-var cwidth = this.seqPanel.seqCanvas.getWrappedCanvasWidth (this.seqPanel.seqCanvas.getSize ().width);\r
-if (res <= this.av.getStartRes () || res >= (this.av.getStartRes () + cwidth)) {\r
-this.vscroll.setValue (Clazz.doubleToInt (res / cwidth));\r
-this.av.startRes = this.vscroll.getValue () * cwidth;\r
-}}, "~N");\r
-Clazz.defineMethod (c$, "getOverviewPanel", \r
-function () {\r
-return this.overviewPanel;\r
-});\r
-Clazz.defineMethod (c$, "setOverviewPanel", \r
-function (op) {\r
-this.overviewPanel = op;\r
-}, "jalview.appletgui.OverviewPanel");\r
-Clazz.defineMethod (c$, "setAnnotationVisible", \r
-function (b) {\r
-if (!this.av.getWrapAlignment ()) {\r
-this.annotationSpaceFillerHolder.setVisible (b);\r
-this.annotationPanelHolder.setVisible (b);\r
-} else {\r
-this.annotationSpaceFillerHolder.setVisible (false);\r
-this.annotationPanelHolder.setVisible (false);\r
-}this.validate ();\r
-this.repaint ();\r
-}, "~B");\r
-Clazz.overrideMethod (c$, "adjustAnnotationHeight", \r
-function () {\r
-if (this.alignFrame.getSize ().height == 0) {\r
-System.out.println ("adjustAnnotationHeight frame size zero NEEDS FIXING");\r
-}this.fontChanged ();\r
-this.validateAnnotationDimensions (true);\r
-this.apvscroll.addNotify ();\r
-this.hscroll.addNotify ();\r
-this.validate ();\r
-this.paintAlignment (true);\r
-});\r
-Clazz.defineMethod (c$, "validateAnnotationDimensions", \r
-function (adjustPanelHeight) {\r
-var rowHeight = this.av.getCharHeight ();\r
-var alignmentHeight = rowHeight * this.av.getAlignment ().getHeight ();\r
-var annotationHeight = this.av.calcPanelHeight ();\r
-var mheight = annotationHeight;\r
-var d = this.sequenceHolderPanel.getSize ();\r
-var availableHeight = d.height - this.scalePanelHolder.getHeight ();\r
-if (adjustPanelHeight) {\r
-if (annotationHeight + alignmentHeight > availableHeight) {\r
-annotationHeight = Math.min (annotationHeight, availableHeight - 2 * rowHeight);\r
-}} else {\r
-annotationHeight = this.annotationPanelHolder.getSize ().height;\r
-}if (availableHeight - annotationHeight < 5) {\r
-annotationHeight = availableHeight;\r
-}this.annotationPanel.setSize ( new java.awt.Dimension (d.width, annotationHeight));\r
-this.annotationPanelHolder.setSize ( new java.awt.Dimension (d.width, annotationHeight));\r
-this.seqPanel.seqCanvas.setSize (d.width, this.seqPanel.seqCanvas.getSize ().height);\r
-var e = this.idPanel.getSize ();\r
-this.alabels.setSize ( new java.awt.Dimension (e.width, annotationHeight));\r
-this.annotationSpaceFillerHolder.setSize ( new java.awt.Dimension (e.width, annotationHeight));\r
-var s = this.apvscroll.getValue ();\r
-if (s > mheight - annotationHeight) {\r
-s = 0;\r
-}this.apvscroll.setValues (s, annotationHeight, 0, mheight);\r
-this.annotationPanel.setScrollOffset (this.apvscroll.getValue (), false);\r
-this.alabels.setScrollOffset (this.apvscroll.getValue (), false);\r
-}, "~B");\r
-Clazz.defineMethod (c$, "setWrapAlignment", \r
-function (wrap) {\r
-this.av.startSeq = 0;\r
-this.av.startRes = 0;\r
-this.scalePanelHolder.setVisible (!wrap);\r
-this.hscroll.setVisible (!wrap);\r
-this.idwidthAdjuster.setVisible (!wrap);\r
-if (wrap) {\r
-this.annotationPanelHolder.setVisible (false);\r
-this.annotationSpaceFillerHolder.setVisible (false);\r
-} else if (this.av.isShowAnnotation ()) {\r
-this.annotationPanelHolder.setVisible (true);\r
-this.annotationSpaceFillerHolder.setVisible (true);\r
-}this.idSpaceFillerPanel1.setVisible (!wrap);\r
-this.fontChanged ();\r
-this.validate ();\r
-this.sequenceHolderPanel.validate ();\r
-this.repaint ();\r
-}, "~B");\r
-Clazz.defineMethod (c$, "scrollUp", \r
-function (up) {\r
-if (up) {\r
-if (this.vscroll.getValue () < 1) {\r
-return false;\r
-}this.setScrollValues (this.hscroll.getValue (), this.vscroll.getValue () - 1);\r
-} else {\r
-if (this.vextent + this.vscroll.getValue () >= this.av.getAlignment ().getHeight ()) {\r
-return false;\r
-}this.setScrollValues (this.hscroll.getValue (), this.vscroll.getValue () + 1);\r
-}this.repaint ();\r
-return true;\r
-}, "~B");\r
-Clazz.defineMethod (c$, "scrollRight", \r
-function (right) {\r
-if (!right) {\r
-if (this.hscroll.getValue () < 1) {\r
-return false;\r
-}this.setScrollValues (this.hscroll.getValue () - 1, this.vscroll.getValue ());\r
-} else {\r
-if (this.hextent + this.hscroll.getValue () >= this.av.getAlignment ().getWidth ()) {\r
-return false;\r
-}this.setScrollValues (this.hscroll.getValue () + 1, this.vscroll.getValue ());\r
-}this.repaint ();\r
-return true;\r
-}, "~B");\r
-Clazz.defineMethod (c$, "setScrollValues", \r
-function (x, y) {\r
-var width = this.av.getAlignment ().getWidth ();\r
-var height = this.av.getAlignment ().getHeight ();\r
-if (this.av.hasHiddenColumns ()) {\r
-width = this.av.getColumnSelection ().findColumnPosition (width);\r
-}if (x < 0) {\r
-x = 0;\r
-};this.hextent = Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().width / this.av.getCharWidth ());\r
-this.vextent = Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().height / this.av.getCharHeight ());\r
-if (this.hextent > width) {\r
-this.hextent = width;\r
-}if (this.vextent > height) {\r
-this.vextent = height;\r
-}if ((this.hextent + x) > width) {\r
-System.err.println ("hextent was " + this.hextent + " and x was " + x);\r
-x = width - this.hextent;\r
-}if ((this.vextent + y) > height) {\r
-y = height - this.vextent;\r
-}if (y < 0) {\r
-y = 0;\r
-}if (x < 0) {\r
-System.err.println ("x was " + x);\r
-x = 0;\r
-}this.av.setStartSeq (y);\r
-var endSeq = y + this.vextent;\r
-if (endSeq > this.av.getAlignment ().getHeight ()) {\r
-endSeq = this.av.getAlignment ().getHeight ();\r
-}this.av.setEndSeq (endSeq);\r
-this.av.setStartRes (x);\r
-this.av.setEndRes ((x + (Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().width / this.av.getCharWidth ()))) - 1);\r
-this.hscroll.setValues (x, this.hextent, 0, width);\r
-this.vscroll.setValues (y, this.vextent, 0, height);\r
-if (this.overviewPanel != null) {\r
-this.overviewPanel.setBoxPosition ();\r
-}this.sendViewPosition ();\r
-}, "~N,~N");\r
-Clazz.overrideMethod (c$, "adjustmentValueChanged", \r
-function (evt) {\r
-if (this.annotationPanel == null) return;\r
-var oldX = this.av.getStartRes ();\r
-var oldY = this.av.getStartSeq ();\r
-if (evt == null || evt.getSource () === this.apvscroll) {\r
-this.annotationPanel.setScrollOffset (this.apvscroll.getValue (), false);\r
-this.alabels.setScrollOffset (this.apvscroll.getValue (), false);\r
-}if (evt == null || evt.getSource () === this.hscroll) {\r
-var x = this.hscroll.getValue ();\r
-this.av.setStartRes (x);\r
-this.av.setEndRes (x + Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().width / this.av.getCharWidth ()) - 1);\r
-}if (evt == null || evt.getSource () === this.vscroll) {\r
-var offy = this.vscroll.getValue ();\r
-if (this.av.getWrapAlignment ()) {\r
-var rowSize = this.seqPanel.seqCanvas.getWrappedCanvasWidth (this.seqPanel.seqCanvas.getSize ().width);\r
-this.av.setStartRes (this.vscroll.getValue () * rowSize);\r
-this.av.setEndRes ((this.vscroll.getValue () + 1) * rowSize);\r
-} else {\r
-this.av.setStartSeq (offy);\r
-this.av.setEndSeq (offy + Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().height / this.av.getCharHeight ()));\r
-}}if (this.overviewPanel != null) {\r
-this.overviewPanel.setBoxPosition ();\r
-}var scrollX = this.av.startRes - oldX;\r
-var scrollY = this.av.startSeq - oldY;\r
-if (this.av.getWrapAlignment () || !this.fastPaint || this.av.MAC) {\r
-this.repaint ();\r
-} else {\r
-if (scrollX > this.av.endRes - this.av.startRes) {\r
-scrollX = this.av.endRes - this.av.startRes;\r
-} else if (scrollX < this.av.startRes - this.av.endRes) {\r
-scrollX = this.av.startRes - this.av.endRes;\r
-}this.idPanel.idCanvas.fastPaint (scrollY);\r
-this.seqPanel.seqCanvas.fastPaint (scrollX, scrollY);\r
-this.scalePanel.repaint ();\r
-if (this.av.isShowAnnotation ()) {\r
-this.annotationPanel.fastPaint (this.av.getStartRes () - oldX);\r
-}}this.sendViewPosition ();\r
-if (this.isFollowingComplementScroll ()) {\r
-this.setFollowingComplementScroll (false);\r
-} else {\r
-var ap = this.getComplementPanel ();\r
-this.av.scrollComplementaryAlignment (ap);\r
-}}, "java.awt.event.AdjustmentEvent");\r
-Clazz.defineMethod (c$, "getComplementPanel", \r
-($fz = function () {\r
-var ap = null;\r
-if (this.alignFrame != null) {\r
-var sf = this.alignFrame.getSplitFrame ();\r
-if (sf != null) {\r
-var other = sf.getComplement (this.alignFrame);\r
-if (other != null) {\r
-ap = other.alignPanel;\r
-}}}return ap;\r
-}, $fz.isPrivate = true, $fz));\r
-Clazz.defineMethod (c$, "scrollToCentre", \r
-function (sr, seqOffset) {\r
-var mappedTo = sr.getResultSequence (0);\r
-var seqs = this.av.getAlignment ().getSequences ();\r
-var sequenceIndex = 0;\r
-var matched = false;\r
-for (var seq, $seq = seqs.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
-if (mappedTo === seq.getDatasetSequence ()) {\r
-matched = true;\r
-break;\r
-}sequenceIndex++;\r
-}\r
-if (!matched) {\r
-return;\r
-}sequenceIndex = Math.max (0, sequenceIndex - seqOffset);\r
-sr.getResults ().get (0).setSequence (this.av.getAlignment ().getSequenceAt (sequenceIndex));\r
-this.setFollowingComplementScroll (true);\r
-this.scrollToPosition (sr, true, true);\r
-}, "jalview.datamodel.SearchResults,~N");\r
-Clazz.defineMethod (c$, "sendViewPosition", \r
-($fz = function () {\r
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet).sendViewPosition (this, this.av.startRes, this.av.endRes, this.av.startSeq, this.av.endSeq);\r
-}, $fz.isPrivate = true, $fz));\r
-Clazz.overrideMethod (c$, "paintAlignment", \r
-function (updateOverview) {\r
-var sorter =  new jalview.analysis.AnnotationSorter (this.getAlignment (), this.av.isShowAutocalculatedAbove ());\r
-sorter.sort (this.getAlignment ().getAlignmentAnnotation (), this.av.getSortAnnotationsBy ());\r
-this.repaint ();\r
-if (updateOverview) {\r
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet).sequenceColoursChanged (this);\r
-if (this.overviewPanel != null) {\r
-this.overviewPanel.updateOverviewImage ();\r
-}}}, "~B");\r
-Clazz.overrideMethod (c$, "paintComponent", \r
-function (g) {\r
-System.out.println ("alignframe paintcomp");\r
-this.invalidate ();\r
-var d = this.idPanel.idCanvas.getSize ();\r
-var canvasHeight = this.seqPanel.seqCanvas.getSize ().height;\r
-if (canvasHeight != d.height) {\r
-this.idPanel.idCanvas.setSize (d.width, canvasHeight);\r
-}if (this.av.getWrapAlignment ()) {\r
-var maxwidth = this.av.getAlignment ().getWidth ();\r
-if (this.av.hasHiddenColumns ()) {\r
-maxwidth = this.av.getColumnSelection ().findColumnPosition (maxwidth) - 1;\r
-}var canvasWidth = this.seqPanel.seqCanvas.getWrappedCanvasWidth (this.seqPanel.seqCanvas.getSize ().width);\r
-if (canvasWidth > 0) {\r
-var max = Clazz.doubleToInt (maxwidth / canvasWidth);\r
-this.vscroll.setMaximum (1 + max);\r
-this.vscroll.setUnitIncrement (1);\r
-this.vscroll.setVisibleAmount (1);\r
-}} else {\r
-this.setScrollValues (this.av.getStartRes (), this.av.getStartSeq ());\r
-}}, "java.awt.Graphics");\r
-Clazz.defineMethod (c$, "jbInit", \r
-($fz = function () {\r
-this.setLayout ( new java.awt.BorderLayout ());\r
-this.sequenceHolderPanel.setLayout ( new java.awt.BorderLayout ());\r
-this.seqPanelHolder.setLayout ( new java.awt.BorderLayout ());\r
-this.scalePanelHolder.setBackground (java.awt.Color.white);\r
-this.scalePanelHolder.setLayout ( new java.awt.BorderLayout ());\r
-this.idPanelHolder.setLayout ( new java.awt.BorderLayout ());\r
-this.idSpaceFillerPanel1.setBackground (java.awt.Color.white);\r
-this.idSpaceFillerPanel1.setLayout ( new java.awt.BorderLayout ());\r
-this.annotationSpaceFillerHolder.setBackground (java.awt.Color.white);\r
-this.annotationSpaceFillerHolder.setLayout ( new java.awt.BorderLayout ());\r
-this.hscroll.setOrientation (0);\r
-var hscrollHolder =  new awt2swing.Panel ();\r
-hscrollHolder.setLayout ( new java.awt.BorderLayout ());\r
-this.hscrollFillerPanel.setBackground (java.awt.Color.white);\r
-this.apvscroll.setOrientation (1);\r
-this.apvscroll.setVisible (true);\r
-this.apvscroll.addAdjustmentListener (this);\r
-this.annotationPanelHolder.setBackground (java.awt.Color.white);\r
-this.annotationPanelHolder.setLayout ( new java.awt.BorderLayout ());\r
-this.annotationPanelHolder.add (this.apvscroll, "East");\r
-hscrollHolder.setBackground (java.awt.Color.white);\r
-this.seqPanelHolder.setBackground (java.awt.Color.white);\r
-this.idPanelHolder.setBackground (java.awt.Color.white);\r
-this.sequenceHolderPanel.add (this.scalePanelHolder, "North");\r
-this.sequenceHolderPanel.add (this.seqPanelHolder, "Center");\r
-this.seqPanelHolder.add (this.vscroll, "East");\r
-this.add (this.idPanelHolder, "West");\r
-this.idPanelHolder.add (this.idSpaceFillerPanel1, "North");\r
-this.idPanelHolder.add (this.annotationSpaceFillerHolder, "South");\r
-this.add (hscrollHolder, "South");\r
-hscrollHolder.add (this.hscroll, "Center");\r
-hscrollHolder.add (this.hscrollFillerPanel, "West");\r
-this.add (this.sequenceHolderPanel, "Center");\r
-}, $fz.isPrivate = true, $fz));\r
-Clazz.defineMethod (c$, "updateAnnotation", \r
-function () {\r
-this.updateAnnotation (false);\r
-});\r
-Clazz.defineMethod (c$, "updateAnnotation", \r
-function (applyGlobalSettings) {\r
-this.updateAnnotation (applyGlobalSettings, false);\r
-}, "~B");\r
-Clazz.defineMethod (c$, "updateAnnotation", \r
-function (applyGlobalSettings, preserveNewGroupSettings) {\r
-this.av.updateGroupAnnotationSettings (applyGlobalSettings, preserveNewGroupSettings);\r
-this.adjustAnnotationHeight ();\r
-}, "~B,~B");\r
-Clazz.overrideMethod (c$, "getAlignment", \r
-function () {\r
-return this.av.getAlignment ();\r
-});\r
-Clazz.overrideMethod (c$, "getViewName", \r
-function () {\r
-return this.getName ();\r
-});\r
-Clazz.overrideMethod (c$, "getStructureSelectionManager", \r
-function () {\r
-return jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet);\r
-});\r
-Clazz.overrideMethod (c$, "raiseOOMWarning", \r
-function (string, error) {\r
-System.err.println ("Out of memory whilst '" + string + "'");\r
-error.printStackTrace ();\r
-}, "~S,OutOfMemoryError");\r
-Clazz.defineMethod (c$, "setFollowingComplementScroll", \r
-function (b) {\r
-this.followingComplementScroll = b;\r
-}, "~B");\r
-Clazz.defineMethod (c$, "isFollowingComplementScroll", \r
-function () {\r
-return this.followingComplementScroll;\r
-});\r
-c$.$AlignmentPanel$1$ = function () {\r
-Clazz.pu$h ();\r
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignmentPanel$1", java.awt.event.ComponentAdapter);\r
-Clazz.overrideMethod (c$, "componentResized", \r
-function (evt) {\r
-this.b$["jalview.appletgui.AlignmentPanel"].setScrollValues (this.f$.av.getStartRes (), this.f$.av.getStartSeq ());\r
-if (this.b$["jalview.appletgui.AlignmentPanel"].getSize ().height > 0 && this.b$["jalview.appletgui.AlignmentPanel"].annotationPanelHolder.getSize ().height > 0) {\r
-this.b$["jalview.appletgui.AlignmentPanel"].validateAnnotationDimensions (false);\r
-}this.b$["jalview.appletgui.AlignmentPanel"].repaint ();\r
-}, "java.awt.event.ComponentEvent");\r
-c$ = Clazz.p0p ();\r
-};\r
-c$.$AlignmentPanel$2$ = function () {\r
-Clazz.pu$h ();\r
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignmentPanel$2", null, java.beans.PropertyChangeListener);\r
-Clazz.overrideMethod (c$, "propertyChange", \r
-function (evt) {\r
-if (evt.getPropertyName ().equals ("alignment")) {\r
-jalview.appletgui.PaintRefresher.Refresh (this.f$.ap, this.f$.av.getSequenceSetId (), true, true);\r
-this.b$["jalview.appletgui.AlignmentPanel"].alignmentChanged ();\r
-}}, "java.beans.PropertyChangeEvent");\r
-c$ = Clazz.p0p ();\r
-};\r
-});\r
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "jalview.api.AlignmentViewPanel", "java.awt.event.AdjustmentListener", "awt2swing.Scrollbar"], "jalview.appletgui.AlignmentPanel", ["awt2swing.Frame", "jalview.analysis.AnnotationSorter", "jalview.appletgui.AnnotationLabels", "$.AnnotationPanel", "$.FeatureRenderer", "$.IdPanel", "$.IdwidthAdjuster", "$.PaintRefresher", "$.ScalePanel", "$.SeqPanel", "jalview.bin.JalviewLite", "jalview.structure.StructureSelectionManager", "java.awt.BorderLayout", "$.Color", "$.Dimension", "java.awt.event.ComponentAdapter", "java.beans.PropertyChangeListener"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.av = null;
+this.overviewPanel = null;
+this.seqPanel = null;
+this.idPanel = null;
+this.idwidthAdjuster = null;
+this.alignFrame = null;
+this.scalePanel = null;
+this.annotationPanel = null;
+this.alabels = null;
+this.fastPaint = true;
+this.hextent = 0;
+this.vextent = 0;
+this.sequenceHolderPanel = null;
+this.vscroll = null;
+this.hscroll = null;
+this.seqPanelHolder = null;
+this.scalePanelHolder = null;
+this.idPanelHolder = null;
+this.idSpaceFillerPanel1 = null;
+this.annotationSpaceFillerHolder = null;
+this.hscrollFillerPanel = null;
+this.annotationPanelHolder = null;
+this.apvscroll = null;
+this.followingComplementScroll = false;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "AlignmentPanel", awt2swing.Panel, [java.awt.event.AdjustmentListener, jalview.api.AlignmentViewPanel]);
+Clazz.prepareFields (c$, function () {
+this.sequenceHolderPanel =  new awt2swing.Panel ();
+this.vscroll =  new awt2swing.Scrollbar ();
+this.hscroll =  new awt2swing.Scrollbar ();
+this.seqPanelHolder =  new awt2swing.Panel ();
+this.scalePanelHolder =  new awt2swing.Panel ();
+this.idPanelHolder =  new awt2swing.Panel ();
+this.idSpaceFillerPanel1 =  new awt2swing.Panel ();
+this.annotationSpaceFillerHolder =  new awt2swing.Panel ();
+this.hscrollFillerPanel =  new awt2swing.Panel ();
+this.annotationPanelHolder =  new awt2swing.Panel ();
+this.apvscroll =  new awt2swing.Scrollbar ();
+});
+Clazz.overrideMethod (c$, "finalize", 
+function () {
+this.alignFrame = null;
+this.av = null;
+this.seqPanel = null;
+this.seqPanelHolder = null;
+this.sequenceHolderPanel = null;
+this.scalePanel = null;
+this.scalePanelHolder = null;
+this.annotationPanel = null;
+this.annotationPanelHolder = null;
+this.annotationSpaceFillerHolder = null;
+});
+Clazz.makeConstructor (c$, 
+function (af, av) {
+Clazz.superConstructor (this, jalview.appletgui.AlignmentPanel, []);
+this.setName ("alignmentPanel");
+try {
+this.jbInit ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+this.alignFrame = af;
+this.av = av;
+this.seqPanel =  new jalview.appletgui.SeqPanel (av, this);
+this.idPanel =  new jalview.appletgui.IdPanel (av, this);
+this.scalePanel =  new jalview.appletgui.ScalePanel (av, this);
+this.idwidthAdjuster =  new jalview.appletgui.IdwidthAdjuster (this);
+this.annotationPanel =  new jalview.appletgui.AnnotationPanel (this);
+this.annotationPanelHolder.add (this.annotationPanel, "Center");
+this.sequenceHolderPanel.add (this.annotationPanelHolder, "South");
+this.alabels =  new jalview.appletgui.AnnotationLabels (this);
+this.setAnnotationVisible (av.isShowAnnotation ());
+this.idPanelHolder.add (this.idPanel, "Center");
+this.idSpaceFillerPanel1.add (this.idwidthAdjuster, "Center");
+this.annotationSpaceFillerHolder.add (this.alabels, "Center");
+this.scalePanelHolder.add (this.scalePanel, "Center");
+this.seqPanelHolder.add (this.seqPanel, "Center");
+this.fontChanged ();
+this.setScrollValues (0, 0);
+this.apvscroll.addAdjustmentListener (this);
+this.hscroll.addAdjustmentListener (this);
+this.vscroll.addAdjustmentListener (this);
+this.addComponentListener (((Clazz.isClassDefined ("jalview.appletgui.AlignmentPanel$1") ? 0 : jalview.appletgui.AlignmentPanel.$AlignmentPanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignmentPanel$1, this, Clazz.cloneFinals ("av", av))));
+var d = this.calculateIdWidth ();
+this.idPanel.idCanvas.setSize (d);
+this.hscrollFillerPanel.setSize (d.width, this.annotationPanel.getSize ().height);
+this.idPanel.idCanvas.setSize (d.width, this.seqPanel.seqCanvas.getSize ().height);
+this.annotationSpaceFillerHolder.setSize (d.width, this.annotationPanel.getSize ().height);
+this.alabels.setSize (d.width, this.annotationPanel.getSize ().height);
+var ap = this;
+av.addPropertyChangeListener (((Clazz.isClassDefined ("jalview.appletgui.AlignmentPanel$2") ? 0 : jalview.appletgui.AlignmentPanel.$AlignmentPanel$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignmentPanel$2, this, Clazz.cloneFinals ("ap", ap, "av", av))));
+}, "jalview.appletgui.AlignFrame,jalview.appletgui.AlignViewport");
+Clazz.overrideMethod (c$, "getAlignViewport", 
+function () {
+return this.av;
+});
+Clazz.defineMethod (c$, "getSequenceRenderer", 
+function () {
+return this.seqPanel.seqCanvas.sr;
+});
+Clazz.overrideMethod (c$, "getFeatureRenderer", 
+function () {
+return this.seqPanel.seqCanvas.fr;
+});
+Clazz.overrideMethod (c$, "cloneFeatureRenderer", 
+function () {
+var nfr =  new jalview.appletgui.FeatureRenderer (this.av);
+nfr.transferSettings (this.seqPanel.seqCanvas.fr);
+return nfr;
+});
+Clazz.defineMethod (c$, "alignmentChanged", 
+function () {
+this.av.alignmentChanged (this);
+if (this.overviewPanel != null) {
+this.overviewPanel.updateOverviewImage ();
+}this.alignFrame.updateEditMenuBar ();
+this.repaint ();
+});
+Clazz.defineMethod (c$, "fontChanged", 
+function () {
+this.idPanel.idCanvas.image = null;
+var fm = this.getFontMetrics (this.av.getFont ());
+this.scalePanel.setSize ( new java.awt.Dimension (10, this.av.getCharHeight () + fm.getDescent ()));
+this.idwidthAdjuster.setSize ( new java.awt.Dimension (10, this.av.getCharHeight () + fm.getDescent ()));
+this.av.updateSequenceIdColours ();
+this.annotationPanel.image = null;
+var ap = this.annotationPanel.adjustPanelHeight (false);
+var d = this.calculateIdWidth ();
+d.setSize (d.width + 4, this.seqPanel.seqCanvas.getSize ().height);
+this.alabels.setSize (d.width + 4, ap);
+this.idPanel.idCanvas.setSize (d);
+this.hscrollFillerPanel.setSize (d);
+this.validateAnnotationDimensions (false);
+this.annotationPanel.repaint ();
+this.validate ();
+this.repaint ();
+if (this.overviewPanel != null) {
+this.overviewPanel.updateOverviewImage ();
+}});
+Clazz.defineMethod (c$, "setIdWidth", 
+function (w, h) {
+this.idPanel.idCanvas.setSize (w, h);
+this.idPanelHolder.setSize (w, this.idPanelHolder.getSize ().height);
+this.annotationSpaceFillerHolder.setSize (w, this.annotationSpaceFillerHolder.getSize ().height);
+this.alabels.setSize (w, this.alabels.getSize ().height);
+this.validate ();
+}, "~N,~N");
+Clazz.defineMethod (c$, "calculateIdWidth", 
+function () {
+if (this.av.nullFrame == null) {
+this.av.nullFrame =  new awt2swing.Frame ();
+this.av.nullFrame.addNotify ();
+this.av.nullFrame.setFont (this.av.font);
+}var g = this.av.nullFrame.getGraphics ();
+var fm = g.getFontMetrics (this.av.font);
+var al = this.av.getAlignment ();
+var i = 0;
+var idWidth = 0;
+var id;
+while (i < al.getHeight () && al.getSequenceAt (i) != null) {
+var s = al.getSequenceAt (i);
+id = s.getDisplayId (this.av.getShowJVSuffix ());
+if (fm.stringWidth (id) > idWidth) {
+idWidth = fm.stringWidth (id);
+}i++;
+}
+i = 0;
+if (al.getAlignmentAnnotation () != null) {
+fm = g.getFontMetrics (this.av.nullFrame.getFont ());
+while (i < al.getAlignmentAnnotation ().length) {
+var label = al.getAlignmentAnnotation ()[i].label;
+if (fm.stringWidth (label) > idWidth) {
+idWidth = fm.stringWidth (label);
+}i++;
+}
+}return  new java.awt.Dimension (idWidth, this.idPanel.idCanvas.getSize ().height);
+});
+Clazz.defineMethod (c$, "highlightSearchResults", 
+function (results) {
+this.scrollToPosition (results);
+this.seqPanel.seqCanvas.highlightSearchResults (results);
+}, "jalview.datamodel.SearchResults");
+Clazz.defineMethod (c$, "scrollToPosition", 
+function (results) {
+return this.scrollToPosition (results, true);
+}, "jalview.datamodel.SearchResults");
+Clazz.defineMethod (c$, "scrollToPosition", 
+function (results, redrawOverview) {
+return this.scrollToPosition (results, redrawOverview, false);
+}, "jalview.datamodel.SearchResults,~B");
+Clazz.defineMethod (c$, "scrollToPosition", 
+function (results, redrawOverview, centre) {
+if (results != null && results.getSize () > 0) {
+var alignment = this.av.getAlignment ();
+var seqIndex = alignment.findIndex (results);
+if (seqIndex == -1) {
+return false;
+}var seq = alignment.getSequenceAt (seqIndex);
+var r = results.getResults (seq, 0, alignment.getWidth ());
+if (r == null) {
+if (jalview.bin.JalviewLite.debug) {
+System.out.println ("DEBUG: scroll didn't happen - results not within alignment : " + seq.getStart () + "," + seq.getEnd ());
+}return false;
+}if (jalview.bin.JalviewLite.debug) {
+}var start = r[0];
+var end = r[1];
+if (centre) {
+var offset = Clazz.doubleToInt ((this.av.getEndRes () - this.av.getStartRes () + 1) / 2) - 1;
+start = Math.max (start - offset, 0);
+end = Math.min (end + offset, seq.getEnd () - 1);
+}if (start < 0) {
+return false;
+}if (end == seq.getEnd ()) {
+return false;
+}return this.scrollTo (start, end, seqIndex, false, redrawOverview);
+}return true;
+}, "jalview.datamodel.SearchResults,~B,~B");
+Clazz.defineMethod (c$, "scrollTo", 
+function (ostart, end, seqIndex, scrollToNearest, redrawOverview) {
+var startv;
+var endv;
+var starts;
+var ends;
+var width;
+var start = -1;
+if (this.av.hasHiddenColumns ()) {
+start = this.av.getColumnSelection ().findColumnPosition (ostart);
+end = this.av.getColumnSelection ().findColumnPosition (end);
+if (start == end) {
+if (!scrollToNearest && !this.av.getColumnSelection ().isVisible (ostart)) {
+return false;
+}}} else {
+start = ostart;
+}if (!this.av.getWrapAlignment ()) {
+if ((startv = this.av.getStartRes ()) >= start) {
+this.setScrollValues (start - 1, seqIndex);
+} else if ((endv = this.av.getEndRes ()) <= end) {
+this.setScrollValues (startv + 1 + end - endv, seqIndex);
+} else if ((starts = this.av.getStartSeq ()) > seqIndex) {
+this.setScrollValues (this.av.getStartRes (), seqIndex);
+} else if ((ends = this.av.getEndSeq ()) <= seqIndex) {
+this.setScrollValues (this.av.getStartRes (), starts + seqIndex - ends + 1);
+}} else {
+this.scrollToWrappedVisible (start);
+}if (redrawOverview && this.overviewPanel != null) {
+this.overviewPanel.setBoxPosition ();
+}this.paintAlignment (redrawOverview);
+return true;
+}, "~N,~N,~N,~B,~B");
+Clazz.defineMethod (c$, "scrollToWrappedVisible", 
+function (res) {
+var cwidth = this.seqPanel.seqCanvas.getWrappedCanvasWidth (this.seqPanel.seqCanvas.getSize ().width);
+if (res <= this.av.getStartRes () || res >= (this.av.getStartRes () + cwidth)) {
+this.vscroll.setValue (Clazz.doubleToInt (res / cwidth));
+this.av.startRes = this.vscroll.getValue () * cwidth;
+}}, "~N");
+Clazz.defineMethod (c$, "getOverviewPanel", 
+function () {
+return this.overviewPanel;
+});
+Clazz.defineMethod (c$, "setOverviewPanel", 
+function (op) {
+this.overviewPanel = op;
+}, "jalview.appletgui.OverviewPanel");
+Clazz.defineMethod (c$, "setAnnotationVisible", 
+function (b) {
+if (!this.av.getWrapAlignment ()) {
+this.annotationSpaceFillerHolder.setVisible (b);
+this.annotationPanelHolder.setVisible (b);
+} else {
+this.annotationSpaceFillerHolder.setVisible (false);
+this.annotationPanelHolder.setVisible (false);
+}this.validate ();
+this.repaint ();
+}, "~B");
+Clazz.overrideMethod (c$, "adjustAnnotationHeight", 
+function () {
+if (this.alignFrame.getSize ().height == 0) {
+System.out.println ("adjustAnnotationHeight frame size zero NEEDS FIXING");
+}this.fontChanged ();
+this.validateAnnotationDimensions (true);
+this.apvscroll.addNotify ();
+this.hscroll.addNotify ();
+this.validate ();
+this.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "validateAnnotationDimensions", 
+function (adjustPanelHeight) {
+var rowHeight = this.av.getCharHeight ();
+var alignmentHeight = rowHeight * this.av.getAlignment ().getHeight ();
+var annotationHeight = this.av.calcPanelHeight ();
+var mheight = annotationHeight;
+var d = this.sequenceHolderPanel.getSize ();
+var availableHeight = d.height - this.scalePanelHolder.getHeight ();
+if (adjustPanelHeight) {
+if (annotationHeight + alignmentHeight > availableHeight) {
+annotationHeight = Math.min (annotationHeight, availableHeight - 2 * rowHeight);
+}} else {
+annotationHeight = this.annotationPanelHolder.getSize ().height;
+}if (availableHeight - annotationHeight < 5) {
+annotationHeight = availableHeight;
+}this.annotationPanel.setSize ( new java.awt.Dimension (d.width, annotationHeight));
+this.annotationPanelHolder.setSize ( new java.awt.Dimension (d.width, annotationHeight));
+this.seqPanel.seqCanvas.setSize (d.width, this.seqPanel.seqCanvas.getSize ().height);
+var e = this.idPanel.getSize ();
+this.alabels.setSize ( new java.awt.Dimension (e.width, annotationHeight));
+this.annotationSpaceFillerHolder.setSize ( new java.awt.Dimension (e.width, annotationHeight));
+var s = this.apvscroll.getValue ();
+if (s > mheight - annotationHeight) {
+s = 0;
+}this.apvscroll.setValues (s, annotationHeight, 0, mheight);
+this.annotationPanel.setScrollOffset (this.apvscroll.getValue (), false);
+this.alabels.setScrollOffset (this.apvscroll.getValue (), false);
+}, "~B");
+Clazz.defineMethod (c$, "setWrapAlignment", 
+function (wrap) {
+this.av.startSeq = 0;
+this.av.startRes = 0;
+this.scalePanelHolder.setVisible (!wrap);
+this.hscroll.setVisible (!wrap);
+this.idwidthAdjuster.setVisible (!wrap);
+if (wrap) {
+this.annotationPanelHolder.setVisible (false);
+this.annotationSpaceFillerHolder.setVisible (false);
+} else if (this.av.isShowAnnotation ()) {
+this.annotationPanelHolder.setVisible (true);
+this.annotationSpaceFillerHolder.setVisible (true);
+}this.idSpaceFillerPanel1.setVisible (!wrap);
+this.fontChanged ();
+this.validate ();
+this.sequenceHolderPanel.validate ();
+this.repaint ();
+}, "~B");
+Clazz.defineMethod (c$, "scrollUp", 
+function (up) {
+if (up) {
+if (this.vscroll.getValue () < 1) {
+return false;
+}this.setScrollValues (this.hscroll.getValue (), this.vscroll.getValue () - 1);
+} else {
+if (this.vextent + this.vscroll.getValue () >= this.av.getAlignment ().getHeight ()) {
+return false;
+}this.setScrollValues (this.hscroll.getValue (), this.vscroll.getValue () + 1);
+}this.repaint ();
+return true;
+}, "~B");
+Clazz.defineMethod (c$, "scrollRight", 
+function (right) {
+if (!right) {
+if (this.hscroll.getValue () < 1) {
+return false;
+}this.setScrollValues (this.hscroll.getValue () - 1, this.vscroll.getValue ());
+} else {
+if (this.hextent + this.hscroll.getValue () >= this.av.getAlignment ().getWidth ()) {
+return false;
+}this.setScrollValues (this.hscroll.getValue () + 1, this.vscroll.getValue ());
+}this.repaint ();
+return true;
+}, "~B");
+Clazz.defineMethod (c$, "setScrollValues", 
+function (x, y) {
+var width = this.av.getAlignment ().getWidth ();
+var height = this.av.getAlignment ().getHeight ();
+if (this.av.hasHiddenColumns ()) {
+width = this.av.getColumnSelection ().findColumnPosition (width);
+}if (x < 0) {
+x = 0;
+};this.hextent = Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().width / this.av.getCharWidth ());
+this.vextent = Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().height / this.av.getCharHeight ());
+if (this.hextent > width) {
+this.hextent = width;
+}if (this.vextent > height) {
+this.vextent = height;
+}if ((this.hextent + x) > width) {
+System.err.println ("hextent was " + this.hextent + " and x was " + x);
+x = width - this.hextent;
+}if ((this.vextent + y) > height) {
+y = height - this.vextent;
+}if (y < 0) {
+y = 0;
+}if (x < 0) {
+System.err.println ("x was " + x);
+x = 0;
+}this.av.setStartSeq (y);
+var endSeq = y + this.vextent;
+if (endSeq > this.av.getAlignment ().getHeight ()) {
+endSeq = this.av.getAlignment ().getHeight ();
+}this.av.setEndSeq (endSeq);
+this.av.setStartRes (x);
+this.av.setEndRes ((x + (Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().width / this.av.getCharWidth ()))) - 1);
+this.hscroll.setValues (x, this.hextent, 0, width);
+this.vscroll.setValues (y, this.vextent, 0, height);
+if (this.overviewPanel != null) {
+this.overviewPanel.setBoxPosition ();
+}this.sendViewPosition ();
+}, "~N,~N");
+Clazz.overrideMethod (c$, "adjustmentValueChanged", 
+function (evt) {
+if (this.annotationPanel == null) return;
+var oldX = this.av.getStartRes ();
+var oldY = this.av.getStartSeq ();
+if (evt == null || evt.getSource () === this.apvscroll) {
+this.annotationPanel.setScrollOffset (this.apvscroll.getValue (), false);
+this.alabels.setScrollOffset (this.apvscroll.getValue (), false);
+}if (evt == null || evt.getSource () === this.hscroll) {
+var x = this.hscroll.getValue ();
+this.av.setStartRes (x);
+this.av.setEndRes (x + Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().width / this.av.getCharWidth ()) - 1);
+}if (evt == null || evt.getSource () === this.vscroll) {
+var offy = this.vscroll.getValue ();
+if (this.av.getWrapAlignment ()) {
+var rowSize = this.seqPanel.seqCanvas.getWrappedCanvasWidth (this.seqPanel.seqCanvas.getSize ().width);
+this.av.setStartRes (this.vscroll.getValue () * rowSize);
+this.av.setEndRes ((this.vscroll.getValue () + 1) * rowSize);
+} else {
+this.av.setStartSeq (offy);
+this.av.setEndSeq (offy + Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().height / this.av.getCharHeight ()));
+}}if (this.overviewPanel != null) {
+this.overviewPanel.setBoxPosition ();
+}var scrollX = this.av.startRes - oldX;
+var scrollY = this.av.startSeq - oldY;
+if (this.av.getWrapAlignment () || !this.fastPaint || this.av.MAC) {
+this.repaint ();
+} else {
+if (scrollX > this.av.endRes - this.av.startRes) {
+scrollX = this.av.endRes - this.av.startRes;
+} else if (scrollX < this.av.startRes - this.av.endRes) {
+scrollX = this.av.startRes - this.av.endRes;
+}this.idPanel.idCanvas.fastPaint (scrollY);
+this.seqPanel.seqCanvas.fastPaint (scrollX, scrollY);
+this.scalePanel.repaint ();
+if (this.av.isShowAnnotation ()) {
+this.annotationPanel.fastPaint (this.av.getStartRes () - oldX);
+}}this.sendViewPosition ();
+if (this.isFollowingComplementScroll ()) {
+this.setFollowingComplementScroll (false);
+} else {
+var ap = this.getComplementPanel ();
+this.av.scrollComplementaryAlignment (ap);
+}}, "java.awt.event.AdjustmentEvent");
+Clazz.defineMethod (c$, "getComplementPanel", 
+($fz = function () {
+var ap = null;
+if (this.alignFrame != null) {
+var sf = this.alignFrame.getSplitFrame ();
+if (sf != null) {
+var other = sf.getComplement (this.alignFrame);
+if (other != null) {
+ap = other.alignPanel;
+}}}return ap;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "scrollToCentre", 
+function (sr, seqOffset) {
+var mappedTo = sr.getResultSequence (0);
+var seqs = this.av.getAlignment ().getSequences ();
+var sequenceIndex = 0;
+var matched = false;
+for (var seq, $seq = seqs.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+if (mappedTo === seq.getDatasetSequence ()) {
+matched = true;
+break;
+}sequenceIndex++;
+}
+if (!matched) {
+return;
+}sequenceIndex = Math.max (0, sequenceIndex - seqOffset);
+sr.getResults ().get (0).setSequence (this.av.getAlignment ().getSequenceAt (sequenceIndex));
+this.setFollowingComplementScroll (true);
+this.scrollToPosition (sr, true, true);
+}, "jalview.datamodel.SearchResults,~N");
+Clazz.defineMethod (c$, "sendViewPosition", 
+($fz = function () {
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet).sendViewPosition (this, this.av.startRes, this.av.endRes, this.av.startSeq, this.av.endSeq);
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "paintAlignment", 
+function (updateOverview) {
+var sorter =  new jalview.analysis.AnnotationSorter (this.getAlignment (), this.av.isShowAutocalculatedAbove ());
+sorter.sort (this.getAlignment ().getAlignmentAnnotation (), this.av.getSortAnnotationsBy ());
+this.repaint ();
+if (updateOverview) {
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet).sequenceColoursChanged (this);
+if (this.overviewPanel != null) {
+this.overviewPanel.updateOverviewImage ();
+}}}, "~B");
+Clazz.overrideMethod (c$, "paintComponent", 
+function (g) {
+System.out.println ("alignframe paintcomp");
+this.invalidate ();
+var d = this.idPanel.idCanvas.getSize ();
+var canvasHeight = this.seqPanel.seqCanvas.getSize ().height;
+if (canvasHeight != d.height) {
+this.idPanel.idCanvas.setSize (d.width, canvasHeight);
+}if (this.av.getWrapAlignment ()) {
+var maxwidth = this.av.getAlignment ().getWidth ();
+if (this.av.hasHiddenColumns ()) {
+maxwidth = this.av.getColumnSelection ().findColumnPosition (maxwidth) - 1;
+}var canvasWidth = this.seqPanel.seqCanvas.getWrappedCanvasWidth (this.seqPanel.seqCanvas.getSize ().width);
+if (canvasWidth > 0) {
+var max = Clazz.doubleToInt (maxwidth / canvasWidth);
+this.vscroll.setMaximum (1 + max);
+this.vscroll.setUnitIncrement (1);
+this.vscroll.setVisibleAmount (1);
+}} else {
+this.setScrollValues (this.av.getStartRes (), this.av.getStartSeq ());
+}}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "jbInit", 
+($fz = function () {
+this.setLayout ( new java.awt.BorderLayout ());
+this.sequenceHolderPanel.setLayout ( new java.awt.BorderLayout ());
+this.seqPanelHolder.setLayout ( new java.awt.BorderLayout ());
+this.scalePanelHolder.setBackground (java.awt.Color.white);
+this.scalePanelHolder.setLayout ( new java.awt.BorderLayout ());
+this.idPanelHolder.setLayout ( new java.awt.BorderLayout ());
+this.idSpaceFillerPanel1.setBackground (java.awt.Color.white);
+this.idSpaceFillerPanel1.setLayout ( new java.awt.BorderLayout ());
+this.annotationSpaceFillerHolder.setBackground (java.awt.Color.white);
+this.annotationSpaceFillerHolder.setLayout ( new java.awt.BorderLayout ());
+this.hscroll.setOrientation (0);
+var hscrollHolder =  new awt2swing.Panel ();
+hscrollHolder.setLayout ( new java.awt.BorderLayout ());
+this.hscrollFillerPanel.setBackground (java.awt.Color.white);
+this.apvscroll.setOrientation (1);
+this.apvscroll.setVisible (true);
+this.apvscroll.addAdjustmentListener (this);
+this.annotationPanelHolder.setBackground (java.awt.Color.white);
+this.annotationPanelHolder.setLayout ( new java.awt.BorderLayout ());
+this.annotationPanelHolder.add (this.apvscroll, "East");
+hscrollHolder.setBackground (java.awt.Color.white);
+this.seqPanelHolder.setBackground (java.awt.Color.white);
+this.idPanelHolder.setBackground (java.awt.Color.white);
+this.sequenceHolderPanel.add (this.scalePanelHolder, "North");
+this.sequenceHolderPanel.add (this.seqPanelHolder, "Center");
+this.seqPanelHolder.add (this.vscroll, "East");
+this.add (this.idPanelHolder, "West");
+this.idPanelHolder.add (this.idSpaceFillerPanel1, "North");
+this.idPanelHolder.add (this.annotationSpaceFillerHolder, "South");
+this.add (hscrollHolder, "South");
+hscrollHolder.add (this.hscroll, "Center");
+hscrollHolder.add (this.hscrollFillerPanel, "West");
+this.add (this.sequenceHolderPanel, "Center");
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "updateAnnotation", 
+function () {
+this.updateAnnotation (false);
+});
+Clazz.defineMethod (c$, "updateAnnotation", 
+function (applyGlobalSettings) {
+this.updateAnnotation (applyGlobalSettings, false);
+}, "~B");
+Clazz.defineMethod (c$, "updateAnnotation", 
+function (applyGlobalSettings, preserveNewGroupSettings) {
+this.av.updateGroupAnnotationSettings (applyGlobalSettings, preserveNewGroupSettings);
+this.adjustAnnotationHeight ();
+}, "~B,~B");
+Clazz.overrideMethod (c$, "getAlignment", 
+function () {
+return this.av.getAlignment ();
+});
+Clazz.overrideMethod (c$, "getViewName", 
+function () {
+return this.getName ();
+});
+Clazz.overrideMethod (c$, "getStructureSelectionManager", 
+function () {
+return jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet);
+});
+Clazz.overrideMethod (c$, "raiseOOMWarning", 
+function (string, error) {
+System.err.println ("Out of memory whilst '" + string + "'");
+error.printStackTrace ();
+}, "~S,OutOfMemoryError");
+Clazz.defineMethod (c$, "setFollowingComplementScroll", 
+function (b) {
+this.followingComplementScroll = b;
+}, "~B");
+Clazz.defineMethod (c$, "isFollowingComplementScroll", 
+function () {
+return this.followingComplementScroll;
+});
+c$.$AlignmentPanel$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignmentPanel$1", java.awt.event.ComponentAdapter);
+Clazz.overrideMethod (c$, "componentResized", 
+function (evt) {
+this.b$["jalview.appletgui.AlignmentPanel"].setScrollValues (this.f$.av.getStartRes (), this.f$.av.getStartSeq ());
+if (this.b$["jalview.appletgui.AlignmentPanel"].getSize ().height > 0 && this.b$["jalview.appletgui.AlignmentPanel"].annotationPanelHolder.getSize ().height > 0) {
+this.b$["jalview.appletgui.AlignmentPanel"].validateAnnotationDimensions (false);
+}this.b$["jalview.appletgui.AlignmentPanel"].repaint ();
+}, "java.awt.event.ComponentEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AlignmentPanel$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignmentPanel$2", null, java.beans.PropertyChangeListener);
+Clazz.overrideMethod (c$, "propertyChange", 
+function (evt) {
+if (evt.getPropertyName ().equals ("alignment")) {
+jalview.appletgui.PaintRefresher.Refresh (this.f$.ap, this.f$.av.getSequenceSetId (), true, true);
+this.b$["jalview.appletgui.AlignmentPanel"].alignmentChanged ();
+}}, "java.beans.PropertyChangeEvent");
+c$ = Clazz.p0p ();
+};
+});