| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 import 'dart:async'; | 5 import 'dart:async'; |
| 6 import 'dart:html'; | 6 import 'dart:html'; |
| 7 import 'package:observatory/models.dart' as M; | 7 import 'package:observatory/models.dart' as M; |
| 8 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; | 8 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; |
| 9 import 'package:observatory/src/elements/helpers/tag.dart'; | 9 import 'package:observatory/src/elements/helpers/tag.dart'; |
| 10 | 10 |
| 11 enum ProfileTreeMode { | 11 enum ProfileTreeMode { code, function, } |
| 12 code, | |
| 13 function, | |
| 14 } | |
| 15 | 12 |
| 16 class StackTraceTreeConfigChangedEvent { | 13 class StackTraceTreeConfigChangedEvent { |
| 17 final StackTraceTreeConfigElement element; | 14 final StackTraceTreeConfigElement element; |
| 18 StackTraceTreeConfigChangedEvent(this.element); | 15 StackTraceTreeConfigChangedEvent(this.element); |
| 19 } | 16 } |
| 20 | 17 |
| 21 class StackTraceTreeConfigElement extends HtmlElement implements Renderable { | 18 class StackTraceTreeConfigElement extends HtmlElement implements Renderable { |
| 22 static const tag = | 19 static const tag = |
| 23 const Tag<StackTraceTreeConfigElement>('stack-trace-tree-config'); | 20 const Tag<StackTraceTreeConfigElement>('stack-trace-tree-config'); |
| 24 | 21 |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 ..children = ProfileTreeMode.values.map((mode) { | 178 ..children = ProfileTreeMode.values.map((mode) { |
| 182 return new OptionElement( | 179 return new OptionElement( |
| 183 value: modeToString(mode), | 180 value: modeToString(mode), |
| 184 selected: _mode == mode)..text = modeToString(mode); | 181 selected: _mode == mode)..text = modeToString(mode); |
| 185 }).toList(growable: false) | 182 }).toList(growable: false) |
| 186 ..onChange.listen((_) { | 183 ..onChange.listen((_) { |
| 187 _mode = ProfileTreeMode.values[s.selectedIndex]; | 184 _mode = ProfileTreeMode.values[s.selectedIndex]; |
| 188 _r.dirty(); | 185 _r.dirty(); |
| 189 }) | 186 }) |
| 190 ..onChange.map(_toEvent).listen(_triggerModeChange), | 187 ..onChange.map(_toEvent).listen(_triggerModeChange), |
| 191 new SpanElement()..text = ' $modeDescription' | 188 new SpanElement() |
| 189 ..text = ' $modeDescription' |
| 192 ]; | 190 ]; |
| 193 } | 191 } |
| 194 | 192 |
| 195 String get directionDescription { | 193 String get directionDescription { |
| 196 if (_direction == M.ProfileTreeDirection.inclusive) { | 194 if (_direction == M.ProfileTreeDirection.inclusive) { |
| 197 return 'Tree is rooted at "main". Child nodes are callees.'; | 195 return 'Tree is rooted at "main". Child nodes are callees.'; |
| 198 } else { | 196 } else { |
| 199 return 'Tree is rooted at top-of-stack. Child nodes are callers.'; | 197 return 'Tree is rooted at top-of-stack. Child nodes are callers.'; |
| 200 } | 198 } |
| 201 } | 199 } |
| 202 | 200 |
| 203 List<Element> _createDirectionSelect() { | 201 List<Element> _createDirectionSelect() { |
| 204 var s; | 202 var s; |
| 205 return [ | 203 return [ |
| 206 s = new SelectElement() | 204 s = new SelectElement() |
| 207 ..classes = ['direction-select'] | 205 ..classes = ['direction-select'] |
| 208 ..value = directionToString(_direction) | 206 ..value = directionToString(_direction) |
| 209 ..children = M.ProfileTreeDirection.values.map((direction) { | 207 ..children = M.ProfileTreeDirection.values.map((direction) { |
| 210 return new OptionElement( | 208 return new OptionElement( |
| 211 value: directionToString(direction), | 209 value: directionToString(direction), |
| 212 selected: _direction == direction) | 210 selected: _direction == direction) |
| 213 ..text = directionToString(direction); | 211 ..text = directionToString(direction); |
| 214 }).toList(growable: false) | 212 }).toList(growable: false) |
| 215 ..onChange.listen((_) { | 213 ..onChange.listen((_) { |
| 216 _direction = M.ProfileTreeDirection.values[s.selectedIndex]; | 214 _direction = M.ProfileTreeDirection.values[s.selectedIndex]; |
| 217 _r.dirty(); | 215 _r.dirty(); |
| 218 }) | 216 }) |
| 219 ..onChange.map(_toEvent).listen(_triggerDirectionChange), | 217 ..onChange.map(_toEvent).listen(_triggerDirectionChange), |
| 220 new SpanElement()..text = ' $directionDescription' | 218 new SpanElement() |
| 219 ..text = ' $directionDescription' |
| 221 ]; | 220 ]; |
| 222 } | 221 } |
| 223 | 222 |
| 224 List<Element> _createFilter() { | 223 List<Element> _createFilter() { |
| 225 var t; | 224 var t; |
| 226 return [ | 225 return [ |
| 227 t = new TextInputElement() | 226 t = new TextInputElement() |
| 228 ..placeholder = 'Search filter' | 227 ..placeholder = 'Search filter' |
| 229 ..value = filter | 228 ..value = filter |
| 230 ..onChange.listen((_) { | 229 ..onChange.listen((_) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 255 } | 254 } |
| 256 | 255 |
| 257 StackTraceTreeConfigChangedEvent _toEvent(_) { | 256 StackTraceTreeConfigChangedEvent _toEvent(_) { |
| 258 return new StackTraceTreeConfigChangedEvent(this); | 257 return new StackTraceTreeConfigChangedEvent(this); |
| 259 } | 258 } |
| 260 | 259 |
| 261 void _triggerModeChange(e) => _onModeChange.add(e); | 260 void _triggerModeChange(e) => _onModeChange.add(e); |
| 262 void _triggerDirectionChange(e) => _onDirectionChange.add(e); | 261 void _triggerDirectionChange(e) => _onDirectionChange.add(e); |
| 263 void _triggerFilterChange(e) => _onFilterChange.add(e); | 262 void _triggerFilterChange(e) => _onFilterChange.add(e); |
| 264 } | 263 } |
| OLD | NEW |