Index: runtime/bin/vmservice/observatory/lib/src/app/view_model.dart |
diff --git a/runtime/bin/vmservice/observatory/lib/src/app/view_model.dart b/runtime/bin/vmservice/observatory/lib/src/app/view_model.dart |
deleted file mode 100644 |
index fcdb4254a6354d89a06a5ea9b6087b5bc32507c0..0000000000000000000000000000000000000000 |
--- a/runtime/bin/vmservice/observatory/lib/src/app/view_model.dart |
+++ /dev/null |
@@ -1,213 +0,0 @@ |
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-part of app; |
- |
-abstract class TableTreeRow extends Observable { |
- final TableTreeRow parent; |
- @observable final int depth; |
- @observable final List<TableTreeRow> children = new List<TableTreeRow>(); |
- @observable final List<String> columns = []; |
- static const arrowRight = '\u2192'; |
- static const arrowDownRight = '\u21b3'; |
- static const showExpanderStyle = 'cursor: pointer;'; |
- static const hideExpanderStyle = 'visibility:hidden;'; |
- |
- // TODO(johnmccutchan): Move expander display decisions into html once |
- // tables and templates are better supported. |
- @observable String expander = arrowRight; |
- @observable String expanderStyle = showExpanderStyle; |
- |
- TableTreeRow(TableTreeRow parent) : |
- parent = parent, |
- depth = parent != null ? parent.depth+1 : 0 { |
- if (!hasChildren()) { |
- expanderStyle = hideExpanderStyle; |
- } |
- } |
- |
- bool _expanded = false; |
- bool get expanded => _expanded; |
- set expanded(bool expanded) { |
- var changed = _expanded != expanded; |
- _expanded = expanded; |
- if (changed) { |
- // If the state has changed, fire callbacks. |
- if (_expanded) { |
- expander = arrowDownRight; |
- onShow(); |
- } else { |
- expander = arrowRight; |
- onHide(); |
- } |
- } |
- } |
- |
- bool toggle() { |
- expanded = !expanded; |
- return expanded; |
- } |
- |
- bool hasChildren(); |
- |
- /// Fired when the tree row is expanded. Add children rows here. |
- void onShow(); |
- |
- /// Fired when the tree row is collapsed. |
- void onHide(); |
-} |
- |
-class TableTree extends Observable { |
- @observable final List<TableTreeRow> rows = toObservable([]); |
- |
- /// Create a table tree with column [headers]. |
- TableTree(); |
- |
- /// Initialize the table tree with the list of root children. |
- void initialize(TableTreeRow root) { |
- rows.clear(); |
- root.onShow(); |
- rows.addAll(root.children); |
- } |
- |
- /// Toggle expansion of row at [rowIndex]. |
- void toggle(int rowIndex) { |
- assert(rowIndex >= 0); |
- assert(rowIndex < rows.length); |
- var row = rows[rowIndex]; |
- if (row.toggle()) { |
- _expand(row); |
- } else { |
- _collapse(row); |
- } |
- } |
- |
- int _index(TableTreeRow row) => rows.indexOf(row); |
- |
- void _expand(TableTreeRow row) { |
- int index = _index(row); |
- assert(index != -1); |
- rows.insertAll(index + 1, row.children); |
- } |
- |
- void _collapse(TableTreeRow row) { |
- var childCount = row.children.length; |
- if (childCount == 0) { |
- return; |
- } |
- for (var i = 0; i < childCount; i++) { |
- // Close all inner rows. |
- if (row.children[i].expanded) { |
- _collapse(row.children[i]); |
- } |
- } |
- // Collapse this row. |
- row.expanded = false; |
- // Remove all children. |
- int index = _index(row); |
- rows.removeRange(index + 1, index + 1 + childCount); |
- } |
-} |
- |
-typedef String ValueFormatter(dynamic value); |
- |
-class SortedTableColumn { |
- static String toStringFormatter(dynamic v) { |
- return v != null ? v.toString() : '<null>'; |
- } |
- 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> sortedRows = []; |
- |
- SortedTable(this.columns); |
- |
- 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; |
- 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); |
- if (_sortDescending) { |
- sortedRows.sort(_sortFuncDescending); |
- } else { |
- sortedRows.sort(_sortFuncAscending); |
- } |
- } |
- |
- void clearRows() { |
- rows.clear(); |
- sortedRows.clear(); |
- } |
- |
- void addRow(SortedTableRow row) { |
- sortedRows.add(rows.length); |
- rows.add(row); |
- } |
- |
- String getFormattedValue(int row, int column) { |
- var value = getValue(row, column); |
- var formatter = columns[column].formatter; |
- return formatter(value); |
- } |
- |
- @observable String getColumnLabel(int column) { |
- assert(column >= 0); |
- assert(column < columns.length); |
- // TODO(johnmccutchan): Move expander display decisions into html once |
- // tables and templates are better supported. |
- const arrowUp = '\u25BC'; |
- const arrowDown = '\u25B2'; |
- if (column != _sortColumnIndex) { |
- return columns[column].label + '\u2003'; |
- } |
- return columns[column].label + (_sortDescending ? arrowUp : arrowDown); |
- } |
- |
- dynamic getValue(int row, int column) { |
- return rows[row].values[column]; |
- } |
-} |