| Index: charted/lib/charts/data_transformers/transpose_transformer.dart
|
| diff --git a/charted/lib/charts/data_transformers/transpose_transformer.dart b/charted/lib/charts/data_transformers/transpose_transformer.dart
|
| deleted file mode 100644
|
| index 2ed8e84686205014df72615c4b1548af0ad3bbe5..0000000000000000000000000000000000000000
|
| --- a/charted/lib/charts/data_transformers/transpose_transformer.dart
|
| +++ /dev/null
|
| @@ -1,125 +0,0 @@
|
| -/*
|
| - * Copyright 2014 Google Inc. All rights reserved.
|
| - *
|
| - * Use of this source code is governed by a BSD-style
|
| - * license that can be found in the LICENSE file or at
|
| - * https://developers.google.com/open-source/licenses/bsd
|
| - */
|
| -
|
| -part of charted.charts;
|
| -
|
| -/**
|
| - * Transforms the ChartData by transposing the columns and rows. A label column
|
| - * index in the original data will need to be specified (default to 0), all
|
| - * values in the specified label column will be used as the label for the
|
| - * transformed data, all the labels in the original Chart data columns will be
|
| - * populated in the label column as values of that column.
|
| - *
|
| - * All values in the data except for the data in the label column must have the
|
| - * same type; All columns except for the label column must have the same
|
| - * formatter if a formatter exist for columns.
|
| - */
|
| -class TransposeTransformer extends ChangeNotifier
|
| - implements ChartDataTransform, ChartData {
|
| - final SubscriptionsDisposer _dataSubscriptions = new SubscriptionsDisposer();
|
| - ObservableList<ChartColumnSpec> columns = new ObservableList();
|
| - ObservableList<Iterable> rows = new ObservableList();
|
| -
|
| - // If specified, this values of this column in the input chart data will be
|
| - // used as labels of the transposed column label. Defaults to first column.
|
| - int _labelColumn;
|
| - ChartData _data;
|
| -
|
| - TransposeTransformer([this._labelColumn = 0]);
|
| -
|
| - /**
|
| - * Transforms the input data with the specified label column in the
|
| - * constructor. If the ChartData is Observable, changes fired by the input
|
| - * data will trigger transform to be performed again to update the output rows
|
| - * and columns.
|
| - */
|
| - ChartData transform(ChartData data) {
|
| - _data = data;
|
| - _registerListeners();
|
| - _transform();
|
| - return this;
|
| - }
|
| -
|
| - /** Registers listeners if input ChartData is Observable. */
|
| - _registerListeners() {
|
| - _dataSubscriptions.dispose();
|
| -
|
| - if(_data is Observable) {
|
| - var observable = (_data as Observable);
|
| - _dataSubscriptions.add(observable.changes.listen((records) {
|
| - _transform();
|
| -
|
| - // NOTE: Currently we're only passing the first change because the chart
|
| - // area just draw with the updated data. When we add partial update
|
| - // to chart area, we'll need to handle this better.
|
| - notifyChange(records.first);
|
| - }));
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Performs the transpose transform with _data. This is called on transform
|
| - * and on changes if ChartData is Observable.
|
| - */
|
| - _transform() {
|
| - // Assert all columns are of the same type and formatter, excluding the
|
| - // label column.
|
| - var type;
|
| - var formatter;
|
| - for (var i = 0; i < _data.columns.length; i++) {
|
| - if (i != _labelColumn) {
|
| - if (type == null) {
|
| - type = _data.columns.elementAt(i).type;
|
| - } else {
|
| - assert(type == _data.columns.elementAt(i).type);
|
| - }
|
| - if (formatter == null) {
|
| - formatter = _data.columns.elementAt(i).formatter;
|
| - } else {
|
| - assert(formatter == _data.columns.elementAt(i).formatter);
|
| - }
|
| - }
|
| - }
|
| -
|
| - columns.clear();
|
| - rows.clear();
|
| - rows.addAll(new List<Iterable>.generate(_data.columns.length - 1, (i) => []));
|
| -
|
| - // Populate the transposed rows' data, excluding the label column, visit
|
| - // each value in the original data once.
|
| - var columnLabels = [];
|
| - for (var row in _data.rows) {
|
| - for (var i = 0; i < row.length; i++) {
|
| - var columnOffset = (i < _labelColumn) ? 0 : 1;
|
| - if (i != _labelColumn) {
|
| - (rows.elementAt(i - columnOffset) as List).add(row.elementAt(i));
|
| - } else {
|
| - columnLabels.add(row.elementAt(i));
|
| - }
|
| - }
|
| - }
|
| -
|
| - // Transpose the ColumnSpec's label into the column where the original
|
| - // column that is used as the new label.
|
| - for (var i = 0; i < rows.length; i++) {
|
| - var columnOffset = (i < _labelColumn) ? 0 : 1;
|
| - (rows.elementAt(i) as List).insert(_labelColumn,
|
| - _data.columns.elementAt(i + columnOffset).label);
|
| -
|
| - }
|
| -
|
| - // Construct new ColumnSpaces base on the label column.
|
| - for (var label in columnLabels) {
|
| - columns.add(new ChartColumnSpec(type: type, label: label,
|
| - formatter: formatter));
|
| - }
|
| - columns.insert(_labelColumn,
|
| - new ChartColumnSpec(type: ChartColumnSpec.TYPE_STRING, label:
|
| - _data.columns.elementAt(_labelColumn).label));
|
| - }
|
| -}
|
|
|