| 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 DefaultChartDataImpl extends ChangeNotifier implements ChartData { | 11 class DefaultChartDataImpl extends ChangeNotifier implements ChartData { |
| 12 Iterable<ChartColumnSpec> _columns; | 12 List<ChartColumnSpec> _columns; |
| 13 Iterable<Iterable> _rows; | 13 List<List> _rows; |
| 14 | 14 |
| 15 bool _hasObservableRows = false; | 15 bool _hasObservableRows = false; |
| 16 SubscriptionsDisposer _disposer = new SubscriptionsDisposer(); | 16 SubscriptionsDisposer _disposer = new SubscriptionsDisposer(); |
| 17 | 17 |
| 18 DefaultChartDataImpl( | 18 DefaultChartDataImpl( |
| 19 Iterable<ChartColumnSpec> columns, Iterable<Iterable> rows) { | 19 Iterable<ChartColumnSpec> columns, Iterable<Iterable> rows) { |
| 20 this.columns = columns; | 20 this.columns = new List<ChartColumnSpec>.from(columns); |
| 21 this.rows = rows; | 21 var rowsList = new List.from(rows); |
| 22 this.rows = new List<List>.generate( |
| 23 rowsList.length, (i) => new List.from(rowsList[i])); |
| 22 } | 24 } |
| 23 | 25 |
| 24 set columns(Iterable<ChartColumnSpec> value) { | 26 set columns(Iterable<ChartColumnSpec> value) { |
| 25 assert(value != null); | 27 assert(value != null); |
| 26 | 28 |
| 27 // Create a copy of columns. We do not currently support | 29 // Create a copy of columns. We do not currently support |
| 28 // changes to the list of columns. Any changes to the spec | 30 // changes to the list of columns. Any changes to the spec |
| 29 // will be applied at the next ChartBase.draw(); | 31 // will be applied at the next ChartBase.draw(); |
| 30 this._columns = new List<ChartColumnSpec>.from(value); | 32 this._columns = new List<ChartColumnSpec>.from(value); |
| 31 } | 33 } |
| 32 | 34 |
| 33 Iterable<ChartColumnSpec> get columns => _columns; | 35 List<ChartColumnSpec> get columns => _columns; |
| 34 | 36 |
| 35 set rows(Iterable<Iterable> value) { | 37 set rows(List<List> value) { |
| 36 assert(value != null); | 38 assert(value != null); |
| 37 | 39 |
| 38 _rows = value; | 40 _rows = value; |
| 39 if (_rows is ObservableList) { | 41 if (_rows is ObservableList) { |
| 40 _disposer.add((_rows as ObservableList).listChanges.listen(rowsChanged)); | 42 _disposer.add((_rows as ObservableList).listChanges.listen(rowsChanged)); |
| 41 } | 43 } |
| 42 | 44 |
| 43 if (_rows.every((row) => row is ObservableList)) { | 45 if (_rows.every((row) => row is ObservableList)) { |
| 44 _hasObservableRows = true; | 46 _hasObservableRows = true; |
| 45 for (int i = 0; i < _rows.length; i++) { | 47 for (int i = 0; i < _rows.length; i++) { |
| 46 var row = _rows.elementAt(i); | 48 var row = _rows.elementAt(i); |
| 47 _disposer.add( | 49 _disposer.add( |
| 48 row.listChanges.listen((changes) => _valuesChanged(i, changes)), | 50 (row as ObservableList) |
| 51 .listChanges |
| 52 .listen((changes) => _valuesChanged(i, changes)), |
| 49 row); | 53 row); |
| 50 } | 54 } |
| 51 ; | 55 ; |
| 52 } else if (_rows is Observable) { | 56 } else if (_rows is Observable) { |
| 53 logger.info('List of rows is Observable, but not rows themselves!'); | 57 logger.info('List of rows is Observable, but not rows themselves!'); |
| 54 } | 58 } |
| 55 } | 59 } |
| 56 | 60 |
| 57 Iterable<Iterable> get rows => _rows; | 61 List<List> get rows => _rows; |
| 58 | 62 |
| 59 rowsChanged(List<ListChangeRecord> changes) { | 63 rowsChanged(List<ListChangeRecord> changes) { |
| 60 if (_rows is! ObservableList) return; | 64 if (_rows is! ObservableList) return; |
| 61 notifyChange(new ChartRowChangeRecord(changes)); | 65 notifyChange(new ChartRowChangeRecord(changes)); |
| 62 | 66 |
| 63 if (!_hasObservableRows) return; | 67 if (!_hasObservableRows) return; |
| 64 changes.forEach((ListChangeRecord change) { | 68 changes.forEach((ListChangeRecord change) { |
| 65 change.removed.forEach((item) => _disposer.unsubscribe(item)); | 69 change.removed.forEach((item) => _disposer.unsubscribe(item)); |
| 66 | 70 |
| 67 for (int i = 0; i < change.addedCount; i++) { | 71 for (int i = 0; i < change.addedCount; i++) { |
| 68 var index = change.index + i, row = _rows.elementAt(index); | 72 var index = change.index + i, row = _rows.elementAt(index); |
| 69 | 73 |
| 70 if (row is! ObservableList) { | 74 if (row is! ObservableList) { |
| 71 logger.severe('A non-observable row was added! ' | 75 logger.severe('A non-observable row was added! ' |
| 72 'Changes on this row will not be monitored'); | 76 'Changes on this row will not be monitored'); |
| 73 } else { | 77 } else { |
| 74 _disposer.add( | 78 _disposer.add( |
| 75 row.listChanges | 79 (row as ObservableList).listChanges |
| 76 .listen((changes) => _valuesChanged(index, changes)), | 80 .listen((changes) => _valuesChanged(index, changes)), |
| 77 row); | 81 row); |
| 78 } | 82 } |
| 79 } | 83 } |
| 80 }); | 84 }); |
| 81 } | 85 } |
| 82 | 86 |
| 83 _valuesChanged(int index, List<ListChangeRecord> changes) { | 87 _valuesChanged(int index, List<ListChangeRecord> changes) { |
| 84 if (!_hasObservableRows) return; | 88 if (!_hasObservableRows) return; |
| 85 notifyChange(new ChartValueChangeRecord(index, changes)); | 89 notifyChange(new ChartValueChangeRecord(index, changes)); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 strBuffer.write(' ' * lengthDiff + ' ${data} |'); | 134 strBuffer.write(' ' * lengthDiff + ' ${data} |'); |
| 131 | 135 |
| 132 if (i == row.length - 1) { | 136 if (i == row.length - 1) { |
| 133 strBuffer.write('\n' + '-' * totalLength + '\n'); | 137 strBuffer.write('\n' + '-' * totalLength + '\n'); |
| 134 } | 138 } |
| 135 } | 139 } |
| 136 } | 140 } |
| 137 return strBuffer.toString(); | 141 return strBuffer.toString(); |
| 138 } | 142 } |
| 139 } | 143 } |
| OLD | NEW |