JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / jalview / appletgui / ScalePanel.js
1 Clazz.declarePackage ("jalview.appletgui");\r
2 Clazz.load (["awt2swing.Panel", "java.awt.event.MouseListener", "$.MouseMotionListener"], "jalview.appletgui.ScalePanel", ["awt2swing.MenuItem", "$.PopupMenu", "jalview.datamodel.SequenceGroup", "jalview.util.MessageManager", "java.awt.Color", "java.awt.event.ActionListener"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.offy = 4;\r
5 this.$width = 0;\r
6 this.av = null;\r
7 this.ap = null;\r
8 this.stretchingGroup = false;\r
9 this.min = 0;\r
10 this.max = 0;\r
11 this.mouseDragging = false;\r
12 this.reveal = null;\r
13 Clazz.instantialize (this, arguments);\r
14 }, jalview.appletgui, "ScalePanel", awt2swing.Panel, [java.awt.event.MouseMotionListener, java.awt.event.MouseListener]);\r
15 Clazz.makeConstructor (c$, \r
16 function (av, ap) {\r
17 Clazz.superConstructor (this, jalview.appletgui.ScalePanel, []);\r
18 this.setName ("scalePanel");\r
19 this.setLayout (null);\r
20 this.av = av;\r
21 this.ap = ap;\r
22 this.addMouseListener (this);\r
23 this.addMouseMotionListener (this);\r
24 }, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");\r
25 Clazz.overrideMethod (c$, "mousePressed", \r
26 function (evt) {\r
27 var x = (Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ())) + this.av.getStartRes ();\r
28 var res;\r
29 if (this.av.hasHiddenColumns ()) {\r
30 res = this.av.getColumnSelection ().adjustForHiddenColumns (x);\r
31 } else {\r
32 res = x;\r
33 }this.min = res;\r
34 this.max = res;\r
35 if ((evt.getModifiers () & 4) == 4) {\r
36 var pop =  new awt2swing.PopupMenu ();\r
37 if (this.reveal != null) {\r
38 var item =  new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.reveal"));\r
39 item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.ScalePanel$1") ? 0 : jalview.appletgui.ScalePanel.$ScalePanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.ScalePanel$1, this, null)));\r
40 pop.add (item);\r
41 if (this.av.getColumnSelection ().hasManyHiddenColumns ()) {\r
42 item =  new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.reveal_all"));\r
43 item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.ScalePanel$2") ? 0 : jalview.appletgui.ScalePanel.$ScalePanel$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.ScalePanel$2, this, null)));\r
44 pop.add (item);\r
45 }this.add (pop);\r
46 pop.show (this, evt.getX (), evt.getY ());\r
47 } else if (this.av.getColumnSelection ().contains (res)) {\r
48 var item =  new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.hide_columns"));\r
49 item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.ScalePanel$3") ? 0 : jalview.appletgui.ScalePanel.$ScalePanel$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.ScalePanel$3, this, Clazz.cloneFinals ("res", res))));\r
50 pop.add (item);\r
51 this.add (pop);\r
52 pop.show (this, evt.getX (), evt.getY ());\r
53 }} else {\r
54 if (!evt.isControlDown () && !evt.isShiftDown ()) {\r
55 this.av.getColumnSelection ().clear ();\r
56 }this.av.getColumnSelection ().addElement (res);\r
57 var sg =  new jalview.datamodel.SequenceGroup ();\r
58 for (var i = 0; i < this.av.getAlignment ().getSequences ().size (); i++) {\r
59 sg.addSequence (this.av.getAlignment ().getSequenceAt (i), false);\r
60 }\r
61 sg.setStartRes (res);\r
62 sg.setEndRes (res);\r
63 this.av.setSelectionGroup (sg);\r
64 if (evt.isShiftDown ()) {\r
65 var min = Math.min (this.av.getColumnSelection ().getMin (), res);\r
66 var max = Math.max (this.av.getColumnSelection ().getMax (), res);\r
67 for (var i = min; i < max; i++) {\r
68 this.av.getColumnSelection ().addElement (i);\r
69 }\r
70 sg.setStartRes (min);\r
71 sg.setEndRes (max);\r
72 }}this.ap.paintAlignment (true);\r
73 this.av.sendSelection ();\r
74 }, "java.awt.event.MouseEvent");\r
75 Clazz.overrideMethod (c$, "mouseReleased", \r
76 function (evt) {\r
77 this.mouseDragging = false;\r
78 var res = (Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ())) + this.av.getStartRes ();\r
79 if (res > this.av.getAlignment ().getWidth ()) {\r
80 res = this.av.getAlignment ().getWidth () - 1;\r
81 }if (this.av.hasHiddenColumns ()) {\r
82 res = this.av.getColumnSelection ().adjustForHiddenColumns (res);\r
83 }if (!this.stretchingGroup) {\r
84 this.ap.paintAlignment (false);\r
85 return;\r
86 }var sg = this.av.getSelectionGroup ();\r
87 if (res > sg.getStartRes ()) {\r
88 sg.setEndRes (res);\r
89 } else if (res < sg.getStartRes ()) {\r
90 sg.setStartRes (res);\r
91 }this.stretchingGroup = false;\r
92 this.ap.paintAlignment (false);\r
93 this.av.sendSelection ();\r
94 }, "java.awt.event.MouseEvent");\r
95 Clazz.overrideMethod (c$, "mouseDragged", \r
96 function (evt) {\r
97 this.mouseDragging = true;\r
98 var res = (Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ())) + this.av.getStartRes ();\r
99 if (res < 0) {\r
100 res = 0;\r
101 }if (this.av.hasHiddenColumns ()) {\r
102 res = this.av.getColumnSelection ().adjustForHiddenColumns (res);\r
103 }if (res > this.av.getAlignment ().getWidth ()) {\r
104 res = this.av.getAlignment ().getWidth () - 1;\r
105 }if (res < this.min) {\r
106 this.min = res;\r
107 }if (res > this.max) {\r
108 this.max = res;\r
109 }var sg = this.av.getSelectionGroup ();\r
110 if (sg != null) {\r
111 this.stretchingGroup = true;\r
112 if (!this.av.getColumnSelection ().contains (res)) {\r
113 this.av.getColumnSelection ().addElement (res);\r
114 }if (res > sg.getStartRes ()) {\r
115 sg.setEndRes (res);\r
116 }if (res < sg.getStartRes ()) {\r
117 sg.setStartRes (res);\r
118 }var col;\r
119 for (var i = this.min; i <= this.max; i++) {\r
120 col = this.av.getColumnSelection ().adjustForHiddenColumns (i);\r
121 if ((col < sg.getStartRes ()) || (col > sg.getEndRes ())) {\r
122 this.av.getColumnSelection ().removeElement (col);\r
123 } else {\r
124 this.av.getColumnSelection ().addElement (col);\r
125 }}\r
126 this.ap.paintAlignment (false);\r
127 }}, "java.awt.event.MouseEvent");\r
128 Clazz.overrideMethod (c$, "mouseEntered", \r
129 function (evt) {\r
130 if (this.mouseDragging) {\r
131 this.ap.seqPanel.scrollCanvas (null);\r
132 }}, "java.awt.event.MouseEvent");\r
133 Clazz.overrideMethod (c$, "mouseExited", \r
134 function (evt) {\r
135 if (this.mouseDragging) {\r
136 this.ap.seqPanel.scrollCanvas (evt);\r
137 }}, "java.awt.event.MouseEvent");\r
138 Clazz.overrideMethod (c$, "mouseClicked", \r
139 function (evt) {\r
140 }, "java.awt.event.MouseEvent");\r
141 Clazz.overrideMethod (c$, "mouseMoved", \r
142 function (evt) {\r
143 if (!this.av.hasHiddenColumns ()) {\r
144 return;\r
145 }var res = (Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ())) + this.av.getStartRes ();\r
146 res = this.av.getColumnSelection ().adjustForHiddenColumns (res);\r
147 this.reveal = null;\r
148 for (var region, $region = this.av.getColumnSelection ().getHiddenColumns ().iterator (); $region.hasNext () && ((region = $region.next ()) || true);) {\r
149 if (res + 1 == region[0] || res - 1 == region[1]) {\r
150 this.reveal = region;\r
151 break;\r
152 }}\r
153 this.repaint ();\r
154 }, "java.awt.event.MouseEvent");\r
155 Clazz.overrideMethod (c$, "paintComponent", \r
156 function (g) {\r
157 if (this.av.getWrapAlignment ()) return;\r
158 this.drawScale (g, this.av.getStartRes (), this.av.getEndRes (), this.getSize ().width, this.getSize ().height);\r
159 }, "java.awt.Graphics");\r
160 Clazz.defineMethod (c$, "drawScale", \r
161 function (gg, startx, endx, width, height) {\r
162 gg.setFont (this.av.getFont ());\r
163 gg.setColor (java.awt.Color.white);\r
164 gg.fillRect (0, 0, width, height);\r
165 gg.setColor (java.awt.Color.black);\r
166 var cs = this.av.getColumnSelection ();\r
167 gg.setColor ( new java.awt.Color (220, 0, 0));\r
168 var avcharWidth = this.av.getCharWidth ();\r
169 var avcharHeight = this.av.getCharHeight ();\r
170 for (var i = 0; i < cs.size (); i++) {\r
171 var sel = cs.columnAt (i);\r
172 if (this.av.hasHiddenColumns ()) {\r
173 sel = this.av.getColumnSelection ().findColumnPosition (sel);\r
174 }if ((sel >= startx) && (sel <= endx)) {\r
175 gg.fillRect ((sel - startx) * avcharWidth, 0, avcharWidth, this.getSize ().height);\r
176 }}\r
177 gg.setColor (java.awt.Color.black);\r
178 var scalestartx = (Clazz.doubleToInt (startx / 10)) * 10;\r
179 var fm = gg.getFontMetrics (this.av.getFont ());\r
180 var y = avcharHeight - fm.getDescent ();\r
181 if ((scalestartx % 10) == 0) {\r
182 scalestartx += 5;\r
183 }var string;\r
184 var maxX = 0;\r
185 for (var i = scalestartx; i < endx; i += 5) {\r
186 if ((i % 10) == 0) {\r
187 string = String.valueOf (this.av.getColumnSelection ().adjustForHiddenColumns (i));\r
188 if ((i - startx - 1) * avcharWidth > maxX) {\r
189 gg.drawString (string, (i - startx - 1) * avcharWidth, y);\r
190 maxX = (i - startx + 1) * avcharWidth + fm.stringWidth (string);\r
191 }gg.drawLine (((i - startx - 1) * avcharWidth) + (Clazz.doubleToInt (avcharWidth / 2)), y + 2, ((i - startx - 1) * avcharWidth) + (Clazz.doubleToInt (avcharWidth / 2)), y + (fm.getDescent () * 2));\r
192 } else {\r
193 gg.drawLine (((i - startx - 1) * avcharWidth) + (Clazz.doubleToInt (avcharWidth / 2)), y + fm.getDescent (), ((i - startx - 1) * avcharWidth) + (Clazz.doubleToInt (avcharWidth / 2)), y + (fm.getDescent () * 2));\r
194 }}\r
195 if (this.av.hasHiddenColumns ()) {\r
196 gg.setColor (java.awt.Color.blue);\r
197 var res;\r
198 if (this.av.getShowHiddenMarkers ()) {\r
199 for (var i = 0; i < this.av.getColumnSelection ().getHiddenColumns ().size (); i++) {\r
200 res = this.av.getColumnSelection ().findHiddenRegionPosition (i) - startx;\r
201 if (res < 0 || res > endx - scalestartx) {\r
202 continue;\r
203 }gg.fillPolygon ( Clazz.newIntArray (-1, [res * avcharWidth - Clazz.doubleToInt (avcharHeight / 4), res * avcharWidth + Clazz.doubleToInt (avcharHeight / 4), res * avcharWidth]),  Clazz.newIntArray (-1, [y - Clazz.doubleToInt (avcharHeight / 2), y - Clazz.doubleToInt (avcharHeight / 2), y + 8]), 3);\r
204 }\r
205 }if (this.reveal != null && this.reveal[0] > startx && this.reveal[0] < endx) {\r
206 gg.drawString (jalview.util.MessageManager.getString ("label.reveal_columns"), this.reveal[0] * avcharWidth, 0);\r
207 }}}, "java.awt.Graphics,~N,~N,~N,~N");\r
208 c$.$ScalePanel$1$ = function () {\r
209 Clazz.pu$h(self.c$);\r
210 c$ = Clazz.declareAnonymous (jalview.appletgui, "ScalePanel$1", null, java.awt.event.ActionListener);\r
211 Clazz.overrideMethod (c$, "actionPerformed", \r
212 function (e) {\r
213 this.b$["jalview.appletgui.ScalePanel"].av.showColumn (this.b$["jalview.appletgui.ScalePanel"].reveal[0]);\r
214 this.b$["jalview.appletgui.ScalePanel"].reveal = null;\r
215 this.b$["jalview.appletgui.ScalePanel"].ap.paintAlignment (true);\r
216 if (this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel != null) {\r
217 this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel.updateOverviewImage ();\r
218 }}, "java.awt.event.ActionEvent");\r
219 c$ = Clazz.p0p ();\r
220 };\r
221 c$.$ScalePanel$2$ = function () {\r
222 Clazz.pu$h(self.c$);\r
223 c$ = Clazz.declareAnonymous (jalview.appletgui, "ScalePanel$2", null, java.awt.event.ActionListener);\r
224 Clazz.overrideMethod (c$, "actionPerformed", \r
225 function (e) {\r
226 this.b$["jalview.appletgui.ScalePanel"].av.showAllHiddenColumns ();\r
227 this.b$["jalview.appletgui.ScalePanel"].reveal = null;\r
228 this.b$["jalview.appletgui.ScalePanel"].ap.paintAlignment (true);\r
229 if (this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel != null) {\r
230 this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel.updateOverviewImage ();\r
231 }}, "java.awt.event.ActionEvent");\r
232 c$ = Clazz.p0p ();\r
233 };\r
234 c$.$ScalePanel$3$ = function () {\r
235 Clazz.pu$h(self.c$);\r
236 c$ = Clazz.declareAnonymous (jalview.appletgui, "ScalePanel$3", null, java.awt.event.ActionListener);\r
237 Clazz.overrideMethod (c$, "actionPerformed", \r
238 function (e) {\r
239 this.b$["jalview.appletgui.ScalePanel"].av.hideColumns (this.f$.res, this.f$.res);\r
240 if (this.b$["jalview.appletgui.ScalePanel"].av.getSelectionGroup () != null && this.b$["jalview.appletgui.ScalePanel"].av.getSelectionGroup ().getSize () == this.b$["jalview.appletgui.ScalePanel"].av.getAlignment ().getHeight ()) {\r
241 this.b$["jalview.appletgui.ScalePanel"].av.setSelectionGroup (null);\r
242 }this.b$["jalview.appletgui.ScalePanel"].ap.paintAlignment (true);\r
243 if (this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel != null) {\r
244 this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel.updateOverviewImage ();\r
245 }}, "java.awt.event.ActionEvent");\r
246 c$ = Clazz.p0p ();\r
247 };\r
248 });\r