JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / util / TableSorter.js
1 Clazz.declarePackage ("jalview.util");\r
2 Clazz.load (["java.awt.event.MouseAdapter", "javax.swing.Icon", "javax.swing.event.TableModelListener", "javax.swing.table.AbstractTableModel", "$.TableCellRenderer", "java.util.ArrayList", "$.HashMap"], "jalview.util.TableSorter", ["java.awt.Color", "java.util.Arrays", "javax.swing.JLabel", "javax.swing.event.TableModelEvent"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.tableModel = null;\r
5 this.viewToModel = null;\r
6 this.modelToView = null;\r
7 this.tableHeader = null;\r
8 this.mouseListener = null;\r
9 this.tableModelListener = null;\r
10 this.columnComparators = null;\r
11 this.sortingColumns = null;\r
12 if (!Clazz.isClassDefined ("jalview.util.TableSorter.Row")) {\r
13 jalview.util.TableSorter.$TableSorter$Row$ ();\r
14 }\r
15 if (!Clazz.isClassDefined ("jalview.util.TableSorter.TableModelHandler")) {\r
16 jalview.util.TableSorter.$TableSorter$TableModelHandler$ ();\r
17 }\r
18 if (!Clazz.isClassDefined ("jalview.util.TableSorter.MouseHandler")) {\r
19 jalview.util.TableSorter.$TableSorter$MouseHandler$ ();\r
20 }\r
21 if (!Clazz.isClassDefined ("jalview.util.TableSorter.SortableHeaderRenderer")) {\r
22 jalview.util.TableSorter.$TableSorter$SortableHeaderRenderer$ ();\r
23 }\r
24 Clazz.instantialize (this, arguments);\r
25 }, jalview.util, "TableSorter", javax.swing.table.AbstractTableModel);\r
26 Clazz.prepareFields (c$, function () {\r
27 this.columnComparators =  new java.util.HashMap ();\r
28 this.sortingColumns =  new java.util.ArrayList ();\r
29 });\r
30 Clazz.makeConstructor (c$, \r
31 function () {\r
32 Clazz.superConstructor (this, jalview.util.TableSorter, []);\r
33 this.mouseListener = Clazz.innerTypeInstance (jalview.util.TableSorter.MouseHandler, this, null);\r
34 this.tableModelListener = Clazz.innerTypeInstance (jalview.util.TableSorter.TableModelHandler, this, null);\r
35 });\r
36 Clazz.makeConstructor (c$, \r
37 function (tableModel) {\r
38 this.construct ();\r
39 this.setTableModel (tableModel);\r
40 }, "javax.swing.table.TableModel");\r
41 Clazz.makeConstructor (c$, \r
42 function (tableModel, tableHeader) {\r
43 this.construct ();\r
44 this.setTableHeader (tableHeader);\r
45 this.setTableModel (tableModel);\r
46 }, "javax.swing.table.TableModel,javax.swing.table.JTableHeader");\r
47 Clazz.defineMethod (c$, "clearSortingState", \r
48 ($fz = function () {\r
49 this.viewToModel = null;\r
50 this.modelToView = null;\r
51 }, $fz.isPrivate = true, $fz));\r
52 Clazz.defineMethod (c$, "getTableModel", \r
53 function () {\r
54 return this.tableModel;\r
55 });\r
56 Clazz.defineMethod (c$, "setTableModel", \r
57 function (tableModel) {\r
58 if (this.tableModel != null) {\r
59 this.tableModel.removeTableModelListener (this.tableModelListener);\r
60 }this.tableModel = tableModel;\r
61 if (this.tableModel != null) {\r
62 this.tableModel.addTableModelListener (this.tableModelListener);\r
63 }this.clearSortingState ();\r
64 this.fireTableStructureChanged ();\r
65 }, "javax.swing.table.TableModel");\r
66 Clazz.defineMethod (c$, "getTableHeader", \r
67 function () {\r
68 return this.tableHeader;\r
69 });\r
70 Clazz.defineMethod (c$, "setTableHeader", \r
71 function (tableHeader) {\r
72 if (this.tableHeader != null) {\r
73 this.tableHeader.removeMouseListener (this.mouseListener);\r
74 var defaultRenderer = this.tableHeader.getDefaultRenderer ();\r
75 if (Clazz.instanceOf (defaultRenderer, jalview.util.TableSorter.SortableHeaderRenderer)) {\r
76 this.tableHeader.setDefaultRenderer ((defaultRenderer).tableCellRenderer);\r
77 }}this.tableHeader = tableHeader;\r
78 if (this.tableHeader != null) {\r
79 this.tableHeader.addMouseListener (this.mouseListener);\r
80 this.tableHeader.setDefaultRenderer (Clazz.innerTypeInstance (jalview.util.TableSorter.SortableHeaderRenderer, this, null, this.tableHeader.getDefaultRenderer ()));\r
81 }}, "javax.swing.table.JTableHeader");\r
82 Clazz.defineMethod (c$, "isSorting", \r
83 function () {\r
84 return this.sortingColumns.size () != 0;\r
85 });\r
86 Clazz.defineMethod (c$, "getDirective", \r
87 ($fz = function (column) {\r
88 for (var i = 0; i < this.sortingColumns.size (); i++) {\r
89 var directive = this.sortingColumns.get (i);\r
90 if (directive.column == column) {\r
91 return directive;\r
92 }}\r
93 return jalview.util.TableSorter.EMPTY_DIRECTIVE;\r
94 }, $fz.isPrivate = true, $fz), "~N");\r
95 Clazz.defineMethod (c$, "getSortingStatus", \r
96 function (column) {\r
97 return this.getDirective (column).direction;\r
98 }, "~N");\r
99 Clazz.defineMethod (c$, "sortingStatusChanged", \r
100 ($fz = function () {\r
101 this.clearSortingState ();\r
102 this.fireTableDataChanged ();\r
103 if (this.tableHeader != null) {\r
104 this.tableHeader.repaint ();\r
105 }}, $fz.isPrivate = true, $fz));\r
106 Clazz.defineMethod (c$, "setSortingStatus", \r
107 function (column, status) {\r
108 var directive = this.getDirective (column);\r
109 if (directive !== jalview.util.TableSorter.EMPTY_DIRECTIVE) {\r
110 this.sortingColumns.remove (directive);\r
111 }if (status != 0) {\r
112 this.sortingColumns.add ( new jalview.util.TableSorter.Directive (column, status));\r
113 }this.sortingStatusChanged ();\r
114 }, "~N,~N");\r
115 Clazz.defineMethod (c$, "getHeaderRendererIcon", \r
116 function (column, size) {\r
117 var directive = this.getDirective (column);\r
118 if (directive === jalview.util.TableSorter.EMPTY_DIRECTIVE) {\r
119 return null;\r
120 }return  new jalview.util.TableSorter.Arrow (directive.direction == -1, size, this.sortingColumns.indexOf (directive));\r
121 }, "~N,~N");\r
122 Clazz.defineMethod (c$, "cancelSorting", \r
123 ($fz = function () {\r
124 this.sortingColumns.clear ();\r
125 this.sortingStatusChanged ();\r
126 }, $fz.isPrivate = true, $fz));\r
127 Clazz.defineMethod (c$, "setColumnComparator", \r
128 function (type, comparator) {\r
129 if (comparator == null) {\r
130 this.columnComparators.remove (type);\r
131 } else {\r
132 this.columnComparators.put (type, comparator);\r
133 }}, "Class,java.util.Comparator");\r
134 Clazz.defineMethod (c$, "getComparator", \r
135 function (column) {\r
136 var columnType = this.tableModel.getColumnClass (column);\r
137 var comparator = this.columnComparators.get (columnType);\r
138 if (comparator != null) {\r
139 return comparator;\r
140 }if (Comparable.isAssignableFrom (columnType)) {\r
141 return jalview.util.TableSorter.COMPARABLE_COMAPRATOR;\r
142 }return jalview.util.TableSorter.LEXICAL_COMPARATOR;\r
143 }, "~N");\r
144 Clazz.defineMethod (c$, "getViewToModel", \r
145 ($fz = function () {\r
146 if (this.viewToModel == null) {\r
147 var tableModelRowCount = this.tableModel.getRowCount ();\r
148 this.viewToModel =  new Array (tableModelRowCount);\r
149 for (var row = 0; row < tableModelRowCount; row++) {\r
150 this.viewToModel[row] = Clazz.innerTypeInstance (jalview.util.TableSorter.Row, this, null, row);\r
151 }\r
152 if (this.isSorting ()) {\r
153 java.util.Arrays.sort (this.viewToModel);\r
154 }}return this.viewToModel;\r
155 }, $fz.isPrivate = true, $fz));\r
156 Clazz.defineMethod (c$, "modelIndex", \r
157 function (viewIndex) {\r
158 return this.getViewToModel ()[viewIndex].modelIndex;\r
159 }, "~N");\r
160 Clazz.defineMethod (c$, "getModelToView", \r
161 ($fz = function () {\r
162 if (this.modelToView == null) {\r
163 var n = this.getViewToModel ().length;\r
164 this.modelToView =  Clazz.newIntArray (n, 0);\r
165 for (var i = 0; i < n; i++) {\r
166 this.modelToView[this.modelIndex (i)] = i;\r
167 }\r
168 }return this.modelToView;\r
169 }, $fz.isPrivate = true, $fz));\r
170 Clazz.defineMethod (c$, "getRowCount", \r
171 function () {\r
172 return (this.tableModel == null) ? 0 : this.tableModel.getRowCount ();\r
173 });\r
174 Clazz.defineMethod (c$, "getColumnCount", \r
175 function () {\r
176 return (this.tableModel == null) ? 0 : this.tableModel.getColumnCount ();\r
177 });\r
178 Clazz.overrideMethod (c$, "getColumnName", \r
179 function (column) {\r
180 return this.tableModel.getColumnName (column);\r
181 }, "~N");\r
182 Clazz.overrideMethod (c$, "getColumnClass", \r
183 function (column) {\r
184 return this.tableModel.getColumnClass (column);\r
185 }, "~N");\r
186 Clazz.overrideMethod (c$, "isCellEditable", \r
187 function (row, column) {\r
188 return this.tableModel.isCellEditable (this.modelIndex (row), column);\r
189 }, "~N,~N");\r
190 Clazz.defineMethod (c$, "getValueAt", \r
191 function (row, column) {\r
192 return this.tableModel.getValueAt (this.modelIndex (row), column);\r
193 }, "~N,~N");\r
194 Clazz.overrideMethod (c$, "setValueAt", \r
195 function (aValue, row, column) {\r
196 this.tableModel.setValueAt (aValue, this.modelIndex (row), column);\r
197 }, "~O,~N,~N");\r
198 c$.$TableSorter$Row$ = function () {\r
199 Clazz.pu$h ();\r
200 c$ = Clazz.decorateAsClass (function () {\r
201 Clazz.prepareCallback (this, arguments);\r
202 this.modelIndex = 0;\r
203 Clazz.instantialize (this, arguments);\r
204 }, jalview.util.TableSorter, "Row", null, Comparable);\r
205 Clazz.makeConstructor (c$, \r
206 function (a) {\r
207 this.modelIndex = a;\r
208 }, "~N");\r
209 Clazz.overrideMethod (c$, "compareTo", \r
210 function (a) {\r
211 var b = this.modelIndex;\r
212 var c = (a).modelIndex;\r
213 for (var d = this.b$["jalview.util.TableSorter"].sortingColumns.iterator (); d.hasNext (); ) {\r
214 var e = d.next ();\r
215 var f = e.column;\r
216 var g = this.b$["jalview.util.TableSorter"].tableModel.getValueAt (b, f);\r
217 var h = this.b$["jalview.util.TableSorter"].tableModel.getValueAt (c, f);\r
218 var i = 0;\r
219 if (g == null && h == null) {\r
220 i = 0;\r
221 } else if (g == null) {\r
222 i = -1;\r
223 } else if (h == null) {\r
224 i = 1;\r
225 } else {\r
226 i = this.b$["jalview.util.TableSorter"].getComparator (f).compare (g, h);\r
227 }if (i != 0) {\r
228 return e.direction == -1 ? -i : i;\r
229 }}\r
230 return 0;\r
231 }, "~O");\r
232 c$ = Clazz.p0p ();\r
233 };\r
234 c$.$TableSorter$TableModelHandler$ = function () {\r
235 Clazz.pu$h ();\r
236 c$ = Clazz.decorateAsClass (function () {\r
237 Clazz.prepareCallback (this, arguments);\r
238 Clazz.instantialize (this, arguments);\r
239 }, jalview.util.TableSorter, "TableModelHandler", null, javax.swing.event.TableModelListener);\r
240 Clazz.overrideMethod (c$, "tableChanged", \r
241 function (a) {\r
242 if (!this.b$["jalview.util.TableSorter"].isSorting ()) {\r
243 this.b$["jalview.util.TableSorter"].clearSortingState ();\r
244 this.b$["jalview.util.TableSorter"].fireTableChanged (a);\r
245 return;\r
246 }if (a.getFirstRow () == -1) {\r
247 this.b$["jalview.util.TableSorter"].cancelSorting ();\r
248 this.b$["jalview.util.TableSorter"].fireTableChanged (a);\r
249 return;\r
250 }var b = a.getColumn ();\r
251 if (a.getFirstRow () == a.getLastRow () && b != -1 && this.b$["jalview.util.TableSorter"].getSortingStatus (b) == 0 && this.b$["jalview.util.TableSorter"].modelToView != null) {\r
252 var c = this.b$["jalview.util.TableSorter"].getModelToView ()[a.getFirstRow ()];\r
253 this.b$["jalview.util.TableSorter"].fireTableChanged ( new javax.swing.event.TableModelEvent (this.b$["jalview.util.TableSorter"], c, c, b, a.getType ()));\r
254 return;\r
255 }this.b$["jalview.util.TableSorter"].clearSortingState ();\r
256 this.b$["jalview.util.TableSorter"].fireTableDataChanged ();\r
257 return;\r
258 }, "javax.swing.event.TableModelEvent");\r
259 c$ = Clazz.p0p ();\r
260 };\r
261 c$.$TableSorter$MouseHandler$ = function () {\r
262 Clazz.pu$h ();\r
263 c$ = Clazz.decorateAsClass (function () {\r
264 Clazz.prepareCallback (this, arguments);\r
265 Clazz.instantialize (this, arguments);\r
266 }, jalview.util.TableSorter, "MouseHandler", java.awt.event.MouseAdapter);\r
267 Clazz.overrideMethod (c$, "mouseClicked", \r
268 function (a) {\r
269 var b = a.getSource ();\r
270 var c = b.getColumnModel ();\r
271 var d = c.getColumnIndexAtX (a.getX ());\r
272 var e = c.getColumn (d).getModelIndex ();\r
273 if (e != -1) {\r
274 var f = this.b$["jalview.util.TableSorter"].getSortingStatus (e);\r
275 if (!a.isControlDown ()) {\r
276 this.b$["jalview.util.TableSorter"].cancelSorting ();\r
277 }f = f + (a.isShiftDown () ? -1 : 1);\r
278 f = (f + 4) % 3 - 1;\r
279 this.b$["jalview.util.TableSorter"].setSortingStatus (e, f);\r
280 }}, "java.awt.event.MouseEvent");\r
281 c$ = Clazz.p0p ();\r
282 };\r
283 c$.$TableSorter$SortableHeaderRenderer$ = function () {\r
284 Clazz.pu$h ();\r
285 c$ = Clazz.decorateAsClass (function () {\r
286 Clazz.prepareCallback (this, arguments);\r
287 this.tableCellRenderer = null;\r
288 Clazz.instantialize (this, arguments);\r
289 }, jalview.util.TableSorter, "SortableHeaderRenderer", null, javax.swing.table.TableCellRenderer);\r
290 Clazz.makeConstructor (c$, \r
291 function (a) {\r
292 this.tableCellRenderer = a;\r
293 }, "javax.swing.table.TableCellRenderer");\r
294 Clazz.defineMethod (c$, "getTableCellRendererComponent", \r
295 function (a, b, c, d, e, f) {\r
296 var g = this.tableCellRenderer.getTableCellRendererComponent (a, b, c, d, e, f);\r
297 if (Clazz.instanceOf (g, javax.swing.JLabel)) {\r
298 var h = g;\r
299 h.setHorizontalTextPosition (2);\r
300 var i = a.convertColumnIndexToModel (f);\r
301 h.setIcon (this.b$["jalview.util.TableSorter"].getHeaderRendererIcon (i, h.getFont ().getSize ()));\r
302 }return g;\r
303 }, "javax.swing.JTable,~O,~B,~B,~N,~N");\r
304 c$ = Clazz.p0p ();\r
305 };\r
306 c$.$TableSorter$1$ = function () {\r
307 Clazz.pu$h ();\r
308 c$ = Clazz.declareAnonymous (jalview.util, "TableSorter$1", null, java.util.Comparator);\r
309 Clazz.defineMethod (c$, "compare", \r
310 function (o1, o2) {\r
311 return (o1).compareTo (o2);\r
312 }, "~O,~O");\r
313 c$ = Clazz.p0p ();\r
314 };\r
315 c$.$TableSorter$2$ = function () {\r
316 Clazz.pu$h ();\r
317 c$ = Clazz.declareAnonymous (jalview.util, "TableSorter$2", null, java.util.Comparator);\r
318 Clazz.defineMethod (c$, "compare", \r
319 function (o1, o2) {\r
320 return o1.toString ().compareTo (o2.toString ());\r
321 }, "~O,~O");\r
322 c$ = Clazz.p0p ();\r
323 };\r
324 Clazz.pu$h ();\r
325 c$ = Clazz.decorateAsClass (function () {\r
326 this.descending = false;\r
327 this.size = 0;\r
328 this.priority = 0;\r
329 Clazz.instantialize (this, arguments);\r
330 }, jalview.util.TableSorter, "Arrow", null, javax.swing.Icon);\r
331 Clazz.makeConstructor (c$, \r
332 function (a, b, c) {\r
333 this.descending = a;\r
334 this.size = b;\r
335 this.priority = c;\r
336 }, "~B,~N,~N");\r
337 Clazz.overrideMethod (c$, "paintIcon", \r
338 function (a, b, c, d) {\r
339 var e = a == null ? java.awt.Color.GRAY : a.getBackground ();\r
340 var f = Clazz.doubleToInt (Clazz.doubleToInt (this.size / 2) * Math.pow (0.8, this.priority));\r
341 var g = this.descending ? f : -f;\r
342 d = d + Clazz.doubleToInt (5 * this.size / 6) + (this.descending ? -g : 0);\r
343 var h = this.descending ? 1 : -1;\r
344 b.translate (c, d);\r
345 b.setColor (e.darker ());\r
346 b.drawLine (Clazz.doubleToInt (f / 2), g, 0, 0);\r
347 b.drawLine (Clazz.doubleToInt (f / 2), g + h, 0, h);\r
348 b.setColor (e.brighter ());\r
349 b.drawLine (Clazz.doubleToInt (f / 2), g, f, 0);\r
350 b.drawLine (Clazz.doubleToInt (f / 2), g + h, f, h);\r
351 if (this.descending) {\r
352 b.setColor (e.darker ().darker ());\r
353 } else {\r
354 b.setColor (e.brighter ().brighter ());\r
355 }b.drawLine (f, 0, 0, 0);\r
356 b.setColor (e);\r
357 b.translate (-c, -d);\r
358 }, "java.awt.Component,java.awt.Graphics,~N,~N");\r
359 Clazz.overrideMethod (c$, "getIconWidth", \r
360 function () {\r
361 return this.size;\r
362 });\r
363 Clazz.overrideMethod (c$, "getIconHeight", \r
364 function () {\r
365 return this.size;\r
366 });\r
367 c$ = Clazz.p0p ();\r
368 Clazz.pu$h ();\r
369 c$ = Clazz.decorateAsClass (function () {\r
370 this.column = 0;\r
371 this.direction = 0;\r
372 Clazz.instantialize (this, arguments);\r
373 }, jalview.util.TableSorter, "Directive");\r
374 Clazz.makeConstructor (c$, \r
375 function (a, b) {\r
376 this.column = a;\r
377 this.direction = b;\r
378 }, "~N,~N");\r
379 c$ = Clazz.p0p ();\r
380 Clazz.defineStatics (c$,\r
381 "DESCENDING", -1,\r
382 "NOT_SORTED", 0,\r
383 "ASCENDING", 1);\r
384 c$.EMPTY_DIRECTIVE = c$.prototype.EMPTY_DIRECTIVE =  new jalview.util.TableSorter.Directive (-1, 0);\r
385 c$.COMPARABLE_COMAPRATOR = c$.prototype.COMPARABLE_COMAPRATOR = ((Clazz.isClassDefined ("jalview.util.TableSorter$1") ? 0 : jalview.util.TableSorter.$TableSorter$1$ ()), Clazz.innerTypeInstance (jalview.util.TableSorter$1, this, null));\r
386 c$.LEXICAL_COMPARATOR = c$.prototype.LEXICAL_COMPARATOR = ((Clazz.isClassDefined ("jalview.util.TableSorter$2") ? 0 : jalview.util.TableSorter.$TableSorter$2$ ()), Clazz.innerTypeInstance (jalview.util.TableSorter$2, this, null));\r
387 });\r