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