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

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

Issue 342513004: Visual refresh of allocation profile page (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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 135
136 SortedTable(this.columns); 136 SortedTable(this.columns);
137 137
138 int _sortColumnIndex = 0; 138 int _sortColumnIndex = 0;
139 set sortColumnIndex(var index) { 139 set sortColumnIndex(var index) {
140 assert(index >= 0); 140 assert(index >= 0);
141 assert(index < columns.length); 141 assert(index < columns.length);
142 _sortColumnIndex = index; 142 _sortColumnIndex = index;
143 notifyPropertyChange(#getColumnLabel, 0, 1); 143 notifyPropertyChange(#getColumnLabel, 0, 1);
144 } 144 }
145 int get sortColumnIndex => _sortColumnIndex; 145 int get sortColumnIndex => _sortColumnIndex;
146 bool _sortDescending = true; 146 bool _sortDescending = true;
147 bool get sortDescending => _sortDescending;
148 set sortDescending(var descending) {
149 _sortDescending = descending;
150 notifyPropertyChange(#getColumnLabel, 0, 1);
151 }
152
153
154 dynamic getSortKeyFor(int row, int col) {
155 return rows[row].values[col];
156 }
157
158 int _sortFuncDescending(int i, int j) {
159 var a = getSortKeyFor(i, _sortColumnIndex);
160 var b = getSortKeyFor(j, _sortColumnIndex);
161 return b.compareTo(a);
162 }
163
164 int _sortFuncAscending(int i, int j) {
165 var a = getSortKeyFor(i, _sortColumnIndex);
166 var b = getSortKeyFor(j, _sortColumnIndex);
167 return a.compareTo(b);
168 }
147 169
148 void sort() { 170 void sort() {
171 Stopwatch sw = new Stopwatch()..start();
149 assert(_sortColumnIndex >= 0); 172 assert(_sortColumnIndex >= 0);
150 assert(_sortColumnIndex < columns.length); 173 assert(_sortColumnIndex < columns.length);
151 _sortedRows.sort((i, j) { 174 if (_sortDescending) {
152 var a = rows[i].values[_sortColumnIndex]; 175 sortedRows.sort(_sortFuncDescending);
153 var b = rows[j].values[_sortColumnIndex]; 176 } else {
154 if (_sortDescending) { 177 sortedRows.sort(_sortFuncAscending);
155 return b.compareTo(a); 178 }
156 } else {
157 return a.compareTo(b);
158 }
159 });
160 notifyPropertyChange(#sortedRows, 0, 1);
161 } 179 }
162 180
163 @observable List<int> get sortedRows => _sortedRows;
164
165 void clearRows() { 181 void clearRows() {
166 rows.clear(); 182 rows.clear();
167 _sortedRows.clear(); 183 sortedRows.clear();
168 } 184 }
169 185
170 void addRow(SortedTableRow row) { 186 void addRow(SortedTableRow row) {
171 _sortedRows.add(rows.length); 187 sortedRows.add(rows.length);
172 rows.add(row); 188 rows.add(row);
173 notifyPropertyChange(#sortedRows, 0, 1);
174 } 189 }
175 190
176 @reflectable String getFormattedValue(int row, int column) { 191 String getFormattedValue(int row, int column) {
177 var value = getValue(row, column); 192 var value = getValue(row, column);
178 var formatter = columns[column].formatter; 193 var formatter = columns[column].formatter;
179 return formatter(value); 194 return formatter(value);
180 } 195 }
181 196
182 @reflectable String getColumnLabel(int column) { 197 @observable String getColumnLabel(int column) {
183 assert(column >= 0); 198 assert(column >= 0);
184 assert(column < columns.length); 199 assert(column < columns.length);
185 // TODO(johnmccutchan): Move expander display decisions into html once 200 // TODO(johnmccutchan): Move expander display decisions into html once
186 // tables and templates are better supported. 201 // tables and templates are better supported.
187 const arrowUp = '\u25BC'; 202 const arrowUp = '\u25BC';
188 const arrowDown = '\u25B2'; 203 const arrowDown = '\u25B2';
189 if (column != _sortColumnIndex) { 204 if (column != _sortColumnIndex) {
190 return columns[column].label + '\u2003'; 205 return columns[column].label + '\u2003';
191 } 206 }
192 return columns[column].label + (_sortDescending ? arrowUp : arrowDown); 207 return columns[column].label + (_sortDescending ? arrowUp : arrowDown);
193 } 208 }
194 209
195 @reflectable dynamic getValue(int row, int column) { 210 dynamic getValue(int row, int column) {
196 return rows[row].values[column]; 211 return rows[row].values[column];
197 } 212 }
198 } 213 }
OLDNEW
« no previous file with comments | « runtime/bin/vmservice/client/lib/src/app/utils.dart ('k') | runtime/bin/vmservice/client/lib/src/elements/action_link.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698