| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of app; | 5 part of app; |
| 6 | 6 |
| 7 abstract class TableTreeRow extends Observable { | 7 abstract class TableTreeRow extends Observable { |
| 8 final TableTreeRow parent; | 8 final TableTreeRow parent; |
| 9 @observable final int depth; | 9 @observable final int depth; |
| 10 @observable final List<TableTreeRow> children = new List<TableTreeRow>(); | 10 @observable final List<TableTreeRow> children = new List<TableTreeRow>(); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 } | 124 } |
| 125 | 125 |
| 126 class SortedTableRow { | 126 class SortedTableRow { |
| 127 final List values; | 127 final List values; |
| 128 SortedTableRow(this.values); | 128 SortedTableRow(this.values); |
| 129 } | 129 } |
| 130 | 130 |
| 131 class SortedTable extends Observable { | 131 class SortedTable extends Observable { |
| 132 final List<SortedTableColumn> columns; | 132 final List<SortedTableColumn> columns; |
| 133 final List<SortedTableRow> rows = new List<SortedTableRow>(); | 133 final List<SortedTableRow> rows = new List<SortedTableRow>(); |
| 134 final List<int> _sortedRows = []; | 134 final List<int> sortedRows = []; |
| 135 |
| 136 void _trace(Stopwatch sw, String label) { |
| 137 print('$label took ${sw.elapsedMicroseconds} us.'); |
| 138 sw.reset(); |
| 139 } |
| 135 | 140 |
| 136 SortedTable(this.columns); | 141 SortedTable(this.columns); |
| 137 | 142 |
| 138 int _sortColumnIndex = 0; | 143 int _sortColumnIndex = 0; |
| 139 set sortColumnIndex(var index) { | 144 set sortColumnIndex(var index) { |
| 140 assert(index >= 0); | 145 assert(index >= 0); |
| 141 assert(index < columns.length); | 146 assert(index < columns.length); |
| 142 _sortColumnIndex = index; | 147 _sortColumnIndex = index; |
| 143 notifyPropertyChange(#getColumnLabel, 0, 1); | 148 notifyPropertyChange(#getColumnLabel, 0, 1); |
| 144 } | 149 } |
| 145 int get sortColumnIndex => _sortColumnIndex; | 150 int get sortColumnIndex => _sortColumnIndex; |
| 146 bool _sortDescending = true; | 151 bool _sortDescending = true; |
| 152 bool get sortDescending => _sortDescending; |
| 153 set sortDescending(var descending) { |
| 154 _sortDescending = descending; |
| 155 notifyPropertyChange(#getColumnLabel, 0, 1); |
| 156 } |
| 157 |
| 158 |
| 159 dynamic getSortKeyFor(int row, int col) { |
| 160 return rows[row].values[col]; |
| 161 } |
| 162 |
| 163 int _sortFuncDescending(int i, int j) { |
| 164 var a = getSortKeyFor(i, _sortColumnIndex); |
| 165 var b = getSortKeyFor(j, _sortColumnIndex); |
| 166 return b.compareTo(a); |
| 167 } |
| 168 |
| 169 int _sortFuncAscending(int i, int j) { |
| 170 var a = getSortKeyFor(i, _sortColumnIndex); |
| 171 var b = getSortKeyFor(j, _sortColumnIndex); |
| 172 return a.compareTo(b); |
| 173 } |
| 147 | 174 |
| 148 void sort() { | 175 void sort() { |
| 176 Stopwatch sw = new Stopwatch()..start(); |
| 149 assert(_sortColumnIndex >= 0); | 177 assert(_sortColumnIndex >= 0); |
| 150 assert(_sortColumnIndex < columns.length); | 178 assert(_sortColumnIndex < columns.length); |
| 151 _sortedRows.sort((i, j) { | 179 if (_sortDescending) { |
| 152 var a = rows[i].values[_sortColumnIndex]; | 180 sortedRows.sort(_sortFuncDescending); |
| 153 var b = rows[j].values[_sortColumnIndex]; | 181 } else { |
| 154 if (_sortDescending) { | 182 sortedRows.sort(_sortFuncAscending); |
| 155 return b.compareTo(a); | 183 } |
| 156 } else { | 184 _trace(sw, 'Sorting'); |
| 157 return a.compareTo(b); | |
| 158 } | |
| 159 }); | |
| 160 notifyPropertyChange(#sortedRows, 0, 1); | |
| 161 } | 185 } |
| 162 | 186 |
| 163 @observable List<int> get sortedRows => _sortedRows; | |
| 164 | |
| 165 void clearRows() { | 187 void clearRows() { |
| 166 rows.clear(); | 188 rows.clear(); |
| 167 _sortedRows.clear(); | 189 sortedRows.clear(); |
| 168 } | 190 } |
| 169 | 191 |
| 170 void addRow(SortedTableRow row) { | 192 void addRow(SortedTableRow row) { |
| 171 _sortedRows.add(rows.length); | 193 sortedRows.add(rows.length); |
| 172 rows.add(row); | 194 rows.add(row); |
| 173 notifyPropertyChange(#sortedRows, 0, 1); | |
| 174 } | 195 } |
| 175 | 196 |
| 176 @reflectable String getFormattedValue(int row, int column) { | 197 String getFormattedValue(int row, int column) { |
| 177 var value = getValue(row, column); | 198 var value = getValue(row, column); |
| 178 var formatter = columns[column].formatter; | 199 var formatter = columns[column].formatter; |
| 179 return formatter(value); | 200 return formatter(value); |
| 180 } | 201 } |
| 181 | 202 |
| 182 @reflectable String getColumnLabel(int column) { | 203 @observable String getColumnLabel(int column) { |
| 183 assert(column >= 0); | 204 assert(column >= 0); |
| 184 assert(column < columns.length); | 205 assert(column < columns.length); |
| 185 // TODO(johnmccutchan): Move expander display decisions into html once | 206 // TODO(johnmccutchan): Move expander display decisions into html once |
| 186 // tables and templates are better supported. | 207 // tables and templates are better supported. |
| 187 const arrowUp = '\u25BC'; | 208 const arrowUp = '\u25BC'; |
| 188 const arrowDown = '\u25B2'; | 209 const arrowDown = '\u25B2'; |
| 189 if (column != _sortColumnIndex) { | 210 if (column != _sortColumnIndex) { |
| 190 return columns[column].label + '\u2003'; | 211 return columns[column].label + '\u2003'; |
| 191 } | 212 } |
| 192 return columns[column].label + (_sortDescending ? arrowUp : arrowDown); | 213 return columns[column].label + (_sortDescending ? arrowUp : arrowDown); |
| 193 } | 214 } |
| 194 | 215 |
| 195 @reflectable dynamic getValue(int row, int column) { | 216 dynamic getValue(int row, int column) { |
| 196 return rows[row].values[column]; | 217 return rows[row].values[column]; |
| 197 } | 218 } |
| 198 } | 219 } |
| OLD | NEW |