Index: runtime/bin/vmservice/client/lib/src/app/view_model.dart |
diff --git a/runtime/bin/vmservice/client/lib/src/app/view_model.dart b/runtime/bin/vmservice/client/lib/src/app/view_model.dart |
index 0b90a993b6ce476d1cf305c2a60e4e2129c9e6b8..fcdb4254a6354d89a06a5ea9b6087b5bc32507c0 100644 |
--- a/runtime/bin/vmservice/client/lib/src/app/view_model.dart |
+++ b/runtime/bin/vmservice/client/lib/src/app/view_model.dart |
@@ -131,7 +131,7 @@ class SortedTableRow { |
class SortedTable extends Observable { |
final List<SortedTableColumn> columns; |
final List<SortedTableRow> rows = new List<SortedTableRow>(); |
- final List<int> _sortedRows = []; |
+ final List<int> sortedRows = []; |
SortedTable(this.columns); |
@@ -144,42 +144,57 @@ class SortedTable extends Observable { |
} |
int get sortColumnIndex => _sortColumnIndex; |
bool _sortDescending = true; |
+ bool get sortDescending => _sortDescending; |
+ set sortDescending(var descending) { |
+ _sortDescending = descending; |
+ notifyPropertyChange(#getColumnLabel, 0, 1); |
+ } |
+ |
+ |
+ dynamic getSortKeyFor(int row, int col) { |
+ return rows[row].values[col]; |
+ } |
+ |
+ int _sortFuncDescending(int i, int j) { |
+ var a = getSortKeyFor(i, _sortColumnIndex); |
+ var b = getSortKeyFor(j, _sortColumnIndex); |
+ return b.compareTo(a); |
+ } |
+ |
+ int _sortFuncAscending(int i, int j) { |
+ var a = getSortKeyFor(i, _sortColumnIndex); |
+ var b = getSortKeyFor(j, _sortColumnIndex); |
+ return a.compareTo(b); |
+ } |
void sort() { |
+ Stopwatch sw = new Stopwatch()..start(); |
assert(_sortColumnIndex >= 0); |
assert(_sortColumnIndex < columns.length); |
- _sortedRows.sort((i, j) { |
- var a = rows[i].values[_sortColumnIndex]; |
- var b = rows[j].values[_sortColumnIndex]; |
- if (_sortDescending) { |
- return b.compareTo(a); |
- } else { |
- return a.compareTo(b); |
- } |
- }); |
- notifyPropertyChange(#sortedRows, 0, 1); |
+ if (_sortDescending) { |
+ sortedRows.sort(_sortFuncDescending); |
+ } else { |
+ sortedRows.sort(_sortFuncAscending); |
+ } |
} |
- @observable List<int> get sortedRows => _sortedRows; |
- |
void clearRows() { |
rows.clear(); |
- _sortedRows.clear(); |
+ sortedRows.clear(); |
} |
void addRow(SortedTableRow row) { |
- _sortedRows.add(rows.length); |
+ sortedRows.add(rows.length); |
rows.add(row); |
- notifyPropertyChange(#sortedRows, 0, 1); |
} |
- @reflectable String getFormattedValue(int row, int column) { |
+ String getFormattedValue(int row, int column) { |
var value = getValue(row, column); |
var formatter = columns[column].formatter; |
return formatter(value); |
} |
- @reflectable String getColumnLabel(int column) { |
+ @observable String getColumnLabel(int column) { |
assert(column >= 0); |
assert(column < columns.length); |
// TODO(johnmccutchan): Move expander display decisions into html once |
@@ -192,7 +207,7 @@ class SortedTable extends Observable { |
return columns[column].label + (_sortDescending ? arrowUp : arrowDown); |
} |
- @reflectable dynamic getValue(int row, int column) { |
+ dynamic getValue(int row, int column) { |
return rows[row].values[column]; |
} |
} |