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.'); | |
koda
2014/06/17 21:04:06
Uncomment or remove.
Cutch
2014/06/18 14:35:03
Done.
| |
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 |