Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(224)

Unified Diff: runtime/bin/vmservice/client/lib/src/app/view_model.dart

Issue 237683004: Disable applyAuthorStyles (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 3be79ea94e132ec56432d3507b0c120f989831bc..b5e3ec1c5aae9d425da1f61dc566c3d006c87070 100644
--- a/runtime/bin/vmservice/client/lib/src/app/view_model.dart
+++ b/runtime/bin/vmservice/client/lib/src/app/view_model.dart
@@ -99,3 +99,99 @@ class TableTree extends Observable {
rows.removeRange(index + 1, index + 1 + childCount);
}
}
+
+typedef String ValueFormatter(dynamic value);
+
+class SortedTableColumn {
+ static String toStringFormatter(dynamic v) => v != null ? v.toString() : '<null>';
turnidge 2014/04/17 20:18:54 Line is long.
Cutch 2014/04/17 22:12:39 Done.
+ final String label;
+ final ValueFormatter formatter;
+ SortedTableColumn.withFormatter(this.label, this.formatter);
+ SortedTableColumn(this.label)
+ : formatter = toStringFormatter;
+}
+
+class SortedTableRow {
+ final List values;
+ SortedTableRow(this.values);
+}
+
+class SortedTable extends Observable {
+ final List<SortedTableColumn> columns;
+ final List<SortedTableRow> rows = new List<SortedTableRow>();
+ final List<int> _order = [];
turnidge 2014/04/17 20:18:54 name - maybe _sortedRows?
Cutch 2014/04/17 22:12:39 Done.
Cutch 2014/04/17 22:12:39 Done.
+
+ SortedTable(this.columns) {
turnidge 2014/04/17 20:18:54 drop constructor body -> SortedTable(this.columns)
Cutch 2014/04/17 22:12:39 Done.
+
+ }
+
+ int _sortColumnIndex = 0;
+ set sortColumnIndex(var index) {
+ assert(index >= 0);
+ assert(index < columns.length);
+ _sortColumnIndex = index;
+ notifyPropertyChange(#getColumnLabel, 0, 1);
+ }
+ int get sortColumnIndex => _sortColumnIndex;
+ bool _sortDescending = true;
+
+ void sort() {
+ assert(_sortColumnIndex >= 0);
+ assert(_sortColumnIndex < columns.length);
+ _order.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);
+ }
+
+ @observable List<int> get sortedRows => _order;
+
+ void clearRows() {
+ rows.clear();
+ _order.clear();
+ }
+
+ void addRow(SortedTableRow row) {
+ _order.add(rows.length);
+ rows.add(row);
+ notifyPropertyChange(#sortedRows, 0, 1);
+ }
+
+ @reflectable String getFormattedValue(int row, int column) {
+ var value = getValue(row, column);
+ var formatter = columns[column].formatter;
+ return formatter(value);
+ }
+
+ @reflectable String getColumnLabel(int column) {
+ assert(column >= 0);
+ assert(column < columns.length);
+ const arrowUp = '\u25BC';
+ const arrowDown = '\u25B2';
+ const none = '';
turnidge 2014/04/17 20:18:54 Is 'none' used?
Cutch 2014/04/17 22:12:39 Dead.
+ if (column != _sortColumnIndex) {
+ return columns[column].label;
+ }
+ return columns[column].label + (_sortDescending ? arrowUp : arrowDown);
+ }
+
+ @reflectable dynamic getValue(int row, int column) {
+ return rows[row].values[column];
+ }
+
+ void dump() {
+ for (var i = 0; i < rows.length; i++) {
+ String row = '';
turnidge 2014/04/17 20:18:54 Does it make sense to use StringBuffer here?
Cutch 2014/04/17 22:12:39 This code was only used for debugging. Removed.
+ for (var j = 0; j < columns.length; j++) {
+ row += getFormattedValue(i, j) + ' ';
+ }
+ print(row);
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698