OLD | NEW |
1 // | 1 // |
2 // Copyright 2014 Google Inc. All rights reserved. | 2 // Copyright 2014 Google Inc. All rights reserved. |
3 // | 3 // |
4 // Use of this source code is governed by a BSD-style | 4 // Use of this source code is governed by a BSD-style |
5 // license that can be found in the LICENSE file or at | 5 // license that can be found in the LICENSE file or at |
6 // https://developers.google.com/open-source/licenses/bsd | 6 // https://developers.google.com/open-source/licenses/bsd |
7 // | 7 // |
8 | 8 |
9 part of charted.charts; | 9 part of charted.charts; |
10 | 10 |
11 class DefaultChartConfigImpl extends ChangeNotifier implements ChartConfig { | 11 class DefaultChartConfigImpl extends ChangeNotifier implements ChartConfig { |
12 final Map<String,ChartAxisConfig> _measureAxisRegistry = {}; | 12 final Map<String, ChartAxisConfig> _measureAxisRegistry = {}; |
13 final Map<int,ChartAxisConfig> _dimensionAxisRegistry = {}; | 13 final Map<int, ChartAxisConfig> _dimensionAxisRegistry = {}; |
14 final SubscriptionsDisposer _disposer = new SubscriptionsDisposer(); | 14 final SubscriptionsDisposer _disposer = new SubscriptionsDisposer(); |
15 | 15 |
16 bool _isRTL = false; | 16 bool _isRTL = false; |
17 Iterable<ChartSeries> _series; | 17 Iterable<ChartSeries> _series; |
18 Iterable<int> _dimensions; | 18 Iterable<int> _dimensions; |
19 StreamSubscription _dimensionsSubscription; | 19 StreamSubscription _dimensionsSubscription; |
20 | 20 |
21 @override | 21 @override |
22 Rect minimumSize = const Rect.size(400, 300); | 22 Rect minimumSize = const Rect.size(400, 300); |
23 | 23 |
24 @override | 24 @override |
25 bool isLeftAxisPrimary = false; | 25 bool isLeftAxisPrimary = false; |
26 | 26 |
27 @override | 27 @override |
28 bool autoResizeAxis = true; | 28 bool autoResizeAxis = true; |
29 | 29 |
30 @override | 30 @override |
31 ChartLegend legend; | 31 ChartLegend legend; |
32 | 32 |
33 @override | 33 @override |
34 Iterable<String> displayedMeasureAxes; | 34 Iterable<String> displayedMeasureAxes; |
35 | 35 |
36 @override | 36 @override |
37 bool renderDimensionAxes = true; | 37 bool renderDimensionAxes = true; |
38 | 38 |
39 @override | 39 @override |
40 bool switchAxesForRTL = true; | 40 bool switchAxesForRTL = true; |
41 | 41 |
42 DefaultChartConfigImpl(Iterable<ChartSeries> series, Iterable<int> dimensions)
{ | 42 DefaultChartConfigImpl( |
| 43 Iterable<ChartSeries> series, Iterable<int> dimensions) { |
43 this.series = series; | 44 this.series = series; |
44 this.dimensions = dimensions; | 45 this.dimensions = dimensions; |
45 } | 46 } |
46 | 47 |
47 @override | 48 @override |
48 set series(Iterable<ChartSeries> values) { | 49 set series(Iterable<ChartSeries> values) { |
49 assert(values != null && values.isNotEmpty); | 50 assert(values != null && values.isNotEmpty); |
50 | 51 |
51 _disposer.dispose(); | 52 _disposer.dispose(); |
52 _series = values; | 53 _series = values; |
53 notifyChange(const ChartConfigChangeRecord()); | 54 notifyChange(const ChartConfigChangeRecord()); |
54 | 55 |
55 // Monitor each series for changes on them | 56 // Monitor each series for changes on them |
56 values.forEach((item) { | 57 values.forEach((item) { |
57 if (item is Observable) { | 58 if (item is Observable) { |
58 _disposer.add(item.changes.listen( | 59 _disposer.add( |
59 (_) => notifyChange(const ChartConfigChangeRecord())), item); | 60 item.changes |
| 61 .listen((_) => notifyChange(const ChartConfigChangeRecord())), |
| 62 item); |
60 } | 63 } |
61 }); | 64 }); |
62 | 65 |
63 // Monitor series for changes. When the list changes, update | 66 // Monitor series for changes. When the list changes, update |
64 // subscriptions to ChartSeries changes. | 67 // subscriptions to ChartSeries changes. |
65 if (_series is ObservableList) { | 68 if (_series is ObservableList) { |
66 var observable = _series as ObservableList; | 69 var observable = _series as ObservableList; |
67 _disposer.add(observable.listChanges.listen((records) { | 70 _disposer.add(observable.listChanges.listen((records) { |
68 records.forEach((record) { | 71 records.forEach((record) { |
69 record.removed.forEach((value) => _disposer.unsubscribe(value)); | 72 record.removed.forEach((value) => _disposer.unsubscribe(value)); |
70 for (int i = 0; i < record.addedCount; i++) { | 73 for (int i = 0; i < record.addedCount; i++) { |
71 var added = observable[i + record.index]; | 74 var added = observable[i + record.index]; |
72 _disposer.add(added.changes.listen( | 75 _disposer.add(added.changes |
73 (_) => notifyChange(const ChartConfigChangeRecord()))); | 76 .listen((_) => notifyChange(const ChartConfigChangeRecord()))); |
74 } | 77 } |
75 }); | 78 }); |
76 notifyChange(const ChartConfigChangeRecord()); | 79 notifyChange(const ChartConfigChangeRecord()); |
77 })); | 80 })); |
78 } | 81 } |
79 } | 82 } |
80 | 83 |
81 @override | 84 @override |
82 Iterable<ChartSeries> get series => _series; | 85 Iterable<ChartSeries> get series => _series; |
83 | 86 |
84 @override | 87 @override |
85 set dimensions(Iterable<int> values) { | 88 set dimensions(Iterable<int> values) { |
86 _dimensions = values; | 89 _dimensions = values; |
87 | 90 |
88 if (_dimensionsSubscription != null) { | 91 if (_dimensionsSubscription != null) { |
89 _dimensionsSubscription.cancel(); | 92 _dimensionsSubscription.cancel(); |
90 _dimensionsSubscription = null; | 93 _dimensionsSubscription = null; |
91 } | 94 } |
92 | 95 |
93 if (values == null || values.isEmpty) return; | 96 if (values == null || values.isEmpty) return; |
94 | 97 |
95 if (_dimensions is ObservableList) { | 98 if (_dimensions is ObservableList) { |
96 _dimensionsSubscription = | 99 _dimensionsSubscription = (_dimensions as ObservableList) |
97 (_dimensions as ObservableList).listChanges.listen( | 100 .listChanges |
98 (_) => notifyChange(const ChartConfigChangeRecord())); | 101 .listen((_) => notifyChange(const ChartConfigChangeRecord())); |
99 } | 102 } |
100 } | 103 } |
101 | 104 |
102 @override | 105 @override |
103 Iterable<int> get dimensions => _dimensions; | 106 Iterable<int> get dimensions => _dimensions; |
104 | 107 |
105 @override | 108 @override |
106 void registerMeasureAxis(String id, ChartAxisConfig config) { | 109 void registerMeasureAxis(String id, ChartAxisConfig config) { |
107 assert(config != null); | 110 assert(config != null); |
108 _measureAxisRegistry[id] = config; | 111 _measureAxisRegistry[id] = config; |
(...skipping 17 matching lines...) Expand all Loading... |
126 set isRTL(bool value) { | 129 set isRTL(bool value) { |
127 if (_isRTL != value && value != null) { | 130 if (_isRTL != value && value != null) { |
128 _isRTL = value; | 131 _isRTL = value; |
129 notifyChange(const ChartConfigChangeRecord()); | 132 notifyChange(const ChartConfigChangeRecord()); |
130 } | 133 } |
131 } | 134 } |
132 | 135 |
133 @override | 136 @override |
134 bool get isRTL => _isRTL; | 137 bool get isRTL => _isRTL; |
135 } | 138 } |
OLD | NEW |