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

Side by Side Diff: runtime/observatory/lib/src/elements/nav/isolate_menu_wrapper.dart

Issue 2211603002: Centralized event streams (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Updated observatory_sources Created 4 years, 4 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
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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:html'; 5 import 'dart:html';
6 import 'dart:async';
7 6
8 import 'package:observatory/app.dart'; 7 import 'package:observatory/app.dart';
9 import 'package:observatory/service.dart'; 8 import 'package:observatory/service.dart';
10 import 'package:observatory/mocks.dart';
11 import 'package:observatory/models.dart' as M;
12 import 'package:observatory/src/elements/helpers/tag.dart'; 9 import 'package:observatory/src/elements/helpers/tag.dart';
13 import 'package:observatory/src/elements/shims/binding.dart'; 10 import 'package:observatory/src/elements/shims/binding.dart';
14 import 'package:observatory/src/elements/nav/isolate_menu.dart'; 11 import 'package:observatory/src/elements/nav/isolate_menu.dart';
15 12
16 @bindable 13 @bindable
17 class NavIsolateMenuElementWrapper extends HtmlElement { 14 class NavIsolateMenuElementWrapper extends HtmlElement {
18 static const binder = const Binder<NavIsolateMenuElementWrapper>(const { 15 static const binder = const Binder<NavIsolateMenuElementWrapper>(const {
19 'last': #last, 'isolate': #isolate 16 'last': #last, 'isolate': #isolate
20 }); 17 });
21 18
22 static const tag = 19 static const tag =
23 const Tag<NavIsolateMenuElementWrapper>('isolate-nav-menu'); 20 const Tag<NavIsolateMenuElementWrapper>('isolate-nav-menu');
24 21
25 final StreamController<M.IsolateUpdateEvent> _updatesController =
26 new StreamController<M.IsolateUpdateEvent>();
27 Stream<M.IsolateUpdateEvent> _updates;
28 StreamSubscription _subscription;
29
30 bool _last = false; 22 bool _last = false;
31 Isolate _isolate; 23 Isolate _isolate;
32 bool get last => _last; 24 bool get last => _last;
33 Isolate get isolate => _isolate; 25 Isolate get isolate => _isolate;
34 set last(bool value) { 26 set last(bool value) {
35 _last = value; render(); 27 _last = value; render();
turnidge 2016/08/04 18:16:36 Our style is to put one statement per line.
cbernaschina 2016/08/04 21:00:20 Done.
36 } 28 }
37 set isolate(Isolate value) { 29 set isolate(Isolate value) {
38 _isolate = value; _detached(); _attached(); 30 _isolate = value; render();
turnidge 2016/08/04 18:16:36 One stmt per line.
cbernaschina 2016/08/04 21:00:20 Done.
39 } 31 }
40 32
41 NavIsolateMenuElementWrapper.created() : super.created() { 33 NavIsolateMenuElementWrapper.created() : super.created() {
42 _updates = _updatesController.stream.asBroadcastStream();
43 binder.registerCallback(this); 34 binder.registerCallback(this);
44 _last = _getBoolAttribute('last'); 35 _last = _getBoolAttribute('last');
45 createShadowRoot(); 36 createShadowRoot();
46 render(); 37 render();
47 } 38 }
48 39
49 @override 40 @override
50 void attached() { 41 void attached() {
51 super.attached(); 42 super.attached();
52 _attached();
53 }
54
55 @override
56 void detached() {
57 super.detached();
58 _detached();
59 }
60
61 void _attached() {
62 if (_isolate != null) {
63 _subscription = _isolate.changes.listen((_) {
64 _updatesController.add(new IsolateUpdateEventMock(isolate: isolate));
65 });
66 }
67 render(); 43 render();
68 } 44 }
69 45
70 void _detached() {
71 if (_subscription != null) {
72 _subscription.cancel();
73 _subscription = null;
74 }
75 }
76
77 void render() { 46 void render() {
78 shadowRoot.children = []; 47 shadowRoot.children = [];
79 if (_isolate == null || _last == null) return; 48 if (_isolate == null || _last == null) return;
turnidge 2016/08/04 18:16:36 Our style is: if () { return; }
cbernaschina 2016/08/04 21:00:20 Done.
80 49
81 shadowRoot.children = [ 50 shadowRoot.children = [
82 new NavIsolateMenuElement(isolate, _updates, last: last, 51 new NavIsolateMenuElement(_isolate, app.events, last: _last,
83 queue: ObservatoryApplication.app.queue) 52 queue: app.queue)
84 ..children = [new ContentElement()] 53 ..children = [new ContentElement()]
85 ]; 54 ];
86 } 55 }
87 56
57 ObservatoryApplication get app => ObservatoryApplication.app;
58
88 bool _getBoolAttribute(String name) { 59 bool _getBoolAttribute(String name) {
89 final String value = getAttribute(name); 60 final String value = getAttribute(name);
90 return !(value == null || value == 'false'); 61 return !(value == null || value == 'false');
91 } 62 }
92 } 63 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698