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
15 if (!Clazz.isClassDefined ("jalview.util.TableSorter.TableModelHandler")) {
\r
16 jalview.util.TableSorter.$TableSorter$TableModelHandler$ ();
\r
18 if (!Clazz.isClassDefined ("jalview.util.TableSorter.MouseHandler")) {
\r
19 jalview.util.TableSorter.$TableSorter$MouseHandler$ ();
\r
21 if (!Clazz.isClassDefined ("jalview.util.TableSorter.SortableHeaderRenderer")) {
\r
22 jalview.util.TableSorter.$TableSorter$SortableHeaderRenderer$ ();
\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
30 Clazz.makeConstructor (c$,
\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
36 Clazz.makeConstructor (c$,
\r
37 function (tableModel) {
\r
39 this.setTableModel (tableModel);
\r
40 }, "javax.swing.table.TableModel");
\r
41 Clazz.makeConstructor (c$,
\r
42 function (tableModel, tableHeader) {
\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
49 this.viewToModel = null;
\r
50 this.modelToView = null;
\r
52 Clazz.defineMethod (c$, "getTableModel",
\r
54 return this.tableModel;
\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
68 return this.tableHeader;
\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
84 return this.sortingColumns.size () != 0;
\r
86 Clazz.defineMethod (c$, "getDirective",
\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
93 return jalview.util.TableSorter.EMPTY_DIRECTIVE;
\r
95 Clazz.defineMethod (c$, "getSortingStatus",
\r
97 return this.getDirective (column).direction;
\r
99 Clazz.defineMethod (c$, "sortingStatusChanged",
\r
101 this.clearSortingState ();
\r
102 this.fireTableDataChanged ();
\r
103 if (this.tableHeader != null) {
\r
104 this.tableHeader.repaint ();
\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
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
120 }return new jalview.util.TableSorter.Arrow (directive.direction == -1, size, this.sortingColumns.indexOf (directive));
\r
122 Clazz.defineMethod (c$, "cancelSorting",
\r
124 this.sortingColumns.clear ();
\r
125 this.sortingStatusChanged ();
\r
127 Clazz.defineMethod (c$, "setColumnComparator",
\r
128 function (type, comparator) {
\r
129 if (comparator == null) {
\r
130 this.columnComparators.remove (type);
\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
140 }if (Comparable.isAssignableFrom (columnType)) {
\r
141 return jalview.util.TableSorter.COMPARABLE_COMAPRATOR;
\r
142 }return jalview.util.TableSorter.LEXICAL_COMPARATOR;
\r
144 Clazz.defineMethod (c$, "getViewToModel",
\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
152 if (this.isSorting ()) {
\r
153 java.util.Arrays.sort (this.viewToModel);
\r
154 }}return this.viewToModel;
\r
156 Clazz.defineMethod (c$, "modelIndex",
\r
157 function (viewIndex) {
\r
158 return this.getViewToModel ()[viewIndex].modelIndex;
\r
160 Clazz.defineMethod (c$, "getModelToView",
\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
168 }return this.modelToView;
\r
170 Clazz.defineMethod (c$, "getRowCount",
\r
172 return (this.tableModel == null) ? 0 : this.tableModel.getRowCount ();
\r
174 Clazz.defineMethod (c$, "getColumnCount",
\r
176 return (this.tableModel == null) ? 0 : this.tableModel.getColumnCount ();
\r
178 Clazz.overrideMethod (c$, "getColumnName",
\r
179 function (column) {
\r
180 return this.tableModel.getColumnName (column);
\r
182 Clazz.overrideMethod (c$, "getColumnClass",
\r
183 function (column) {
\r
184 return this.tableModel.getColumnClass (column);
\r
186 Clazz.overrideMethod (c$, "isCellEditable",
\r
187 function (row, column) {
\r
188 return this.tableModel.isCellEditable (this.modelIndex (row), column);
\r
190 Clazz.defineMethod (c$, "getValueAt",
\r
191 function (row, column) {
\r
192 return this.tableModel.getValueAt (this.modelIndex (row), column);
\r
194 Clazz.overrideMethod (c$, "setValueAt",
\r
195 function (aValue, row, column) {
\r
196 this.tableModel.setValueAt (aValue, this.modelIndex (row), column);
\r
198 c$.$TableSorter$Row$ = function () {
\r
199 Clazz.pu$h(self.c$);
\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
207 this.modelIndex = a;
\r
209 Clazz.overrideMethod (c$, "compareTo",
\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
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
219 if (g == null && h == null) {
\r
221 } else if (g == null) {
\r
223 } else if (h == null) {
\r
226 i = this.b$["jalview.util.TableSorter"].getComparator (f).compare (g, h);
\r
228 return e.direction == -1 ? -i : i;
\r
234 c$.$TableSorter$TableModelHandler$ = function () {
\r
235 Clazz.pu$h(self.c$);
\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
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
246 }if (a.getFirstRow () == -1) {
\r
247 this.b$["jalview.util.TableSorter"].cancelSorting ();
\r
248 this.b$["jalview.util.TableSorter"].fireTableChanged (a);
\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
255 }this.b$["jalview.util.TableSorter"].clearSortingState ();
\r
256 this.b$["jalview.util.TableSorter"].fireTableDataChanged ();
\r
258 }, "javax.swing.event.TableModelEvent");
\r
261 c$.$TableSorter$MouseHandler$ = function () {
\r
262 Clazz.pu$h(self.c$);
\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
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
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
283 c$.$TableSorter$SortableHeaderRenderer$ = function () {
\r
284 Clazz.pu$h(self.c$);
\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
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
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
303 }, "javax.swing.JTable,~O,~B,~B,~N,~N");
\r
306 c$.$TableSorter$1$ = function () {
\r
307 Clazz.pu$h(self.c$);
\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
315 c$.$TableSorter$2$ = function () {
\r
316 Clazz.pu$h(self.c$);
\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
324 Clazz.pu$h(self.c$);
\r
325 c$ = Clazz.decorateAsClass (function () {
\r
326 this.descending = false;
\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
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
354 b.setColor (e.brighter ().brighter ());
\r
355 }b.drawLine (f, 0, 0, 0);
\r
357 b.translate (-c, -d);
\r
358 }, "java.awt.Component,java.awt.Graphics,~N,~N");
\r
359 Clazz.overrideMethod (c$, "getIconWidth",
\r
363 Clazz.overrideMethod (c$, "getIconHeight",
\r
368 Clazz.pu$h(self.c$);
\r
369 c$ = Clazz.decorateAsClass (function () {
\r
371 this.direction = 0;
\r
372 Clazz.instantialize (this, arguments);
\r
373 }, jalview.util.TableSorter, "Directive");
\r
374 Clazz.makeConstructor (c$,
\r
377 this.direction = b;
\r
380 Clazz.defineStatics (c$,
\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