| Index: charted/lib/charts/cartesian_renderers/cartesian_base_renderer.dart
|
| diff --git a/charted/lib/charts/cartesian_renderers/cartesian_base_renderer.dart b/charted/lib/charts/cartesian_renderers/cartesian_base_renderer.dart
|
| deleted file mode 100644
|
| index 08d89176bf124e560d17a554e9964c583005fa7e..0000000000000000000000000000000000000000
|
| --- a/charted/lib/charts/cartesian_renderers/cartesian_base_renderer.dart
|
| +++ /dev/null
|
| @@ -1,282 +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;
|
| -
|
| -abstract class CartesianRendererBase implements CartesianRenderer {
|
| - final SubscriptionsDisposer _disposer = new SubscriptionsDisposer();
|
| -
|
| - CartesianArea area;
|
| - ChartSeries series;
|
| - ChartTheme theme;
|
| - ChartState state;
|
| - Rect rect;
|
| -
|
| - List<int> _columnStateCache;
|
| - List<Iterable<String>> _columnStylesCache;
|
| -
|
| - final _valueColorCache = new Map<int,String>();
|
| - final _valueFilterCache = new Map<int,String>();
|
| - final _valueStylesCache = new Map<int,Iterable<String>>();
|
| -
|
| - Element host;
|
| - Selection root;
|
| - SelectionScope scope;
|
| -
|
| - StreamController<ChartEvent> mouseOverController;
|
| - StreamController<ChartEvent> mouseOutController;
|
| - StreamController<ChartEvent> mouseClickController;
|
| -
|
| - void _ensureAreaAndSeries(CartesianArea area, ChartSeries series) {
|
| - assert(area != null && series != null);
|
| - assert(this.area == null || this.area == area);
|
| - if (this.area == null) {
|
| - if (area.state != null) {
|
| - this.state = area.state;
|
| - _disposer.add(this.state.changes.listen((changes) {
|
| - resetStylesCache();
|
| - handleStateChanges(changes);
|
| - }));
|
| - }
|
| - }
|
| - this.area = area;
|
| - this.series = series;
|
| - }
|
| -
|
| - void _ensureReadyToDraw(Element element) {
|
| - assert(series != null && area != null);
|
| - assert(element != null && element is GElement);
|
| -
|
| - if (scope == null) {
|
| - host = element;
|
| - scope = new SelectionScope.element(element);
|
| - root = scope.selectElements([host]);
|
| - }
|
| -
|
| - theme = area.theme;
|
| - rect = area.layout.renderArea;
|
| - resetStylesCache();
|
| - }
|
| -
|
| - void resetStylesCache() {
|
| - var length = area.data.columns.length;
|
| - _columnStylesCache = new List(length);
|
| - _columnStateCache = new List(length);
|
| - _valueStylesCache.clear();
|
| - _valueColorCache.clear();
|
| - _valueFilterCache.clear();
|
| - _computeColumnStates();
|
| - }
|
| -
|
| - /// Override this method to handle state changes.
|
| - void handleStateChanges(List<ChangeRecord> changes);
|
| -
|
| - @override
|
| - Extent get extent {
|
| - assert(series != null && area != null);
|
| - var rows = area.data.rows,
|
| - measures = series.measures,
|
| - max = SMALL_INT_MIN,
|
| - min = SMALL_INT_MAX;
|
| -
|
| - for (int i = 0, len = rows.length; i < len; ++i) {
|
| - var row = rows.elementAt(i);
|
| - for (int j = 0, jLen = measures.length; j < jLen; ++j) {
|
| - var value = row.elementAt(measures.elementAt(j));
|
| - if (value != null && value.isFinite) {
|
| - if (value > max) {
|
| - max = value;
|
| - } else if (value < min) {
|
| - min = value;
|
| - }
|
| - }
|
| - }
|
| - }
|
| - return new Extent(min, max);
|
| - }
|
| -
|
| - @override
|
| - Extent extentForRow(Iterable row) {
|
| - assert(series != null && area != null);
|
| - var measures = series.measures,
|
| - max = SMALL_INT_MIN,
|
| - min = SMALL_INT_MAX;
|
| -
|
| - for (int i = 0, len = measures.length; i < len; ++i) {
|
| - var measure = measures.elementAt(i),
|
| - value = row.elementAt(measure);
|
| - if (value != null && value.isFinite) {
|
| - if (value > max) {
|
| - max = value;
|
| - } else if (value < min) {
|
| - min = value;
|
| - }
|
| - }
|
| - }
|
| - return new Extent(min, max);
|
| - }
|
| -
|
| - @override
|
| - Stream<ChartEvent> get onValueMouseOver {
|
| - if (mouseOverController == null) {
|
| - mouseOverController = new StreamController.broadcast(sync: true);
|
| - }
|
| - return mouseOverController.stream;
|
| - }
|
| -
|
| - @override
|
| - Stream<ChartEvent> get onValueMouseOut {
|
| - if (mouseOutController == null) {
|
| - mouseOutController = new StreamController.broadcast(sync: true);
|
| - }
|
| - return mouseOutController.stream;
|
| - }
|
| -
|
| - @override
|
| - Stream<ChartEvent> get onValueClick {
|
| - if (mouseClickController == null) {
|
| - mouseClickController = new StreamController.broadcast(sync: true);
|
| - }
|
| - return mouseClickController.stream;
|
| - }
|
| -
|
| - double get bandInnerPadding => 1.0;
|
| - double get bandOuterPadding =>
|
| - area.theme.getDimensionAxisTheme().axisOuterPadding;
|
| -
|
| - void _computeColumnStates() {
|
| - area.config.series.forEach((ChartSeries series) {
|
| - series.measures.forEach((int column) {
|
| - if (_columnStateCache[column] != null) return;
|
| - int flags = 0;
|
| - if (state != null && area.useRowColoring == false) {
|
| - if (state.highlights.isNotEmpty) {
|
| - flags |= (state.highlights.any((x) => x.first == column)
|
| - ? ChartState.COL_HIGHLIGHTED
|
| - : ChartState.COL_UNHIGHLIGHTED);
|
| - }
|
| - if (state.selection.isNotEmpty) {
|
| - flags |= (state.isSelected(column)
|
| - ? ChartState.COL_SELECTED
|
| - : ChartState.COL_UNSELECTED);
|
| - }
|
| - if (!state.isVisible(column)) {
|
| - flags |= ChartState.COL_HIDDEN;
|
| - }
|
| - if (state.preview == column) {
|
| - flags |= ChartState.COL_PREVIEW;
|
| - }
|
| - if (state.hovered != null && state.hovered.first == column) {
|
| - flags |= ChartState.COL_HOVERED;
|
| - }
|
| - }
|
| - _columnStateCache[column] = flags;
|
| - });
|
| - });
|
| - }
|
| -
|
| - Iterable<String> stylesForColumn(int column) {
|
| - if (_columnStylesCache[column] == null) {
|
| - if (state == null || area.useRowColoring) {
|
| - _columnStylesCache[column] = const[];
|
| - } else {
|
| - var styles = [],
|
| - flags = _columnStateCache[column];
|
| -
|
| - if (flags & ChartState.COL_SELECTED != 0) {
|
| - styles.add(ChartState.COL_SELECTED_CLASS);
|
| - } else if (flags & ChartState.COL_UNSELECTED != 0){
|
| - styles.add(ChartState.COL_UNSELECTED_CLASS);
|
| - }
|
| -
|
| - if (flags & ChartState.COL_HIGHLIGHTED != 0) {
|
| - styles.add(ChartState.COL_HIGHLIGHTED_CLASS);
|
| - } else if (flags & ChartState.COL_UNHIGHLIGHTED != 0) {
|
| - styles.add(ChartState.COL_UNHIGHLIGHTED_CLASS);
|
| - }
|
| -
|
| - if (flags & ChartState.COL_HOVERED != 0) {
|
| - styles.add(ChartState.COL_HOVERED_CLASS);
|
| - }
|
| - if (flags & ChartState.COL_PREVIEW != 0) {
|
| - styles.add(ChartState.COL_PREVIEW_CLASS);
|
| - }
|
| - if (flags & ChartState.COL_HIDDEN != 0) {
|
| - styles.add(ChartState.COL_HIDDEN_CLASS);
|
| - }
|
| -
|
| - _columnStylesCache[column] = styles;
|
| - }
|
| - }
|
| - return _columnStylesCache[column];
|
| - }
|
| -
|
| - String colorForColumn(int column) =>
|
| - theme.getColorForKey(column, _columnStateCache[column]);
|
| -
|
| - String filterForColumn(int column) =>
|
| - theme.getFilterForState(_columnStateCache[column]);
|
| -
|
| - Iterable<String> stylesForValue(int column, int row) {
|
| - var hash = hash2(column, row);
|
| - if (_valueStylesCache[hash] == null) {
|
| - if (state == null) {
|
| - _valueStylesCache[hash] = const[];
|
| - } else {
|
| - var styles = stylesForColumn(column).toList();
|
| - if (state.highlights.isNotEmpty) {
|
| - styles.add(state.highlights.any((x) => x.last == row)
|
| - ? ChartState.VAL_HIGHLIGHTED_CLASS
|
| - : ChartState.VAL_UNHIGHLIGHTED_CLASS);
|
| - }
|
| - if (state.hovered != null && state.hovered.last == row) {
|
| - styles.add(ChartState.VAL_HOVERED_CLASS);
|
| - }
|
| - _valueStylesCache[hash] = styles;
|
| - }
|
| - }
|
| - return _valueStylesCache[hash];
|
| - }
|
| -
|
| - String colorForValue(int column, int row) {
|
| - var hash = hash2(column, row);
|
| - if (_valueColorCache[hash] == null) {
|
| - _cacheColorsAndFilter(hash, column, row);
|
| - }
|
| - return _valueColorCache[hash];
|
| - }
|
| -
|
| - String filterForValue(int column, int row) {
|
| - var hash = hash2(column, row);
|
| - if (_valueFilterCache[hash] == null) {
|
| - _cacheColorsAndFilter(hash, column, row);
|
| - }
|
| - return _valueFilterCache[hash];
|
| - }
|
| -
|
| - _cacheColorsAndFilter(int hash, int column, int row) {
|
| - if (state == null) {
|
| - _valueColorCache[hash] =
|
| - theme.getColorForKey(area.useRowColoring ? row : column);
|
| - _valueFilterCache[hash] = theme.getFilterForState(0);
|
| - } else {
|
| - var flags = _columnStateCache[column];
|
| - if (state.highlights.isNotEmpty) {
|
| - flags |= (state.highlights.any((x) => x.last == row)
|
| - ? ChartState.VAL_HIGHLIGHTED
|
| - : ChartState.VAL_UNHIGHLIGHTED);
|
| - }
|
| - if (state.hovered != null && state.hovered.last == row) {
|
| - flags |= ChartState.VAL_HOVERED;
|
| - }
|
| - _valueColorCache[hash] =
|
| - theme.getColorForKey(area.useRowColoring ? row : column, flags);
|
| - _valueFilterCache[hash] = theme.getFilterForState(flags);
|
| - }
|
| - }
|
| -}
|
|
|